index.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.drawerProps = exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  11. var _propsUtil = require("../_util/props-util");
  12. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  13. var _vcDrawer = _interopRequireDefault(require("../vc-drawer"));
  14. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  15. var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/CloseOutlined"));
  16. var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject"));
  17. var _type = require("../_util/type");
  18. var _omit = _interopRequireDefault(require("../_util/omit"));
  19. var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
  20. var _excluded = ["width", "height", "visible", "placement", "mask", "wrapClassName", "class"];
  21. var PlacementTypes = (0, _type.tuple)('top', 'right', 'bottom', 'left');
  22. var SizeTypes = (0, _type.tuple)('default', 'large');
  23. var defaultPushState = {
  24. distance: 180
  25. };
  26. var drawerProps = function drawerProps() {
  27. return {
  28. autofocus: {
  29. type: Boolean,
  30. default: undefined
  31. },
  32. closable: {
  33. type: Boolean,
  34. default: undefined
  35. },
  36. closeIcon: _vueTypes.default.any,
  37. destroyOnClose: {
  38. type: Boolean,
  39. default: undefined
  40. },
  41. forceRender: {
  42. type: Boolean,
  43. default: undefined
  44. },
  45. getContainer: _vueTypes.default.any,
  46. maskClosable: {
  47. type: Boolean,
  48. default: undefined
  49. },
  50. mask: {
  51. type: Boolean,
  52. default: undefined
  53. },
  54. maskStyle: {
  55. type: Object,
  56. default: undefined
  57. },
  58. /** @deprecated Use `style` instead */
  59. wrapStyle: {
  60. type: Object,
  61. default: undefined
  62. },
  63. style: {
  64. type: Object,
  65. default: undefined
  66. },
  67. class: _vueTypes.default.any,
  68. /** @deprecated Use `class` instead */
  69. wrapClassName: String,
  70. size: {
  71. type: String
  72. },
  73. drawerStyle: {
  74. type: Object,
  75. default: undefined
  76. },
  77. headerStyle: {
  78. type: Object,
  79. default: undefined
  80. },
  81. bodyStyle: {
  82. type: Object,
  83. default: undefined
  84. },
  85. contentWrapperStyle: {
  86. type: Object,
  87. default: undefined
  88. },
  89. title: _vueTypes.default.any,
  90. visible: {
  91. type: Boolean,
  92. default: undefined
  93. },
  94. width: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.number]),
  95. height: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.number]),
  96. zIndex: Number,
  97. prefixCls: String,
  98. push: _vueTypes.default.oneOfType([_vueTypes.default.looseBool, {
  99. type: Object
  100. }]),
  101. placement: _vueTypes.default.oneOf(PlacementTypes),
  102. keyboard: {
  103. type: Boolean,
  104. default: undefined
  105. },
  106. extra: _vueTypes.default.any,
  107. footer: _vueTypes.default.any,
  108. footerStyle: {
  109. type: Object,
  110. default: undefined
  111. },
  112. level: _vueTypes.default.any,
  113. levelMove: {
  114. type: [Number, Array, Function]
  115. },
  116. handle: _vueTypes.default.any,
  117. /** @deprecated Use `@afterVisibleChange` instead */
  118. afterVisibleChange: Function,
  119. onAfterVisibleChange: Function,
  120. 'onUpdate:visible': Function,
  121. onClose: Function
  122. };
  123. };
  124. exports.drawerProps = drawerProps;
  125. var Drawer = (0, _vue.defineComponent)({
  126. compatConfig: {
  127. MODE: 3
  128. },
  129. name: 'ADrawer',
  130. inheritAttrs: false,
  131. props: (0, _propsUtil.initDefaultProps)(drawerProps(), {
  132. closable: true,
  133. placement: 'right',
  134. maskClosable: true,
  135. mask: true,
  136. level: null,
  137. keyboard: true,
  138. push: defaultPushState
  139. }),
  140. slots: ['closeIcon', 'title', 'extra', 'footer', 'handle'],
  141. // emits: ['update:visible', 'close', 'afterVisibleChange'],
  142. setup: function setup(props, _ref) {
  143. var emit = _ref.emit,
  144. slots = _ref.slots,
  145. attrs = _ref.attrs;
  146. var sPush = (0, _vue.ref)(false);
  147. var destroyClose = (0, _vue.ref)(false);
  148. var vcDrawer = (0, _vue.ref)(null);
  149. var parentDrawerOpts = (0, _vue.inject)('parentDrawerOpts', null);
  150. var _useConfigInject = (0, _useConfigInject2.default)('drawer', props),
  151. prefixCls = _useConfigInject.prefixCls;
  152. (0, _devWarning.default)(!props.afterVisibleChange, 'Drawer', '`afterVisibleChange` prop is deprecated, please use `@afterVisibleChange` event instead');
  153. (0, _devWarning.default)(props.wrapStyle === undefined, 'Drawer', '`wrapStyle` prop is deprecated, please use `style` instead');
  154. (0, _devWarning.default)(props.wrapClassName === undefined, 'Drawer', '`wrapClassName` prop is deprecated, please use `class` instead');
  155. var setPush = function setPush() {
  156. sPush.value = true;
  157. };
  158. var setPull = function setPull() {
  159. sPush.value = false;
  160. (0, _vue.nextTick)(function () {
  161. domFocus();
  162. });
  163. };
  164. (0, _vue.provide)('parentDrawerOpts', {
  165. setPush: setPush,
  166. setPull: setPull
  167. });
  168. (0, _vue.onMounted)(function () {
  169. var visible = props.visible;
  170. if (visible && parentDrawerOpts) {
  171. parentDrawerOpts.setPush();
  172. }
  173. });
  174. (0, _vue.onUnmounted)(function () {
  175. if (parentDrawerOpts) {
  176. parentDrawerOpts.setPull();
  177. }
  178. });
  179. (0, _vue.watch)(function () {
  180. return props.visible;
  181. }, function (visible) {
  182. if (parentDrawerOpts) {
  183. if (visible) {
  184. parentDrawerOpts.setPush();
  185. } else {
  186. parentDrawerOpts.setPull();
  187. }
  188. }
  189. }, {
  190. flush: 'post'
  191. });
  192. var domFocus = function domFocus() {
  193. var _vcDrawer$value, _vcDrawer$value$domFo;
  194. (_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);
  195. };
  196. var close = function close(e) {
  197. emit('update:visible', false);
  198. emit('close', e);
  199. };
  200. var afterVisibleChange = function afterVisibleChange(visible) {
  201. var _props$afterVisibleCh;
  202. (_props$afterVisibleCh = props.afterVisibleChange) === null || _props$afterVisibleCh === void 0 ? void 0 : _props$afterVisibleCh.call(props, visible);
  203. emit('afterVisibleChange', visible);
  204. };
  205. var destroyOnClose = (0, _vue.computed)(function () {
  206. return props.destroyOnClose && !props.visible;
  207. });
  208. var onDestroyTransitionEnd = function onDestroyTransitionEnd() {
  209. var isDestroyOnClose = destroyOnClose.value;
  210. if (!isDestroyOnClose) {
  211. return;
  212. }
  213. if (!props.visible) {
  214. destroyClose.value = true;
  215. }
  216. };
  217. var pushTransform = (0, _vue.computed)(function () {
  218. var push = props.push,
  219. placement = props.placement;
  220. var distance;
  221. if (typeof push === 'boolean') {
  222. distance = push ? defaultPushState.distance : 0;
  223. } else {
  224. distance = push.distance;
  225. }
  226. distance = parseFloat(String(distance || 0));
  227. if (placement === 'left' || placement === 'right') {
  228. return "translateX(".concat(placement === 'left' ? distance : -distance, "px)");
  229. }
  230. if (placement === 'top' || placement === 'bottom') {
  231. return "translateY(".concat(placement === 'top' ? distance : -distance, "px)");
  232. }
  233. return null;
  234. });
  235. var offsetStyle = (0, _vue.computed)(function () {
  236. // https://github.com/ant-design/ant-design/issues/24287
  237. var visible = props.visible,
  238. mask = props.mask,
  239. placement = props.placement,
  240. _props$size = props.size,
  241. size = _props$size === void 0 ? 'default' : _props$size,
  242. width = props.width,
  243. height = props.height;
  244. if (!visible && !mask) {
  245. return {};
  246. }
  247. var val = {};
  248. if (placement === 'left' || placement === 'right') {
  249. var defaultWidth = size === 'large' ? 736 : 378;
  250. val.width = typeof width === 'undefined' ? defaultWidth : width;
  251. val.width = typeof val.width === 'string' ? val.width : "".concat(val.width, "px");
  252. } else {
  253. var defaultHeight = size === 'large' ? 736 : 378;
  254. val.height = typeof height === 'undefined' ? defaultHeight : height;
  255. val.height = typeof val.height === 'string' ? val.height : "".concat(val.height, "px");
  256. }
  257. return val;
  258. });
  259. var drawerStyle = (0, _vue.computed)(function () {
  260. var zIndex = props.zIndex,
  261. wrapStyle = props.wrapStyle,
  262. mask = props.mask,
  263. style = props.style;
  264. var val = mask ? {} : offsetStyle.value;
  265. return (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({
  266. zIndex: zIndex,
  267. transform: sPush.value ? pushTransform.value : undefined
  268. }, val), wrapStyle), style);
  269. });
  270. var renderHeader = function renderHeader(prefixCls) {
  271. var closable = props.closable,
  272. headerStyle = props.headerStyle;
  273. var extra = (0, _propsUtil.getPropsSlot)(slots, props, 'extra');
  274. var title = (0, _propsUtil.getPropsSlot)(slots, props, 'title');
  275. if (!title && !closable) {
  276. return null;
  277. }
  278. return (0, _vue.createVNode)("div", {
  279. "class": (0, _classNames.default)("".concat(prefixCls, "-header"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-header-close-only"), closable && !title && !extra)),
  280. "style": headerStyle
  281. }, [(0, _vue.createVNode)("div", {
  282. "class": "".concat(prefixCls, "-header-title")
  283. }, [renderCloseIcon(prefixCls), title && (0, _vue.createVNode)("div", {
  284. "class": "".concat(prefixCls, "-title")
  285. }, [title])]), extra && (0, _vue.createVNode)("div", {
  286. "class": "".concat(prefixCls, "-extra")
  287. }, [extra])]);
  288. };
  289. var renderCloseIcon = function renderCloseIcon(prefixCls) {
  290. var _slots$closeIcon;
  291. var closable = props.closable;
  292. var $closeIcon = slots.closeIcon ? (_slots$closeIcon = slots.closeIcon) === null || _slots$closeIcon === void 0 ? void 0 : _slots$closeIcon.call(slots) : props.closeIcon;
  293. return closable && (0, _vue.createVNode)("button", {
  294. "key": "closer",
  295. "onClick": close,
  296. "aria-label": "Close",
  297. "class": "".concat(prefixCls, "-close")
  298. }, [$closeIcon === undefined ? (0, _vue.createVNode)(_CloseOutlined.default, null, null) : $closeIcon]);
  299. };
  300. var renderBody = function renderBody(prefixCls) {
  301. var _slots$default;
  302. if (destroyClose.value && !props.visible) {
  303. return null;
  304. }
  305. destroyClose.value = false;
  306. var bodyStyle = props.bodyStyle,
  307. drawerStyle = props.drawerStyle;
  308. var containerStyle = {};
  309. var isDestroyOnClose = destroyOnClose.value;
  310. if (isDestroyOnClose) {
  311. // Increase the opacity transition, delete children after closing.
  312. containerStyle.opacity = 0;
  313. containerStyle.transition = 'opacity .3s';
  314. }
  315. return (0, _vue.createVNode)("div", {
  316. "class": "".concat(prefixCls, "-wrapper-body"),
  317. "style": (0, _objectSpread2.default)((0, _objectSpread2.default)({}, containerStyle), drawerStyle),
  318. "onTransitionend": onDestroyTransitionEnd
  319. }, [renderHeader(prefixCls), (0, _vue.createVNode)("div", {
  320. "key": "body",
  321. "class": "".concat(prefixCls, "-body"),
  322. "style": bodyStyle
  323. }, [(_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]), renderFooter(prefixCls)]);
  324. };
  325. var renderFooter = function renderFooter(prefixCls) {
  326. var footer = (0, _propsUtil.getPropsSlot)(slots, props, 'footer');
  327. if (!footer) {
  328. return null;
  329. }
  330. var footerClassName = "".concat(prefixCls, "-footer");
  331. return (0, _vue.createVNode)("div", {
  332. "class": footerClassName,
  333. "style": props.footerStyle
  334. }, [footer]);
  335. };
  336. return function () {
  337. var _classnames2;
  338. var width = props.width,
  339. height = props.height,
  340. visible = props.visible,
  341. placement = props.placement,
  342. mask = props.mask,
  343. wrapClassName = props.wrapClassName,
  344. className = props.class,
  345. rest = (0, _objectWithoutProperties2.default)(props, _excluded);
  346. var val = mask ? offsetStyle.value : {};
  347. var haveMask = mask ? '' : 'no-mask';
  348. var vcDrawerProps = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), (0, _omit.default)(rest, ['size', 'closeIcon', 'closable', 'destroyOnClose', 'drawerStyle', 'headerStyle', 'bodyStyle', 'title', 'push', 'wrapStyle', 'onAfterVisibleChange', 'onClose', 'onUpdate:visible'])), val), {}, {
  349. onClose: close,
  350. afterVisibleChange: afterVisibleChange,
  351. handler: false,
  352. prefixCls: prefixCls.value,
  353. open: visible,
  354. showMask: mask,
  355. placement: placement,
  356. class: (0, _classNames.default)((_classnames2 = {}, (0, _defineProperty2.default)(_classnames2, className, className), (0, _defineProperty2.default)(_classnames2, wrapClassName, !!wrapClassName), (0, _defineProperty2.default)(_classnames2, haveMask, !!haveMask), _classnames2)),
  357. style: drawerStyle.value,
  358. ref: vcDrawer
  359. });
  360. return (0, _vue.createVNode)(_vcDrawer.default, vcDrawerProps, {
  361. handler: props.handle ? function () {
  362. return props.handle;
  363. } : slots.handle,
  364. default: function _default() {
  365. return renderBody(prefixCls.value);
  366. }
  367. });
  368. };
  369. }
  370. });
  371. var _default2 = (0, _type.withInstall)(Drawer);
  372. exports.default = _default2;