123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
- var _excluded = ["width", "height", "visible", "placement", "mask", "wrapClassName", "class"];
- import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
- import { inject, nextTick, defineComponent, ref, onMounted, provide, onUnmounted, watch, computed } from 'vue';
- import { getPropsSlot, initDefaultProps } from '../_util/props-util';
- import classnames from '../_util/classNames';
- import VcDrawer from '../vc-drawer';
- import PropTypes from '../_util/vue-types';
- import CloseOutlined from "@ant-design/icons-vue/es/icons/CloseOutlined";
- import useConfigInject from '../_util/hooks/useConfigInject';
- import { tuple, withInstall } from '../_util/type';
- import omit from '../_util/omit';
- import devWarning from '../vc-util/devWarning';
- var PlacementTypes = tuple('top', 'right', 'bottom', 'left');
- var SizeTypes = tuple('default', 'large');
- var defaultPushState = {
- distance: 180
- };
- export var drawerProps = function drawerProps() {
- return {
- autofocus: {
- type: Boolean,
- default: undefined
- },
- closable: {
- type: Boolean,
- default: undefined
- },
- closeIcon: PropTypes.any,
- destroyOnClose: {
- type: Boolean,
- default: undefined
- },
- forceRender: {
- type: Boolean,
- default: undefined
- },
- getContainer: PropTypes.any,
- maskClosable: {
- type: Boolean,
- default: undefined
- },
- mask: {
- type: Boolean,
- default: undefined
- },
- maskStyle: {
- type: Object,
- default: undefined
- },
- /** @deprecated Use `style` instead */
- wrapStyle: {
- type: Object,
- default: undefined
- },
- style: {
- type: Object,
- default: undefined
- },
- class: PropTypes.any,
- /** @deprecated Use `class` instead */
- wrapClassName: String,
- size: {
- type: String
- },
- drawerStyle: {
- type: Object,
- default: undefined
- },
- headerStyle: {
- type: Object,
- default: undefined
- },
- bodyStyle: {
- type: Object,
- default: undefined
- },
- contentWrapperStyle: {
- type: Object,
- default: undefined
- },
- title: PropTypes.any,
- visible: {
- type: Boolean,
- default: undefined
- },
- width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
- height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
- zIndex: Number,
- prefixCls: String,
- push: PropTypes.oneOfType([PropTypes.looseBool, {
- type: Object
- }]),
- placement: PropTypes.oneOf(PlacementTypes),
- keyboard: {
- type: Boolean,
- default: undefined
- },
- extra: PropTypes.any,
- footer: PropTypes.any,
- footerStyle: {
- type: Object,
- default: undefined
- },
- level: PropTypes.any,
- levelMove: {
- type: [Number, Array, Function]
- },
- handle: PropTypes.any,
- /** @deprecated Use `@afterVisibleChange` instead */
- afterVisibleChange: Function,
- onAfterVisibleChange: Function,
- 'onUpdate:visible': Function,
- onClose: Function
- };
- };
- var Drawer = defineComponent({
- compatConfig: {
- MODE: 3
- },
- name: 'ADrawer',
- inheritAttrs: false,
- props: initDefaultProps(drawerProps(), {
- closable: true,
- placement: 'right',
- maskClosable: true,
- mask: true,
- level: null,
- keyboard: true,
- push: defaultPushState
- }),
- slots: ['closeIcon', 'title', 'extra', 'footer', 'handle'],
- // emits: ['update:visible', 'close', 'afterVisibleChange'],
- setup: function setup(props, _ref) {
- var emit = _ref.emit,
- slots = _ref.slots,
- attrs = _ref.attrs;
- var sPush = ref(false);
- var destroyClose = ref(false);
- var vcDrawer = ref(null);
- var parentDrawerOpts = inject('parentDrawerOpts', null);
- var _useConfigInject = useConfigInject('drawer', props),
- prefixCls = _useConfigInject.prefixCls;
- devWarning(!props.afterVisibleChange, 'Drawer', '`afterVisibleChange` prop is deprecated, please use `@afterVisibleChange` event instead');
- devWarning(props.wrapStyle === undefined, 'Drawer', '`wrapStyle` prop is deprecated, please use `style` instead');
- devWarning(props.wrapClassName === undefined, 'Drawer', '`wrapClassName` prop is deprecated, please use `class` instead');
- var setPush = function setPush() {
- sPush.value = true;
- };
- var setPull = function setPull() {
- sPush.value = false;
- nextTick(function () {
- domFocus();
- });
- };
- provide('parentDrawerOpts', {
- setPush: setPush,
- setPull: setPull
- });
- onMounted(function () {
- var visible = props.visible;
- if (visible && parentDrawerOpts) {
- parentDrawerOpts.setPush();
- }
- });
- onUnmounted(function () {
- if (parentDrawerOpts) {
- parentDrawerOpts.setPull();
- }
- });
- watch(function () {
- return props.visible;
- }, function (visible) {
- if (parentDrawerOpts) {
- if (visible) {
- parentDrawerOpts.setPush();
- } else {
- parentDrawerOpts.setPull();
- }
- }
- }, {
- flush: 'post'
- });
- var domFocus = function domFocus() {
- var _vcDrawer$value, _vcDrawer$value$domFo;
- (_vcDrawer$value = vcDrawer.value) === null || _vcDrawer$value === void 0 ? void 0 : (_vcDrawer$value$domFo = _vcDrawer$value.domFocus) === null || _vcDrawer$value$domFo === void 0 ? void 0 : _vcDrawer$value$domFo.call(_vcDrawer$value);
- };
- var close = function close(e) {
- emit('update:visible', false);
- emit('close', e);
- };
- var afterVisibleChange = function afterVisibleChange(visible) {
- var _props$afterVisibleCh;
- (_props$afterVisibleCh = props.afterVisibleChange) === null || _props$afterVisibleCh === void 0 ? void 0 : _props$afterVisibleCh.call(props, visible);
- emit('afterVisibleChange', visible);
- };
- var destroyOnClose = computed(function () {
- return props.destroyOnClose && !props.visible;
- });
- var onDestroyTransitionEnd = function onDestroyTransitionEnd() {
- var isDestroyOnClose = destroyOnClose.value;
- if (!isDestroyOnClose) {
- return;
- }
- if (!props.visible) {
- destroyClose.value = true;
- }
- };
- var pushTransform = computed(function () {
- var push = props.push,
- placement = props.placement;
- var distance;
- if (typeof push === 'boolean') {
- distance = push ? defaultPushState.distance : 0;
- } else {
- distance = push.distance;
- }
- distance = parseFloat(String(distance || 0));
- if (placement === 'left' || placement === 'right') {
- return "translateX(".concat(placement === 'left' ? distance : -distance, "px)");
- }
- if (placement === 'top' || placement === 'bottom') {
- return "translateY(".concat(placement === 'top' ? distance : -distance, "px)");
- }
- return null;
- });
- var offsetStyle = computed(function () {
- // https://github.com/ant-design/ant-design/issues/24287
- var visible = props.visible,
- mask = props.mask,
- placement = props.placement,
- _props$size = props.size,
- size = _props$size === void 0 ? 'default' : _props$size,
- width = props.width,
- height = props.height;
- if (!visible && !mask) {
- return {};
- }
- var val = {};
- if (placement === 'left' || placement === 'right') {
- var defaultWidth = size === 'large' ? 736 : 378;
- val.width = typeof width === 'undefined' ? defaultWidth : width;
- val.width = typeof val.width === 'string' ? val.width : "".concat(val.width, "px");
- } else {
- var defaultHeight = size === 'large' ? 736 : 378;
- val.height = typeof height === 'undefined' ? defaultHeight : height;
- val.height = typeof val.height === 'string' ? val.height : "".concat(val.height, "px");
- }
- return val;
- });
- var drawerStyle = computed(function () {
- var zIndex = props.zIndex,
- wrapStyle = props.wrapStyle,
- mask = props.mask,
- style = props.style;
- var val = mask ? {} : offsetStyle.value;
- return _objectSpread(_objectSpread(_objectSpread({
- zIndex: zIndex,
- transform: sPush.value ? pushTransform.value : undefined
- }, val), wrapStyle), style);
- });
- var renderHeader = function renderHeader(prefixCls) {
- var closable = props.closable,
- headerStyle = props.headerStyle;
- var extra = getPropsSlot(slots, props, 'extra');
- var title = getPropsSlot(slots, props, 'title');
- if (!title && !closable) {
- return null;
- }
- return _createVNode("div", {
- "class": classnames("".concat(prefixCls, "-header"), _defineProperty({}, "".concat(prefixCls, "-header-close-only"), closable && !title && !extra)),
- "style": headerStyle
- }, [_createVNode("div", {
- "class": "".concat(prefixCls, "-header-title")
- }, [renderCloseIcon(prefixCls), title && _createVNode("div", {
- "class": "".concat(prefixCls, "-title")
- }, [title])]), extra && _createVNode("div", {
- "class": "".concat(prefixCls, "-extra")
- }, [extra])]);
- };
- var renderCloseIcon = function renderCloseIcon(prefixCls) {
- var _slots$closeIcon;
- var closable = props.closable;
- var $closeIcon = slots.closeIcon ? (_slots$closeIcon = slots.closeIcon) === null || _slots$closeIcon === void 0 ? void 0 : _slots$closeIcon.call(slots) : props.closeIcon;
- return closable && _createVNode("button", {
- "key": "closer",
- "onClick": close,
- "aria-label": "Close",
- "class": "".concat(prefixCls, "-close")
- }, [$closeIcon === undefined ? _createVNode(CloseOutlined, null, null) : $closeIcon]);
- };
- var renderBody = function renderBody(prefixCls) {
- var _slots$default;
- if (destroyClose.value && !props.visible) {
- return null;
- }
- destroyClose.value = false;
- var bodyStyle = props.bodyStyle,
- drawerStyle = props.drawerStyle;
- var containerStyle = {};
- var isDestroyOnClose = destroyOnClose.value;
- if (isDestroyOnClose) {
- // Increase the opacity transition, delete children after closing.
- containerStyle.opacity = 0;
- containerStyle.transition = 'opacity .3s';
- }
- return _createVNode("div", {
- "class": "".concat(prefixCls, "-wrapper-body"),
- "style": _objectSpread(_objectSpread({}, containerStyle), drawerStyle),
- "onTransitionend": onDestroyTransitionEnd
- }, [renderHeader(prefixCls), _createVNode("div", {
- "key": "body",
- "class": "".concat(prefixCls, "-body"),
- "style": bodyStyle
- }, [(_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]), renderFooter(prefixCls)]);
- };
- var renderFooter = function renderFooter(prefixCls) {
- var footer = getPropsSlot(slots, props, 'footer');
- if (!footer) {
- return null;
- }
- var footerClassName = "".concat(prefixCls, "-footer");
- return _createVNode("div", {
- "class": footerClassName,
- "style": props.footerStyle
- }, [footer]);
- };
- return function () {
- var _classnames2;
- var width = props.width,
- height = props.height,
- visible = props.visible,
- placement = props.placement,
- mask = props.mask,
- wrapClassName = props.wrapClassName,
- className = props.class,
- rest = _objectWithoutProperties(props, _excluded);
- var val = mask ? offsetStyle.value : {};
- var haveMask = mask ? '' : 'no-mask';
- var vcDrawerProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, attrs), omit(rest, ['size', 'closeIcon', 'closable', 'destroyOnClose', 'drawerStyle', 'headerStyle', 'bodyStyle', 'title', 'push', 'wrapStyle', 'onAfterVisibleChange', 'onClose', 'onUpdate:visible'])), val), {}, {
- onClose: close,
- afterVisibleChange: afterVisibleChange,
- handler: false,
- prefixCls: prefixCls.value,
- open: visible,
- showMask: mask,
- placement: placement,
- class: classnames((_classnames2 = {}, _defineProperty(_classnames2, className, className), _defineProperty(_classnames2, wrapClassName, !!wrapClassName), _defineProperty(_classnames2, haveMask, !!haveMask), _classnames2)),
- style: drawerStyle.value,
- ref: vcDrawer
- });
- return _createVNode(VcDrawer, vcDrawerProps, {
- handler: props.handle ? function () {
- return props.handle;
- } : slots.handle,
- default: function _default() {
- return renderBody(prefixCls.value);
- }
- });
- };
- }
- });
- export default withInstall(Drawer);
|