@expcat/tigercat-vue 2.0.4 → 2.1.0

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 (114) hide show
  1. package/README.md +20 -10
  2. package/dist/chunk-26QCTL2E.mjs +180 -0
  3. package/dist/{chunk-GS4SV2HK.mjs → chunk-32X54QKW.mjs} +1 -1
  4. package/dist/chunk-3ONCXHE5.mjs +184 -0
  5. package/dist/{chunk-KOG3HKOF.mjs → chunk-6AMWX5K4.mjs} +1 -4
  6. package/dist/chunk-6GR3XC5V.mjs +281 -0
  7. package/dist/chunk-6GR5U4UB.mjs +225 -0
  8. package/dist/chunk-7DWWNFRP.mjs +302 -0
  9. package/dist/chunk-AECXFT7D.mjs +121 -0
  10. package/dist/chunk-AOLRZG4E.mjs +347 -0
  11. package/dist/chunk-AY7CGLMO.mjs +368 -0
  12. package/dist/chunk-BBNCP55O.mjs +156 -0
  13. package/dist/chunk-F3ZVVVYD.mjs +257 -0
  14. package/dist/{chunk-OTGGPXDT.mjs → chunk-IEAEB4TX.mjs} +255 -44
  15. package/dist/chunk-P6FMU4AT.mjs +54 -0
  16. package/dist/chunk-PFIV5MXD.mjs +48 -0
  17. package/dist/chunk-TBOXTAIA.mjs +94 -0
  18. package/dist/{chunk-H6FZBFRT.mjs → chunk-TPESRDUG.mjs} +6 -1
  19. package/dist/{chunk-2XCXK3NQ.mjs → chunk-U4B5QT72.mjs} +1 -1
  20. package/dist/chunk-UUWPSRNV.mjs +337 -0
  21. package/dist/chunk-UXJRH72H.mjs +834 -0
  22. package/dist/chunk-VFS5XAZ3.mjs +602 -0
  23. package/dist/{chunk-WC5MKASU.mjs → chunk-VN2TWPRC.mjs} +169 -55
  24. package/dist/components/ActivityFeed.d.mts +1 -1
  25. package/dist/components/ActivityFeed.mjs +1 -1
  26. package/dist/components/Alert.d.mts +2 -2
  27. package/dist/components/AreaChart.mjs +2 -2
  28. package/dist/components/AspectRatio.d.mts +44 -0
  29. package/dist/components/AspectRatio.mjs +8 -0
  30. package/dist/components/BarChart.mjs +2 -2
  31. package/dist/components/Carousel.d.mts +1 -1
  32. package/dist/components/Cascader.d.mts +34 -0
  33. package/dist/components/Cascader.mjs +1 -1
  34. package/dist/components/ChartLegend.d.mts +1 -1
  35. package/dist/components/ChatWindow.mjs +1 -1
  36. package/dist/components/CodeEditor.mjs +1 -1
  37. package/dist/components/ColorSwatch.d.mts +1 -1
  38. package/dist/components/ContextMenu.d.mts +234 -0
  39. package/dist/components/ContextMenu.mjs +17 -0
  40. package/dist/components/DataTableWithToolbar.d.mts +1 -1
  41. package/dist/components/DataTableWithToolbar.mjs +2 -2
  42. package/dist/components/DonutChart.mjs +3 -3
  43. package/dist/components/Dropdown.d.mts +1 -1
  44. package/dist/components/FloatButton.d.mts +2 -2
  45. package/dist/components/FunnelChart.d.mts +1 -1
  46. package/dist/components/FunnelChart.mjs +2 -2
  47. package/dist/components/Highlight.d.mts +146 -0
  48. package/dist/components/Highlight.mjs +8 -0
  49. package/dist/components/ImageCompare.d.mts +284 -0
  50. package/dist/components/ImageCompare.mjs +8 -0
  51. package/dist/components/Input.d.mts +1 -1
  52. package/dist/components/InputOTP.d.mts +261 -0
  53. package/dist/components/InputOTP.mjs +11 -0
  54. package/dist/components/Kbd.d.mts +118 -0
  55. package/dist/components/Kbd.mjs +8 -0
  56. package/dist/components/LineChart.mjs +2 -2
  57. package/dist/components/List.d.mts +1 -1
  58. package/dist/components/List.mjs +1 -1
  59. package/dist/components/LoadingBar.d.mts +8 -0
  60. package/dist/components/LoadingBar.mjs +114 -0
  61. package/dist/components/LoadingBarContainer.d.mts +78 -0
  62. package/dist/components/LoadingBarContainer.mjs +8 -0
  63. package/dist/components/LoadingBarRoot.d.mts +6 -0
  64. package/dist/components/LoadingBarRoot.mjs +6 -0
  65. package/dist/components/Marquee.d.mts +158 -0
  66. package/dist/components/Marquee.mjs +8 -0
  67. package/dist/components/MaskInput.d.mts +201 -0
  68. package/dist/components/MaskInput.mjs +11 -0
  69. package/dist/components/Masonry.d.mts +66 -0
  70. package/dist/components/Masonry.mjs +8 -0
  71. package/dist/components/Menu.d.mts +2 -2
  72. package/dist/components/Modal.d.mts +1 -1
  73. package/dist/components/NavigationMenu.d.mts +411 -0
  74. package/dist/components/NavigationMenu.mjs +25 -0
  75. package/dist/components/NotificationCenter.d.mts +1 -1
  76. package/dist/components/NotificationCenter.mjs +2 -2
  77. package/dist/components/PageHeader.d.mts +140 -0
  78. package/dist/components/PageHeader.mjs +11 -0
  79. package/dist/components/PieChart.mjs +2 -2
  80. package/dist/components/Popconfirm.d.mts +3 -3
  81. package/dist/components/Popover.d.mts +2 -2
  82. package/dist/components/RadarChart.mjs +2 -2
  83. package/dist/components/ScatterChart.mjs +2 -2
  84. package/dist/components/ScrollArea.d.mts +136 -0
  85. package/dist/components/ScrollArea.mjs +8 -0
  86. package/dist/components/SplitButton.d.mts +286 -0
  87. package/dist/components/SplitButton.mjs +12 -0
  88. package/dist/components/Spotlight.d.mts +1 -1
  89. package/dist/components/SunburstChart.mjs +2 -2
  90. package/dist/components/TagsInput.d.mts +214 -0
  91. package/dist/components/TagsInput.mjs +12 -0
  92. package/dist/components/Timeline.d.mts +1 -1
  93. package/dist/components/Tooltip.d.mts +2 -2
  94. package/dist/components/Tour.d.mts +3 -3
  95. package/dist/components/Tree.d.mts +1 -1
  96. package/dist/components/TreeMapChart.d.mts +1 -1
  97. package/dist/components/TreeMapChart.mjs +2 -2
  98. package/dist/components/TreeSelect.d.mts +51 -0
  99. package/dist/components/TreeSelect.mjs +2 -1
  100. package/dist/components/Upload.d.mts +1 -1
  101. package/dist/components/VirtualTable.d.mts +1 -1
  102. package/dist/components/Watermark.d.mts +1 -1
  103. package/dist/index.d.mts +17 -1
  104. package/dist/index.mjs +356 -0
  105. package/package.json +117 -2
  106. package/dist/{chunk-MAKOSWR6.mjs → chunk-37W7XTA6.mjs} +3 -3
  107. package/dist/{chunk-WUQMFKQ6.mjs → chunk-66OS5A4D.mjs} +3 -3
  108. package/dist/{chunk-NNC75I7F.mjs → chunk-CHEXI7MO.mjs} +3 -3
  109. package/dist/{chunk-KFJIZED5.mjs → chunk-EHGFW5GX.mjs} +3 -3
  110. package/dist/{chunk-ZGA66PSG.mjs → chunk-EZYOCPMM.mjs} +3 -3
  111. package/dist/{chunk-XGXZF27U.mjs → chunk-JHMT5Q6P.mjs} +3 -3
  112. package/dist/{chunk-NGAA73CV.mjs → chunk-VLW3UBIR.mjs} +3 -3
  113. package/dist/{chunk-OTHJIFDV.mjs → chunk-W5XFWVNV.mjs} +3 -3
  114. package/dist/{chunk-3KITFMBJ.mjs → chunk-ZOYHZF4N.mjs} +3 -3
@@ -0,0 +1,602 @@
1
+ import {
2
+ renderVueOverlayTeleport,
3
+ useVueAnchoredOverlay
4
+ } from "./chunk-Q7Y22OFX.mjs";
5
+
6
+ // src/components/ContextMenu.ts
7
+ import {
8
+ defineComponent,
9
+ computed,
10
+ ref,
11
+ provide,
12
+ inject,
13
+ h,
14
+ onBeforeUnmount,
15
+ onMounted,
16
+ nextTick,
17
+ cloneVNode,
18
+ watch
19
+ } from "vue";
20
+ import {
21
+ classNames,
22
+ coerceClassValue,
23
+ mergeStyleValues,
24
+ getContextMenuContainerClasses,
25
+ getContextMenuTriggerClasses,
26
+ getContextMenuMenuClasses,
27
+ getContextMenuItemClasses,
28
+ getContextMenuSubTriggerClasses,
29
+ getContextMenuSubChevronClasses,
30
+ getContextMenuPointStyle,
31
+ getContextMenuOpenPoint,
32
+ injectContextMenuStyles,
33
+ CONTEXT_MENU_ENTER_CLASS,
34
+ CONTEXT_MENU_SUB_CHEVRON_PATH,
35
+ isContextMenuKeyboardEvent,
36
+ handleMenuNavigation,
37
+ focusFirstMenuItem,
38
+ captureActiveElement,
39
+ restoreFocus
40
+ } from "@expcat/tigercat-core";
41
+ var ContextMenuMenu = defineComponent({
42
+ name: "TigerContextMenuMenu",
43
+ inheritAttrs: false,
44
+ props: {
45
+ className: {
46
+ type: String,
47
+ default: void 0
48
+ },
49
+ style: {
50
+ type: Object,
51
+ default: void 0
52
+ }
53
+ },
54
+ setup(props, { slots, attrs }) {
55
+ const attrsRecord = attrs;
56
+ const attrsClass = attrsRecord.class;
57
+ const attrsStyle = attrsRecord.style;
58
+ const menuClasses = computed(
59
+ () => classNames(getContextMenuMenuClasses(), props.className, coerceClassValue(attrsClass))
60
+ );
61
+ const mergedStyle = computed(() => mergeStyleValues(attrsStyle, props.style));
62
+ return () => {
63
+ const {
64
+ class: _class,
65
+ style: _style,
66
+ ...restAttrs
67
+ } = attrsRecord;
68
+ return h(
69
+ "div",
70
+ {
71
+ ...restAttrs,
72
+ class: menuClasses.value,
73
+ role: "menu",
74
+ style: mergedStyle.value
75
+ },
76
+ slots.default?.()
77
+ );
78
+ };
79
+ }
80
+ });
81
+ var contextMenuIdCounter = 0;
82
+ var createContextMenuId = () => `tiger-context-menu-${++contextMenuIdCounter}`;
83
+ var ContextMenuContextKey = /* @__PURE__ */ Symbol("ContextMenuContext");
84
+ var ContextMenuItem = defineComponent({
85
+ name: "TigerContextMenuItem",
86
+ inheritAttrs: false,
87
+ props: {
88
+ disabled: {
89
+ type: Boolean,
90
+ default: false
91
+ },
92
+ divided: {
93
+ type: Boolean,
94
+ default: false
95
+ },
96
+ className: {
97
+ type: String,
98
+ default: void 0
99
+ },
100
+ style: {
101
+ type: Object,
102
+ default: void 0
103
+ }
104
+ },
105
+ emits: ["click"],
106
+ setup(props, { slots, emit, attrs }) {
107
+ const attrsRecord = attrs;
108
+ const attrsClass = attrsRecord.class;
109
+ const attrsStyle = attrsRecord.style;
110
+ const context = inject(ContextMenuContextKey, null);
111
+ const handleClick = (event) => {
112
+ if (props.disabled) {
113
+ event.preventDefault();
114
+ return;
115
+ }
116
+ emit("click", event);
117
+ if (context?.closeOnClick) {
118
+ context.handleItemClick();
119
+ }
120
+ };
121
+ const itemClasses = computed(
122
+ () => classNames(
123
+ getContextMenuItemClasses(props.disabled, props.divided),
124
+ props.className,
125
+ coerceClassValue(attrsClass)
126
+ )
127
+ );
128
+ const mergedStyle = computed(() => mergeStyleValues(attrsStyle, props.style));
129
+ return () => {
130
+ const {
131
+ class: _class,
132
+ style: _style,
133
+ ...restAttrs
134
+ } = attrsRecord;
135
+ return h(
136
+ "button",
137
+ {
138
+ ...restAttrs,
139
+ type: "button",
140
+ class: itemClasses.value,
141
+ role: "menuitem",
142
+ tabindex: -1,
143
+ "aria-disabled": props.disabled,
144
+ disabled: props.disabled,
145
+ onClick: handleClick,
146
+ style: mergedStyle.value
147
+ },
148
+ slots.default?.()
149
+ );
150
+ };
151
+ }
152
+ });
153
+ var ContextMenuSub = defineComponent({
154
+ name: "TigerContextMenuSub",
155
+ inheritAttrs: false,
156
+ props: {
157
+ itemKey: {
158
+ type: [String, Number],
159
+ default: void 0
160
+ },
161
+ title: {
162
+ type: String,
163
+ default: ""
164
+ },
165
+ disabled: {
166
+ type: Boolean,
167
+ default: false
168
+ },
169
+ className: {
170
+ type: String,
171
+ default: void 0
172
+ },
173
+ style: {
174
+ type: Object,
175
+ default: void 0
176
+ }
177
+ },
178
+ setup(props, { slots, attrs }) {
179
+ const attrsRecord = attrs;
180
+ const attrsClass = attrsRecord.class;
181
+ const attrsStyle = attrsRecord.style;
182
+ const context = inject(ContextMenuContextKey, null);
183
+ const isHovered = ref(false);
184
+ const isOpenByKeyboard = ref(false);
185
+ const titleRef = ref(null);
186
+ const popupRef = ref(null);
187
+ let popupCloseTimer = null;
188
+ const isExpanded = computed(() => isHovered.value || isOpenByKeyboard.value);
189
+ const portalEnabled = computed(() => Boolean(context?.portal.value));
190
+ const overlay = useVueAnchoredOverlay({
191
+ referenceRef: titleRef,
192
+ floatingRef: popupRef,
193
+ enabled: computed(() => Boolean(context) && isExpanded.value && !props.disabled),
194
+ placement: "right-start",
195
+ offset: 4,
196
+ portal: portalEnabled,
197
+ dismissOnEscape: true,
198
+ onDismiss: () => {
199
+ isOpenByKeyboard.value = false;
200
+ isHovered.value = false;
201
+ }
202
+ });
203
+ watch(
204
+ () => context?.visible.value,
205
+ (visible) => {
206
+ if (!visible) {
207
+ isHovered.value = false;
208
+ isOpenByKeyboard.value = false;
209
+ }
210
+ }
211
+ );
212
+ onBeforeUnmount(() => {
213
+ if (popupCloseTimer) clearTimeout(popupCloseTimer);
214
+ });
215
+ const clearCloseTimer = () => {
216
+ if (popupCloseTimer) {
217
+ clearTimeout(popupCloseTimer);
218
+ popupCloseTimer = null;
219
+ }
220
+ };
221
+ const handleMouseEnter = () => {
222
+ if (props.disabled) return;
223
+ clearCloseTimer();
224
+ isHovered.value = true;
225
+ };
226
+ const handleMouseLeave = () => {
227
+ const close = () => {
228
+ isHovered.value = false;
229
+ isOpenByKeyboard.value = false;
230
+ };
231
+ if (portalEnabled.value) {
232
+ popupCloseTimer = setTimeout(close, 120);
233
+ return;
234
+ }
235
+ close();
236
+ };
237
+ const focusPopupFirstItem = () => {
238
+ nextTick(() => {
239
+ if (popupRef.value) focusFirstMenuItem(popupRef.value);
240
+ });
241
+ };
242
+ const handleTitleKeyDown = (event) => {
243
+ if (props.disabled) return;
244
+ if (event.key === "ArrowRight" || event.key === "Enter" || event.key === " ") {
245
+ event.preventDefault();
246
+ event.stopPropagation();
247
+ isOpenByKeyboard.value = true;
248
+ isHovered.value = true;
249
+ focusPopupFirstItem();
250
+ return;
251
+ }
252
+ if (event.key === "ArrowLeft" || event.key === "Escape") {
253
+ if (isExpanded.value) {
254
+ event.preventDefault();
255
+ event.stopPropagation();
256
+ isOpenByKeyboard.value = false;
257
+ isHovered.value = false;
258
+ titleRef.value?.focus();
259
+ }
260
+ }
261
+ };
262
+ const handlePopupKeyDown = (event) => {
263
+ if (popupRef.value) {
264
+ handleMenuNavigation(popupRef.value, event);
265
+ }
266
+ if (event.key === "ArrowLeft" || event.key === "Escape") {
267
+ event.preventDefault();
268
+ event.stopPropagation();
269
+ isOpenByKeyboard.value = false;
270
+ isHovered.value = false;
271
+ titleRef.value?.focus();
272
+ }
273
+ };
274
+ const handlePopupContextMenu = (event) => {
275
+ event.preventDefault();
276
+ };
277
+ const titleClasses = computed(
278
+ () => classNames(
279
+ getContextMenuSubTriggerClasses(props.disabled),
280
+ props.className,
281
+ coerceClassValue(attrsClass)
282
+ )
283
+ );
284
+ const mergedStyle = computed(() => mergeStyleValues(attrsStyle, props.style));
285
+ const popupClasses = computed(
286
+ () => classNames(overlay.floatingClasses.value, CONTEXT_MENU_ENTER_CLASS)
287
+ );
288
+ return () => {
289
+ if (!context) return null;
290
+ const {
291
+ class: _class,
292
+ style: _style,
293
+ ...restAttrs
294
+ } = attrsRecord;
295
+ const trigger = h(
296
+ "button",
297
+ {
298
+ ...restAttrs,
299
+ ref: titleRef,
300
+ type: "button",
301
+ class: titleClasses.value,
302
+ style: mergedStyle.value,
303
+ role: "menuitem",
304
+ tabindex: -1,
305
+ "aria-haspopup": "menu",
306
+ "aria-expanded": isExpanded.value,
307
+ "aria-disabled": props.disabled || void 0,
308
+ "data-state": isExpanded.value ? "open" : "closed",
309
+ "data-tiger-context-menu-sub-trigger": "",
310
+ disabled: props.disabled,
311
+ onClick: (event) => {
312
+ event.preventDefault();
313
+ event.stopPropagation();
314
+ },
315
+ onMouseenter: handleMouseEnter,
316
+ onKeydown: handleTitleKeyDown
317
+ },
318
+ [
319
+ h("span", { class: "flex-1 text-left" }, props.title),
320
+ h(
321
+ "svg",
322
+ {
323
+ class: getContextMenuSubChevronClasses(),
324
+ viewBox: "0 0 24 24",
325
+ fill: "none",
326
+ stroke: "currentColor",
327
+ "stroke-width": "2",
328
+ "stroke-linecap": "round",
329
+ "stroke-linejoin": "round",
330
+ "aria-hidden": "true"
331
+ },
332
+ [h("path", { d: CONTEXT_MENU_SUB_CHEVRON_PATH })]
333
+ )
334
+ ]
335
+ );
336
+ const popup = h(
337
+ "div",
338
+ {
339
+ ref: popupRef,
340
+ class: popupClasses.value,
341
+ style: overlay.floatingStyles.value,
342
+ "data-positioned": overlay.positioned.value,
343
+ "data-tiger-context-menu-sub": "",
344
+ hidden: !isExpanded.value,
345
+ onMouseenter: handleMouseEnter,
346
+ onMouseleave: handleMouseLeave,
347
+ onKeydown: handlePopupKeyDown,
348
+ onContextmenu: handlePopupContextMenu
349
+ },
350
+ [
351
+ h(
352
+ "div",
353
+ {
354
+ class: getContextMenuMenuClasses(),
355
+ role: "menu"
356
+ },
357
+ slots.default?.()
358
+ )
359
+ ]
360
+ );
361
+ return h(
362
+ "div",
363
+ {
364
+ class: portalEnabled.value ? void 0 : "relative",
365
+ onMouseenter: handleMouseEnter,
366
+ onMouseleave: handleMouseLeave,
367
+ role: "none"
368
+ },
369
+ [trigger, renderVueOverlayTeleport(popup, overlay.target.value, !portalEnabled.value)]
370
+ );
371
+ };
372
+ }
373
+ });
374
+ var ContextMenu = defineComponent({
375
+ name: "TigerContextMenu",
376
+ inheritAttrs: false,
377
+ props: {
378
+ disabled: {
379
+ type: Boolean,
380
+ default: false
381
+ },
382
+ open: {
383
+ type: Boolean,
384
+ default: void 0
385
+ },
386
+ defaultOpen: {
387
+ type: Boolean,
388
+ default: false
389
+ },
390
+ closeOnClick: {
391
+ type: Boolean,
392
+ default: true
393
+ },
394
+ portal: {
395
+ type: Boolean,
396
+ default: true
397
+ },
398
+ offset: {
399
+ type: Number,
400
+ default: 0
401
+ },
402
+ placement: {
403
+ type: String,
404
+ default: "bottom-start"
405
+ },
406
+ className: {
407
+ type: String,
408
+ default: void 0
409
+ },
410
+ style: {
411
+ type: Object,
412
+ default: void 0
413
+ }
414
+ },
415
+ emits: ["update:open", "open-change"],
416
+ setup(props, { slots, emit, attrs }) {
417
+ const attrsRecord = attrs;
418
+ const attrsClass = attrsRecord.class;
419
+ const attrsStyle = attrsRecord.style;
420
+ onMounted(() => {
421
+ injectContextMenuStyles();
422
+ if (currentVisible.value) ensurePoint();
423
+ });
424
+ const menuId = createContextMenuId();
425
+ const previousActiveElement = ref(null);
426
+ const internalVisible = ref(props.defaultOpen);
427
+ const currentVisible = computed(
428
+ () => props.open !== void 0 ? props.open : internalVisible.value
429
+ );
430
+ const containerRef = ref(null);
431
+ const triggerRef = ref(null);
432
+ const pointRef = ref(null);
433
+ const floatingRef = ref(null);
434
+ const point = ref({ x: 0, y: 0 });
435
+ const hasExplicitPoint = ref(false);
436
+ const setVisible = (visible) => {
437
+ if (props.disabled && visible) return;
438
+ if (visible && !currentVisible.value) {
439
+ previousActiveElement.value = captureActiveElement();
440
+ }
441
+ if (props.open === void 0) {
442
+ internalVisible.value = visible;
443
+ }
444
+ emit("update:open", visible);
445
+ emit("open-change", visible);
446
+ if (visible) {
447
+ nextTick(() => {
448
+ requestAnimationFrame(() => {
449
+ if (floatingRef.value) {
450
+ focusFirstMenuItem(floatingRef.value);
451
+ }
452
+ });
453
+ });
454
+ } else {
455
+ restoreFocus(previousActiveElement.value);
456
+ previousActiveElement.value = null;
457
+ }
458
+ };
459
+ const ensurePoint = () => {
460
+ if (hasExplicitPoint.value) return;
461
+ point.value = getContextMenuOpenPoint(null, triggerRef.value);
462
+ };
463
+ watch(
464
+ currentVisible,
465
+ (visible) => {
466
+ if (visible) ensurePoint();
467
+ },
468
+ { immediate: true }
469
+ );
470
+ const handleItemClick = () => {
471
+ if (props.closeOnClick) setVisible(false);
472
+ };
473
+ const openAt = (next) => {
474
+ point.value = next;
475
+ hasExplicitPoint.value = true;
476
+ setVisible(true);
477
+ };
478
+ const handleContextMenu = (event) => {
479
+ if (props.disabled) return;
480
+ event.preventDefault();
481
+ event.stopPropagation();
482
+ openAt(getContextMenuOpenPoint(event, triggerRef.value));
483
+ };
484
+ const handleTriggerKeyDown = (event) => {
485
+ if (props.disabled || !isContextMenuKeyboardEvent(event)) return;
486
+ event.preventDefault();
487
+ openAt(getContextMenuOpenPoint(null, triggerRef.value));
488
+ };
489
+ const handleMenuKeyDown = (event) => {
490
+ if (floatingRef.value) {
491
+ handleMenuNavigation(floatingRef.value, event);
492
+ }
493
+ };
494
+ const handleMenuContextMenu = (event) => {
495
+ event.preventDefault();
496
+ };
497
+ const portalEnabled = computed(() => props.portal);
498
+ const overlay = useVueAnchoredOverlay({
499
+ referenceRef: pointRef,
500
+ floatingRef,
501
+ enabled: currentVisible,
502
+ placement: props.placement,
503
+ offset: props.offset,
504
+ portal: portalEnabled,
505
+ dismissOnOutside: true,
506
+ dismissOnEscape: true,
507
+ onDismiss: () => setVisible(false)
508
+ });
509
+ const containerClasses = computed(
510
+ () => classNames(getContextMenuContainerClasses(), props.className, coerceClassValue(attrsClass))
511
+ );
512
+ const mergedStyle = computed(() => mergeStyleValues(attrsStyle, props.style));
513
+ const triggerClasses = computed(() => getContextMenuTriggerClasses(props.disabled));
514
+ const menuWrapperClasses = computed(
515
+ () => classNames(overlay.floatingClasses.value, CONTEXT_MENU_ENTER_CLASS)
516
+ );
517
+ const pointStyle = computed(() => getContextMenuPointStyle(point.value));
518
+ const contextMenuContext = {
519
+ get closeOnClick() {
520
+ return props.closeOnClick;
521
+ },
522
+ handleItemClick,
523
+ portal: portalEnabled,
524
+ visible: currentVisible
525
+ };
526
+ provide(ContextMenuContextKey, contextMenuContext);
527
+ return () => {
528
+ const defaultSlot = slots.default?.() ?? [];
529
+ let triggerNodes = [];
530
+ let menuNode = null;
531
+ defaultSlot.forEach((node) => {
532
+ if (node.type === ContextMenuMenu) {
533
+ menuNode = node;
534
+ return;
535
+ }
536
+ triggerNodes.push(node);
537
+ });
538
+ const trigger = h(
539
+ "div",
540
+ {
541
+ ref: triggerRef,
542
+ class: triggerClasses.value,
543
+ onContextmenu: handleContextMenu,
544
+ onKeydown: handleTriggerKeyDown,
545
+ "aria-haspopup": "menu",
546
+ "aria-expanded": currentVisible.value,
547
+ "aria-controls": currentVisible.value ? menuId : void 0,
548
+ "data-state": currentVisible.value ? "open" : "closed",
549
+ "data-tiger-context-menu-trigger": ""
550
+ },
551
+ triggerNodes
552
+ );
553
+ const pointNode = h("div", {
554
+ ref: pointRef,
555
+ style: pointStyle.value,
556
+ "aria-hidden": "true",
557
+ "data-tiger-context-menu-point": ""
558
+ });
559
+ const menuWrapper = menuNode ? h(
560
+ "div",
561
+ {
562
+ key: `${point.value.x},${point.value.y}`,
563
+ ref: floatingRef,
564
+ class: menuWrapperClasses.value,
565
+ style: overlay.floatingStyles.value,
566
+ "data-positioned": overlay.positioned.value,
567
+ "data-tiger-context-menu": "",
568
+ onKeydown: handleMenuKeyDown,
569
+ onContextmenu: handleMenuContextMenu,
570
+ hidden: !currentVisible.value
571
+ },
572
+ [cloneVNode(menuNode, { id: menuId })]
573
+ ) : null;
574
+ const menu = menuWrapper ? renderVueOverlayTeleport(menuWrapper, overlay.target.value, !props.portal) : null;
575
+ const {
576
+ class: _class,
577
+ style: _style,
578
+ ...restAttrs
579
+ } = attrsRecord;
580
+ return h(
581
+ "div",
582
+ {
583
+ ...restAttrs,
584
+ ref: containerRef,
585
+ class: containerClasses.value,
586
+ style: mergedStyle.value
587
+ },
588
+ [trigger, pointNode, menu]
589
+ );
590
+ };
591
+ }
592
+ });
593
+ var ContextMenu_default = ContextMenu;
594
+
595
+ export {
596
+ ContextMenuMenu,
597
+ ContextMenuContextKey,
598
+ ContextMenuItem,
599
+ ContextMenuSub,
600
+ ContextMenu,
601
+ ContextMenu_default
602
+ };