Dropdown.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  10. var _vcTrigger = _interopRequireDefault(require("../vc-trigger"));
  11. var _placements = _interopRequireDefault(require("./placements"));
  12. var _vnode = require("../_util/vnode");
  13. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  14. var _propsUtil = require("../_util/props-util");
  15. var __rest = void 0 && (void 0).__rest || function (s, e) {
  16. var t = {};
  17. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
  18. if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  19. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
  20. }
  21. return t;
  22. };
  23. var _default = exports.default = (0, _vue.defineComponent)({
  24. compatConfig: {
  25. MODE: 3
  26. },
  27. props: {
  28. minOverlayWidthMatchTrigger: {
  29. type: Boolean,
  30. default: undefined
  31. },
  32. arrow: {
  33. type: Boolean,
  34. default: false
  35. },
  36. prefixCls: _vueTypes.default.string.def('rc-dropdown'),
  37. transitionName: String,
  38. overlayClassName: _vueTypes.default.string.def(''),
  39. openClassName: String,
  40. animation: _vueTypes.default.any,
  41. align: _vueTypes.default.object,
  42. overlayStyle: {
  43. type: Object,
  44. default: undefined
  45. },
  46. placement: _vueTypes.default.string.def('bottomLeft'),
  47. overlay: _vueTypes.default.any,
  48. trigger: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.arrayOf(_vueTypes.default.string)]).def('hover'),
  49. alignPoint: {
  50. type: Boolean,
  51. default: undefined
  52. },
  53. showAction: _vueTypes.default.array,
  54. hideAction: _vueTypes.default.array,
  55. getPopupContainer: Function,
  56. visible: {
  57. type: Boolean,
  58. default: undefined
  59. },
  60. defaultVisible: {
  61. type: Boolean,
  62. default: false
  63. },
  64. mouseEnterDelay: _vueTypes.default.number.def(0.15),
  65. mouseLeaveDelay: _vueTypes.default.number.def(0.1)
  66. },
  67. emits: ['visibleChange', 'overlayClick'],
  68. setup(props, _ref) {
  69. let {
  70. slots,
  71. emit,
  72. expose
  73. } = _ref;
  74. const triggerVisible = (0, _vue.ref)(!!props.visible);
  75. (0, _vue.watch)(() => props.visible, val => {
  76. if (val !== undefined) {
  77. triggerVisible.value = val;
  78. }
  79. });
  80. const triggerRef = (0, _vue.ref)();
  81. expose({
  82. triggerRef
  83. });
  84. const onClick = e => {
  85. if (props.visible === undefined) {
  86. triggerVisible.value = false;
  87. }
  88. emit('overlayClick', e);
  89. };
  90. const onVisibleChange = visible => {
  91. if (props.visible === undefined) {
  92. triggerVisible.value = visible;
  93. }
  94. emit('visibleChange', visible);
  95. };
  96. const getMenuElement = () => {
  97. var _a;
  98. const overlayElement = (_a = slots.overlay) === null || _a === void 0 ? void 0 : _a.call(slots);
  99. const extraOverlayProps = {
  100. prefixCls: `${props.prefixCls}-menu`,
  101. onClick
  102. };
  103. return (0, _vue.createVNode)(_vue.Fragment, {
  104. "key": _propsUtil.skipFlattenKey
  105. }, [props.arrow && (0, _vue.createVNode)("div", {
  106. "class": `${props.prefixCls}-arrow`
  107. }, null), (0, _vnode.cloneElement)(overlayElement, extraOverlayProps, false)]);
  108. };
  109. const minOverlayWidthMatchTrigger = (0, _vue.computed)(() => {
  110. const {
  111. minOverlayWidthMatchTrigger: matchTrigger = !props.alignPoint
  112. } = props;
  113. return matchTrigger;
  114. });
  115. const renderChildren = () => {
  116. var _a;
  117. const children = (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
  118. return triggerVisible.value && children ? (0, _vnode.cloneElement)(children[0], {
  119. class: props.openClassName || `${props.prefixCls}-open`
  120. }, false) : children;
  121. };
  122. const triggerHideAction = (0, _vue.computed)(() => {
  123. if (!props.hideAction && props.trigger.indexOf('contextmenu') !== -1) {
  124. return ['click'];
  125. }
  126. return props.hideAction;
  127. });
  128. return () => {
  129. const {
  130. prefixCls,
  131. arrow,
  132. showAction,
  133. overlayStyle,
  134. trigger,
  135. placement,
  136. align,
  137. getPopupContainer,
  138. transitionName,
  139. animation,
  140. overlayClassName
  141. } = props,
  142. otherProps = __rest(props, ["prefixCls", "arrow", "showAction", "overlayStyle", "trigger", "placement", "align", "getPopupContainer", "transitionName", "animation", "overlayClassName"]);
  143. return (0, _vue.createVNode)(_vcTrigger.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, otherProps), {}, {
  144. "prefixCls": prefixCls,
  145. "ref": triggerRef,
  146. "popupClassName": (0, _classNames.default)(overlayClassName, {
  147. [`${prefixCls}-show-arrow`]: arrow
  148. }),
  149. "popupStyle": overlayStyle,
  150. "builtinPlacements": _placements.default,
  151. "action": trigger,
  152. "showAction": showAction,
  153. "hideAction": triggerHideAction.value || [],
  154. "popupPlacement": placement,
  155. "popupAlign": align,
  156. "popupTransitionName": transitionName,
  157. "popupAnimation": animation,
  158. "popupVisible": triggerVisible.value,
  159. "stretch": minOverlayWidthMatchTrigger.value ? 'minWidth' : '',
  160. "onPopupVisibleChange": onVisibleChange,
  161. "getPopupContainer": getPopupContainer
  162. }), {
  163. popup: getMenuElement,
  164. default: renderChildren
  165. });
  166. };
  167. }
  168. });