luxen-ui 0.7.0 → 0.9.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 (345) hide show
  1. package/bin/cli.mjs +189 -18
  2. package/cdn/chunks/decorate.js +1 -1
  3. package/cdn/chunks/floating-ui.dom.js +1 -1
  4. package/cdn/chunks/floating-ui.dom.js.map +1 -1
  5. package/cdn/chunks/lit-html.js +3 -0
  6. package/cdn/chunks/lit-html.js.map +1 -0
  7. package/cdn/chunks/lit.js +1 -2
  8. package/cdn/chunks/lit.js.map +1 -1
  9. package/cdn/chunks/static-html.js +2 -0
  10. package/cdn/chunks/static-html.js.map +1 -0
  11. package/cdn/custom-elements.json +3174 -16266
  12. package/cdn/elements/avatar/avatar.d.ts +13 -0
  13. package/cdn/elements/avatar/avatar.d.ts.map +1 -1
  14. package/cdn/elements/avatar/avatar.js +8 -8
  15. package/cdn/elements/avatar/avatar.js.map +1 -1
  16. package/cdn/elements/button/button.meta.d.ts +33 -0
  17. package/cdn/elements/button/button.meta.d.ts.map +1 -0
  18. package/cdn/elements/button/button.meta.js +0 -0
  19. package/cdn/elements/button-group/button-group.d.ts +33 -0
  20. package/cdn/elements/button-group/button-group.d.ts.map +1 -0
  21. package/cdn/elements/button-group/button-group.js +2 -0
  22. package/cdn/elements/button-group/button-group.js.map +1 -0
  23. package/cdn/elements/button-group/index.d.ts +2 -0
  24. package/cdn/elements/button-group/index.d.ts.map +1 -0
  25. package/cdn/elements/button-group/index.js +2 -0
  26. package/cdn/elements/button-group/index.js.map +1 -0
  27. package/cdn/elements/carousel/carousel.d.ts +6 -0
  28. package/cdn/elements/carousel/carousel.d.ts.map +1 -1
  29. package/cdn/elements/carousel/carousel.js +5 -5
  30. package/cdn/elements/carousel/carousel.js.map +1 -1
  31. package/cdn/elements/carousel-item/carousel-item.d.ts +2 -0
  32. package/cdn/elements/carousel-item/carousel-item.d.ts.map +1 -1
  33. package/cdn/elements/carousel-item/carousel-item.js +1 -1
  34. package/cdn/elements/carousel-item/carousel-item.js.map +1 -1
  35. package/cdn/elements/checkbox/checkbox.meta.d.ts +31 -0
  36. package/cdn/elements/checkbox/checkbox.meta.d.ts.map +1 -0
  37. package/cdn/elements/checkbox/checkbox.meta.js +0 -0
  38. package/cdn/elements/close-button/close-button.meta.d.ts +24 -0
  39. package/cdn/elements/close-button/close-button.meta.d.ts.map +1 -0
  40. package/cdn/elements/close-button/close-button.meta.js +0 -0
  41. package/cdn/elements/dialog/dialog.d.ts +12 -6
  42. package/cdn/elements/dialog/dialog.d.ts.map +1 -1
  43. package/cdn/elements/dialog/dialog.js +8 -5
  44. package/cdn/elements/dialog/dialog.js.map +1 -1
  45. package/cdn/elements/dialog/dialog.styles.js +1 -1
  46. package/cdn/elements/dialog/dialog.styles.js.map +1 -1
  47. package/cdn/elements/disclosure/disclosure.meta.d.ts +28 -0
  48. package/cdn/elements/disclosure/disclosure.meta.d.ts.map +1 -0
  49. package/cdn/elements/disclosure/disclosure.meta.js +0 -0
  50. package/cdn/elements/divider/divider.d.ts +1 -1
  51. package/cdn/elements/divider/divider.js.map +1 -1
  52. package/cdn/elements/drawer/drawer.d.ts +5 -0
  53. package/cdn/elements/drawer/drawer.d.ts.map +1 -1
  54. package/cdn/elements/drawer/drawer.js +1 -1
  55. package/cdn/elements/drawer/drawer.js.map +1 -1
  56. package/cdn/elements/dropdown/dropdown.d.ts +11 -1
  57. package/cdn/elements/dropdown/dropdown.d.ts.map +1 -1
  58. package/cdn/elements/dropdown/dropdown.js +2 -2
  59. package/cdn/elements/dropdown/dropdown.js.map +1 -1
  60. package/cdn/elements/dropdown-item/dropdown-item.d.ts +2 -0
  61. package/cdn/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  62. package/cdn/elements/dropdown-item/dropdown-item.js +5 -5
  63. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  64. package/cdn/elements/dropdown-label/dropdown-label.d.ts +17 -0
  65. package/cdn/elements/dropdown-label/dropdown-label.d.ts.map +1 -0
  66. package/cdn/elements/dropdown-label/dropdown-label.js +4 -0
  67. package/cdn/elements/dropdown-label/dropdown-label.js.map +1 -0
  68. package/cdn/elements/dropdown-label/index.d.ts +2 -0
  69. package/cdn/elements/dropdown-label/index.d.ts.map +1 -0
  70. package/cdn/elements/dropdown-label/index.js +2 -0
  71. package/cdn/elements/dropdown-label/index.js.map +1 -0
  72. package/cdn/elements/form-field/form-field.d.ts +62 -0
  73. package/cdn/elements/form-field/form-field.d.ts.map +1 -0
  74. package/cdn/elements/form-field/form-field.js +2 -0
  75. package/cdn/elements/form-field/form-field.js.map +1 -0
  76. package/cdn/elements/form-field/index.d.ts +2 -0
  77. package/cdn/elements/form-field/index.d.ts.map +1 -0
  78. package/cdn/elements/form-field/index.js +2 -0
  79. package/cdn/elements/form-field/index.js.map +1 -0
  80. package/cdn/elements/icon/icon.js +1 -1
  81. package/cdn/elements/icon/icon.js.map +1 -1
  82. package/cdn/elements/input-otp/input-otp.d.ts +2 -0
  83. package/cdn/elements/input-otp/input-otp.d.ts.map +1 -1
  84. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  85. package/cdn/elements/input-stepper/input-stepper.d.ts +2 -0
  86. package/cdn/elements/input-stepper/input-stepper.d.ts.map +1 -1
  87. package/cdn/elements/input-stepper/input-stepper.js +1 -1
  88. package/cdn/elements/input-stepper/input-stepper.js.map +1 -1
  89. package/cdn/elements/kbd/kbd.meta.d.ts +14 -0
  90. package/cdn/elements/kbd/kbd.meta.d.ts.map +1 -0
  91. package/cdn/elements/kbd/kbd.meta.js +0 -0
  92. package/cdn/elements/popover/popover.js +2 -2
  93. package/cdn/elements/popover/popover.js.map +1 -1
  94. package/cdn/elements/progress/progress.meta.d.ts +22 -0
  95. package/cdn/elements/progress/progress.meta.d.ts.map +1 -0
  96. package/cdn/elements/progress/progress.meta.js +0 -0
  97. package/cdn/elements/prose-editor/prose-editor.d.ts +12 -1
  98. package/cdn/elements/prose-editor/prose-editor.d.ts.map +1 -1
  99. package/cdn/elements/prose-editor/prose-editor.js +42 -42
  100. package/cdn/elements/prose-editor/prose-editor.js.map +1 -1
  101. package/cdn/elements/rating/rating.d.ts +2 -0
  102. package/cdn/elements/rating/rating.d.ts.map +1 -1
  103. package/cdn/elements/rating/rating.js +5 -5
  104. package/cdn/elements/rating/rating.js.map +1 -1
  105. package/cdn/elements/select/select.meta.d.ts +28 -0
  106. package/cdn/elements/select/select.meta.d.ts.map +1 -0
  107. package/cdn/elements/select/select.meta.js +0 -0
  108. package/cdn/elements/skeleton/skeleton.d.ts +3 -0
  109. package/cdn/elements/skeleton/skeleton.d.ts.map +1 -1
  110. package/cdn/elements/skeleton/skeleton.js.map +1 -1
  111. package/cdn/elements/spinner/spinner.js +1 -1
  112. package/cdn/elements/spinner/spinner.js.map +1 -1
  113. package/cdn/elements/sticky-bar/sticky-bar.js +1 -1
  114. package/cdn/elements/sticky-bar/sticky-bar.js.map +1 -1
  115. package/cdn/elements/stories-viewer/stories-viewer.d.ts +1 -1
  116. package/cdn/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  117. package/cdn/elements/stories-viewer/stories-viewer.js +27 -27
  118. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -1
  119. package/cdn/elements/story/story.d.ts +10 -1
  120. package/cdn/elements/story/story.d.ts.map +1 -1
  121. package/cdn/elements/story/story.js +20 -20
  122. package/cdn/elements/story/story.js.map +1 -1
  123. package/cdn/elements/toast/toast.d.ts +5 -0
  124. package/cdn/elements/toast/toast.d.ts.map +1 -1
  125. package/cdn/elements/toast/toast.js.map +1 -1
  126. package/cdn/elements/tooltip/tooltip.js +2 -2
  127. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  128. package/cdn/elements/tree/tree.d.ts +2 -0
  129. package/cdn/elements/tree/tree.d.ts.map +1 -1
  130. package/cdn/elements/tree/tree.js +1 -1
  131. package/cdn/elements/tree/tree.js.map +1 -1
  132. package/cdn/elements/tree-item/tree-item.d.ts +2 -0
  133. package/cdn/elements/tree-item/tree-item.d.ts.map +1 -1
  134. package/cdn/elements/tree-item/tree-item.js +6 -6
  135. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  136. package/cdn/registry.d.ts +1 -1
  137. package/cdn/registry.d.ts.map +1 -1
  138. package/cdn/registry.js.map +1 -1
  139. package/cdn/shared/controllers/has-slot-controller.d.ts +37 -0
  140. package/cdn/shared/controllers/has-slot-controller.d.ts.map +1 -0
  141. package/cdn/shared/controllers/has-slot-controller.js +2 -0
  142. package/cdn/shared/controllers/has-slot-controller.js.map +1 -0
  143. package/cdn/shared/controllers/popover.d.ts +2 -0
  144. package/cdn/shared/controllers/popover.d.ts.map +1 -1
  145. package/cdn/shared/controllers/popover.js +1 -1
  146. package/cdn/shared/controllers/popover.js.map +1 -1
  147. package/cdn/shared/styles/checkbox-appearance.styles.d.ts +9 -0
  148. package/cdn/shared/styles/checkbox-appearance.styles.d.ts.map +1 -0
  149. package/cdn/shared/styles/checkbox-appearance.styles.js +2 -0
  150. package/cdn/shared/styles/checkbox-appearance.styles.js.map +1 -0
  151. package/cdn/shared/styles/host.styles.js +1 -1
  152. package/cdn/standalone.css +337 -9
  153. package/cdn/standalone.js +513 -46
  154. package/cdn/standalone.js.map +1 -1
  155. package/cdn/static-tag.d.ts +17 -0
  156. package/cdn/static-tag.d.ts.map +1 -0
  157. package/cdn/static-tag.js +2 -0
  158. package/cdn/static-tag.js.map +1 -0
  159. package/cdn/styles/elements/button-group.css +88 -0
  160. package/cdn/styles/elements/button.css +7 -2
  161. package/cdn/styles/elements/checkbox.css +101 -0
  162. package/cdn/styles/elements/form-field.css +67 -0
  163. package/cdn/styles/elements/input-stepper/default.css +10 -4
  164. package/cdn/styles/elements/input-stepper/rounded.css +9 -3
  165. package/cdn/styles/preset.css +49 -0
  166. package/cdn/styles/tokens/forms.css +52 -0
  167. package/cdn/styles/tokens.css +49 -0
  168. package/dist/css/elements/button-group.css +88 -0
  169. package/dist/css/elements/button.css +7 -2
  170. package/dist/css/elements/checkbox.css +101 -0
  171. package/dist/css/elements/form-field.css +67 -0
  172. package/dist/css/elements/input-stepper/default.css +10 -4
  173. package/dist/css/elements/input-stepper/rounded.css +9 -3
  174. package/dist/css/preset.css +49 -0
  175. package/dist/css/tokens/forms.css +52 -0
  176. package/dist/css/tokens.css +49 -0
  177. package/dist/custom-elements.json +3174 -16266
  178. package/dist/elements/avatar/avatar.css +37 -10
  179. package/dist/elements/avatar/avatar.d.ts +13 -0
  180. package/dist/elements/avatar/avatar.d.ts.map +1 -1
  181. package/dist/elements/avatar/avatar.js +14 -1
  182. package/dist/elements/button/button.meta.d.ts +33 -0
  183. package/dist/elements/button/button.meta.d.ts.map +1 -0
  184. package/dist/elements/button/button.meta.js +44 -0
  185. package/dist/elements/button-group/button-group.d.ts +33 -0
  186. package/dist/elements/button-group/button-group.d.ts.map +1 -0
  187. package/dist/elements/button-group/button-group.js +57 -0
  188. package/dist/elements/button-group/index.d.ts +2 -0
  189. package/dist/elements/button-group/index.d.ts.map +1 -0
  190. package/dist/elements/button-group/index.js +4 -0
  191. package/dist/elements/carousel/carousel.d.ts +6 -0
  192. package/dist/elements/carousel/carousel.d.ts.map +1 -1
  193. package/dist/elements/carousel/carousel.js +6 -0
  194. package/dist/elements/carousel-item/carousel-item.d.ts +2 -0
  195. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -1
  196. package/dist/elements/carousel-item/carousel-item.js +2 -0
  197. package/dist/elements/checkbox/checkbox.meta.d.ts +31 -0
  198. package/dist/elements/checkbox/checkbox.meta.d.ts.map +1 -0
  199. package/dist/elements/checkbox/checkbox.meta.js +41 -0
  200. package/dist/elements/close-button/close-button.meta.d.ts +24 -0
  201. package/dist/elements/close-button/close-button.meta.d.ts.map +1 -0
  202. package/dist/elements/close-button/close-button.meta.js +30 -0
  203. package/dist/elements/dialog/dialog.css +15 -0
  204. package/dist/elements/dialog/dialog.d.ts +12 -6
  205. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  206. package/dist/elements/dialog/dialog.js +21 -7
  207. package/dist/elements/disclosure/disclosure.meta.d.ts +28 -0
  208. package/dist/elements/disclosure/disclosure.meta.d.ts.map +1 -0
  209. package/dist/elements/disclosure/disclosure.meta.js +34 -0
  210. package/dist/elements/divider/divider.d.ts +1 -1
  211. package/dist/elements/divider/divider.js +1 -1
  212. package/dist/elements/drawer/drawer.d.ts +5 -0
  213. package/dist/elements/drawer/drawer.d.ts.map +1 -1
  214. package/dist/elements/drawer/drawer.js +5 -0
  215. package/dist/elements/dropdown/dropdown.css +0 -1
  216. package/dist/elements/dropdown/dropdown.d.ts +11 -1
  217. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  218. package/dist/elements/dropdown/dropdown.js +23 -4
  219. package/dist/elements/dropdown-item/dropdown-item.d.ts +2 -0
  220. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  221. package/dist/elements/dropdown-item/dropdown-item.js +2 -0
  222. package/dist/elements/dropdown-label/dropdown-label.css +18 -0
  223. package/dist/elements/dropdown-label/dropdown-label.d.ts +17 -0
  224. package/dist/elements/dropdown-label/dropdown-label.d.ts.map +1 -0
  225. package/dist/elements/dropdown-label/dropdown-label.js +31 -0
  226. package/dist/elements/dropdown-label/index.d.ts +2 -0
  227. package/dist/elements/dropdown-label/index.d.ts.map +1 -0
  228. package/dist/elements/dropdown-label/index.js +4 -0
  229. package/dist/elements/form-field/form-field.d.ts +62 -0
  230. package/dist/elements/form-field/form-field.d.ts.map +1 -0
  231. package/dist/elements/form-field/form-field.js +191 -0
  232. package/dist/elements/form-field/index.d.ts +2 -0
  233. package/dist/elements/form-field/index.d.ts.map +1 -0
  234. package/dist/elements/form-field/index.js +4 -0
  235. package/dist/elements/input-otp/input-otp.d.ts +2 -0
  236. package/dist/elements/input-otp/input-otp.d.ts.map +1 -1
  237. package/dist/elements/input-otp/input-otp.js +2 -0
  238. package/dist/elements/input-stepper/input-stepper.d.ts +2 -0
  239. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -1
  240. package/dist/elements/input-stepper/input-stepper.js +5 -1
  241. package/dist/elements/kbd/kbd.meta.d.ts +14 -0
  242. package/dist/elements/kbd/kbd.meta.d.ts.map +1 -0
  243. package/dist/elements/kbd/kbd.meta.js +20 -0
  244. package/dist/elements/progress/progress.meta.d.ts +22 -0
  245. package/dist/elements/progress/progress.meta.d.ts.map +1 -0
  246. package/dist/elements/progress/progress.meta.js +28 -0
  247. package/dist/elements/prose-editor/prose-editor.d.ts +12 -1
  248. package/dist/elements/prose-editor/prose-editor.d.ts.map +1 -1
  249. package/dist/elements/prose-editor/prose-editor.js +58 -13
  250. package/dist/elements/rating/rating.d.ts +2 -0
  251. package/dist/elements/rating/rating.d.ts.map +1 -1
  252. package/dist/elements/rating/rating.js +2 -0
  253. package/dist/elements/select/select.meta.d.ts +28 -0
  254. package/dist/elements/select/select.meta.d.ts.map +1 -0
  255. package/dist/elements/select/select.meta.js +34 -0
  256. package/dist/elements/skeleton/skeleton.d.ts +3 -0
  257. package/dist/elements/skeleton/skeleton.d.ts.map +1 -1
  258. package/dist/elements/skeleton/skeleton.js +3 -0
  259. package/dist/elements/stories-viewer/stories-viewer.d.ts +1 -1
  260. package/dist/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  261. package/dist/elements/stories-viewer/stories-viewer.js +23 -19
  262. package/dist/elements/story/story.d.ts +10 -1
  263. package/dist/elements/story/story.d.ts.map +1 -1
  264. package/dist/elements/story/story.js +29 -17
  265. package/dist/elements/toast/toast.d.ts +5 -0
  266. package/dist/elements/toast/toast.d.ts.map +1 -1
  267. package/dist/elements/toast/toast.js +5 -0
  268. package/dist/elements/tree/tree.d.ts +2 -0
  269. package/dist/elements/tree/tree.d.ts.map +1 -1
  270. package/dist/elements/tree/tree.js +13 -1
  271. package/dist/elements/tree-item/tree-item.css +6 -12
  272. package/dist/elements/tree-item/tree-item.d.ts +2 -0
  273. package/dist/elements/tree-item/tree-item.d.ts.map +1 -1
  274. package/dist/elements/tree-item/tree-item.js +5 -2
  275. package/dist/metadata/avatar.json +93 -0
  276. package/dist/metadata/badge.json +59 -0
  277. package/dist/metadata/button-group.json +49 -0
  278. package/dist/metadata/button.json +138 -0
  279. package/dist/metadata/carousel-item.json +32 -0
  280. package/dist/metadata/carousel.json +388 -0
  281. package/dist/metadata/checkbox.json +89 -0
  282. package/dist/metadata/close-button.json +90 -0
  283. package/dist/metadata/dialog.json +163 -0
  284. package/dist/metadata/disclosure.json +88 -0
  285. package/dist/metadata/divider.json +65 -0
  286. package/dist/metadata/drawer.json +176 -0
  287. package/dist/metadata/dropdown-item.json +85 -0
  288. package/dist/metadata/dropdown-label.json +37 -0
  289. package/dist/metadata/dropdown.json +165 -0
  290. package/dist/metadata/form-field.json +87 -0
  291. package/dist/metadata/icon.json +49 -0
  292. package/dist/metadata/index.json +4342 -0
  293. package/dist/metadata/input-otp.json +86 -0
  294. package/dist/metadata/input-stepper.json +122 -0
  295. package/dist/metadata/kbd.json +37 -0
  296. package/dist/metadata/popover.json +157 -0
  297. package/dist/metadata/progress.json +71 -0
  298. package/dist/metadata/prose-editor.json +365 -0
  299. package/dist/metadata/rating.json +126 -0
  300. package/dist/metadata/select.json +82 -0
  301. package/dist/metadata/skeleton.json +56 -0
  302. package/dist/metadata/spinner.json +47 -0
  303. package/dist/metadata/sticky-bar.json +93 -0
  304. package/dist/metadata/stories-viewer.json +316 -0
  305. package/dist/metadata/stories.json +109 -0
  306. package/dist/metadata/story.json +148 -0
  307. package/dist/metadata/tabs.json +74 -0
  308. package/dist/metadata/toast.json +122 -0
  309. package/dist/metadata/tooltip.json +144 -0
  310. package/dist/metadata/tree-item.json +199 -0
  311. package/dist/metadata/tree.json +130 -0
  312. package/dist/registry.d.ts +1 -1
  313. package/dist/registry.d.ts.map +1 -1
  314. package/dist/shared/controllers/has-slot-controller.d.ts +37 -0
  315. package/dist/shared/controllers/has-slot-controller.d.ts.map +1 -0
  316. package/dist/shared/controllers/has-slot-controller.js +66 -0
  317. package/dist/shared/controllers/popover.d.ts +2 -0
  318. package/dist/shared/controllers/popover.d.ts.map +1 -1
  319. package/dist/shared/controllers/popover.js +14 -1
  320. package/dist/shared/styles/checkbox-appearance.css +92 -0
  321. package/dist/shared/styles/checkbox-appearance.styles.d.ts +9 -0
  322. package/dist/shared/styles/checkbox-appearance.styles.d.ts.map +1 -0
  323. package/dist/shared/styles/checkbox-appearance.styles.js +9 -0
  324. package/dist/static-tag.d.ts +17 -0
  325. package/dist/static-tag.d.ts.map +1 -0
  326. package/dist/static-tag.js +22 -0
  327. package/dist/templates/elements/avatar.md +30 -31
  328. package/dist/templates/elements/badge.md +9 -15
  329. package/dist/templates/elements/button-group.md +164 -0
  330. package/dist/templates/elements/button.md +39 -51
  331. package/dist/templates/elements/checkbox.md +200 -0
  332. package/dist/templates/elements/close-button.md +24 -36
  333. package/dist/templates/elements/dialog.md +73 -54
  334. package/dist/templates/elements/drawer.md +39 -52
  335. package/dist/templates/elements/form-field.md +115 -0
  336. package/dist/templates/elements/progress.md +13 -23
  337. package/dist/templates/elements/prose-editor.md +71 -76
  338. package/dist/templates/elements/select.md +20 -31
  339. package/dist/templates/elements/sticky-bar.md +16 -60
  340. package/dist/templates/elements/toast.md +33 -53
  341. package/dist/templates/elements/tree.md +46 -74
  342. package/elements.json +73 -1
  343. package/package.json +10 -3
  344. package/templates/SKILL.md.tpl +20 -2
  345. package/templates/integration.md.tpl +1 -1
package/bin/cli.mjs CHANGED
@@ -122,7 +122,7 @@ const DEFAULT_CONFIG = {
122
122
  name: 'luxen-ui',
123
123
  displayName: 'Luxen UI',
124
124
  description:
125
- 'Generate UI with Luxen UI, a CSS-first web component library. Provides CSS classes for native HTML elements and custom elements (l-badge, l-dialog, l-toast). Use when building interfaces with Luxen UI.',
125
+ "Build, edit, migrate, or review UI with Luxen UI, a CSS-first web component library. Provides CSS classes for native HTML elements plus custom elements (l-badge, l-dialog, l-toast). Use whenever a task touches UI in a project using Luxen UI — creating or styling interfaces, editing or refactoring existing components, reviewing UI, or migrating from another component library to Luxen (replacing another library's web components with Luxen elements). Each element has a per-element spec under references/.",
126
126
  // Prefixes use the Vite plugin convention: bare identifier without trailing
127
127
  // dash. `elementPrefix: 'pulse'` means tags are `<pulse-badge>`, type selectors
128
128
  // are `pulse-badge`. `cssPrefix: 'pulse'` controls `.pulse-button` classes,
@@ -133,6 +133,13 @@ const DEFAULT_CONFIG = {
133
133
  jsImportPath: 'luxen-ui',
134
134
  themeCss: null,
135
135
  out: null,
136
+ // Mockup / Claude Design mode is off by default. It produces the heavy
137
+ // standalone bundle (assets/<name>-standalone.{js,css}, ~1.7 MB committed),
138
+ // assets/claude-design.md, references/mockups.md, and the "Mode 2" section in
139
+ // SKILL.md. The common case (integration via npm + bundler, read by Claude
140
+ // Code / Cursor) never needs these, so opt in with `--with-mockups` or
141
+ // `mockups: true` in the config.
142
+ mockups: false,
136
143
  };
137
144
 
138
145
  async function cmdGenerateSkill(args) {
@@ -140,12 +147,22 @@ async function cmdGenerateSkill(args) {
140
147
  const config = await loadConfig(opts.config);
141
148
  const ctx = buildContext(config, opts);
142
149
 
150
+ if (ctx.themeCss && !ctx.mockups) {
151
+ console.warn(
152
+ '⚠ themeCss is only applied to the standalone bundle, which is skipped without --with-mockups. Ignoring it.',
153
+ );
154
+ }
155
+
143
156
  await runGenerateSkill(ctx);
144
157
 
145
158
  console.log(`✓ Skill generated at ${relative(process.cwd(), ctx.outDir)}`);
146
159
  console.log('');
147
160
  console.log('Next steps:');
148
161
  console.log(` • Commit ${ctx.outDir} so AI agents (and the rest of your team) can read it.`);
162
+ if (!ctx.mockups) {
163
+ console.log(' • Mockup / Claude Design assets were skipped (standalone bundle, mockups.md,');
164
+ console.log(' claude-design.md). Re-run with --with-mockups to include them.');
165
+ }
149
166
  console.log(` • Re-run \`luxen-ui generate-skill\` whenever luxen-ui or your tokens change.`);
150
167
  }
151
168
 
@@ -159,6 +176,8 @@ function parseFlags(argv) {
159
176
  else if (arg === '--css-prefix') opts.cssPrefix = argv[++i];
160
177
  else if (arg === '--name') opts.name = argv[++i];
161
178
  else if (arg === '--theme-css') opts.themeCss = argv[++i];
179
+ else if (arg === '--with-mockups') opts.mockups = true;
180
+ else if (arg === '--no-mockups') opts.mockups = false;
162
181
  else if (arg === '-h' || arg === '--help') usageGenerateSkill(0);
163
182
  else {
164
183
  console.error(`✗ Unknown flag: ${arg}`);
@@ -215,8 +234,7 @@ function stripUndefined(obj) {
215
234
  async function runGenerateSkill(ctx) {
216
235
  ensureDir(ctx.outDir);
217
236
  ensureDir(join(ctx.outDir, 'references'));
218
- ensureDir(join(ctx.outDir, 'assets'));
219
- ensureDir(join(ctx.outDir, 'assets', 'css'));
237
+ if (ctx.mockups) ensureDir(join(ctx.outDir, 'assets'));
220
238
 
221
239
  // 1. Read templates (hand-written) and pre-transformed element docs (build).
222
240
  const tplDir = resolve(ctx.pkgRoot, 'templates');
@@ -245,9 +263,11 @@ async function runGenerateSkill(ctx) {
245
263
  elementsTable: buildElementsTable(skillElements, ctx),
246
264
  elementsList: buildElementsList(skillElements),
247
265
  tagsList: buildTagsList(elements.elements),
266
+ // Drives the conditional "Mode 2" section in SKILL.md ({{#mockups}}…).
267
+ mockups: ctx.mockups,
248
268
  };
249
269
 
250
- // 3. Render SKILL.md, integration.md, claude-design.md
270
+ // 3. Render SKILL.md + integration.md (always). claude-design.md is mockup-only.
251
271
  await renderTemplate(join(tplDir, 'SKILL.md.tpl'), join(ctx.outDir, 'SKILL.md'), vars, ctx);
252
272
  await renderTemplate(
253
273
  join(tplDir, 'integration.md.tpl'),
@@ -255,12 +275,14 @@ async function runGenerateSkill(ctx) {
255
275
  vars,
256
276
  ctx,
257
277
  );
258
- await renderTemplate(
259
- join(tplDir, 'claude-design.md.tpl'),
260
- join(ctx.outDir, 'assets', 'claude-design.md'),
261
- vars,
262
- ctx,
263
- );
278
+ if (ctx.mockups) {
279
+ await renderTemplate(
280
+ join(tplDir, 'claude-design.md.tpl'),
281
+ join(ctx.outDir, 'assets', 'claude-design.md'),
282
+ vars,
283
+ ctx,
284
+ );
285
+ }
264
286
 
265
287
  // 4. Per-element references (with prefix + package-name substitution).
266
288
  for (const el of skillElements) {
@@ -271,6 +293,18 @@ async function runGenerateSkill(ctx) {
271
293
  writeFileSync(dst, out, 'utf-8');
272
294
  }
273
295
 
296
+ // 4b. Design-token reference — generated from the shipped token CSS, prefix-
297
+ // substituted (`--l-*` → css prefix; Tailwind utility names pass through).
298
+ writeFileSync(
299
+ join(ctx.outDir, 'references', 'tokens.md'),
300
+ applyPackageName(applyPrefix(buildTokensDoc(ctx), ctx), ctx),
301
+ 'utf-8',
302
+ );
303
+
304
+ // Everything below is mockup / Claude Design mode only — the standalone
305
+ // bundle and the docs that point at it. Skipped unless `--with-mockups`.
306
+ if (!ctx.mockups) return;
307
+
274
308
  // 5. mockups.md — rendered from template (local-assets paths, prefix-aware
275
309
  // since assets/cdn/ has been substituted to the consumer's prefix).
276
310
  await renderTemplate(
@@ -336,8 +370,21 @@ async function renderTemplate(srcPath, dstPath, vars, ctx) {
336
370
  writeFileSync(dstPath, final, 'utf-8');
337
371
  }
338
372
 
373
+ // Minimal Mustache: section blocks plus `{{var}}` substitution.
374
+ // {{#key}}…{{/key}} → kept only when vars[key] is truthy
375
+ // {{^key}}…{{/key}} → kept only when vars[key] is falsy (inverted)
376
+ // Sections don't nest. Stripping a multi-line block leaves a blank-line gap, so
377
+ // 3+ newlines are collapsed to 2 afterwards — safe here because none of the
378
+ // templates rely on triple newlines (verified at authoring time).
339
379
  function applyMustache(content, vars) {
340
- return content.replace(/\{\{(\w+)\}\}/g, (m, key) => (key in vars ? String(vars[key]) : m));
380
+ content = content.replace(/\{\{\^(\w+)\}\}([\s\S]*?)\{\{\/\1\}\}/g, (m, key, inner) =>
381
+ vars[key] ? '' : inner,
382
+ );
383
+ content = content.replace(/\{\{#(\w+)\}\}([\s\S]*?)\{\{\/\1\}\}/g, (m, key, inner) =>
384
+ vars[key] ? inner : '',
385
+ );
386
+ content = content.replace(/\{\{(\w+)\}\}/g, (m, key) => (key in vars ? String(vars[key]) : m));
387
+ return content.replace(/\n{3,}/g, '\n\n');
341
388
  }
342
389
 
343
390
  // Substitutes the npm package name `luxen-ui` with the consumer's name in
@@ -365,6 +412,12 @@ function applyPackageName(content, ctx) {
365
412
  function applyPrefix(content, ctx) {
366
413
  const { elementPrefix: e, cssPrefix: c } = ctx;
367
414
  if (e === 'l' && c === 'l') return content;
415
+ // CSS classes live in `class="…"`. Every `l-` token there is a css-prefix
416
+ // surface regardless of quoting — do this *before* the generic quoted-form
417
+ // rules below, which assume a quoted `l-` is a tag name (true for JS/JSON
418
+ // strings, false for HTML class attributes). Once a class value is rewritten
419
+ // to the css prefix it carries no `l-` token, so the later rules skip it.
420
+ content = applyClassAttrPrefix(content, c);
368
421
  return content
369
422
  .replace(/<l-/g, `<${e}-`)
370
423
  .replace(/<\/l-/g, `</${e}-`)
@@ -381,6 +434,18 @@ function applyPrefix(content, ctx) {
381
434
  .replace(/\nl-/g, `\n${e}-`);
382
435
  }
383
436
 
437
+ // Rewrites every `l-` token inside an HTML `class="…"` / `class='…'` value to
438
+ // the css prefix. Classes are a css-prefix surface (mirrors `.l-` in
439
+ // applyPrefixCss), but in markdown they appear quoted inside class attributes,
440
+ // where applyPrefix's quoted-form rules would otherwise mistake them for tag
441
+ // names. When cssPrefix === 'l' this is a no-op.
442
+ function applyClassAttrPrefix(content, c) {
443
+ return content.replace(
444
+ /class=(["'])(.*?)\1/g,
445
+ (_, q, val) => `class=${q}${val.replace(/\bl-/g, `${c}-`)}${q}`,
446
+ );
447
+ }
448
+
384
449
  // Prefix substitution for CSS files. Three surfaces, two prefixes (mirrors
385
450
  // postcss-plugin-prefix):
386
451
  // - CSS variables `--l-*` → cssPrefix
@@ -445,6 +510,100 @@ function buildElementsList(elements) {
445
510
  return elements.map((e) => e.displayName).join(', ') + '.';
446
511
  }
447
512
 
513
+ // Builds references/tokens.md from the shipped token CSS — a read-only inventory
514
+ // of the design system's semantic surface so an agent uses real tokens instead
515
+ // of improvising values. Two sources:
516
+ // - dist/css/tokens/aliases.css → the `--l-*` custom properties + their
517
+ // descriptions (consumers reference these directly in element CSS knobs).
518
+ // - dist/css/tailwind/preset.css → the semantic Tailwind utility classes
519
+ // (`text-primary`, `bg-fill-brand`, `border-interactive`, …) generated from
520
+ // those aliases.
521
+ // The result is run through applyPrefix at the call site, so `--l-*` becomes the
522
+ // consumer's css prefix; Tailwind utility names are unprefixed and pass through.
523
+ const TOKEN_GROUPS = [
524
+ { title: 'Text colors', test: (n) => n.startsWith('--l-color-text-') },
525
+ { title: 'Backgrounds', test: (n) => /^--l-color-(surface|bg-)/.test(n) },
526
+ { title: 'Borders & dividers', test: (n) => /^--l-color-(border|divider)/.test(n) },
527
+ { title: 'Effects', test: (n) => /^--l-(backdrop|focus-ring)/.test(n) },
528
+ { title: 'Control sizes', test: (n) => n.startsWith('--l-size-control-') },
529
+ ];
530
+
531
+ function buildTokensDoc(ctx) {
532
+ const aliasesPath = resolve(ctx.pkgRoot, 'dist/css/tokens/aliases.css');
533
+ const presetPath = resolve(ctx.pkgRoot, 'dist/css/tailwind/preset.css');
534
+ if (!existsSync(aliasesPath)) {
535
+ console.error(`✗ Missing ${aliasesPath}.`);
536
+ console.error(" This file is generated by luxen-ui's build. Reinstall the package.");
537
+ process.exit(1);
538
+ }
539
+
540
+ // Each entry is a single `/* description */` immediately above a `--l-…:`
541
+ // property. The tempered `(?:(?!\*\/)[\s\S])*?` keeps the comment body from
542
+ // spanning across `*/`, so the file-header comments don't get glued onto the
543
+ // first token's description.
544
+ const aliases = readFileSync(aliasesPath, 'utf-8');
545
+ const entries = [];
546
+ const varRe = /\/\*((?:(?!\*\/)[\s\S])*?)\*\/\s*(--l-[\w-]+)\s*:/g;
547
+ for (let m; (m = varRe.exec(aliases)); ) {
548
+ entries.push({ name: m[2], desc: m[1].replace(/\s+/g, ' ').trim() });
549
+ }
550
+
551
+ const groups = TOKEN_GROUPS.map((g) => ({
552
+ title: g.title,
553
+ rows: entries.filter((e) => g.test(e.name)),
554
+ })).filter((g) => g.rows.length);
555
+ const otherRows = entries.filter((e) => !TOKEN_GROUPS.some((g) => g.test(e.name)));
556
+ if (otherRows.length) groups.push({ title: 'Other', rows: otherRows });
557
+
558
+ const sections = groups.map((g) => {
559
+ const rows = g.rows.map((r) => `| \`${r.name}\` | ${r.desc} |`).join('\n');
560
+ return `### ${g.title}\n\n| Token | Usage |\n|-------|-------|\n${rows}`;
561
+ });
562
+
563
+ // Semantic Tailwind utilities from the preset's @theme inline namespaces.
564
+ const utilities = buildUtilityClasses(presetPath);
565
+
566
+ const parts = [
567
+ `# ${ctx.displayName} — design tokens`,
568
+ '',
569
+ 'Read-only reference for the design system. Use these semantic tokens and utility classes for colors, spacing, and typography instead of arbitrary values — they adapt to theming and dark mode automatically.',
570
+ '',
571
+ '## CSS custom properties',
572
+ '',
573
+ 'Reference these in element CSS custom properties and your own styles (e.g. `color: var(--l-color-text-secondary)`).',
574
+ '',
575
+ sections.join('\n\n'),
576
+ ];
577
+ if (utilities) parts.push('', '## Utility classes', '', utilities);
578
+ return parts.join('\n') + '\n';
579
+ }
580
+
581
+ // Maps the preset's semantic per-property namespaces to their Tailwind utility
582
+ // prefixes. Skips commented-out lines (palette families the consumer can opt in).
583
+ const UTILITY_NAMESPACES = [
584
+ { ns: '--text-color-', util: 'text-' },
585
+ { ns: '--background-color-', util: 'bg-' },
586
+ { ns: '--border-color-', util: 'border-' },
587
+ ];
588
+
589
+ function buildUtilityClasses(presetPath) {
590
+ if (!existsSync(presetPath)) return '';
591
+ const lines = readFileSync(presetPath, 'utf-8').split('\n');
592
+ const blocks = [];
593
+ for (const { ns, util } of UTILITY_NAMESPACES) {
594
+ const names = [];
595
+ for (const raw of lines) {
596
+ const line = raw.trim();
597
+ if (line.startsWith('/*') || line.startsWith('*')) continue;
598
+ const m = line.match(new RegExp(`^${ns}([\\w-]+)\\s*:`));
599
+ if (m) names.push(`\`${util}${m[1]}\``);
600
+ }
601
+ if (names.length) blocks.push(`- **${util}***: ${names.join(', ')}`);
602
+ }
603
+ if (!blocks.length) return '';
604
+ return ['Semantic utility classes generated from the tokens above:', '', ...blocks].join('\n');
605
+ }
606
+
448
607
  // Builds the comma-separated `l-foo` tag list for mockups.md (from manifest
449
608
  // entries flagged `inMockups`, excluding native CSS-only elements). The result
450
609
  // is processed by applyPrefix at render time, so the tags reflect the consumer's
@@ -486,6 +645,10 @@ function usageGenerateSkill(code = 1) {
486
645
  ' --css-prefix <p> CSS class/var prefix without trailing dash (default: l)',
487
646
  );
488
647
  console.error(' --theme-css <path> Optional CSS file with token overrides');
648
+ console.error(
649
+ ' --with-mockups Also emit the standalone bundle + mockup/Claude Design',
650
+ );
651
+ console.error(' docs (off by default)');
489
652
  console.error(' --out <path> Output dir (default: .claude/skills/<name>)');
490
653
  console.error('');
491
654
  console.error('Config file (luxen.config.mjs) takes the same keys, plus identity:');
@@ -496,6 +659,7 @@ function usageGenerateSkill(code = 1) {
496
659
  console.error(" elementPrefix: 'pulse',");
497
660
  console.error(" cssPrefix: 'pulse',");
498
661
  console.error(" themeCss: 'src/styles/tokens.css',");
662
+ console.error(' mockups: true, // emit standalone bundle + mockup docs');
499
663
  console.error(" out: '.claude/skills/pulse',");
500
664
  console.error(' }');
501
665
  console.error('');
@@ -515,13 +679,20 @@ function usage(code = 1) {
515
679
  process.exit(code);
516
680
  }
517
681
 
518
- const [, , command, ...rest] = process.argv;
682
+ // Run the dispatcher only when executed directly as a CLI — guarded so the
683
+ // module can be imported by tests (which exercise the pure prefix helpers
684
+ // below) without triggering argv parsing / process.exit.
685
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
686
+ const [, , command, ...rest] = process.argv;
519
687
 
520
- if (!command || command === '-h' || command === '--help') usage(0);
688
+ if (!command || command === '-h' || command === '--help') usage(0);
521
689
 
522
- if (command === 'import') cmdImport(rest);
523
- else if (command === 'generate-skill') await cmdGenerateSkill(rest);
524
- else {
525
- console.error(`✗ Unknown command: ${command}`);
526
- usage(1);
690
+ if (command === 'import') cmdImport(rest);
691
+ else if (command === 'generate-skill') await cmdGenerateSkill(rest);
692
+ else {
693
+ console.error(`✗ Unknown command: ${command}`);
694
+ usage(1);
695
+ }
527
696
  }
697
+
698
+ export { applyPrefix, applyClassAttrPrefix, applyPrefixCss, applyPackageName };
@@ -1,2 +1,2 @@
1
- import{c as e,s as t}from"./lit.js";var n={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(e=n,t,r)=>{let{kind:i,metadata:a}=r,o=globalThis.litPropertyMetadata.get(a);if(o===void 0&&globalThis.litPropertyMetadata.set(a,o=new Map),i===`setter`&&((e=Object.create(e)).wrapped=!0),o.set(r.name,e),i===`accessor`){let{name:n}=r;return{set(r){let i=t.get.call(this);t.set.call(this,r),this.requestUpdate(n,i,e,!0,r)},init(t){return t!==void 0&&this.C(n,void 0,e,t),t}}}if(i===`setter`){let{name:n}=r;return function(r){let i=this[n];t.call(this,r),this.requestUpdate(n,i,e,!0,r)}}throw Error(`Unsupported decorator location: `+i)};function i(e){return(t,n)=>typeof n==`object`?r(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function a(e){return i({...e,state:!0,attribute:!1})}var o=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function s(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return o(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return o(n,r,{get(){return a(this)}})}}function c(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}export{i,s as n,a as r,c as t};
1
+ import{n as e,r as t}from"./lit.js";var n={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(e=n,t,r)=>{let{kind:i,metadata:a}=r,o=globalThis.litPropertyMetadata.get(a);if(o===void 0&&globalThis.litPropertyMetadata.set(a,o=new Map),i===`setter`&&((e=Object.create(e)).wrapped=!0),o.set(r.name,e),i===`accessor`){let{name:n}=r;return{set(r){let i=t.get.call(this);t.set.call(this,r),this.requestUpdate(n,i,e,!0,r)},init(t){return t!==void 0&&this.C(n,void 0,e,t),t}}}if(i===`setter`){let{name:n}=r;return function(r){let i=this[n];t.call(this,r),this.requestUpdate(n,i,e,!0,r)}}throw Error(`Unsupported decorator location: `+i)};function i(e){return(t,n)=>typeof n==`object`?r(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function a(e){return i({...e,state:!0,attribute:!1})}var o=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function s(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return o(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return o(n,r,{get(){return a(this)}})}}function c(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}export{i,s as n,a as r,c as t};
2
2
  //# sourceMappingURL=decorate.js.map
@@ -1,2 +1,2 @@
1
- var e=Math.min,t=Math.max,n=Math.round,r=Math.floor,i=e=>({x:e,y:e}),a={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function o(n,r,i){return t(n,e(r,i))}function s(e,t){return typeof e==`function`?e(t):e}function c(e){return e.split(`-`)[0]}function l(e){return e.split(`-`)[1]}function u(e){return e===`x`?`y`:`x`}function d(e){return e===`y`?`height`:`width`}function f(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function p(e){return u(f(e))}function m(e,t,n){n===void 0&&(n=!1);let r=l(e),i=p(e),a=d(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=C(o)),[o,C(o)]}function h(e){let t=C(e);return[g(e),t,g(t)]}function g(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var _=[`left`,`right`],v=[`right`,`left`],y=[`top`,`bottom`],b=[`bottom`,`top`];function x(e,t,n){switch(e){case`top`:case`bottom`:return n?t?v:_:t?_:v;case`left`:case`right`:return t?y:b;default:return[]}}function S(e,t,n,r){let i=l(e),a=x(c(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(g)))),a}function C(e){let t=c(e);return a[t]+e.slice(t.length)}function w(e){return{top:0,right:0,bottom:0,left:0,...e}}function ee(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:w(e)}function T(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function E(e,t,n){let{reference:r,floating:i}=e,a=f(t),o=p(t),s=d(o),u=c(t),m=a===`y`,h=r.x+r.width/2-i.width/2,g=r.y+r.height/2-i.height/2,_=r[s]/2-i[s]/2,v;switch(u){case`top`:v={x:h,y:r.y-i.height};break;case`bottom`:v={x:h,y:r.y+r.height};break;case`right`:v={x:r.x+r.width,y:g};break;case`left`:v={x:r.x-i.width,y:g};break;default:v={x:r.x,y:r.y}}switch(l(t)){case`start`:v[o]-=_*(n&&m?-1:1);break;case`end`:v[o]+=_*(n&&m?-1:1);break}return v}async function D(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:c}=e,{boundary:l=`clippingAncestors`,rootBoundary:u=`viewport`,elementContext:d=`floating`,altBoundary:f=!1,padding:p=0}=s(t,e),m=ee(p),h=o[f?d===`floating`?`reference`:`floating`:d],g=T(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(h))??!0?h:h.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:l,rootBoundary:u,strategy:c})),_=d===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,v=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),y=await(i.isElement==null?void 0:i.isElement(v))&&await(i.getScale==null?void 0:i.getScale(v))||{x:1,y:1},b=T(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:_,offsetParent:v,strategy:c}):_);return{top:(g.top-b.top+m.top)/y.y,bottom:(b.bottom-g.bottom+m.bottom)/y.y,left:(g.left-b.left+m.left)/y.x,right:(b.right-g.right+m.right)/y.x}}var O=50,k=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:D},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=E(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<O&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=E(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},A=t=>({name:`arrow`,options:t,async fn(n){let{x:r,y:i,placement:a,rects:c,platform:u,elements:f,middlewareData:m}=n,{element:h,padding:g=0}=s(t,n)||{};if(h==null)return{};let _=ee(g),v={x:r,y:i},y=p(a),b=d(y),x=await u.getDimensions(h),S=y===`y`,C=S?`top`:`left`,w=S?`bottom`:`right`,T=S?`clientHeight`:`clientWidth`,E=c.reference[b]+c.reference[y]-v[y]-c.floating[b],D=v[y]-c.reference[y],O=await(u.getOffsetParent==null?void 0:u.getOffsetParent(h)),k=O?O[T]:0;(!k||!await(u.isElement==null?void 0:u.isElement(O)))&&(k=f.floating[T]||c.floating[b]);let A=E/2-D/2,j=k/2-x[b]/2-1,M=e(_[C],j),N=e(_[w],j),P=M,te=k-x[b]-N,F=k/2-x[b]/2+A,I=o(P,F,te),L=!m.arrow&&l(a)!=null&&F!==I&&c.reference[b]/2-(F<P?M:N)-x[b]/2<0,R=L?F<P?F-P:F-te:0;return{[y]:v[y]+R,data:{[y]:I,centerOffset:F-I-R,...L&&{alignmentOffset:R}},reset:L}}}),j=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:l,elements:u}=t,{mainAxis:d=!0,crossAxis:p=!0,fallbackPlacements:g,fallbackStrategy:_=`bestFit`,fallbackAxisSideDirection:v=`none`,flipAlignment:y=!0,...b}=s(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let x=c(r),w=f(o),ee=c(o)===o,T=await(l.isRTL==null?void 0:l.isRTL(u.floating)),E=g||(ee||!y?[C(o)]:h(o)),D=v!==`none`;!g&&D&&E.push(...S(o,y,v,T));let O=[o,...E],k=await l.detectOverflow(t,b),A=[],j=i.flip?.overflows||[];if(d&&A.push(k[x]),p){let e=m(r,a,T);A.push(k[e[0]],k[e[1]])}if(j=[...j,{placement:r,overflows:A}],!A.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=O[e];if(t&&(!(p===`alignment`&&w!==f(t))||j.every(e=>f(e.placement)===w?e.overflows[0]>0:!0)))return{data:{index:e,overflows:j},reset:{placement:t}};let n=j.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(_){case`bestFit`:{let e=j.filter(e=>{if(D){let t=f(e.placement);return t===w||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},M=new Set([`left`,`top`]);async function N(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=c(n),u=l(n),d=f(n)===`y`,p=M.has(o)?-1:1,m=a&&d?-1:1,h=s(t,e),{mainAxis:g,crossAxis:_,alignmentAxis:v}=typeof h==`number`?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return u&&typeof v==`number`&&(_=u===`end`?v*-1:v),d?{x:_*m,y:g*p}:{x:g*p,y:_*m}}var P=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await N(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},te=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:l=!0,crossAxis:d=!1,limiter:p={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...m}=s(e,t),h={x:n,y:r},g=await a.detectOverflow(t,m),_=f(c(i)),v=u(_),y=h[v],b=h[_];if(l){let e=v===`y`?`top`:`left`,t=v===`y`?`bottom`:`right`,n=y+g[e],r=y-g[t];y=o(n,y,r)}if(d){let e=_===`y`?`top`:`left`,t=_===`y`?`bottom`:`right`,n=b+g[e],r=b-g[t];b=o(n,b,r)}let x=p.fn({...t,[v]:y,[_]:b});return{...x,data:{x:x.x-n,y:x.y-r,enabled:{[v]:l,[_]:d}}}}}};function F(){return typeof window<`u`}function I(e){return ne(e)?(e.nodeName||``).toLowerCase():`#document`}function L(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function R(e){return((ne(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function ne(e){return F()?e instanceof Node||e instanceof L(e).Node:!1}function z(e){return F()?e instanceof Element||e instanceof L(e).Element:!1}function B(e){return F()?e instanceof HTMLElement||e instanceof L(e).HTMLElement:!1}function re(e){return!F()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof L(e).ShadowRoot}function V(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=q(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function ie(e){return/^(table|td|th)$/.test(I(e))}function H(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var ae=/transform|translate|scale|rotate|perspective|filter/,oe=/paint|layout|strict|content/,U=e=>!!e&&e!==`none`,se;function W(e){let t=z(e)?q(e):e;return U(t.transform)||U(t.translate)||U(t.scale)||U(t.rotate)||U(t.perspective)||!G()&&(U(t.backdropFilter)||U(t.filter))||ae.test(t.willChange||``)||oe.test(t.contain||``)}function ce(e){let t=Y(e);for(;B(t)&&!K(t);){if(W(t))return t;if(H(t))return null;t=Y(t)}return null}function G(){return se??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),se}function K(e){return/^(html|body|#document)$/.test(I(e))}function q(e){return L(e).getComputedStyle(e)}function J(e){return z(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Y(e){if(I(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||re(e)&&e.host||R(e);return re(t)?t.host:t}function le(e){let t=Y(e);return K(t)?e.ownerDocument?e.ownerDocument.body:e.body:B(t)&&V(t)?t:le(t)}function X(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=le(e),i=r===e.ownerDocument?.body,a=L(r);if(i){let e=ue(a);return t.concat(a,a.visualViewport||[],V(r)?r:[],e&&n?X(e):[])}else return t.concat(r,X(r,[],n))}function ue(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function de(e){let t=q(e),r=parseFloat(t.width)||0,i=parseFloat(t.height)||0,a=B(e),o=a?e.offsetWidth:r,s=a?e.offsetHeight:i,c=n(r)!==o||n(i)!==s;return c&&(r=o,i=s),{width:r,height:i,$:c}}function fe(e){return z(e)?e:e.contextElement}function Z(e){let t=fe(e);if(!B(t))return i(1);let r=t.getBoundingClientRect(),{width:a,height:o,$:s}=de(t),c=(s?n(r.width):r.width)/a,l=(s?n(r.height):r.height)/o;return(!c||!Number.isFinite(c))&&(c=1),(!l||!Number.isFinite(l))&&(l=1),{x:c,y:l}}var pe=i(0);function me(e){let t=L(e);return!G()||!t.visualViewport?pe:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function he(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==L(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let a=e.getBoundingClientRect(),o=fe(e),s=i(1);t&&(r?z(r)&&(s=Z(r)):s=Z(e));let c=he(o,n,r)?me(o):i(0),l=(a.left+c.x)/s.x,u=(a.top+c.y)/s.y,d=a.width/s.x,f=a.height/s.y;if(o){let e=L(o),t=r&&z(r)?L(r):r,n=e,i=ue(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=q(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,u*=e.y,d*=e.x,f*=e.y,l+=a,u+=o,n=L(i),i=ue(n)}}return T({width:d,height:f,x:l,y:u})}function $(e,t){let n=J(e).scrollLeft;return t?t.left+n:Q(R(e)).left+n}function ge(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-$(e,n),y:n.top+t.scrollTop}}function _e(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e,o=a===`fixed`,s=R(r),c=t?H(t.floating):!1;if(r===s||c&&o)return n;let l={scrollLeft:0,scrollTop:0},u=i(1),d=i(0),f=B(r);if((f||!f&&!o)&&((I(r)!==`body`||V(s))&&(l=J(r)),f)){let e=Q(r);u=Z(r),d.x=e.x+r.clientLeft,d.y=e.y+r.clientTop}let p=s&&!f&&!o?ge(s,l):i(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+d.x+p.x,y:n.y*u.y-l.scrollTop*u.y+d.y+p.y}}function ve(e){return Array.from(e.getClientRects())}function ye(e){let n=R(e),r=J(e),i=e.ownerDocument.body,a=t(n.scrollWidth,n.clientWidth,i.scrollWidth,i.clientWidth),o=t(n.scrollHeight,n.clientHeight,i.scrollHeight,i.clientHeight),s=-r.scrollLeft+$(e),c=-r.scrollTop;return q(i).direction===`rtl`&&(s+=t(n.clientWidth,i.clientWidth)-a),{width:a,height:o,x:s,y:c}}var be=25;function xe(e,t){let n=L(e),r=R(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=G();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=$(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=be&&(a-=o)}else l<=be&&(a+=l);return{width:a,height:o,x:s,y:c}}function Se(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=B(e)?Z(e):i(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:a*o.x,y:r*o.y}}function Ce(e,t,n){let r;if(t===`viewport`)r=xe(e,n);else if(t===`document`)r=ye(R(e));else if(z(t))r=Se(t,n);else{let n=me(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return T(r)}function we(e,t){let n=Y(e);return n===t||!z(n)||K(n)?!1:q(n).position===`fixed`||we(n,t)}function Te(e,t){let n=t.get(e);if(n)return n;let r=X(e,[],!1).filter(e=>z(e)&&I(e)!==`body`),i=null,a=q(e).position===`fixed`,o=a?Y(e):e;for(;z(o)&&!K(o);){let t=q(o),n=W(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||V(o)&&!n&&we(e,o))?r=r.filter(e=>e!==o):i=t,o=Y(o)}return t.set(e,r),r}function Ee(n){let{element:r,boundary:i,rootBoundary:a,strategy:o}=n,s=[...i===`clippingAncestors`?H(r)?[]:Te(r,this._c):[].concat(i),a],c=Ce(r,s[0],o),l=c.top,u=c.right,d=c.bottom,f=c.left;for(let n=1;n<s.length;n++){let i=Ce(r,s[n],o);l=t(i.top,l),u=e(i.right,u),d=e(i.bottom,d),f=t(i.left,f)}return{width:u-f,height:d-l,x:f,y:l}}function De(e){let{width:t,height:n}=de(e);return{width:t,height:n}}function Oe(e,t,n){let r=B(t),a=R(t),o=n===`fixed`,s=Q(e,!0,o,t),c={scrollLeft:0,scrollTop:0},l=i(0);function u(){l.x=$(a)}if(r||!r&&!o)if((I(t)!==`body`||V(a))&&(c=J(t)),r){let e=Q(t,!0,o,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else a&&u();o&&!r&&a&&u();let d=a&&!r&&!o?ge(a,c):i(0);return{x:s.left+c.scrollLeft-l.x-d.x,y:s.top+c.scrollTop-l.y-d.y,width:s.width,height:s.height}}function ke(e){return q(e).position===`static`}function Ae(e,t){if(!B(e)||q(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return R(e)===n&&(n=n.ownerDocument.body),n}function je(e,t){let n=L(e);if(H(e))return n;if(!B(e)){let t=Y(e);for(;t&&!K(t);){if(z(t)&&!ke(t))return t;t=Y(t)}return n}let r=Ae(e,t);for(;r&&ie(r)&&ke(r);)r=Ae(r,t);return r&&K(r)&&ke(r)&&!W(r)?n:r||ce(e)||n}var Me=async function(e){let t=this.getOffsetParent||je,n=this.getDimensions,r=await n(e.floating);return{reference:Oe(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function Ne(e){return q(e).direction===`rtl`}var Pe={convertOffsetParentRelativeRectToViewportRelativeRect:_e,getDocumentElement:R,getClippingRect:Ee,getOffsetParent:je,getElementRects:Me,getClientRects:ve,getDimensions:De,getScale:Z,isElement:z,isRTL:Ne};function Fe(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Ie(n,i){let a=null,o,s=R(n);function c(){var e;clearTimeout(o),(e=a)==null||e.disconnect(),a=null}function l(u,d){u===void 0&&(u=!1),d===void 0&&(d=1),c();let f=n.getBoundingClientRect(),{left:p,top:m,width:h,height:g}=f;if(u||i(),!h||!g)return;let _=r(m),v=r(s.clientWidth-(p+h)),y=r(s.clientHeight-(m+g)),b=r(p),x={rootMargin:-_+`px `+-v+`px `+-y+`px `+-b+`px`,threshold:t(0,e(1,d))||1},S=!0;function C(e){let t=e[0].intersectionRatio;if(t!==d){if(!S)return l();t?l(!1,t):o=setTimeout(()=>{l(!1,1e-7)},1e3)}t===1&&!Fe(f,n.getBoundingClientRect())&&l(),S=!1}try{a=new IntersectionObserver(C,{...x,root:s.ownerDocument})}catch{a=new IntersectionObserver(C,x)}a.observe(n)}return l(!0),c}function Le(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=fe(e),u=i||a?[...l?X(l):[],...t?X(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Ie(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!Fe(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Re=P,ze=te,Be=j,Ve=A,He=(e,t,n)=>{let r=new Map,i={platform:Pe,...n},a={...i.platform,_c:r};return k(e,t,{...i,platform:a})};export{Re as a,Be as i,Le as n,ze as o,He as r,Ve as t};
1
+ var e=Math.min,t=Math.max,n=Math.round,r=Math.floor,i=e=>({x:e,y:e}),a={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function o(n,r,i){return t(n,e(r,i))}function s(e,t){return typeof e==`function`?e(t):e}function c(e){return e.split(`-`)[0]}function l(e){return e.split(`-`)[1]}function u(e){return e===`x`?`y`:`x`}function d(e){return e===`y`?`height`:`width`}function f(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function p(e){return u(f(e))}function m(e,t,n){n===void 0&&(n=!1);let r=l(e),i=p(e),a=d(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=C(o)),[o,C(o)]}function h(e){let t=C(e);return[g(e),t,g(t)]}function g(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var _=[`left`,`right`],v=[`right`,`left`],y=[`top`,`bottom`],b=[`bottom`,`top`];function x(e,t,n){switch(e){case`top`:case`bottom`:return n?t?v:_:t?_:v;case`left`:case`right`:return t?y:b;default:return[]}}function S(e,t,n,r){let i=l(e),a=x(c(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(g)))),a}function C(e){let t=c(e);return a[t]+e.slice(t.length)}function w(e){return{top:0,right:0,bottom:0,left:0,...e}}function T(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:w(e)}function E(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function D(e,t,n){let{reference:r,floating:i}=e,a=f(t),o=p(t),s=d(o),u=c(t),m=a===`y`,h=r.x+r.width/2-i.width/2,g=r.y+r.height/2-i.height/2,_=r[s]/2-i[s]/2,v;switch(u){case`top`:v={x:h,y:r.y-i.height};break;case`bottom`:v={x:h,y:r.y+r.height};break;case`right`:v={x:r.x+r.width,y:g};break;case`left`:v={x:r.x-i.width,y:g};break;default:v={x:r.x,y:r.y}}switch(l(t)){case`start`:v[o]-=_*(n&&m?-1:1);break;case`end`:v[o]+=_*(n&&m?-1:1);break}return v}async function O(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:c}=e,{boundary:l=`clippingAncestors`,rootBoundary:u=`viewport`,elementContext:d=`floating`,altBoundary:f=!1,padding:p=0}=s(t,e),m=T(p),h=o[f?d===`floating`?`reference`:`floating`:d],g=E(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(h))??!0?h:h.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:l,rootBoundary:u,strategy:c})),_=d===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,v=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),y=await(i.isElement==null?void 0:i.isElement(v))&&await(i.getScale==null?void 0:i.getScale(v))||{x:1,y:1},b=E(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:_,offsetParent:v,strategy:c}):_);return{top:(g.top-b.top+m.top)/y.y,bottom:(b.bottom-g.bottom+m.bottom)/y.y,left:(g.left-b.left+m.left)/y.x,right:(b.right-g.right+m.right)/y.x}}var k=50,A=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:O},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=D(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<k&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=D(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},j=t=>({name:`arrow`,options:t,async fn(n){let{x:r,y:i,placement:a,rects:c,platform:u,elements:f,middlewareData:m}=n,{element:h,padding:g=0}=s(t,n)||{};if(h==null)return{};let _=T(g),v={x:r,y:i},y=p(a),b=d(y),x=await u.getDimensions(h),S=y===`y`,C=S?`top`:`left`,w=S?`bottom`:`right`,E=S?`clientHeight`:`clientWidth`,D=c.reference[b]+c.reference[y]-v[y]-c.floating[b],O=v[y]-c.reference[y],k=await(u.getOffsetParent==null?void 0:u.getOffsetParent(h)),A=k?k[E]:0;(!A||!await(u.isElement==null?void 0:u.isElement(k)))&&(A=f.floating[E]||c.floating[b]);let j=D/2-O/2,M=A/2-x[b]/2-1,ee=e(_[C],M),N=e(_[w],M),P=ee,te=A-x[b]-N,F=A/2-x[b]/2+j,I=o(P,F,te),L=!m.arrow&&l(a)!=null&&F!==I&&c.reference[b]/2-(F<P?ee:N)-x[b]/2<0,R=L?F<P?F-P:F-te:0;return{[y]:v[y]+R,data:{[y]:I,centerOffset:F-I-R,...L&&{alignmentOffset:R}},reset:L}}}),M=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:l,elements:u}=t,{mainAxis:d=!0,crossAxis:p=!0,fallbackPlacements:g,fallbackStrategy:_=`bestFit`,fallbackAxisSideDirection:v=`none`,flipAlignment:y=!0,...b}=s(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let x=c(r),w=f(o),T=c(o)===o,E=await(l.isRTL==null?void 0:l.isRTL(u.floating)),D=g||(T||!y?[C(o)]:h(o)),O=v!==`none`;!g&&O&&D.push(...S(o,y,v,E));let k=[o,...D],A=await l.detectOverflow(t,b),j=[],M=i.flip?.overflows||[];if(d&&j.push(A[x]),p){let e=m(r,a,E);j.push(A[e[0]],A[e[1]])}if(M=[...M,{placement:r,overflows:j}],!j.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=k[e];if(t&&(!(p===`alignment`&&w!==f(t))||M.every(e=>f(e.placement)===w?e.overflows[0]>0:!0)))return{data:{index:e,overflows:M},reset:{placement:t}};let n=M.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(_){case`bestFit`:{let e=M.filter(e=>{if(O){let t=f(e.placement);return t===w||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},ee=new Set([`left`,`top`]);async function N(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=c(n),u=l(n),d=f(n)===`y`,p=ee.has(o)?-1:1,m=a&&d?-1:1,h=s(t,e),{mainAxis:g,crossAxis:_,alignmentAxis:v}=typeof h==`number`?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return u&&typeof v==`number`&&(_=u===`end`?v*-1:v),d?{x:_*m,y:g*p}:{x:g*p,y:_*m}}var P=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await N(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},te=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:l=!0,crossAxis:d=!1,limiter:p={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...m}=s(e,t),h={x:n,y:r},g=await a.detectOverflow(t,m),_=f(c(i)),v=u(_),y=h[v],b=h[_];if(l){let e=v===`y`?`top`:`left`,t=v===`y`?`bottom`:`right`,n=y+g[e],r=y-g[t];y=o(n,y,r)}if(d){let e=_===`y`?`top`:`left`,t=_===`y`?`bottom`:`right`,n=b+g[e],r=b-g[t];b=o(n,b,r)}let x=p.fn({...t,[v]:y,[_]:b});return{...x,data:{x:x.x-n,y:x.y-r,enabled:{[v]:l,[_]:d}}}}}},F=function(n){return n===void 0&&(n={}),{name:`size`,options:n,async fn(r){var i,a;let{placement:o,rects:u,platform:d,elements:p}=r,{apply:m=()=>{},...h}=s(n,r),g=await d.detectOverflow(r,h),_=c(o),v=l(o),y=f(o)===`y`,{width:b,height:x}=u.floating,S,C;_===`top`||_===`bottom`?(S=_,C=v===(await(d.isRTL==null?void 0:d.isRTL(p.floating))?`start`:`end`)?`left`:`right`):(C=_,S=v===`end`?`top`:`bottom`);let w=x-g.top-g.bottom,T=b-g.left-g.right,E=e(x-g[S],w),D=e(b-g[C],T),O=!r.middlewareData.shift,k=E,A=D;if((i=r.middlewareData.shift)!=null&&i.enabled.x&&(A=T),(a=r.middlewareData.shift)!=null&&a.enabled.y&&(k=w),O&&!v){let e=t(g.left,0),n=t(g.right,0),r=t(g.top,0),i=t(g.bottom,0);y?A=b-2*(e!==0||n!==0?e+n:t(g.left,g.right)):k=x-2*(r!==0||i!==0?r+i:t(g.top,g.bottom))}await m({...r,availableWidth:A,availableHeight:k});let j=await d.getDimensions(p.floating);return b!==j.width||x!==j.height?{reset:{rects:!0}}:{}}}};function I(){return typeof window<`u`}function L(e){return ne(e)?(e.nodeName||``).toLowerCase():`#document`}function R(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function z(e){return((ne(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function ne(e){return I()?e instanceof Node||e instanceof R(e).Node:!1}function B(e){return I()?e instanceof Element||e instanceof R(e).Element:!1}function V(e){return I()?e instanceof HTMLElement||e instanceof R(e).HTMLElement:!1}function re(e){return!I()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof R(e).ShadowRoot}function H(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=q(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function ie(e){return/^(table|td|th)$/.test(L(e))}function U(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var ae=/transform|translate|scale|rotate|perspective|filter/,oe=/paint|layout|strict|content/,W=e=>!!e&&e!==`none`,se;function ce(e){let t=B(e)?q(e):e;return W(t.transform)||W(t.translate)||W(t.scale)||W(t.rotate)||W(t.perspective)||!G()&&(W(t.backdropFilter)||W(t.filter))||ae.test(t.willChange||``)||oe.test(t.contain||``)}function le(e){let t=Y(e);for(;V(t)&&!K(t);){if(ce(t))return t;if(U(t))return null;t=Y(t)}return null}function G(){return se??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),se}function K(e){return/^(html|body|#document)$/.test(L(e))}function q(e){return R(e).getComputedStyle(e)}function J(e){return B(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Y(e){if(L(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||re(e)&&e.host||z(e);return re(t)?t.host:t}function ue(e){let t=Y(e);return K(t)?e.ownerDocument?e.ownerDocument.body:e.body:V(t)&&H(t)?t:ue(t)}function X(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=ue(e),i=r===e.ownerDocument?.body,a=R(r);if(i){let e=de(a);return t.concat(a,a.visualViewport||[],H(r)?r:[],e&&n?X(e):[])}else return t.concat(r,X(r,[],n))}function de(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function fe(e){let t=q(e),r=parseFloat(t.width)||0,i=parseFloat(t.height)||0,a=V(e),o=a?e.offsetWidth:r,s=a?e.offsetHeight:i,c=n(r)!==o||n(i)!==s;return c&&(r=o,i=s),{width:r,height:i,$:c}}function pe(e){return B(e)?e:e.contextElement}function Z(e){let t=pe(e);if(!V(t))return i(1);let r=t.getBoundingClientRect(),{width:a,height:o,$:s}=fe(t),c=(s?n(r.width):r.width)/a,l=(s?n(r.height):r.height)/o;return(!c||!Number.isFinite(c))&&(c=1),(!l||!Number.isFinite(l))&&(l=1),{x:c,y:l}}var me=i(0);function he(e){let t=R(e);return!G()||!t.visualViewport?me:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function ge(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==R(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let a=e.getBoundingClientRect(),o=pe(e),s=i(1);t&&(r?B(r)&&(s=Z(r)):s=Z(e));let c=ge(o,n,r)?he(o):i(0),l=(a.left+c.x)/s.x,u=(a.top+c.y)/s.y,d=a.width/s.x,f=a.height/s.y;if(o){let e=R(o),t=r&&B(r)?R(r):r,n=e,i=de(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=q(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,u*=e.y,d*=e.x,f*=e.y,l+=a,u+=o,n=R(i),i=de(n)}}return E({width:d,height:f,x:l,y:u})}function $(e,t){let n=J(e).scrollLeft;return t?t.left+n:Q(z(e)).left+n}function _e(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-$(e,n),y:n.top+t.scrollTop}}function ve(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e,o=a===`fixed`,s=z(r),c=t?U(t.floating):!1;if(r===s||c&&o)return n;let l={scrollLeft:0,scrollTop:0},u=i(1),d=i(0),f=V(r);if((f||!f&&!o)&&((L(r)!==`body`||H(s))&&(l=J(r)),f)){let e=Q(r);u=Z(r),d.x=e.x+r.clientLeft,d.y=e.y+r.clientTop}let p=s&&!f&&!o?_e(s,l):i(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+d.x+p.x,y:n.y*u.y-l.scrollTop*u.y+d.y+p.y}}function ye(e){return Array.from(e.getClientRects())}function be(e){let n=z(e),r=J(e),i=e.ownerDocument.body,a=t(n.scrollWidth,n.clientWidth,i.scrollWidth,i.clientWidth),o=t(n.scrollHeight,n.clientHeight,i.scrollHeight,i.clientHeight),s=-r.scrollLeft+$(e),c=-r.scrollTop;return q(i).direction===`rtl`&&(s+=t(n.clientWidth,i.clientWidth)-a),{width:a,height:o,x:s,y:c}}var xe=25;function Se(e,t){let n=R(e),r=z(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=G();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=$(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=xe&&(a-=o)}else l<=xe&&(a+=l);return{width:a,height:o,x:s,y:c}}function Ce(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=V(e)?Z(e):i(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:a*o.x,y:r*o.y}}function we(e,t,n){let r;if(t===`viewport`)r=Se(e,n);else if(t===`document`)r=be(z(e));else if(B(t))r=Ce(t,n);else{let n=he(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return E(r)}function Te(e,t){let n=Y(e);return n===t||!B(n)||K(n)?!1:q(n).position===`fixed`||Te(n,t)}function Ee(e,t){let n=t.get(e);if(n)return n;let r=X(e,[],!1).filter(e=>B(e)&&L(e)!==`body`),i=null,a=q(e).position===`fixed`,o=a?Y(e):e;for(;B(o)&&!K(o);){let t=q(o),n=ce(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||H(o)&&!n&&Te(e,o))?r=r.filter(e=>e!==o):i=t,o=Y(o)}return t.set(e,r),r}function De(n){let{element:r,boundary:i,rootBoundary:a,strategy:o}=n,s=[...i===`clippingAncestors`?U(r)?[]:Ee(r,this._c):[].concat(i),a],c=we(r,s[0],o),l=c.top,u=c.right,d=c.bottom,f=c.left;for(let n=1;n<s.length;n++){let i=we(r,s[n],o);l=t(i.top,l),u=e(i.right,u),d=e(i.bottom,d),f=t(i.left,f)}return{width:u-f,height:d-l,x:f,y:l}}function Oe(e){let{width:t,height:n}=fe(e);return{width:t,height:n}}function ke(e,t,n){let r=V(t),a=z(t),o=n===`fixed`,s=Q(e,!0,o,t),c={scrollLeft:0,scrollTop:0},l=i(0);function u(){l.x=$(a)}if(r||!r&&!o)if((L(t)!==`body`||H(a))&&(c=J(t)),r){let e=Q(t,!0,o,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else a&&u();o&&!r&&a&&u();let d=a&&!r&&!o?_e(a,c):i(0);return{x:s.left+c.scrollLeft-l.x-d.x,y:s.top+c.scrollTop-l.y-d.y,width:s.width,height:s.height}}function Ae(e){return q(e).position===`static`}function je(e,t){if(!V(e)||q(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return z(e)===n&&(n=n.ownerDocument.body),n}function Me(e,t){let n=R(e);if(U(e))return n;if(!V(e)){let t=Y(e);for(;t&&!K(t);){if(B(t)&&!Ae(t))return t;t=Y(t)}return n}let r=je(e,t);for(;r&&ie(r)&&Ae(r);)r=je(r,t);return r&&K(r)&&Ae(r)&&!ce(r)?n:r||le(e)||n}var Ne=async function(e){let t=this.getOffsetParent||Me,n=this.getDimensions,r=await n(e.floating);return{reference:ke(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function Pe(e){return q(e).direction===`rtl`}var Fe={convertOffsetParentRelativeRectToViewportRelativeRect:ve,getDocumentElement:z,getClippingRect:De,getOffsetParent:Me,getElementRects:Ne,getClientRects:ye,getDimensions:Oe,getScale:Z,isElement:B,isRTL:Pe};function Ie(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Le(n,i){let a=null,o,s=z(n);function c(){var e;clearTimeout(o),(e=a)==null||e.disconnect(),a=null}function l(u,d){u===void 0&&(u=!1),d===void 0&&(d=1),c();let f=n.getBoundingClientRect(),{left:p,top:m,width:h,height:g}=f;if(u||i(),!h||!g)return;let _=r(m),v=r(s.clientWidth-(p+h)),y=r(s.clientHeight-(m+g)),b=r(p),x={rootMargin:-_+`px `+-v+`px `+-y+`px `+-b+`px`,threshold:t(0,e(1,d))||1},S=!0;function C(e){let t=e[0].intersectionRatio;if(t!==d){if(!S)return l();t?l(!1,t):o=setTimeout(()=>{l(!1,1e-7)},1e3)}t===1&&!Ie(f,n.getBoundingClientRect())&&l(),S=!1}try{a=new IntersectionObserver(C,{...x,root:s.ownerDocument})}catch{a=new IntersectionObserver(C,x)}a.observe(n)}return l(!0),c}function Re(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=pe(e),u=i||a?[...l?X(l):[],...t?X(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Le(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!Ie(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var ze=P,Be=te,Ve=M,He=F,Ue=j,We=(e,t,n)=>{let r=new Map,i={platform:Fe,...n},a={...i.platform,_c:r};return A(e,t,{...i,platform:a})};export{ze as a,Ve as i,Re as n,Be as o,We as r,He as s,Ue as t};
2
2
  //# sourceMappingURL=floating-ui.dom.js.map