@sprawlify/primitives 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 (378) hide show
  1. package/dist/anatomy.cjs +3 -0
  2. package/dist/anatomy.d.cts +2 -0
  3. package/dist/anatomy.d.mts +2 -0
  4. package/dist/anatomy.mjs +3 -0
  5. package/dist/aria-hidden-DqYx0f_y.mjs +177 -0
  6. package/dist/aria-hidden-DtLU6hSU.cjs +182 -0
  7. package/dist/aria-hidden.cjs +4 -0
  8. package/dist/aria-hidden.d.cts +16 -0
  9. package/dist/aria-hidden.d.mts +16 -0
  10. package/dist/aria-hidden.mjs +4 -0
  11. package/dist/auto-resize-D3qHtFy1.mjs +114 -0
  12. package/dist/auto-resize-xzlPFDyD.cjs +125 -0
  13. package/dist/auto-resize.cjs +5 -0
  14. package/dist/auto-resize.d.cts +17 -0
  15. package/dist/auto-resize.d.mts +17 -0
  16. package/dist/auto-resize.mjs +4 -0
  17. package/dist/chunk-CbDLau6x.cjs +34 -0
  18. package/dist/collection-8XqaNHs_.mjs +1279 -0
  19. package/dist/collection-DIoIDISa.cjs +1326 -0
  20. package/dist/collection.cjs +11 -0
  21. package/dist/collection.d.cts +5 -0
  22. package/dist/collection.d.mts +5 -0
  23. package/dist/collection.mjs +4 -0
  24. package/dist/color-BkAP1Tkd.d.mts +60 -0
  25. package/dist/color-VKewNv2e.d.cts +60 -0
  26. package/dist/color-utils-Cc5GVXZh.mjs +657 -0
  27. package/dist/color-utils-LER_6Zwu.cjs +680 -0
  28. package/dist/color-utils.cjs +7 -0
  29. package/dist/color-utils.d.cts +19 -0
  30. package/dist/color-utils.d.mts +19 -0
  31. package/dist/color-utils.mjs +4 -0
  32. package/dist/core-30pJjyC2.d.mts +49 -0
  33. package/dist/core-CQFbMdTl.cjs +176 -0
  34. package/dist/core-CefBjbst.d.cts +49 -0
  35. package/dist/core-DCFNMTZF.mjs +129 -0
  36. package/dist/core.cjs +12 -0
  37. package/dist/core.d.cts +3 -0
  38. package/dist/core.d.mts +3 -0
  39. package/dist/core.mjs +5 -0
  40. package/dist/create-anatomy-B3XYc-qG.d.mts +70 -0
  41. package/dist/create-anatomy-BGQ8pv8J.d.cts +70 -0
  42. package/dist/create-anatomy-BbDZbHpC.mjs +39 -0
  43. package/dist/create-anatomy-CDsIFUXg.cjs +45 -0
  44. package/dist/create-props-BnF_vl-E.mjs +5 -0
  45. package/dist/create-props-YKy7JIKj.cjs +11 -0
  46. package/dist/data-url-C3ITPVRX.d.cts +10 -0
  47. package/dist/data-url-DLwZ9M77.d.mts +10 -0
  48. package/dist/date-utils-D2xPHa_I.cjs +738 -0
  49. package/dist/date-utils-wEa1hhpc.mjs +474 -0
  50. package/dist/date-utils.cjs +46 -0
  51. package/dist/date-utils.d.cts +101 -0
  52. package/dist/date-utils.d.mts +2 -0
  53. package/dist/date-utils.mjs +3 -0
  54. package/dist/defineProperty-BoUOT9Ie.cjs +49 -0
  55. package/dist/defineProperty-DrXfyjd4.mjs +43 -0
  56. package/dist/dismissable-CTfKZ4OG.cjs +282 -0
  57. package/dist/dismissable-DDrx0xnH.mjs +271 -0
  58. package/dist/dismissable-layer-C7pZU2wi.d.cts +39 -0
  59. package/dist/dismissable-layer-t_b0fk-p.d.mts +39 -0
  60. package/dist/dismissable.cjs +7 -0
  61. package/dist/dismissable.d.cts +3 -0
  62. package/dist/dismissable.d.mts +3 -0
  63. package/dist/dismissable.mjs +6 -0
  64. package/dist/dom-query-CWZdWUGp.cjs +2141 -0
  65. package/dist/dom-query-DFCRhyj1.mjs +1374 -0
  66. package/dist/dom-query.cjs +130 -0
  67. package/dist/dom-query.d.cts +307 -0
  68. package/dist/dom-query.d.mts +307 -0
  69. package/dist/dom-query.mjs +3 -0
  70. package/dist/file-utils.cjs +220 -0
  71. package/dist/file-utils.d.cts +51 -0
  72. package/dist/file-utils.d.mts +51 -0
  73. package/dist/file-utils.mjs +210 -0
  74. package/dist/focus-trap-D-bypQEJ.mjs +485 -0
  75. package/dist/focus-trap-D4i52S9A.cjs +496 -0
  76. package/dist/focus-trap.cjs +5 -0
  77. package/dist/focus-trap.d.cts +88 -0
  78. package/dist/focus-trap.d.mts +88 -0
  79. package/dist/focus-trap.mjs +4 -0
  80. package/dist/focus-visible-DYTWdWpa.cjs +210 -0
  81. package/dist/focus-visible-irppYatv.mjs +175 -0
  82. package/dist/focus-visible.cjs +9 -0
  83. package/dist/focus-visible.d.cts +31 -0
  84. package/dist/focus-visible.d.mts +31 -0
  85. package/dist/focus-visible.mjs +4 -0
  86. package/dist/functions-BOkTDEFM.d.cts +15 -0
  87. package/dist/functions-IZtWcC8Q.d.mts +15 -0
  88. package/dist/highlight-word.cjs +100 -0
  89. package/dist/highlight-word.d.cts +24 -0
  90. package/dist/highlight-word.d.mts +24 -0
  91. package/dist/highlight-word.mjs +99 -0
  92. package/dist/hotkeys.cjs +758 -0
  93. package/dist/hotkeys.d.cts +130 -0
  94. package/dist/hotkeys.d.mts +130 -0
  95. package/dist/hotkeys.mjs +754 -0
  96. package/dist/i18n-utils.cjs +450 -0
  97. package/dist/i18n-utils.d.cts +61 -0
  98. package/dist/i18n-utils.d.mts +61 -0
  99. package/dist/i18n-utils.mjs +440 -0
  100. package/dist/index-BkzYij2j.d.mts +25 -0
  101. package/dist/index-Bqw3r34-.d.cts +1383 -0
  102. package/dist/index-C0MKXQmE.d.mts +1383 -0
  103. package/dist/index-C9-feK5c.d.cts +25 -0
  104. package/dist/index-CD5FN7kY.d.mts +114 -0
  105. package/dist/index-CJji6wHl.d.cts +15 -0
  106. package/dist/index-CNi5FkPe.d.mts +15 -0
  107. package/dist/index-D96rs8B0.d.mts +115 -0
  108. package/dist/index.cjs +0 -0
  109. package/dist/index.d.cts +1 -0
  110. package/dist/index.d.mts +1 -0
  111. package/dist/index.mjs +1 -0
  112. package/dist/interact-outside-BplxR9cR.mjs +200 -0
  113. package/dist/interact-outside-C8-oFBpB.cjs +205 -0
  114. package/dist/interact-outside.cjs +5 -0
  115. package/dist/interact-outside.d.cts +2 -0
  116. package/dist/interact-outside.d.mts +2 -0
  117. package/dist/interact-outside.mjs +5 -0
  118. package/dist/json-tree-utils.cjs +1512 -0
  119. package/dist/json-tree-utils.d.cts +117 -0
  120. package/dist/json-tree-utils.d.mts +117 -0
  121. package/dist/json-tree-utils.mjs +1463 -0
  122. package/dist/list-collection-BIMJGQjn.d.cts +61 -0
  123. package/dist/list-collection-Db3eixRU.d.mts +61 -0
  124. package/dist/live-region-CcZPGo89.cjs +52 -0
  125. package/dist/live-region-CnPh21WH.mjs +46 -0
  126. package/dist/live-region.cjs +3 -0
  127. package/dist/live-region.d.cts +2 -0
  128. package/dist/live-region.d.mts +2 -0
  129. package/dist/live-region.mjs +3 -0
  130. package/dist/machines/accordion/index.cjs +328 -0
  131. package/dist/machines/accordion/index.d.cts +83 -0
  132. package/dist/machines/accordion/index.d.mts +83 -0
  133. package/dist/machines/accordion/index.mjs +322 -0
  134. package/dist/machines/async-list/index.cjs +311 -0
  135. package/dist/machines/async-list/index.d.cts +89 -0
  136. package/dist/machines/async-list/index.d.mts +89 -0
  137. package/dist/machines/async-list/index.mjs +310 -0
  138. package/dist/machines/avatar/index.cjs +169 -0
  139. package/dist/machines/avatar/index.d.cts +63 -0
  140. package/dist/machines/avatar/index.d.mts +63 -0
  141. package/dist/machines/avatar/index.mjs +165 -0
  142. package/dist/machines/bottom-sheet/index.cjs +676 -0
  143. package/dist/machines/bottom-sheet/index.d.cts +239 -0
  144. package/dist/machines/bottom-sheet/index.d.mts +239 -0
  145. package/dist/machines/bottom-sheet/index.mjs +672 -0
  146. package/dist/machines/carousel/index.cjs +859 -0
  147. package/dist/machines/carousel/index.d.cts +146 -0
  148. package/dist/machines/carousel/index.d.mts +146 -0
  149. package/dist/machines/carousel/index.mjs +851 -0
  150. package/dist/machines/checkbox/index.cjs +316 -0
  151. package/dist/machines/checkbox/index.d.cts +81 -0
  152. package/dist/machines/checkbox/index.d.mts +81 -0
  153. package/dist/machines/checkbox/index.mjs +312 -0
  154. package/dist/machines/clipboard/index.cjs +225 -0
  155. package/dist/machines/clipboard/index.d.cts +68 -0
  156. package/dist/machines/clipboard/index.d.mts +68 -0
  157. package/dist/machines/clipboard/index.mjs +219 -0
  158. package/dist/machines/collapsible/index.cjs +362 -0
  159. package/dist/machines/collapsible/index.d.cts +82 -0
  160. package/dist/machines/collapsible/index.d.mts +82 -0
  161. package/dist/machines/collapsible/index.mjs +358 -0
  162. package/dist/machines/color-picker/index.cjs +1529 -0
  163. package/dist/machines/color-picker/index.d.cts +205 -0
  164. package/dist/machines/color-picker/index.d.mts +205 -0
  165. package/dist/machines/color-picker/index.mjs +1514 -0
  166. package/dist/machines/combobox/index.cjs +1593 -0
  167. package/dist/machines/combobox/index.d.cts +214 -0
  168. package/dist/machines/combobox/index.d.mts +214 -0
  169. package/dist/machines/combobox/index.mjs +1582 -0
  170. package/dist/machines/date-picker/index.cjs +2177 -0
  171. package/dist/machines/date-picker/index.d.cts +350 -0
  172. package/dist/machines/date-picker/index.d.mts +350 -0
  173. package/dist/machines/date-picker/index.mjs +2161 -0
  174. package/dist/machines/dialog/index.cjs +325 -0
  175. package/dist/machines/dialog/index.d.cts +80 -0
  176. package/dist/machines/dialog/index.d.mts +80 -0
  177. package/dist/machines/dialog/index.mjs +321 -0
  178. package/dist/machines/editable/index.cjs +551 -0
  179. package/dist/machines/editable/index.d.cts +114 -0
  180. package/dist/machines/editable/index.d.mts +114 -0
  181. package/dist/machines/editable/index.mjs +547 -0
  182. package/dist/machines/floating-panel/index.cjs +995 -0
  183. package/dist/machines/floating-panel/index.d.cts +147 -0
  184. package/dist/machines/floating-panel/index.d.mts +147 -0
  185. package/dist/machines/floating-panel/index.mjs +988 -0
  186. package/dist/machines/hover-card/index.cjs +383 -0
  187. package/dist/machines/hover-card/index.d.cts +69 -0
  188. package/dist/machines/hover-card/index.d.mts +69 -0
  189. package/dist/machines/hover-card/index.mjs +379 -0
  190. package/dist/machines/image-cropper/index.cjs +1995 -0
  191. package/dist/machines/image-cropper/index.d.cts +182 -0
  192. package/dist/machines/image-cropper/index.d.mts +182 -0
  193. package/dist/machines/image-cropper/index.mjs +1990 -0
  194. package/dist/machines/listbox/index.cjs +794 -0
  195. package/dist/machines/listbox/index.d.cts +168 -0
  196. package/dist/machines/listbox/index.d.mts +168 -0
  197. package/dist/machines/listbox/index.mjs +782 -0
  198. package/dist/machines/marquee/index.cjs +395 -0
  199. package/dist/machines/marquee/index.d.cts +102 -0
  200. package/dist/machines/marquee/index.d.mts +102 -0
  201. package/dist/machines/marquee/index.mjs +391 -0
  202. package/dist/machines/menu/index.cjs +1298 -0
  203. package/dist/machines/menu/index.d.cts +175 -0
  204. package/dist/machines/menu/index.d.mts +175 -0
  205. package/dist/machines/menu/index.mjs +1286 -0
  206. package/dist/machines/navigation-menu/index.cjs +861 -0
  207. package/dist/machines/navigation-menu/index.d.cts +127 -0
  208. package/dist/machines/navigation-menu/index.d.mts +127 -0
  209. package/dist/machines/navigation-menu/index.mjs +857 -0
  210. package/dist/machines/number-input/index.cjs +996 -0
  211. package/dist/machines/number-input/index.d.cts +134 -0
  212. package/dist/machines/number-input/index.d.mts +134 -0
  213. package/dist/machines/number-input/index.mjs +991 -0
  214. package/dist/machines/pagination/index.cjs +419 -0
  215. package/dist/machines/pagination/index.d.cts +139 -0
  216. package/dist/machines/pagination/index.d.mts +139 -0
  217. package/dist/machines/pagination/index.mjs +411 -0
  218. package/dist/machines/password-input/index.cjs +228 -0
  219. package/dist/machines/password-input/index.d.cts +71 -0
  220. package/dist/machines/password-input/index.d.mts +71 -0
  221. package/dist/machines/password-input/index.mjs +224 -0
  222. package/dist/machines/pin-input/index.cjs +523 -0
  223. package/dist/machines/pin-input/index.d.cts +105 -0
  224. package/dist/machines/pin-input/index.d.mts +105 -0
  225. package/dist/machines/pin-input/index.mjs +519 -0
  226. package/dist/machines/popover/index.cjs +430 -0
  227. package/dist/machines/popover/index.d.cts +88 -0
  228. package/dist/machines/popover/index.d.mts +88 -0
  229. package/dist/machines/popover/index.mjs +426 -0
  230. package/dist/machines/presence/index.cjs +192 -0
  231. package/dist/machines/presence/index.d.cts +44 -0
  232. package/dist/machines/presence/index.d.mts +44 -0
  233. package/dist/machines/presence/index.mjs +190 -0
  234. package/dist/machines/progress/index.cjs +288 -0
  235. package/dist/machines/progress/index.d.cts +96 -0
  236. package/dist/machines/progress/index.d.mts +96 -0
  237. package/dist/machines/progress/index.mjs +284 -0
  238. package/dist/machines/qr-code/index.cjs +172 -0
  239. package/dist/machines/qr-code/index.d.cts +70 -0
  240. package/dist/machines/qr-code/index.d.mts +70 -0
  241. package/dist/machines/qr-code/index.mjs +167 -0
  242. package/dist/machines/radio-group/index.cjs +436 -0
  243. package/dist/machines/radio-group/index.d.cts +106 -0
  244. package/dist/machines/radio-group/index.d.mts +106 -0
  245. package/dist/machines/radio-group/index.mjs +430 -0
  246. package/dist/machines/rating-group/index.cjs +405 -0
  247. package/dist/machines/rating-group/index.d.cts +101 -0
  248. package/dist/machines/rating-group/index.d.mts +101 -0
  249. package/dist/machines/rating-group/index.mjs +399 -0
  250. package/dist/machines/scroll-area/index.cjs +857 -0
  251. package/dist/machines/scroll-area/index.d.cts +159 -0
  252. package/dist/machines/scroll-area/index.d.mts +159 -0
  253. package/dist/machines/scroll-area/index.mjs +853 -0
  254. package/dist/machines/select/index.cjs +1165 -0
  255. package/dist/machines/select/index.d.cts +183 -0
  256. package/dist/machines/select/index.d.mts +183 -0
  257. package/dist/machines/select/index.mjs +1154 -0
  258. package/dist/machines/signature-pad/index.cjs +334 -0
  259. package/dist/machines/signature-pad/index.d.cts +108 -0
  260. package/dist/machines/signature-pad/index.d.mts +108 -0
  261. package/dist/machines/signature-pad/index.mjs +328 -0
  262. package/dist/machines/slider/index.cjs +957 -0
  263. package/dist/machines/slider/index.d.cts +149 -0
  264. package/dist/machines/slider/index.d.mts +149 -0
  265. package/dist/machines/slider/index.mjs +949 -0
  266. package/dist/machines/splitter/index.cjs +1112 -0
  267. package/dist/machines/splitter/index.d.cts +155 -0
  268. package/dist/machines/splitter/index.d.mts +155 -0
  269. package/dist/machines/splitter/index.mjs +1103 -0
  270. package/dist/machines/steps/index.cjs +289 -0
  271. package/dist/machines/steps/index.d.cts +97 -0
  272. package/dist/machines/steps/index.d.mts +97 -0
  273. package/dist/machines/steps/index.mjs +285 -0
  274. package/dist/machines/switch/index.cjs +305 -0
  275. package/dist/machines/switch/index.d.cts +80 -0
  276. package/dist/machines/switch/index.d.mts +80 -0
  277. package/dist/machines/switch/index.mjs +301 -0
  278. package/dist/machines/tabs/index.cjs +508 -0
  279. package/dist/machines/tabs/index.d.cts +111 -0
  280. package/dist/machines/tabs/index.d.mts +111 -0
  281. package/dist/machines/tabs/index.mjs +500 -0
  282. package/dist/machines/tags-input/index.cjs +1127 -0
  283. package/dist/machines/tags-input/index.d.cts +179 -0
  284. package/dist/machines/tags-input/index.d.mts +179 -0
  285. package/dist/machines/tags-input/index.mjs +1121 -0
  286. package/dist/machines/timer/index.cjs +329 -0
  287. package/dist/machines/timer/index.d.cts +98 -0
  288. package/dist/machines/timer/index.d.mts +98 -0
  289. package/dist/machines/timer/index.mjs +324 -0
  290. package/dist/machines/toast/index.cjs +1155 -0
  291. package/dist/machines/toast/index.d.cts +195 -0
  292. package/dist/machines/toast/index.d.mts +195 -0
  293. package/dist/machines/toast/index.mjs +1151 -0
  294. package/dist/machines/toggle/index.cjs +103 -0
  295. package/dist/machines/toggle/index.d.cts +46 -0
  296. package/dist/machines/toggle/index.d.mts +46 -0
  297. package/dist/machines/toggle/index.mjs +99 -0
  298. package/dist/machines/toggle-group/index.cjs +328 -0
  299. package/dist/machines/toggle-group/index.d.cts +81 -0
  300. package/dist/machines/toggle-group/index.d.mts +81 -0
  301. package/dist/machines/toggle-group/index.mjs +322 -0
  302. package/dist/machines/tooltip/index.cjs +516 -0
  303. package/dist/machines/tooltip/index.d.cts +71 -0
  304. package/dist/machines/tooltip/index.d.mts +71 -0
  305. package/dist/machines/tooltip/index.mjs +512 -0
  306. package/dist/machines/tour/index.cjs +1108 -0
  307. package/dist/machines/tour/index.d.cts +206 -0
  308. package/dist/machines/tour/index.d.mts +206 -0
  309. package/dist/machines/tour/index.mjs +1101 -0
  310. package/dist/machines/tree-view/index.cjs +1271 -0
  311. package/dist/machines/tree-view/index.d.cts +215 -0
  312. package/dist/machines/tree-view/index.d.mts +215 -0
  313. package/dist/machines/tree-view/index.mjs +1263 -0
  314. package/dist/node-BctU8GXk.d.mts +24 -0
  315. package/dist/node-CSsuPZVZ.d.cts +24 -0
  316. package/dist/popper-BPJeAtcA.mjs +349 -0
  317. package/dist/popper-D0FAW_p7.cjs +373 -0
  318. package/dist/popper.cjs +8 -0
  319. package/dist/popper.d.cts +74 -0
  320. package/dist/popper.d.mts +2 -0
  321. package/dist/popper.mjs +5 -0
  322. package/dist/raf-BnlYUlDi.d.mts +15 -0
  323. package/dist/raf-Cd2FGy0z.d.cts +15 -0
  324. package/dist/rect-utils-0ellN0a_.mjs +854 -0
  325. package/dist/rect-utils-DKLRhP8G.cjs +1147 -0
  326. package/dist/rect-utils.cjs +51 -0
  327. package/dist/rect-utils.d.cts +198 -0
  328. package/dist/rect-utils.d.mts +198 -0
  329. package/dist/rect-utils.mjs +3 -0
  330. package/dist/remove-scroll-Lrfv79X_.mjs +58 -0
  331. package/dist/remove-scroll-Uvzg1L9r.cjs +63 -0
  332. package/dist/remove-scroll.cjs +0 -0
  333. package/dist/remove-scroll.d.cts +1 -0
  334. package/dist/remove-scroll.d.mts +1 -0
  335. package/dist/remove-scroll.mjs +1 -0
  336. package/dist/scroll-snap-CrTmQRzA.mjs +152 -0
  337. package/dist/scroll-snap-zyiZLv7W.cjs +175 -0
  338. package/dist/scroll-snap.cjs +7 -0
  339. package/dist/scroll-snap.d.cts +14 -0
  340. package/dist/scroll-snap.d.mts +14 -0
  341. package/dist/scroll-snap.mjs +4 -0
  342. package/dist/selection-BIhSzkF7.d.mts +50 -0
  343. package/dist/selection-CS1GBp8e.d.cts +50 -0
  344. package/dist/store-BZcXv49B.cjs +305 -0
  345. package/dist/store-DEojWy9H.mjs +263 -0
  346. package/dist/store.cjs +9 -0
  347. package/dist/store.d.cts +26 -0
  348. package/dist/store.d.mts +26 -0
  349. package/dist/store.mjs +3 -0
  350. package/dist/stringify-state.cjs +49 -0
  351. package/dist/stringify-state.d.cts +8 -0
  352. package/dist/stringify-state.d.mts +8 -0
  353. package/dist/stringify-state.mjs +46 -0
  354. package/dist/tree-collection-BwU5WhGQ.d.mts +78 -0
  355. package/dist/tree-collection-DP_eznnI.d.cts +78 -0
  356. package/dist/typeahead-BdNwVP09.d.cts +45 -0
  357. package/dist/typeahead-XN6lZ7G9.d.mts +45 -0
  358. package/dist/types-BivBkYg9.d.cts +57 -0
  359. package/dist/types-Bl_6JtPQ.d.mts +57 -0
  360. package/dist/types-CPUMVt7c.d.mts +54 -0
  361. package/dist/types-CT_W6HWr.d.cts +54 -0
  362. package/dist/types-DDTcG99l.d.mts +201 -0
  363. package/dist/types-DejIu60O.d.cts +201 -0
  364. package/dist/types-DiIdKZ3K.d.cts +45 -0
  365. package/dist/types-GxLIgJib.d.cts +17 -0
  366. package/dist/types.cjs +15 -0
  367. package/dist/types.d.cts +2 -0
  368. package/dist/types.d.mts +2 -0
  369. package/dist/types.mjs +14 -0
  370. package/dist/utils-BZyrxWWR.mjs +525 -0
  371. package/dist/utils-_6frwjgJ.cjs +1040 -0
  372. package/dist/utils.cjs +88 -0
  373. package/dist/utils.d.cts +144 -0
  374. package/dist/utils.d.mts +144 -0
  375. package/dist/utils.mjs +3 -0
  376. package/dist/wait-for-CMjPsqWk.d.cts +10 -0
  377. package/dist/wait-for-D2nkdD4z.d.mts +10 -0
  378. package/package.json +399 -0
@@ -0,0 +1,1286 @@
1
+ import { t as createAnatomy } from "../../create-anatomy-BbDZbHpC.mjs";
2
+ import { F as scrollIntoView, G as isValidTabEvent, I as clickIfLink, R as observeAttributes, S as queryAll, St as isPrintableKey, U as raf, W as getInitialFocus, Xt as contains, _n as ariaAttr, _t as isDownloadingEvent, an as isAnchorElement, bt as isModifierKey, ft as getEventTarget, ht as isContextMenuEvent, ln as isHTMLElement, lt as getEventKey, o as getByTypeahead, rn as getWindow, sn as isEditableElement, st as addDomEvent, ut as getEventPoint, vn as dataAttr, xt as isOpeningInNewTab } from "../../dom-query-DFCRhyj1.mjs";
3
+ import { Ct as last, Dt as prev, G as cast, _t as first, dt as isEqual, et as hasProp, u as createSplitProps, wt as next } from "../../utils-BZyrxWWR.mjs";
4
+ import { a as createMachine, c as mergeProps, i as createGuards } from "../../core-DCFNMTZF.mjs";
5
+ import "../../interact-outside-BplxR9cR.mjs";
6
+ import { n as trackDismissableElement } from "../../dismissable-DDrx0xnH.mjs";
7
+ import { n as getPlacement, r as getPlacementSide, t as getPlacementStyles } from "../../popper-BPJeAtcA.mjs";
8
+ import { i as isPointInPolygon, r as getElementPolygon } from "../../rect-utils-0ellN0a_.mjs";
9
+ import { t as createProps } from "../../create-props-BnF_vl-E.mjs";
10
+
11
+ //#region src/machines/menu/menu.anatomy.ts
12
+ const anatomy = createAnatomy("menu").parts("arrow", "arrowTip", "content", "contextTrigger", "indicator", "item", "itemGroup", "itemGroupLabel", "itemIndicator", "itemText", "positioner", "separator", "trigger", "triggerItem");
13
+ const parts = anatomy.build();
14
+
15
+ //#endregion
16
+ //#region src/machines/menu/menu.dom.ts
17
+ const getTriggerId = (ctx) => ctx.ids?.trigger ?? `menu:${ctx.id}:trigger`;
18
+ const getContextTriggerId = (ctx) => ctx.ids?.contextTrigger ?? `menu:${ctx.id}:ctx-trigger`;
19
+ const getContentId = (ctx) => ctx.ids?.content ?? `menu:${ctx.id}:content`;
20
+ const getArrowId = (ctx) => ctx.ids?.arrow ?? `menu:${ctx.id}:arrow`;
21
+ const getPositionerId = (ctx) => ctx.ids?.positioner ?? `menu:${ctx.id}:popper`;
22
+ const getGroupId = (ctx, id) => ctx.ids?.group?.(id) ?? `menu:${ctx.id}:group:${id}`;
23
+ const getItemId = (ctx, id) => `${ctx.id}/${id}`;
24
+ const getItemValue = (el) => el?.dataset.value ?? null;
25
+ const getGroupLabelId = (ctx, id) => ctx.ids?.groupLabel?.(id) ?? `menu:${ctx.id}:group-label:${id}`;
26
+ const getContentEl = (ctx) => ctx.getById(getContentId(ctx));
27
+ const getPositionerEl = (ctx) => ctx.getById(getPositionerId(ctx));
28
+ const getTriggerEl = (ctx) => ctx.getById(getTriggerId(ctx));
29
+ const getItemEl = (ctx, value) => value ? ctx.getById(getItemId(ctx, value)) : null;
30
+ const getContextTriggerEl = (ctx) => ctx.getById(getContextTriggerId(ctx));
31
+ const getElements = (ctx) => {
32
+ const selector = `[role^="menuitem"][data-ownedby=${CSS.escape(getContentId(ctx))}]:not([data-disabled])`;
33
+ return queryAll(getContentEl(ctx), selector);
34
+ };
35
+ const getFirstEl = (ctx) => first(getElements(ctx));
36
+ const getLastEl = (ctx) => last(getElements(ctx));
37
+ const isMatch = (el, value) => {
38
+ if (!value) return false;
39
+ return el.id === value || el.dataset.value === value;
40
+ };
41
+ const getNextEl = (ctx, opts) => {
42
+ const items = getElements(ctx);
43
+ return next(items, items.findIndex((el) => isMatch(el, opts.value)), { loop: opts.loop ?? opts.loopFocus });
44
+ };
45
+ const getPrevEl = (ctx, opts) => {
46
+ const items = getElements(ctx);
47
+ return prev(items, items.findIndex((el) => isMatch(el, opts.value)), { loop: opts.loop ?? opts.loopFocus });
48
+ };
49
+ const getElemByKey = (ctx, opts) => {
50
+ const items = getElements(ctx);
51
+ const item = items.find((el) => isMatch(el, opts.value));
52
+ return getByTypeahead(items, {
53
+ state: opts.typeaheadState,
54
+ key: opts.key,
55
+ activeId: item?.id ?? null
56
+ });
57
+ };
58
+ const isTargetDisabled = (v) => {
59
+ return isHTMLElement(v) && (v.dataset.disabled === "" || v.hasAttribute("disabled"));
60
+ };
61
+ const isTriggerItem = (el) => {
62
+ return !!el?.getAttribute("role")?.startsWith("menuitem") && !!el?.hasAttribute("aria-controls");
63
+ };
64
+ const itemSelectEvent = "menu:select";
65
+ function dispatchSelectionEvent(el, value) {
66
+ if (!el) return;
67
+ const event = new (getWindow(el)).CustomEvent(itemSelectEvent, { detail: { value } });
68
+ el.dispatchEvent(event);
69
+ }
70
+
71
+ //#endregion
72
+ //#region src/machines/menu/menu.connect.ts
73
+ function connect(service, normalize) {
74
+ const { context, send, state, computed, prop, scope } = service;
75
+ const open = state.hasTag("open");
76
+ const isSubmenu = context.get("isSubmenu");
77
+ const isTypingAhead = computed("isTypingAhead");
78
+ const composite = prop("composite");
79
+ const currentPlacement = context.get("currentPlacement");
80
+ const anchorPoint = context.get("anchorPoint");
81
+ const highlightedValue = context.get("highlightedValue");
82
+ const popperStyles = getPlacementStyles({
83
+ ...prop("positioning"),
84
+ placement: anchorPoint ? "bottom" : currentPlacement
85
+ });
86
+ function getItemState(props$1) {
87
+ return {
88
+ id: getItemId(scope, props$1.value),
89
+ disabled: !!props$1.disabled,
90
+ highlighted: highlightedValue === props$1.value
91
+ };
92
+ }
93
+ function getOptionItemProps(props$1) {
94
+ const valueText = props$1.valueText ?? props$1.value;
95
+ return {
96
+ ...props$1,
97
+ id: props$1.value,
98
+ valueText
99
+ };
100
+ }
101
+ function getOptionItemState(props$1) {
102
+ return {
103
+ ...getItemState(getOptionItemProps(props$1)),
104
+ checked: !!props$1.checked
105
+ };
106
+ }
107
+ function getItemProps(props$1) {
108
+ const { closeOnSelect, valueText, value } = props$1;
109
+ const itemState = getItemState(props$1);
110
+ const id = getItemId(scope, value);
111
+ return normalize.element({
112
+ ...parts.item.attrs,
113
+ id,
114
+ role: "menuitem",
115
+ "aria-disabled": ariaAttr(itemState.disabled),
116
+ "data-disabled": dataAttr(itemState.disabled),
117
+ "data-ownedby": getContentId(scope),
118
+ "data-highlighted": dataAttr(itemState.highlighted),
119
+ "data-value": value,
120
+ "data-valuetext": valueText,
121
+ onDragStart(event) {
122
+ if (event.currentTarget.matches("a[href]")) event.preventDefault();
123
+ },
124
+ onPointerMove(event) {
125
+ if (itemState.disabled) return;
126
+ if (event.pointerType !== "mouse") return;
127
+ const target = event.currentTarget;
128
+ if (itemState.highlighted) return;
129
+ send({
130
+ type: "ITEM_POINTERMOVE",
131
+ id,
132
+ target,
133
+ closeOnSelect
134
+ });
135
+ },
136
+ onPointerLeave(event) {
137
+ if (itemState.disabled) return;
138
+ if (event.pointerType !== "mouse") return;
139
+ if (!service.event.previous()?.type.includes("POINTER")) return;
140
+ const target = event.currentTarget;
141
+ send({
142
+ type: "ITEM_POINTERLEAVE",
143
+ id,
144
+ target,
145
+ closeOnSelect
146
+ });
147
+ },
148
+ onPointerDown(event) {
149
+ if (itemState.disabled) return;
150
+ const target = event.currentTarget;
151
+ send({
152
+ type: "ITEM_POINTERDOWN",
153
+ target,
154
+ id,
155
+ closeOnSelect
156
+ });
157
+ },
158
+ onClick(event) {
159
+ if (isDownloadingEvent(event)) return;
160
+ if (isOpeningInNewTab(event)) return;
161
+ if (itemState.disabled) return;
162
+ const target = event.currentTarget;
163
+ send({
164
+ type: "ITEM_CLICK",
165
+ target,
166
+ id,
167
+ closeOnSelect
168
+ });
169
+ }
170
+ });
171
+ }
172
+ return {
173
+ highlightedValue,
174
+ open,
175
+ setOpen(nextOpen) {
176
+ if (state.hasTag("open") === nextOpen) return;
177
+ send({ type: nextOpen ? "OPEN" : "CLOSE" });
178
+ },
179
+ setHighlightedValue(value) {
180
+ send({
181
+ type: "HIGHLIGHTED.SET",
182
+ value
183
+ });
184
+ },
185
+ setParent(parent) {
186
+ send({
187
+ type: "PARENT.SET",
188
+ value: parent,
189
+ id: parent.prop("id")
190
+ });
191
+ },
192
+ setChild(child) {
193
+ send({
194
+ type: "CHILD.SET",
195
+ value: child,
196
+ id: child.prop("id")
197
+ });
198
+ },
199
+ reposition(options = {}) {
200
+ send({
201
+ type: "POSITIONING.SET",
202
+ options
203
+ });
204
+ },
205
+ addItemListener(props$1) {
206
+ const node = scope.getById(props$1.id);
207
+ if (!node) return;
208
+ const listener = () => props$1.onSelect?.();
209
+ node.addEventListener(itemSelectEvent, listener);
210
+ return () => node.removeEventListener(itemSelectEvent, listener);
211
+ },
212
+ getContextTriggerProps() {
213
+ return normalize.element({
214
+ ...parts.contextTrigger.attrs,
215
+ dir: prop("dir"),
216
+ id: getContextTriggerId(scope),
217
+ "data-state": open ? "open" : "closed",
218
+ onPointerDown(event) {
219
+ if (event.pointerType === "mouse") return;
220
+ send({
221
+ type: "CONTEXT_MENU_START",
222
+ point: getEventPoint(event)
223
+ });
224
+ },
225
+ onPointerCancel(event) {
226
+ if (event.pointerType === "mouse") return;
227
+ send({ type: "CONTEXT_MENU_CANCEL" });
228
+ },
229
+ onPointerMove(event) {
230
+ if (event.pointerType === "mouse") return;
231
+ send({ type: "CONTEXT_MENU_CANCEL" });
232
+ },
233
+ onPointerUp(event) {
234
+ if (event.pointerType === "mouse") return;
235
+ send({ type: "CONTEXT_MENU_CANCEL" });
236
+ },
237
+ onContextMenu(event) {
238
+ send({
239
+ type: "CONTEXT_MENU",
240
+ point: getEventPoint(event)
241
+ });
242
+ event.preventDefault();
243
+ },
244
+ style: {
245
+ WebkitTouchCallout: "none",
246
+ WebkitUserSelect: "none",
247
+ userSelect: "none"
248
+ }
249
+ });
250
+ },
251
+ getTriggerItemProps(childApi) {
252
+ const triggerProps = childApi.getTriggerProps();
253
+ return mergeProps(getItemProps({ value: triggerProps.id }), triggerProps);
254
+ },
255
+ getTriggerProps() {
256
+ return normalize.button({
257
+ ...isSubmenu ? parts.triggerItem.attrs : parts.trigger.attrs,
258
+ "data-placement": context.get("currentPlacement"),
259
+ type: "button",
260
+ dir: prop("dir"),
261
+ id: getTriggerId(scope),
262
+ "data-uid": prop("id"),
263
+ "aria-haspopup": composite ? "menu" : "dialog",
264
+ "aria-controls": getContentId(scope),
265
+ "aria-expanded": open || void 0,
266
+ "data-state": open ? "open" : "closed",
267
+ onPointerMove(event) {
268
+ if (event.pointerType !== "mouse") return;
269
+ if (isTargetDisabled(event.currentTarget) || !isSubmenu) return;
270
+ const point = getEventPoint(event);
271
+ send({
272
+ type: "TRIGGER_POINTERMOVE",
273
+ target: event.currentTarget,
274
+ point
275
+ });
276
+ },
277
+ onPointerLeave(event) {
278
+ if (isTargetDisabled(event.currentTarget)) return;
279
+ if (event.pointerType !== "mouse") return;
280
+ if (!isSubmenu) return;
281
+ const point = getEventPoint(event);
282
+ send({
283
+ type: "TRIGGER_POINTERLEAVE",
284
+ target: event.currentTarget,
285
+ point
286
+ });
287
+ },
288
+ onPointerDown(event) {
289
+ if (isTargetDisabled(event.currentTarget)) return;
290
+ if (isContextMenuEvent(event)) return;
291
+ event.preventDefault();
292
+ },
293
+ onClick(event) {
294
+ if (event.defaultPrevented) return;
295
+ if (isTargetDisabled(event.currentTarget)) return;
296
+ send({
297
+ type: "TRIGGER_CLICK",
298
+ target: event.currentTarget
299
+ });
300
+ },
301
+ onBlur() {
302
+ send({ type: "TRIGGER_BLUR" });
303
+ },
304
+ onFocus() {
305
+ send({ type: "TRIGGER_FOCUS" });
306
+ },
307
+ onKeyDown(event) {
308
+ if (event.defaultPrevented) return;
309
+ const exec = {
310
+ ArrowDown() {
311
+ send({ type: "ARROW_DOWN" });
312
+ },
313
+ ArrowUp() {
314
+ send({ type: "ARROW_UP" });
315
+ },
316
+ Enter() {
317
+ send({
318
+ type: "ARROW_DOWN",
319
+ src: "enter"
320
+ });
321
+ },
322
+ Space() {
323
+ send({
324
+ type: "ARROW_DOWN",
325
+ src: "space"
326
+ });
327
+ }
328
+ }[getEventKey(event, {
329
+ orientation: "vertical",
330
+ dir: prop("dir")
331
+ })];
332
+ if (exec) {
333
+ event.preventDefault();
334
+ exec(event);
335
+ }
336
+ }
337
+ });
338
+ },
339
+ getIndicatorProps() {
340
+ return normalize.element({
341
+ ...parts.indicator.attrs,
342
+ dir: prop("dir"),
343
+ "data-state": open ? "open" : "closed"
344
+ });
345
+ },
346
+ getPositionerProps() {
347
+ return normalize.element({
348
+ ...parts.positioner.attrs,
349
+ dir: prop("dir"),
350
+ id: getPositionerId(scope),
351
+ style: popperStyles.floating
352
+ });
353
+ },
354
+ getArrowProps() {
355
+ return normalize.element({
356
+ id: getArrowId(scope),
357
+ ...parts.arrow.attrs,
358
+ dir: prop("dir"),
359
+ style: popperStyles.arrow
360
+ });
361
+ },
362
+ getArrowTipProps() {
363
+ return normalize.element({
364
+ ...parts.arrowTip.attrs,
365
+ dir: prop("dir"),
366
+ style: popperStyles.arrowTip
367
+ });
368
+ },
369
+ getContentProps() {
370
+ return normalize.element({
371
+ ...parts.content.attrs,
372
+ id: getContentId(scope),
373
+ "aria-label": prop("aria-label"),
374
+ hidden: !open,
375
+ "data-state": open ? "open" : "closed",
376
+ role: composite ? "menu" : "dialog",
377
+ tabIndex: 0,
378
+ dir: prop("dir"),
379
+ "aria-activedescendant": computed("highlightedId") || void 0,
380
+ "aria-labelledby": getTriggerId(scope),
381
+ "data-placement": currentPlacement,
382
+ onPointerEnter(event) {
383
+ if (event.pointerType !== "mouse") return;
384
+ send({ type: "MENU_POINTERENTER" });
385
+ },
386
+ onKeyDown(event) {
387
+ if (event.defaultPrevented) return;
388
+ if (!contains(event.currentTarget, getEventTarget(event))) return;
389
+ const target = getEventTarget(event);
390
+ if (!(target?.closest("[role=menu]") === event.currentTarget || target === event.currentTarget)) return;
391
+ if (event.key === "Tab") {
392
+ if (!isValidTabEvent(event)) {
393
+ event.preventDefault();
394
+ return;
395
+ }
396
+ }
397
+ const keyMap = {
398
+ ArrowDown() {
399
+ send({ type: "ARROW_DOWN" });
400
+ },
401
+ ArrowUp() {
402
+ send({ type: "ARROW_UP" });
403
+ },
404
+ ArrowLeft() {
405
+ send({ type: "ARROW_LEFT" });
406
+ },
407
+ ArrowRight() {
408
+ send({ type: "ARROW_RIGHT" });
409
+ },
410
+ Enter() {
411
+ send({ type: "ENTER" });
412
+ },
413
+ Space(event$1) {
414
+ if (isTypingAhead) send({
415
+ type: "TYPEAHEAD",
416
+ key: event$1.key
417
+ });
418
+ else keyMap.Enter?.(event$1);
419
+ },
420
+ Home() {
421
+ send({ type: "HOME" });
422
+ },
423
+ End() {
424
+ send({ type: "END" });
425
+ }
426
+ };
427
+ const exec = keyMap[getEventKey(event, { dir: prop("dir") })];
428
+ if (exec) {
429
+ exec(event);
430
+ event.stopPropagation();
431
+ event.preventDefault();
432
+ return;
433
+ }
434
+ if (!prop("typeahead")) return;
435
+ if (!isPrintableKey(event)) return;
436
+ if (isModifierKey(event)) return;
437
+ if (isEditableElement(target)) return;
438
+ send({
439
+ type: "TYPEAHEAD",
440
+ key: event.key
441
+ });
442
+ event.preventDefault();
443
+ }
444
+ });
445
+ },
446
+ getSeparatorProps() {
447
+ return normalize.element({
448
+ ...parts.separator.attrs,
449
+ role: "separator",
450
+ dir: prop("dir"),
451
+ "aria-orientation": "horizontal"
452
+ });
453
+ },
454
+ getItemState,
455
+ getItemProps,
456
+ getOptionItemState,
457
+ getOptionItemProps(props$1) {
458
+ const { type, disabled, closeOnSelect } = props$1;
459
+ const option = getOptionItemProps(props$1);
460
+ const itemState = getOptionItemState(props$1);
461
+ return {
462
+ ...getItemProps(option),
463
+ ...normalize.element({
464
+ "data-type": type,
465
+ ...parts.item.attrs,
466
+ dir: prop("dir"),
467
+ "data-value": option.value,
468
+ role: `menuitem${type}`,
469
+ "aria-checked": !!itemState.checked,
470
+ "data-state": itemState.checked ? "checked" : "unchecked",
471
+ onClick(event) {
472
+ if (disabled) return;
473
+ if (isDownloadingEvent(event)) return;
474
+ if (isOpeningInNewTab(event)) return;
475
+ const target = event.currentTarget;
476
+ send({
477
+ type: "ITEM_CLICK",
478
+ target,
479
+ option,
480
+ closeOnSelect
481
+ });
482
+ }
483
+ })
484
+ };
485
+ },
486
+ getItemIndicatorProps(props$1) {
487
+ const itemState = getOptionItemState(cast(props$1));
488
+ const dataState = itemState.checked ? "checked" : "unchecked";
489
+ return normalize.element({
490
+ ...parts.itemIndicator.attrs,
491
+ dir: prop("dir"),
492
+ "data-disabled": dataAttr(itemState.disabled),
493
+ "data-highlighted": dataAttr(itemState.highlighted),
494
+ "data-state": hasProp(props$1, "checked") ? dataState : void 0,
495
+ hidden: hasProp(props$1, "checked") ? !itemState.checked : void 0
496
+ });
497
+ },
498
+ getItemTextProps(props$1) {
499
+ const itemState = getOptionItemState(cast(props$1));
500
+ const dataState = itemState.checked ? "checked" : "unchecked";
501
+ return normalize.element({
502
+ ...parts.itemText.attrs,
503
+ dir: prop("dir"),
504
+ "data-disabled": dataAttr(itemState.disabled),
505
+ "data-highlighted": dataAttr(itemState.highlighted),
506
+ "data-state": hasProp(props$1, "checked") ? dataState : void 0
507
+ });
508
+ },
509
+ getItemGroupLabelProps(props$1) {
510
+ return normalize.element({
511
+ ...parts.itemGroupLabel.attrs,
512
+ id: getGroupLabelId(scope, props$1.htmlFor),
513
+ dir: prop("dir")
514
+ });
515
+ },
516
+ getItemGroupProps(props$1) {
517
+ return normalize.element({
518
+ id: getGroupId(scope, props$1.id),
519
+ ...parts.itemGroup.attrs,
520
+ dir: prop("dir"),
521
+ "aria-labelledby": getGroupLabelId(scope, props$1.id),
522
+ role: "group"
523
+ });
524
+ }
525
+ };
526
+ }
527
+
528
+ //#endregion
529
+ //#region src/machines/menu/menu.machine.ts
530
+ const { not, and, or } = createGuards();
531
+ const machine = createMachine({
532
+ props({ props: props$1 }) {
533
+ return {
534
+ closeOnSelect: true,
535
+ typeahead: true,
536
+ composite: true,
537
+ loopFocus: false,
538
+ navigate(details) {
539
+ clickIfLink(details.node);
540
+ },
541
+ ...props$1,
542
+ positioning: {
543
+ placement: "bottom-start",
544
+ gutter: 8,
545
+ ...props$1.positioning
546
+ }
547
+ };
548
+ },
549
+ initialState({ prop }) {
550
+ return prop("open") || prop("defaultOpen") ? "open" : "idle";
551
+ },
552
+ context({ bindable, prop }) {
553
+ return {
554
+ suspendPointer: bindable(() => ({ defaultValue: false })),
555
+ highlightedValue: bindable(() => ({
556
+ defaultValue: prop("defaultHighlightedValue") || null,
557
+ value: prop("highlightedValue"),
558
+ onChange(value) {
559
+ prop("onHighlightChange")?.({ highlightedValue: value });
560
+ }
561
+ })),
562
+ lastHighlightedValue: bindable(() => ({ defaultValue: null })),
563
+ currentPlacement: bindable(() => ({ defaultValue: void 0 })),
564
+ intentPolygon: bindable(() => ({ defaultValue: null })),
565
+ anchorPoint: bindable(() => ({
566
+ defaultValue: null,
567
+ hash(value) {
568
+ return `x: ${value?.x}, y: ${value?.y}`;
569
+ }
570
+ })),
571
+ isSubmenu: bindable(() => ({ defaultValue: false }))
572
+ };
573
+ },
574
+ refs() {
575
+ return {
576
+ parent: null,
577
+ children: {},
578
+ typeaheadState: { ...getByTypeahead.defaultOptions },
579
+ positioningOverride: {}
580
+ };
581
+ },
582
+ computed: {
583
+ isRtl: ({ prop }) => prop("dir") === "rtl",
584
+ isTypingAhead: ({ refs }) => refs.get("typeaheadState").keysSoFar !== "",
585
+ highlightedId: ({ context, scope, refs }) => resolveItemId(refs.get("children"), context.get("highlightedValue"), scope)
586
+ },
587
+ watch({ track, action, context, prop }) {
588
+ track([() => context.get("isSubmenu")], () => {
589
+ action(["setSubmenuPlacement"]);
590
+ });
591
+ track([() => context.hash("anchorPoint")], () => {
592
+ if (!context.get("anchorPoint")) return;
593
+ action(["reposition"]);
594
+ });
595
+ track([() => prop("open")], () => {
596
+ action(["toggleVisibility"]);
597
+ });
598
+ },
599
+ on: {
600
+ "PARENT.SET": { actions: ["setParentMenu"] },
601
+ "CHILD.SET": { actions: ["setChildMenu"] },
602
+ OPEN: [{
603
+ guard: "isOpenControlled",
604
+ actions: ["invokeOnOpen"]
605
+ }, {
606
+ target: "open",
607
+ actions: ["invokeOnOpen"]
608
+ }],
609
+ OPEN_AUTOFOCUS: [{
610
+ guard: "isOpenControlled",
611
+ actions: ["invokeOnOpen"]
612
+ }, {
613
+ target: "open",
614
+ actions: ["highlightFirstItem", "invokeOnOpen"]
615
+ }],
616
+ CLOSE: [{
617
+ guard: "isOpenControlled",
618
+ actions: ["invokeOnClose"]
619
+ }, {
620
+ target: "closed",
621
+ actions: ["invokeOnClose"]
622
+ }],
623
+ "HIGHLIGHTED.RESTORE": { actions: ["restoreHighlightedItem"] },
624
+ "HIGHLIGHTED.SET": { actions: ["setHighlightedItem"] }
625
+ },
626
+ states: {
627
+ idle: {
628
+ tags: ["closed"],
629
+ on: {
630
+ "CONTROLLED.OPEN": { target: "open" },
631
+ "CONTROLLED.CLOSE": { target: "closed" },
632
+ CONTEXT_MENU_START: {
633
+ target: "opening:contextmenu",
634
+ actions: ["setAnchorPoint"]
635
+ },
636
+ CONTEXT_MENU: [{
637
+ guard: "isOpenControlled",
638
+ actions: ["setAnchorPoint", "invokeOnOpen"]
639
+ }, {
640
+ target: "open",
641
+ actions: ["setAnchorPoint", "invokeOnOpen"]
642
+ }],
643
+ TRIGGER_CLICK: [{
644
+ guard: "isOpenControlled",
645
+ actions: ["invokeOnOpen"]
646
+ }, {
647
+ target: "open",
648
+ actions: ["invokeOnOpen"]
649
+ }],
650
+ TRIGGER_FOCUS: {
651
+ guard: not("isSubmenu"),
652
+ target: "closed"
653
+ },
654
+ TRIGGER_POINTERMOVE: {
655
+ guard: "isSubmenu",
656
+ target: "opening"
657
+ }
658
+ }
659
+ },
660
+ "opening:contextmenu": {
661
+ tags: ["closed"],
662
+ effects: ["waitForLongPress"],
663
+ on: {
664
+ "CONTROLLED.OPEN": { target: "open" },
665
+ "CONTROLLED.CLOSE": { target: "closed" },
666
+ CONTEXT_MENU_CANCEL: [{
667
+ guard: "isOpenControlled",
668
+ actions: ["invokeOnClose"]
669
+ }, {
670
+ target: "closed",
671
+ actions: ["invokeOnClose"]
672
+ }],
673
+ "LONG_PRESS.OPEN": [{
674
+ guard: "isOpenControlled",
675
+ actions: ["invokeOnOpen"]
676
+ }, {
677
+ target: "open",
678
+ actions: ["invokeOnOpen"]
679
+ }]
680
+ }
681
+ },
682
+ opening: {
683
+ tags: ["closed"],
684
+ effects: ["waitForOpenDelay"],
685
+ on: {
686
+ "CONTROLLED.OPEN": { target: "open" },
687
+ "CONTROLLED.CLOSE": { target: "closed" },
688
+ BLUR: [{
689
+ guard: "isOpenControlled",
690
+ actions: ["invokeOnClose"]
691
+ }, {
692
+ target: "closed",
693
+ actions: ["invokeOnClose"]
694
+ }],
695
+ TRIGGER_POINTERLEAVE: [{
696
+ guard: "isOpenControlled",
697
+ actions: ["invokeOnClose"]
698
+ }, {
699
+ target: "closed",
700
+ actions: ["invokeOnClose"]
701
+ }],
702
+ "DELAY.OPEN": [{
703
+ guard: "isOpenControlled",
704
+ actions: ["invokeOnOpen"]
705
+ }, {
706
+ target: "open",
707
+ actions: ["invokeOnOpen"]
708
+ }]
709
+ }
710
+ },
711
+ closing: {
712
+ tags: ["open"],
713
+ effects: [
714
+ "trackPointerMove",
715
+ "trackInteractOutside",
716
+ "waitForCloseDelay"
717
+ ],
718
+ on: {
719
+ "CONTROLLED.OPEN": { target: "open" },
720
+ "CONTROLLED.CLOSE": {
721
+ target: "closed",
722
+ actions: ["focusParentMenu", "restoreParentHighlightedItem"]
723
+ },
724
+ MENU_POINTERENTER: {
725
+ target: "open",
726
+ actions: ["clearIntentPolygon"]
727
+ },
728
+ POINTER_MOVED_AWAY_FROM_SUBMENU: [{
729
+ guard: "isOpenControlled",
730
+ actions: ["invokeOnClose"]
731
+ }, {
732
+ target: "closed",
733
+ actions: ["focusParentMenu", "restoreParentHighlightedItem"]
734
+ }],
735
+ "DELAY.CLOSE": [{
736
+ guard: "isOpenControlled",
737
+ actions: ["invokeOnClose"]
738
+ }, {
739
+ target: "closed",
740
+ actions: [
741
+ "focusParentMenu",
742
+ "restoreParentHighlightedItem",
743
+ "invokeOnClose"
744
+ ]
745
+ }]
746
+ }
747
+ },
748
+ closed: {
749
+ tags: ["closed"],
750
+ entry: [
751
+ "clearHighlightedItem",
752
+ "focusTrigger",
753
+ "resumePointer",
754
+ "clearAnchorPoint"
755
+ ],
756
+ on: {
757
+ "CONTROLLED.OPEN": [
758
+ {
759
+ guard: or("isOpenAutoFocusEvent", "isArrowDownEvent"),
760
+ target: "open",
761
+ actions: ["highlightFirstItem"]
762
+ },
763
+ {
764
+ guard: "isArrowUpEvent",
765
+ target: "open",
766
+ actions: ["highlightLastItem"]
767
+ },
768
+ { target: "open" }
769
+ ],
770
+ CONTEXT_MENU_START: {
771
+ target: "opening:contextmenu",
772
+ actions: ["setAnchorPoint"]
773
+ },
774
+ CONTEXT_MENU: [{
775
+ guard: "isOpenControlled",
776
+ actions: ["setAnchorPoint", "invokeOnOpen"]
777
+ }, {
778
+ target: "open",
779
+ actions: ["setAnchorPoint", "invokeOnOpen"]
780
+ }],
781
+ TRIGGER_CLICK: [{
782
+ guard: "isOpenControlled",
783
+ actions: ["invokeOnOpen"]
784
+ }, {
785
+ target: "open",
786
+ actions: ["invokeOnOpen"]
787
+ }],
788
+ TRIGGER_POINTERMOVE: {
789
+ guard: "isTriggerItem",
790
+ target: "opening"
791
+ },
792
+ TRIGGER_BLUR: { target: "idle" },
793
+ ARROW_DOWN: [{
794
+ guard: "isOpenControlled",
795
+ actions: ["invokeOnOpen"]
796
+ }, {
797
+ target: "open",
798
+ actions: ["highlightFirstItem", "invokeOnOpen"]
799
+ }],
800
+ ARROW_UP: [{
801
+ guard: "isOpenControlled",
802
+ actions: ["invokeOnOpen"]
803
+ }, {
804
+ target: "open",
805
+ actions: ["highlightLastItem", "invokeOnOpen"]
806
+ }]
807
+ }
808
+ },
809
+ open: {
810
+ tags: ["open"],
811
+ effects: [
812
+ "trackInteractOutside",
813
+ "trackPositioning",
814
+ "scrollToHighlightedItem"
815
+ ],
816
+ entry: ["focusMenu", "resumePointer"],
817
+ on: {
818
+ "CONTROLLED.CLOSE": [{
819
+ target: "closed",
820
+ guard: "isArrowLeftEvent",
821
+ actions: ["focusParentMenu"]
822
+ }, { target: "closed" }],
823
+ TRIGGER_CLICK: [{
824
+ guard: and(not("isTriggerItem"), "isOpenControlled"),
825
+ actions: ["invokeOnClose"]
826
+ }, {
827
+ guard: not("isTriggerItem"),
828
+ target: "closed",
829
+ actions: ["invokeOnClose"]
830
+ }],
831
+ CONTEXT_MENU: { actions: ["setAnchorPoint", "focusMenu"] },
832
+ ARROW_UP: { actions: ["highlightPrevItem", "focusMenu"] },
833
+ ARROW_DOWN: { actions: ["highlightNextItem", "focusMenu"] },
834
+ ARROW_LEFT: [{
835
+ guard: and("isSubmenu", "isOpenControlled"),
836
+ actions: ["invokeOnClose"]
837
+ }, {
838
+ guard: "isSubmenu",
839
+ target: "closed",
840
+ actions: ["focusParentMenu", "invokeOnClose"]
841
+ }],
842
+ HOME: { actions: ["highlightFirstItem", "focusMenu"] },
843
+ END: { actions: ["highlightLastItem", "focusMenu"] },
844
+ ARROW_RIGHT: {
845
+ guard: "isTriggerItemHighlighted",
846
+ actions: ["openSubmenu"]
847
+ },
848
+ ENTER: [{
849
+ guard: "isTriggerItemHighlighted",
850
+ actions: ["openSubmenu"]
851
+ }, { actions: ["clickHighlightedItem"] }],
852
+ ITEM_POINTERMOVE: [{
853
+ guard: not("isPointerSuspended"),
854
+ actions: ["setHighlightedItem", "focusMenu"]
855
+ }, { actions: ["setLastHighlightedItem"] }],
856
+ ITEM_POINTERLEAVE: {
857
+ guard: and(not("isPointerSuspended"), not("isTriggerItem")),
858
+ actions: ["clearHighlightedItem"]
859
+ },
860
+ ITEM_CLICK: [
861
+ {
862
+ guard: and(not("isTriggerItemHighlighted"), not("isHighlightedItemEditable"), "closeOnSelect", "isOpenControlled"),
863
+ actions: [
864
+ "invokeOnSelect",
865
+ "setOptionState",
866
+ "closeRootMenu",
867
+ "invokeOnClose"
868
+ ]
869
+ },
870
+ {
871
+ guard: and(not("isTriggerItemHighlighted"), not("isHighlightedItemEditable"), "closeOnSelect"),
872
+ target: "closed",
873
+ actions: [
874
+ "invokeOnSelect",
875
+ "setOptionState",
876
+ "closeRootMenu",
877
+ "invokeOnClose"
878
+ ]
879
+ },
880
+ {
881
+ guard: and(not("isTriggerItemHighlighted"), not("isHighlightedItemEditable")),
882
+ actions: ["invokeOnSelect", "setOptionState"]
883
+ },
884
+ { actions: ["setHighlightedItem"] }
885
+ ],
886
+ TRIGGER_POINTERMOVE: {
887
+ guard: "isTriggerItem",
888
+ actions: ["setIntentPolygon"]
889
+ },
890
+ TRIGGER_POINTERLEAVE: { target: "closing" },
891
+ ITEM_POINTERDOWN: { actions: ["setHighlightedItem"] },
892
+ TYPEAHEAD: { actions: ["highlightMatchedItem"] },
893
+ FOCUS_MENU: { actions: ["focusMenu"] },
894
+ "POSITIONING.SET": { actions: ["reposition"] }
895
+ }
896
+ }
897
+ },
898
+ implementations: {
899
+ guards: {
900
+ closeOnSelect: ({ prop, event }) => !!(event?.closeOnSelect ?? prop("closeOnSelect")),
901
+ isTriggerItem: ({ event }) => isTriggerItem(event.target),
902
+ isTriggerItemHighlighted: ({ event, scope, computed }) => {
903
+ return !!(event.target ?? scope.getById(computed("highlightedId")))?.hasAttribute("aria-controls");
904
+ },
905
+ isSubmenu: ({ context }) => context.get("isSubmenu"),
906
+ isPointerSuspended: ({ context }) => context.get("suspendPointer"),
907
+ isHighlightedItemEditable: ({ scope, computed }) => isEditableElement(scope.getById(computed("highlightedId"))),
908
+ isOpenControlled: ({ prop }) => prop("open") !== void 0,
909
+ isArrowLeftEvent: ({ event }) => event.previousEvent?.type === "ARROW_LEFT",
910
+ isArrowUpEvent: ({ event }) => event.previousEvent?.type === "ARROW_UP",
911
+ isArrowDownEvent: ({ event }) => event.previousEvent?.type === "ARROW_DOWN",
912
+ isOpenAutoFocusEvent: ({ event }) => event.previousEvent?.type === "OPEN_AUTOFOCUS"
913
+ },
914
+ effects: {
915
+ waitForOpenDelay({ send }) {
916
+ const timer = setTimeout(() => {
917
+ send({ type: "DELAY.OPEN" });
918
+ }, 100);
919
+ return () => clearTimeout(timer);
920
+ },
921
+ waitForCloseDelay({ send }) {
922
+ const timer = setTimeout(() => {
923
+ send({ type: "DELAY.CLOSE" });
924
+ }, 300);
925
+ return () => clearTimeout(timer);
926
+ },
927
+ waitForLongPress({ send }) {
928
+ const timer = setTimeout(() => {
929
+ send({ type: "LONG_PRESS.OPEN" });
930
+ }, 700);
931
+ return () => clearTimeout(timer);
932
+ },
933
+ trackPositioning({ context, prop, scope, refs }) {
934
+ if (getContextTriggerEl(scope)) return;
935
+ const positioning = {
936
+ ...prop("positioning"),
937
+ ...refs.get("positioningOverride")
938
+ };
939
+ context.set("currentPlacement", positioning.placement);
940
+ const getPositionerEl$1 = () => getPositionerEl(scope);
941
+ return getPlacement(getTriggerEl(scope), getPositionerEl$1, {
942
+ ...positioning,
943
+ defer: true,
944
+ onComplete(data) {
945
+ context.set("currentPlacement", data.placement);
946
+ }
947
+ });
948
+ },
949
+ trackInteractOutside({ refs, scope, prop, context, send }) {
950
+ const getContentEl$1 = () => getContentEl(scope);
951
+ let restoreFocus = true;
952
+ return trackDismissableElement(getContentEl$1, {
953
+ type: "menu",
954
+ defer: true,
955
+ exclude: [getTriggerEl(scope)],
956
+ onInteractOutside: prop("onInteractOutside"),
957
+ onRequestDismiss: prop("onRequestDismiss"),
958
+ onFocusOutside(event) {
959
+ prop("onFocusOutside")?.(event);
960
+ const target = getEventTarget(event.detail.originalEvent);
961
+ if (contains(getContextTriggerEl(scope), target)) {
962
+ event.preventDefault();
963
+ return;
964
+ }
965
+ },
966
+ onEscapeKeyDown(event) {
967
+ prop("onEscapeKeyDown")?.(event);
968
+ if (context.get("isSubmenu")) event.preventDefault();
969
+ closeRootMenu({ parent: refs.get("parent") });
970
+ },
971
+ onPointerDownOutside(event) {
972
+ prop("onPointerDownOutside")?.(event);
973
+ const target = getEventTarget(event.detail.originalEvent);
974
+ if (contains(getContextTriggerEl(scope), target) && event.detail.contextmenu) {
975
+ event.preventDefault();
976
+ return;
977
+ }
978
+ restoreFocus = !event.detail.focusable;
979
+ },
980
+ onDismiss() {
981
+ send({
982
+ type: "CLOSE",
983
+ src: "interact-outside",
984
+ restoreFocus
985
+ });
986
+ }
987
+ });
988
+ },
989
+ trackPointerMove({ context, scope, send, refs, flush }) {
990
+ const parent = refs.get("parent");
991
+ flush(() => {
992
+ parent.context.set("suspendPointer", true);
993
+ });
994
+ return addDomEvent(scope.getDoc(), "pointermove", (e) => {
995
+ if (!isWithinPolygon(context.get("intentPolygon"), {
996
+ x: e.clientX,
997
+ y: e.clientY
998
+ })) {
999
+ send({ type: "POINTER_MOVED_AWAY_FROM_SUBMENU" });
1000
+ parent.context.set("suspendPointer", false);
1001
+ }
1002
+ });
1003
+ },
1004
+ scrollToHighlightedItem({ event, scope, computed }) {
1005
+ const exec = () => {
1006
+ if (event.current().type.startsWith("ITEM_POINTER")) return;
1007
+ scrollIntoView(scope.getById(computed("highlightedId")), {
1008
+ rootEl: getContentEl(scope),
1009
+ block: "nearest"
1010
+ });
1011
+ };
1012
+ raf(() => exec());
1013
+ const contentEl = () => getContentEl(scope);
1014
+ return observeAttributes(contentEl, {
1015
+ defer: true,
1016
+ attributes: ["aria-activedescendant"],
1017
+ callback: exec
1018
+ });
1019
+ }
1020
+ },
1021
+ actions: {
1022
+ setAnchorPoint({ context, event }) {
1023
+ context.set("anchorPoint", (prev$1) => isEqual(prev$1, event.point) ? prev$1 : event.point);
1024
+ },
1025
+ setSubmenuPlacement({ context, computed, refs }) {
1026
+ if (!context.get("isSubmenu")) return;
1027
+ const placement = computed("isRtl") ? "left-start" : "right-start";
1028
+ refs.set("positioningOverride", {
1029
+ placement,
1030
+ gutter: 0
1031
+ });
1032
+ },
1033
+ reposition({ context, scope, prop, event, refs }) {
1034
+ const getPositionerEl$1 = () => getPositionerEl(scope);
1035
+ const anchorPoint = context.get("anchorPoint");
1036
+ const getAnchorRect = anchorPoint ? () => ({
1037
+ width: 0,
1038
+ height: 0,
1039
+ ...anchorPoint
1040
+ }) : void 0;
1041
+ const positioning = {
1042
+ ...prop("positioning"),
1043
+ ...refs.get("positioningOverride")
1044
+ };
1045
+ getPlacement(getTriggerEl(scope), getPositionerEl$1, {
1046
+ ...positioning,
1047
+ defer: true,
1048
+ getAnchorRect,
1049
+ ...event.options ?? {},
1050
+ listeners: false,
1051
+ onComplete(data) {
1052
+ context.set("currentPlacement", data.placement);
1053
+ }
1054
+ });
1055
+ },
1056
+ setOptionState({ event }) {
1057
+ if (!event.option) return;
1058
+ const { checked, onCheckedChange, type } = event.option;
1059
+ if (type === "radio") onCheckedChange?.(true);
1060
+ else if (type === "checkbox") onCheckedChange?.(!checked);
1061
+ },
1062
+ clickHighlightedItem({ scope, computed, prop, context }) {
1063
+ const itemEl = scope.getById(computed("highlightedId"));
1064
+ if (!itemEl || itemEl.dataset.disabled) return;
1065
+ const highlightedValue = context.get("highlightedValue");
1066
+ if (isAnchorElement(itemEl)) prop("navigate")?.({
1067
+ value: highlightedValue,
1068
+ node: itemEl,
1069
+ href: itemEl.href
1070
+ });
1071
+ else queueMicrotask(() => itemEl.click());
1072
+ },
1073
+ setIntentPolygon({ context, scope, event }) {
1074
+ const menu = getContentEl(scope);
1075
+ const placement = context.get("currentPlacement");
1076
+ if (!menu || !placement) return;
1077
+ const polygon = getElementPolygon(menu.getBoundingClientRect(), placement);
1078
+ if (!polygon) return;
1079
+ const bleed = getPlacementSide(placement) === "right" ? -5 : 5;
1080
+ context.set("intentPolygon", [{
1081
+ ...event.point,
1082
+ x: event.point.x + bleed
1083
+ }, ...polygon]);
1084
+ },
1085
+ clearIntentPolygon({ context }) {
1086
+ context.set("intentPolygon", null);
1087
+ },
1088
+ clearAnchorPoint({ context }) {
1089
+ context.set("anchorPoint", null);
1090
+ },
1091
+ resumePointer({ refs, flush }) {
1092
+ const parent = refs.get("parent");
1093
+ if (!parent) return;
1094
+ flush(() => {
1095
+ parent.context.set("suspendPointer", false);
1096
+ });
1097
+ },
1098
+ setHighlightedItem({ context, event }) {
1099
+ const value = event.value || getItemValue(event.target);
1100
+ context.set("highlightedValue", value);
1101
+ },
1102
+ clearHighlightedItem({ context }) {
1103
+ context.set("highlightedValue", null);
1104
+ },
1105
+ focusMenu({ scope }) {
1106
+ raf(() => {
1107
+ const contentEl = getContentEl(scope);
1108
+ getInitialFocus({
1109
+ root: contentEl,
1110
+ enabled: !contains(contentEl, scope.getActiveElement()),
1111
+ filter(node) {
1112
+ return !node.role?.startsWith("menuitem");
1113
+ }
1114
+ })?.focus({ preventScroll: true });
1115
+ });
1116
+ },
1117
+ highlightFirstItem({ context, scope }) {
1118
+ (getContentEl(scope) ? queueMicrotask : raf)(() => {
1119
+ const first$1 = getFirstEl(scope);
1120
+ if (!first$1) return;
1121
+ context.set("highlightedValue", getItemValue(first$1));
1122
+ });
1123
+ },
1124
+ highlightLastItem({ context, scope }) {
1125
+ (getContentEl(scope) ? queueMicrotask : raf)(() => {
1126
+ const last$1 = getLastEl(scope);
1127
+ if (!last$1) return;
1128
+ context.set("highlightedValue", getItemValue(last$1));
1129
+ });
1130
+ },
1131
+ highlightNextItem({ context, scope, event, prop }) {
1132
+ const next$1 = getNextEl(scope, {
1133
+ loop: event.loop,
1134
+ value: context.get("highlightedValue"),
1135
+ loopFocus: prop("loopFocus")
1136
+ });
1137
+ context.set("highlightedValue", getItemValue(next$1));
1138
+ },
1139
+ highlightPrevItem({ context, scope, event, prop }) {
1140
+ const prev$1 = getPrevEl(scope, {
1141
+ loop: event.loop,
1142
+ value: context.get("highlightedValue"),
1143
+ loopFocus: prop("loopFocus")
1144
+ });
1145
+ context.set("highlightedValue", getItemValue(prev$1));
1146
+ },
1147
+ invokeOnSelect({ context, prop, scope }) {
1148
+ const value = context.get("highlightedValue");
1149
+ if (value == null) return;
1150
+ const node = getItemEl(scope, value);
1151
+ dispatchSelectionEvent(node, value);
1152
+ prop("onSelect")?.({ value });
1153
+ },
1154
+ focusTrigger({ scope, context, event }) {
1155
+ if (context.get("isSubmenu") || context.get("anchorPoint") || event.restoreFocus === false) return;
1156
+ queueMicrotask(() => getTriggerEl(scope)?.focus({ preventScroll: true }));
1157
+ },
1158
+ highlightMatchedItem({ scope, context, event, refs }) {
1159
+ const node = getElemByKey(scope, {
1160
+ key: event.key,
1161
+ value: context.get("highlightedValue"),
1162
+ typeaheadState: refs.get("typeaheadState")
1163
+ });
1164
+ if (!node) return;
1165
+ context.set("highlightedValue", getItemValue(node));
1166
+ },
1167
+ setParentMenu({ refs, event, context }) {
1168
+ refs.set("parent", event.value);
1169
+ context.set("isSubmenu", true);
1170
+ },
1171
+ setChildMenu({ refs, event }) {
1172
+ const children = refs.get("children");
1173
+ children[event.id] = event.value;
1174
+ refs.set("children", children);
1175
+ },
1176
+ closeRootMenu({ refs }) {
1177
+ closeRootMenu({ parent: refs.get("parent") });
1178
+ },
1179
+ openSubmenu({ refs, scope, computed }) {
1180
+ const id = scope.getById(computed("highlightedId"))?.getAttribute("data-uid");
1181
+ const children = refs.get("children");
1182
+ (id ? children[id] : null)?.send({ type: "OPEN_AUTOFOCUS" });
1183
+ },
1184
+ focusParentMenu({ refs }) {
1185
+ refs.get("parent")?.send({ type: "FOCUS_MENU" });
1186
+ },
1187
+ setLastHighlightedItem({ context, event }) {
1188
+ context.set("lastHighlightedValue", getItemValue(event.target));
1189
+ },
1190
+ restoreHighlightedItem({ context }) {
1191
+ if (!context.get("lastHighlightedValue")) return;
1192
+ context.set("highlightedValue", context.get("lastHighlightedValue"));
1193
+ context.set("lastHighlightedValue", null);
1194
+ },
1195
+ restoreParentHighlightedItem({ refs }) {
1196
+ refs.get("parent")?.send({ type: "HIGHLIGHTED.RESTORE" });
1197
+ },
1198
+ invokeOnOpen({ prop }) {
1199
+ prop("onOpenChange")?.({ open: true });
1200
+ },
1201
+ invokeOnClose({ prop }) {
1202
+ prop("onOpenChange")?.({ open: false });
1203
+ },
1204
+ toggleVisibility({ prop, event, send }) {
1205
+ send({
1206
+ type: prop("open") ? "CONTROLLED.OPEN" : "CONTROLLED.CLOSE",
1207
+ previousEvent: event
1208
+ });
1209
+ }
1210
+ }
1211
+ }
1212
+ });
1213
+ function closeRootMenu(ctx) {
1214
+ let parent = ctx.parent;
1215
+ while (parent && parent.context.get("isSubmenu")) parent = parent.refs.get("parent");
1216
+ parent?.send({ type: "CLOSE" });
1217
+ }
1218
+ function isWithinPolygon(polygon, point) {
1219
+ if (!polygon) return false;
1220
+ return isPointInPolygon(polygon, point);
1221
+ }
1222
+ function resolveItemId(children, value, scope) {
1223
+ const hasChildren = Object.keys(children).length > 0;
1224
+ if (!value) return null;
1225
+ if (!hasChildren) return getItemId(scope, value);
1226
+ for (const id in children) {
1227
+ const childMenu = children[id];
1228
+ const childTriggerId = getTriggerId(childMenu.scope);
1229
+ if (childTriggerId === value) return childTriggerId;
1230
+ }
1231
+ return getItemId(scope, value);
1232
+ }
1233
+
1234
+ //#endregion
1235
+ //#region src/machines/menu/menu.props.ts
1236
+ const props = createProps()([
1237
+ "anchorPoint",
1238
+ "aria-label",
1239
+ "closeOnSelect",
1240
+ "composite",
1241
+ "defaultHighlightedValue",
1242
+ "defaultOpen",
1243
+ "dir",
1244
+ "getRootNode",
1245
+ "highlightedValue",
1246
+ "id",
1247
+ "ids",
1248
+ "loopFocus",
1249
+ "navigate",
1250
+ "onEscapeKeyDown",
1251
+ "onFocusOutside",
1252
+ "onHighlightChange",
1253
+ "onInteractOutside",
1254
+ "onOpenChange",
1255
+ "onPointerDownOutside",
1256
+ "onRequestDismiss",
1257
+ "onSelect",
1258
+ "open",
1259
+ "positioning",
1260
+ "typeahead"
1261
+ ]);
1262
+ const splitProps = createSplitProps(props);
1263
+ const itemProps = createProps()([
1264
+ "closeOnSelect",
1265
+ "disabled",
1266
+ "value",
1267
+ "valueText"
1268
+ ]);
1269
+ const splitItemProps = createSplitProps(itemProps);
1270
+ const itemGroupLabelProps = createProps()(["htmlFor"]);
1271
+ const splitItemGroupLabelProps = createSplitProps(itemGroupLabelProps);
1272
+ const itemGroupProps = createProps()(["id"]);
1273
+ const splitItemGroupProps = createSplitProps(itemGroupProps);
1274
+ const optionItemProps = createProps()([
1275
+ "checked",
1276
+ "closeOnSelect",
1277
+ "disabled",
1278
+ "onCheckedChange",
1279
+ "type",
1280
+ "value",
1281
+ "valueText"
1282
+ ]);
1283
+ const splitOptionItemProps = createSplitProps(optionItemProps);
1284
+
1285
+ //#endregion
1286
+ export { anatomy, connect, itemGroupLabelProps, itemGroupProps, itemProps, machine, optionItemProps, props, splitItemGroupLabelProps, splitItemGroupProps, splitItemProps, splitOptionItemProps, splitProps };