@greypan/web-ui 11.2.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.CN.md +79 -68
  2. package/README.md +81 -72
  3. package/dist/_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js +8 -0
  4. package/dist/assets/menu-portal.js +3 -4
  5. package/dist/assets/menu-portal.js.map +1 -1
  6. package/dist/assets/modal-surface.js +3 -4
  7. package/dist/assets/modal-surface.js.map +1 -1
  8. package/dist/assets/overlay-motion.js +3 -4
  9. package/dist/assets/overlay-motion.js.map +1 -1
  10. package/dist/assets/scrollbar.js +5 -0
  11. package/dist/assets/scrollbar.js.map +1 -0
  12. package/dist/assets/selection-control.js +3 -4
  13. package/dist/assets/selection-control.js.map +1 -1
  14. package/dist/assets/toast-containers.js +3 -4
  15. package/dist/assets/toast-containers.js.map +1 -1
  16. package/dist/classes/glass.js +3 -4
  17. package/dist/classes/glass.js.map +1 -1
  18. package/dist/classes/glow.js +3 -4
  19. package/dist/classes/glow.js.map +1 -1
  20. package/dist/components/autocomplete/index.d.ts +485 -483
  21. package/dist/components/autocomplete/index.d.ts.map +1 -0
  22. package/dist/components/autocomplete/index.js +475 -267
  23. package/dist/components/autocomplete/index.js.map +1 -1
  24. package/dist/components/autocomplete/style.js +3 -4
  25. package/dist/components/autocomplete/style.js.map +1 -1
  26. package/dist/components/avatar/index.d.ts +26 -24
  27. package/dist/components/avatar/index.d.ts.map +1 -0
  28. package/dist/components/avatar/index.js +72 -52
  29. package/dist/components/avatar/index.js.map +1 -1
  30. package/dist/components/avatar/style.js +3 -4
  31. package/dist/components/avatar/style.js.map +1 -1
  32. package/dist/components/back-top/index.d.ts +30 -27
  33. package/dist/components/back-top/index.d.ts.map +1 -0
  34. package/dist/components/back-top/index.js +96 -62
  35. package/dist/components/back-top/index.js.map +1 -1
  36. package/dist/components/back-top/style.js +3 -4
  37. package/dist/components/back-top/style.js.map +1 -1
  38. package/dist/components/badge/index.d.ts +32 -26
  39. package/dist/components/badge/index.d.ts.map +1 -0
  40. package/dist/components/badge/index.js +116 -74
  41. package/dist/components/badge/index.js.map +1 -1
  42. package/dist/components/badge/style.js +3 -4
  43. package/dist/components/badge/style.js.map +1 -1
  44. package/dist/components/button/index.d.ts +392 -390
  45. package/dist/components/button/index.d.ts.map +1 -0
  46. package/dist/components/button/index.js +108 -74
  47. package/dist/components/button/index.js.map +1 -1
  48. package/dist/components/button/style.js +3 -4
  49. package/dist/components/button/style.js.map +1 -1
  50. package/dist/components/button-group/index.d.ts +14 -13
  51. package/dist/components/button-group/index.d.ts.map +1 -0
  52. package/dist/components/button-group/index.js +43 -33
  53. package/dist/components/button-group/index.js.map +1 -1
  54. package/dist/components/button-group/style.js +3 -4
  55. package/dist/components/button-group/style.js.map +1 -1
  56. package/dist/components/checkbox/index.d.ts +399 -397
  57. package/dist/components/checkbox/index.d.ts.map +1 -0
  58. package/dist/components/checkbox/index.js +103 -74
  59. package/dist/components/checkbox/index.js.map +1 -1
  60. package/dist/components/checkbox/style.js +3 -4
  61. package/dist/components/checkbox/style.js.map +1 -1
  62. package/dist/components/checkbox-group/index.d.ts +397 -396
  63. package/dist/components/checkbox-group/index.d.ts.map +1 -0
  64. package/dist/components/checkbox-group/index.js +92 -70
  65. package/dist/components/checkbox-group/index.js.map +1 -1
  66. package/dist/components/checkbox-group/style.js +3 -4
  67. package/dist/components/checkbox-group/style.js.map +1 -1
  68. package/dist/components/collapse/index.d.ts +72 -71
  69. package/dist/components/collapse/index.d.ts.map +1 -0
  70. package/dist/components/collapse/index.js +225 -130
  71. package/dist/components/collapse/index.js.map +1 -1
  72. package/dist/components/collapse/style.js +3 -4
  73. package/dist/components/collapse/style.js.map +1 -1
  74. package/dist/components/context-menu/index.d.ts +307 -310
  75. package/dist/components/context-menu/index.d.ts.map +1 -0
  76. package/dist/components/context-menu/index.js +685 -270
  77. package/dist/components/context-menu/index.js.map +1 -1
  78. package/dist/components/context-menu/scrim.js +3 -4
  79. package/dist/components/context-menu/scrim.js.map +1 -1
  80. package/dist/components/context-menu/style.js +3 -4
  81. package/dist/components/context-menu/style.js.map +1 -1
  82. package/dist/components/dialog/index.d.ts +87 -78
  83. package/dist/components/dialog/index.d.ts.map +1 -0
  84. package/dist/components/dialog/index.js +183 -88
  85. package/dist/components/dialog/index.js.map +1 -1
  86. package/dist/components/dialog/style.js +3 -4
  87. package/dist/components/dialog/style.js.map +1 -1
  88. package/dist/components/drawer/index.d.ts +159 -150
  89. package/dist/components/drawer/index.d.ts.map +1 -0
  90. package/dist/components/drawer/index.js +503 -242
  91. package/dist/components/drawer/index.js.map +1 -1
  92. package/dist/components/drawer/style.js +3 -4
  93. package/dist/components/drawer/style.js.map +1 -1
  94. package/dist/components/dropdown/index.d.ts +125 -124
  95. package/dist/components/dropdown/index.d.ts.map +1 -0
  96. package/dist/components/dropdown/index.js +556 -328
  97. package/dist/components/dropdown/index.js.map +1 -1
  98. package/dist/components/dropdown/style.js +3 -4
  99. package/dist/components/dropdown/style.js.map +1 -1
  100. package/dist/components/dropdown-divider/index.d.ts +7 -6
  101. package/dist/components/dropdown-divider/index.d.ts.map +1 -0
  102. package/dist/components/dropdown-divider/index.js +10 -11
  103. package/dist/components/dropdown-divider/index.js.map +1 -1
  104. package/dist/components/dropdown-divider/style.js +3 -4
  105. package/dist/components/dropdown-divider/style.js.map +1 -1
  106. package/dist/components/dropdown-header/index.d.ts +7 -6
  107. package/dist/components/dropdown-header/index.d.ts.map +1 -0
  108. package/dist/components/dropdown-header/index.js +10 -11
  109. package/dist/components/dropdown-header/index.js.map +1 -1
  110. package/dist/components/dropdown-header/style.js +3 -4
  111. package/dist/components/dropdown-header/style.js.map +1 -1
  112. package/dist/components/dropdown-item/index.d.ts +13 -11
  113. package/dist/components/dropdown-item/index.d.ts.map +1 -0
  114. package/dist/components/dropdown-item/index.js +32 -25
  115. package/dist/components/dropdown-item/index.js.map +1 -1
  116. package/dist/components/dropdown-item/style.js +3 -4
  117. package/dist/components/dropdown-item/style.js.map +1 -1
  118. package/dist/components/editable-text/index.d.ts +506 -505
  119. package/dist/components/editable-text/index.d.ts.map +1 -0
  120. package/dist/components/editable-text/index.js +281 -127
  121. package/dist/components/editable-text/index.js.map +1 -1
  122. package/dist/components/editable-text/style.js +3 -4
  123. package/dist/components/editable-text/style.js.map +1 -1
  124. package/dist/components/empty/index.d.ts +17 -15
  125. package/dist/components/empty/index.d.ts.map +1 -0
  126. package/dist/components/empty/index.js +66 -37
  127. package/dist/components/empty/index.js.map +1 -1
  128. package/dist/components/empty/style.js +3 -4
  129. package/dist/components/empty/style.js.map +1 -1
  130. package/dist/components/icon/index.d.ts +12 -11
  131. package/dist/components/icon/index.d.ts.map +1 -0
  132. package/dist/components/icon/index.js +34 -27
  133. package/dist/components/icon/index.js.map +1 -1
  134. package/dist/components/icon/style.js +3 -4
  135. package/dist/components/icon/style.js.map +1 -1
  136. package/dist/components/image-preview/index.d.ts +58 -44
  137. package/dist/components/image-preview/index.d.ts.map +1 -0
  138. package/dist/components/image-preview/index.js +536 -265
  139. package/dist/components/image-preview/index.js.map +1 -1
  140. package/dist/components/image-preview/style.js +3 -4
  141. package/dist/components/image-preview/style.js.map +1 -1
  142. package/dist/components/index.d.ts +46 -43
  143. package/dist/components/index.d.ts.map +1 -0
  144. package/dist/components/index.js +41 -41
  145. package/dist/components/input/index.d.ts +418 -413
  146. package/dist/components/input/index.d.ts.map +1 -0
  147. package/dist/components/input/index.js +148 -84
  148. package/dist/components/input/index.js.map +1 -1
  149. package/dist/components/input/style.js +3 -4
  150. package/dist/components/input/style.js.map +1 -1
  151. package/dist/components/input-number/index.d.ts +453 -447
  152. package/dist/components/input-number/index.d.ts.map +1 -0
  153. package/dist/components/input-number/index.js +484 -292
  154. package/dist/components/input-number/index.js.map +1 -1
  155. package/dist/components/input-number/style.js +3 -4
  156. package/dist/components/input-number/style.js.map +1 -1
  157. package/dist/components/layout/index.d.ts +110 -87
  158. package/dist/components/layout/index.d.ts.map +1 -0
  159. package/dist/components/layout/index.js +238 -144
  160. package/dist/components/layout/index.js.map +1 -1
  161. package/dist/components/layout/style.js +3 -4
  162. package/dist/components/layout/style.js.map +1 -1
  163. package/dist/components/middle-ellipsis/index.d.ts +93 -92
  164. package/dist/components/middle-ellipsis/index.d.ts.map +1 -0
  165. package/dist/components/middle-ellipsis/index.js +261 -107
  166. package/dist/components/middle-ellipsis/index.js.map +1 -1
  167. package/dist/components/middle-ellipsis/style.js +3 -4
  168. package/dist/components/middle-ellipsis/style.js.map +1 -1
  169. package/dist/components/middle-ellipsis/truncate.js +60 -30
  170. package/dist/components/middle-ellipsis/truncate.js.map +1 -1
  171. package/dist/components/option/index.d.ts +20 -18
  172. package/dist/components/option/index.d.ts.map +1 -0
  173. package/dist/components/option/index.js +53 -40
  174. package/dist/components/option/index.js.map +1 -1
  175. package/dist/components/option/style.js +3 -4
  176. package/dist/components/option/style.js.map +1 -1
  177. package/dist/components/popover/index.d.ts +69 -68
  178. package/dist/components/popover/index.d.ts.map +1 -0
  179. package/dist/components/popover/index.js +221 -104
  180. package/dist/components/popover/index.js.map +1 -1
  181. package/dist/components/popover/style.js +3 -4
  182. package/dist/components/popover/style.js.map +1 -1
  183. package/dist/components/radio/index.d.ts +396 -395
  184. package/dist/components/radio/index.d.ts.map +1 -0
  185. package/dist/components/radio/index.js +91 -62
  186. package/dist/components/radio/index.js.map +1 -1
  187. package/dist/components/radio/interaction.js +10 -11
  188. package/dist/components/radio/interaction.js.map +1 -1
  189. package/dist/components/radio/style.js +3 -4
  190. package/dist/components/radio/style.js.map +1 -1
  191. package/dist/components/radio-group/index.d.ts +417 -416
  192. package/dist/components/radio-group/index.d.ts.map +1 -0
  193. package/dist/components/radio-group/index.js +307 -207
  194. package/dist/components/radio-group/index.js.map +1 -1
  195. package/dist/components/radio-group/style.js +3 -4
  196. package/dist/components/radio-group/style.js.map +1 -1
  197. package/dist/components/segmented/index.d.ts +408 -402
  198. package/dist/components/segmented/index.d.ts.map +1 -0
  199. package/dist/components/segmented/index.js +267 -158
  200. package/dist/components/segmented/index.js.map +1 -1
  201. package/dist/components/segmented/style.js +3 -4
  202. package/dist/components/segmented/style.js.map +1 -1
  203. package/dist/components/segmented-trigger/index.d.ts +18 -17
  204. package/dist/components/segmented-trigger/index.d.ts.map +1 -0
  205. package/dist/components/segmented-trigger/index.js +45 -36
  206. package/dist/components/segmented-trigger/index.js.map +1 -1
  207. package/dist/components/segmented-trigger/style.js +3 -4
  208. package/dist/components/segmented-trigger/style.js.map +1 -1
  209. package/dist/components/select/index.d.ts +450 -448
  210. package/dist/components/select/index.d.ts.map +1 -0
  211. package/dist/components/select/index.js +342 -188
  212. package/dist/components/select/index.js.map +1 -1
  213. package/dist/components/select/style.js +3 -4
  214. package/dist/components/select/style.js.map +1 -1
  215. package/dist/components/slider/index.d.ts +428 -427
  216. package/dist/components/slider/index.d.ts.map +1 -0
  217. package/dist/components/slider/index.js +308 -216
  218. package/dist/components/slider/index.js.map +1 -1
  219. package/dist/components/slider/style.js +3 -4
  220. package/dist/components/slider/style.js.map +1 -1
  221. package/dist/components/spinner/index.d.ts +39 -38
  222. package/dist/components/spinner/index.d.ts.map +1 -0
  223. package/dist/components/spinner/index.js +118 -65
  224. package/dist/components/spinner/index.js.map +1 -1
  225. package/dist/components/spinner/style.js +3 -4
  226. package/dist/components/spinner/style.js.map +1 -1
  227. package/dist/components/svg-draw-lines/index.d.ts +40 -39
  228. package/dist/components/svg-draw-lines/index.d.ts.map +1 -0
  229. package/dist/components/svg-draw-lines/index.js +189 -106
  230. package/dist/components/svg-draw-lines/index.js.map +1 -1
  231. package/dist/components/svg-draw-lines/style.js +3 -4
  232. package/dist/components/svg-draw-lines/style.js.map +1 -1
  233. package/dist/components/switch/index.d.ts +411 -409
  234. package/dist/components/switch/index.d.ts.map +1 -0
  235. package/dist/components/switch/index.js +193 -106
  236. package/dist/components/switch/index.js.map +1 -1
  237. package/dist/components/switch/style.js +3 -4
  238. package/dist/components/switch/style.js.map +1 -1
  239. package/dist/components/textarea/index.d.ts +430 -425
  240. package/dist/components/textarea/index.d.ts.map +1 -0
  241. package/dist/components/textarea/index.js +187 -100
  242. package/dist/components/textarea/index.js.map +1 -1
  243. package/dist/components/textarea/style.js +3 -4
  244. package/dist/components/textarea/style.js.map +1 -1
  245. package/dist/components/theme/index.d.ts +45 -44
  246. package/dist/components/theme/index.d.ts.map +1 -0
  247. package/dist/components/theme/index.js +268 -161
  248. package/dist/components/theme/index.js.map +1 -1
  249. package/dist/components/theme/style.js +3 -4
  250. package/dist/components/theme/style.js.map +1 -1
  251. package/dist/components/toast/index.d.ts +4 -3
  252. package/dist/components/toast/index.js +3 -3
  253. package/dist/components/toast/manager.d.ts +9 -8
  254. package/dist/components/toast/manager.d.ts.map +1 -0
  255. package/dist/components/toast/manager.js +215 -119
  256. package/dist/components/toast/manager.js.map +1 -1
  257. package/dist/components/toast/style.js +3 -4
  258. package/dist/components/toast/style.js.map +1 -1
  259. package/dist/components/toast/toast.d.ts +75 -71
  260. package/dist/components/toast/toast.d.ts.map +1 -0
  261. package/dist/components/toast/toast.js +203 -96
  262. package/dist/components/toast/toast.js.map +1 -1
  263. package/dist/components/toast/types.d.ts +10 -9
  264. package/dist/components/toast/types.d.ts.map +1 -0
  265. package/dist/components/tooltip/index.d.ts +72 -62
  266. package/dist/components/tooltip/index.d.ts.map +1 -0
  267. package/dist/components/tooltip/index.js +251 -93
  268. package/dist/components/tooltip/index.js.map +1 -1
  269. package/dist/components/tooltip/style.js +3 -4
  270. package/dist/components/tooltip/style.js.map +1 -1
  271. package/dist/icons/generated/akar-icons-check.d.ts +5 -4
  272. package/dist/icons/generated/akar-icons-check.d.ts.map +1 -0
  273. package/dist/icons/generated/akar-icons-check.js +3 -4
  274. package/dist/icons/generated/akar-icons-check.js.map +1 -1
  275. package/dist/icons/generated/akar-icons-circle-check.d.ts +5 -4
  276. package/dist/icons/generated/akar-icons-circle-check.d.ts.map +1 -0
  277. package/dist/icons/generated/akar-icons-circle-check.js +3 -4
  278. package/dist/icons/generated/akar-icons-circle-check.js.map +1 -1
  279. package/dist/icons/generated/andrsrxn-inbox.d.ts +5 -4
  280. package/dist/icons/generated/andrsrxn-inbox.d.ts.map +1 -0
  281. package/dist/icons/generated/andrsrxn-inbox.js +3 -4
  282. package/dist/icons/generated/andrsrxn-inbox.js.map +1 -1
  283. package/dist/icons/generated/bi-check-lg.d.ts +5 -4
  284. package/dist/icons/generated/bi-check-lg.d.ts.map +1 -0
  285. package/dist/icons/generated/bi-check-lg.js +3 -4
  286. package/dist/icons/generated/bi-check-lg.js.map +1 -1
  287. package/dist/icons/generated/bi-check.d.ts +5 -4
  288. package/dist/icons/generated/bi-check.d.ts.map +1 -0
  289. package/dist/icons/generated/bi-check.js +3 -4
  290. package/dist/icons/generated/bi-check.js.map +1 -1
  291. package/dist/icons/generated/fluent-tag-search-24-regular.d.ts +5 -4
  292. package/dist/icons/generated/fluent-tag-search-24-regular.d.ts.map +1 -0
  293. package/dist/icons/generated/fluent-tag-search-24-regular.js +3 -4
  294. package/dist/icons/generated/fluent-tag-search-24-regular.js.map +1 -1
  295. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts +5 -4
  296. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts.map +1 -0
  297. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js +3 -4
  298. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js.map +1 -1
  299. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts +5 -4
  300. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts.map +1 -0
  301. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js +3 -4
  302. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js.map +1 -1
  303. package/dist/icons/generated/heroicons-check-16-solid.d.ts +5 -4
  304. package/dist/icons/generated/heroicons-check-16-solid.d.ts.map +1 -0
  305. package/dist/icons/generated/heroicons-check-16-solid.js +3 -4
  306. package/dist/icons/generated/heroicons-check-16-solid.js.map +1 -1
  307. package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts +5 -4
  308. package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts.map +1 -0
  309. package/dist/icons/generated/heroicons-x-mark-16-solid.js +3 -4
  310. package/dist/icons/generated/heroicons-x-mark-16-solid.js.map +1 -1
  311. package/dist/icons/generated/jam-close-circle-f.d.ts +7 -6
  312. package/dist/icons/generated/jam-close-circle-f.d.ts.map +1 -0
  313. package/dist/icons/generated/jam-close-circle-f.js +3 -4
  314. package/dist/icons/generated/jam-close-circle-f.js.map +1 -1
  315. package/dist/icons/generated/lucide-arrow-down-to-line.d.ts +5 -4
  316. package/dist/icons/generated/lucide-arrow-down-to-line.d.ts.map +1 -0
  317. package/dist/icons/generated/lucide-arrow-down-to-line.js +3 -4
  318. package/dist/icons/generated/lucide-arrow-down-to-line.js.map +1 -1
  319. package/dist/icons/generated/lucide-arrow-up-to-line.d.ts +5 -4
  320. package/dist/icons/generated/lucide-arrow-up-to-line.d.ts.map +1 -0
  321. package/dist/icons/generated/lucide-arrow-up-to-line.js +3 -4
  322. package/dist/icons/generated/lucide-arrow-up-to-line.js.map +1 -1
  323. package/dist/icons/generated/lucide-bell.d.ts +5 -4
  324. package/dist/icons/generated/lucide-bell.d.ts.map +1 -0
  325. package/dist/icons/generated/lucide-bell.js +3 -4
  326. package/dist/icons/generated/lucide-bell.js.map +1 -1
  327. package/dist/icons/generated/lucide-check.d.ts +5 -4
  328. package/dist/icons/generated/lucide-check.d.ts.map +1 -0
  329. package/dist/icons/generated/lucide-check.js +3 -4
  330. package/dist/icons/generated/lucide-check.js.map +1 -1
  331. package/dist/icons/generated/lucide-chevron-down.d.ts +5 -4
  332. package/dist/icons/generated/lucide-chevron-down.d.ts.map +1 -0
  333. package/dist/icons/generated/lucide-chevron-down.js +3 -4
  334. package/dist/icons/generated/lucide-chevron-down.js.map +1 -1
  335. package/dist/icons/generated/lucide-chevron-left.d.ts +5 -4
  336. package/dist/icons/generated/lucide-chevron-left.d.ts.map +1 -0
  337. package/dist/icons/generated/lucide-chevron-left.js +3 -4
  338. package/dist/icons/generated/lucide-chevron-left.js.map +1 -1
  339. package/dist/icons/generated/lucide-chevron-right.d.ts +5 -4
  340. package/dist/icons/generated/lucide-chevron-right.d.ts.map +1 -0
  341. package/dist/icons/generated/lucide-chevron-right.js +3 -4
  342. package/dist/icons/generated/lucide-chevron-right.js.map +1 -1
  343. package/dist/icons/generated/lucide-chevron-up.d.ts +5 -4
  344. package/dist/icons/generated/lucide-chevron-up.d.ts.map +1 -0
  345. package/dist/icons/generated/lucide-chevron-up.js +3 -4
  346. package/dist/icons/generated/lucide-chevron-up.js.map +1 -1
  347. package/dist/icons/generated/lucide-circle-alert.d.ts +5 -4
  348. package/dist/icons/generated/lucide-circle-alert.d.ts.map +1 -0
  349. package/dist/icons/generated/lucide-circle-alert.js +3 -4
  350. package/dist/icons/generated/lucide-circle-alert.js.map +1 -1
  351. package/dist/icons/generated/lucide-clapperboard.d.ts +5 -4
  352. package/dist/icons/generated/lucide-clapperboard.d.ts.map +1 -0
  353. package/dist/icons/generated/lucide-clapperboard.js +3 -4
  354. package/dist/icons/generated/lucide-clapperboard.js.map +1 -1
  355. package/dist/icons/generated/lucide-clipboard-paste.d.ts +5 -4
  356. package/dist/icons/generated/lucide-clipboard-paste.d.ts.map +1 -0
  357. package/dist/icons/generated/lucide-clipboard-paste.js +3 -4
  358. package/dist/icons/generated/lucide-clipboard-paste.js.map +1 -1
  359. package/dist/icons/generated/lucide-code.d.ts +5 -4
  360. package/dist/icons/generated/lucide-code.d.ts.map +1 -0
  361. package/dist/icons/generated/lucide-code.js +3 -4
  362. package/dist/icons/generated/lucide-code.js.map +1 -1
  363. package/dist/icons/generated/lucide-copy.d.ts +5 -4
  364. package/dist/icons/generated/lucide-copy.d.ts.map +1 -0
  365. package/dist/icons/generated/lucide-copy.js +3 -4
  366. package/dist/icons/generated/lucide-copy.js.map +1 -1
  367. package/dist/icons/generated/lucide-download.d.ts +5 -4
  368. package/dist/icons/generated/lucide-download.d.ts.map +1 -0
  369. package/dist/icons/generated/lucide-download.js +3 -4
  370. package/dist/icons/generated/lucide-download.js.map +1 -1
  371. package/dist/icons/generated/lucide-ellipsis-vertical.d.ts +5 -4
  372. package/dist/icons/generated/lucide-ellipsis-vertical.d.ts.map +1 -0
  373. package/dist/icons/generated/lucide-ellipsis-vertical.js +3 -4
  374. package/dist/icons/generated/lucide-ellipsis-vertical.js.map +1 -1
  375. package/dist/icons/generated/lucide-external-link.d.ts +5 -4
  376. package/dist/icons/generated/lucide-external-link.d.ts.map +1 -0
  377. package/dist/icons/generated/lucide-external-link.js +3 -4
  378. package/dist/icons/generated/lucide-external-link.js.map +1 -1
  379. package/dist/icons/generated/lucide-eye.d.ts +5 -4
  380. package/dist/icons/generated/lucide-eye.d.ts.map +1 -0
  381. package/dist/icons/generated/lucide-eye.js +3 -4
  382. package/dist/icons/generated/lucide-eye.js.map +1 -1
  383. package/dist/icons/generated/lucide-file-text.d.ts +5 -4
  384. package/dist/icons/generated/lucide-file-text.d.ts.map +1 -0
  385. package/dist/icons/generated/lucide-file-text.js +3 -4
  386. package/dist/icons/generated/lucide-file-text.js.map +1 -1
  387. package/dist/icons/generated/lucide-file.d.ts +5 -4
  388. package/dist/icons/generated/lucide-file.d.ts.map +1 -0
  389. package/dist/icons/generated/lucide-file.js +3 -4
  390. package/dist/icons/generated/lucide-file.js.map +1 -1
  391. package/dist/icons/generated/lucide-film.d.ts +5 -4
  392. package/dist/icons/generated/lucide-film.d.ts.map +1 -0
  393. package/dist/icons/generated/lucide-film.js +3 -4
  394. package/dist/icons/generated/lucide-film.js.map +1 -1
  395. package/dist/icons/generated/lucide-folder-open.d.ts +5 -4
  396. package/dist/icons/generated/lucide-folder-open.d.ts.map +1 -0
  397. package/dist/icons/generated/lucide-folder-open.js +3 -4
  398. package/dist/icons/generated/lucide-folder-open.js.map +1 -1
  399. package/dist/icons/generated/lucide-folder.d.ts +5 -4
  400. package/dist/icons/generated/lucide-folder.d.ts.map +1 -0
  401. package/dist/icons/generated/lucide-folder.js +3 -4
  402. package/dist/icons/generated/lucide-folder.js.map +1 -1
  403. package/dist/icons/generated/lucide-globe.d.ts +5 -4
  404. package/dist/icons/generated/lucide-globe.d.ts.map +1 -0
  405. package/dist/icons/generated/lucide-globe.js +3 -4
  406. package/dist/icons/generated/lucide-globe.js.map +1 -1
  407. package/dist/icons/generated/lucide-headphones.d.ts +5 -4
  408. package/dist/icons/generated/lucide-headphones.d.ts.map +1 -0
  409. package/dist/icons/generated/lucide-headphones.js +3 -4
  410. package/dist/icons/generated/lucide-headphones.js.map +1 -1
  411. package/dist/icons/generated/lucide-heart.d.ts +5 -4
  412. package/dist/icons/generated/lucide-heart.d.ts.map +1 -0
  413. package/dist/icons/generated/lucide-heart.js +3 -4
  414. package/dist/icons/generated/lucide-heart.js.map +1 -1
  415. package/dist/icons/generated/lucide-image.d.ts +5 -4
  416. package/dist/icons/generated/lucide-image.d.ts.map +1 -0
  417. package/dist/icons/generated/lucide-image.js +3 -4
  418. package/dist/icons/generated/lucide-image.js.map +1 -1
  419. package/dist/icons/generated/lucide-inbox.d.ts +5 -4
  420. package/dist/icons/generated/lucide-inbox.d.ts.map +1 -0
  421. package/dist/icons/generated/lucide-inbox.js +3 -4
  422. package/dist/icons/generated/lucide-inbox.js.map +1 -1
  423. package/dist/icons/generated/lucide-info.d.ts +5 -4
  424. package/dist/icons/generated/lucide-info.d.ts.map +1 -0
  425. package/dist/icons/generated/lucide-info.js +3 -4
  426. package/dist/icons/generated/lucide-info.js.map +1 -1
  427. package/dist/icons/generated/lucide-layout-grid.d.ts +5 -4
  428. package/dist/icons/generated/lucide-layout-grid.d.ts.map +1 -0
  429. package/dist/icons/generated/lucide-layout-grid.js +3 -4
  430. package/dist/icons/generated/lucide-layout-grid.js.map +1 -1
  431. package/dist/icons/generated/lucide-link.d.ts +5 -4
  432. package/dist/icons/generated/lucide-link.d.ts.map +1 -0
  433. package/dist/icons/generated/lucide-link.js +3 -4
  434. package/dist/icons/generated/lucide-link.js.map +1 -1
  435. package/dist/icons/generated/lucide-list-filter.d.ts +5 -4
  436. package/dist/icons/generated/lucide-list-filter.d.ts.map +1 -0
  437. package/dist/icons/generated/lucide-list-filter.js +3 -4
  438. package/dist/icons/generated/lucide-list-filter.js.map +1 -1
  439. package/dist/icons/generated/lucide-list-restart.d.ts +5 -4
  440. package/dist/icons/generated/lucide-list-restart.d.ts.map +1 -0
  441. package/dist/icons/generated/lucide-list-restart.js +3 -4
  442. package/dist/icons/generated/lucide-list-restart.js.map +1 -1
  443. package/dist/icons/generated/lucide-loader-circle.d.ts +5 -4
  444. package/dist/icons/generated/lucide-loader-circle.d.ts.map +1 -0
  445. package/dist/icons/generated/lucide-loader-circle.js +3 -4
  446. package/dist/icons/generated/lucide-loader-circle.js.map +1 -1
  447. package/dist/icons/generated/lucide-mail.d.ts +5 -4
  448. package/dist/icons/generated/lucide-mail.d.ts.map +1 -0
  449. package/dist/icons/generated/lucide-mail.js +3 -4
  450. package/dist/icons/generated/lucide-mail.js.map +1 -1
  451. package/dist/icons/generated/lucide-minus.d.ts +5 -4
  452. package/dist/icons/generated/lucide-minus.d.ts.map +1 -0
  453. package/dist/icons/generated/lucide-minus.js +3 -4
  454. package/dist/icons/generated/lucide-minus.js.map +1 -1
  455. package/dist/icons/generated/lucide-music.d.ts +5 -4
  456. package/dist/icons/generated/lucide-music.d.ts.map +1 -0
  457. package/dist/icons/generated/lucide-music.js +3 -4
  458. package/dist/icons/generated/lucide-music.js.map +1 -1
  459. package/dist/icons/generated/lucide-package.d.ts +5 -4
  460. package/dist/icons/generated/lucide-package.d.ts.map +1 -0
  461. package/dist/icons/generated/lucide-package.js +3 -4
  462. package/dist/icons/generated/lucide-package.js.map +1 -1
  463. package/dist/icons/generated/lucide-pen-line.d.ts +5 -4
  464. package/dist/icons/generated/lucide-pen-line.d.ts.map +1 -0
  465. package/dist/icons/generated/lucide-pen-line.js +3 -4
  466. package/dist/icons/generated/lucide-pen-line.js.map +1 -1
  467. package/dist/icons/generated/lucide-pencil.d.ts +5 -4
  468. package/dist/icons/generated/lucide-pencil.d.ts.map +1 -0
  469. package/dist/icons/generated/lucide-pencil.js +3 -4
  470. package/dist/icons/generated/lucide-pencil.js.map +1 -1
  471. package/dist/icons/generated/lucide-play.d.ts +5 -4
  472. package/dist/icons/generated/lucide-play.d.ts.map +1 -0
  473. package/dist/icons/generated/lucide-play.js +3 -4
  474. package/dist/icons/generated/lucide-play.js.map +1 -1
  475. package/dist/icons/generated/lucide-plus.d.ts +5 -4
  476. package/dist/icons/generated/lucide-plus.d.ts.map +1 -0
  477. package/dist/icons/generated/lucide-plus.js +3 -4
  478. package/dist/icons/generated/lucide-plus.js.map +1 -1
  479. package/dist/icons/generated/lucide-printer.d.ts +5 -4
  480. package/dist/icons/generated/lucide-printer.d.ts.map +1 -0
  481. package/dist/icons/generated/lucide-printer.js +3 -4
  482. package/dist/icons/generated/lucide-printer.js.map +1 -1
  483. package/dist/icons/generated/lucide-redo-2.d.ts +5 -4
  484. package/dist/icons/generated/lucide-redo-2.d.ts.map +1 -0
  485. package/dist/icons/generated/lucide-redo-2.js +3 -4
  486. package/dist/icons/generated/lucide-redo-2.js.map +1 -1
  487. package/dist/icons/generated/lucide-refresh-cw.d.ts +5 -4
  488. package/dist/icons/generated/lucide-refresh-cw.d.ts.map +1 -0
  489. package/dist/icons/generated/lucide-refresh-cw.js +3 -4
  490. package/dist/icons/generated/lucide-refresh-cw.js.map +1 -1
  491. package/dist/icons/generated/lucide-scissors.d.ts +5 -4
  492. package/dist/icons/generated/lucide-scissors.d.ts.map +1 -0
  493. package/dist/icons/generated/lucide-scissors.js +3 -4
  494. package/dist/icons/generated/lucide-scissors.js.map +1 -1
  495. package/dist/icons/generated/lucide-search.d.ts +5 -4
  496. package/dist/icons/generated/lucide-search.d.ts.map +1 -0
  497. package/dist/icons/generated/lucide-search.js +3 -4
  498. package/dist/icons/generated/lucide-search.js.map +1 -1
  499. package/dist/icons/generated/lucide-settings.d.ts +5 -4
  500. package/dist/icons/generated/lucide-settings.d.ts.map +1 -0
  501. package/dist/icons/generated/lucide-settings.js +3 -4
  502. package/dist/icons/generated/lucide-settings.js.map +1 -1
  503. package/dist/icons/generated/lucide-sliders-horizontal.d.ts +5 -4
  504. package/dist/icons/generated/lucide-sliders-horizontal.d.ts.map +1 -0
  505. package/dist/icons/generated/lucide-sliders-horizontal.js +3 -4
  506. package/dist/icons/generated/lucide-sliders-horizontal.js.map +1 -1
  507. package/dist/icons/generated/lucide-star.d.ts +5 -4
  508. package/dist/icons/generated/lucide-star.d.ts.map +1 -0
  509. package/dist/icons/generated/lucide-star.js +3 -4
  510. package/dist/icons/generated/lucide-star.js.map +1 -1
  511. package/dist/icons/generated/lucide-tag.d.ts +5 -4
  512. package/dist/icons/generated/lucide-tag.d.ts.map +1 -0
  513. package/dist/icons/generated/lucide-tag.js +3 -4
  514. package/dist/icons/generated/lucide-tag.js.map +1 -1
  515. package/dist/icons/generated/lucide-tags.d.ts +5 -4
  516. package/dist/icons/generated/lucide-tags.d.ts.map +1 -0
  517. package/dist/icons/generated/lucide-tags.js +3 -4
  518. package/dist/icons/generated/lucide-tags.js.map +1 -1
  519. package/dist/icons/generated/lucide-trash-2.d.ts +5 -4
  520. package/dist/icons/generated/lucide-trash-2.d.ts.map +1 -0
  521. package/dist/icons/generated/lucide-trash-2.js +3 -4
  522. package/dist/icons/generated/lucide-trash-2.js.map +1 -1
  523. package/dist/icons/generated/lucide-triangle-alert.d.ts +5 -4
  524. package/dist/icons/generated/lucide-triangle-alert.d.ts.map +1 -0
  525. package/dist/icons/generated/lucide-triangle-alert.js +3 -4
  526. package/dist/icons/generated/lucide-triangle-alert.js.map +1 -1
  527. package/dist/icons/generated/lucide-undo-2.d.ts +5 -4
  528. package/dist/icons/generated/lucide-undo-2.d.ts.map +1 -0
  529. package/dist/icons/generated/lucide-undo-2.js +3 -4
  530. package/dist/icons/generated/lucide-undo-2.js.map +1 -1
  531. package/dist/icons/generated/lucide-upload.d.ts +5 -4
  532. package/dist/icons/generated/lucide-upload.d.ts.map +1 -0
  533. package/dist/icons/generated/lucide-upload.js +3 -4
  534. package/dist/icons/generated/lucide-upload.js.map +1 -1
  535. package/dist/icons/generated/lucide-user.d.ts +5 -4
  536. package/dist/icons/generated/lucide-user.d.ts.map +1 -0
  537. package/dist/icons/generated/lucide-user.js +3 -4
  538. package/dist/icons/generated/lucide-user.js.map +1 -1
  539. package/dist/icons/generated/lucide-wrench.d.ts +5 -4
  540. package/dist/icons/generated/lucide-wrench.d.ts.map +1 -0
  541. package/dist/icons/generated/lucide-wrench.js +3 -4
  542. package/dist/icons/generated/lucide-wrench.js.map +1 -1
  543. package/dist/icons/generated/lucide-x.d.ts +5 -4
  544. package/dist/icons/generated/lucide-x.d.ts.map +1 -0
  545. package/dist/icons/generated/lucide-x.js +3 -4
  546. package/dist/icons/generated/lucide-x.js.map +1 -1
  547. package/dist/icons/generated/mdi-tag-search-outline.d.ts +5 -4
  548. package/dist/icons/generated/mdi-tag-search-outline.d.ts.map +1 -0
  549. package/dist/icons/generated/mdi-tag-search-outline.js +3 -4
  550. package/dist/icons/generated/mdi-tag-search-outline.js.map +1 -1
  551. package/dist/icons/generated/ooui-close.d.ts +5 -4
  552. package/dist/icons/generated/ooui-close.d.ts.map +1 -0
  553. package/dist/icons/generated/ooui-close.js +3 -4
  554. package/dist/icons/generated/ooui-close.js.map +1 -1
  555. package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts +5 -4
  556. package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts.map +1 -0
  557. package/dist/icons/generated/radix-icons-panel-left-minimized.js +3 -4
  558. package/dist/icons/generated/radix-icons-panel-left-minimized.js.map +1 -1
  559. package/dist/icons/generated/radix-icons-reset.d.ts +5 -4
  560. package/dist/icons/generated/radix-icons-reset.d.ts.map +1 -0
  561. package/dist/icons/generated/radix-icons-reset.js +3 -4
  562. package/dist/icons/generated/radix-icons-reset.js.map +1 -1
  563. package/dist/icons/generated/tabler-sort-ascending-letters.d.ts +5 -4
  564. package/dist/icons/generated/tabler-sort-ascending-letters.d.ts.map +1 -0
  565. package/dist/icons/generated/tabler-sort-ascending-letters.js +3 -4
  566. package/dist/icons/generated/tabler-sort-ascending-letters.js.map +1 -1
  567. package/dist/icons/index.d.ts +75 -74
  568. package/dist/icons/index.js +75 -75
  569. package/dist/shared/element-height/index.js +51 -25
  570. package/dist/shared/element-height/index.js.map +1 -1
  571. package/dist/shared/element-width/index.js +39 -24
  572. package/dist/shared/element-width/index.js.map +1 -1
  573. package/dist/shared/events/user-change.js +14 -8
  574. package/dist/shared/events/user-change.js.map +1 -1
  575. package/dist/shared/focus/pointer-focus.js +56 -30
  576. package/dist/shared/focus/pointer-focus.js.map +1 -1
  577. package/dist/shared/focus/tabbable.js +96 -0
  578. package/dist/shared/focus/tabbable.js.map +1 -0
  579. package/dist/shared/form-association/field-id.js +13 -6
  580. package/dist/shared/form-association/field-id.js.map +1 -1
  581. package/dist/shared/form-association/index.js +75 -42
  582. package/dist/shared/form-association/index.js.map +1 -1
  583. package/dist/shared/gesture/drag-gesture.js +239 -99
  584. package/dist/shared/gesture/drag-gesture.js.map +1 -1
  585. package/dist/shared/gesture/physics.js +49 -16
  586. package/dist/shared/gesture/physics.js.map +1 -1
  587. package/dist/shared/gesture/pinch-gesture.js +111 -60
  588. package/dist/shared/gesture/pinch-gesture.js.map +1 -1
  589. package/dist/shared/group-management/index.js +181 -84
  590. package/dist/shared/group-management/index.js.map +1 -1
  591. package/dist/shared/label-emptiness/index.js +45 -26
  592. package/dist/shared/label-emptiness/index.js.map +1 -1
  593. package/dist/shared/locale/builtin-labels.js +38 -0
  594. package/dist/shared/locale/builtin-labels.js.map +1 -0
  595. package/dist/shared/menu-behavior/index.js +113 -60
  596. package/dist/shared/menu-behavior/index.js.map +1 -1
  597. package/dist/shared/menu-portal/menu-portal.js +47 -26
  598. package/dist/shared/menu-portal/menu-portal.js.map +1 -1
  599. package/dist/shared/menu-portal/menu-tree.js +132 -75
  600. package/dist/shared/menu-portal/menu-tree.js.map +1 -1
  601. package/dist/shared/normalize/index.js +16 -7
  602. package/dist/shared/normalize/index.js.map +1 -1
  603. package/dist/shared/open-state/index.js +7 -8
  604. package/dist/shared/open-state/index.js.map +1 -1
  605. package/dist/shared/option-portal/combobox-shell.js +121 -56
  606. package/dist/shared/option-portal/combobox-shell.js.map +1 -1
  607. package/dist/shared/option-portal/index.js +65 -44
  608. package/dist/shared/option-portal/index.js.map +1 -1
  609. package/dist/shared/overlay/anchored-panel.js +75 -40
  610. package/dist/shared/overlay/anchored-panel.js.map +1 -1
  611. package/dist/shared/overlay/native-dialog-presence.js +116 -52
  612. package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
  613. package/dist/shared/overlay/nested-drawer-layers.js +76 -46
  614. package/dist/shared/overlay/nested-drawer-layers.js.map +1 -1
  615. package/dist/shared/overlay/open-overlay.js +240 -136
  616. package/dist/shared/overlay/open-overlay.js.map +1 -1
  617. package/dist/shared/overlay/overlay-root.js +33 -24
  618. package/dist/shared/overlay/overlay-root.js.map +1 -1
  619. package/dist/shared/overlay/overlay.js +109 -66
  620. package/dist/shared/overlay/overlay.js.map +1 -1
  621. package/dist/shared/overlay/placement-props.js +9 -4
  622. package/dist/shared/overlay/placement-props.js.map +1 -1
  623. package/dist/shared/overlay/portal.d.ts +2 -0
  624. package/dist/shared/overlay/portal.d.ts.map +1 -0
  625. package/dist/shared/overlay/portal.js +202 -117
  626. package/dist/shared/overlay/portal.js.map +1 -1
  627. package/dist/shared/overlay/positioning-generation.js +9 -10
  628. package/dist/shared/overlay/positioning-generation.js.map +1 -1
  629. package/dist/shared/overlay/presence.js +43 -21
  630. package/dist/shared/overlay/presence.js.map +1 -1
  631. package/dist/shared/overlay/theme-overlay-scope.js +22 -19
  632. package/dist/shared/overlay/theme-overlay-scope.js.map +1 -1
  633. package/dist/shared/scroll-lock/scroll-lock.js +49 -15
  634. package/dist/shared/scroll-lock/scroll-lock.js.map +1 -1
  635. package/dist/shared/theme/duration.js +13 -6
  636. package/dist/shared/theme/duration.js.map +1 -1
  637. package/dist/shared/theme/reduced-motion.js +14 -9
  638. package/dist/shared/theme/reduced-motion.js.map +1 -1
  639. package/dist/shared/theme/root-sync.js +85 -32
  640. package/dist/shared/theme/root-sync.js.map +1 -1
  641. package/dist/shared/visible-area/index.js +81 -37
  642. package/dist/shared/visible-area/index.js.map +1 -1
  643. package/dist/types/iconify.d.ts +1 -1
  644. package/dist/types/iconify.js +0 -0
  645. package/dist/types/react.d.ts +8 -10
  646. package/dist/types/react.d.ts.map +1 -0
  647. package/dist/types/react.js +0 -0
  648. package/dist/types/utils.d.ts +8 -13
  649. package/dist/types/utils.d.ts.map +1 -0
  650. package/dist/types/utils.js +0 -0
  651. package/dist/types/vue.d.ts +9 -13
  652. package/dist/types/vue.d.ts.map +1 -0
  653. package/dist/types/vue.js +0 -0
  654. package/dist/vite/index.d.ts +1 -0
  655. package/dist/vite/index.d.ts.map +1 -0
  656. package/dist/vite/index.js +30 -4
  657. package/dist/vite/index.js.map +1 -1
  658. package/package.json +10 -23
  659. package/dist/_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js +0 -9
  660. package/dist/components/middle-ellipsis/truncate.d.ts +0 -62
  661. package/dist/components/radio/interaction.d.ts +0 -4
  662. package/dist/scrollbars/index.d.ts +0 -33
  663. package/dist/scrollbars/index.js +0 -18
  664. package/dist/scrollbars/index.js.map +0 -1
  665. package/dist/scrollbars/internal.js +0 -6
  666. package/dist/scrollbars/internal.js.map +0 -1
  667. package/dist/scrollbars/style.css +0 -10
@@ -1,467 +1,695 @@
1
- import e from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
2
- import { normalizeLiteral as t, normalizeNumber as n } from "../../shared/normalize/index.js";
3
- import { dispatchOpenChangeEvent as r } from "../../shared/open-state/index.js";
4
- import { defineOverlay as i } from "../../shared/overlay/overlay.js";
5
- import { hideOverlayPresence as a, showOverlayPresence as o } from "../../shared/overlay/presence.js";
6
- import { defineOpenOverlay as s } from "../../shared/overlay/open-overlay.js";
7
- import { defineScrollLockLease as c } from "../../shared/scroll-lock/scroll-lock.js";
8
- import { UserChangeController as l } from "../../shared/events/user-change.js";
9
- import { captureFrameworkAnchors as u, focusMenuItem as d, getMenuChildren as f, getMenuItemFromEvent as p, hideNestedMenuChildren as m, moveMenuChildren as h, orderManagedMenuItems as g, reconcileManagedMenuItems as _, restoreFrameworkAnchors as v, returnManagedMenuItemsToSlot as y } from "../../shared/menu-portal/menu-tree.js";
10
- import { createClosingSubmenuStack as b, createMenuHoverBinder as x, createMenuOutsideClickGuard as S, getEnabledMenuLevelItems as C, getFocusedMenuItemFromPanels as w, handleMenuKeyboard as T } from "../../shared/menu-behavior/index.js";
11
- import { createMenuPortalOverlay as E } from "../../shared/menu-portal/menu-portal.js";
12
- import { FLOATING_PLACEMENTS as D } from "../../shared/overlay/placement-props.js";
13
- import O from "./style.js";
14
- import { LitElement as k, html as A, unsafeCSS as j } from "lit";
15
- import { customElement as M, property as N, state as P } from "lit/decorators.js";
16
- //#region src/components/dropdown/index.ts
17
- var F = "web-ui-menu-level-", I = "wui-dropdown-menu-item";
18
- function L(e) {
19
- return e instanceof Element && e.assignedSlot ? e.assignedSlot : e.parentNode instanceof ShadowRoot ? e.parentNode.host : e.parentNode;
1
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
2
+ import { normalizeLiteral, normalizeNumber } from "../../shared/normalize/index.js";
3
+ import { dispatchOpenChangeEvent } from "../../shared/open-state/index.js";
4
+ import { defineOverlay } from "../../shared/overlay/overlay.js";
5
+ import { hideOverlayPresence, showOverlayPresence } from "../../shared/overlay/presence.js";
6
+ import { defineOpenOverlay } from "../../shared/overlay/open-overlay.js";
7
+ import { defineScrollLockLease } from "../../shared/scroll-lock/scroll-lock.js";
8
+ import { UserChangeController } from "../../shared/events/user-change.js";
9
+ import { captureFrameworkAnchors, focusMenuItem, getMenuChildren, getMenuItemFromEvent, hideNestedMenuChildren, moveMenuChildren, orderManagedMenuItems, reconcileManagedMenuItems, restoreFrameworkAnchors, returnManagedMenuItemsToSlot } from "../../shared/menu-portal/menu-tree.js";
10
+ import { createClosingSubmenuStack, createMenuHoverBinder, createMenuOutsideClickGuard, getEnabledMenuLevelItems, getFocusedMenuItemFromPanels, handleMenuKeyboard } from "../../shared/menu-behavior/index.js";
11
+ import { createMenuPortalOverlay } from "../../shared/menu-portal/menu-portal.js";
12
+ import { FLOATING_PLACEMENTS } from "../../shared/overlay/placement-props.js";
13
+ import style_default from "./style.js";
14
+ import { LitElement, html, unsafeCSS } from "lit";
15
+ import { customElement, property, state } from "lit/decorators.js";
16
+ // src/components/dropdown/index.ts
17
+ const SLOT_PREFIX = "web-ui-menu-level-";
18
+ const MENU_ITEM_MARKER = "wui-dropdown-menu-item";
19
+ function getComposedParent(node) {
20
+ if (node instanceof Element && node.assignedSlot) return node.assignedSlot;
21
+ return node.parentNode instanceof ShadowRoot ? node.parentNode.host : node.parentNode;
20
22
  }
21
- function R(e, t) {
22
- let n = e;
23
- for (; n;) {
24
- if (n === t) return !0;
25
- n = L(n);
23
+ function isComposedDescendant(node, ancestor) {
24
+ let current = node;
25
+ while (current) {
26
+ if (current === ancestor) return true;
27
+ current = getComposedParent(current);
26
28
  }
27
- return !1;
29
+ return false;
28
30
  }
29
- function z(e) {
30
- let t = e;
31
- for (; t;) {
32
- if (t instanceof HTMLDialogElement && t.open && t.matches(":modal")) return !0;
33
- t = L(t);
31
+ function hasNativeModalAncestor(node) {
32
+ let current = node;
33
+ while (current) {
34
+ if (current instanceof HTMLDialogElement && current.open && current.matches(":modal")) return true;
35
+ current = getComposedParent(current);
34
36
  }
35
- return !1;
37
+ return false;
36
38
  }
37
- var B = 0, V = class extends k {
38
- constructor(...e) {
39
- super(...e), this.open = !1, this.disabled = !1, this.matchWidth = !1, this.noScrollLock = !1, this._placement = "bottom-start", this._offset = 4, this._activePath = [], this._overlays = /* @__PURE__ */ new Map(), this._overlay = s().make({
39
+ let dropdownIdCounter = 0;
40
+ let WebUiDropdown = class WebUiDropdown extends LitElement {
41
+ constructor(..._args) {
42
+ super(..._args);
43
+ this.open = false;
44
+ this.disabled = false;
45
+ this.matchWidth = false;
46
+ this.noScrollLock = false;
47
+ this._placement = "bottom-start";
48
+ this._offset = 4;
49
+ this._activePath = [];
50
+ this._overlays = /* @__PURE__ */ new Map();
51
+ this._overlay = defineOpenOverlay().make({
40
52
  requestClose: () => this._keyboardDelegate.closeDeepestOrAll(),
41
53
  isConnected: () => this.isConnected
42
- }), this._scrollLock = c().make(), this._handle = null, this._outsideClickGuard = S(this, (e) => this._handle?.contains(e) ?? !1), this._closingSubmenus = b({
43
- getPanel: (e) => e.overlay,
44
- restoreItems: (e, t) => h(e.content, t),
45
- dispose: (e) => {
46
- e.handle?.release(), e.overlay.remove(), e.api.dispose();
54
+ });
55
+ this._scrollLock = defineScrollLockLease().make();
56
+ this._handle = null;
57
+ this._outsideClickGuard = createMenuOutsideClickGuard(this, (node) => this._handle?.contains(node) ?? false);
58
+ this._closingSubmenus = createClosingSubmenuStack({
59
+ getPanel: (container) => container.overlay,
60
+ restoreItems: (container, parentItem) => moveMenuChildren(container.content, parentItem),
61
+ dispose: (container) => {
62
+ container.handle?.release();
63
+ container.overlay.remove();
64
+ container.api.dispose();
47
65
  }
48
- }), this._hoverDelegate = {
66
+ });
67
+ this._hoverDelegate = {
49
68
  getOpenDepth: () => this._activePath.length,
50
- getLevelItems: (e) => this._getLevelItems(e),
51
- getActiveItem: (e) => this._getLevelItems(e)[this._activePath[e]],
52
- isSubmenuItem: (e) => e.hasAttribute("submenu"),
53
- openSubmenu: (e) => {
54
- let t = this._getFocusedLevel(e);
55
- if (t === void 0) return;
56
- let n = this._getLevelItems(t).indexOf(e);
57
- n >= 0 && this._toggleSubmenu(t, n);
69
+ getLevelItems: (level) => this._getLevelItems(level),
70
+ getActiveItem: (level) => this._getLevelItems(level)[this._activePath[level]],
71
+ isSubmenuItem: (item) => item.hasAttribute("submenu"),
72
+ openSubmenu: (item) => {
73
+ const level = this._getFocusedLevel(item);
74
+ if (level === void 0) return;
75
+ const itemIndex = this._getLevelItems(level).indexOf(item);
76
+ if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex);
58
77
  },
59
- closeFrom: (e) => this._closeSubmenuFrom(e + 1)
60
- }, this._hoverBinder = x(this._hoverDelegate, "web-ui-dropdown-item"), this._keyboardDelegate = {
61
- getFocusedItem: (e) => w(e, [...this._overlays.values()].map(({ overlay: e }) => e), "web-ui-dropdown-item"),
62
- getLevelOf: (e) => this._getFocusedLevel(e),
63
- getEnabledItems: (e) => C(this._overlays.get(e)?.content),
64
- isSubmenuItem: (e) => e.hasAttribute("submenu"),
65
- openSubmenuInstant: (e) => {
66
- let t = this._getFocusedLevel(e);
67
- if (t === void 0) return;
68
- let n = this._getLevelItems(t).indexOf(e);
69
- n >= 0 && this._toggleSubmenu(t, n, !0);
78
+ closeFrom: (level) => this._closeSubmenuFrom(level + 1)
79
+ };
80
+ this._hoverBinder = createMenuHoverBinder(this._hoverDelegate, "web-ui-dropdown-item");
81
+ this._keyboardDelegate = {
82
+ getFocusedItem: (event) => getFocusedMenuItemFromPanels(event, [...this._overlays.values()].map(({ overlay }) => overlay), "web-ui-dropdown-item"),
83
+ getLevelOf: (item) => this._getFocusedLevel(item),
84
+ getEnabledItems: (level) => getEnabledMenuLevelItems(this._overlays.get(level)?.content),
85
+ isSubmenuItem: (item) => item.hasAttribute("submenu"),
86
+ openSubmenuInstant: (item) => {
87
+ const level = this._getFocusedLevel(item);
88
+ if (level === void 0) return;
89
+ const itemIndex = this._getLevelItems(level).indexOf(item);
90
+ if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex, true);
70
91
  },
71
- closeToParent: (e) => {
72
- let t = this._getLevelItems(e - 1)[this._activePath[e - 1]];
73
- return this._closeSubmenuFrom(e), t;
92
+ closeToParent: (level) => {
93
+ const parentItem = this._getLevelItems(level - 1)[this._activePath[level - 1]];
94
+ this._closeSubmenuFrom(level);
95
+ return parentItem;
74
96
  },
75
97
  closeDeepestOrAll: () => {
76
- this._activePath.length > 0 ? this._closeSubmenuFrom(this._activePath.length) : this._closeAll(!0);
98
+ if (this._activePath.length > 0) this._closeSubmenuFrom(this._activePath.length);
99
+ else this._closeAll(true);
77
100
  }
78
- }, this._userOpenChange = new l(), this._skipFocusRestoreOnClose = !1, this._shouldOpenInstantly = !0, this._suppressInitialFocusVisible = !0, this._menuSyncScheduled = !1, this._level0ItemAnchors = /* @__PURE__ */ new Map(), this._menuContentObserver = new MutationObserver(() => {
79
- this.open && this._scheduleMenuSync();
80
- }), this._onTriggerClick = (e) => {
81
- if (!this.disabled) {
82
- if (this.open) this._closeAll(!0);
83
- else {
84
- let t = e.detail === 0;
85
- this._openMenu(t, !0, !t);
86
- }
101
+ };
102
+ this._userOpenChange = new UserChangeController();
103
+ this._skipFocusRestoreOnClose = false;
104
+ this._shouldOpenInstantly = true;
105
+ this._suppressInitialFocusVisible = true;
106
+ this._menuSyncScheduled = false;
107
+ this._level0ItemAnchors = /* @__PURE__ */ new Map();
108
+ this._menuContentObserver = new MutationObserver(() => {
109
+ if (this.open) this._scheduleMenuSync();
110
+ });
111
+ this._onTriggerClick = (event) => {
112
+ if (this.disabled) return;
113
+ if (this.open) this._closeAll(true);
114
+ else {
115
+ const fromKeyboard = event.detail === 0;
116
+ this._openMenu(fromKeyboard, true, !fromKeyboard);
117
+ }
118
+ };
119
+ this._onClickOutside = (e) => {
120
+ if (this._pointerInteraction) {
121
+ this._pointerInteraction.completed = true;
122
+ this._pointerInteraction.clickInsideMenu = this._outsideClickGuard.isInside(e);
123
+ this._pointerInteraction = void 0;
124
+ this._resumePendingFocusOutCheck();
87
125
  }
88
- }, this._onClickOutside = (e) => {
89
- this._pointerInteraction && (this._pointerInteraction.completed = !0, this._pointerInteraction.clickInsideMenu = this._outsideClickGuard.isInside(e), this._pointerInteraction = void 0, this._resumePendingFocusOutCheck()), this.isOpen && !this._outsideClickGuard.isArmed() && (this._outsideClickGuard.isInside(e) || this._closeAll(!0));
90
- }, this._onPointerDown = (e) => {
91
- let t = !!(this.open && this._handle?.containsEvent(e));
126
+ if (!this.isOpen || this._outsideClickGuard.isArmed()) return;
127
+ if (this._outsideClickGuard.isInside(e)) return;
128
+ this._closeAll(true);
129
+ };
130
+ this._onPointerDown = (event) => {
131
+ const startedInsideMenu = Boolean(this.open && this._handle?.containsEvent(event));
92
132
  this._pointerInteraction = {
93
- startedInsideMenu: t,
94
- startedWithinDropdown: !!(this.open && (t || e.composedPath().includes(this))),
95
- completed: !1
133
+ startedInsideMenu,
134
+ startedWithinDropdown: Boolean(this.open && (startedInsideMenu || event.composedPath().includes(this))),
135
+ completed: false
96
136
  };
97
- }, this._onPointerUp = (e) => {
98
- let t = this._pointerInteraction;
99
- t && (t.completed = !0, t.clickInsideMenu = !!this._handle?.containsEvent(e), this._pointerInteraction = void 0, this._resumePendingFocusOutCheck());
100
- }, this._onPointerCancel = () => {
101
- let e = this._pointerInteraction;
102
- e && (e.completed = !0, e.clickInsideMenu = e.startedInsideMenu, this._pointerInteraction = void 0, this._resumePendingFocusOutCheck());
103
- }, this._onFocusOut = (e) => {
104
- let t = this._handle;
105
- if (!this.open || !t?.containsEvent(e)) return;
106
- let n = this._pointerInteraction, r = e.composedPath()[0];
107
- if (r instanceof Node && !r.isConnected) return;
108
- let i = e.relatedTarget;
109
- if (i instanceof Node && [...this._overlays.values()].some(({ overlay: e }) => R(i, e))) return;
110
- let a = i instanceof Node;
111
- a && (this._skipFocusRestoreOnClose = !0);
112
- let o = () => {
113
- if (this.open && this._handle === t) {
114
- if (this._pendingTabNavigation) {
115
- this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(o);
116
- return;
117
- }
118
- if (n?.startedWithinDropdown) {
119
- if (!n.completed) {
120
- this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(o);
121
- return;
122
- }
123
- if (n.clickInsideMenu) return;
124
- }
125
- if (t.hasFocusWithin()) {
126
- a && (this._skipFocusRestoreOnClose = !1);
137
+ };
138
+ this._onPointerUp = (event) => {
139
+ const interaction = this._pointerInteraction;
140
+ if (!interaction) return;
141
+ interaction.completed = true;
142
+ interaction.clickInsideMenu = Boolean(this._handle?.containsEvent(event));
143
+ this._pointerInteraction = void 0;
144
+ this._resumePendingFocusOutCheck();
145
+ };
146
+ this._onPointerCancel = () => {
147
+ const interaction = this._pointerInteraction;
148
+ if (!interaction) return;
149
+ interaction.completed = true;
150
+ interaction.clickInsideMenu = interaction.startedInsideMenu;
151
+ this._pointerInteraction = void 0;
152
+ this._resumePendingFocusOutCheck();
153
+ };
154
+ this._onFocusOut = (event) => {
155
+ const handle = this._handle;
156
+ if (!this.open || !handle?.containsEvent(event)) return;
157
+ const pointerInteraction = this._pointerInteraction;
158
+ const source = event.composedPath()[0];
159
+ if (source instanceof Node && !source.isConnected) return;
160
+ const next = event.relatedTarget;
161
+ if (next instanceof Node && [...this._overlays.values()].some(({ overlay }) => isComposedDescendant(next, overlay))) return;
162
+ const movedToKnownOutsideTarget = next instanceof Node;
163
+ if (movedToKnownOutsideTarget) this._skipFocusRestoreOnClose = true;
164
+ const checkFocus = () => {
165
+ if (!this.open || this._handle !== handle) return;
166
+ if (this._pendingTabNavigation) {
167
+ this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(checkFocus);
168
+ return;
169
+ }
170
+ if (pointerInteraction?.startedWithinDropdown) {
171
+ if (!pointerInteraction.completed) {
172
+ this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(checkFocus);
127
173
  return;
128
174
  }
129
- this._skipFocusRestoreOnClose = !0, this._closeAll(!0);
175
+ if (pointerInteraction.clickInsideMenu) return;
130
176
  }
177
+ if (handle.hasFocusWithin()) {
178
+ if (movedToKnownOutsideTarget) this._skipFocusRestoreOnClose = false;
179
+ return;
180
+ }
181
+ this._skipFocusRestoreOnClose = true;
182
+ this._closeAll(true);
131
183
  };
132
- this._overlay.scheduleFrame(o);
133
- }, this._onFocusIn = (e) => {
134
- let t = this._handle;
135
- if (!this.open || !t) return;
136
- if (!t.containsEvent(e)) {
137
- if (this._pendingTabNavigation || this._pointerInteraction?.startedWithinDropdown && !this._pointerInteraction.completed) return;
138
- this._skipFocusRestoreOnClose = !0, this._closeAll(!0);
184
+ this._overlay.scheduleFrame(checkFocus);
185
+ };
186
+ this._onFocusIn = (event) => {
187
+ const handle = this._handle;
188
+ if (!this.open || !handle) return;
189
+ if (!handle.containsEvent(event)) {
190
+ if (this._pendingTabNavigation) return;
191
+ if (this._pointerInteraction?.startedWithinDropdown && !this._pointerInteraction.completed) return;
192
+ this._skipFocusRestoreOnClose = true;
193
+ this._closeAll(true);
139
194
  return;
140
195
  }
141
- this._skipFocusRestoreOnClose = !1;
142
- let n = p(e);
143
- n && this._setMenuTabStop(n);
144
- }, this._onMenuClick = (e) => {
145
- let t = p(e);
146
- if (!t || t.hasAttribute("disabled") || !t.hasAttribute("submenu")) return;
147
- let n = this._getFocusedLevel(t);
148
- if (n === void 0) return;
149
- let r = this._getLevelItems(n).indexOf(t);
150
- r >= 0 && this._toggleSubmenu(n, r, e.detail === 0);
151
- }, this._onKeydown = (e) => {
152
- this.open && e.key !== "Tab" && (this.disabled || T(this._keyboardDelegate, e));
153
- }, this._onTabKeydown = (e) => {
196
+ this._skipFocusRestoreOnClose = false;
197
+ const focusedItem = getMenuItemFromEvent(event);
198
+ if (!focusedItem) return;
199
+ this._setMenuTabStop(focusedItem);
200
+ };
201
+ this._onMenuClick = (e) => {
202
+ const item = getMenuItemFromEvent(e);
203
+ if (!item || item.hasAttribute("disabled") || !item.hasAttribute("submenu")) return;
204
+ const level = this._getFocusedLevel(item);
205
+ if (level === void 0) return;
206
+ const itemIndex = this._getLevelItems(level).indexOf(item);
207
+ if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex, e.detail === 0);
208
+ };
209
+ this._onKeydown = (e) => {
210
+ if (!this.open) return;
211
+ if (e.key === "Tab") return;
212
+ if (this.disabled) return;
213
+ handleMenuKeyboard(this._keyboardDelegate, e);
214
+ };
215
+ this._onTabKeydown = (e) => {
154
216
  if (e.key !== "Tab" || !this.open || e.defaultPrevented) return;
155
- let t = p(e);
156
- if (!t || this._getFocusedLevel(t) === void 0) return;
157
- let n = [...this._overlays.values()].some(({ overlay: e }) => z(e)), r = {
217
+ const focusedItem = getMenuItemFromEvent(e);
218
+ if (!focusedItem || this._getFocusedLevel(focusedItem) === void 0) return;
219
+ const isInsideNativeModal = [...this._overlays.values()].some(({ overlay }) => hasNativeModalAncestor(overlay));
220
+ const navigation = {
158
221
  event: e,
159
- focusedItem: t,
160
- previousFocus: t.shadowRoot?.activeElement instanceof HTMLElement ? t.shadowRoot.activeElement : this._getDeepActiveElement(),
161
- focusTrigger: !n || !e.shiftKey
222
+ focusedItem,
223
+ previousFocus: focusedItem.shadowRoot?.activeElement instanceof HTMLElement ? focusedItem.shadowRoot.activeElement : this._getDeepActiveElement(),
224
+ focusTrigger: !isInsideNativeModal || !e.shiftKey
162
225
  };
163
- this._pendingTabNavigation = r, this._setMenuTabStop(), r.focusTrigger && this._focusTriggerForTab(), setTimeout(() => {
164
- if (this._pendingTabNavigation === r) {
165
- if (this._pendingTabNavigation = void 0, e.defaultPrevented) {
166
- this._setMenuTabStop(t), r.previousFocus?.isConnected && this._getDeepActiveElement() !== r.previousFocus && r.previousFocus.focus();
167
- return;
168
- }
169
- r.focusTrigger || !this._handle?.hasFocusWithin() ? (this._skipFocusRestoreOnClose = !0, this._closeAll(!0)) : this._setMenuTabStop(t);
226
+ this._pendingTabNavigation = navigation;
227
+ this._setMenuTabStop();
228
+ if (navigation.focusTrigger) this._focusTriggerForTab();
229
+ setTimeout(() => {
230
+ if (this._pendingTabNavigation !== navigation) return;
231
+ this._pendingTabNavigation = void 0;
232
+ if (e.defaultPrevented) {
233
+ this._setMenuTabStop(focusedItem);
234
+ if (navigation.previousFocus?.isConnected && this._getDeepActiveElement() !== navigation.previousFocus) navigation.previousFocus.focus();
235
+ return;
170
236
  }
237
+ if (navigation.focusTrigger || !this._handle?.hasFocusWithin()) {
238
+ this._skipFocusRestoreOnClose = true;
239
+ this._closeAll(true);
240
+ } else this._setMenuTabStop(focusedItem);
171
241
  }, 0);
172
242
  };
173
243
  }
174
244
  static {
175
- this.styles = j(O);
245
+ this.styles = unsafeCSS(style_default);
176
246
  }
177
247
  get placement() {
178
248
  return this._placement;
179
249
  }
180
- set placement(e) {
181
- this._placement = t(e, D, "bottom-start");
250
+ set placement(v) {
251
+ this._placement = normalizeLiteral(v, FLOATING_PLACEMENTS, "bottom-start");
182
252
  }
183
253
  get offset() {
184
254
  return this._offset;
185
255
  }
186
- set offset(e) {
187
- this._offset = n(e, 0, 100, 4);
256
+ set offset(v) {
257
+ this._offset = normalizeNumber(v, 0, 100, 4);
188
258
  }
189
259
  get isOpen() {
190
260
  return this.open || this._activePath.length > 0;
191
261
  }
192
262
  connectedCallback() {
193
- super.connectedCallback(), this._overlay.resume(), this.addEventListener("keydown", this._onKeydown), window.addEventListener("keydown", this._onTabKeydown), document.addEventListener("pointerdown", this._onPointerDown, !0), document.addEventListener("pointerup", this._onPointerUp, !0), document.addEventListener("pointercancel", this._onPointerCancel, !0), document.addEventListener("click", this._onClickOutside), document.addEventListener("focusin", this._onFocusIn, !0), document.addEventListener("focusout", this._onFocusOut, !0), this._menuContentObserver.observe(this, {
194
- childList: !0,
195
- subtree: !0
196
- }), this.open && this.hasUpdated && this._syncOpenOverlay(this._isFocusOrphaned());
263
+ super.connectedCallback();
264
+ this._overlay.resume();
265
+ this.addEventListener("keydown", this._onKeydown);
266
+ window.addEventListener("keydown", this._onTabKeydown);
267
+ document.addEventListener("pointerdown", this._onPointerDown, true);
268
+ document.addEventListener("pointerup", this._onPointerUp, true);
269
+ document.addEventListener("pointercancel", this._onPointerCancel, true);
270
+ document.addEventListener("click", this._onClickOutside);
271
+ document.addEventListener("focusin", this._onFocusIn, true);
272
+ document.addEventListener("focusout", this._onFocusOut, true);
273
+ this._menuContentObserver.observe(this, {
274
+ childList: true,
275
+ subtree: true
276
+ });
277
+ if (this.open && this.hasUpdated) this._syncOpenOverlay(this._isFocusOrphaned());
197
278
  }
198
279
  firstUpdated() {
199
280
  this.shadowRoot?.querySelector("slot[name=\"trigger\"]")?.addEventListener("slotchange", () => this.requestUpdate());
200
281
  }
201
282
  disconnectedCallback() {
202
- super.disconnectedCallback(), this._menuContentObserver.disconnect(), this._pointerInteraction = void 0, this._pendingFocusOutCheck = void 0, this._pendingTabNavigation = void 0, this.removeEventListener("keydown", this._onKeydown), window.removeEventListener("keydown", this._onTabKeydown), document.removeEventListener("pointerdown", this._onPointerDown, !0), document.removeEventListener("pointerup", this._onPointerUp, !0), document.removeEventListener("pointercancel", this._onPointerCancel, !0), document.removeEventListener("click", this._onClickOutside), document.removeEventListener("focusin", this._onFocusIn, !0), document.removeEventListener("focusout", this._onFocusOut, !0), this._outsideClickGuard.dispose(), this._hoverBinder.dispose(), this._overlay.suspend(), this._scrollLock.release(), this._cleanupClosedMenu();
203
- }
204
- updated(e) {
205
- this._syncTriggerAria(), e.has("open") && (this.open ? (this._skipFocusRestoreOnClose = !1, this._syncOpenOverlay(!0)) : (this._overlay.invalidate(), this._syncScrollLock(), this._suppressInitialFocusVisible = !0, this._handle?.release(), this._handle = null, this._closeRootAfterPresence()), this._userOpenChange.consume() && r(this, this.open)), e.has("noScrollLock") && this._syncScrollLock(), (e.has("placement") || e.has("offset") || e.has("matchWidth")) && this._overlays.get(0)?.api.update({
283
+ super.disconnectedCallback();
284
+ this._menuContentObserver.disconnect();
285
+ this._pointerInteraction = void 0;
286
+ this._pendingFocusOutCheck = void 0;
287
+ this._pendingTabNavigation = void 0;
288
+ this.removeEventListener("keydown", this._onKeydown);
289
+ window.removeEventListener("keydown", this._onTabKeydown);
290
+ document.removeEventListener("pointerdown", this._onPointerDown, true);
291
+ document.removeEventListener("pointerup", this._onPointerUp, true);
292
+ document.removeEventListener("pointercancel", this._onPointerCancel, true);
293
+ document.removeEventListener("click", this._onClickOutside);
294
+ document.removeEventListener("focusin", this._onFocusIn, true);
295
+ document.removeEventListener("focusout", this._onFocusOut, true);
296
+ this._outsideClickGuard.dispose();
297
+ this._hoverBinder.dispose();
298
+ this._overlay.suspend();
299
+ this._scrollLock.release();
300
+ this._cleanupClosedMenu();
301
+ }
302
+ updated(changed) {
303
+ this._syncTriggerAria();
304
+ if (changed.has("open")) {
305
+ if (this.open) {
306
+ this._skipFocusRestoreOnClose = false;
307
+ this._syncOpenOverlay(true);
308
+ } else {
309
+ this._overlay.invalidate();
310
+ this._syncScrollLock();
311
+ this._suppressInitialFocusVisible = true;
312
+ this._handle?.release();
313
+ this._handle = null;
314
+ this._closeRootAfterPresence();
315
+ }
316
+ if (this._userOpenChange.consume()) dispatchOpenChangeEvent(this, this.open);
317
+ }
318
+ if (changed.has("noScrollLock")) this._syncScrollLock();
319
+ if (changed.has("placement") || changed.has("offset") || changed.has("matchWidth")) this._overlays.get(0)?.api.update({
206
320
  placement: this.placement,
207
321
  offset: this.offset,
208
322
  matchWidth: this.matchWidth
209
- }), this._hoverBinder.bind();
323
+ });
324
+ this._hoverBinder.bind();
210
325
  }
326
+ /**
327
+ * 焦点是否已无归属:被 detach 打掉的焦点会落回 `body`,用户主动点到别处时不会。
328
+ * 重挂载对账只在前者才把焦点夺回 menu,否则等于从消费者手里抢焦点。
329
+ */
211
330
  _isFocusOrphaned() {
212
- let e = document.activeElement;
213
- return e === null || e === document.body || e === document.documentElement;
331
+ const active = document.activeElement;
332
+ return active === null || active === document.body || active === document.documentElement;
214
333
  }
334
+ /** Resolve the actual focus node through open shadow roots. */
215
335
  _getDeepActiveElement() {
216
- let e = document.activeElement;
217
- for (; e instanceof HTMLElement;) {
218
- let t = e.shadowRoot?.activeElement;
219
- if (!(t instanceof HTMLElement)) return e;
220
- e = t;
336
+ let active = document.activeElement;
337
+ while (active instanceof HTMLElement) {
338
+ const nested = active.shadowRoot?.activeElement;
339
+ if (!(nested instanceof HTMLElement)) return active;
340
+ active = nested;
221
341
  }
222
342
  }
223
- _syncOpenOverlay(e) {
224
- this._restoreFocusTarget ??= this._getDeepActiveElement(), this._outsideClickGuard.arm(), this._syncScrollLock(), this._hideAllSubmenuChildren(), this._overlay.invalidate(), this._overlay.scheduleFrame(() => {
225
- this._ensureOverlay(0, this._shouldOpenInstantly), this._shouldOpenInstantly = !0, e && d(C(this._overlays.get(0)?.content)[0], { suppressFocusVisible: this._suppressInitialFocusVisible }), this._syncTriggerAria();
226
- }), this._bindHoversAfterUpdate();
343
+ /**
344
+ * 打开态的唯一对账入口:panel、滚动锁、outside click、hover 与 menu 焦点都从这里收敛,
345
+ * `updated()` 的打开分支与重连对账共用它,两条路径必须落到同一个状态。
346
+ */
347
+ _syncOpenOverlay(takeFocus) {
348
+ this._restoreFocusTarget ??= this._getDeepActiveElement();
349
+ this._outsideClickGuard.arm();
350
+ this._syncScrollLock();
351
+ this._hideAllSubmenuChildren();
352
+ this._overlay.invalidate();
353
+ this._overlay.scheduleFrame(() => {
354
+ this._ensureOverlay(0, this._shouldOpenInstantly);
355
+ this._shouldOpenInstantly = true;
356
+ if (takeFocus) focusMenuItem(getEnabledMenuLevelItems(this._overlays.get(0)?.content)[0], { suppressFocusVisible: this._suppressInitialFocusVisible });
357
+ this._syncTriggerAria();
358
+ });
359
+ this._bindHoversAfterUpdate();
227
360
  }
228
361
  openMenu() {
229
- this._openMenu(!0, !1, !0);
362
+ this._openMenu(true, false, true);
230
363
  }
231
- _openMenu(e, t, n) {
232
- this.disabled || this.open || (this._outsideClickGuard.arm(), this._shouldOpenInstantly = e, this._suppressInitialFocusVisible = n, t && this._userOpenChange.mark(), this._claimRoot(this._overlays.get(0)?.overlay ?? this), this.open = !0);
364
+ _openMenu(isInstant, fromUser, suppressFocusVisible) {
365
+ if (this.disabled || this.open) return;
366
+ this._outsideClickGuard.arm();
367
+ this._shouldOpenInstantly = isInstant;
368
+ this._suppressInitialFocusVisible = suppressFocusVisible;
369
+ if (fromUser) this._userOpenChange.mark();
370
+ this._claimRoot(this._overlays.get(0)?.overlay ?? this);
371
+ this.open = true;
233
372
  }
234
373
  closeAll() {
235
- this._closeAll(!1);
374
+ this._closeAll(false);
236
375
  }
237
- _closeAll(e) {
238
- this.open &&= (e && this._userOpenChange.mark(), !1);
376
+ _closeAll(fromUser) {
377
+ if (!this.open) return;
378
+ if (fromUser) this._userOpenChange.mark();
379
+ this.open = false;
239
380
  }
240
381
  _closeAllSubmenus() {
241
- this._closeSubmenuFrom(1, !0), this._closingSubmenus.restoreAll(), this._syncActiveAttrs();
382
+ this._closeSubmenuFrom(1, true);
383
+ this._closingSubmenus.restoreAll();
384
+ this._syncActiveAttrs();
242
385
  }
243
386
  _cleanupClosedMenu() {
244
- this._closeAllSubmenus(), this._returnLevel0Items(), this._resetMenuTabStops(), this._disposeAll(), this._syncTriggerAria();
387
+ this._closeAllSubmenus();
388
+ this._returnLevel0Items();
389
+ this._resetMenuTabStops();
390
+ this._disposeAll();
391
+ this._syncTriggerAria();
245
392
  }
246
393
  _resetMenuTabStops() {
247
- this.querySelectorAll("web-ui-dropdown-item").forEach((e) => {
248
- let t = e.shadowRoot?.querySelector("[role=\"menuitem\"]");
249
- t && (t.tabIndex = e.hasAttribute("disabled") ? -1 : 0);
394
+ this.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
395
+ const control = item.shadowRoot?.querySelector("[role=\"menuitem\"]");
396
+ if (control) control.tabIndex = item.hasAttribute("disabled") ? -1 : 0;
250
397
  });
251
398
  }
252
399
  async _closeRootAfterPresence() {
253
- let e = this._overlays.get(0)?.overlay;
254
- if (e && !await a(e) || this.open || !this.isConnected) return;
255
- let t = [...this._overlays.values(), ...this._closingSubmenus.closing()].some((e) => e.overlay.matches(":focus-within"));
256
- this._cleanupClosedMenu(), t && !this._skipFocusRestoreOnClose && this._restoreFocusTarget?.focus(), this._skipFocusRestoreOnClose = !1, this._restoreFocusTarget = void 0;
400
+ const overlay = this._overlays.get(0)?.overlay;
401
+ if (overlay && !await hideOverlayPresence(overlay)) return;
402
+ if (this.open || !this.isConnected) return;
403
+ const shouldRestoreFocus = [...this._overlays.values(), ...this._closingSubmenus.closing()].some((menuOverlay) => menuOverlay.overlay.matches(":focus-within"));
404
+ this._cleanupClosedMenu();
405
+ if (shouldRestoreFocus && !this._skipFocusRestoreOnClose) this._restoreFocusTarget?.focus();
406
+ this._skipFocusRestoreOnClose = false;
407
+ this._restoreFocusTarget = void 0;
257
408
  }
258
409
  _hideAllSubmenuChildren() {
259
- m(this, `${F}-hidden`);
260
- }
261
- _toggleSubmenu(e, t, n = !1) {
262
- if (this._activePath[e] === t) return;
263
- this._closeSubmenuFrom(e + 1), this._activePath = [...this._activePath.slice(0, e), t], this._syncActiveAttrs();
264
- let r = this._getLevelItems(e)[t];
265
- r?.hasAttribute("submenu") && this._overlay.scheduleFrame(() => {
266
- this.open && this._activePath[e] === t && (this._ensureOverlay(e + 1, n, r) || this._populateOverlay(e + 1, r));
267
- }), this._bindHoversAfterUpdate();
268
- }
269
- _closeSubmenuFrom(e, t = !1) {
270
- for (let n = this._activePath.length; n >= e; n--) {
271
- let e = this._overlays.get(n), r = this._getLevelItems(n - 1)[this._activePath[n - 1]];
272
- e && (!r || t ? (this._depopulateOverlay(n, r), this._disposeOverlay(n)) : (this._overlays.delete(n), this._closingSubmenus.closeAsync(r, e)));
410
+ hideNestedMenuChildren(this, `${SLOT_PREFIX}-hidden`);
411
+ }
412
+ _toggleSubmenu(level, itemIndex, isInstant = false) {
413
+ if (this._activePath[level] === itemIndex) return;
414
+ this._closeSubmenuFrom(level + 1);
415
+ this._activePath = [...this._activePath.slice(0, level), itemIndex];
416
+ this._syncActiveAttrs();
417
+ const item = this._getLevelItems(level)[itemIndex];
418
+ if (item?.hasAttribute("submenu")) this._overlay.scheduleFrame(() => {
419
+ if (!this.open || this._activePath[level] !== itemIndex) return;
420
+ if (!this._ensureOverlay(level + 1, isInstant, item)) this._populateOverlay(level + 1, item);
421
+ });
422
+ this._bindHoversAfterUpdate();
423
+ }
424
+ _closeSubmenuFrom(level, isInstant = false) {
425
+ for (let lv = this._activePath.length; lv >= level; lv--) {
426
+ const overlay = this._overlays.get(lv);
427
+ const parentItem = this._getLevelItems(lv - 1)[this._activePath[lv - 1]];
428
+ if (!overlay) continue;
429
+ if (!parentItem || isInstant) {
430
+ this._depopulateOverlay(lv, parentItem);
431
+ this._disposeOverlay(lv);
432
+ } else {
433
+ this._overlays.delete(lv);
434
+ this._closingSubmenus.closeAsync(parentItem, overlay);
435
+ }
273
436
  }
274
- let n = this._activePath.slice(0, e - 1);
275
- n.length !== this._activePath.length && (this._activePath = n), this._syncActiveAttrs();
437
+ const nextActivePath = this._activePath.slice(0, level - 1);
438
+ if (nextActivePath.length !== this._activePath.length) this._activePath = nextActivePath;
439
+ this._syncActiveAttrs();
276
440
  }
277
441
  _syncActiveAttrs() {
278
- this.querySelectorAll("web-ui-dropdown-item").forEach((e) => {
279
- e.removeAttribute("active");
280
- }), this._overlays.forEach((e, t) => {
281
- this._getLevelItems(t).forEach((e) => e.removeAttribute("active"));
282
- }), this._activePath.forEach((e, t) => {
283
- let n = this._getLevelItems(t)[e];
284
- n?.matches("web-ui-dropdown-item") && n.setAttribute("active", "");
442
+ this.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
443
+ item.removeAttribute("active");
444
+ });
445
+ this._overlays.forEach((_, level) => {
446
+ this._getLevelItems(level).forEach((item) => item.removeAttribute("active"));
447
+ });
448
+ this._activePath.forEach((itemIndex, level) => {
449
+ const item = this._getLevelItems(level)[itemIndex];
450
+ if (item?.matches("web-ui-dropdown-item")) item.setAttribute("active", "");
285
451
  });
286
452
  }
287
- _getLevelItems(e) {
288
- let t = this._overlays.get(e)?.content;
289
- return t ? f(t) : [];
453
+ _getLevelItems(level) {
454
+ const content = this._overlays.get(level)?.content;
455
+ return content ? getMenuChildren(content) : [];
290
456
  }
291
457
  _populateLevel0() {
292
- let e = this._overlays.get(0)?.content;
293
- e && (_(this, e, this._level0ItemAnchors, I), g(this, e, this._level0ItemAnchors, I));
458
+ const content = this._overlays.get(0)?.content;
459
+ if (!content) return;
460
+ reconcileManagedMenuItems(this, content, this._level0ItemAnchors, MENU_ITEM_MARKER);
461
+ orderManagedMenuItems(this, content, this._level0ItemAnchors, MENU_ITEM_MARKER);
294
462
  }
295
463
  _scheduleMenuSync() {
296
- this._menuSyncScheduled || (this._menuSyncScheduled = !0, requestAnimationFrame(() => {
297
- this._menuSyncScheduled = !1, this.open && this._syncOpenMenuContent();
298
- }));
464
+ if (this._menuSyncScheduled) return;
465
+ this._menuSyncScheduled = true;
466
+ requestAnimationFrame(() => {
467
+ this._menuSyncScheduled = false;
468
+ if (!this.open) return;
469
+ this._syncOpenMenuContent();
470
+ });
299
471
  }
300
472
  _syncOpenMenuContent() {
301
- let e = this._overlays.get(0)?.content;
302
- if (this._hideAllSubmenuChildren(), e) {
303
- _(this, e, this._level0ItemAnchors, I), m(e, `${F}-hidden`);
304
- let t = u(e, I);
305
- g(this, e, this._level0ItemAnchors, I), v(e, t);
473
+ const level0Content = this._overlays.get(0)?.content;
474
+ this._hideAllSubmenuChildren();
475
+ if (level0Content) {
476
+ reconcileManagedMenuItems(this, level0Content, this._level0ItemAnchors, MENU_ITEM_MARKER);
477
+ hideNestedMenuChildren(level0Content, `${SLOT_PREFIX}-hidden`);
478
+ const frameworkAnchors = captureFrameworkAnchors(level0Content, MENU_ITEM_MARKER);
479
+ orderManagedMenuItems(this, level0Content, this._level0ItemAnchors, MENU_ITEM_MARKER);
480
+ restoreFrameworkAnchors(level0Content, frameworkAnchors);
306
481
  }
307
- for (let [e, t] of this._overlays) {
308
- if (e === 0) continue;
309
- let n = this._getLevelItems(e - 1)[this._activePath[e - 1]];
310
- n && h(n, t.content), m(t.content, `${F}-hidden`);
482
+ for (const [level, overlay] of this._overlays) {
483
+ if (level === 0) continue;
484
+ const parentItem = this._getLevelItems(level - 1)[this._activePath[level - 1]];
485
+ if (parentItem) moveMenuChildren(parentItem, overlay.content);
486
+ hideNestedMenuChildren(overlay.content, `${SLOT_PREFIX}-hidden`);
311
487
  }
312
488
  this._hoverBinder.bind();
313
489
  }
314
490
  _returnLevel0Items() {
315
- let e = this._overlays.get(0)?.content;
316
- e && y(this, e, this._level0ItemAnchors);
317
- }
318
- _populateOverlay(e, t) {
319
- let n = this._overlays.get(e)?.content;
320
- n && h(t, n);
321
- }
322
- _depopulateOverlay(e, t) {
323
- let n = this._overlays.get(e)?.content;
324
- if (!n) return;
325
- let r = e - 1, i = t ?? this._getLevelItems(r)[this._activePath[r]];
326
- i && h(n, i);
327
- }
328
- _claimRoot(e) {
329
- this._handle?.release(), this._handle = this._overlay.claim(e);
330
- for (let [e, t] of this._overlays) e !== 0 && (t.handle = this._handle.adopt(t.overlay));
331
- for (let e of this._closingSubmenus.closing()) e.handle = this._handle.adopt(e.overlay);
491
+ const content = this._overlays.get(0)?.content;
492
+ if (content) returnManagedMenuItemsToSlot(this, content, this._level0ItemAnchors);
493
+ }
494
+ _populateOverlay(level, submenuItem) {
495
+ const content = this._overlays.get(level)?.content;
496
+ if (content) moveMenuChildren(submenuItem, content);
497
+ }
498
+ _depopulateOverlay(level, parentItem) {
499
+ const content = this._overlays.get(level)?.content;
500
+ if (!content) return;
501
+ const targetLevel = level - 1;
502
+ const submenuItem = parentItem ?? this._getLevelItems(targetLevel)[this._activePath[targetLevel]];
503
+ if (submenuItem) moveMenuChildren(content, submenuItem);
504
+ }
505
+ _claimRoot(panel) {
506
+ this._handle?.release();
507
+ this._handle = this._overlay.claim(panel);
508
+ for (const [level, sub] of this._overlays) {
509
+ if (level === 0) continue;
510
+ sub.handle = this._handle.adopt(sub.overlay);
511
+ }
512
+ for (const container of this._closingSubmenus.closing()) container.handle = this._handle.adopt(container.overlay);
332
513
  return this._handle;
333
514
  }
515
+ /** handle 缺失时补登记;panel 还没建好时以宿主代填,与 `_openMenu` 的占位会话同一口径。 */
334
516
  _ensureRootHandle() {
335
517
  return this._handle ?? this._claimRoot(this._overlays.get(0)?.overlay ?? this);
336
518
  }
337
- _ensureOverlay(e, t = !1, n) {
338
- let r = n ? this._closingSubmenus.take(n) : void 0;
339
- if (r) return r.handle = this._ensureRootHandle().adopt(r.overlay), this._overlays.set(e, r), r.api.open(), o(r.overlay, { isInstant: t }), !0;
340
- let i = this._overlays.get(e);
341
- return i ? (this._ensureRootHandle(), i.api.open(), o(i.overlay, { isInstant: t }), !1) : (this._buildOverlay(e, t), !1);
342
- }
343
- _buildOverlay(e, t = !1) {
344
- let { panel: n, content: r } = E("dropdown-overlay", this);
345
- n.setAttribute("role", "menu"), e === 0 && (n.id = `wui-dropdown-menu-${++B}`), n.dataset.level = String(e), n.addEventListener("click", this._onMenuClick), n.addEventListener("keydown", this._onKeydown);
346
- let a = e === 0 ? this._queryTriggerAnchor() : this._getSubmenuTriggerAnchor(e - 1);
347
- if (a) {
348
- let s = i().make({
349
- anchor: a,
350
- overlay: n,
351
- placement: e === 0 ? this.placement : "right-start",
352
- offset: e === 0 ? this.offset : 0,
353
- minAnchorWidth: !0,
354
- matchWidth: e === 0 && this.matchWidth,
519
+ _ensureOverlay(level, isInstant = false, submenuItem) {
520
+ const closingOverlay = submenuItem ? this._closingSubmenus.take(submenuItem) : void 0;
521
+ if (closingOverlay) {
522
+ closingOverlay.handle = this._ensureRootHandle().adopt(closingOverlay.overlay);
523
+ this._overlays.set(level, closingOverlay);
524
+ closingOverlay.api.open();
525
+ showOverlayPresence(closingOverlay.overlay, { isInstant });
526
+ return true;
527
+ }
528
+ const existing = this._overlays.get(level);
529
+ if (existing) {
530
+ this._ensureRootHandle();
531
+ existing.api.open();
532
+ showOverlayPresence(existing.overlay, { isInstant });
533
+ return false;
534
+ }
535
+ this._buildOverlay(level, isInstant);
536
+ return false;
537
+ }
538
+ _buildOverlay(level, isInstant = false) {
539
+ const { panel: overlay, content } = createMenuPortalOverlay("dropdown-overlay", this);
540
+ overlay.setAttribute("role", "menu");
541
+ if (level === 0) overlay.id = `wui-dropdown-menu-${++dropdownIdCounter}`;
542
+ overlay.dataset.level = String(level);
543
+ overlay.addEventListener("click", this._onMenuClick);
544
+ overlay.addEventListener("keydown", this._onKeydown);
545
+ const anchor = level === 0 ? this._queryTriggerAnchor() : this._getSubmenuTriggerAnchor(level - 1);
546
+ if (anchor) {
547
+ const ctrl = defineOverlay().make({
548
+ anchor,
549
+ overlay,
550
+ placement: level === 0 ? this.placement : "right-start",
551
+ offset: level === 0 ? this.offset : 0,
552
+ minAnchorWidth: true,
553
+ matchWidth: level === 0 ? this.matchWidth : false,
355
554
  strategy: "fixed"
356
555
  });
357
- if (e === 0) this._claimRoot(n), this._overlays.set(e, {
358
- api: s,
359
- overlay: n,
360
- content: r
361
- }), this._populateLevel0();
362
- else {
363
- let t = this._ensureRootHandle().adopt(n);
364
- this._overlays.set(e, {
365
- api: s,
366
- overlay: n,
367
- content: r,
368
- handle: t
556
+ if (level === 0) {
557
+ this._claimRoot(overlay);
558
+ this._overlays.set(level, {
559
+ api: ctrl,
560
+ overlay,
561
+ content
562
+ });
563
+ this._populateLevel0();
564
+ } else {
565
+ const handle = this._ensureRootHandle().adopt(overlay);
566
+ this._overlays.set(level, {
567
+ api: ctrl,
568
+ overlay,
569
+ content,
570
+ handle
369
571
  });
370
572
  }
371
- this._menuContentObserver.observe(r, {
372
- childList: !0,
373
- subtree: !0
374
- }), s.open(), o(n, { isInstant: t });
573
+ this._menuContentObserver.observe(content, {
574
+ childList: true,
575
+ subtree: true
576
+ });
577
+ ctrl.open();
578
+ showOverlayPresence(overlay, { isInstant });
375
579
  }
376
580
  }
377
- _disposeOverlay(e) {
378
- let t = this._overlays.get(e);
379
- e === 0 && (this._handle?.release(), this._handle = null), t?.handle?.release(), t?.overlay.removeEventListener("click", this._onMenuClick), t?.overlay.removeEventListener("keydown", this._onKeydown), t?.overlay.remove(), t?.api.dispose(), this._overlays.delete(e), this._rebindMenuContentObservers();
581
+ _disposeOverlay(level) {
582
+ const overlay = this._overlays.get(level);
583
+ if (level === 0) {
584
+ this._handle?.release();
585
+ this._handle = null;
586
+ }
587
+ overlay?.handle?.release();
588
+ overlay?.overlay.removeEventListener("click", this._onMenuClick);
589
+ overlay?.overlay.removeEventListener("keydown", this._onKeydown);
590
+ overlay?.overlay.remove();
591
+ overlay?.api.dispose();
592
+ this._overlays.delete(level);
593
+ this._rebindMenuContentObservers();
380
594
  }
381
595
  _rebindMenuContentObservers() {
382
- this._menuContentObserver.disconnect(), this._menuContentObserver.observe(this, {
383
- childList: !0,
384
- subtree: !0
596
+ this._menuContentObserver.disconnect();
597
+ this._menuContentObserver.observe(this, {
598
+ childList: true,
599
+ subtree: true
385
600
  });
386
- for (let e of this._overlays.values()) this._menuContentObserver.observe(e.content, {
387
- childList: !0,
388
- subtree: !0
601
+ for (const overlay of this._overlays.values()) this._menuContentObserver.observe(overlay.content, {
602
+ childList: true,
603
+ subtree: true
389
604
  });
390
605
  }
391
606
  _disposeAll() {
392
- this._handle?.release(), this._handle = null;
393
- for (let e of this._overlays.keys()) this._disposeOverlay(e);
607
+ this._handle?.release();
608
+ this._handle = null;
609
+ for (const level of this._overlays.keys()) this._disposeOverlay(level);
394
610
  }
395
- _syncScrollLock(e = this.open) {
396
- this._scrollLock.sync(e && !this.noScrollLock);
611
+ _syncScrollLock(isOpen = this.open) {
612
+ this._scrollLock.sync(isOpen && !this.noScrollLock);
397
613
  }
398
614
  _queryTriggerAnchor() {
399
- let e = (this.shadowRoot?.querySelector("slot[name=\"trigger\"]"))?.assignedElements()[0];
400
- return e instanceof HTMLElement ? e : null;
615
+ const el = (this.shadowRoot?.querySelector("slot[name=\"trigger\"]"))?.assignedElements()[0];
616
+ return el instanceof HTMLElement ? el : null;
401
617
  }
402
618
  _focusTriggerForTab() {
403
- let e = this._queryTriggerAnchor();
404
- if (!e) return;
405
- e.focus();
406
- let t = this._getDeepActiveElement();
407
- t && R(t, e) || (e.shadowRoot?.querySelector("button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), a[href], [tabindex]:not([tabindex=\"-1\"])"))?.focus();
619
+ const trigger = this._queryTriggerAnchor();
620
+ if (!trigger) return;
621
+ trigger.focus();
622
+ const active = this._getDeepActiveElement();
623
+ if (active && isComposedDescendant(active, trigger)) return;
624
+ (trigger.shadowRoot?.querySelector("button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), a[href], [tabindex]:not([tabindex=\"-1\"])"))?.focus();
408
625
  }
409
626
  _syncTriggerAria() {
410
- let e = this._queryTriggerAnchor();
411
- if (!e) return;
412
- e.setAttribute("aria-haspopup", "menu"), e.setAttribute("aria-expanded", String(this.open));
413
- let t = this._overlays.get(0)?.overlay;
414
- t?.id ? e.setAttribute("aria-controls", t.id) : e.removeAttribute("aria-controls");
415
- }
416
- _getSubmenuTriggerAnchor(e) {
417
- let t = this._activePath[e];
418
- if (t === void 0) return null;
419
- let n = this._getLevelItems(e)[t];
420
- return n ? n.shadowRoot?.querySelector(".item-inner") ?? n : null;
627
+ const trigger = this._queryTriggerAnchor();
628
+ if (!trigger) return;
629
+ trigger.setAttribute("aria-haspopup", "menu");
630
+ trigger.setAttribute("aria-expanded", String(this.open));
631
+ const rootOverlay = this._overlays.get(0)?.overlay;
632
+ if (rootOverlay?.id) trigger.setAttribute("aria-controls", rootOverlay.id);
633
+ else trigger.removeAttribute("aria-controls");
634
+ }
635
+ _getSubmenuTriggerAnchor(level) {
636
+ const idx = this._activePath[level];
637
+ if (idx === void 0) return null;
638
+ const item = this._getLevelItems(level)[idx];
639
+ if (!item) return null;
640
+ return item.shadowRoot?.querySelector(".item-inner") ?? item;
421
641
  }
422
642
  _resumePendingFocusOutCheck() {
423
- let e = this._pendingFocusOutCheck;
424
- this._pendingFocusOutCheck = void 0, e?.();
425
- }
426
- _setMenuTabStop(e) {
427
- for (let { content: t } of this._overlays.values()) t.querySelectorAll("web-ui-dropdown-item").forEach((t) => {
428
- let n = t.shadowRoot?.querySelector("[role=\"menuitem\"]");
429
- n && (n.tabIndex = t === e && !t.hasAttribute("disabled") ? 0 : -1);
643
+ const check = this._pendingFocusOutCheck;
644
+ this._pendingFocusOutCheck = void 0;
645
+ check?.();
646
+ }
647
+ _setMenuTabStop(focusedItem) {
648
+ for (const { content } of this._overlays.values()) content.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
649
+ const control = item.shadowRoot?.querySelector("[role=\"menuitem\"]");
650
+ if (control) control.tabIndex = item === focusedItem && !item.hasAttribute("disabled") ? 0 : -1;
430
651
  });
431
652
  }
432
- _getFocusedLevel(e) {
433
- if (e) return [...this._overlays.entries()].find(([, t]) => t.overlay.contains(e))?.[0];
653
+ _getFocusedLevel(item) {
654
+ if (!item) return void 0;
655
+ return [...this._overlays.entries()].find(([, value]) => value.overlay.contains(item))?.[0];
434
656
  }
435
657
  _bindHoversAfterUpdate() {
436
658
  requestAnimationFrame(() => this._hoverBinder.bind());
437
659
  }
438
660
  render() {
439
- return A`
661
+ return html`
440
662
  <div class="dropdown-trigger" @click=${this._onTriggerClick}>
441
663
  <slot name="trigger"></slot>
442
664
  </div>
443
665
  `;
444
666
  }
445
667
  };
446
- e([N({
668
+ __decorate([property({
447
669
  type: Boolean,
448
- reflect: !0
449
- })], V.prototype, "open", void 0), e([N({
670
+ reflect: true
671
+ })], WebUiDropdown.prototype, "open", void 0);
672
+ __decorate([property({
450
673
  type: Boolean,
451
- reflect: !0
452
- })], V.prototype, "disabled", void 0), e([N({
674
+ reflect: true
675
+ })], WebUiDropdown.prototype, "disabled", void 0);
676
+ __decorate([property({
453
677
  type: Boolean,
454
- reflect: !0,
678
+ reflect: true,
455
679
  attribute: "match-width"
456
- })], V.prototype, "matchWidth", void 0), e([N({
680
+ })], WebUiDropdown.prototype, "matchWidth", void 0);
681
+ __decorate([property({
457
682
  type: Boolean,
458
- reflect: !0,
683
+ reflect: true,
459
684
  attribute: "no-scroll-lock"
460
- })], V.prototype, "noScrollLock", void 0), e([N({
685
+ })], WebUiDropdown.prototype, "noScrollLock", void 0);
686
+ __decorate([property({
461
687
  type: String,
462
- reflect: !0
463
- })], V.prototype, "placement", null), e([N({ type: Number })], V.prototype, "offset", null), e([P()], V.prototype, "_activePath", void 0), V = e([M("web-ui-dropdown")], V);
464
- //#endregion
465
- export { V as WebUiDropdown };
688
+ reflect: true
689
+ })], WebUiDropdown.prototype, "placement", null);
690
+ __decorate([property({ type: Number })], WebUiDropdown.prototype, "offset", null);
691
+ __decorate([state()], WebUiDropdown.prototype, "_activePath", void 0);
692
+ WebUiDropdown = __decorate([customElement("web-ui-dropdown")], WebUiDropdown);
693
+ export { WebUiDropdown };
466
694
 
467
695
  //# sourceMappingURL=index.js.map