@eightshift/ui-components 0.0.1

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 (112) hide show
  1. package/README.md +27 -0
  2. package/dist/Checkbox-BLcVbhiO.js +178 -0
  3. package/dist/ColorSwatch-Cmlex_kT.js +66 -0
  4. package/dist/FieldError-wtMA4667.js +42 -0
  5. package/dist/FocusScope-1u9yyfIN.js +725 -0
  6. package/dist/Form-Cq3fu75_.js +5 -0
  7. package/dist/GridList-BZPXp3_O.js +1256 -0
  8. package/dist/Group-DyqpTRPe.js +49 -0
  9. package/dist/Input-jsbb4ugq.js +130 -0
  10. package/dist/Label-BPzS-sR7.js +17 -0
  11. package/dist/ListBox-w9gDaJkV.js +4423 -0
  12. package/dist/LiveAnnouncer-IsokfWQ5.js +73 -0
  13. package/dist/NumberFormatter-LzoKy975.js +160 -0
  14. package/dist/RSPContexts-CrNYmadY.js +14 -0
  15. package/dist/Select-49a62830.esm-C-RFtLiD.js +2541 -0
  16. package/dist/SelectionManager-mefd0ThJ.js +2155 -0
  17. package/dist/Separator-DHn0CwdK.js +325 -0
  18. package/dist/Slider-Pyh2V4bY.js +885 -0
  19. package/dist/Text-BM136LvS.js +17 -0
  20. package/dist/VisuallyHidden-BYRI1Lfo.js +51 -0
  21. package/dist/_commonjsHelpers-CUmg6egw.js +6 -0
  22. package/dist/ariaHideOutside-ByKBPHmX.js +113 -0
  23. package/dist/assets/style.css +1 -0
  24. package/dist/button-BkkdyHfJ.js +307 -0
  25. package/dist/components/animated-visibility/animated-visibility.js +7165 -0
  26. package/dist/components/base-control/base-control.js +97 -0
  27. package/dist/components/breakpoint-preview/breakpoint-preview.js +218 -0
  28. package/dist/components/button/button.js +10 -0
  29. package/dist/components/checkbox/checkbox.js +119 -0
  30. package/dist/components/color-pickers/color-picker.js +242 -0
  31. package/dist/components/color-pickers/color-swatch.js +62 -0
  32. package/dist/components/color-pickers/gradient-editor.js +516 -0
  33. package/dist/components/color-pickers/solid-color-picker.js +1633 -0
  34. package/dist/components/component-toggle/component-toggle.js +71 -0
  35. package/dist/components/container-panel/container-panel.js +39 -0
  36. package/dist/components/expandable/expandable.js +144 -0
  37. package/dist/components/input-field/input-field.js +224 -0
  38. package/dist/components/link-input/link-input.js +937 -0
  39. package/dist/components/list-box/list-box.js +152 -0
  40. package/dist/components/matrix-align/matrix-align.js +185 -0
  41. package/dist/components/menu/menu.js +1608 -0
  42. package/dist/components/notice/notice.js +119 -0
  43. package/dist/components/number-picker/number-picker.js +277 -0
  44. package/dist/components/popover/popover.js +9 -0
  45. package/dist/components/radio/radio.js +552 -0
  46. package/dist/components/repeater/repeater-item.js +127 -0
  47. package/dist/components/repeater/repeater.js +248 -0
  48. package/dist/components/responsive/responsive-legacy.js +326 -0
  49. package/dist/components/responsive/responsive.js +499 -0
  50. package/dist/components/responsive-preview/responsive-preview.js +119 -0
  51. package/dist/components/rich-label/rich-label.js +56 -0
  52. package/dist/components/select/async-multi-select.js +144 -0
  53. package/dist/components/select/async-single-select.js +126 -0
  54. package/dist/components/select/custom-select-default-components.js +38 -0
  55. package/dist/components/select/multi-select-components.js +8 -0
  56. package/dist/components/select/multi-select.js +134 -0
  57. package/dist/components/select/react-select-component-wrappers.js +90 -0
  58. package/dist/components/select/shared.js +45 -0
  59. package/dist/components/select/single-select.js +116 -0
  60. package/dist/components/select/styles.js +55 -0
  61. package/dist/components/slider/column-config-slider.js +225 -0
  62. package/dist/components/slider/slider.js +362 -0
  63. package/dist/components/slider/utils.js +45 -0
  64. package/dist/components/spacer/spacer.js +93 -0
  65. package/dist/components/tabs/tabs.js +626 -0
  66. package/dist/components/toggle/switch.js +140 -0
  67. package/dist/components/toggle/toggle.js +58 -0
  68. package/dist/components/toggle-button/toggle-button.js +206 -0
  69. package/dist/components/tooltip/tooltip.js +10 -0
  70. package/dist/context-jMy6xdVq.js +98 -0
  71. package/dist/default-i18n-BhE-OUmt.js +873 -0
  72. package/dist/filterDOMProps-DG2RfOUr.js +30 -0
  73. package/dist/focusSafely-C3K8zAKj.js +743 -0
  74. package/dist/hooks/use-cell-edit-mode.js +35 -0
  75. package/dist/icons/block-icon.js +42 -0
  76. package/dist/icons/generic-color-swatch.js +21 -0
  77. package/dist/icons/icons.js +3636 -0
  78. package/dist/index-Bfb9bWcb.js +28844 -0
  79. package/dist/index-a301f526.esm-Bioi4cGX.js +3576 -0
  80. package/dist/index.js +109 -0
  81. package/dist/intlStrings-CUhoK9EN.js +2484 -0
  82. package/dist/isScrollable-PcyglExV.js +10 -0
  83. package/dist/modifiers.esm-BuJQPI1X.js +31 -0
  84. package/dist/multi-select-components-CjVpCNko.js +3677 -0
  85. package/dist/number-rWqELA8W.js +39 -0
  86. package/dist/popover-Dx3vKXUX.js +1061 -0
  87. package/dist/react-select-async.esm-TFb_ZX6C.js +111 -0
  88. package/dist/react-select.esm-BjRWqf0E.js +15 -0
  89. package/dist/style.js +1 -0
  90. package/dist/textSelection-BosCCRVE.js +89 -0
  91. package/dist/tooltip-CkCndvTI.js +1094 -0
  92. package/dist/useButton-CuG5UzUw.js +74 -0
  93. package/dist/useEvent-DHv-yhOH.js +24 -0
  94. package/dist/useFocusRing-Cc-4eouh.js +41 -0
  95. package/dist/useFocusable-5q1Gek1J.js +81 -0
  96. package/dist/useFormReset-Buc9YJcv.js +23 -0
  97. package/dist/useFormValidationState-BAPPNXic.js +238 -0
  98. package/dist/useHasTabbableChild-D3uUNhJ0.js +37 -0
  99. package/dist/useLabel-CGlkoFG0.js +28 -0
  100. package/dist/useLabels-Dg62M_3P.js +25 -0
  101. package/dist/useListData-BelKu4kx.js +211 -0
  102. package/dist/useListState-Domq0blV.js +137 -0
  103. package/dist/useLocalizedStringFormatter-Prmz0h0A.js +130 -0
  104. package/dist/useNumberFieldState-BLU3uhSR.js +1253 -0
  105. package/dist/useNumberFormatter-BLc2xjZn.js +13 -0
  106. package/dist/usePress-BQgVor4T.js +698 -0
  107. package/dist/useToggle-C9ETOBaZ.js +58 -0
  108. package/dist/useToggleState-DJ_z5E2S.js +21 -0
  109. package/dist/utilities/classnames.js +16 -0
  110. package/dist/utilities/text-helpers.js +79 -0
  111. package/dist/utils-BsiH7-5Y.js +488 -0
  112. package/package.json +71 -0
@@ -0,0 +1,1608 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { $ as $982254629710d113$export$b95089534ab7c1fd, b as $453cc9f0df89c0a5$export$77d5aafae4e095b2, c as $431f98aba6844401$export$1ff3c3f08ae963c0, d as $431f98aba6844401$export$6615d83f6de245ce, e as $72a5793c14baf454$export$8b251419efc915eb } from "../../Separator-DHn0CwdK.js";
3
+ import { p as $8a26561d2877236e$export$c24ed0104d07eab9, f as $880e95eb8b93ba9a$export$ecf600387e221c37, $ as $7af3f5b51489e0b5$export$253fe78d46329472, a as $7613b1592d41b092$export$6cd28814d92fa9c9, b as $d496c0a20b6e58ec$export$6c8a5aaad13c9852, j as $7135fc7d473fd974$export$e7c29ae2353b16ea, n as $7135fc7d473fd974$export$6cd28814d92fa9c9, o as $7135fc7d473fd974$export$727c8fc270210f13, q as $7135fc7d473fd974$export$6e2c8f0811a474ce } from "../../SelectionManager-mefd0ThJ.js";
4
+ import { e as $bdb11010cef70236$export$f680877a34711e37, d as $3ef42575df84b30b$export$9d1611c77c2fe928, k as $bdb11010cef70236$export$b4cc09c592e8fdb8, f as $8ae05eaa5c114e9c$export$7f54fc3180508a52, g as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c, j as $64fa3d84918910a7$export$2881499e37b75b9a, a as $64fa3d84918910a7$export$29f1550f4b0d4415, h as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, m as $5dc95899b306f630$export$c9058316764c140e, l as $df56164dff5785e2$export$4338b53315abf666, c as $64fa3d84918910a7$export$4d86445c2cf5e3, $ as $64fa3d84918910a7$export$fabf2dc03a41866e } from "../../utils-BsiH7-5Y.js";
5
+ import React__default, { useRef, useState, useEffect, useCallback, useMemo, createContext, forwardRef, useContext, cloneElement } from "react";
6
+ import { $ as $628037886ba31236$export$f9d5c8beee7d008d, a as $de32f1b87079253c$export$d2f961adcb0afbe, b as $07b14b47974efb58$export$9b9a0cd73afb7ca4, c as $f1ab8c75478c6f73$export$3351871ee4b288b8, d as $e0b6e0b68ec7f50f$export$872b660ac5a1ff98, P as Popover } from "../../popover-Dx3vKXUX.js";
7
+ import { a as $514c0188e459b4c0$export$9afb8bc826b033ea } from "../../Text-BM136LvS.js";
8
+ import { $ as $65484d02dcb7eb3e$export$457c3d6518dd4c6f } from "../../filterDOMProps-DG2RfOUr.js";
9
+ import { $ as $9daab02d461809db$export$683480f191c0e3ea, a as $fc909762b330b746$export$61c6a8c84e605fb6 } from "../../tooltip-CkCndvTI.js";
10
+ import { $ as $6179b936705e76d3$export$ae780daf29e6d456, a as $507fabe10e71c6fb$export$b9b3dfddab17db27, c as $a1ea59d68270f0dd$export$f8168d8dd8fd66e6, w as $507fabe10e71c6fb$export$98e20ec92f614cfe, e as $458b0a5536c1a7cf$export$40bfa8c7b0832715 } from "../../focusSafely-C3K8zAKj.js";
11
+ import { $ as $fca6afa0e843324b$export$f12b703ca79dfbb1 } from "../../useLocalizedStringFormatter-Prmz0h0A.js";
12
+ import { b as $ea8dcbcb9ea1b556$export$9a302a45f65d0572, $ as $f6c31cce2adf654f$export$45712eceda6fad21, a as $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 } from "../../usePress-BQgVor4T.js";
13
+ import { a as $46d819fcbaf35654$export$8f71654801c2f7cd } from "../../useFocusable-5q1Gek1J.js";
14
+ import { $ as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "../../context-jMy6xdVq.js";
15
+ import { $ as $9bf71ea28793e738$export$20e40289641fbbb6 } from "../../FocusScope-1u9yyfIN.js";
16
+ import { $ as $f7dceffc5ad7768b$export$4e328f61c538687f } from "../../useFocusRing-Cc-4eouh.js";
17
+ import { icons } from "../../icons/icons.js";
18
+ import { B as Button } from "../../button-BkkdyHfJ.js";
19
+ import { classnames } from "../../utilities/classnames.js";
20
+ import { _ as __ } from "../../default-i18n-BhE-OUmt.js";
21
+ var $c0398ad35c3639b7$exports = {};
22
+ $c0398ad35c3639b7$exports = {
23
+ "longPressMessage": `اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة`
24
+ };
25
+ var $7af657c4165927c3$exports = {};
26
+ $7af657c4165927c3$exports = {
27
+ "longPressMessage": `Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто`
28
+ };
29
+ var $d95d4da6d531ab81$exports = {};
30
+ $d95d4da6d531ab81$exports = {
31
+ "longPressMessage": `Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku`
32
+ };
33
+ var $24ebda9c775dca17$exports = {};
34
+ $24ebda9c775dca17$exports = {
35
+ "longPressMessage": `Langt tryk eller tryk på Alt + pil ned for at åbne menuen`
36
+ };
37
+ var $743e0dfca6cab1e9$exports = {};
38
+ $743e0dfca6cab1e9$exports = {
39
+ "longPressMessage": `Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen`
40
+ };
41
+ var $a2f41026e05f1c84$exports = {};
42
+ $a2f41026e05f1c84$exports = {
43
+ "longPressMessage": `Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού`
44
+ };
45
+ var $43b800e97c901737$exports = {};
46
+ $43b800e97c901737$exports = {
47
+ "longPressMessage": `Long press or press Alt + ArrowDown to open menu`
48
+ };
49
+ var $442f5f6ac211e29f$exports = {};
50
+ $442f5f6ac211e29f$exports = {
51
+ "longPressMessage": `Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú`
52
+ };
53
+ var $dff280acfeb2d8ac$exports = {};
54
+ $dff280acfeb2d8ac$exports = {
55
+ "longPressMessage": `Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool`
56
+ };
57
+ var $51608325613944d7$exports = {};
58
+ $51608325613944d7$exports = {
59
+ "longPressMessage": `Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli`
60
+ };
61
+ var $c4a1b1eabeaa87be$exports = {};
62
+ $c4a1b1eabeaa87be$exports = {
63
+ "longPressMessage": `Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.`
64
+ };
65
+ var $8c74815cdee18d1b$exports = {};
66
+ $8c74815cdee18d1b$exports = {
67
+ "longPressMessage": `לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט`
68
+ };
69
+ var $fd0e9ef6a7fe0ec9$exports = {};
70
+ $fd0e9ef6a7fe0ec9$exports = {
71
+ "longPressMessage": `Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika`
72
+ };
73
+ var $a89a74a39eba465a$exports = {};
74
+ $a89a74a39eba465a$exports = {
75
+ "longPressMessage": `Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához`
76
+ };
77
+ var $edc7c66594a0ae8a$exports = {};
78
+ $edc7c66594a0ae8a$exports = {
79
+ "longPressMessage": `Premere a lungo o premere Alt + Freccia giù per aprire il menu`
80
+ };
81
+ var $f1ab51510712db52$exports = {};
82
+ $f1ab51510712db52$exports = {
83
+ "longPressMessage": `長押しまたは Alt+下矢印キーでメニューを開く`
84
+ };
85
+ var $f9b672d9b82fa3d6$exports = {};
86
+ $f9b672d9b82fa3d6$exports = {
87
+ "longPressMessage": `길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기`
88
+ };
89
+ var $a385f3910feda499$exports = {};
90
+ $a385f3910feda499$exports = {
91
+ "longPressMessage": `Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.`
92
+ };
93
+ var $4f1bde932c441789$exports = {};
94
+ $4f1bde932c441789$exports = {
95
+ "longPressMessage": `Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa`
96
+ };
97
+ var $914a51a8a594d5be$exports = {};
98
+ $914a51a8a594d5be$exports = {
99
+ "longPressMessage": `Langt trykk eller trykk Alt + PilNed for å åpne menyen`
100
+ };
101
+ var $89aaf803103bb500$exports = {};
102
+ $89aaf803103bb500$exports = {
103
+ "longPressMessage": `Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen`
104
+ };
105
+ var $c685891476dbaaca$exports = {};
106
+ $c685891476dbaaca$exports = {
107
+ "longPressMessage": `Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu`
108
+ };
109
+ var $885879b9b10c2959$exports = {};
110
+ $885879b9b10c2959$exports = {
111
+ "longPressMessage": `Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu`
112
+ };
113
+ var $6b39616688a51692$exports = {};
114
+ $6b39616688a51692$exports = {
115
+ "longPressMessage": `Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu`
116
+ };
117
+ var $f26362aed63f47e2$exports = {};
118
+ $f26362aed63f47e2$exports = {
119
+ "longPressMessage": `Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul`
120
+ };
121
+ var $06cbade644558bf0$exports = {};
122
+ $06cbade644558bf0$exports = {
123
+ "longPressMessage": `Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню`
124
+ };
125
+ var $0a391ff68f9d59b1$exports = {};
126
+ $0a391ff68f9d59b1$exports = {
127
+ "longPressMessage": `Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol`
128
+ };
129
+ var $8193cf0e649c7928$exports = {};
130
+ $8193cf0e649c7928$exports = {
131
+ "longPressMessage": `Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol`
132
+ };
133
+ var $f398debcce5a5c55$exports = {};
134
+ $f398debcce5a5c55$exports = {
135
+ "longPressMessage": `Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni`
136
+ };
137
+ var $9e9fef000aa4c013$exports = {};
138
+ $9e9fef000aa4c013$exports = {
139
+ "longPressMessage": `Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn`
140
+ };
141
+ var $c016c8183bbe3d68$exports = {};
142
+ $c016c8183bbe3d68$exports = {
143
+ "longPressMessage": `Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın`
144
+ };
145
+ var $ca4f6c8462244e62$exports = {};
146
+ $ca4f6c8462244e62$exports = {
147
+ "longPressMessage": `Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню`
148
+ };
149
+ var $2d9960c02ccac927$exports = {};
150
+ $2d9960c02ccac927$exports = {
151
+ "longPressMessage": `长按或按 Alt + 向下方向键以打开菜单`
152
+ };
153
+ var $f1b682a4c8c5631c$exports = {};
154
+ $f1b682a4c8c5631c$exports = {
155
+ "longPressMessage": `長按或按 Alt+向下鍵以開啟功能表`
156
+ };
157
+ var $2cbb7ca666678a14$exports = {};
158
+ $2cbb7ca666678a14$exports = {
159
+ "ar-AE": $c0398ad35c3639b7$exports,
160
+ "bg-BG": $7af657c4165927c3$exports,
161
+ "cs-CZ": $d95d4da6d531ab81$exports,
162
+ "da-DK": $24ebda9c775dca17$exports,
163
+ "de-DE": $743e0dfca6cab1e9$exports,
164
+ "el-GR": $a2f41026e05f1c84$exports,
165
+ "en-US": $43b800e97c901737$exports,
166
+ "es-ES": $442f5f6ac211e29f$exports,
167
+ "et-EE": $dff280acfeb2d8ac$exports,
168
+ "fi-FI": $51608325613944d7$exports,
169
+ "fr-FR": $c4a1b1eabeaa87be$exports,
170
+ "he-IL": $8c74815cdee18d1b$exports,
171
+ "hr-HR": $fd0e9ef6a7fe0ec9$exports,
172
+ "hu-HU": $a89a74a39eba465a$exports,
173
+ "it-IT": $edc7c66594a0ae8a$exports,
174
+ "ja-JP": $f1ab51510712db52$exports,
175
+ "ko-KR": $f9b672d9b82fa3d6$exports,
176
+ "lt-LT": $a385f3910feda499$exports,
177
+ "lv-LV": $4f1bde932c441789$exports,
178
+ "nb-NO": $914a51a8a594d5be$exports,
179
+ "nl-NL": $89aaf803103bb500$exports,
180
+ "pl-PL": $c685891476dbaaca$exports,
181
+ "pt-BR": $885879b9b10c2959$exports,
182
+ "pt-PT": $6b39616688a51692$exports,
183
+ "ro-RO": $f26362aed63f47e2$exports,
184
+ "ru-RU": $06cbade644558bf0$exports,
185
+ "sk-SK": $0a391ff68f9d59b1$exports,
186
+ "sl-SI": $8193cf0e649c7928$exports,
187
+ "sr-SP": $f398debcce5a5c55$exports,
188
+ "sv-SE": $9e9fef000aa4c013$exports,
189
+ "tr-TR": $c016c8183bbe3d68$exports,
190
+ "uk-UA": $ca4f6c8462244e62$exports,
191
+ "zh-CN": $2d9960c02ccac927$exports,
192
+ "zh-TW": $f1b682a4c8c5631c$exports
193
+ };
194
+ function $parcel$interopDefault(a) {
195
+ return a && a.__esModule ? a.default : a;
196
+ }
197
+ function $168583247155ddda$export$dc9c12ed27dd1b49(props, state, ref) {
198
+ let { type = "menu", isDisabled, trigger = "press" } = props;
199
+ let menuTriggerId = $bdb11010cef70236$export$f680877a34711e37();
200
+ let { triggerProps, overlayProps } = $628037886ba31236$export$f9d5c8beee7d008d({
201
+ type
202
+ }, state, ref);
203
+ let onKeyDown = (e) => {
204
+ if (isDisabled)
205
+ return;
206
+ if (trigger === "longPress" && !e.altKey)
207
+ return;
208
+ if (ref && ref.current)
209
+ switch (e.key) {
210
+ case "Enter":
211
+ case " ":
212
+ if (trigger === "longPress")
213
+ return;
214
+ case "ArrowDown":
215
+ if (!("continuePropagation" in e))
216
+ e.stopPropagation();
217
+ e.preventDefault();
218
+ state.toggle("first");
219
+ break;
220
+ case "ArrowUp":
221
+ if (!("continuePropagation" in e))
222
+ e.stopPropagation();
223
+ e.preventDefault();
224
+ state.toggle("last");
225
+ break;
226
+ default:
227
+ if ("continuePropagation" in e)
228
+ e.continuePropagation();
229
+ }
230
+ };
231
+ let stringFormatter = $fca6afa0e843324b$export$f12b703ca79dfbb1($parcel$interopDefault($2cbb7ca666678a14$exports), "@react-aria/menu");
232
+ let { longPressProps } = $8a26561d2877236e$export$c24ed0104d07eab9({
233
+ isDisabled: isDisabled || trigger !== "longPress",
234
+ accessibilityDescription: stringFormatter.format("longPressMessage"),
235
+ onLongPressStart() {
236
+ state.close();
237
+ },
238
+ onLongPress() {
239
+ state.open("first");
240
+ }
241
+ });
242
+ let pressProps = {
243
+ onPressStart(e) {
244
+ if (e.pointerType !== "touch" && e.pointerType !== "keyboard" && !isDisabled)
245
+ state.open(e.pointerType === "virtual" ? "first" : null);
246
+ },
247
+ onPress(e) {
248
+ if (e.pointerType === "touch" && !isDisabled)
249
+ state.toggle();
250
+ }
251
+ };
252
+ delete triggerProps.onPress;
253
+ return {
254
+ menuTriggerProps: {
255
+ ...triggerProps,
256
+ ...trigger === "press" ? pressProps : longPressProps,
257
+ id: menuTriggerId,
258
+ onKeyDown
259
+ },
260
+ menuProps: {
261
+ ...overlayProps,
262
+ "aria-labelledby": menuTriggerId,
263
+ autoFocus: state.focusStrategy || true,
264
+ onClose: state.close
265
+ }
266
+ };
267
+ }
268
+ const $d5336fe17ce95402$export$6f49b4016bfc8d56 = /* @__PURE__ */ new WeakMap();
269
+ function $d5336fe17ce95402$export$38eaa17faae8f579(props, state, ref) {
270
+ let { shouldFocusWrap = true, onKeyDown, onKeyUp, ...otherProps } = props;
271
+ if (!props["aria-label"] && !props["aria-labelledby"])
272
+ console.warn("An aria-label or aria-labelledby prop is required for accessibility.");
273
+ let domProps = $65484d02dcb7eb3e$export$457c3d6518dd4c6f(props, {
274
+ labelable: true
275
+ });
276
+ let { listProps } = $982254629710d113$export$b95089534ab7c1fd({
277
+ ...otherProps,
278
+ ref,
279
+ selectionManager: state.selectionManager,
280
+ collection: state.collection,
281
+ disabledKeys: state.disabledKeys,
282
+ shouldFocusWrap,
283
+ linkBehavior: "override"
284
+ });
285
+ $d5336fe17ce95402$export$6f49b4016bfc8d56.set(state, {
286
+ onClose: props.onClose,
287
+ onAction: props.onAction
288
+ });
289
+ return {
290
+ menuProps: $3ef42575df84b30b$export$9d1611c77c2fe928(domProps, {
291
+ onKeyDown,
292
+ onKeyUp
293
+ }, {
294
+ role: "menu",
295
+ ...listProps,
296
+ onKeyDown: (e) => {
297
+ if (e.key !== "Escape")
298
+ listProps.onKeyDown(e);
299
+ }
300
+ })
301
+ };
302
+ }
303
+ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
304
+ let { key, closeOnSelect, isVirtualized, "aria-haspopup": hasPopup, onPressStart: pressStartProp, onPressUp: pressUpProp, onPress, onPressChange, onPressEnd, onHoverStart: hoverStartProp, onHoverChange, onHoverEnd, onKeyDown, onKeyUp, onFocus, onFocusChange, onBlur } = props;
305
+ let isTrigger = !!hasPopup;
306
+ var _props_isDisabled;
307
+ let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.selectionManager.isDisabled(key);
308
+ var _props_isSelected;
309
+ let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);
310
+ let data = $d5336fe17ce95402$export$6f49b4016bfc8d56.get(state);
311
+ let item = state.collection.getItem(key);
312
+ let onClose = props.onClose || data.onClose;
313
+ let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();
314
+ let performAction = (e) => {
315
+ var _item_props;
316
+ if (isTrigger)
317
+ return;
318
+ if (item === null || item === void 0 ? void 0 : (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.onAction)
319
+ item.props.onAction();
320
+ if (props.onAction)
321
+ props.onAction(key);
322
+ else if (data.onAction)
323
+ data.onAction(key);
324
+ if (e.target instanceof HTMLAnchorElement)
325
+ router.open(e.target, e, item.props.href, item.props.routerOptions);
326
+ };
327
+ let role = "menuitem";
328
+ if (!isTrigger) {
329
+ if (state.selectionManager.selectionMode === "single")
330
+ role = "menuitemradio";
331
+ else if (state.selectionManager.selectionMode === "multiple")
332
+ role = "menuitemcheckbox";
333
+ }
334
+ let labelId = $bdb11010cef70236$export$b4cc09c592e8fdb8();
335
+ let descriptionId = $bdb11010cef70236$export$b4cc09c592e8fdb8();
336
+ let keyboardId = $bdb11010cef70236$export$b4cc09c592e8fdb8();
337
+ let ariaProps = {
338
+ "aria-disabled": isDisabled || void 0,
339
+ role,
340
+ "aria-label": props["aria-label"],
341
+ "aria-labelledby": labelId,
342
+ "aria-describedby": [
343
+ descriptionId,
344
+ keyboardId
345
+ ].filter(Boolean).join(" ") || void 0,
346
+ "aria-controls": props["aria-controls"],
347
+ "aria-haspopup": hasPopup,
348
+ "aria-expanded": props["aria-expanded"]
349
+ };
350
+ if (state.selectionManager.selectionMode !== "none" && !isTrigger)
351
+ ariaProps["aria-checked"] = isSelected;
352
+ if (isVirtualized) {
353
+ ariaProps["aria-posinset"] = item === null || item === void 0 ? void 0 : item.index;
354
+ ariaProps["aria-setsize"] = $453cc9f0df89c0a5$export$77d5aafae4e095b2(state.collection);
355
+ }
356
+ let onPressStart = (e) => {
357
+ if (e.pointerType === "keyboard")
358
+ performAction(e);
359
+ pressStartProp === null || pressStartProp === void 0 ? void 0 : pressStartProp(e);
360
+ };
361
+ let onPressUp = (e) => {
362
+ if (e.pointerType !== "keyboard") {
363
+ performAction(e);
364
+ if (!isTrigger && onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple" || state.selectionManager.isLink(key)))
365
+ onClose();
366
+ }
367
+ pressUpProp === null || pressUpProp === void 0 ? void 0 : pressUpProp(e);
368
+ };
369
+ let { itemProps, isFocused } = $880e95eb8b93ba9a$export$ecf600387e221c37({
370
+ selectionManager: state.selectionManager,
371
+ key,
372
+ ref,
373
+ shouldSelectOnPressUp: true,
374
+ allowsDifferentPressOrigin: true,
375
+ // Disable all handling of links in useSelectable item
376
+ // because we handle it ourselves. The behavior of menus
377
+ // is slightly different from other collections because
378
+ // actions are performed on key down rather than key up.
379
+ linkBehavior: "none"
380
+ });
381
+ let { pressProps, isPressed } = $f6c31cce2adf654f$export$45712eceda6fad21({
382
+ onPressStart,
383
+ onPress,
384
+ onPressUp,
385
+ onPressChange,
386
+ onPressEnd,
387
+ isDisabled
388
+ });
389
+ let { hoverProps } = $6179b936705e76d3$export$ae780daf29e6d456({
390
+ isDisabled,
391
+ onHoverStart(e) {
392
+ if (!$507fabe10e71c6fb$export$b9b3dfddab17db27()) {
393
+ state.selectionManager.setFocused(true);
394
+ state.selectionManager.setFocusedKey(key);
395
+ }
396
+ hoverStartProp === null || hoverStartProp === void 0 ? void 0 : hoverStartProp(e);
397
+ },
398
+ onHoverChange,
399
+ onHoverEnd
400
+ });
401
+ let { keyboardProps } = $46d819fcbaf35654$export$8f71654801c2f7cd({
402
+ onKeyDown: (e) => {
403
+ if (e.repeat) {
404
+ e.continuePropagation();
405
+ return;
406
+ }
407
+ switch (e.key) {
408
+ case " ":
409
+ if (!isDisabled && state.selectionManager.selectionMode === "none" && !isTrigger && closeOnSelect !== false && onClose)
410
+ onClose();
411
+ break;
412
+ case "Enter":
413
+ if (!isDisabled && closeOnSelect !== false && !isTrigger && onClose)
414
+ onClose();
415
+ break;
416
+ default:
417
+ if (!isTrigger)
418
+ e.continuePropagation();
419
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
420
+ break;
421
+ }
422
+ },
423
+ onKeyUp
424
+ });
425
+ let { focusProps } = $a1ea59d68270f0dd$export$f8168d8dd8fd66e6({
426
+ onBlur,
427
+ onFocus,
428
+ onFocusChange
429
+ });
430
+ let domProps = $65484d02dcb7eb3e$export$457c3d6518dd4c6f(item.props);
431
+ delete domProps.id;
432
+ let linkProps = $ea8dcbcb9ea1b556$export$7e924b3091a3bd18(item.props);
433
+ return {
434
+ menuItemProps: {
435
+ ...ariaProps,
436
+ ...$3ef42575df84b30b$export$9d1611c77c2fe928(domProps, linkProps, isTrigger ? {
437
+ onFocus: itemProps.onFocus,
438
+ "data-key": itemProps["data-key"]
439
+ } : itemProps, pressProps, hoverProps, keyboardProps, focusProps),
440
+ tabIndex: itemProps.tabIndex != null ? -1 : void 0
441
+ },
442
+ labelProps: {
443
+ id: labelId
444
+ },
445
+ descriptionProps: {
446
+ id: descriptionId
447
+ },
448
+ keyboardShortcutProps: {
449
+ id: keyboardId
450
+ },
451
+ isFocused,
452
+ isSelected,
453
+ isPressed,
454
+ isDisabled
455
+ };
456
+ }
457
+ function $3e5eb2498db5b506$export$73f7a44322579622(props) {
458
+ let { heading, "aria-label": ariaLabel } = props;
459
+ let headingId = $bdb11010cef70236$export$f680877a34711e37();
460
+ return {
461
+ itemProps: {
462
+ role: "presentation"
463
+ },
464
+ headingProps: heading ? {
465
+ // Techincally, menus cannot contain headings according to ARIA.
466
+ // We hide the heading from assistive technology, using role="presentation",
467
+ // and only use it as a label for the nested group.
468
+ id: headingId,
469
+ role: "presentation"
470
+ } : {},
471
+ groupProps: {
472
+ role: "group",
473
+ "aria-label": ariaLabel,
474
+ "aria-labelledby": heading ? headingId : void 0
475
+ }
476
+ };
477
+ }
478
+ const $d275435c250248f8$var$ALLOWED_INVALID_MOVEMENTS = 2;
479
+ const $d275435c250248f8$var$THROTTLE_TIME = 50;
480
+ const $d275435c250248f8$var$TIMEOUT_TIME = 1e3;
481
+ const $d275435c250248f8$var$ANGLE_PADDING = Math.PI / 12;
482
+ function $d275435c250248f8$export$85ec83e04c95f50a(options) {
483
+ let { menuRef, submenuRef, isOpen, isDisabled } = options;
484
+ let prevPointerPos = useRef();
485
+ let submenuRect = useRef();
486
+ let lastProcessedTime = useRef(0);
487
+ let timeout = useRef();
488
+ let autoCloseTimeout = useRef();
489
+ let submenuSide = useRef();
490
+ let movementsTowardsSubmenuCount = useRef(2);
491
+ let [preventPointerEvents, setPreventPointerEvents] = useState(false);
492
+ let updateSubmenuRect = () => {
493
+ if (submenuRef.current) {
494
+ submenuRect.current = submenuRef.current.getBoundingClientRect();
495
+ submenuSide.current = void 0;
496
+ }
497
+ };
498
+ $9daab02d461809db$export$683480f191c0e3ea({
499
+ ref: submenuRef,
500
+ onResize: updateSubmenuRect
501
+ });
502
+ let reset = () => {
503
+ setPreventPointerEvents(false);
504
+ movementsTowardsSubmenuCount.current = $d275435c250248f8$var$ALLOWED_INVALID_MOVEMENTS;
505
+ prevPointerPos.current = void 0;
506
+ };
507
+ let modality = $507fabe10e71c6fb$export$98e20ec92f614cfe();
508
+ useEffect(() => {
509
+ if (preventPointerEvents && menuRef.current)
510
+ menuRef.current.style.pointerEvents = "none";
511
+ else
512
+ menuRef.current.style.pointerEvents = "";
513
+ }, [
514
+ menuRef,
515
+ preventPointerEvents
516
+ ]);
517
+ useEffect(() => {
518
+ let submenu = submenuRef.current;
519
+ let menu = menuRef.current;
520
+ if (isDisabled || !submenu || !isOpen || modality !== "pointer") {
521
+ reset();
522
+ return;
523
+ }
524
+ submenuRect.current = submenu.getBoundingClientRect();
525
+ let onPointerMove = (e) => {
526
+ if (e.pointerType === "touch" || e.pointerType === "pen")
527
+ return;
528
+ let currentTime = Date.now();
529
+ if (currentTime - lastProcessedTime.current < $d275435c250248f8$var$THROTTLE_TIME)
530
+ return;
531
+ clearTimeout(timeout.current);
532
+ clearTimeout(autoCloseTimeout.current);
533
+ let { clientX: mouseX, clientY: mouseY } = e;
534
+ if (!prevPointerPos.current) {
535
+ prevPointerPos.current = {
536
+ x: mouseX,
537
+ y: mouseY
538
+ };
539
+ return;
540
+ }
541
+ if (!submenuRect.current)
542
+ return;
543
+ if (!submenuSide.current)
544
+ submenuSide.current = mouseX > submenuRect.current.right ? "left" : "right";
545
+ if (mouseX < menu.getBoundingClientRect().left || mouseX > menu.getBoundingClientRect().right || mouseY < menu.getBoundingClientRect().top || mouseY > menu.getBoundingClientRect().bottom) {
546
+ reset();
547
+ return;
548
+ }
549
+ let prevMouseX = prevPointerPos.current.x;
550
+ let prevMouseY = prevPointerPos.current.y;
551
+ let toSubmenuX = submenuSide.current === "right" ? submenuRect.current.left - prevMouseX : prevMouseX - submenuRect.current.right;
552
+ let angleTop = Math.atan2(prevMouseY - submenuRect.current.top, toSubmenuX) + $d275435c250248f8$var$ANGLE_PADDING;
553
+ let angleBottom = Math.atan2(prevMouseY - submenuRect.current.bottom, toSubmenuX) - $d275435c250248f8$var$ANGLE_PADDING;
554
+ let anglePointer = Math.atan2(prevMouseY - mouseY, submenuSide.current === "left" ? -(mouseX - prevMouseX) : mouseX - prevMouseX);
555
+ let isMovingTowardsSubmenu = anglePointer < angleTop && anglePointer > angleBottom;
556
+ movementsTowardsSubmenuCount.current = isMovingTowardsSubmenu ? Math.min(movementsTowardsSubmenuCount.current + 1, $d275435c250248f8$var$ALLOWED_INVALID_MOVEMENTS) : Math.max(movementsTowardsSubmenuCount.current - 1, 0);
557
+ if (movementsTowardsSubmenuCount.current >= $d275435c250248f8$var$ALLOWED_INVALID_MOVEMENTS)
558
+ setPreventPointerEvents(true);
559
+ else
560
+ setPreventPointerEvents(false);
561
+ lastProcessedTime.current = currentTime;
562
+ prevPointerPos.current = {
563
+ x: mouseX,
564
+ y: mouseY
565
+ };
566
+ if (isMovingTowardsSubmenu)
567
+ timeout.current = setTimeout(() => {
568
+ reset();
569
+ autoCloseTimeout.current = setTimeout(() => {
570
+ let target = document.elementFromPoint(mouseX, mouseY);
571
+ if (target && menu.contains(target))
572
+ target.dispatchEvent(new PointerEvent("pointerover", {
573
+ bubbles: true,
574
+ cancelable: true
575
+ }));
576
+ }, 100);
577
+ }, $d275435c250248f8$var$TIMEOUT_TIME);
578
+ };
579
+ window.addEventListener("pointermove", onPointerMove);
580
+ return () => {
581
+ window.removeEventListener("pointermove", onPointerMove);
582
+ clearTimeout(timeout.current);
583
+ clearTimeout(autoCloseTimeout.current);
584
+ movementsTowardsSubmenuCount.current = $d275435c250248f8$var$ALLOWED_INVALID_MOVEMENTS;
585
+ };
586
+ }, [
587
+ isDisabled,
588
+ isOpen,
589
+ menuRef,
590
+ modality,
591
+ setPreventPointerEvents,
592
+ submenuRef
593
+ ]);
594
+ }
595
+ function $0065b146e7192841$export$7138b0d059a6e743(props, state, ref) {
596
+ let { parentMenuRef, submenuRef, type = "menu", isDisabled, node, delay = 200 } = props;
597
+ let submenuTriggerId = $bdb11010cef70236$export$f680877a34711e37();
598
+ let overlayId = $bdb11010cef70236$export$f680877a34711e37();
599
+ let { direction } = $18f2051aff69b9bf$export$43bb16f9c6d9e3f7();
600
+ let openTimeout = useRef();
601
+ let cancelOpenTimeout = useCallback(() => {
602
+ if (openTimeout.current) {
603
+ clearTimeout(openTimeout.current);
604
+ openTimeout.current = void 0;
605
+ }
606
+ }, [
607
+ openTimeout
608
+ ]);
609
+ let onSubmenuOpen = $8ae05eaa5c114e9c$export$7f54fc3180508a52((focusStrategy) => {
610
+ cancelOpenTimeout();
611
+ state.open(focusStrategy);
612
+ });
613
+ let onSubmenuClose = $8ae05eaa5c114e9c$export$7f54fc3180508a52(() => {
614
+ cancelOpenTimeout();
615
+ state.close();
616
+ });
617
+ $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(() => {
618
+ return () => {
619
+ cancelOpenTimeout();
620
+ };
621
+ }, [
622
+ cancelOpenTimeout
623
+ ]);
624
+ let submenuKeyDown = (e) => {
625
+ switch (e.key) {
626
+ case "ArrowLeft":
627
+ if (direction === "ltr" && e.currentTarget.contains(e.target)) {
628
+ e.stopPropagation();
629
+ onSubmenuClose();
630
+ ref.current.focus();
631
+ }
632
+ break;
633
+ case "ArrowRight":
634
+ if (direction === "rtl" && e.currentTarget.contains(e.target)) {
635
+ e.stopPropagation();
636
+ onSubmenuClose();
637
+ ref.current.focus();
638
+ }
639
+ break;
640
+ case "Escape":
641
+ e.stopPropagation();
642
+ state.closeAll();
643
+ break;
644
+ }
645
+ };
646
+ let submenuProps = {
647
+ id: overlayId,
648
+ "aria-label": node.textValue,
649
+ submenuLevel: state.submenuLevel,
650
+ ...type === "menu" && {
651
+ onClose: state.closeAll,
652
+ autoFocus: state.focusStrategy,
653
+ onKeyDown: submenuKeyDown
654
+ }
655
+ };
656
+ let submenuTriggerKeyDown = (e) => {
657
+ switch (e.key) {
658
+ case "ArrowRight":
659
+ if (!isDisabled) {
660
+ if (direction === "ltr") {
661
+ if (!state.isOpen)
662
+ onSubmenuOpen("first");
663
+ if (type === "menu" && !!(submenuRef === null || submenuRef === void 0 ? void 0 : submenuRef.current) && document.activeElement === (ref === null || ref === void 0 ? void 0 : ref.current))
664
+ submenuRef.current.focus();
665
+ } else if (state.isOpen)
666
+ onSubmenuClose();
667
+ else
668
+ e.continuePropagation();
669
+ }
670
+ break;
671
+ case "ArrowLeft":
672
+ if (!isDisabled) {
673
+ if (direction === "rtl") {
674
+ if (!state.isOpen)
675
+ onSubmenuOpen("first");
676
+ if (type === "menu" && !!(submenuRef === null || submenuRef === void 0 ? void 0 : submenuRef.current) && document.activeElement === (ref === null || ref === void 0 ? void 0 : ref.current))
677
+ submenuRef.current.focus();
678
+ } else if (state.isOpen)
679
+ onSubmenuClose();
680
+ else
681
+ e.continuePropagation();
682
+ }
683
+ break;
684
+ case "Escape":
685
+ state.closeAll();
686
+ break;
687
+ default:
688
+ e.continuePropagation();
689
+ break;
690
+ }
691
+ };
692
+ let onPressStart = (e) => {
693
+ if (!isDisabled && (e.pointerType === "virtual" || e.pointerType === "keyboard"))
694
+ onSubmenuOpen("first");
695
+ };
696
+ let onPress = (e) => {
697
+ if (!isDisabled && (e.pointerType === "touch" || e.pointerType === "mouse"))
698
+ onSubmenuOpen();
699
+ };
700
+ let onHoverChange = (isHovered) => {
701
+ if (!isDisabled) {
702
+ if (isHovered && !state.isOpen) {
703
+ if (!openTimeout.current)
704
+ openTimeout.current = setTimeout(() => {
705
+ onSubmenuOpen();
706
+ }, delay);
707
+ } else if (!isHovered)
708
+ cancelOpenTimeout();
709
+ }
710
+ };
711
+ let onBlur = (e) => {
712
+ if (state.isOpen && parentMenuRef.current.contains(e.relatedTarget))
713
+ onSubmenuClose();
714
+ };
715
+ let shouldCloseOnInteractOutside = (target) => {
716
+ if (target !== ref.current)
717
+ return true;
718
+ return false;
719
+ };
720
+ $d275435c250248f8$export$85ec83e04c95f50a({
721
+ menuRef: parentMenuRef,
722
+ submenuRef,
723
+ isOpen: state.isOpen,
724
+ isDisabled
725
+ });
726
+ return {
727
+ submenuTriggerProps: {
728
+ id: submenuTriggerId,
729
+ "aria-controls": state.isOpen ? overlayId : void 0,
730
+ "aria-haspopup": !isDisabled ? type : void 0,
731
+ "aria-expanded": state.isOpen ? "true" : "false",
732
+ onPressStart,
733
+ onPress,
734
+ onHoverChange,
735
+ onKeyDown: submenuTriggerKeyDown,
736
+ onBlur,
737
+ isOpen: state.isOpen
738
+ },
739
+ submenuProps,
740
+ popoverProps: {
741
+ isNonModal: true,
742
+ disableFocusManagement: true,
743
+ shouldCloseOnInteractOutside
744
+ }
745
+ };
746
+ }
747
+ function $a28c903ee9ad8dc5$export$79fefeb1c2091ac3(props) {
748
+ let overlayTriggerState = $fc909762b330b746$export$61c6a8c84e605fb6(props);
749
+ let [focusStrategy, setFocusStrategy] = useState(null);
750
+ let [expandedKeysStack, setExpandedKeysStack] = useState([]);
751
+ let closeAll = () => {
752
+ setExpandedKeysStack([]);
753
+ overlayTriggerState.close();
754
+ };
755
+ let openSubmenu = (triggerKey, level) => {
756
+ setExpandedKeysStack((oldStack) => {
757
+ if (level > oldStack.length)
758
+ return oldStack;
759
+ return [
760
+ ...oldStack.slice(0, level),
761
+ triggerKey
762
+ ];
763
+ });
764
+ };
765
+ let closeSubmenu = (triggerKey, level) => {
766
+ setExpandedKeysStack((oldStack) => {
767
+ let key = oldStack[level];
768
+ if (key === triggerKey)
769
+ return oldStack.slice(0, level);
770
+ else
771
+ return oldStack;
772
+ });
773
+ };
774
+ return {
775
+ focusStrategy,
776
+ ...overlayTriggerState,
777
+ open(focusStrategy2 = null) {
778
+ setFocusStrategy(focusStrategy2);
779
+ overlayTriggerState.open();
780
+ },
781
+ toggle(focusStrategy2 = null) {
782
+ setFocusStrategy(focusStrategy2);
783
+ overlayTriggerState.toggle();
784
+ },
785
+ close() {
786
+ closeAll();
787
+ },
788
+ expandedKeysStack,
789
+ openSubmenu,
790
+ closeSubmenu
791
+ };
792
+ }
793
+ function $e5614764aa47eb35$export$cfc51cf86138bf98(props, state) {
794
+ let { triggerKey } = props;
795
+ let { expandedKeysStack, openSubmenu, closeSubmenu, close: closeAll } = state;
796
+ let [submenuLevel] = useState(expandedKeysStack === null || expandedKeysStack === void 0 ? void 0 : expandedKeysStack.length);
797
+ let isOpen = useMemo(() => expandedKeysStack[submenuLevel] === triggerKey, [
798
+ expandedKeysStack,
799
+ triggerKey,
800
+ submenuLevel
801
+ ]);
802
+ let [focusStrategy, setFocusStrategy] = useState(null);
803
+ let open = useCallback((focusStrategy2 = null) => {
804
+ setFocusStrategy(focusStrategy2);
805
+ openSubmenu(triggerKey, submenuLevel);
806
+ }, [
807
+ openSubmenu,
808
+ submenuLevel,
809
+ triggerKey
810
+ ]);
811
+ let close = useCallback(() => {
812
+ setFocusStrategy(null);
813
+ closeSubmenu(triggerKey, submenuLevel);
814
+ }, [
815
+ closeSubmenu,
816
+ submenuLevel,
817
+ triggerKey
818
+ ]);
819
+ let toggle = useCallback((focusStrategy2 = null) => {
820
+ setFocusStrategy(focusStrategy2);
821
+ if (isOpen)
822
+ close();
823
+ else
824
+ open(focusStrategy2);
825
+ }, [
826
+ close,
827
+ open,
828
+ isOpen
829
+ ]);
830
+ return useMemo(() => ({
831
+ focusStrategy,
832
+ isOpen,
833
+ open,
834
+ close,
835
+ closeAll,
836
+ submenuLevel,
837
+ // TODO: Placeholders that aren't used but give us parity with OverlayTriggerState so we can use this in Popover. Refactor if we update Popover via
838
+ // https://github.com/adobe/react-spectrum/pull/4976#discussion_r1336472863
839
+ setOpen: () => {
840
+ },
841
+ toggle
842
+ }), [
843
+ isOpen,
844
+ open,
845
+ close,
846
+ closeAll,
847
+ focusStrategy,
848
+ toggle,
849
+ submenuLevel
850
+ ]);
851
+ }
852
+ class $05ca4cd7c4a5a999$export$863faf230ee2118a {
853
+ *[Symbol.iterator]() {
854
+ yield* this.iterable;
855
+ }
856
+ get size() {
857
+ return this.keyMap.size;
858
+ }
859
+ getKeys() {
860
+ return this.keyMap.keys();
861
+ }
862
+ getKeyBefore(key) {
863
+ let node = this.keyMap.get(key);
864
+ return node ? node.prevKey : null;
865
+ }
866
+ getKeyAfter(key) {
867
+ let node = this.keyMap.get(key);
868
+ return node ? node.nextKey : null;
869
+ }
870
+ getFirstKey() {
871
+ return this.firstKey;
872
+ }
873
+ getLastKey() {
874
+ return this.lastKey;
875
+ }
876
+ getItem(key) {
877
+ return this.keyMap.get(key);
878
+ }
879
+ at(idx) {
880
+ const keys = [
881
+ ...this.getKeys()
882
+ ];
883
+ return this.getItem(keys[idx]);
884
+ }
885
+ constructor(nodes, { expandedKeys } = {}) {
886
+ this.keyMap = /* @__PURE__ */ new Map();
887
+ this.iterable = nodes;
888
+ expandedKeys = expandedKeys || /* @__PURE__ */ new Set();
889
+ let visit = (node) => {
890
+ this.keyMap.set(node.key, node);
891
+ if (node.childNodes && (node.type === "section" || expandedKeys.has(node.key)))
892
+ for (let child of node.childNodes)
893
+ visit(child);
894
+ };
895
+ for (let node of nodes)
896
+ visit(node);
897
+ let last;
898
+ let index = 0;
899
+ for (let [key, node] of this.keyMap) {
900
+ if (last) {
901
+ last.nextKey = key;
902
+ node.prevKey = last.key;
903
+ } else {
904
+ this.firstKey = key;
905
+ node.prevKey = void 0;
906
+ }
907
+ if (node.type === "item")
908
+ node.index = index++;
909
+ last = node;
910
+ last.nextKey = void 0;
911
+ }
912
+ this.lastKey = last === null || last === void 0 ? void 0 : last.key;
913
+ }
914
+ }
915
+ function $875d6693e12af071$export$728d6ba534403756(props) {
916
+ let { onExpandedChange } = props;
917
+ let [expandedKeys, setExpandedKeys] = $458b0a5536c1a7cf$export$40bfa8c7b0832715(props.expandedKeys ? new Set(props.expandedKeys) : void 0, props.defaultExpandedKeys ? new Set(props.defaultExpandedKeys) : /* @__PURE__ */ new Set(), onExpandedChange);
918
+ let selectionState = $7af3f5b51489e0b5$export$253fe78d46329472(props);
919
+ let disabledKeys = useMemo(() => props.disabledKeys ? new Set(props.disabledKeys) : /* @__PURE__ */ new Set(), [
920
+ props.disabledKeys
921
+ ]);
922
+ let tree = $7613b1592d41b092$export$6cd28814d92fa9c9(props, useCallback((nodes) => new $05ca4cd7c4a5a999$export$863faf230ee2118a(nodes, {
923
+ expandedKeys
924
+ }), [
925
+ expandedKeys
926
+ ]), null);
927
+ useEffect(() => {
928
+ if (selectionState.focusedKey != null && !tree.getItem(selectionState.focusedKey))
929
+ selectionState.setFocusedKey(null);
930
+ }, [
931
+ tree,
932
+ selectionState.focusedKey
933
+ ]);
934
+ let onToggle = (key) => {
935
+ setExpandedKeys($875d6693e12af071$var$toggleKey(expandedKeys, key));
936
+ };
937
+ return {
938
+ collection: tree,
939
+ expandedKeys,
940
+ disabledKeys,
941
+ toggleKey: onToggle,
942
+ setExpandedKeys,
943
+ selectionManager: new $d496c0a20b6e58ec$export$6c8a5aaad13c9852(tree, selectionState)
944
+ };
945
+ }
946
+ function $875d6693e12af071$var$toggleKey(set, key) {
947
+ let res = new Set(set);
948
+ if (res.has(key))
949
+ res.delete(key);
950
+ else
951
+ res.add(key);
952
+ return res;
953
+ }
954
+ const $63df2425e2108aa8$export$744d98a3b8a94e1c = /* @__PURE__ */ createContext({});
955
+ const $3674c52c6b3c5bce$export$c7e742effb1c51e2 = /* @__PURE__ */ createContext(null);
956
+ const $3674c52c6b3c5bce$export$24aad8519b95b41b = /* @__PURE__ */ createContext(null);
957
+ const $3674c52c6b3c5bce$export$795aec4671cbae19 = /* @__PURE__ */ createContext(null);
958
+ function $3674c52c6b3c5bce$export$27d2ad3c5815583e(props) {
959
+ let state = $a28c903ee9ad8dc5$export$79fefeb1c2091ac3(props);
960
+ let ref = useRef(null);
961
+ let { menuTriggerProps, menuProps } = $168583247155ddda$export$dc9c12ed27dd1b49({
962
+ ...props,
963
+ type: "menu"
964
+ }, state, ref);
965
+ let [buttonWidth, setButtonWidth] = useState(null);
966
+ let onResize = useCallback(() => {
967
+ if (ref.current)
968
+ setButtonWidth(ref.current.offsetWidth + "px");
969
+ }, [
970
+ ref
971
+ ]);
972
+ $9daab02d461809db$export$683480f191c0e3ea({
973
+ ref,
974
+ onResize
975
+ });
976
+ return /* @__PURE__ */ React__default.createElement($64fa3d84918910a7$export$2881499e37b75b9a, {
977
+ values: [
978
+ [
979
+ $3674c52c6b3c5bce$export$c7e742effb1c51e2,
980
+ menuProps
981
+ ],
982
+ [
983
+ $de32f1b87079253c$export$d2f961adcb0afbe,
984
+ state
985
+ ],
986
+ [
987
+ $3674c52c6b3c5bce$export$795aec4671cbae19,
988
+ state
989
+ ],
990
+ [
991
+ $07b14b47974efb58$export$9b9a0cd73afb7ca4,
992
+ {
993
+ trigger: "MenuTrigger",
994
+ triggerRef: ref,
995
+ placement: "bottom start",
996
+ style: {
997
+ "--trigger-width": buttonWidth
998
+ }
999
+ }
1000
+ ]
1001
+ ]
1002
+ }, /* @__PURE__ */ React__default.createElement($f1ab8c75478c6f73$export$3351871ee4b288b8, {
1003
+ ...menuTriggerProps,
1004
+ ref,
1005
+ isPressed: state.isOpen
1006
+ }, props.children));
1007
+ }
1008
+ function $3674c52c6b3c5bce$export$ecabc99eeffab7ca(props, ref) {
1009
+ return $7135fc7d473fd974$export$e7c29ae2353b16ea("submenutrigger", props, ref, props.children, props.children[0]);
1010
+ }
1011
+ function $3674c52c6b3c5bce$var$SubmenuTriggerInner(props) {
1012
+ let { item, parentMenuRef } = props;
1013
+ let state = useContext($3674c52c6b3c5bce$export$24aad8519b95b41b);
1014
+ let children = $7135fc7d473fd974$export$727c8fc270210f13({
1015
+ items: state.collection.getChildren(item.key),
1016
+ children: (childItem) => {
1017
+ switch (childItem.type) {
1018
+ case "item":
1019
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$MenuItemTriggerInner, {
1020
+ item: childItem,
1021
+ popover: item.rendered[1],
1022
+ parentMenuRef,
1023
+ delay: item.props.delay
1024
+ });
1025
+ default:
1026
+ throw new Error("Unsupported element type in SubmenuTrigger: " + item.type);
1027
+ }
1028
+ }
1029
+ });
1030
+ return children;
1031
+ }
1032
+ function $3674c52c6b3c5bce$var$Menu(props, ref) {
1033
+ [props, ref] = $64fa3d84918910a7$export$29f1550f4b0d4415(props, ref, $3674c52c6b3c5bce$export$c7e742effb1c51e2);
1034
+ let { portal, collection } = $7135fc7d473fd974$export$6cd28814d92fa9c9(props);
1035
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, collection.size > 0 && /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$MenuInner, {
1036
+ props,
1037
+ collection,
1038
+ menuRef: ref
1039
+ }), portal);
1040
+ }
1041
+ function $3674c52c6b3c5bce$var$MenuInner({ props, collection, menuRef: ref }) {
1042
+ let state = $875d6693e12af071$export$728d6ba534403756({
1043
+ ...props,
1044
+ collection,
1045
+ children: void 0
1046
+ });
1047
+ let [popoverContainer, setPopoverContainer] = useState(null);
1048
+ let { menuProps } = $d5336fe17ce95402$export$38eaa17faae8f579(props, state, ref);
1049
+ let rootMenuTriggerState = useContext($3674c52c6b3c5bce$export$795aec4671cbae19);
1050
+ let popoverContext = useContext($07b14b47974efb58$export$9b9a0cd73afb7ca4);
1051
+ let children = $7135fc7d473fd974$export$727c8fc270210f13({
1052
+ items: state.collection,
1053
+ children: (item) => {
1054
+ switch (item.type) {
1055
+ case "section":
1056
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$MenuSection, {
1057
+ section: item,
1058
+ parentMenuRef: ref
1059
+ });
1060
+ case "separator":
1061
+ return /* @__PURE__ */ React__default.createElement($431f98aba6844401$export$1ff3c3f08ae963c0, item.props);
1062
+ case "item":
1063
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$MenuItemInner, {
1064
+ item
1065
+ });
1066
+ case "submenutrigger":
1067
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$SubmenuTriggerInner, {
1068
+ item,
1069
+ parentMenuRef: ref
1070
+ });
1071
+ default:
1072
+ throw new Error("Unsupported node type in Menu: " + item.type);
1073
+ }
1074
+ }
1075
+ });
1076
+ let isSubmenu = (popoverContext === null || popoverContext === void 0 ? void 0 : popoverContext.trigger) === "SubmenuTrigger";
1077
+ $e0b6e0b68ec7f50f$export$872b660ac5a1ff98({
1078
+ ref,
1079
+ onInteractOutside: (e) => {
1080
+ if (rootMenuTriggerState && !(popoverContainer === null || popoverContainer === void 0 ? void 0 : popoverContainer.contains(e.target)))
1081
+ rootMenuTriggerState.close();
1082
+ },
1083
+ isDisabled: isSubmenu || (rootMenuTriggerState === null || rootMenuTriggerState === void 0 ? void 0 : rootMenuTriggerState.expandedKeysStack.length) === 0
1084
+ });
1085
+ let prevPopoverContainer = useRef(null);
1086
+ let [leftOffset, setLeftOffset] = useState({
1087
+ left: 0
1088
+ });
1089
+ useEffect(() => {
1090
+ if (popoverContainer && prevPopoverContainer.current !== popoverContainer && leftOffset.left === 0) {
1091
+ prevPopoverContainer.current = popoverContainer;
1092
+ let { left } = popoverContainer.getBoundingClientRect();
1093
+ setLeftOffset({
1094
+ left: -1 * left
1095
+ });
1096
+ }
1097
+ }, [
1098
+ leftOffset,
1099
+ popoverContainer
1100
+ ]);
1101
+ var _props_className;
1102
+ return /* @__PURE__ */ React__default.createElement($9bf71ea28793e738$export$20e40289641fbbb6, null, /* @__PURE__ */ React__default.createElement("div", {
1103
+ ...$65484d02dcb7eb3e$export$457c3d6518dd4c6f(props),
1104
+ ...menuProps,
1105
+ ref,
1106
+ slot: props.slot || void 0,
1107
+ onScroll: props.onScroll,
1108
+ style: props.style,
1109
+ className: (_props_className = props.className) !== null && _props_className !== void 0 ? _props_className : "react-aria-Menu"
1110
+ }, /* @__PURE__ */ React__default.createElement($64fa3d84918910a7$export$2881499e37b75b9a, {
1111
+ values: [
1112
+ [
1113
+ $3674c52c6b3c5bce$export$24aad8519b95b41b,
1114
+ state
1115
+ ],
1116
+ [
1117
+ $431f98aba6844401$export$6615d83f6de245ce,
1118
+ {
1119
+ elementType: "div"
1120
+ }
1121
+ ],
1122
+ [
1123
+ $07b14b47974efb58$export$9b9a0cd73afb7ca4,
1124
+ {
1125
+ UNSTABLE_portalContainer: popoverContainer || void 0
1126
+ }
1127
+ ]
1128
+ ]
1129
+ }, children)), /* @__PURE__ */ React__default.createElement("div", {
1130
+ ref: setPopoverContainer,
1131
+ style: {
1132
+ width: "100vw",
1133
+ position: "absolute",
1134
+ top: 0,
1135
+ ...leftOffset
1136
+ }
1137
+ }));
1138
+ }
1139
+ const $3674c52c6b3c5bce$export$d9b273488cd8ce6f = /* @__PURE__ */ forwardRef($3674c52c6b3c5bce$var$Menu);
1140
+ function $3674c52c6b3c5bce$var$MenuSection({ section, className, style, parentMenuRef, ...otherProps }) {
1141
+ var _section_props, _section_props1;
1142
+ let state = useContext($3674c52c6b3c5bce$export$24aad8519b95b41b);
1143
+ let [headingRef, heading] = $64fa3d84918910a7$export$9d4c57ee4c6ffdd8();
1144
+ var _section_arialabel;
1145
+ let { headingProps, groupProps } = $3e5eb2498db5b506$export$73f7a44322579622({
1146
+ heading,
1147
+ "aria-label": (_section_arialabel = section["aria-label"]) !== null && _section_arialabel !== void 0 ? _section_arialabel : void 0
1148
+ });
1149
+ let children = $7135fc7d473fd974$export$727c8fc270210f13({
1150
+ items: state.collection.getChildren(section.key),
1151
+ children: (item) => {
1152
+ switch (item.type) {
1153
+ case "header": {
1154
+ let { ref, ...otherProps2 } = item.props;
1155
+ return /* @__PURE__ */ React__default.createElement($72a5793c14baf454$export$8b251419efc915eb, {
1156
+ ...headingProps,
1157
+ ...otherProps2,
1158
+ ref: $5dc95899b306f630$export$c9058316764c140e(headingRef, ref)
1159
+ }, item.rendered);
1160
+ }
1161
+ case "item":
1162
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$MenuItemInner, {
1163
+ item
1164
+ });
1165
+ case "submenutrigger":
1166
+ return /* @__PURE__ */ React__default.createElement($3674c52c6b3c5bce$var$SubmenuTriggerInner, {
1167
+ item,
1168
+ parentMenuRef
1169
+ });
1170
+ default:
1171
+ throw new Error("Unsupported element type in Section: " + item.type);
1172
+ }
1173
+ }
1174
+ });
1175
+ return /* @__PURE__ */ React__default.createElement("section", {
1176
+ ...$65484d02dcb7eb3e$export$457c3d6518dd4c6f(otherProps),
1177
+ ...groupProps,
1178
+ className: className || ((_section_props = section.props) === null || _section_props === void 0 ? void 0 : _section_props.className) || "react-aria-Section",
1179
+ style: style || ((_section_props1 = section.props) === null || _section_props1 === void 0 ? void 0 : _section_props1.style),
1180
+ ref: section.props.ref
1181
+ }, children);
1182
+ }
1183
+ function $3674c52c6b3c5bce$var$MenuItem(props, ref) {
1184
+ return $7135fc7d473fd974$export$e7c29ae2353b16ea("item", props, ref, props.children);
1185
+ }
1186
+ const $3674c52c6b3c5bce$export$2ce376c2cc3355c8 = /* @__PURE__ */ forwardRef($3674c52c6b3c5bce$var$MenuItem);
1187
+ function $3674c52c6b3c5bce$var$MenuItemInner({ item }) {
1188
+ var _item_props;
1189
+ let state = useContext($3674c52c6b3c5bce$export$24aad8519b95b41b);
1190
+ let ref = $df56164dff5785e2$export$4338b53315abf666(item.props.ref);
1191
+ let { menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, ...states } = $a2e5df62f93c7633$export$9d32628fc2aea7da({
1192
+ key: item.key,
1193
+ "aria-label": (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props["aria-label"]
1194
+ }, state, ref);
1195
+ let props = item.props;
1196
+ let { isFocusVisible, focusProps } = $f7dceffc5ad7768b$export$4e328f61c538687f();
1197
+ let { hoverProps, isHovered } = $6179b936705e76d3$export$ae780daf29e6d456({
1198
+ isDisabled: states.isDisabled,
1199
+ onHoverStart: item.props.onHoverStart,
1200
+ onHoverChange: item.props.onHoverChange,
1201
+ onHoverEnd: item.props.onHoverEnd
1202
+ });
1203
+ let renderProps = $64fa3d84918910a7$export$4d86445c2cf5e3({
1204
+ ...props,
1205
+ id: void 0,
1206
+ children: item.rendered,
1207
+ defaultClassName: "react-aria-MenuItem",
1208
+ values: {
1209
+ ...states,
1210
+ isHovered,
1211
+ isFocusVisible,
1212
+ selectionMode: state.selectionManager.selectionMode,
1213
+ selectionBehavior: state.selectionManager.selectionBehavior,
1214
+ hasSubmenu: false,
1215
+ isOpen: false
1216
+ }
1217
+ });
1218
+ let ElementType = props.href ? "a" : "div";
1219
+ return /* @__PURE__ */ React__default.createElement(ElementType, {
1220
+ ...$3ef42575df84b30b$export$9d1611c77c2fe928(menuItemProps, focusProps, hoverProps),
1221
+ ...renderProps,
1222
+ ref,
1223
+ "data-disabled": states.isDisabled || void 0,
1224
+ "data-hovered": isHovered || void 0,
1225
+ "data-focused": states.isFocused || void 0,
1226
+ "data-focus-visible": isFocusVisible || void 0,
1227
+ "data-pressed": states.isPressed || void 0,
1228
+ "data-selected": states.isSelected || void 0,
1229
+ "data-selection-mode": state.selectionManager.selectionMode === "none" ? void 0 : state.selectionManager.selectionMode
1230
+ }, /* @__PURE__ */ React__default.createElement($64fa3d84918910a7$export$2881499e37b75b9a, {
1231
+ values: [
1232
+ [
1233
+ $514c0188e459b4c0$export$9afb8bc826b033ea,
1234
+ {
1235
+ slots: {
1236
+ label: labelProps,
1237
+ description: descriptionProps
1238
+ }
1239
+ }
1240
+ ],
1241
+ [
1242
+ $63df2425e2108aa8$export$744d98a3b8a94e1c,
1243
+ keyboardShortcutProps
1244
+ ]
1245
+ ]
1246
+ }, renderProps.children));
1247
+ }
1248
+ function $3674c52c6b3c5bce$var$MenuItemTriggerInner({ item, popover, parentMenuRef, delay }) {
1249
+ let state = useContext($3674c52c6b3c5bce$export$24aad8519b95b41b);
1250
+ let popoverContext = $64fa3d84918910a7$export$fabf2dc03a41866e($07b14b47974efb58$export$9b9a0cd73afb7ca4);
1251
+ let ref = $df56164dff5785e2$export$4338b53315abf666(item.props.ref);
1252
+ let rootMenuTriggerState = useContext($3674c52c6b3c5bce$export$795aec4671cbae19);
1253
+ let submenuTriggerState = $e5614764aa47eb35$export$cfc51cf86138bf98({
1254
+ triggerKey: item.key
1255
+ }, rootMenuTriggerState);
1256
+ let submenuRef = useRef(null);
1257
+ let { submenuTriggerProps, submenuProps, popoverProps } = $0065b146e7192841$export$7138b0d059a6e743({
1258
+ node: item,
1259
+ parentMenuRef,
1260
+ submenuRef,
1261
+ delay
1262
+ }, submenuTriggerState, ref);
1263
+ let { menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, ...states } = $a2e5df62f93c7633$export$9d32628fc2aea7da({
1264
+ key: item.key,
1265
+ ...submenuTriggerProps
1266
+ }, state, ref);
1267
+ let props = item.props;
1268
+ let { hoverProps, isHovered } = $6179b936705e76d3$export$ae780daf29e6d456({
1269
+ isDisabled: states.isDisabled
1270
+ });
1271
+ let { isFocusVisible, focusProps } = $f7dceffc5ad7768b$export$4e328f61c538687f();
1272
+ let renderProps = $64fa3d84918910a7$export$4d86445c2cf5e3({
1273
+ ...props,
1274
+ id: void 0,
1275
+ children: item.rendered,
1276
+ defaultClassName: "react-aria-MenuItem",
1277
+ values: {
1278
+ ...states,
1279
+ isHovered,
1280
+ isFocusVisible,
1281
+ selectionMode: state.selectionManager.selectionMode,
1282
+ selectionBehavior: state.selectionManager.selectionBehavior,
1283
+ hasSubmenu: true,
1284
+ isOpen: submenuTriggerState.isOpen
1285
+ }
1286
+ });
1287
+ return /* @__PURE__ */ React__default.createElement($64fa3d84918910a7$export$2881499e37b75b9a, {
1288
+ values: [
1289
+ [
1290
+ $514c0188e459b4c0$export$9afb8bc826b033ea,
1291
+ {
1292
+ slots: {
1293
+ label: labelProps,
1294
+ description: descriptionProps
1295
+ }
1296
+ }
1297
+ ],
1298
+ [
1299
+ $63df2425e2108aa8$export$744d98a3b8a94e1c,
1300
+ keyboardShortcutProps
1301
+ ],
1302
+ [
1303
+ $3674c52c6b3c5bce$export$c7e742effb1c51e2,
1304
+ submenuProps
1305
+ ],
1306
+ [
1307
+ $de32f1b87079253c$export$d2f961adcb0afbe,
1308
+ submenuTriggerState
1309
+ ],
1310
+ [
1311
+ $07b14b47974efb58$export$9b9a0cd73afb7ca4,
1312
+ {
1313
+ ref: submenuRef,
1314
+ trigger: "SubmenuTrigger",
1315
+ triggerRef: ref,
1316
+ placement: "end top",
1317
+ UNSTABLE_portalContainer: popoverContext.UNSTABLE_portalContainer || void 0,
1318
+ ...popoverProps
1319
+ }
1320
+ ]
1321
+ ]
1322
+ }, /* @__PURE__ */ React__default.createElement("div", {
1323
+ ...$3ef42575df84b30b$export$9d1611c77c2fe928(menuItemProps, focusProps, hoverProps),
1324
+ ...renderProps,
1325
+ ref,
1326
+ "data-disabled": states.isDisabled || void 0,
1327
+ "data-hovered": isHovered || void 0,
1328
+ "data-focused": states.isFocused || void 0,
1329
+ "data-focus-visible": isFocusVisible || void 0,
1330
+ "data-pressed": states.isPressed || void 0,
1331
+ "data-selected": states.isSelected || void 0,
1332
+ "data-selection-mode": state.selectionManager.selectionMode === "none" ? void 0 : state.selectionManager.selectionMode,
1333
+ "data-has-submenu": true,
1334
+ "data-open": submenuTriggerState.isOpen || void 0
1335
+ }, renderProps.children), popover);
1336
+ }
1337
+ /**
1338
+ * A simple menu component.
1339
+ *
1340
+ * @component
1341
+ * @param {Object} props - Component props.
1342
+ * @param {string} [props.triggerLabel] - The label of the trigger button.
1343
+ * @param {JSX.Element} [props.triggerIcon] - The icon of the trigger button.
1344
+ * @param {Object} [props.triggerProps] - Props to pass to the trigger button.
1345
+ * @param {string} [props.tooltip] - Tooltip text to display on the trigger button.
1346
+ * @param {boolean} [props.keepOpen=false] - If `true`, the menu will not close when an item is selected.
1347
+ * @param {boolean} [props.openOnLongPress=false] - If `true`, the menu will open on long press instead of click. If enabled, a regular `onPress` event can also be passed to the trigger button to enable dual behavior.
1348
+ * @param {Object} [props.popoverProps] - Props to pass to the popover.
1349
+ *
1350
+ * @returns {JSX.Element} The Menu component.
1351
+ *
1352
+ * @example
1353
+ * <Menu>
1354
+ * <MenuSection label='Section 1'>
1355
+ * <MenuItem>Item 1</MenuItem>
1356
+ * <MenuItem>Item 2</MenuItem>
1357
+ * </MenuSection>
1358
+ * <MenuSection label='Section 2'>
1359
+ * <MenuItem>Item 3</MenuItem>
1360
+ * <MenuItem>Item 4</MenuItem>
1361
+ * </MenuSection>
1362
+ * </Menu>
1363
+ *
1364
+ * @example
1365
+ * <Menu>
1366
+ * <MenuItem>Item 1</MenuItem>
1367
+ * <MenuItem>Item 2</MenuItem>
1368
+ * <MenuSeparator />
1369
+ * <MenuItem>Item 3</MenuItem>
1370
+ * <MenuItem>Item 4</MenuItem>
1371
+ * </Menu>
1372
+ *
1373
+ * @example
1374
+ * <Menu>
1375
+ * <MenuItem>Item 1</MenuItem>
1376
+ * <MenuItem>Item 2</MenuItem>
1377
+ * <SubMenuItem
1378
+ * trigger={<MenuItem>Submenu</MenuItem>}
1379
+ * >
1380
+ * <MenuItem>Subitem 1</MenuItem>
1381
+ * <MenuItem>Subitem 2</MenuItem>
1382
+ * </SubMenuItem>
1383
+ * </Menu>
1384
+ *
1385
+ *
1386
+ * @preserve
1387
+ */
1388
+ const Menu = (props) => {
1389
+ var _a;
1390
+ const {
1391
+ children,
1392
+ triggerLabel,
1393
+ triggerIcon = !triggerLabel && icons.hamburgerMenu,
1394
+ triggerProps,
1395
+ popoverProps,
1396
+ tooltip,
1397
+ keepOpen = false,
1398
+ "aria-label": ariaLabel = triggerLabel ?? __("Menu", "eightshift-ui-components"),
1399
+ openOnLongPress = false
1400
+ } = props;
1401
+ let additionalProps = {};
1402
+ if (keepOpen) {
1403
+ additionalProps = {
1404
+ ...additionalProps,
1405
+ selectionMode: "multiple",
1406
+ selectedKeys: [],
1407
+ onSelectionChange: () => {
1408
+ },
1409
+ items: []
1410
+ };
1411
+ }
1412
+ if (openOnLongPress) {
1413
+ additionalProps.trigger = "longPress";
1414
+ }
1415
+ const hasSubmenuItems = Array.isArray(children) ? children.some((child) => {
1416
+ var _a2;
1417
+ return ((_a2 = child == null ? void 0 : child.type) == null ? void 0 : _a2.displayName) === "SubMenuItem";
1418
+ }) : ((_a = children == null ? void 0 : children.type) == null ? void 0 : _a.displayName) === "SubMenuItem";
1419
+ return /* @__PURE__ */ jsxs(
1420
+ $3674c52c6b3c5bce$export$27d2ad3c5815583e,
1421
+ {
1422
+ ...props,
1423
+ ...additionalProps,
1424
+ children: [
1425
+ /* @__PURE__ */ jsx(
1426
+ Button,
1427
+ {
1428
+ icon: triggerIcon,
1429
+ tooltip,
1430
+ ...triggerProps,
1431
+ children: triggerLabel
1432
+ }
1433
+ ),
1434
+ /* @__PURE__ */ jsx(
1435
+ Popover,
1436
+ {
1437
+ className: "!es-uic-p-0 focus:es-uic-outline-none",
1438
+ "aria-label": ariaLabel,
1439
+ wrapperClassName: classnames(!hasSubmenuItems && "es-uic-overflow-y-auto"),
1440
+ ...popoverProps,
1441
+ children: /* @__PURE__ */ jsx(
1442
+ $3674c52c6b3c5bce$export$d9b273488cd8ce6f,
1443
+ {
1444
+ "aria-label": ariaLabel,
1445
+ className: "focus:es-uic-outline-none",
1446
+ ...props,
1447
+ ...additionalProps,
1448
+ children
1449
+ }
1450
+ )
1451
+ }
1452
+ )
1453
+ ]
1454
+ }
1455
+ );
1456
+ };
1457
+ /**
1458
+ * A wrapper for `MenuItem` components that visually groups them and ensures proper keyboard navigation.
1459
+ *
1460
+ * **Important**: <MenuSection> cannot be mixed with other <MenuItem> in the top-level of the same menu.
1461
+ *
1462
+ * @component
1463
+ * @param {Object} props - Component props.
1464
+ * @param {string} [props.label] - The label of the section.
1465
+ *
1466
+ * @returns {JSX.Element} The MenuSection component.
1467
+ *
1468
+ * @see {@link Menu} for usage example.
1469
+ *
1470
+ * @preserve
1471
+ */
1472
+ const MenuSection = (props) => {
1473
+ const { children, label } = props;
1474
+ return /* @__PURE__ */ jsxs(
1475
+ $7135fc7d473fd974$export$6e2c8f0811a474ce,
1476
+ {
1477
+ className: classnames(
1478
+ "es-uic-space-y-1 es-uic-border-b es-uic-pb-1 last:es-uic-border-b-0",
1479
+ label && "es-uic-pt-2 first:es-uic-pt-1.5",
1480
+ !label && "last:es-uic-pb-1"
1481
+ ),
1482
+ children: [
1483
+ label && /* @__PURE__ */ jsx($72a5793c14baf454$export$8b251419efc915eb, { className: "es-uic-ml-1.5 es-uic-text-xs es-uic-font-medium es-uic-text-gray-400", children: label }),
1484
+ children
1485
+ ]
1486
+ }
1487
+ );
1488
+ };
1489
+ /**
1490
+ * A menu separator.
1491
+ *
1492
+ * @returns {JSX.Element} The MenuSeparator component.
1493
+ *
1494
+ * @see {@link Menu} for usage example.
1495
+ *
1496
+ * @preserve
1497
+ */
1498
+ const MenuSeparator = () => {
1499
+ return /* @__PURE__ */ jsx($431f98aba6844401$export$1ff3c3f08ae963c0, { className: "es-uic-mb-1 es-uic-border-b es-uic-border-gray-300" });
1500
+ };
1501
+ /**
1502
+ * A menu item.
1503
+ *
1504
+ * @component
1505
+ * @param {Object} props - Component props.
1506
+ * @param {JSX.Element} [props.icon] - The icon of the item.
1507
+ * @param {string} [props.shortcut] - A slot for text like the keyboard shortcut, displayed on the right side of the item.
1508
+ * @param {boolean} [props.checked] - If `true`, the item is marked as checked. This is visually represented by a checkmark icon.
1509
+ * @param {boolean} [props.selected] - If `true`, the item is marked as selected. This is visually represented by a circle.
1510
+ * @param {boolean} [props.disabled] - If `true`, the item will be disabled.
1511
+ * @param {JSX.Element} [props.endIcon] - The icon at the right side of the item.
1512
+ * @param {Function} [props.onClick] - Function to run when the item is clicked.
1513
+ * @param {string} [props.className] - Classes to pass to the menu item.
1514
+ *
1515
+ * @returns {JSX.Element} The MenuItem component.
1516
+ *
1517
+ * @see {@link Menu} for usage example.
1518
+ *
1519
+ * @preserve
1520
+ */
1521
+ const MenuItem = (props) => {
1522
+ const {
1523
+ icon,
1524
+ children,
1525
+ checked,
1526
+ selected,
1527
+ disabled,
1528
+ endIcon,
1529
+ onClick,
1530
+ shortcut,
1531
+ className,
1532
+ "aria-label": ariaLabel = typeof children === "string" ? children : __("Menu item", "eightshift-ui-components")
1533
+ } = props;
1534
+ return /* @__PURE__ */ jsxs(
1535
+ $3674c52c6b3c5bce$export$2ce376c2cc3355c8,
1536
+ {
1537
+ ...props,
1538
+ "aria-label": ariaLabel,
1539
+ isDisabled: disabled,
1540
+ className: classnames(
1541
+ "es-uic-mx-1 es-uic-mb-1 es-uic-flex es-uic-min-w-40 es-uic-items-center es-uic-gap-1.5",
1542
+ "first:es-uic-mt-1 [&>svg]:es-uic-size-5 [&>svg]:es-uic-text-gray-500",
1543
+ "es-uic-select-none es-uic-rounded es-uic-border es-uic-border-transparent es-uic-px-1 es-uic-py-1.5 es-uic-text-sm es-uic-transition",
1544
+ "hover:es-uic-bg-gray-100",
1545
+ "focus:es-uic-outline-none focus-visible:es-uic-outline-none focus-visible:es-uic-ring focus-visible:es-uic-ring-teal-500 focus-visible:es-uic-ring-opacity-50",
1546
+ disabled ? "es-uic-text-gray-400" : "es-uic-text-gray-800",
1547
+ className
1548
+ ),
1549
+ onAction: onClick,
1550
+ children: [
1551
+ checked === true && icons.menuItemCheck,
1552
+ selected === true && icons.menuItemCircle,
1553
+ (selected === false || checked === false) && icons.dummySpacer,
1554
+ icon,
1555
+ children,
1556
+ shortcut && /* @__PURE__ */ jsx("div", { className: "es-uic-ml-auto es-uic-text-[0.6875rem] es-uic-tracking-tight es-uic-text-gray-400", children: shortcut }),
1557
+ endIcon && /* @__PURE__ */ jsx("div", { className: classnames(!shortcut && "es-uic-ml-auto"), children: endIcon })
1558
+ ]
1559
+ }
1560
+ );
1561
+ };
1562
+ /**
1563
+ * A supplementary menu item that triggers a submenu.
1564
+ *
1565
+ * @component
1566
+ * @param {Object} props - Component props.
1567
+ * @param {JSX.Element} props.trigger - The trigger button for the submenu. **This should be a `MenuItem`.**
1568
+ * @param {Object} [props.popoverProps] - Props to pass to the popover.
1569
+ *
1570
+ * @returns {JSX.Element} The SubMenuItem component.
1571
+ *
1572
+ * @see {@link Menu} for usage example.
1573
+ *
1574
+ * @preserve
1575
+ */
1576
+ const SubMenuItem = (props) => {
1577
+ const { children, trigger, popoverProps } = props;
1578
+ return /* @__PURE__ */ jsxs($3674c52c6b3c5bce$export$ecabc99eeffab7ca, { children: [
1579
+ cloneElement(trigger, {
1580
+ endIcon: /* @__PURE__ */ jsx("span", { className: "es-uic-text-gray-400", children: icons.caretRightFill })
1581
+ }),
1582
+ /* @__PURE__ */ jsx(
1583
+ Popover,
1584
+ {
1585
+ "aria-label": props["aria-label"] ?? __("Submenu", "eightshift-ui-components"),
1586
+ className: "!es-uic-p-0 focus:es-uic-outline-none",
1587
+ offset: -1,
1588
+ ...popoverProps,
1589
+ children: /* @__PURE__ */ jsx(
1590
+ $3674c52c6b3c5bce$export$d9b273488cd8ce6f,
1591
+ {
1592
+ "aria-label": props["aria-label"] ?? __("Submenu", "eightshift-ui-components"),
1593
+ className: "focus:es-uic-outline-none",
1594
+ children
1595
+ }
1596
+ )
1597
+ }
1598
+ )
1599
+ ] });
1600
+ };
1601
+ SubMenuItem.displayName = "SubMenuItem";
1602
+ export {
1603
+ Menu,
1604
+ MenuItem,
1605
+ MenuSection,
1606
+ MenuSeparator,
1607
+ SubMenuItem
1608
+ };