Dropdown.js 6.1 KB

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