@expcat/tigercat-vue 1.2.16 → 1.2.23

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 (187) hide show
  1. package/dist/{chunk-2GQE47OY.mjs → chunk-DSHV7EAX.mjs} +45 -4
  2. package/dist/{chunk-FXS5GHQZ.js → chunk-IQZX54SQ.js} +45 -4
  3. package/dist/{chunk-LDDGBB3V.mjs → chunk-IXJSZIAE.mjs} +100 -23
  4. package/dist/{chunk-4OOR4524.js → chunk-ZNGRSXFK.js} +107 -30
  5. package/dist/components/ActivityFeed.d.mts +6 -6
  6. package/dist/components/ActivityFeed.d.ts +6 -6
  7. package/dist/components/Alert.d.mts +2 -2
  8. package/dist/components/Alert.d.ts +2 -2
  9. package/dist/components/Anchor.d.mts +1 -1
  10. package/dist/components/Anchor.d.ts +1 -1
  11. package/dist/components/AreaChart.d.mts +1 -1
  12. package/dist/components/AreaChart.d.ts +1 -1
  13. package/dist/components/AutoComplete.d.mts +2 -2
  14. package/dist/components/AutoComplete.d.ts +2 -2
  15. package/dist/components/Avatar.d.mts +1 -1
  16. package/dist/components/Avatar.d.ts +1 -1
  17. package/dist/components/Badge.d.mts +3 -3
  18. package/dist/components/Badge.d.ts +3 -3
  19. package/dist/components/BarChart.d.mts +1 -1
  20. package/dist/components/BarChart.d.ts +1 -1
  21. package/dist/components/Breadcrumb.d.mts +2 -2
  22. package/dist/components/Breadcrumb.d.ts +2 -2
  23. package/dist/components/Button.d.mts +3 -3
  24. package/dist/components/Button.d.ts +3 -3
  25. package/dist/components/ButtonGroup.d.mts +1 -1
  26. package/dist/components/ButtonGroup.d.ts +1 -1
  27. package/dist/components/Calendar.d.mts +1 -1
  28. package/dist/components/Calendar.d.ts +1 -1
  29. package/dist/components/Card.d.mts +2 -2
  30. package/dist/components/Card.d.ts +2 -2
  31. package/dist/components/ChatWindow.d.mts +3 -3
  32. package/dist/components/ChatWindow.d.ts +3 -3
  33. package/dist/components/CodeEditor.d.mts +2 -2
  34. package/dist/components/CodeEditor.d.ts +2 -2
  35. package/dist/components/Collapse.d.mts +1 -1
  36. package/dist/components/Collapse.d.ts +1 -1
  37. package/dist/components/CollapsePanel.d.mts +1 -1
  38. package/dist/components/CollapsePanel.d.ts +1 -1
  39. package/dist/components/ColorSwatch.d.mts +1 -1
  40. package/dist/components/ColorSwatch.d.ts +1 -1
  41. package/dist/components/CommentThread.d.mts +2 -2
  42. package/dist/components/CommentThread.d.ts +2 -2
  43. package/dist/components/ConfigProvider.d.mts +1 -1
  44. package/dist/components/ConfigProvider.d.ts +1 -1
  45. package/dist/components/DataTableWithToolbar.d.mts +8 -8
  46. package/dist/components/DataTableWithToolbar.d.ts +8 -8
  47. package/dist/components/DatePicker.d.mts +2 -2
  48. package/dist/components/DatePicker.d.ts +2 -2
  49. package/dist/components/Descriptions.d.mts +2 -2
  50. package/dist/components/Descriptions.d.ts +2 -2
  51. package/dist/components/DonutChart.d.mts +2 -2
  52. package/dist/components/DonutChart.d.ts +2 -2
  53. package/dist/components/Drawer.d.mts +74 -5
  54. package/dist/components/Drawer.d.ts +74 -5
  55. package/dist/components/Drawer.js +2 -2
  56. package/dist/components/Drawer.mjs +1 -1
  57. package/dist/components/FileManager.d.mts +1 -1
  58. package/dist/components/FileManager.d.ts +1 -1
  59. package/dist/components/FloatButton.d.mts +3 -3
  60. package/dist/components/FloatButton.d.ts +3 -3
  61. package/dist/components/Form.d.mts +1 -1
  62. package/dist/components/Form.d.ts +1 -1
  63. package/dist/components/FormWizard.d.mts +4 -4
  64. package/dist/components/FormWizard.d.ts +4 -4
  65. package/dist/components/FunnelChart.d.mts +1 -1
  66. package/dist/components/FunnelChart.d.ts +1 -1
  67. package/dist/components/Gantt.d.mts +1 -1
  68. package/dist/components/Gantt.d.ts +1 -1
  69. package/dist/components/GaugeChart.d.mts +1 -1
  70. package/dist/components/GaugeChart.d.ts +1 -1
  71. package/dist/components/HeatmapChart.d.mts +2 -2
  72. package/dist/components/HeatmapChart.d.ts +2 -2
  73. package/dist/components/Image.d.mts +2 -2
  74. package/dist/components/Image.d.ts +2 -2
  75. package/dist/components/ImageAnnotation.d.mts +3 -3
  76. package/dist/components/ImageAnnotation.d.ts +3 -3
  77. package/dist/components/InfiniteScroll.d.mts +2 -2
  78. package/dist/components/InfiniteScroll.d.ts +2 -2
  79. package/dist/components/Input.d.mts +4 -4
  80. package/dist/components/Input.d.ts +4 -4
  81. package/dist/components/InputGroup.d.mts +1 -1
  82. package/dist/components/InputGroup.d.ts +1 -1
  83. package/dist/components/InputNumber.d.mts +1 -1
  84. package/dist/components/InputNumber.d.ts +1 -1
  85. package/dist/components/Kanban.d.mts +1 -1
  86. package/dist/components/Kanban.d.ts +1 -1
  87. package/dist/components/LineChart.d.mts +1 -1
  88. package/dist/components/LineChart.d.ts +1 -1
  89. package/dist/components/Link.d.mts +1 -1
  90. package/dist/components/Link.d.ts +1 -1
  91. package/dist/components/List.d.mts +6 -6
  92. package/dist/components/List.d.ts +6 -6
  93. package/dist/components/Loading.d.mts +5 -5
  94. package/dist/components/Loading.d.ts +5 -5
  95. package/dist/components/MarkdownEditor.d.mts +2 -2
  96. package/dist/components/MarkdownEditor.d.ts +2 -2
  97. package/dist/components/Mentions.d.mts +2 -2
  98. package/dist/components/Mentions.d.ts +2 -2
  99. package/dist/components/Menu.d.mts +25 -4
  100. package/dist/components/Menu.d.ts +25 -4
  101. package/dist/components/Menu.js +3 -2
  102. package/dist/components/Menu.mjs +2 -1
  103. package/dist/components/MenuItem.js +4 -3
  104. package/dist/components/MenuItem.mjs +2 -1
  105. package/dist/components/MenuItemGroup.js +4 -3
  106. package/dist/components/MenuItemGroup.mjs +2 -1
  107. package/dist/components/Modal.d.mts +7 -7
  108. package/dist/components/Modal.d.ts +7 -7
  109. package/dist/components/NotificationCenter.d.mts +5 -5
  110. package/dist/components/NotificationCenter.d.ts +5 -5
  111. package/dist/components/NumberKeyboard.d.mts +2 -2
  112. package/dist/components/NumberKeyboard.d.ts +2 -2
  113. package/dist/components/OrgChart.d.mts +1 -1
  114. package/dist/components/OrgChart.d.ts +1 -1
  115. package/dist/components/Pagination.d.mts +3 -3
  116. package/dist/components/Pagination.d.ts +3 -3
  117. package/dist/components/PieChart.d.mts +2 -2
  118. package/dist/components/PieChart.d.ts +2 -2
  119. package/dist/components/Popconfirm.d.mts +3 -3
  120. package/dist/components/Popconfirm.d.ts +3 -3
  121. package/dist/components/Popover.d.mts +1 -1
  122. package/dist/components/Popover.d.ts +1 -1
  123. package/dist/components/Progress.d.mts +2 -2
  124. package/dist/components/Progress.d.ts +2 -2
  125. package/dist/components/QRCode.d.mts +1 -1
  126. package/dist/components/QRCode.d.ts +1 -1
  127. package/dist/components/RadarChart.d.mts +1 -1
  128. package/dist/components/RadarChart.d.ts +1 -1
  129. package/dist/components/RichTextEditor.d.mts +1 -1
  130. package/dist/components/RichTextEditor.d.ts +1 -1
  131. package/dist/components/Row.d.mts +1 -1
  132. package/dist/components/Row.d.ts +1 -1
  133. package/dist/components/ScatterChart.d.mts +1 -1
  134. package/dist/components/ScatterChart.d.ts +1 -1
  135. package/dist/components/ScrollSpy.d.mts +2 -2
  136. package/dist/components/ScrollSpy.d.ts +2 -2
  137. package/dist/components/Select.d.mts +1 -1
  138. package/dist/components/Select.d.ts +1 -1
  139. package/dist/components/Signature.d.mts +2 -2
  140. package/dist/components/Signature.d.ts +2 -2
  141. package/dist/components/Skeleton.d.mts +1 -1
  142. package/dist/components/Skeleton.d.ts +1 -1
  143. package/dist/components/Space.d.mts +2 -2
  144. package/dist/components/Space.d.ts +2 -2
  145. package/dist/components/Splitter.d.mts +1 -1
  146. package/dist/components/Splitter.d.ts +1 -1
  147. package/dist/components/Spotlight.d.mts +4 -4
  148. package/dist/components/Spotlight.d.ts +4 -4
  149. package/dist/components/Steps.d.mts +2 -2
  150. package/dist/components/Steps.d.ts +2 -2
  151. package/dist/components/SubMenu.js +4 -3
  152. package/dist/components/SubMenu.mjs +2 -1
  153. package/dist/components/SunburstChart.d.mts +1 -1
  154. package/dist/components/SunburstChart.d.ts +1 -1
  155. package/dist/components/Table.d.mts +5 -5
  156. package/dist/components/Table.d.ts +5 -5
  157. package/dist/components/Tabs.d.mts +2 -2
  158. package/dist/components/Tabs.d.ts +2 -2
  159. package/dist/components/Tag.d.mts +1 -1
  160. package/dist/components/Tag.d.ts +1 -1
  161. package/dist/components/TaskBoard.d.mts +1 -1
  162. package/dist/components/TaskBoard.d.ts +1 -1
  163. package/dist/components/Text.d.mts +3 -3
  164. package/dist/components/Text.d.ts +3 -3
  165. package/dist/components/Textarea.d.mts +1 -1
  166. package/dist/components/Textarea.d.ts +1 -1
  167. package/dist/components/TimePicker.d.mts +3 -3
  168. package/dist/components/TimePicker.d.ts +3 -3
  169. package/dist/components/Timeline.d.mts +3 -3
  170. package/dist/components/Timeline.d.ts +3 -3
  171. package/dist/components/Tooltip.d.mts +1 -1
  172. package/dist/components/Tooltip.d.ts +1 -1
  173. package/dist/components/Tour.d.mts +2 -2
  174. package/dist/components/Tour.d.ts +2 -2
  175. package/dist/components/Tree.d.mts +2 -2
  176. package/dist/components/Tree.d.ts +2 -2
  177. package/dist/components/TreeMapChart.d.mts +1 -1
  178. package/dist/components/TreeMapChart.d.ts +1 -1
  179. package/dist/components/Upload.d.mts +4 -4
  180. package/dist/components/Upload.d.ts +4 -4
  181. package/dist/components/VirtualTable.d.mts +2 -2
  182. package/dist/components/VirtualTable.d.ts +2 -2
  183. package/dist/components/Watermark.d.mts +1 -1
  184. package/dist/components/Watermark.d.ts +1 -1
  185. package/dist/index.js +3 -3
  186. package/dist/index.mjs +2 -2
  187. package/package.json +2 -2
@@ -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
  },
@@ -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
@@ -165,6 +175,9 @@ var Menu = defineComponent({
165
175
  ],
166
176
  setup(props, { slots, emit, attrs }) {
167
177
  const menuEl = ref(null);
178
+ const resolvedMode = computed(
179
+ () => props.collapsed && props.mode === "inline" ? "vertical" : props.mode
180
+ );
168
181
  const internalSelectedKeys = ref(props.defaultSelectedKeys);
169
182
  const internalOpenKeys = ref(props.defaultOpenKeys);
170
183
  const internalSearchValue = ref(props.defaultSearchValue);
@@ -201,7 +214,7 @@ var Menu = defineComponent({
201
214
  };
202
215
  const menuClasses = computed(() => {
203
216
  return classNames(
204
- getMenuClasses(props.mode, props.theme, props.collapsed),
217
+ getMenuClasses(resolvedMode.value, props.theme, props.collapsed),
205
218
  props.className,
206
219
  coerceClassValue(attrs.class)
207
220
  );
@@ -217,15 +230,17 @@ var Menu = defineComponent({
217
230
  const { class: _class, style: _style, ...rest } = attrs;
218
231
  return rest;
219
232
  });
220
- const modeRef = computed(() => props.mode);
233
+ const modeRef = computed(() => resolvedMode.value);
221
234
  const themeRef = computed(() => props.theme);
222
235
  const collapsedRef = computed(() => props.collapsed);
223
236
  const inlineIndentRef = computed(() => props.inlineIndent);
237
+ const popupPortalRef = computed(() => props.popupPortal);
224
238
  provide(MenuContextKey, {
225
239
  mode: modeRef,
226
240
  theme: themeRef,
227
241
  collapsed: collapsedRef,
228
242
  inlineIndent: inlineIndentRef,
243
+ popupPortal: popupPortalRef,
229
244
  selectedKeys: currentSelectedKeys,
230
245
  openKeys: currentOpenKeys,
231
246
  handleSelect,
@@ -298,7 +313,8 @@ var Menu = defineComponent({
298
313
  style: menuStyle.value,
299
314
  role: "menu",
300
315
  "data-tiger-menu-root": "true",
301
- "data-tiger-menu-mode": props.mode,
316
+ "data-tiger-menu-mode": resolvedMode.value,
317
+ "data-tiger-menu-requested-mode": props.mode,
302
318
  ...passthroughAttrs.value
303
319
  },
304
320
  [...searchChild, ...dataChildren, ...slotChildren, ...emptyChild]
@@ -493,6 +509,10 @@ var MenuItemGroup = defineComponent({
493
509
  type: Number,
494
510
  default: 0
495
511
  },
512
+ collapsed: {
513
+ type: Boolean,
514
+ default: void 0
515
+ },
496
516
  className: {
497
517
  type: String,
498
518
  default: void 0
@@ -519,8 +539,13 @@ var MenuItemGroup = defineComponent({
519
539
  const isTarget = name === "TigerMenuItem" || name === "TigerSubMenu";
520
540
  if (!isTarget) return node;
521
541
  const existingProps = node.props ?? {};
522
- if (existingProps.level != null) return node;
523
- return cloneVNode(node, { level });
542
+ if (existingProps.level != null && existingProps.collapsed != null) return node;
543
+ const nextProps = {};
544
+ if (existingProps.level == null) nextProps.level = level;
545
+ if (props.collapsed !== void 0 && existingProps.collapsed == null) {
546
+ nextProps.collapsed = props.collapsed;
547
+ }
548
+ return cloneVNode(node, nextProps);
524
549
  });
525
550
  };
526
551
  return () => {
@@ -619,8 +644,11 @@ var SubMenu = defineComponent({
619
644
  });
620
645
  const isHovered = ref(false);
621
646
  const isOpenByKeyboard = ref(false);
647
+ const titleEl = ref(null);
648
+ const popupEl = ref(null);
622
649
  const submenuContentEl = ref(null);
623
650
  let heightTransitionController = null;
651
+ let popupCloseTimer = null;
624
652
  const effectiveCollapsed = computed(() => {
625
653
  return props.collapsed ?? (menuContext ? menuContext.collapsed.value : false);
626
654
  });
@@ -629,6 +657,7 @@ var SubMenu = defineComponent({
629
657
  if (menuContext.mode.value === "horizontal") return true;
630
658
  return menuContext.mode.value === "vertical" && effectiveCollapsed.value;
631
659
  });
660
+ const popupPortal = computed(() => Boolean(isPopup.value && menuContext?.popupPortal.value));
632
661
  const isExpanded = computed(() => {
633
662
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
634
663
  return isHovered.value || isOpenByKeyboard.value;
@@ -636,6 +665,20 @@ var SubMenu = defineComponent({
636
665
  return isOpen.value;
637
666
  });
638
667
  const hasRenderedInline = ref(!isPopup.value && isExpanded.value);
668
+ const popupPlacement = computed(
669
+ () => menuContext?.mode.value === "horizontal" && props.level === 0 ? "bottom-start" : "right-start"
670
+ );
671
+ const {
672
+ x: popupX,
673
+ y: popupY,
674
+ placement: currentPopupPlacement
675
+ } = useVueFloating({
676
+ referenceRef: titleEl,
677
+ floatingRef: popupEl,
678
+ enabled: computed(() => popupPortal.value && isExpanded.value),
679
+ placement: popupPlacement.value,
680
+ offset: 4
681
+ });
639
682
  const disposeHeightTransition = () => {
640
683
  heightTransitionController?.dispose();
641
684
  heightTransitionController = null;
@@ -668,7 +711,10 @@ var SubMenu = defineComponent({
668
711
  watch(hasRenderedInline, () => {
669
712
  void syncHeightTransition();
670
713
  });
671
- onBeforeUnmount(disposeHeightTransition);
714
+ onBeforeUnmount(() => {
715
+ disposeHeightTransition();
716
+ if (popupCloseTimer) clearTimeout(popupCloseTimer);
717
+ });
672
718
  const titleClasses = computed(() => {
673
719
  if (!menuContext) return "";
674
720
  return classNames(
@@ -707,8 +753,8 @@ var SubMenu = defineComponent({
707
753
  };
708
754
  const focusFirstChild = async () => {
709
755
  await nextTick();
710
- const titleEl = document.activeElement;
711
- if (titleEl) focusFirstChildItem(titleEl);
756
+ const titleEl2 = document.activeElement;
757
+ if (titleEl2) focusFirstChildItem(titleEl2);
712
758
  };
713
759
  const handleTitleKeyDown = async (event) => {
714
760
  if (!menuContext || props.disabled) return;
@@ -777,14 +823,25 @@ var SubMenu = defineComponent({
777
823
  }
778
824
  };
779
825
  const handleMouseEnter = () => {
826
+ if (popupCloseTimer) {
827
+ clearTimeout(popupCloseTimer);
828
+ popupCloseTimer = null;
829
+ }
780
830
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
781
831
  isHovered.value = true;
782
832
  }
783
833
  };
784
834
  const handleMouseLeave = () => {
785
835
  if (menuContext?.mode.value === "horizontal" || isPopup.value) {
786
- isHovered.value = false;
787
- isOpenByKeyboard.value = false;
836
+ const close = () => {
837
+ isHovered.value = false;
838
+ isOpenByKeyboard.value = false;
839
+ };
840
+ if (popupPortal.value) {
841
+ popupCloseTimer = setTimeout(close, 120);
842
+ return;
843
+ }
844
+ close();
788
845
  }
789
846
  };
790
847
  const indentStyle = computed(() => {
@@ -806,6 +863,9 @@ var SubMenu = defineComponent({
806
863
  const nextProps = {
807
864
  level: existingProps.level ?? nextLevel
808
865
  };
866
+ if (existingProps.collapsed == null && isPopup.value) {
867
+ nextProps.collapsed = false;
868
+ }
809
869
  return cloneVNode(node, nextProps);
810
870
  });
811
871
  };
@@ -838,6 +898,7 @@ var SubMenu = defineComponent({
838
898
  "button",
839
899
  {
840
900
  type: "button",
901
+ ref: titleEl,
841
902
  class: titleClasses.value,
842
903
  style: titleStyle.value,
843
904
  onClick: handleTitleClick,
@@ -853,19 +914,35 @@ var SubMenu = defineComponent({
853
914
  },
854
915
  titleChildren
855
916
  );
856
- const contentNode = isPopup.value ? h(
857
- "ul",
858
- {
859
- class: contentClasses.value,
860
- style: {
861
- display: isExpanded.value ? "block" : "none",
862
- ...popupZIndex.value
917
+ const popupContentNode = () => {
918
+ const popupStyle = popupPortal.value ? {
919
+ display: isExpanded.value ? "block" : "none",
920
+ position: "absolute",
921
+ left: `${popupX.value}px`,
922
+ top: `${popupY.value}px`,
923
+ transformOrigin: getTransformOrigin(currentPopupPlacement.value),
924
+ ...popupZIndex.value
925
+ } : {
926
+ display: isExpanded.value ? "block" : "none",
927
+ ...popupZIndex.value
928
+ };
929
+ const node = h(
930
+ "ul",
931
+ {
932
+ ref: popupPortal.value ? popupEl : void 0,
933
+ class: contentClasses.value,
934
+ style: popupStyle,
935
+ role: "menu",
936
+ "aria-hidden": isExpanded.value ? void 0 : "true",
937
+ onMouseenter: popupPortal.value ? handleMouseEnter : void 0,
938
+ onMouseleave: popupPortal.value ? handleMouseLeave : void 0,
939
+ "data-tiger-submenu-popup": ""
863
940
  },
864
- role: "menu",
865
- "aria-hidden": isExpanded.value ? void 0 : "true"
866
- },
867
- withChildLevel(slots.default?.())
868
- ) : hasRenderedInline.value ? h(
941
+ withChildLevel(slots.default?.())
942
+ );
943
+ return popupPortal.value ? renderVueBodyTeleport(node) : node;
944
+ };
945
+ const contentNode = isPopup.value ? popupContentNode() : hasRenderedInline.value ? h(
869
946
  "div",
870
947
  {
871
948
  ref: submenuContentEl,
@@ -889,7 +966,7 @@ var SubMenu = defineComponent({
889
966
  return h(
890
967
  "li",
891
968
  {
892
- class: isPopup.value ? "relative" : "",
969
+ class: isPopup.value && !popupPortal.value ? "relative" : "",
893
970
  onMouseenter: handleMouseEnter,
894
971
  onMouseleave: handleMouseLeave,
895
972
  role: "none"