@expcat/tigercat-vue 1.2.14 → 1.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/{chunk-LDDGBB3V.mjs → chunk-54G23KA7.mjs} +79 -18
  2. package/dist/{chunk-2GQE47OY.mjs → chunk-DSHV7EAX.mjs} +45 -4
  3. package/dist/{chunk-FXS5GHQZ.js → chunk-IQZX54SQ.js} +45 -4
  4. package/dist/{chunk-V32X2OEO.js → chunk-JZJEZKGN.js} +1 -1
  5. package/dist/{chunk-TGIXSJI3.mjs → chunk-LS4VI4RG.mjs} +1 -1
  6. package/dist/{chunk-4OOR4524.js → chunk-O5DBHXGJ.js} +86 -25
  7. package/dist/components/ActivityFeed.d.mts +2 -2
  8. package/dist/components/ActivityFeed.d.ts +2 -2
  9. package/dist/components/Affix.d.mts +4 -4
  10. package/dist/components/Affix.d.ts +4 -4
  11. package/dist/components/Alert.d.mts +2 -2
  12. package/dist/components/Alert.d.ts +2 -2
  13. package/dist/components/Anchor.d.mts +3 -3
  14. package/dist/components/Anchor.d.ts +3 -3
  15. package/dist/components/AutoComplete.d.mts +2 -2
  16. package/dist/components/AutoComplete.d.ts +2 -2
  17. package/dist/components/Avatar.d.mts +1 -1
  18. package/dist/components/Avatar.d.ts +1 -1
  19. package/dist/components/AvatarGroup.d.mts +1 -1
  20. package/dist/components/AvatarGroup.d.ts +1 -1
  21. package/dist/components/BackTop.d.mts +1 -1
  22. package/dist/components/BackTop.d.ts +1 -1
  23. package/dist/components/Badge.d.mts +1 -1
  24. package/dist/components/Badge.d.ts +1 -1
  25. package/dist/components/Breadcrumb.d.mts +1 -1
  26. package/dist/components/Breadcrumb.d.ts +1 -1
  27. package/dist/components/Button.d.mts +2 -2
  28. package/dist/components/Button.d.ts +2 -2
  29. package/dist/components/ButtonGroup.d.mts +1 -1
  30. package/dist/components/ButtonGroup.d.ts +1 -1
  31. package/dist/components/Card.d.mts +2 -2
  32. package/dist/components/Card.d.ts +2 -2
  33. package/dist/components/ChatWindow.d.mts +1 -1
  34. package/dist/components/ChatWindow.d.ts +1 -1
  35. package/dist/components/CodeEditor.d.mts +2 -2
  36. package/dist/components/CodeEditor.d.ts +2 -2
  37. package/dist/components/CollapsePanel.d.mts +1 -1
  38. package/dist/components/CollapsePanel.d.ts +1 -1
  39. package/dist/components/CommentThread.d.mts +1 -1
  40. package/dist/components/CommentThread.d.ts +1 -1
  41. package/dist/components/Countdown.d.mts +1 -1
  42. package/dist/components/Countdown.d.ts +1 -1
  43. package/dist/components/DataTableWithToolbar.d.mts +3 -3
  44. package/dist/components/DataTableWithToolbar.d.ts +3 -3
  45. package/dist/components/DatePicker.d.mts +2 -2
  46. package/dist/components/DatePicker.d.ts +2 -2
  47. package/dist/components/Descriptions.d.mts +1 -1
  48. package/dist/components/Descriptions.d.ts +1 -1
  49. package/dist/components/Drawer.d.mts +75 -6
  50. package/dist/components/Drawer.d.ts +75 -6
  51. package/dist/components/Drawer.js +2 -2
  52. package/dist/components/Drawer.mjs +1 -1
  53. package/dist/components/FileManager.d.mts +1 -1
  54. package/dist/components/FileManager.d.ts +1 -1
  55. package/dist/components/FloatButton.d.mts +1 -1
  56. package/dist/components/FloatButton.d.ts +1 -1
  57. package/dist/components/FormWizard.d.mts +2 -2
  58. package/dist/components/FormWizard.d.ts +2 -2
  59. package/dist/components/FunnelChart.d.mts +1 -1
  60. package/dist/components/FunnelChart.d.ts +1 -1
  61. package/dist/components/GaugeChart.d.mts +2 -2
  62. package/dist/components/GaugeChart.d.ts +2 -2
  63. package/dist/components/HeatmapChart.d.mts +1 -1
  64. package/dist/components/HeatmapChart.d.ts +1 -1
  65. package/dist/components/ImageAnnotation.d.mts +2 -2
  66. package/dist/components/ImageAnnotation.d.ts +2 -2
  67. package/dist/components/ImagePreview.d.mts +1 -1
  68. package/dist/components/ImagePreview.d.ts +1 -1
  69. package/dist/components/InfiniteScroll.d.mts +1 -1
  70. package/dist/components/InfiniteScroll.d.ts +1 -1
  71. package/dist/components/Input.d.mts +1 -1
  72. package/dist/components/Input.d.ts +1 -1
  73. package/dist/components/InputGroup.d.mts +1 -1
  74. package/dist/components/InputGroup.d.ts +1 -1
  75. package/dist/components/InputNumber.d.mts +2 -2
  76. package/dist/components/InputNumber.d.ts +2 -2
  77. package/dist/components/Kanban.d.mts +1 -1
  78. package/dist/components/Kanban.d.ts +1 -1
  79. package/dist/components/List.d.mts +2 -2
  80. package/dist/components/List.d.ts +2 -2
  81. package/dist/components/Loading.d.mts +1 -1
  82. package/dist/components/Loading.d.ts +1 -1
  83. package/dist/components/MarkdownEditor.d.mts +3 -3
  84. package/dist/components/MarkdownEditor.d.ts +3 -3
  85. package/dist/components/Mentions.d.mts +2 -2
  86. package/dist/components/Mentions.d.ts +2 -2
  87. package/dist/components/Menu.d.mts +14 -3
  88. package/dist/components/Menu.d.ts +14 -3
  89. package/dist/components/Menu.js +3 -2
  90. package/dist/components/Menu.mjs +2 -1
  91. package/dist/components/MenuItem.js +4 -3
  92. package/dist/components/MenuItem.mjs +2 -1
  93. package/dist/components/MenuItemGroup.js +4 -3
  94. package/dist/components/MenuItemGroup.mjs +2 -1
  95. package/dist/components/Message.js +2 -2
  96. package/dist/components/Message.mjs +1 -1
  97. package/dist/components/Modal.d.mts +6 -6
  98. package/dist/components/Modal.d.ts +6 -6
  99. package/dist/components/NotificationCenter.d.mts +2 -2
  100. package/dist/components/NotificationCenter.d.ts +2 -2
  101. package/dist/components/NumberKeyboard.d.mts +1 -1
  102. package/dist/components/NumberKeyboard.d.ts +1 -1
  103. package/dist/components/OrgChart.d.mts +1 -1
  104. package/dist/components/OrgChart.d.ts +1 -1
  105. package/dist/components/Pagination.d.mts +2 -2
  106. package/dist/components/Pagination.d.ts +2 -2
  107. package/dist/components/Popconfirm.d.mts +3 -3
  108. package/dist/components/Popconfirm.d.ts +3 -3
  109. package/dist/components/Popover.d.mts +3 -3
  110. package/dist/components/Popover.d.ts +3 -3
  111. package/dist/components/Progress.d.mts +5 -5
  112. package/dist/components/Progress.d.ts +5 -5
  113. package/dist/components/QRCode.d.mts +1 -1
  114. package/dist/components/QRCode.d.ts +1 -1
  115. package/dist/components/RichTextEditor.d.mts +2 -2
  116. package/dist/components/RichTextEditor.d.ts +2 -2
  117. package/dist/components/ScrollSpy.d.mts +2 -2
  118. package/dist/components/ScrollSpy.d.ts +2 -2
  119. package/dist/components/Segmented.d.mts +2 -2
  120. package/dist/components/Segmented.d.ts +2 -2
  121. package/dist/components/Select.d.mts +1 -1
  122. package/dist/components/Select.d.ts +1 -1
  123. package/dist/components/Signature.d.mts +2 -2
  124. package/dist/components/Signature.d.ts +2 -2
  125. package/dist/components/Skeleton.d.mts +1 -1
  126. package/dist/components/Skeleton.d.ts +1 -1
  127. package/dist/components/Slider.d.mts +1 -1
  128. package/dist/components/Slider.d.ts +1 -1
  129. package/dist/components/Splitter.d.mts +1 -1
  130. package/dist/components/Splitter.d.ts +1 -1
  131. package/dist/components/Spotlight.d.mts +2 -2
  132. package/dist/components/Spotlight.d.ts +2 -2
  133. package/dist/components/Statistic.d.mts +1 -1
  134. package/dist/components/Statistic.d.ts +1 -1
  135. package/dist/components/Steps.d.mts +2 -2
  136. package/dist/components/Steps.d.ts +2 -2
  137. package/dist/components/SubMenu.js +4 -3
  138. package/dist/components/SubMenu.mjs +2 -1
  139. package/dist/components/Tabs.d.mts +1 -1
  140. package/dist/components/Tabs.d.ts +1 -1
  141. package/dist/components/Tag.d.mts +2 -2
  142. package/dist/components/Tag.d.ts +2 -2
  143. package/dist/components/TaskBoard.d.mts +1 -1
  144. package/dist/components/TaskBoard.d.ts +1 -1
  145. package/dist/components/Textarea.d.mts +1 -1
  146. package/dist/components/Textarea.d.ts +1 -1
  147. package/dist/components/TimePicker.d.mts +2 -2
  148. package/dist/components/TimePicker.d.ts +2 -2
  149. package/dist/components/Timeline.d.mts +2 -2
  150. package/dist/components/Timeline.d.ts +2 -2
  151. package/dist/components/Tour.d.mts +1 -1
  152. package/dist/components/Tour.d.ts +1 -1
  153. package/dist/components/Tree.d.mts +2 -2
  154. package/dist/components/Tree.d.ts +2 -2
  155. package/dist/components/Upload.d.mts +3 -3
  156. package/dist/components/Upload.d.ts +3 -3
  157. package/dist/components/VirtualTable.d.mts +2 -2
  158. package/dist/components/VirtualTable.d.ts +2 -2
  159. package/dist/components/Watermark.d.mts +5 -5
  160. package/dist/components/Watermark.d.ts +5 -5
  161. package/dist/index.js +4 -4
  162. package/dist/index.mjs +3 -3
  163. package/package.json +2 -2
@@ -1,3 +1,8 @@
1
+ import {
2
+ renderVueBodyTeleport,
3
+ useVueFloating
4
+ } from "./chunk-7RIWAO2A.mjs";
5
+
1
6
  // src/components/Menu.ts
2
7
  import {
3
8
  defineComponent,
@@ -22,6 +27,7 @@ import {
22
27
  getSubMenuTitleClasses,
23
28
  getSubMenuExpandIconClasses,
24
29
  getSubmenuPopupZIndex,
30
+ getTransformOrigin,
25
31
  filterMenuItems,
26
32
  isKeySelected,
27
33
  isKeyOpen,
@@ -126,6 +132,10 @@ var Menu = defineComponent({
126
132
  type: Number,
127
133
  default: 24
128
134
  },
135
+ popupPortal: {
136
+ type: Boolean,
137
+ default: false
138
+ },
129
139
  className: {
130
140
  type: String,
131
141
  default: void 0
@@ -221,11 +231,13 @@ var Menu = defineComponent({
221
231
  const themeRef = computed(() => props.theme);
222
232
  const collapsedRef = computed(() => props.collapsed);
223
233
  const inlineIndentRef = computed(() => props.inlineIndent);
234
+ const popupPortalRef = computed(() => props.popupPortal);
224
235
  provide(MenuContextKey, {
225
236
  mode: modeRef,
226
237
  theme: themeRef,
227
238
  collapsed: collapsedRef,
228
239
  inlineIndent: inlineIndentRef,
240
+ popupPortal: popupPortalRef,
229
241
  selectedKeys: currentSelectedKeys,
230
242
  openKeys: currentOpenKeys,
231
243
  handleSelect,
@@ -619,8 +631,11 @@ var SubMenu = defineComponent({
619
631
  });
620
632
  const isHovered = ref(false);
621
633
  const isOpenByKeyboard = ref(false);
634
+ const titleEl = ref(null);
635
+ const popupEl = ref(null);
622
636
  const submenuContentEl = ref(null);
623
637
  let heightTransitionController = null;
638
+ let popupCloseTimer = null;
624
639
  const effectiveCollapsed = computed(() => {
625
640
  return props.collapsed ?? (menuContext ? menuContext.collapsed.value : false);
626
641
  });
@@ -629,6 +644,7 @@ var SubMenu = defineComponent({
629
644
  if (menuContext.mode.value === "horizontal") return true;
630
645
  return menuContext.mode.value === "vertical" && effectiveCollapsed.value;
631
646
  });
647
+ const popupPortal = computed(() => Boolean(isPopup.value && menuContext?.popupPortal.value));
632
648
  const isExpanded = computed(() => {
633
649
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
634
650
  return isHovered.value || isOpenByKeyboard.value;
@@ -636,6 +652,20 @@ var SubMenu = defineComponent({
636
652
  return isOpen.value;
637
653
  });
638
654
  const hasRenderedInline = ref(!isPopup.value && isExpanded.value);
655
+ const popupPlacement = computed(
656
+ () => menuContext?.mode.value === "horizontal" && props.level === 0 ? "bottom-start" : "right-start"
657
+ );
658
+ const {
659
+ x: popupX,
660
+ y: popupY,
661
+ placement: currentPopupPlacement
662
+ } = useVueFloating({
663
+ referenceRef: titleEl,
664
+ floatingRef: popupEl,
665
+ enabled: computed(() => popupPortal.value && isExpanded.value),
666
+ placement: popupPlacement.value,
667
+ offset: 4
668
+ });
639
669
  const disposeHeightTransition = () => {
640
670
  heightTransitionController?.dispose();
641
671
  heightTransitionController = null;
@@ -668,7 +698,10 @@ var SubMenu = defineComponent({
668
698
  watch(hasRenderedInline, () => {
669
699
  void syncHeightTransition();
670
700
  });
671
- onBeforeUnmount(disposeHeightTransition);
701
+ onBeforeUnmount(() => {
702
+ disposeHeightTransition();
703
+ if (popupCloseTimer) clearTimeout(popupCloseTimer);
704
+ });
672
705
  const titleClasses = computed(() => {
673
706
  if (!menuContext) return "";
674
707
  return classNames(
@@ -707,8 +740,8 @@ var SubMenu = defineComponent({
707
740
  };
708
741
  const focusFirstChild = async () => {
709
742
  await nextTick();
710
- const titleEl = document.activeElement;
711
- if (titleEl) focusFirstChildItem(titleEl);
743
+ const titleEl2 = document.activeElement;
744
+ if (titleEl2) focusFirstChildItem(titleEl2);
712
745
  };
713
746
  const handleTitleKeyDown = async (event) => {
714
747
  if (!menuContext || props.disabled) return;
@@ -777,14 +810,25 @@ var SubMenu = defineComponent({
777
810
  }
778
811
  };
779
812
  const handleMouseEnter = () => {
813
+ if (popupCloseTimer) {
814
+ clearTimeout(popupCloseTimer);
815
+ popupCloseTimer = null;
816
+ }
780
817
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
781
818
  isHovered.value = true;
782
819
  }
783
820
  };
784
821
  const handleMouseLeave = () => {
785
822
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
786
- isHovered.value = false;
787
- isOpenByKeyboard.value = false;
823
+ const close = () => {
824
+ isHovered.value = false;
825
+ isOpenByKeyboard.value = false;
826
+ };
827
+ if (popupPortal.value) {
828
+ popupCloseTimer = setTimeout(close, 120);
829
+ return;
830
+ }
831
+ close();
788
832
  }
789
833
  };
790
834
  const indentStyle = computed(() => {
@@ -838,6 +882,7 @@ var SubMenu = defineComponent({
838
882
  "button",
839
883
  {
840
884
  type: "button",
885
+ ref: titleEl,
841
886
  class: titleClasses.value,
842
887
  style: titleStyle.value,
843
888
  onClick: handleTitleClick,
@@ -853,19 +898,35 @@ var SubMenu = defineComponent({
853
898
  },
854
899
  titleChildren
855
900
  );
856
- const contentNode = isPopup.value ? h(
857
- "ul",
858
- {
859
- class: contentClasses.value,
860
- style: {
861
- display: isExpanded.value ? "block" : "none",
862
- ...popupZIndex.value
901
+ const popupContentNode = () => {
902
+ const popupStyle = popupPortal.value ? {
903
+ display: isExpanded.value ? "block" : "none",
904
+ position: "absolute",
905
+ left: `${popupX.value}px`,
906
+ top: `${popupY.value}px`,
907
+ transformOrigin: getTransformOrigin(currentPopupPlacement.value),
908
+ ...popupZIndex.value
909
+ } : {
910
+ display: isExpanded.value ? "block" : "none",
911
+ ...popupZIndex.value
912
+ };
913
+ const node = h(
914
+ "ul",
915
+ {
916
+ ref: popupPortal.value ? popupEl : void 0,
917
+ class: contentClasses.value,
918
+ style: popupStyle,
919
+ role: "menu",
920
+ "aria-hidden": isExpanded.value ? void 0 : "true",
921
+ onMouseenter: popupPortal.value ? handleMouseEnter : void 0,
922
+ onMouseleave: popupPortal.value ? handleMouseLeave : void 0,
923
+ "data-tiger-submenu-popup": ""
863
924
  },
864
- role: "menu",
865
- "aria-hidden": isExpanded.value ? void 0 : "true"
866
- },
867
- withChildLevel(slots.default?.())
868
- ) : hasRenderedInline.value ? h(
925
+ withChildLevel(slots.default?.())
926
+ );
927
+ return popupPortal.value ? renderVueBodyTeleport(node) : node;
928
+ };
929
+ const contentNode = isPopup.value ? popupContentNode() : hasRenderedInline.value ? h(
869
930
  "div",
870
931
  {
871
932
  ref: submenuContentEl,
@@ -889,7 +950,7 @@ var SubMenu = defineComponent({
889
950
  return h(
890
951
  "li",
891
952
  {
892
- class: isPopup.value ? "relative" : "",
953
+ class: isPopup.value && !popupPortal.value ? "relative" : "",
893
954
  onMouseenter: handleMouseEnter,
894
955
  onMouseleave: handleMouseLeave,
895
956
  role: "none"
@@ -141,6 +141,29 @@ var Drawer = defineComponent({
141
141
  type: Boolean,
142
142
  default: false
143
143
  },
144
+ /**
145
+ * When destroyOnClose is true, wait for leave animation before unmounting.
146
+ * @default false
147
+ */
148
+ destroyOnCloseAfterLeave: {
149
+ type: Boolean,
150
+ default: false
151
+ },
152
+ /**
153
+ * Whether the drawer panel should become fullscreen on mobile viewports.
154
+ * @default true
155
+ */
156
+ fullscreenOnMobile: {
157
+ type: Boolean,
158
+ default: true
159
+ },
160
+ /**
161
+ * Additional CSS class for drawer panel.
162
+ */
163
+ panelClassName: {
164
+ type: String,
165
+ default: void 0
166
+ },
144
167
  /**
145
168
  * Custom inline style for drawer panel
146
169
  */
@@ -148,6 +171,13 @@ var Drawer = defineComponent({
148
171
  type: Object,
149
172
  default: void 0
150
173
  },
174
+ /**
175
+ * Custom inline style for drawer panel.
176
+ */
177
+ panelStyle: {
178
+ type: [String, Object, Array],
179
+ default: void 0
180
+ },
151
181
  /**
152
182
  * Close button aria-label
153
183
  * @default 'Close drawer'
@@ -177,6 +207,7 @@ var Drawer = defineComponent({
177
207
  setup(props, { slots, emit, attrs }) {
178
208
  const instanceId = ref(createDrawerId());
179
209
  const hasBeenOpened = ref(false);
210
+ const deferredRendered = ref(props.open);
180
211
  const dialogRef = ref(null);
181
212
  const closeButtonRef = ref(null);
182
213
  const previousActiveElement = ref(null);
@@ -188,7 +219,9 @@ var Drawer = defineComponent({
188
219
  hasBeenOpened.value = true;
189
220
  return true;
190
221
  }
191
- if (props.destroyOnClose) return false;
222
+ if (props.destroyOnClose) {
223
+ return props.destroyOnCloseAfterLeave ? deferredRendered.value : false;
224
+ }
192
225
  return hasBeenOpened.value;
193
226
  });
194
227
  const handleClose = () => {
@@ -245,11 +278,15 @@ var Drawer = defineComponent({
245
278
  () => props.open,
246
279
  async (nextVisible) => {
247
280
  if (nextVisible) {
281
+ deferredRendered.value = true;
248
282
  previousActiveElement.value = captureActiveElement();
249
283
  await nextTick();
250
284
  focusFirst([closeButtonRef.value, dialogRef.value]);
251
285
  return;
252
286
  }
287
+ if (props.destroyOnClose && !props.destroyOnCloseAfterLeave) {
288
+ deferredRendered.value = false;
289
+ }
253
290
  restoreFocus(previousActiveElement.value);
254
291
  }
255
292
  );
@@ -260,6 +297,9 @@ var Drawer = defineComponent({
260
297
  return;
261
298
  const timer = window.setTimeout(() => {
262
299
  emit(nextVisible ? "after-enter" : "after-leave");
300
+ if (!nextVisible && props.destroyOnClose && props.destroyOnCloseAfterLeave) {
301
+ deferredRendered.value = false;
302
+ }
263
303
  }, ANIMATION_DURATION_MS);
264
304
  onCleanup(() => window.clearTimeout(timer));
265
305
  },
@@ -278,16 +318,17 @@ var Drawer = defineComponent({
278
318
  );
279
319
  const maskClasses = getDrawerMaskClasses(props.open);
280
320
  const panelClasses = classNames(
281
- getDrawerPanelClasses(props.placement, props.open, props.size),
321
+ getDrawerPanelClasses(props.placement, props.open, props.size, props.fullscreenOnMobile),
282
322
  "flex flex-col",
283
323
  props.className,
324
+ props.panelClassName,
284
325
  coerceClassValue(attrs.class)
285
326
  );
286
327
  const isHorizontal = props.placement === "left" || props.placement === "right";
287
328
  const widthStyle = props.width ? {
288
329
  [isHorizontal ? "width" : "height"]: typeof props.width === "number" ? `${props.width}px` : props.width
289
330
  } : void 0;
290
- const mergedStyle = mergeStyleValues(attrs.style, props.style, widthStyle);
331
+ const mergedStyle = mergeStyleValues(attrs.style, props.panelStyle, props.style, widthStyle);
291
332
  const headerClasses = getDrawerHeaderClasses();
292
333
  const bodyClasses = getDrawerBodyClasses(props.bodyClassName);
293
334
  const footerClasses = getDrawerFooterClasses();
@@ -370,7 +411,7 @@ var Drawer = defineComponent({
370
411
  {
371
412
  class: containerClasses,
372
413
  style: { zIndex: props.zIndex },
373
- hidden: !props.open,
414
+ hidden: !props.open && !(props.destroyOnClose && props.destroyOnCloseAfterLeave),
374
415
  "aria-hidden": !props.open ? "true" : void 0,
375
416
  "data-tiger-drawer-root": ""
376
417
  },
@@ -141,6 +141,29 @@ var Drawer = _vue.defineComponent.call(void 0, {
141
141
  type: Boolean,
142
142
  default: false
143
143
  },
144
+ /**
145
+ * When destroyOnClose is true, wait for leave animation before unmounting.
146
+ * @default false
147
+ */
148
+ destroyOnCloseAfterLeave: {
149
+ type: Boolean,
150
+ default: false
151
+ },
152
+ /**
153
+ * Whether the drawer panel should become fullscreen on mobile viewports.
154
+ * @default true
155
+ */
156
+ fullscreenOnMobile: {
157
+ type: Boolean,
158
+ default: true
159
+ },
160
+ /**
161
+ * Additional CSS class for drawer panel.
162
+ */
163
+ panelClassName: {
164
+ type: String,
165
+ default: void 0
166
+ },
144
167
  /**
145
168
  * Custom inline style for drawer panel
146
169
  */
@@ -148,6 +171,13 @@ var Drawer = _vue.defineComponent.call(void 0, {
148
171
  type: Object,
149
172
  default: void 0
150
173
  },
174
+ /**
175
+ * Custom inline style for drawer panel.
176
+ */
177
+ panelStyle: {
178
+ type: [String, Object, Array],
179
+ default: void 0
180
+ },
151
181
  /**
152
182
  * Close button aria-label
153
183
  * @default 'Close drawer'
@@ -177,6 +207,7 @@ var Drawer = _vue.defineComponent.call(void 0, {
177
207
  setup(props, { slots, emit, attrs }) {
178
208
  const instanceId = _vue.ref.call(void 0, createDrawerId());
179
209
  const hasBeenOpened = _vue.ref.call(void 0, false);
210
+ const deferredRendered = _vue.ref.call(void 0, props.open);
180
211
  const dialogRef = _vue.ref.call(void 0, null);
181
212
  const closeButtonRef = _vue.ref.call(void 0, null);
182
213
  const previousActiveElement = _vue.ref.call(void 0, null);
@@ -188,7 +219,9 @@ var Drawer = _vue.defineComponent.call(void 0, {
188
219
  hasBeenOpened.value = true;
189
220
  return true;
190
221
  }
191
- if (props.destroyOnClose) return false;
222
+ if (props.destroyOnClose) {
223
+ return props.destroyOnCloseAfterLeave ? deferredRendered.value : false;
224
+ }
192
225
  return hasBeenOpened.value;
193
226
  });
194
227
  const handleClose = () => {
@@ -245,11 +278,15 @@ var Drawer = _vue.defineComponent.call(void 0, {
245
278
  () => props.open,
246
279
  async (nextVisible) => {
247
280
  if (nextVisible) {
281
+ deferredRendered.value = true;
248
282
  previousActiveElement.value = _tigercatcore.captureActiveElement.call(void 0, );
249
283
  await _vue.nextTick.call(void 0, );
250
284
  _tigercatcore.focusFirst.call(void 0, [closeButtonRef.value, dialogRef.value]);
251
285
  return;
252
286
  }
287
+ if (props.destroyOnClose && !props.destroyOnCloseAfterLeave) {
288
+ deferredRendered.value = false;
289
+ }
253
290
  _tigercatcore.restoreFocus.call(void 0, previousActiveElement.value);
254
291
  }
255
292
  );
@@ -260,6 +297,9 @@ var Drawer = _vue.defineComponent.call(void 0, {
260
297
  return;
261
298
  const timer = window.setTimeout(() => {
262
299
  emit(nextVisible ? "after-enter" : "after-leave");
300
+ if (!nextVisible && props.destroyOnClose && props.destroyOnCloseAfterLeave) {
301
+ deferredRendered.value = false;
302
+ }
263
303
  }, _tigercatcore.ANIMATION_DURATION_MS);
264
304
  onCleanup(() => window.clearTimeout(timer));
265
305
  },
@@ -278,16 +318,17 @@ var Drawer = _vue.defineComponent.call(void 0, {
278
318
  );
279
319
  const maskClasses = _tigercatcore.getDrawerMaskClasses.call(void 0, props.open);
280
320
  const panelClasses = _tigercatcore.classNames.call(void 0,
281
- _tigercatcore.getDrawerPanelClasses.call(void 0, props.placement, props.open, props.size),
321
+ _tigercatcore.getDrawerPanelClasses.call(void 0, props.placement, props.open, props.size, props.fullscreenOnMobile),
282
322
  "flex flex-col",
283
323
  props.className,
324
+ props.panelClassName,
284
325
  _tigercatcore.coerceClassValue.call(void 0, attrs.class)
285
326
  );
286
327
  const isHorizontal = props.placement === "left" || props.placement === "right";
287
328
  const widthStyle = props.width ? {
288
329
  [isHorizontal ? "width" : "height"]: typeof props.width === "number" ? `${props.width}px` : props.width
289
330
  } : void 0;
290
- const mergedStyle = _tigercatcore.mergeStyleValues.call(void 0, attrs.style, props.style, widthStyle);
331
+ const mergedStyle = _tigercatcore.mergeStyleValues.call(void 0, attrs.style, props.panelStyle, props.style, widthStyle);
291
332
  const headerClasses = _tigercatcore.getDrawerHeaderClasses.call(void 0, );
292
333
  const bodyClasses = _tigercatcore.getDrawerBodyClasses.call(void 0, props.bodyClassName);
293
334
  const footerClasses = _tigercatcore.getDrawerFooterClasses.call(void 0, );
@@ -370,7 +411,7 @@ var Drawer = _vue.defineComponent.call(void 0, {
370
411
  {
371
412
  class: containerClasses,
372
413
  style: { zIndex: props.zIndex },
373
- hidden: !props.open,
414
+ hidden: !props.open && !(props.destroyOnClose && props.destroyOnCloseAfterLeave),
374
415
  "aria-hidden": !props.open ? "true" : void 0,
375
416
  "data-tiger-drawer-root": ""
376
417
  },
@@ -120,7 +120,7 @@ var MessageContainer = _vue.defineComponent.call(void 0, {
120
120
  },
121
121
  IS_TEST_ENV ? messageInstances.value.map(renderMessageItem) : _vue.h.call(void 0,
122
122
  _vue.TransitionGroup,
123
- { name: "message", tag: "div" },
123
+ { name: "message" },
124
124
  () => messageInstances.value.map(renderMessageItem)
125
125
  )
126
126
  )
@@ -120,7 +120,7 @@ var MessageContainer = defineComponent({
120
120
  },
121
121
  IS_TEST_ENV ? messageInstances.value.map(renderMessageItem) : h(
122
122
  TransitionGroup,
123
- { name: "message", tag: "div" },
123
+ { name: "message" },
124
124
  () => messageInstances.value.map(renderMessageItem)
125
125
  )
126
126
  )
@@ -1,4 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/components/Menu.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunkJDCVS4SJjs = require('./chunk-JDCVS4SJ.js');
5
+
6
+ // src/components/Menu.ts
2
7
 
3
8
 
4
9
 
@@ -43,6 +48,7 @@ var _vue = require('vue');
43
48
 
44
49
 
45
50
 
51
+
46
52
 
47
53
 
48
54
  var _tigercatcore = require('@expcat/tigercat-core');
@@ -126,6 +132,10 @@ var Menu = _vue.defineComponent.call(void 0, {
126
132
  type: Number,
127
133
  default: 24
128
134
  },
135
+ popupPortal: {
136
+ type: Boolean,
137
+ default: false
138
+ },
129
139
  className: {
130
140
  type: String,
131
141
  default: void 0
@@ -221,11 +231,13 @@ var Menu = _vue.defineComponent.call(void 0, {
221
231
  const themeRef = _vue.computed.call(void 0, () => props.theme);
222
232
  const collapsedRef = _vue.computed.call(void 0, () => props.collapsed);
223
233
  const inlineIndentRef = _vue.computed.call(void 0, () => props.inlineIndent);
234
+ const popupPortalRef = _vue.computed.call(void 0, () => props.popupPortal);
224
235
  _vue.provide.call(void 0, MenuContextKey, {
225
236
  mode: modeRef,
226
237
  theme: themeRef,
227
238
  collapsed: collapsedRef,
228
239
  inlineIndent: inlineIndentRef,
240
+ popupPortal: popupPortalRef,
229
241
  selectedKeys: currentSelectedKeys,
230
242
  openKeys: currentOpenKeys,
231
243
  handleSelect,
@@ -619,8 +631,11 @@ var SubMenu = _vue.defineComponent.call(void 0, {
619
631
  });
620
632
  const isHovered = _vue.ref.call(void 0, false);
621
633
  const isOpenByKeyboard = _vue.ref.call(void 0, false);
634
+ const titleEl = _vue.ref.call(void 0, null);
635
+ const popupEl = _vue.ref.call(void 0, null);
622
636
  const submenuContentEl = _vue.ref.call(void 0, null);
623
637
  let heightTransitionController = null;
638
+ let popupCloseTimer = null;
624
639
  const effectiveCollapsed = _vue.computed.call(void 0, () => {
625
640
  return _nullishCoalesce(props.collapsed, () => ( (menuContext ? menuContext.collapsed.value : false)));
626
641
  });
@@ -629,15 +644,30 @@ var SubMenu = _vue.defineComponent.call(void 0, {
629
644
  if (menuContext.mode.value === "horizontal") return true;
630
645
  return menuContext.mode.value === "vertical" && effectiveCollapsed.value;
631
646
  });
647
+ const popupPortal = _vue.computed.call(void 0, () => Boolean(isPopup.value && _optionalChain([menuContext, 'optionalAccess', _7 => _7.popupPortal, 'access', _8 => _8.value])));
632
648
  const isExpanded = _vue.computed.call(void 0, () => {
633
- if (_optionalChain([menuContext, 'optionalAccess', _7 => _7.mode, 'access', _8 => _8.value]) === "horizontal" || isPopup.value) {
649
+ if (_optionalChain([menuContext, 'optionalAccess', _9 => _9.mode, 'access', _10 => _10.value]) === "horizontal" || isPopup.value) {
634
650
  return isHovered.value || isOpenByKeyboard.value;
635
651
  }
636
652
  return isOpen.value;
637
653
  });
638
654
  const hasRenderedInline = _vue.ref.call(void 0, !isPopup.value && isExpanded.value);
655
+ const popupPlacement = _vue.computed.call(void 0,
656
+ () => _optionalChain([menuContext, 'optionalAccess', _11 => _11.mode, 'access', _12 => _12.value]) === "horizontal" && props.level === 0 ? "bottom-start" : "right-start"
657
+ );
658
+ const {
659
+ x: popupX,
660
+ y: popupY,
661
+ placement: currentPopupPlacement
662
+ } = _chunkJDCVS4SJjs.useVueFloating.call(void 0, {
663
+ referenceRef: titleEl,
664
+ floatingRef: popupEl,
665
+ enabled: _vue.computed.call(void 0, () => popupPortal.value && isExpanded.value),
666
+ placement: popupPlacement.value,
667
+ offset: 4
668
+ });
639
669
  const disposeHeightTransition = () => {
640
- _optionalChain([heightTransitionController, 'optionalAccess', _9 => _9.dispose, 'call', _10 => _10()]);
670
+ _optionalChain([heightTransitionController, 'optionalAccess', _13 => _13.dispose, 'call', _14 => _14()]);
641
671
  heightTransitionController = null;
642
672
  };
643
673
  const syncHeightTransition = async () => {
@@ -668,7 +698,10 @@ var SubMenu = _vue.defineComponent.call(void 0, {
668
698
  _vue.watch.call(void 0, hasRenderedInline, () => {
669
699
  void syncHeightTransition();
670
700
  });
671
- _vue.onBeforeUnmount.call(void 0, disposeHeightTransition);
701
+ _vue.onBeforeUnmount.call(void 0, () => {
702
+ disposeHeightTransition();
703
+ if (popupCloseTimer) clearTimeout(popupCloseTimer);
704
+ });
672
705
  const titleClasses = _vue.computed.call(void 0, () => {
673
706
  if (!menuContext) return "";
674
707
  return _tigercatcore.classNames.call(void 0,
@@ -707,14 +740,14 @@ var SubMenu = _vue.defineComponent.call(void 0, {
707
740
  };
708
741
  const focusFirstChild = async () => {
709
742
  await _vue.nextTick.call(void 0, );
710
- const titleEl = document.activeElement;
711
- if (titleEl) _tigercatcore.focusFirstChildItem.call(void 0, titleEl);
743
+ const titleEl2 = document.activeElement;
744
+ if (titleEl2) _tigercatcore.focusFirstChildItem.call(void 0, titleEl2);
712
745
  };
713
746
  const handleTitleKeyDown = async (event) => {
714
747
  if (!menuContext || props.disabled) return;
715
748
  const current = event.currentTarget;
716
749
  const rootMenu = current.closest('ul[role="menu"]');
717
- const isRoot = _optionalChain([rootMenu, 'optionalAccess', _11 => _11.dataset, 'access', _12 => _12.tigerMenuRoot]) === "true";
750
+ const isRoot = _optionalChain([rootMenu, 'optionalAccess', _15 => _15.dataset, 'access', _16 => _16.tigerMenuRoot]) === "true";
718
751
  const isHorizontalRoot = isRoot && menuContext.mode.value === "horizontal";
719
752
  const nextKey = isHorizontalRoot ? "ArrowRight" : "ArrowDown";
720
753
  const prevKey = isHorizontalRoot ? "ArrowLeft" : "ArrowUp";
@@ -777,14 +810,25 @@ var SubMenu = _vue.defineComponent.call(void 0, {
777
810
  }
778
811
  };
779
812
  const handleMouseEnter = () => {
780
- if (_optionalChain([menuContext, 'optionalAccess', _13 => _13.mode, 'access', _14 => _14.value]) === "horizontal" || isPopup.value) {
813
+ if (popupCloseTimer) {
814
+ clearTimeout(popupCloseTimer);
815
+ popupCloseTimer = null;
816
+ }
817
+ if (_optionalChain([menuContext, 'optionalAccess', _17 => _17.mode, 'access', _18 => _18.value]) === "horizontal" || isPopup.value) {
781
818
  isHovered.value = true;
782
819
  }
783
820
  };
784
821
  const handleMouseLeave = () => {
785
- if (_optionalChain([menuContext, 'optionalAccess', _15 => _15.mode, 'access', _16 => _16.value]) === "horizontal" || isPopup.value) {
786
- isHovered.value = false;
787
- isOpenByKeyboard.value = false;
822
+ if (_optionalChain([menuContext, 'optionalAccess', _19 => _19.mode, 'access', _20 => _20.value]) === "horizontal" || isPopup.value) {
823
+ const close = () => {
824
+ isHovered.value = false;
825
+ isOpenByKeyboard.value = false;
826
+ };
827
+ if (popupPortal.value) {
828
+ popupCloseTimer = setTimeout(close, 120);
829
+ return;
830
+ }
831
+ close();
788
832
  }
789
833
  };
790
834
  const indentStyle = _vue.computed.call(void 0, () => {
@@ -838,6 +882,7 @@ var SubMenu = _vue.defineComponent.call(void 0, {
838
882
  "button",
839
883
  {
840
884
  type: "button",
885
+ ref: titleEl,
841
886
  class: titleClasses.value,
842
887
  style: titleStyle.value,
843
888
  onClick: handleTitleClick,
@@ -853,19 +898,35 @@ var SubMenu = _vue.defineComponent.call(void 0, {
853
898
  },
854
899
  titleChildren
855
900
  );
856
- const contentNode = isPopup.value ? _vue.h.call(void 0,
857
- "ul",
858
- {
859
- class: contentClasses.value,
860
- style: {
861
- display: isExpanded.value ? "block" : "none",
862
- ...popupZIndex.value
901
+ const popupContentNode = () => {
902
+ const popupStyle = popupPortal.value ? {
903
+ display: isExpanded.value ? "block" : "none",
904
+ position: "absolute",
905
+ left: `${popupX.value}px`,
906
+ top: `${popupY.value}px`,
907
+ transformOrigin: _tigercatcore.getTransformOrigin.call(void 0, currentPopupPlacement.value),
908
+ ...popupZIndex.value
909
+ } : {
910
+ display: isExpanded.value ? "block" : "none",
911
+ ...popupZIndex.value
912
+ };
913
+ const node = _vue.h.call(void 0,
914
+ "ul",
915
+ {
916
+ ref: popupPortal.value ? popupEl : void 0,
917
+ class: contentClasses.value,
918
+ style: popupStyle,
919
+ role: "menu",
920
+ "aria-hidden": isExpanded.value ? void 0 : "true",
921
+ onMouseenter: popupPortal.value ? handleMouseEnter : void 0,
922
+ onMouseleave: popupPortal.value ? handleMouseLeave : void 0,
923
+ "data-tiger-submenu-popup": ""
863
924
  },
864
- role: "menu",
865
- "aria-hidden": isExpanded.value ? void 0 : "true"
866
- },
867
- withChildLevel(_optionalChain([slots, 'access', _17 => _17.default, 'optionalCall', _18 => _18()]))
868
- ) : hasRenderedInline.value ? _vue.h.call(void 0,
925
+ withChildLevel(_optionalChain([slots, 'access', _21 => _21.default, 'optionalCall', _22 => _22()]))
926
+ );
927
+ return popupPortal.value ? _chunkJDCVS4SJjs.renderVueBodyTeleport.call(void 0, node) : node;
928
+ };
929
+ const contentNode = isPopup.value ? popupContentNode() : hasRenderedInline.value ? _vue.h.call(void 0,
869
930
  "div",
870
931
  {
871
932
  ref: submenuContentEl,
@@ -882,14 +943,14 @@ var SubMenu = _vue.defineComponent.call(void 0, {
882
943
  class: contentClasses.value,
883
944
  role: "menu"
884
945
  },
885
- withChildLevel(_optionalChain([slots, 'access', _19 => _19.default, 'optionalCall', _20 => _20()]))
946
+ withChildLevel(_optionalChain([slots, 'access', _23 => _23.default, 'optionalCall', _24 => _24()]))
886
947
  )
887
948
  ]
888
949
  ) : null;
889
950
  return _vue.h.call(void 0,
890
951
  "li",
891
952
  {
892
- class: isPopup.value ? "relative" : "",
953
+ class: isPopup.value && !popupPortal.value ? "relative" : "",
893
954
  onMouseenter: handleMouseEnter,
894
955
  onMouseleave: handleMouseLeave,
895
956
  role: "none"
@@ -107,10 +107,10 @@ declare const ActivityFeed: vue.DefineComponent<vue.ExtractPropTypes<{
107
107
  default: undefined;
108
108
  };
109
109
  }>> & Readonly<{}>, {
110
- loadingText: string;
111
- emptyText: string;
112
110
  className: string;
113
111
  style: Record<string, string | number>;
112
+ loadingText: string;
113
+ emptyText: string;
114
114
  loading: boolean;
115
115
  groupBy: (item: ActivityItem) => string;
116
116
  items: ActivityItem[];