@greypan/web-ui 1.4.2 → 2.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 (346) hide show
  1. package/README.CN.md +674 -232
  2. package/README.md +683 -237
  3. package/dist/_virtual/{_@oxc-project_runtime@0.138.0 → _@oxc-project_runtime@0.140.0}/helpers/esm/decorate.js +1 -1
  4. package/dist/assets/glass.js +6 -0
  5. package/dist/assets/glass.js.map +1 -0
  6. package/dist/assets/menu-portal.js +6 -0
  7. package/dist/assets/menu-portal.js.map +1 -0
  8. package/dist/assets/overlay-motion.js +6 -0
  9. package/dist/assets/overlay-motion.js.map +1 -0
  10. package/dist/assets/toast-containers.js +6 -0
  11. package/dist/assets/toast-containers.js.map +1 -0
  12. package/dist/components/avatar/index.d.ts +30 -0
  13. package/dist/components/avatar/index.js +112 -0
  14. package/dist/components/avatar/index.js.map +1 -0
  15. package/dist/components/avatar/style.js +6 -0
  16. package/dist/components/avatar/style.js.map +1 -0
  17. package/dist/components/back-top/index.d.ts +8 -7
  18. package/dist/components/back-top/index.js +37 -32
  19. package/dist/components/back-top/index.js.map +1 -1
  20. package/dist/components/back-top/style.js +1 -1
  21. package/dist/components/back-top/style.js.map +1 -1
  22. package/dist/components/badge/index.d.ts +27 -0
  23. package/dist/components/badge/index.js +121 -0
  24. package/dist/components/badge/index.js.map +1 -0
  25. package/dist/components/badge/style.js +6 -0
  26. package/dist/components/badge/style.js.map +1 -0
  27. package/dist/components/button/index.d.ts +16 -3
  28. package/dist/components/button/index.js +56 -17
  29. package/dist/components/button/index.js.map +1 -1
  30. package/dist/components/button/style.js +1 -1
  31. package/dist/components/button/style.js.map +1 -1
  32. package/dist/components/button-group/index.d.ts +16 -0
  33. package/dist/components/button-group/index.js +49 -0
  34. package/dist/components/button-group/index.js.map +1 -0
  35. package/dist/components/button-group/style.js +6 -0
  36. package/dist/components/button-group/style.js.map +1 -0
  37. package/dist/components/checkbox/index.d.ts +39 -0
  38. package/dist/components/checkbox/index.js +111 -0
  39. package/dist/components/checkbox/index.js.map +1 -0
  40. package/dist/components/checkbox/style.js +6 -0
  41. package/dist/components/checkbox/style.js.map +1 -0
  42. package/dist/components/checkbox-group/index.d.ts +35 -0
  43. package/dist/components/checkbox-group/index.js +99 -0
  44. package/dist/components/checkbox-group/index.js.map +1 -0
  45. package/dist/components/checkbox-group/style.js +6 -0
  46. package/dist/components/checkbox-group/style.js.map +1 -0
  47. package/dist/components/context-menu/index.d.ts +84 -0
  48. package/dist/components/context-menu/index.js +294 -0
  49. package/dist/components/context-menu/index.js.map +1 -0
  50. package/dist/components/context-menu/style.js +6 -0
  51. package/dist/components/context-menu/style.js.map +1 -0
  52. package/dist/components/dialog/index.d.ts +41 -0
  53. package/dist/components/dialog/index.js +118 -0
  54. package/dist/components/dialog/index.js.map +1 -0
  55. package/dist/components/dialog/style.js +6 -0
  56. package/dist/components/dialog/style.js.map +1 -0
  57. package/dist/components/drawer/index.d.ts +57 -0
  58. package/dist/components/drawer/index.js +172 -0
  59. package/dist/components/drawer/index.js.map +1 -0
  60. package/dist/components/drawer/style.js +6 -0
  61. package/dist/components/drawer/style.js.map +1 -0
  62. package/dist/components/dropdown/index.d.ts +87 -0
  63. package/dist/components/dropdown/index.js +324 -0
  64. package/dist/components/dropdown/index.js.map +1 -0
  65. package/dist/components/dropdown/style.js +6 -0
  66. package/dist/components/dropdown/style.js.map +1 -0
  67. package/dist/components/dropdown-divider/index.d.ts +11 -0
  68. package/dist/components/dropdown-divider/index.js +18 -0
  69. package/dist/components/dropdown-divider/index.js.map +1 -0
  70. package/dist/components/dropdown-divider/style.js +6 -0
  71. package/dist/components/dropdown-divider/style.js.map +1 -0
  72. package/dist/components/dropdown-header/index.d.ts +11 -0
  73. package/dist/components/dropdown-header/index.js +18 -0
  74. package/dist/components/dropdown-header/index.js.map +1 -0
  75. package/dist/components/dropdown-header/style.js +6 -0
  76. package/dist/components/dropdown-header/style.js.map +1 -0
  77. package/dist/components/dropdown-item/index.d.ts +17 -0
  78. package/dist/components/dropdown-item/index.js +44 -0
  79. package/dist/components/dropdown-item/index.js.map +1 -0
  80. package/dist/components/dropdown-item/style.js +6 -0
  81. package/dist/components/dropdown-item/style.js.map +1 -0
  82. package/dist/components/empty/index.d.ts +23 -0
  83. package/dist/components/empty/index.js +83 -0
  84. package/dist/components/empty/index.js.map +1 -0
  85. package/dist/components/empty/style.js +6 -0
  86. package/dist/components/empty/style.js.map +1 -0
  87. package/dist/components/icon/index.d.ts +16 -0
  88. package/dist/components/icon/index.js +45 -0
  89. package/dist/components/icon/index.js.map +1 -0
  90. package/dist/components/icon/style.js +6 -0
  91. package/dist/components/icon/style.js.map +1 -0
  92. package/dist/components/index.d.ts +34 -0
  93. package/dist/components/index.js +37 -0
  94. package/dist/components/input/index.d.ts +47 -0
  95. package/dist/components/input/index.js +140 -0
  96. package/dist/components/input/index.js.map +1 -0
  97. package/dist/components/input/style.js +6 -0
  98. package/dist/components/input/style.js.map +1 -0
  99. package/dist/components/input-number/index.d.ts +52 -0
  100. package/dist/components/input-number/index.js +178 -0
  101. package/dist/components/input-number/index.js.map +1 -0
  102. package/dist/components/input-number/style.js +6 -0
  103. package/dist/components/input-number/style.js.map +1 -0
  104. package/dist/components/layout/index.d.ts +11 -1
  105. package/dist/components/layout/index.js +55 -21
  106. package/dist/components/layout/index.js.map +1 -1
  107. package/dist/components/layout/style.js +1 -1
  108. package/dist/components/layout/style.js.map +1 -1
  109. package/dist/components/option/index.d.ts +33 -0
  110. package/dist/components/option/index.js +78 -0
  111. package/dist/components/option/index.js.map +1 -0
  112. package/dist/components/option/style.js +6 -0
  113. package/dist/components/option/style.js.map +1 -0
  114. package/dist/components/popover/index.d.ts +69 -0
  115. package/dist/components/popover/index.js +231 -0
  116. package/dist/components/popover/index.js.map +1 -0
  117. package/dist/components/popover/style.js +6 -0
  118. package/dist/components/popover/style.js.map +1 -0
  119. package/dist/components/radio/index.d.ts +39 -0
  120. package/dist/components/radio/index.js +105 -0
  121. package/dist/components/radio/index.js.map +1 -0
  122. package/dist/components/radio/style.js +6 -0
  123. package/dist/components/radio/style.js.map +1 -0
  124. package/dist/components/radio-group/index.d.ts +35 -0
  125. package/dist/components/radio-group/index.js +87 -0
  126. package/dist/components/radio-group/index.js.map +1 -0
  127. package/dist/components/radio-group/style.js +6 -0
  128. package/dist/components/radio-group/style.js.map +1 -0
  129. package/dist/components/segmented/index.d.ts +33 -0
  130. package/dist/components/segmented/index.js +95 -0
  131. package/dist/components/segmented/index.js.map +1 -0
  132. package/dist/components/segmented/style.js +6 -0
  133. package/dist/components/segmented/style.js.map +1 -0
  134. package/dist/components/segmented-trigger/index.d.ts +18 -0
  135. package/dist/components/segmented-trigger/index.js +52 -0
  136. package/dist/components/segmented-trigger/index.js.map +1 -0
  137. package/dist/components/segmented-trigger/style.js +6 -0
  138. package/dist/components/segmented-trigger/style.js.map +1 -0
  139. package/dist/components/select/index.d.ts +80 -0
  140. package/dist/components/select/index.js +291 -0
  141. package/dist/components/select/index.js.map +1 -0
  142. package/dist/components/select/style.js +6 -0
  143. package/dist/components/select/style.js.map +1 -0
  144. package/dist/components/slider/index.d.ts +61 -0
  145. package/dist/components/slider/index.js +219 -0
  146. package/dist/components/slider/index.js.map +1 -0
  147. package/dist/components/slider/style.js +6 -0
  148. package/dist/components/slider/style.js.map +1 -0
  149. package/dist/components/spinner/index.d.ts +32 -0
  150. package/dist/components/spinner/index.js +52 -0
  151. package/dist/components/spinner/index.js.map +1 -0
  152. package/dist/components/spinner/style.js +6 -0
  153. package/dist/components/spinner/style.js.map +1 -0
  154. package/dist/components/svg-draw-lines/index.d.ts +30 -9
  155. package/dist/components/svg-draw-lines/index.js +87 -62
  156. package/dist/components/svg-draw-lines/index.js.map +1 -1
  157. package/dist/components/svg-draw-lines/style.js +1 -1
  158. package/dist/components/svg-draw-lines/style.js.map +1 -1
  159. package/dist/components/switch/index.d.ts +37 -0
  160. package/dist/components/switch/index.js +117 -0
  161. package/dist/components/switch/index.js.map +1 -0
  162. package/dist/components/switch/style.js +6 -0
  163. package/dist/components/switch/style.js.map +1 -0
  164. package/dist/components/textarea/index.d.ts +65 -0
  165. package/dist/components/textarea/index.js +204 -0
  166. package/dist/components/textarea/index.js.map +1 -0
  167. package/dist/components/textarea/style.js +6 -0
  168. package/dist/components/textarea/style.js.map +1 -0
  169. package/dist/components/theme/index.d.ts +29 -0
  170. package/dist/components/theme/index.js +78 -0
  171. package/dist/components/theme/index.js.map +1 -0
  172. package/dist/components/theme/style.js +6 -0
  173. package/dist/components/theme/style.js.map +1 -0
  174. package/dist/components/toast/index.d.ts +3 -0
  175. package/dist/components/toast/index.js +3 -0
  176. package/dist/components/toast/manager.d.ts +15 -0
  177. package/dist/components/toast/manager.js +98 -0
  178. package/dist/components/toast/manager.js.map +1 -0
  179. package/dist/components/toast/style.js +6 -0
  180. package/dist/components/toast/style.js.map +1 -0
  181. package/dist/components/toast/toast.d.ts +42 -0
  182. package/dist/components/toast/toast.js +122 -0
  183. package/dist/components/toast/toast.js.map +1 -0
  184. package/dist/components/toast/types.d.ts +23 -0
  185. package/dist/components/tooltip/index.d.ts +59 -0
  186. package/dist/components/tooltip/index.js +190 -0
  187. package/dist/components/tooltip/index.js.map +1 -0
  188. package/dist/components/tooltip/style.js +6 -0
  189. package/dist/components/tooltip/style.js.map +1 -0
  190. package/dist/icons/generated/heroicons-check-16-solid.d.ts +6 -0
  191. package/dist/icons/generated/heroicons-check-16-solid.js +10 -0
  192. package/dist/icons/generated/heroicons-check-16-solid.js.map +1 -0
  193. package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts +6 -0
  194. package/dist/icons/generated/heroicons-x-mark-16-solid.js +10 -0
  195. package/dist/icons/generated/heroicons-x-mark-16-solid.js.map +1 -0
  196. package/dist/icons/generated/jam-close-circle-f.d.ts +8 -0
  197. package/dist/icons/generated/jam-close-circle-f.js +12 -0
  198. package/dist/icons/generated/jam-close-circle-f.js.map +1 -0
  199. package/dist/icons/generated/jam-volume.d.ts +8 -0
  200. package/dist/icons/generated/jam-watch-f.d.ts +8 -0
  201. package/dist/icons/generated/lucide-arrow-down-to-line.d.ts +6 -0
  202. package/dist/icons/generated/lucide-arrow-down-to-line.js +10 -0
  203. package/dist/icons/generated/lucide-arrow-down-to-line.js.map +1 -0
  204. package/dist/icons/generated/lucide-arrow-up-to-line.d.ts +6 -0
  205. package/dist/icons/generated/lucide-arrow-up-to-line.js +10 -0
  206. package/dist/icons/generated/lucide-arrow-up-to-line.js.map +1 -0
  207. package/dist/icons/generated/lucide-bell.d.ts +6 -0
  208. package/dist/icons/generated/lucide-bell.js +10 -0
  209. package/dist/icons/generated/lucide-bell.js.map +1 -0
  210. package/dist/icons/generated/lucide-check.d.ts +6 -0
  211. package/dist/icons/generated/lucide-check.js +10 -0
  212. package/dist/icons/generated/lucide-check.js.map +1 -0
  213. package/dist/icons/generated/lucide-chevron-down.d.ts +6 -0
  214. package/dist/icons/generated/lucide-chevron-down.js +10 -0
  215. package/dist/icons/generated/lucide-chevron-down.js.map +1 -0
  216. package/dist/icons/generated/lucide-chevron-left.d.ts +6 -0
  217. package/dist/icons/generated/lucide-chevron-left.js +10 -0
  218. package/dist/icons/generated/lucide-chevron-left.js.map +1 -0
  219. package/dist/icons/generated/lucide-chevron-right.d.ts +6 -0
  220. package/dist/icons/generated/lucide-chevron-right.js +10 -0
  221. package/dist/icons/generated/lucide-chevron-right.js.map +1 -0
  222. package/dist/icons/generated/lucide-chevron-up.d.ts +6 -0
  223. package/dist/icons/generated/lucide-chevron-up.js +10 -0
  224. package/dist/icons/generated/lucide-chevron-up.js.map +1 -0
  225. package/dist/icons/generated/lucide-circle-alert.d.ts +6 -0
  226. package/dist/icons/generated/lucide-circle-alert.js +10 -0
  227. package/dist/icons/generated/lucide-circle-alert.js.map +1 -0
  228. package/dist/icons/generated/lucide-clipboard-paste.d.ts +6 -0
  229. package/dist/icons/generated/lucide-clipboard-paste.js +10 -0
  230. package/dist/icons/generated/lucide-clipboard-paste.js.map +1 -0
  231. package/dist/icons/generated/lucide-copy.d.ts +6 -0
  232. package/dist/icons/generated/lucide-copy.js +10 -0
  233. package/dist/icons/generated/lucide-copy.js.map +1 -0
  234. package/dist/icons/generated/lucide-download.d.ts +6 -0
  235. package/dist/icons/generated/lucide-download.js +10 -0
  236. package/dist/icons/generated/lucide-download.js.map +1 -0
  237. package/dist/icons/generated/lucide-file.d.ts +6 -0
  238. package/dist/icons/generated/lucide-file.js +10 -0
  239. package/dist/icons/generated/lucide-file.js.map +1 -0
  240. package/dist/icons/generated/lucide-folder.d.ts +6 -0
  241. package/dist/icons/generated/lucide-folder.js +10 -0
  242. package/dist/icons/generated/lucide-folder.js.map +1 -0
  243. package/dist/icons/generated/lucide-globe.d.ts +6 -0
  244. package/dist/icons/generated/lucide-globe.js +10 -0
  245. package/dist/icons/generated/lucide-globe.js.map +1 -0
  246. package/dist/icons/generated/lucide-heart.d.ts +6 -0
  247. package/dist/icons/generated/lucide-heart.js +10 -0
  248. package/dist/icons/generated/lucide-heart.js.map +1 -0
  249. package/dist/icons/generated/lucide-image.d.ts +6 -0
  250. package/dist/icons/generated/lucide-image.js +10 -0
  251. package/dist/icons/generated/lucide-image.js.map +1 -0
  252. package/dist/icons/generated/lucide-inbox.d.ts +6 -0
  253. package/dist/icons/generated/lucide-inbox.js +10 -0
  254. package/dist/icons/generated/lucide-inbox.js.map +1 -0
  255. package/dist/icons/generated/lucide-info.d.ts +6 -0
  256. package/dist/icons/generated/lucide-info.js +10 -0
  257. package/dist/icons/generated/lucide-info.js.map +1 -0
  258. package/dist/icons/generated/lucide-loader-circle.d.ts +6 -0
  259. package/dist/icons/generated/lucide-loader-circle.js +10 -0
  260. package/dist/icons/generated/lucide-loader-circle.js.map +1 -0
  261. package/dist/icons/generated/lucide-mail.d.ts +6 -0
  262. package/dist/icons/generated/lucide-mail.js +10 -0
  263. package/dist/icons/generated/lucide-mail.js.map +1 -0
  264. package/dist/icons/generated/lucide-minus.d.ts +6 -0
  265. package/dist/icons/generated/lucide-minus.js +10 -0
  266. package/dist/icons/generated/lucide-minus.js.map +1 -0
  267. package/dist/icons/generated/lucide-plus.d.ts +6 -0
  268. package/dist/icons/generated/lucide-plus.js +10 -0
  269. package/dist/icons/generated/lucide-plus.js.map +1 -0
  270. package/dist/icons/generated/lucide-printer.d.ts +6 -0
  271. package/dist/icons/generated/lucide-printer.js +10 -0
  272. package/dist/icons/generated/lucide-printer.js.map +1 -0
  273. package/dist/icons/generated/lucide-redo-2.d.ts +6 -0
  274. package/dist/icons/generated/lucide-redo-2.js +10 -0
  275. package/dist/icons/generated/lucide-redo-2.js.map +1 -0
  276. package/dist/icons/generated/lucide-scissors.d.ts +6 -0
  277. package/dist/icons/generated/lucide-scissors.js +10 -0
  278. package/dist/icons/generated/lucide-scissors.js.map +1 -0
  279. package/dist/icons/generated/lucide-search.d.ts +6 -0
  280. package/dist/icons/generated/lucide-search.js +10 -0
  281. package/dist/icons/generated/lucide-search.js.map +1 -0
  282. package/dist/icons/generated/lucide-settings.d.ts +6 -0
  283. package/dist/icons/generated/lucide-settings.js +10 -0
  284. package/dist/icons/generated/lucide-settings.js.map +1 -0
  285. package/dist/icons/generated/lucide-star.d.ts +6 -0
  286. package/dist/icons/generated/lucide-star.js +10 -0
  287. package/dist/icons/generated/lucide-star.js.map +1 -0
  288. package/dist/icons/generated/lucide-trash-2.d.ts +6 -0
  289. package/dist/icons/generated/lucide-trash-2.js +10 -0
  290. package/dist/icons/generated/lucide-trash-2.js.map +1 -0
  291. package/dist/icons/generated/lucide-triangle-alert.d.ts +6 -0
  292. package/dist/icons/generated/lucide-triangle-alert.js +10 -0
  293. package/dist/icons/generated/lucide-triangle-alert.js.map +1 -0
  294. package/dist/icons/generated/lucide-undo-2.d.ts +6 -0
  295. package/dist/icons/generated/lucide-undo-2.js +10 -0
  296. package/dist/icons/generated/lucide-undo-2.js.map +1 -0
  297. package/dist/icons/generated/lucide-upload.d.ts +6 -0
  298. package/dist/icons/generated/lucide-upload.js +10 -0
  299. package/dist/icons/generated/lucide-upload.js.map +1 -0
  300. package/dist/icons/generated/lucide-user.d.ts +6 -0
  301. package/dist/icons/generated/lucide-user.js +10 -0
  302. package/dist/icons/generated/lucide-user.js.map +1 -0
  303. package/dist/icons/generated/lucide-x.d.ts +6 -0
  304. package/dist/icons/generated/lucide-x.js +10 -0
  305. package/dist/icons/generated/lucide-x.js.map +1 -0
  306. package/dist/icons/generated/ooui-check.d.ts +6 -0
  307. package/dist/icons/generated/radix-icons-check.d.ts +6 -0
  308. package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts +6 -0
  309. package/dist/icons/generated/radix-icons-panel-left-minimized.js +10 -0
  310. package/dist/icons/generated/radix-icons-panel-left-minimized.js.map +1 -0
  311. package/dist/icons/generated/si-check-alt-fill.d.ts +6 -0
  312. package/dist/icons/index.d.ts +39 -0
  313. package/dist/icons/index.js +40 -0
  314. package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js +248 -0
  315. package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -0
  316. package/dist/node_modules/.pnpm/@floating-ui_dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +324 -0
  317. package/dist/node_modules/.pnpm/@floating-ui_dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  318. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +99 -0
  319. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  320. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +102 -0
  321. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  322. package/dist/shared/menu-portal/menu-portal.js +11 -0
  323. package/dist/shared/menu-portal/menu-portal.js.map +1 -0
  324. package/dist/shared/normalize/index.js +11 -0
  325. package/dist/shared/normalize/index.js.map +1 -0
  326. package/dist/shared/overlay/overlay.js +68 -0
  327. package/dist/shared/overlay/overlay.js.map +1 -0
  328. package/dist/shared/overlay/portal.js +29 -0
  329. package/dist/shared/overlay/portal.js.map +1 -0
  330. package/dist/shared/overlay/presence.js +34 -0
  331. package/dist/shared/overlay/presence.js.map +1 -0
  332. package/dist/shared/property-converters/boolean-with-false-string.js +9 -0
  333. package/dist/shared/property-converters/boolean-with-false-string.js.map +1 -0
  334. package/dist/shared/scroll-lock/scroll-lock.js +12 -0
  335. package/dist/shared/scroll-lock/scroll-lock.js.map +1 -0
  336. package/dist/shared/theme/overlay-root.js +28 -0
  337. package/dist/shared/theme/overlay-root.js.map +1 -0
  338. package/dist/shared/theme/theme-scope.js +27 -0
  339. package/dist/shared/theme/theme-scope.js.map +1 -0
  340. package/dist/types/iconify.d.ts +1 -0
  341. package/dist/types/react.d.ts +35 -9
  342. package/dist/types/utils.d.ts +14 -0
  343. package/dist/types/vue.d.ts +47 -7
  344. package/package.json +29 -13
  345. package/dist/index.d.ts +0 -4
  346. package/dist/index.js +0 -5
@@ -0,0 +1,324 @@
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
+ import t from "../../assets/glass.js";
3
+ import { normalizeLiteral as n, normalizeNumber as r } from "../../shared/normalize/index.js";
4
+ import { booleanWithFalseString as i } from "../../shared/property-converters/boolean-with-false-string.js";
5
+ import "../dropdown-divider/index.js";
6
+ import "../dropdown-header/index.js";
7
+ import "../dropdown-item/index.js";
8
+ import { createMenuPortalOverlay as a } from "../../shared/menu-portal/menu-portal.js";
9
+ import { hideOverlayPresence as o, showOverlayPresence as s } from "../../shared/overlay/presence.js";
10
+ import { lockScroll as c, unlockScroll as l } from "../../shared/scroll-lock/scroll-lock.js";
11
+ import { withOverlay as u } from "../../shared/overlay/overlay.js";
12
+ import d from "./style.js";
13
+ import { LitElement as f, html as p, unsafeCSS as m } from "lit";
14
+ import { customElement as h, property as g, state as _ } from "lit/decorators.js";
15
+ //#region src/components/dropdown/index.ts
16
+ var v = "web-ui-menu-level-", y = [
17
+ "top",
18
+ "top-start",
19
+ "top-end",
20
+ "right",
21
+ "right-start",
22
+ "right-end",
23
+ "bottom",
24
+ "bottom-start",
25
+ "bottom-end",
26
+ "left",
27
+ "left-start",
28
+ "left-end"
29
+ ], b = class extends f {
30
+ constructor(...e) {
31
+ super(...e), this.open = !1, this.disabled = !1, this.matchWidth = !1, this.lockScroll = !0, this._placement = "bottom-start", this._offset = 4, this._activePath = [], this._overlays = /* @__PURE__ */ new Map(), this._closingSubmenuOverlays = /* @__PURE__ */ new Map(), this._ignoreOutsideClick = !1, this._hoverCleanupFns = [], this._hasScrollLock = !1, this._shouldOpenInstantly = !0, this._onTriggerClick = (e) => {
32
+ this.disabled || (this.open ? this.closeAll() : this._openMenu(e.detail === 0));
33
+ }, this._onClickOutside = (e) => {
34
+ !this.isOpen || this._ignoreOutsideClick || this._isInsideShadowRoot(e) || this.closeAll();
35
+ }, this._onMenuClick = (e) => {
36
+ let t = e.composedPath().find((e) => e instanceof HTMLElement && e.matches("web-ui-dropdown-item"));
37
+ if (!t || t.hasAttribute("disabled") || !t.hasAttribute("submenu")) return;
38
+ let n = this._getFocusedLevel(t);
39
+ if (n === void 0) return;
40
+ let r = this._getLevelItems(n).indexOf(t);
41
+ r >= 0 && this._toggleSubmenu(n, r, e.detail === 0);
42
+ }, this._onKeydown = (e) => {
43
+ if (this.disabled || !this.open) return;
44
+ if (e.key === "Escape" && e.target === this) {
45
+ this._activePath.length > 0 ? this._closeSubmenuFrom(this._activePath.length) : this.closeAll(), e.preventDefault();
46
+ return;
47
+ }
48
+ let t = this._getFocusedItem(e), n = this._getFocusedLevel(t);
49
+ if (n === void 0) return;
50
+ let r = this._getEnabledLevelItems(n), i = t ? r.indexOf(t) : -1;
51
+ switch (e.key) {
52
+ case "ArrowDown":
53
+ this._focusMenuItem(r[(i + 1 + r.length) % r.length]);
54
+ break;
55
+ case "ArrowUp":
56
+ this._focusMenuItem(r[(i - 1 + r.length) % r.length]);
57
+ break;
58
+ case "Home":
59
+ this._focusMenuItem(r[0]);
60
+ break;
61
+ case "End":
62
+ this._focusMenuItem(r.at(-1));
63
+ break;
64
+ case "ArrowRight":
65
+ if (t?.hasAttribute("submenu")) {
66
+ let e = this._getLevelItems(n).indexOf(t);
67
+ this._toggleSubmenu(n, e, !0), requestAnimationFrame(() => requestAnimationFrame(() => this._focusMenuItem(this._getEnabledLevelItems(n + 1)[0])));
68
+ }
69
+ break;
70
+ case "ArrowLeft":
71
+ n > 0 && (this._closeSubmenuFrom(n), this._focusMenuItem(this._getLevelItems(n - 1)[this._activePath[n - 1]]));
72
+ break;
73
+ case "Enter":
74
+ case " ":
75
+ t?.click();
76
+ break;
77
+ case "Escape":
78
+ this._activePath.length > 0 ? this._closeSubmenuFrom(this._activePath.length) : this.closeAll();
79
+ break;
80
+ default: return;
81
+ }
82
+ e.preventDefault(), e.stopPropagation();
83
+ };
84
+ }
85
+ static {
86
+ this.styles = [m(t), m(d)];
87
+ }
88
+ get placement() {
89
+ return this._placement;
90
+ }
91
+ set placement(e) {
92
+ this._placement = n(e, y, "bottom-start");
93
+ }
94
+ get offset() {
95
+ return this._offset;
96
+ }
97
+ set offset(e) {
98
+ this._offset = r(e, 0, 100, 4);
99
+ }
100
+ get isOpen() {
101
+ return this.open || this._activePath.length > 0;
102
+ }
103
+ connectedCallback() {
104
+ super.connectedCallback(), this.addEventListener("keydown", this._onKeydown), document.addEventListener("click", this._onClickOutside);
105
+ }
106
+ disconnectedCallback() {
107
+ super.disconnectedCallback(), this.removeEventListener("keydown", this._onKeydown), document.removeEventListener("click", this._onClickOutside), clearTimeout(this._openTimer), clearTimeout(this._ignoreOutsideClickTimer), this._syncScrollLock(!1), this._cleanupClosedMenu(), this._hoverCleanupFns.forEach((e) => e());
108
+ }
109
+ updated(e) {
110
+ e.has("open") && (this.open ? (this._restoreFocusTarget ??= document.activeElement instanceof HTMLElement ? document.activeElement : void 0, this._ignoreCurrentOutsideClick(), this._syncScrollLock(), this._hideAllSubmenuChildren(), requestAnimationFrame(() => {
111
+ this.open && (this._ensureOverlay(0, this._shouldOpenInstantly), this._shouldOpenInstantly = !0, this._focusMenuItem(this._getEnabledLevelItems(0)[0]));
112
+ }), this._bindHoversAfterUpdate()) : (this._syncScrollLock(), this._closeRootAfterPresence()), this.dispatchEvent(new CustomEvent("open-change", {
113
+ detail: { open: this.open },
114
+ bubbles: !0,
115
+ composed: !0
116
+ }))), e.has("lockScroll") && this._syncScrollLock(), this._bindLevelHovers();
117
+ }
118
+ openMenu() {
119
+ this._openMenu(!0);
120
+ }
121
+ _openMenu(e) {
122
+ this.disabled || this.open || (this._ignoreCurrentOutsideClick(), this._shouldOpenInstantly = e, this.open = !0);
123
+ }
124
+ closeAll() {
125
+ this.open &&= !1;
126
+ }
127
+ _closeAllSubmenus() {
128
+ this._closeSubmenuFrom(1, !0), this._disposeClosingSubmenuOverlays(), this._activePath = [], this._syncActiveAttrs();
129
+ }
130
+ _cleanupClosedMenu() {
131
+ this._closeAllSubmenus(), this._returnLevel0Items(), this._disposeAll();
132
+ }
133
+ async _closeRootAfterPresence() {
134
+ let e = this._overlays.get(0)?.overlay;
135
+ e && !await o(e) || this.open || !this.isConnected || (this._cleanupClosedMenu(), this._restoreFocusTarget?.focus(), this._restoreFocusTarget = void 0);
136
+ }
137
+ _hideAllSubmenuChildren() {
138
+ this.querySelectorAll("web-ui-dropdown-item[submenu]").forEach((e) => {
139
+ Array.from(e.children).forEach((e) => {
140
+ e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && e.setAttribute("slot", `${v}-hidden`);
141
+ });
142
+ });
143
+ }
144
+ _toggleSubmenu(e, t, n = !1) {
145
+ if (this._activePath[e] === t) return;
146
+ this._closeSubmenuFrom(e + 1), this._activePath[e] = t, this._syncActiveAttrs();
147
+ let r = this._getLevelItems(e)[t];
148
+ r?.hasAttribute("submenu") && requestAnimationFrame(() => {
149
+ !this.open || this._activePath[e] !== t || this._ensureOverlay(e + 1, n, r) || this._populateOverlay(e + 1, r);
150
+ }), this._bindHoversAfterUpdate();
151
+ }
152
+ _closeSubmenuFrom(e, t = !1) {
153
+ for (let n = this._activePath.length; n >= e; n--) {
154
+ let e = this._overlays.get(n), r = this._getLevelItems(n - 1)[this._activePath[n - 1]];
155
+ e && (!r || t ? (this._depopulateOverlay(n, r), this._disposeOverlay(n)) : (this._overlays.delete(n), this._closingSubmenuOverlays.set(r, e), this._closeSubmenuAfterPresence(e, r)));
156
+ }
157
+ this._activePath = this._activePath.slice(0, e - 1), this._syncActiveAttrs();
158
+ }
159
+ _syncActiveAttrs() {
160
+ this.querySelectorAll("web-ui-dropdown-item").forEach((e) => {
161
+ e.removeAttribute("active");
162
+ }), this._overlays.forEach((e, t) => {
163
+ this._getLevelItems(t).forEach((e) => e.removeAttribute("active"));
164
+ }), this._activePath.forEach((e, t) => {
165
+ let n = this._getLevelItems(t)[e];
166
+ n?.matches("web-ui-dropdown-item") && n.setAttribute("active", "");
167
+ });
168
+ }
169
+ _getLevelItems(e) {
170
+ let t = this._overlays.get(e)?.overlay.querySelector(".dropdown-scroll");
171
+ return t ? Array.from(t.children).filter((e) => e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header")) : [];
172
+ }
173
+ _populateLevel0() {
174
+ let e = this._overlays.get(0)?.overlay.querySelector(".dropdown-scroll");
175
+ e && Array.from(this.children).forEach((t) => {
176
+ t.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && e.appendChild(t);
177
+ });
178
+ }
179
+ _returnLevel0Items() {
180
+ let e = this._overlays.get(0)?.overlay.querySelector(".dropdown-scroll");
181
+ e && Array.from(e.children).forEach((e) => {
182
+ e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && this.appendChild(e);
183
+ });
184
+ }
185
+ _populateOverlay(e, t) {
186
+ let n = this._overlays.get(e)?.overlay.querySelector(".dropdown-scroll");
187
+ if (n) for (let e of Array.from(t.children)) e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && n.appendChild(e);
188
+ }
189
+ _depopulateOverlay(e, t) {
190
+ let n = this._overlays.get(e)?.overlay.querySelector(".dropdown-scroll");
191
+ if (n) {
192
+ for (let r of Array.from(n.children)) if (r.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header")) {
193
+ let n = e - 1, i = t ?? this._getLevelItems(n)[this._activePath[n]];
194
+ i && i.appendChild(r);
195
+ }
196
+ }
197
+ }
198
+ _ensureOverlay(e, t = !1, n) {
199
+ let r = n ? this._closingSubmenuOverlays.get(n) : void 0;
200
+ if (r) return this._closingSubmenuOverlays.delete(n), this._overlays.set(e, r), r.api.open(), s(r.overlay, { isInstant: t }), !0;
201
+ let i = this._overlays.get(e);
202
+ return i ? (i.api.open(), s(i.overlay, { isInstant: t }), !1) : (this._buildOverlay(e, t), !1);
203
+ }
204
+ _buildOverlay(e, t = !1) {
205
+ let n = a("dropdown-overlay");
206
+ n.setAttribute("role", "menu"), n.dataset.level = String(e), n.addEventListener("click", this._onMenuClick), n.addEventListener("keydown", this._onKeydown);
207
+ let r = document.createElement("div");
208
+ r.className = "dropdown-scroll", n.appendChild(r);
209
+ let i = e === 0 ? this._queryTriggerAnchor() : this._getSubmenuTriggerAnchor(e - 1);
210
+ if (i) {
211
+ let r = u.make({
212
+ anchor: i,
213
+ overlay: n,
214
+ placement: e === 0 ? this.placement : "right-start",
215
+ offset: e === 0 ? this.offset : 0,
216
+ matchWidth: e === 0 && this.matchWidth,
217
+ strategy: "fixed"
218
+ });
219
+ this._overlays.set(e, {
220
+ api: r,
221
+ overlay: n
222
+ }), e === 0 && this._populateLevel0(), r.open(), s(n, { isInstant: t });
223
+ }
224
+ }
225
+ _disposeOverlay(e) {
226
+ let t = this._overlays.get(e)?.overlay;
227
+ t?.removeEventListener("click", this._onMenuClick), t?.removeEventListener("keydown", this._onKeydown), t?.remove(), this._overlays.get(e)?.api.dispose(), this._overlays.delete(e);
228
+ }
229
+ _disposeAll() {
230
+ for (let e of this._overlays.keys()) this._disposeOverlay(e);
231
+ }
232
+ async _closeSubmenuAfterPresence(e, t) {
233
+ await o(e.overlay) && this._closingSubmenuOverlays.get(t) === e && (this._closingSubmenuOverlays.delete(t), this._restoreSubmenuItems(e.overlay, t), e.api.dispose(), e.overlay.remove());
234
+ }
235
+ _disposeClosingSubmenuOverlays() {
236
+ this._closingSubmenuOverlays.forEach((e, t) => {
237
+ this._restoreSubmenuItems(e.overlay, t), e.api.dispose(), e.overlay.remove();
238
+ }), this._closingSubmenuOverlays.clear();
239
+ }
240
+ _restoreSubmenuItems(e, t) {
241
+ let n = e.querySelector(".dropdown-scroll");
242
+ n && Array.from(n.children).forEach((e) => t.appendChild(e));
243
+ }
244
+ _syncScrollLock(e = this.open) {
245
+ let t = e && this.lockScroll;
246
+ t !== this._hasScrollLock && (t ? c() : l(), this._hasScrollLock = t);
247
+ }
248
+ _queryTriggerAnchor() {
249
+ let e = (this.shadowRoot?.querySelector("slot[name=\"trigger\"]"))?.assignedElements()[0];
250
+ return e instanceof HTMLElement ? e : null;
251
+ }
252
+ _getSubmenuTriggerAnchor(e) {
253
+ let t = this._activePath[e];
254
+ if (t === void 0) return null;
255
+ let n = this._getLevelItems(e)[t];
256
+ return n ? n.shadowRoot?.querySelector(".item-inner") ?? n : null;
257
+ }
258
+ _getEnabledLevelItems(e) {
259
+ return this._getLevelItems(e).filter((e) => e.matches("web-ui-dropdown-item:not([disabled])"));
260
+ }
261
+ _getFocusedItem(e) {
262
+ return e?.composedPath().find((e) => e instanceof HTMLElement && e.matches("web-ui-dropdown-item")) || [...this._overlays.values()].flatMap(({ overlay: e }) => Array.from(e.querySelectorAll("web-ui-dropdown-item"))).find((e) => !!e.shadowRoot?.activeElement);
263
+ }
264
+ _getFocusedLevel(e = this._getFocusedItem()) {
265
+ if (e) return [...this._overlays.entries()].find(([, t]) => t.overlay.contains(e))?.[0];
266
+ }
267
+ _focusMenuItem(e) {
268
+ !e || e.hasAttribute("disabled") || e.focusItem?.();
269
+ }
270
+ _isInsideShadowRoot(e) {
271
+ for (let t of e.composedPath()) if (t === this || t === this.shadowRoot || t instanceof Node && t.getRootNode() === this.shadowRoot || t instanceof Node && [...this._overlays.values()].some(({ overlay: e }) => e.contains(t))) return !0;
272
+ return !1;
273
+ }
274
+ _ignoreCurrentOutsideClick() {
275
+ this._ignoreOutsideClick = !0, clearTimeout(this._ignoreOutsideClickTimer), this._ignoreOutsideClickTimer = setTimeout(() => {
276
+ this._ignoreOutsideClick = !1;
277
+ });
278
+ }
279
+ _bindLevelHovers() {
280
+ this._hoverCleanupFns.forEach((e) => e()), this._hoverCleanupFns.length = 0;
281
+ let e = this._activePath.length + 1;
282
+ for (let t = 0; t <= e; t++) {
283
+ let e = this._getLevelItems(t);
284
+ e.length && e.forEach((e, n) => {
285
+ if (!e.matches("web-ui-dropdown-item") || e.hasAttribute("disabled")) return;
286
+ let r = (r) => {
287
+ r.pointerType !== "touch" && (clearTimeout(this._openTimer), e.hasAttribute("submenu") ? this._activePath[t] !== n && (this._openTimer = setTimeout(() => this._toggleSubmenu(t, n), 200)) : this._activePath.length > t && this._closeSubmenuFrom(t + 1));
288
+ };
289
+ e.addEventListener("pointerenter", r, { passive: !0 }), this._hoverCleanupFns.push(() => e.removeEventListener("pointerenter", r));
290
+ });
291
+ }
292
+ }
293
+ _bindHoversAfterUpdate() {
294
+ requestAnimationFrame(() => this._bindLevelHovers());
295
+ }
296
+ render() {
297
+ return p`
298
+ <div class="dropdown-trigger" @click=${this._onTriggerClick}>
299
+ <slot name="trigger"></slot>
300
+ </div>
301
+ `;
302
+ }
303
+ };
304
+ e([g({
305
+ type: Boolean,
306
+ reflect: !0
307
+ })], b.prototype, "open", void 0), e([g({
308
+ type: Boolean,
309
+ reflect: !0
310
+ })], b.prototype, "disabled", void 0), e([g({
311
+ type: Boolean,
312
+ reflect: !0
313
+ })], b.prototype, "matchWidth", void 0), e([g({
314
+ reflect: !0,
315
+ attribute: "lock-scroll",
316
+ converter: i
317
+ })], b.prototype, "lockScroll", void 0), e([g({
318
+ type: String,
319
+ reflect: !0
320
+ })], b.prototype, "placement", null), e([g({ type: Number })], b.prototype, "offset", null), e([_()], b.prototype, "_activePath", void 0), b = e([h("web-ui-dropdown")], b);
321
+ //#endregion
322
+ export { b as WebUiDropdown };
323
+
324
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dropdown/index.ts"],"sourcesContent":["import type { Placement } from '@floating-ui/dom'\nimport { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/dropdown-divider'\nimport '@/components/dropdown-header'\nimport '@/components/dropdown-item'\nimport glass from '@/assets/glass.css?inline'\nimport { createMenuPortalOverlay } from '@/shared/menu-portal/menu-portal'\nimport { normalizeLiteral, normalizeNumber } from '@/shared/normalize'\nimport { withOverlay } from '@/shared/overlay/overlay'\nimport type { OverlayApi } from '@/shared/overlay/overlay'\nimport { hideOverlayPresence, showOverlayPresence } from '@/shared/overlay/presence'\nimport { booleanWithFalseString } from '@/shared/property-converters/boolean-with-false-string'\nimport { lockScroll, unlockScroll } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\nexport type { Placement }\n\nconst SLOT_PREFIX = 'web-ui-menu-level-'\nconst ALLOWED_PLACEMENTS = [\n 'top',\n 'top-start',\n 'top-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end'\n] as const\n\ninterface MenuOverlay {\n api: OverlayApi\n overlay: HTMLElement\n}\n\n@customElement('web-ui-dropdown')\nexport class WebUiDropdown extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) matchWidth = false\n @property({ reflect: true, attribute: 'lock-scroll', converter: booleanWithFalseString }) lockScroll = true\n\n private _placement: Placement = 'bottom-start'\n\n @property({ type: String, reflect: true })\n get placement(): Placement {\n return this._placement\n }\n set placement(v: string) {\n this._placement = normalizeLiteral(v, ALLOWED_PLACEMENTS, 'bottom-start')\n }\n\n private _offset = 4\n\n @property({ type: Number })\n get offset(): number {\n return this._offset\n }\n set offset(v: number) {\n this._offset = normalizeNumber(v, 0, 100, 4)\n }\n\n @state() private _activePath: number[] = []\n\n private readonly _overlays = new Map<number, MenuOverlay>()\n private readonly _closingSubmenuOverlays = new Map<HTMLElement, MenuOverlay>()\n private _openTimer?: ReturnType<typeof setTimeout>\n private _ignoreOutsideClick = false\n private _ignoreOutsideClickTimer?: ReturnType<typeof setTimeout>\n private _hoverCleanupFns: (() => void)[] = []\n private _hasScrollLock = false\n private _restoreFocusTarget?: HTMLElement\n private _shouldOpenInstantly = true\n\n get isOpen(): boolean {\n return this.open || this._activePath.length > 0\n }\n\n override connectedCallback() {\n super.connectedCallback()\n this.addEventListener('keydown', this._onKeydown)\n document.addEventListener('click', this._onClickOutside)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('keydown', this._onKeydown)\n document.removeEventListener('click', this._onClickOutside)\n clearTimeout(this._openTimer)\n clearTimeout(this._ignoreOutsideClickTimer)\n this._syncScrollLock(false)\n this._cleanupClosedMenu()\n this._hoverCleanupFns.forEach(fn => fn())\n }\n\n protected override updated(changed: Map<string, unknown>) {\n if (changed.has('open')) {\n if (this.open) {\n this._restoreFocusTarget ??= document.activeElement instanceof HTMLElement ? document.activeElement : undefined\n this._ignoreCurrentOutsideClick()\n this._syncScrollLock()\n this._hideAllSubmenuChildren()\n requestAnimationFrame(() => {\n if (!this.open) return\n this._ensureOverlay(0, this._shouldOpenInstantly)\n this._shouldOpenInstantly = true\n this._focusMenuItem(this._getEnabledLevelItems(0)[0])\n })\n this._bindHoversAfterUpdate()\n } else {\n this._syncScrollLock()\n void this._closeRootAfterPresence()\n }\n this.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open: this.open },\n bubbles: true,\n composed: true\n })\n )\n }\n if (changed.has('lockScroll')) this._syncScrollLock()\n this._bindLevelHovers()\n }\n\n /**\n * 打开菜单。\n * @returns 无返回值;打开后派发 `open-change` 事件。\n */\n openMenu() {\n this._openMenu(true)\n }\n\n private _openMenu(isInstant: boolean) {\n if (this.disabled || this.open) return\n this._ignoreCurrentOutsideClick()\n this._shouldOpenInstantly = isInstant\n this.open = true\n }\n\n /**\n * 关闭所有层级。\n * @returns 无返回值;关闭后派发 `open-change` 事件。\n */\n closeAll() {\n if (!this.open) return\n this.open = false\n }\n\n /** 清理子菜单状态(不影响 open prop) */\n private _closeAllSubmenus() {\n this._closeSubmenuFrom(1, true)\n this._disposeClosingSubmenuOverlays()\n this._activePath = []\n this._syncActiveAttrs()\n }\n\n private _cleanupClosedMenu() {\n this._closeAllSubmenus()\n this._returnLevel0Items()\n this._disposeAll()\n }\n\n private async _closeRootAfterPresence() {\n const overlay = this._overlays.get(0)?.overlay\n if (overlay && !(await hideOverlayPresence(overlay))) return\n if (this.open || !this.isConnected) return\n\n this._cleanupClosedMenu()\n this._restoreFocusTarget?.focus()\n this._restoreFocusTarget = undefined\n }\n\n private _hideAllSubmenuChildren() {\n this.querySelectorAll('web-ui-dropdown-item[submenu]').forEach(item => {\n Array.from(item.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n child.setAttribute('slot', `${SLOT_PREFIX}-hidden`)\n }\n })\n })\n }\n\n private _toggleSubmenu(level: number, itemIndex: number, isInstant = false) {\n if (this._activePath[level] === itemIndex) {\n return\n }\n\n this._closeSubmenuFrom(level + 1)\n\n this._activePath[level] = itemIndex\n this._syncActiveAttrs()\n\n const item = this._getLevelItems(level)[itemIndex]\n if (item?.hasAttribute('submenu')) {\n requestAnimationFrame(() => {\n if (!this.open || this._activePath[level] !== itemIndex) return\n const restored = this._ensureOverlay(level + 1, isInstant, item)\n if (!restored) this._populateOverlay(level + 1, item)\n })\n }\n\n this._bindHoversAfterUpdate()\n }\n\n private _closeSubmenuFrom(level: number, isInstant = false) {\n for (let lv = this._activePath.length; lv >= level; lv--) {\n const overlay = this._overlays.get(lv)\n const parentItem = this._getLevelItems(lv - 1)[this._activePath[lv - 1]]\n if (!overlay) continue\n\n if (!parentItem || isInstant) {\n this._depopulateOverlay(lv, parentItem)\n this._disposeOverlay(lv)\n } else {\n this._overlays.delete(lv)\n this._closingSubmenuOverlays.set(parentItem, overlay)\n void this._closeSubmenuAfterPresence(overlay, parentItem)\n }\n }\n this._activePath = this._activePath.slice(0, level - 1)\n this._syncActiveAttrs()\n }\n\n private _syncActiveAttrs() {\n this.querySelectorAll('web-ui-dropdown-item').forEach(item => {\n item.removeAttribute('active')\n })\n this._overlays.forEach((_, level) => {\n this._getLevelItems(level).forEach(item => item.removeAttribute('active'))\n })\n this._activePath.forEach((itemIndex, level) => {\n const item = this._getLevelItems(level)[itemIndex]\n if (item?.matches('web-ui-dropdown-item')) {\n item.setAttribute('active', '')\n }\n })\n }\n\n private _getLevelItems(level: number): HTMLElement[] {\n const scroll = this._overlays.get(level)?.overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!scroll) return []\n return Array.from(scroll.children).filter((c): c is HTMLElement =>\n c.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')\n )\n }\n\n private _populateLevel0() {\n const overlay = this._overlays.get(0)?.overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!overlay) return\n Array.from(this.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n overlay.appendChild(child)\n }\n })\n }\n\n private _returnLevel0Items() {\n const overlay = this._overlays.get(0)?.overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!overlay) return\n Array.from(overlay.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n this.appendChild(child)\n }\n })\n }\n\n private _populateOverlay(level: number, submenuItem: HTMLElement) {\n const overlay = this._overlays.get(level)?.overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!overlay) return\n for (const child of Array.from(submenuItem.children)) {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n overlay.appendChild(child)\n }\n }\n }\n\n private _depopulateOverlay(level: number, parentItem?: HTMLElement) {\n const scroll = this._overlays.get(level)?.overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!scroll) return\n for (const child of Array.from(scroll.children)) {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n const targetLevel = level - 1\n const submenuItem = parentItem ?? this._getLevelItems(targetLevel)[this._activePath[targetLevel]]\n if (submenuItem) {\n submenuItem.appendChild(child)\n }\n }\n }\n }\n\n private _ensureOverlay(level: number, isInstant = false, submenuItem?: HTMLElement): boolean {\n const closingOverlay = submenuItem ? this._closingSubmenuOverlays.get(submenuItem) : undefined\n if (closingOverlay) {\n this._closingSubmenuOverlays.delete(submenuItem!)\n this._overlays.set(level, closingOverlay)\n closingOverlay.api.open()\n showOverlayPresence(closingOverlay.overlay, { isInstant })\n return true\n }\n const existing = this._overlays.get(level)\n if (existing) {\n existing.api.open()\n showOverlayPresence(existing.overlay, { isInstant })\n return false\n }\n this._buildOverlay(level, isInstant)\n return false\n }\n\n private _buildOverlay(level: number, isInstant = false) {\n const overlay = createMenuPortalOverlay('dropdown-overlay')\n overlay.setAttribute('role', 'menu')\n overlay.dataset.level = String(level)\n overlay.addEventListener('click', this._onMenuClick)\n overlay.addEventListener('keydown', this._onKeydown)\n\n const scroll = document.createElement('div')\n scroll.className = 'dropdown-scroll'\n overlay.appendChild(scroll)\n\n const anchor = level === 0 ? this._queryTriggerAnchor() : this._getSubmenuTriggerAnchor(level - 1)\n\n if (anchor) {\n const ctrl = withOverlay.make({\n anchor,\n overlay,\n placement: level === 0 ? this.placement : 'right-start',\n offset: level === 0 ? this.offset : 0,\n matchWidth: level === 0 ? this.matchWidth : false,\n strategy: 'fixed'\n })\n this._overlays.set(level, { api: ctrl, overlay })\n if (level === 0) this._populateLevel0()\n ctrl.open()\n showOverlayPresence(overlay, { isInstant })\n }\n }\n\n private _disposeOverlay(level: number) {\n const overlay = this._overlays.get(level)?.overlay\n overlay?.removeEventListener('click', this._onMenuClick)\n overlay?.removeEventListener('keydown', this._onKeydown)\n overlay?.remove()\n this._overlays.get(level)?.api.dispose()\n this._overlays.delete(level)\n }\n\n private _disposeAll() {\n for (const level of this._overlays.keys()) {\n this._disposeOverlay(level)\n }\n }\n\n private async _closeSubmenuAfterPresence(overlay: MenuOverlay, parentItem: HTMLElement) {\n if (!(await hideOverlayPresence(overlay.overlay))) return\n if (this._closingSubmenuOverlays.get(parentItem) !== overlay) return\n\n this._closingSubmenuOverlays.delete(parentItem)\n this._restoreSubmenuItems(overlay.overlay, parentItem)\n overlay.api.dispose()\n overlay.overlay.remove()\n }\n\n private _disposeClosingSubmenuOverlays() {\n this._closingSubmenuOverlays.forEach((overlay, parentItem) => {\n this._restoreSubmenuItems(overlay.overlay, parentItem)\n overlay.api.dispose()\n overlay.overlay.remove()\n })\n this._closingSubmenuOverlays.clear()\n }\n\n private _restoreSubmenuItems(overlay: HTMLElement, parentItem: HTMLElement) {\n const scroll = overlay.querySelector<HTMLElement>('.dropdown-scroll')\n if (!scroll) return\n Array.from(scroll.children).forEach(child => parentItem.appendChild(child))\n }\n\n private _syncScrollLock(isOpen = this.open) {\n const shouldLock = isOpen && this.lockScroll\n if (shouldLock === this._hasScrollLock) return\n\n if (shouldLock) lockScroll()\n else unlockScroll()\n this._hasScrollLock = shouldLock\n }\n\n private _queryTriggerAnchor(): HTMLElement | null {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"trigger\"]')\n const el = slot?.assignedElements()[0]\n return el instanceof HTMLElement ? el : null\n }\n\n private _getSubmenuTriggerAnchor(level: number): HTMLElement | null {\n const idx = this._activePath[level]\n if (idx === undefined) return null\n const items = this._getLevelItems(level)\n const item = items[idx]\n if (!item) return null\n return item.shadowRoot?.querySelector('.item-inner') ?? item\n }\n\n private _onTriggerClick = (event: MouseEvent) => {\n if (this.disabled) return\n if (this.open) {\n this.closeAll()\n } else {\n this._openMenu(event.detail === 0)\n }\n }\n\n private _onClickOutside = (e: MouseEvent) => {\n if (!this.isOpen || this._ignoreOutsideClick) return\n if (this._isInsideShadowRoot(e)) return\n this.closeAll()\n }\n\n private _onMenuClick = (e: MouseEvent) => {\n const item = e\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.matches('web-ui-dropdown-item'))\n if (!item || item.hasAttribute('disabled') || !item.hasAttribute('submenu')) return\n\n const level = this._getFocusedLevel(item)\n if (level === undefined) return\n const itemIndex = this._getLevelItems(level).indexOf(item)\n if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex, e.detail === 0)\n }\n\n private _onKeydown = (e: KeyboardEvent) => {\n if (this.disabled || !this.open) return\n\n if (e.key === 'Escape' && e.target === this) {\n if (this._activePath.length > 0) this._closeSubmenuFrom(this._activePath.length)\n else this.closeAll()\n e.preventDefault()\n return\n }\n\n const focused = this._getFocusedItem(e)\n const level = this._getFocusedLevel(focused)\n if (level === undefined) return\n const items = this._getEnabledLevelItems(level)\n const currentIndex = focused ? items.indexOf(focused) : -1\n\n switch (e.key) {\n case 'ArrowDown':\n this._focusMenuItem(items[(currentIndex + 1 + items.length) % items.length])\n break\n case 'ArrowUp':\n this._focusMenuItem(items[(currentIndex - 1 + items.length) % items.length])\n break\n case 'Home':\n this._focusMenuItem(items[0])\n break\n case 'End':\n this._focusMenuItem(items.at(-1))\n break\n case 'ArrowRight':\n if (focused?.hasAttribute('submenu')) {\n const itemIndex = this._getLevelItems(level).indexOf(focused)\n this._toggleSubmenu(level, itemIndex, true)\n requestAnimationFrame(() =>\n requestAnimationFrame(() => this._focusMenuItem(this._getEnabledLevelItems(level + 1)[0]))\n )\n }\n break\n case 'ArrowLeft':\n if (level > 0) {\n this._closeSubmenuFrom(level)\n this._focusMenuItem(this._getLevelItems(level - 1)[this._activePath[level - 1]])\n }\n break\n case 'Enter':\n case ' ':\n focused?.click()\n break\n case 'Escape':\n if (this._activePath.length > 0) this._closeSubmenuFrom(this._activePath.length)\n else this.closeAll()\n break\n default:\n return\n }\n e.preventDefault()\n e.stopPropagation()\n }\n\n private _getEnabledLevelItems(level: number) {\n return this._getLevelItems(level).filter(item => item.matches('web-ui-dropdown-item:not([disabled])'))\n }\n\n private _getFocusedItem(event?: KeyboardEvent): HTMLElement | undefined {\n const eventItem = event\n ?.composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.matches('web-ui-dropdown-item'))\n if (eventItem) return eventItem\n\n return [...this._overlays.values()]\n .flatMap(({ overlay }) => Array.from(overlay.querySelectorAll<HTMLElement>('web-ui-dropdown-item')))\n .find(item => Boolean(item.shadowRoot?.activeElement))\n }\n\n private _getFocusedLevel(item = this._getFocusedItem()): number | undefined {\n if (!item) return undefined\n const overlay = [...this._overlays.entries()].find(([, value]) => value.overlay.contains(item))\n return overlay?.[0]\n }\n\n private _focusMenuItem(item: HTMLElement | undefined) {\n if (!item || item.hasAttribute('disabled')) return\n const focusable = item as HTMLElement & { focusItem?: () => void }\n focusable.focusItem?.()\n }\n\n private _isInsideShadowRoot(e: MouseEvent): boolean {\n for (const node of e.composedPath()) {\n if (node === this || node === this.shadowRoot) return true\n if (node instanceof Node && node.getRootNode() === this.shadowRoot) return true\n if (node instanceof Node && [...this._overlays.values()].some(({ overlay }) => overlay.contains(node)))\n return true\n }\n return false\n }\n\n private _ignoreCurrentOutsideClick() {\n this._ignoreOutsideClick = true\n clearTimeout(this._ignoreOutsideClickTimer)\n this._ignoreOutsideClickTimer = setTimeout(() => {\n this._ignoreOutsideClick = false\n })\n }\n\n private _bindLevelHovers() {\n this._hoverCleanupFns.forEach(fn => fn())\n this._hoverCleanupFns.length = 0\n\n const maxLevel = this._activePath.length + 1\n for (let lv = 0; lv <= maxLevel; lv++) {\n const items = this._getLevelItems(lv)\n if (!items.length) continue\n items.forEach((item, idx) => {\n if (!item.matches('web-ui-dropdown-item') || item.hasAttribute('disabled')) return\n const handler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return\n clearTimeout(this._openTimer)\n if (item.hasAttribute('submenu')) {\n if (this._activePath[lv] !== idx) {\n this._openTimer = setTimeout(() => this._toggleSubmenu(lv, idx), 200)\n }\n } else if (this._activePath.length > lv) {\n this._closeSubmenuFrom(lv + 1)\n }\n }\n item.addEventListener('pointerenter', handler, { passive: true })\n this._hoverCleanupFns.push(() => item.removeEventListener('pointerenter', handler))\n })\n }\n }\n\n private _bindHoversAfterUpdate() {\n requestAnimationFrame(() => this._bindLevelHovers())\n }\n\n override render() {\n return html`\n <div class=\"dropdown-trigger\" @click=${this._onTriggerClick}>\n <slot name=\"trigger\"></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-dropdown': WebUiDropdown\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ //#region src/components/dropdown/style.css?inline
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{-webkit-user-select:none;user-select:none;display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}:host([disabled]) .dropdown-trigger{cursor:not-allowed;cursor:pointer;display:inline-flex}.dropdown-overlay{--wui-glass-shadow:var(--wui-shadow-pop,0 3px 9px #00000045);-webkit-user-select:none;user-select:none;z-index:var(--wui-layer-menu,100);box-sizing:border-box;background-color:var(--wui-color-surface-overlay,#f6f6f6e0);border-radius:20px;position:fixed}.dropdown-scroll{min-width:200px;max-height:320px;padding:4px;overflow-y:auto}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dropdown/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n user-select: none;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n:host([disabled]) .dropdown-trigger {\n cursor: not-allowed;\n cursor: pointer;\n display: inline-flex;\n}\n\n.dropdown-overlay {\n --wui-glass-shadow: var(--wui-shadow-pop, 0 3px 9px rgb(0 0 0 / 0.27));\n user-select: none;\n\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n\n box-sizing: border-box;\n border-radius: 20px;\n\n background-color: var(--wui-color-surface-overlay, rgb(246 246 246 / 0.88));\n}\n\n.dropdown-scroll {\n overflow-y: auto;\n min-width: 200px;\n max-height: 320px;\n padding: 4px;\n}\n"],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class WebUiDropdownDivider extends LitElement {
3
+ static styles: import('lit').CSSResult;
4
+ render(): import('lit').TemplateResult<1>;
5
+ readonly $events: Record<string, never>;
6
+ }
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'web-ui-dropdown-divider': WebUiDropdownDivider;
10
+ }
11
+ }
@@ -0,0 +1,18 @@
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
+ import t from "./style.js";
3
+ import { LitElement as n, html as r, unsafeCSS as i } from "lit";
4
+ import { customElement as a } from "lit/decorators.js";
5
+ //#region src/components/dropdown-divider/index.ts
6
+ var o = class extends n {
7
+ static {
8
+ this.styles = i(t);
9
+ }
10
+ render() {
11
+ return r`<div class="divider" role="separator"></div>`;
12
+ }
13
+ };
14
+ o = e([a("web-ui-dropdown-divider")], o);
15
+ //#endregion
16
+ export { o as WebUiDropdownDivider };
17
+
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dropdown-divider/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-dropdown-divider')\nexport class WebUiDropdownDivider extends LitElement {\n static override styles = unsafeCSS(style)\n\n override render() {\n return html`<div class=\"divider\" role=\"separator\"></div>`\n }\n\n declare readonly $events: Record<string, never>\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-dropdown-divider': WebUiDropdownDivider\n }\n}\n"],"mappings":";;;;;AAMO,IAAM,IAAN,cAAmC,EAAW;;EAC1B,KAAA,SAAA,EAAU,CAAK;;CAExC,SAAkB;EAChB,OAAO,CAAI;CACb;AAGF;AATC,IAAA,EAAA,CAAA,EAAc,yBAAyB,CAAA,GAAA,CAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/components/dropdown-divider/style.css?inline
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{-webkit-user-select:none;user-select:none;display:block}.divider{background-color:var(--wui-color-border,#0000001a);height:1px;margin:4px 8px}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dropdown-divider/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n user-select: none;\n display: block;\n}\n\n.divider {\n height: 1px;\n margin: 4px 8px;\n background-color: var(--wui-color-border, rgb(0 0 0 / 0.1));\n}\n"],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class WebUiDropdownHeader extends LitElement {
3
+ static styles: import('lit').CSSResult;
4
+ render(): import('lit').TemplateResult<1>;
5
+ readonly $events: Record<string, never>;
6
+ }
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'web-ui-dropdown-header': WebUiDropdownHeader;
10
+ }
11
+ }
@@ -0,0 +1,18 @@
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
+ import t from "./style.js";
3
+ import { LitElement as n, html as r, unsafeCSS as i } from "lit";
4
+ import { customElement as a } from "lit/decorators.js";
5
+ //#region src/components/dropdown-header/index.ts
6
+ var o = class extends n {
7
+ static {
8
+ this.styles = i(t);
9
+ }
10
+ render() {
11
+ return r`<div class="header"><slot></slot></div>`;
12
+ }
13
+ };
14
+ o = e([a("web-ui-dropdown-header")], o);
15
+ //#endregion
16
+ export { o as WebUiDropdownHeader };
17
+
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dropdown-header/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-dropdown-header')\nexport class WebUiDropdownHeader extends LitElement {\n static override styles = unsafeCSS(style)\n\n override render() {\n return html`<div class=\"header\"><slot></slot></div>`\n }\n\n declare readonly $events: Record<string, never>\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-dropdown-header': WebUiDropdownHeader\n }\n}\n"],"mappings":";;;;;AAMO,IAAM,IAAN,cAAkC,EAAW;;EACzB,KAAA,SAAA,EAAU,CAAK;;CAExC,SAAkB;EAChB,OAAO,CAAI;CACb;AAGF;AATC,IAAA,EAAA,CAAA,EAAc,wBAAwB,CAAA,GAAA,CAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/components/dropdown-header/style.css?inline
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{display:block}.header{-webkit-user-select:none;user-select:none;color:#0006;padding:8px 12px 4px;font-size:11px;font-weight:600}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dropdown-header/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n.header {\n user-select: none;\n\n padding: 8px 12px 4px;\n\n font-size: 11px;\n font-weight: 600;\n color: rgb(0 0 0 / 0.4);\n}\n"],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class WebUiDropdownItem extends LitElement {
3
+ static styles: import('lit').CSSResult;
4
+ disabled: boolean;
5
+ pl: string;
6
+ value: string;
7
+ submenu: boolean;
8
+ /** 通过可见元素聚焦,避免 portal 菜单跨 Shadow DOM 时丢失焦点。 */
9
+ focusItem(): void;
10
+ render(): import('lit').TemplateResult<1>;
11
+ readonly $events: Record<string, never>;
12
+ }
13
+ declare global {
14
+ interface HTMLElementTagNameMap {
15
+ 'web-ui-dropdown-item': WebUiDropdownItem;
16
+ }
17
+ }
@@ -0,0 +1,44 @@
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
+ import "../icon/index.js";
3
+ import t from "../../icons/generated/lucide-chevron-right.js";
4
+ import n from "./style.js";
5
+ import { LitElement as r, html as i, unsafeCSS as a } from "lit";
6
+ import { customElement as o, property as s } from "lit/decorators.js";
7
+ //#region src/components/dropdown-item/index.ts
8
+ var c = class extends r {
9
+ constructor(...e) {
10
+ super(...e), this.disabled = !1, this.pl = "", this.value = "", this.submenu = !1;
11
+ }
12
+ static {
13
+ this.styles = a(n);
14
+ }
15
+ focusItem() {
16
+ this.shadowRoot?.querySelector(".item-inner")?.focus();
17
+ }
18
+ render() {
19
+ return i`
20
+ <div class="item-inner" style=${this.pl ? `padding-left: ${this.pl}` : ""} role="menuitem" tabindex=${this.disabled ? "-1" : "0"}>
21
+ <slot name="prefix"></slot>
22
+ <span class="item-label"><slot></slot></span>
23
+ ${this.submenu ? i`<web-ui-icon .icon=${t}></web-ui-icon>` : i`<span class="item-suffix"><slot name="suffix"></slot></span>`}
24
+ </div>
25
+ `;
26
+ }
27
+ };
28
+ e([s({
29
+ type: Boolean,
30
+ reflect: !0
31
+ })], c.prototype, "disabled", void 0), e([s({
32
+ type: String,
33
+ reflect: !0
34
+ })], c.prototype, "pl", void 0), e([s({
35
+ type: String,
36
+ reflect: !0
37
+ })], c.prototype, "value", void 0), e([s({
38
+ type: Boolean,
39
+ reflect: !0
40
+ })], c.prototype, "submenu", void 0), c = e([o("web-ui-dropdown-item")], c);
41
+ //#endregion
42
+ export { c as WebUiDropdownItem };
43
+
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dropdown-item/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport '@/components/icon'\nimport { lucideChevronRight } from '@/icons'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-dropdown-item')\nexport class WebUiDropdownItem extends LitElement {\n static override styles = unsafeCSS(style)\n\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: String, reflect: true }) pl = ''\n @property({ type: String, reflect: true }) value = ''\n @property({ type: Boolean, reflect: true }) submenu = false\n\n /** 通过可见元素聚焦,避免 portal 菜单跨 Shadow DOM 时丢失焦点。 */\n focusItem() {\n this.shadowRoot?.querySelector<HTMLElement>('.item-inner')?.focus()\n }\n\n override render() {\n const plStyle = this.pl ? `padding-left: ${this.pl}` : ''\n return html`\n <div class=\"item-inner\" style=${plStyle} role=\"menuitem\" tabindex=${this.disabled ? '-1' : '0'}>\n <slot name=\"prefix\"></slot>\n <span class=\"item-label\"><slot></slot></span>\n ${this.submenu\n ? html`<web-ui-icon .icon=${lucideChevronRight}></web-ui-icon>`\n : html`<span class=\"item-suffix\"><slot name=\"suffix\"></slot></span>`}\n </div>\n `\n }\n\n declare readonly $events: Record<string, never>\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-dropdown-item': WebUiDropdownItem\n }\n}\n"],"mappings":";;;;;;;AASO,IAAM,IAAN,cAAgC,EAAW;;EAMM,aAHC,KAAA,WAAA,IACP,KAAA,KAAA,IACG,KAAA,QAAA,IACG,KAAA,UAAA;;;EAL7B,KAAA,SAAA,EAAU,CAAK;;CAQxC,YAAY;EACV,KAAK,YAAY,cAA2B,aAAa,CAAC,EAAE,MAAM;CACpE;CAEA,SAAkB;EAEhB,OAAO,CAAI;sCADK,KAAK,KAAK,iBAAiB,KAAK,OAAO,GAEb,4BAA4B,KAAK,WAAW,OAAO,IAAI;;;UAG3F,KAAK,UACH,CAAI,sBAAsB,EAAmB,mBAC7C,CAAI,+DAA+D;;;CAG7E;AAGF;AAxBG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GACzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,MAAA,KAAA,CAAA,GACxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GACxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA,GAP3C,IAAA,EAAA,CAAA,EAAc,sBAAsB,CAAA,GAAA,CAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/components/dropdown-item/style.css?inline
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{display:block}:host([disabled]){cursor:not-allowed;opacity:.4}.item-inner{-webkit-user-select:none;user-select:none;height:32px;font-size:var(--wui-font-size,14px);color:inherit;white-space:nowrap;transition:color var(--wui-duration-fast,.16s) ease, background-color var(--wui-duration-fast,.16s) ease;border-radius:2147483647px;outline:none;align-items:center;gap:8px;padding:0 12px;display:flex}.item-inner:focus-visible{color:var(--wui-color-on-accent,#fff);background:var(--wui-color-accent,#08f)}:host([active]) .item-inner{color:inherit;background:var(--wui-color-border,#0000001a)}@media (hover:hover) and (pointer:fine){:host(:hover) .item-inner{color:var(--wui-color-on-accent,#fff);background:var(--wui-color-accent,#08f)}}.item-label{min-width:0;color:inherit;text-overflow:ellipsis;flex:1;overflow:hidden}.item-suffix{opacity:.4;flex:none}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dropdown-item/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.item-inner {\n user-select: none;\n\n display: flex;\n gap: 8px;\n align-items: center;\n\n height: 32px;\n padding: 0 12px;\n border-radius: calc(infinity * 1px);\n\n font-size: var(--wui-font-size, 14px);\n color: inherit;\n white-space: nowrap;\n\n outline: none;\n\n transition:\n color var(--wui-duration-fast, 160ms) ease,\n background-color var(--wui-duration-fast, 160ms) ease;\n}\n\n.item-inner:focus-visible {\n color: var(--wui-color-on-accent, #fff);\n background: var(--wui-color-accent, #08f);\n}\n\n:host([active]) .item-inner {\n color: inherit;\n background: var(--wui-color-border, rgb(0 0 0 / 0.1));\n}\n\n@media (hover: hover) and (pointer: fine) {\n :host(:hover) .item-inner {\n color: var(--wui-color-on-accent, #fff);\n background: var(--wui-color-accent, #08f);\n }\n}\n\n.item-label {\n overflow: hidden;\n flex: 1;\n\n min-width: 0;\n\n color: inherit;\n text-overflow: ellipsis;\n}\n\n.item-suffix {\n flex: none;\n opacity: 0.4;\n}\n"],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { LitElement } from 'lit';
2
+ export type EmptySize = 'small' | 'medium' | 'large';
3
+ export declare class WebUiEmpty extends LitElement {
4
+ static styles: import('lit').CSSResult[];
5
+ title: string;
6
+ description: string;
7
+ set size(value: string);
8
+ get size(): EmptySize;
9
+ private _size;
10
+ private _hasTitleSlot;
11
+ private _hasDescriptionSlot;
12
+ private _hasActionSlot;
13
+ connectedCallback(): void;
14
+ private _syncSlotContent;
15
+ private _hasAssignedContent;
16
+ render(): import('lit').TemplateResult<1>;
17
+ readonly $events: Record<string, never>;
18
+ }
19
+ declare global {
20
+ interface HTMLElementTagNameMap {
21
+ 'web-ui-empty': WebUiEmpty;
22
+ }
23
+ }