themelia-react-ui 2.0.2 → 2.0.4

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 (435) hide show
  1. package/CHANGELOG.md +67 -7
  2. package/README.md +70 -37
  3. package/THIRD_PARTY_NOTICES.md +6 -12
  4. package/dist/{accordion-Cjb6sx0G.js → accordion-96o0pN62.js} +5 -5
  5. package/dist/{accordion-Cjb6sx0G.js.map → accordion-96o0pN62.js.map} +1 -1
  6. package/dist/action-menu-CHgs8vmj.js +281 -0
  7. package/dist/action-menu-CHgs8vmj.js.map +1 -0
  8. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-B8yGOr8-.js} +7 -1
  9. package/dist/affordance-geometry.generated-B8yGOr8-.js.map +1 -0
  10. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-BZUGwBq6.js} +277 -276
  11. package/dist/ai-artifact-BZUGwBq6.js.map +1 -0
  12. package/dist/{app-shell-C4FhvCqF.js → app-shell-D63ATkIK.js} +84 -83
  13. package/dist/app-shell-D63ATkIK.js.map +1 -0
  14. package/dist/{attachment-BxDfL2mw.js → attachment-DkoqHPPl.js} +7 -7
  15. package/dist/{attachment-BxDfL2mw.js.map → attachment-DkoqHPPl.js.map} +1 -1
  16. package/dist/{auth-ax2BqjrI.js → auth-D2FVZ1MH.js} +10 -10
  17. package/dist/{auth-ax2BqjrI.js.map → auth-D2FVZ1MH.js.map} +1 -1
  18. package/dist/{avatar-DAPlDvhJ.js → avatar-DWO_HHhB.js} +5 -5
  19. package/dist/{avatar-DAPlDvhJ.js.map → avatar-DWO_HHhB.js.map} +1 -1
  20. package/dist/{badge-HpFqoqSY.js → badge-DErMA7ul.js} +4 -4
  21. package/dist/{badge-HpFqoqSY.js.map → badge-DErMA7ul.js.map} +1 -1
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +1 -1
  28. package/dist/base/buttons.js +1 -1
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +3 -3
  31. package/dist/base/cascader.js +13 -13
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +2 -2
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +2 -2
  39. package/dist/base/display.js +6 -6
  40. package/dist/base/feedback.js +3 -3
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +3 -3
  43. package/dist/base/inline-edit.js +10 -10
  44. package/dist/base/item.js +1 -1
  45. package/dist/base/media-gallery.js +1 -1
  46. package/dist/base/metadata-list.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +1 -1
  51. package/dist/base/repeaters.js +9 -9
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +1 -1
  54. package/dist/base/signature-pad.js +6 -6
  55. package/dist/base/skeleton.js +1 -1
  56. package/dist/base/spinner.js +4 -4
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +3 -3
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-CdfIkCsV.js} +4 -4
  66. package/dist/{batch-action-bar-DnUJ21NQ.js.map → batch-action-bar-CdfIkCsV.js.map} +1 -1
  67. package/dist/blocks/admin.js +20 -20
  68. package/dist/blocks/admin.js.map +1 -1
  69. package/dist/blocks/ai.js +15 -15
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +17 -17
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +570 -567
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-B-WFKecD.js} +4 -4
  82. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-B-WFKecD.js.map} +1 -1
  83. package/dist/{button-DVzspB_G.js → button-DkmK-z8E.js} +2 -2
  84. package/dist/{button-DVzspB_G.js.map → button-DkmK-z8E.js.map} +1 -1
  85. package/dist/{buttons-DPZekJFu.js → buttons-BbfzgczK.js} +8 -8
  86. package/dist/{buttons-DPZekJFu.js.map → buttons-BbfzgczK.js.map} +1 -1
  87. package/dist/{cards-BaBZR-AU.js → cards-4JTWqvVe.js} +10 -10
  88. package/dist/cards-4JTWqvVe.js.map +1 -0
  89. package/dist/{chart-ZOYyK2xG.js → chart-C19flDQb.js} +4 -4
  90. package/dist/{chart-ZOYyK2xG.js.map → chart-C19flDQb.js.map} +1 -1
  91. package/dist/{checkbox-AWIhNhmo.js → checkbox-CzYUTPeJ.js} +9 -5
  92. package/dist/checkbox-CzYUTPeJ.js.map +1 -0
  93. package/dist/{choice-inputs-CNHvARCJ.js → choice-inputs-JLtij2y4.js} +182 -176
  94. package/dist/choice-inputs-JLtij2y4.js.map +1 -0
  95. package/dist/{code-block-DeneBJR_.js → code-block-CGNaUtAE.js} +7 -7
  96. package/dist/{code-block-DeneBJR_.js.map → code-block-CGNaUtAE.js.map} +1 -1
  97. package/dist/{collapsible-C-_l4hpy.js → collapsible-Do4G0zcC.js} +3 -3
  98. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-Do4G0zcC.js.map} +1 -1
  99. package/dist/{collection-content-By56pLog.js → collection-content-C0e8SsTm.js} +3 -3
  100. package/dist/{collection-content-By56pLog.js.map → collection-content-C0e8SsTm.js.map} +1 -1
  101. package/dist/{combobox-C0EQW6dr.js → combobox-CBJDs6w_.js} +349 -347
  102. package/dist/combobox-CBJDs6w_.js.map +1 -0
  103. package/dist/{combobox-xCQ2RMNE.js → combobox-hbhSS18O.js} +158 -112
  104. package/dist/combobox-hbhSS18O.js.map +1 -0
  105. package/dist/{command-C25VMRII.js → command-D8NrBj-b.js} +7 -7
  106. package/dist/{command-C25VMRII.js.map → command-D8NrBj-b.js.map} +1 -1
  107. package/dist/{comments-BYYlTA8E.js → comments-Di4w0H_S.js} +383 -382
  108. package/dist/comments-Di4w0H_S.js.map +1 -0
  109. package/dist/components/base/action-menu/action-menu.d.ts +2 -0
  110. package/dist/components/base/cards/card.recipes.d.ts +12 -5
  111. package/dist/components/base/cards/smart-card.types.d.ts +12 -7
  112. package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
  113. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  114. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  115. package/dist/components/base/combobox/combobox-field.d.ts +16 -0
  116. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  117. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  118. package/dist/components/base/forms/form-field.d.ts +5 -3
  119. package/dist/components/base/forms/index.d.ts +1 -0
  120. package/dist/components/base/forms/server-errors.d.ts +16 -0
  121. package/dist/components/base/forms/workflow.d.ts +5 -2
  122. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  123. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -2
  124. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  125. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  126. package/dist/components/base/text-inputs/input.d.ts +4 -2
  127. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  128. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  129. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  130. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  131. package/dist/components/typography/text.styles.d.ts +26 -1
  132. package/dist/components/ui/combobox-dismiss.d.ts +16 -0
  133. package/dist/components/ui/combobox.d.ts +11 -6
  134. package/dist/components/ui/dialog.d.ts +1 -1
  135. package/dist/components/ui/popover.d.ts +1 -1
  136. package/dist/components/ui/sheet.d.ts +1 -1
  137. package/dist/composition.recipes-COdiFhxB.js +19 -0
  138. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  139. package/dist/containers-CRmHf7GP.js +104 -0
  140. package/dist/containers-CRmHf7GP.js.map +1 -0
  141. package/dist/{copyable-ClBuk_UK.js → copyable-CnGCZdX4.js} +4 -4
  142. package/dist/{copyable-ClBuk_UK.js.map → copyable-CnGCZdX4.js.map} +1 -1
  143. package/dist/{data-display-DT_khPl_.js → data-display-D4oujtx0.js} +239 -238
  144. package/dist/data-display-D4oujtx0.js.map +1 -0
  145. package/dist/{date-DCrsDTZc.js → date-Q7jnXxpk.js} +5 -5
  146. package/dist/{date-DCrsDTZc.js.map → date-Q7jnXxpk.js.map} +1 -1
  147. package/dist/{date-picker-ay0Pha_a.js → date-picker-zOt1oNss.js} +102 -90
  148. package/dist/date-picker-zOt1oNss.js.map +1 -0
  149. package/dist/date-pickers-cj8IXbDC.js +179 -0
  150. package/dist/date-pickers-cj8IXbDC.js.map +1 -0
  151. package/dist/{display-hAc1HjpI.js → display-BB4BL_-K.js} +8 -8
  152. package/dist/{display-hAc1HjpI.js.map → display-BB4BL_-K.js.map} +1 -1
  153. package/dist/{dropdown-menu-Cl4X7L5S.js → dropdown-menu-CjY8Vt7W.js} +8 -8
  154. package/dist/{dropdown-menu-Cl4X7L5S.js.map → dropdown-menu-CjY8Vt7W.js.map} +1 -1
  155. package/dist/features/activities.js +11 -11
  156. package/dist/features/ai-chat.js +9 -9
  157. package/dist/features/appointment-calendar.js +222 -220
  158. package/dist/features/appointment-calendar.js.map +1 -1
  159. package/dist/features/async-preview.js +8 -8
  160. package/dist/features/combobox.js +1 -1
  161. package/dist/features/comments.js +1 -1
  162. package/dist/features/data-view.js +10 -10
  163. package/dist/features/email-composer.js +275 -274
  164. package/dist/features/email-composer.js.map +1 -1
  165. package/dist/features/event-calendar.js +199 -198
  166. package/dist/features/event-calendar.js.map +1 -1
  167. package/dist/features/filters.js +1 -1
  168. package/dist/features/global-search.js +12 -12
  169. package/dist/features/kanban.js +4 -4
  170. package/dist/features/map.js +7 -7
  171. package/dist/features/media-library.js +623 -622
  172. package/dist/features/media-library.js.map +1 -1
  173. package/dist/features/mentions.js +1 -1
  174. package/dist/features/overlays.js +1 -1
  175. package/dist/features/products.js +973 -969
  176. package/dist/features/products.js.map +1 -1
  177. package/dist/features/questionnaire.js +12 -12
  178. package/dist/features/resource-assignment.js +8 -8
  179. package/dist/features/resource.js +113 -112
  180. package/dist/features/resource.js.map +1 -1
  181. package/dist/features/rich-text-editor.js +2 -2
  182. package/dist/features/schema-form.js +254 -253
  183. package/dist/features/schema-form.js.map +1 -1
  184. package/dist/features/suggestions.js +3 -3
  185. package/dist/features/sync.js +3 -3
  186. package/dist/features/table.js +1 -1
  187. package/dist/features/theme-tweaker.js +19 -19
  188. package/dist/features/theme-tweaker.js.map +1 -1
  189. package/dist/{feedback-BYIhtitP.js → feedback-DZNL5Lg1.js} +9 -9
  190. package/dist/{feedback-BYIhtitP.js.map → feedback-DZNL5Lg1.js.map} +1 -1
  191. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DjwGx8eM.js} +2 -2
  192. package/dist/{field-affordance-recipes-DZhnIL_Y.js.map → field-affordance-recipes-DjwGx8eM.js.map} +1 -1
  193. package/dist/{filters-BGfvjP4d.js → filters-BcT-uoFy.js} +19 -19
  194. package/dist/{filters-BGfvjP4d.js.map → filters-BcT-uoFy.js.map} +1 -1
  195. package/dist/{form-field-CwH9y77i.js → form-field-CsgRmdit.js} +14 -8
  196. package/dist/form-field-CsgRmdit.js.map +1 -0
  197. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-NXgjkmBG.js} +3 -3
  198. package/dist/{form-sizing-BdP_Mf5p.js.map → form-sizing-NXgjkmBG.js.map} +1 -1
  199. package/dist/{forms-B9G_xwzi.js → forms-BV5m5aQF.js} +83 -65
  200. package/dist/forms-BV5m5aQF.js.map +1 -0
  201. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-Cd33AKbD.js} +288 -288
  202. package/dist/forms-numeric-Cd33AKbD.js.map +1 -0
  203. package/dist/{header-CGXuhcRm.js → header-BA697l4a.js} +14 -14
  204. package/dist/{header-CGXuhcRm.js.map → header-BA697l4a.js.map} +1 -1
  205. package/dist/hooks/useFormErrors.d.ts +1 -1
  206. package/dist/{hooks-Dkz0K2WT.js → hooks-BQ-L7Uu2.js} +2 -2
  207. package/dist/{hooks-Dkz0K2WT.js.map → hooks-BQ-L7Uu2.js.map} +1 -1
  208. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-COWbCCWu.js} +3 -3
  209. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-COWbCCWu.js.map} +1 -1
  210. package/dist/index.js +2 -2
  211. package/dist/input-Cdw4k0fb.js +289 -0
  212. package/dist/input-Cdw4k0fb.js.map +1 -0
  213. package/dist/{input-CZw8iU99.js → input-DOPL5_QE.js} +3 -3
  214. package/dist/{input-CZw8iU99.js.map → input-DOPL5_QE.js.map} +1 -1
  215. package/dist/item-BvZ2DR_x.js +277 -0
  216. package/dist/item-BvZ2DR_x.js.map +1 -0
  217. package/dist/layout/app-shell.js +1 -1
  218. package/dist/layout/auth.js +1 -1
  219. package/dist/layout/containers.js +1 -1
  220. package/dist/layout/header.js +1 -1
  221. package/dist/layout/hooks.js +1 -1
  222. package/dist/layout/navigation.js +1 -1
  223. package/dist/layout/page.js +1 -1
  224. package/dist/layout/settings.js +1 -1
  225. package/dist/layout/sidebar.js +2 -2
  226. package/dist/layout/workspace.js +1 -1
  227. package/dist/layout.js +10 -10
  228. package/dist/lib/affordance-geometry.generated.d.ts +6 -0
  229. package/dist/lib/ui-provider/types.d.ts +1 -1
  230. package/dist/lib/use-popup-focus-recovery.d.ts +8 -0
  231. package/dist/lib/utils.js +1 -1
  232. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-CSl5W1Fy.js} +6 -6
  233. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-CSl5W1Fy.js.map} +1 -1
  234. package/dist/{mentions-utuUvH1K.js → mentions-RKOQaaIB.js} +8 -8
  235. package/dist/{mentions-utuUvH1K.js.map → mentions-RKOQaaIB.js.map} +1 -1
  236. package/dist/{message-DZ_ruyUV.js → message-INU2xsxu.js} +4 -4
  237. package/dist/{message-DZ_ruyUV.js.map → message-INU2xsxu.js.map} +1 -1
  238. package/dist/metadata-list-qVV7AVxa.js +443 -0
  239. package/dist/metadata-list-qVV7AVxa.js.map +1 -0
  240. package/dist/{navigation-BzhHI3lo.js → navigation-BQNcg1jT.js} +8 -8
  241. package/dist/{navigation-BzhHI3lo.js.map → navigation-BQNcg1jT.js.map} +1 -1
  242. package/dist/{navigation-Bnotn4AQ.js → navigation-DLF3E1IC.js} +7 -7
  243. package/dist/{navigation-Bnotn4AQ.js.map → navigation-DLF3E1IC.js.map} +1 -1
  244. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-WZEs-hYo.js} +2 -2
  245. package/dist/{navigation-row-recipes-BFLCk_Aq.js.map → navigation-row-recipes-WZEs-hYo.js.map} +1 -1
  246. package/dist/{number-DbV1Dija.js → number-E_OiIfJz.js} +5 -5
  247. package/dist/{number-DbV1Dija.js.map → number-E_OiIfJz.js.map} +1 -1
  248. package/dist/{overflow-tab-bar-CWY7Nogn.js → overflow-tab-bar-CrbqMteP.js} +107 -105
  249. package/dist/overflow-tab-bar-CrbqMteP.js.map +1 -0
  250. package/dist/{overlays-DNWmZrJ4.js → overlays-BlKynmde.js} +322 -319
  251. package/dist/overlays-BlKynmde.js.map +1 -0
  252. package/dist/page-CIwNUtGr.js +227 -0
  253. package/dist/page-CIwNUtGr.js.map +1 -0
  254. package/dist/page-header-commands-DFMlNYzN.js +128 -0
  255. package/dist/page-header-commands-DFMlNYzN.js.map +1 -0
  256. package/dist/{pagination-BL25hu2s.js → pagination-Ch8X_47u.js} +5 -5
  257. package/dist/{pagination-BL25hu2s.js.map → pagination-Ch8X_47u.js.map} +1 -1
  258. package/dist/{popover-menu-B9WWygpa.js → popover-menu-BYaCdFhf.js} +6 -6
  259. package/dist/{popover-menu-B9WWygpa.js.map → popover-menu-BYaCdFhf.js.map} +1 -1
  260. package/dist/{popover-7_m66eYW.js → popover-uwzX2vo7.js} +65 -63
  261. package/dist/popover-uwzX2vo7.js.map +1 -0
  262. package/dist/{primitives-BFK08r9M.js → primitives-Du64iDbb.js} +6 -6
  263. package/dist/{primitives-BFK08r9M.js.map → primitives-Du64iDbb.js.map} +1 -1
  264. package/dist/primitives.js +4 -4
  265. package/dist/{progress-B1VnCT0K.js → progress-BvF2oCdV.js} +5 -5
  266. package/dist/{progress-B1VnCT0K.js.map → progress-BvF2oCdV.js.map} +1 -1
  267. package/dist/{receipt-BVSOH3Xo.js → receipt-D789Jwyy.js} +6 -6
  268. package/dist/{receipt-BVSOH3Xo.js.map → receipt-D789Jwyy.js.map} +1 -1
  269. package/dist/{rich-text-GOUyKQ-s.js → rich-text-CLJEf76s.js} +4 -4
  270. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-CLJEf76s.js.map} +1 -1
  271. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-Cm1dpUpQ.js} +10 -10
  272. package/dist/{rich-text-editor-cRLC-eBK.js.map → rich-text-editor-Cm1dpUpQ.js.map} +1 -1
  273. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-L__e4x47.js} +4 -4
  274. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js.map → rich-text-editor-toolbar-L__e4x47.js.map} +1 -1
  275. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-La5RXsEk.js} +2 -2
  276. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-La5RXsEk.js.map} +1 -1
  277. package/dist/{separator-Bom7NsGO.js → separator-DAEV0w65.js} +2 -2
  278. package/dist/{separator-Bom7NsGO.js.map → separator-DAEV0w65.js.map} +1 -1
  279. package/dist/{separator-BDV-Y648.js → separator-GNfPG-90.js} +3 -3
  280. package/dist/{separator-BDV-Y648.js.map → separator-GNfPG-90.js.map} +1 -1
  281. package/dist/services/actions.js +1 -1
  282. package/dist/settings-BA2iboic.js +174 -0
  283. package/dist/settings-BA2iboic.js.map +1 -0
  284. package/dist/{sheet-CGpB3omz.js → sheet-DoAxTb2J.js} +75 -73
  285. package/dist/sheet-DoAxTb2J.js.map +1 -0
  286. package/dist/{sidebar-A0ElHINE.js → sidebar-ByqKR_W5.js} +13 -13
  287. package/dist/{sidebar-A0ElHINE.js.map → sidebar-ByqKR_W5.js.map} +1 -1
  288. package/dist/{sidebar-CPx_7YBa.js → sidebar-D2iSnGJ7.js} +11 -11
  289. package/dist/{sidebar-CPx_7YBa.js.map → sidebar-D2iSnGJ7.js.map} +1 -1
  290. package/dist/{skeleton-Byjnt7qr.js → skeleton-CUj8O5Bd.js} +3 -3
  291. package/dist/{skeleton-Byjnt7qr.js.map → skeleton-CUj8O5Bd.js.map} +1 -1
  292. package/dist/smart-card-CqkzQsK-.js +614 -0
  293. package/dist/smart-card-CqkzQsK-.js.map +1 -0
  294. package/dist/{structure-BmisBK-3.js → structure-C0V0_Fyf.js} +3 -3
  295. package/dist/{structure-BmisBK-3.js.map → structure-C0V0_Fyf.js.map} +1 -1
  296. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  297. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  298. package/dist/style.css +1 -1
  299. package/dist/{table-DsfzoUia.js → table-CpvnzJn9.js} +3 -3
  300. package/dist/{table-DsfzoUia.js.map → table-CpvnzJn9.js.map} +1 -1
  301. package/dist/{table-BweFy_P9.js → table-DH7rozUv.js} +19 -19
  302. package/dist/{table-BweFy_P9.js.map → table-DH7rozUv.js.map} +1 -1
  303. package/dist/{tabs-CDocW5D1.js → tabs-eqVsJZWO.js} +7 -7
  304. package/dist/{tabs-CDocW5D1.js.map → tabs-eqVsJZWO.js.map} +1 -1
  305. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-DXItiR0O.js} +101 -98
  306. package/dist/text-inputs-DXItiR0O.js.map +1 -0
  307. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  308. package/dist/text.styles-B64My8RZ.js.map +1 -0
  309. package/dist/theme.css +152 -112
  310. package/dist/{timelines-CwM_9IhD.js → timelines-DmtztAY_.js} +10 -10
  311. package/dist/{timelines-CwM_9IhD.js.map → timelines-DmtztAY_.js.map} +1 -1
  312. package/dist/{tooltip-yiRJUFjp.js → tooltip-B4hjKtoV.js} +3 -3
  313. package/dist/{tooltip-yiRJUFjp.js.map → tooltip-B4hjKtoV.js.map} +1 -1
  314. package/dist/{tree-WnKQzwbq.js → tree-CV11PURP.js} +8 -8
  315. package/dist/{tree-WnKQzwbq.js.map → tree-CV11PURP.js.map} +1 -1
  316. package/dist/typography/rich-text.js +1 -1
  317. package/dist/typography-CSyJrh28.js +117 -0
  318. package/dist/typography-CSyJrh28.js.map +1 -0
  319. package/dist/typography.js +1 -1
  320. package/dist/{ui-provider-C_U0Xma4.js → ui-provider-CQCuCBcy.js} +3 -3
  321. package/dist/ui-provider-CQCuCBcy.js.map +1 -0
  322. package/dist/ui-provider.js +1 -1
  323. package/dist/{upload-CXyxmQBP.js → upload-C9SA0X-8.js} +11 -11
  324. package/dist/{upload-CXyxmQBP.js.map → upload-C9SA0X-8.js.map} +1 -1
  325. package/dist/{upload-queue-Boscubn9.js → upload-queue-DhQJiSRc.js} +9 -9
  326. package/dist/{upload-queue-Boscubn9.js.map → upload-queue-DhQJiSRc.js.map} +1 -1
  327. package/dist/{usage-card-BhO5eqkX.js → usage-card-DVTRDmGz.js} +134 -133
  328. package/dist/usage-card-DVTRDmGz.js.map +1 -0
  329. package/dist/use-popup-focus-recovery-C0QPvgOR.js +36 -0
  330. package/dist/use-popup-focus-recovery-C0QPvgOR.js.map +1 -0
  331. package/dist/{utils-BRhFDwuU.js → utils-CF3c95Io.js} +68 -5
  332. package/dist/utils-CF3c95Io.js.map +1 -0
  333. package/dist/value-inputs-C0o70p-U.js +980 -0
  334. package/dist/value-inputs-C0o70p-U.js.map +1 -0
  335. package/dist/{value-typography-BP8OG6h5.js → value-typography-ClupF0Gz.js} +2 -2
  336. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-ClupF0Gz.js.map} +1 -1
  337. package/dist/workspace-9EFVXUyk.js +410 -0
  338. package/dist/workspace-9EFVXUyk.js.map +1 -0
  339. package/docs/consumer-skill/SKILL.md +14 -129
  340. package/docs/consumer-skill/examples/app-layout.tsx +22 -12
  341. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  342. package/docs/consumer-skill/examples/edit.tsx +30 -38
  343. package/docs/consumer-skill/examples/manifest.json +51 -1
  344. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  345. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  346. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +92 -0
  347. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  348. package/docs/consumer-skill/references/agents-md.md +17 -7
  349. package/docs/consumer-skill/references/authentication.md +42 -0
  350. package/docs/consumer-skill/references/component-contracts.json +319824 -0
  351. package/docs/consumer-skill/references/composition-mapping.md +92 -0
  352. package/docs/consumer-skill/references/composition.md +43 -19
  353. package/docs/consumer-skill/references/design-contract.md +32 -0
  354. package/docs/consumer-skill/references/discovery.md +84 -7
  355. package/docs/consumer-skill/references/installation.md +45 -35
  356. package/docs/consumer-skill/references/integration.md +6 -2
  357. package/docs/consumer-skill/references/public-api.json +1520 -66
  358. package/docs/consumer-skill/references/review.md +9 -4
  359. package/docs/consumer-skill/references/rhf-workflows.md +86 -0
  360. package/docs/consumer-skill/references/screen-archetypes.md +22 -0
  361. package/docs/consumer-skill/references/theming.md +8 -9
  362. package/docs/consumer-skill/references/tokens.json +12 -3
  363. package/docs/consumer-skill/references/workflows.md +7 -5
  364. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  365. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  366. package/docs/consumer-skill/scripts/composition.mjs +198 -0
  367. package/docs/consumer-skill/scripts/discovery.mjs +42 -10
  368. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  369. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  370. package/docs/consumer-skill/scripts/inspection.mjs +138 -0
  371. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  372. package/docs/consumer-skill/scripts/setup-skills.mjs +76 -0
  373. package/docs/consumer-skills/themelia-components/SKILL.md +30 -0
  374. package/docs/consumer-skills/themelia-composition/SKILL.md +35 -0
  375. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  376. package/docs/consumer-skills/themelia-foundation/SKILL.md +14 -0
  377. package/docs/consumer-skills/themelia-tokenization/SKILL.md +35 -0
  378. package/package.json +6 -4
  379. package/templates/README.md +39 -0
  380. package/templates/admin-shell-template.tsx +382 -0
  381. package/templates/analytics-operations-template.tsx +376 -0
  382. package/templates/customers-template.tsx +509 -0
  383. package/templates/index.ts +29 -0
  384. package/templates/orders-template.tsx +1102 -0
  385. package/templates/products-template.tsx +834 -0
  386. package/templates/user-permissions-template.tsx +450 -0
  387. package/dist/action-menu-CllU52Mm.js +0 -280
  388. package/dist/action-menu-CllU52Mm.js.map +0 -1
  389. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  390. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  391. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  392. package/dist/cards-BaBZR-AU.js.map +0 -1
  393. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  394. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  395. package/dist/combobox-C0EQW6dr.js.map +0 -1
  396. package/dist/combobox-xCQ2RMNE.js.map +0 -1
  397. package/dist/comments-BYYlTA8E.js.map +0 -1
  398. package/dist/containers-Mu1LMGV1.js +0 -103
  399. package/dist/containers-Mu1LMGV1.js.map +0 -1
  400. package/dist/data-display-DT_khPl_.js.map +0 -1
  401. package/dist/date-picker-ay0Pha_a.js.map +0 -1
  402. package/dist/date-pickers-Ccw8DL2b.js +0 -175
  403. package/dist/date-pickers-Ccw8DL2b.js.map +0 -1
  404. package/dist/form-field-CwH9y77i.js.map +0 -1
  405. package/dist/forms-B9G_xwzi.js.map +0 -1
  406. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  407. package/dist/input-DQdEd0YD.js +0 -263
  408. package/dist/input-DQdEd0YD.js.map +0 -1
  409. package/dist/item-K5_ghvze.js +0 -275
  410. package/dist/item-K5_ghvze.js.map +0 -1
  411. package/dist/metadata-list-8N16ZMW_.js +0 -405
  412. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  413. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  414. package/dist/overlays-DNWmZrJ4.js.map +0 -1
  415. package/dist/page-Bgl1F560.js +0 -224
  416. package/dist/page-Bgl1F560.js.map +0 -1
  417. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  418. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  419. package/dist/popover-7_m66eYW.js.map +0 -1
  420. package/dist/settings-ybnjVwbd.js +0 -171
  421. package/dist/settings-ybnjVwbd.js.map +0 -1
  422. package/dist/sheet-CGpB3omz.js.map +0 -1
  423. package/dist/smart-card-DiC5aac3.js +0 -604
  424. package/dist/smart-card-DiC5aac3.js.map +0 -1
  425. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  426. package/dist/text.styles-g4He6UIW.js.map +0 -1
  427. package/dist/typography-UTnveOEy.js +0 -117
  428. package/dist/typography-UTnveOEy.js.map +0 -1
  429. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  430. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  431. package/dist/utils-BRhFDwuU.js.map +0 -1
  432. package/dist/value-inputs-DXPDjvBU.js +0 -963
  433. package/dist/value-inputs-DXPDjvBU.js.map +0 -1
  434. package/dist/workspace-Cdrg7k9f.js +0 -408
  435. package/dist/workspace-Cdrg7k9f.js.map +0 -1
@@ -0,0 +1,281 @@
1
+ "use client";
2
+ import { s as e, v as t } from "./ui-provider-CQCuCBcy.js";
3
+ import { useStrings as n } from "./lib/strings.js";
4
+ import { t as r } from "./utils-CF3c95Io.js";
5
+ import { n as i } from "./buttons-BbfzgczK.js";
6
+ import { c as a } from "./typography-CSyJrh28.js";
7
+ import { t as o } from "./composition.recipes-COdiFhxB.js";
8
+ import { i as s, t as c } from "./popover.recipes-D3j8R8Yp.js";
9
+ import { t as l } from "./collection-content-C0e8SsTm.js";
10
+ import { a as u, d, g as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dropdown-menu-CjY8Vt7W.js";
11
+ import y, { isValidElement as b } from "react";
12
+ import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
13
+ import { MoreHorizontal as w } from "lucide-react";
14
+ //#region src/components/base/action-menu/action-menu.recipes.ts
15
+ var T = {
16
+ icon: w,
17
+ context: {
18
+ inline: {
19
+ tone: "secondary",
20
+ buttonStyle: "ghost",
21
+ glyph: "text-muted-foreground"
22
+ },
23
+ commands: {
24
+ tone: "secondary",
25
+ buttonStyle: "outline",
26
+ glyph: void 0
27
+ }
28
+ }
29
+ }, E = { openMenuLabel: "More actions" };
30
+ //#endregion
31
+ //#region src/components/base/action-menu/action-menu.tsx
32
+ function D(e) {
33
+ return e.tone === "destructive";
34
+ }
35
+ function O(e, t = !1) {
36
+ let n = e.filter((e) => e.visible !== !1);
37
+ if (t) return n;
38
+ let r = n.filter((e) => !D(e)), i = n.filter(D);
39
+ return [...r, ...i];
40
+ }
41
+ function k(e, t) {
42
+ return e.id ?? (typeof e.label == "string" ? e.label : `action-${t}`);
43
+ }
44
+ function A(e) {
45
+ return e ? b(e) ? e : typeof e == "function" ? /* @__PURE__ */ S(e, {
46
+ className: "size-icon-sm",
47
+ "aria-hidden": "true"
48
+ }) : typeof e == "object" && e && "$$typeof" in e ? /* @__PURE__ */ S(e, {
49
+ className: "size-icon-sm",
50
+ "aria-hidden": !0
51
+ }) : e : null;
52
+ }
53
+ function j(e, t) {
54
+ return typeof e == "string" || typeof e == "number" || typeof e == "bigint" ? /* @__PURE__ */ S(a, {
55
+ tag: "span",
56
+ size: "inherit",
57
+ weight: "medium",
58
+ lineHeight: "tight",
59
+ className: r("text-inherit", t),
60
+ children: e
61
+ }) : t ? /* @__PURE__ */ S("span", {
62
+ className: t,
63
+ children: e
64
+ }) : e;
65
+ }
66
+ function M(e) {
67
+ return e === "destructive" ? "destructive" : "default";
68
+ }
69
+ function N(e) {
70
+ let t = e.buttonStyle;
71
+ return t === "link" ? {
72
+ tone: e.tone,
73
+ buttonStyle: "ghost",
74
+ className: "underline underline-offset-[0.2em]"
75
+ } : {
76
+ tone: e.tone,
77
+ buttonStyle: t
78
+ };
79
+ }
80
+ function P({ action: e, index: t, density: n, closeOnSelect: i, renderLink: a }) {
81
+ let o = k(e, t), s = e.closeOnSelect ?? i;
82
+ if (e.render) return /* @__PURE__ */ S("div", {
83
+ className: "action-menu--item",
84
+ children: e.render
85
+ }, o);
86
+ let d = A(e.icon), f = /* @__PURE__ */ S(l, {
87
+ label: e.label,
88
+ leading: d,
89
+ wrap: !0,
90
+ className: r("action-menu--item-content w-full", e.contentClassName),
91
+ leadingClassName: "action-menu--item-icon text-inherit",
92
+ labelClassName: "action-menu--item-label"
93
+ }), p = r("action-menu--item", n === "table" && c.tableRow, e.className);
94
+ if (e.type === "checkbox") return /* @__PURE__ */ S(m, {
95
+ checked: !!e.checked,
96
+ disabled: e.disabled,
97
+ closeOnClick: s,
98
+ onCheckedChange: e.onCheckedChange,
99
+ className: p,
100
+ children: f
101
+ }, o);
102
+ if (e.href && !e.disabled) {
103
+ let t = e.href;
104
+ return /* @__PURE__ */ S(_, {
105
+ href: t,
106
+ variant: M(e.tone),
107
+ closeOnClick: s,
108
+ onClick: e.onClick,
109
+ render: a ? a({
110
+ href: t,
111
+ children: f,
112
+ target: e.target,
113
+ rel: e.rel,
114
+ external: e.external,
115
+ disabled: e.disabled
116
+ }) : (n) => /* @__PURE__ */ S("a", {
117
+ ...n,
118
+ href: t,
119
+ target: e.target,
120
+ rel: e.rel
121
+ }),
122
+ className: p,
123
+ children: f
124
+ }, o);
125
+ }
126
+ return /* @__PURE__ */ S(u, {
127
+ disabled: e.disabled,
128
+ variant: M(e.tone),
129
+ closeOnClick: s,
130
+ onClick: e.onClick,
131
+ className: p,
132
+ children: f
133
+ }, o);
134
+ }
135
+ function F(e) {
136
+ let t = [], n = null;
137
+ return e.actions.forEach((i, a) => {
138
+ let o = i.group ?? null, s = o !== n;
139
+ t.length > 0 && s && t.push(/* @__PURE__ */ S(d, { className: i.groupClassName }, `sep-${n ?? "root"}-${o ?? "root"}-${a}`)), s && (n = o, typeof o == "string" && t.push(/* @__PURE__ */ S(h, {
140
+ className: r("normal-case", i.groupClassName),
141
+ children: o
142
+ }, `group-${o}-${a}`))), t.push(P({
143
+ ...e,
144
+ action: i,
145
+ index: a
146
+ }));
147
+ }), t;
148
+ }
149
+ function I(e, t) {
150
+ typeof e == "function" ? e(t) : e && (e.current = t);
151
+ }
152
+ var L = y.forwardRef(function({ actions: o, label: c, icon: l = T.icon, srText: u, context: d = "inline", buttonProps: m, align: h = "end", side: _ = "bottom", contentClassName: b = "", width: w = "w-auto", closeOnSelect: D = !0, density: k = "default", labelVisibility: j = "visible", preserveOrder: M = !1, renderLink: N, renderTrigger: P, strings: L }, R) {
153
+ let [z, B] = y.useState(!1), { defaultScale: V } = e(), H = n(E, L), U = u ?? H.openMenuLabel, W = y.useMemo(() => O(o, M), [o, M]);
154
+ if (W.length === 0) return null;
155
+ let G = !!c && j === "visible", K = !!c && j === "responsive", q = T.context[d] ?? T.context.inline, J = G ? m?.size ?? "sm" : t(m?.size, V), Y = J === "sm" ? "size-action-sm" : J === "lg" ? "size-action-lg" : "size-action", X = {
156
+ tone: q.tone,
157
+ buttonStyle: q.buttonStyle,
158
+ size: J,
159
+ iconOnly: !G,
160
+ className: G ? void 0 : K ? `${Y} p-0 sm:w-auto sm:gap-space-sm sm:px-control-sm` : r(`${Y} p-0`, q.glyph)
161
+ }, { tone: Z = q.tone, buttonStyle: Q = q.buttonStyle, size: ee = J, iconOnly: te = !G, className: ne, ...re } = {
162
+ ...X,
163
+ ...m,
164
+ className: r(X.className, m?.className)
165
+ }, ie = j === "hidden" ? "sr-only" : j === "responsive" ? "sr-only sm:not-sr-only" : void 0, $ = A(l), ae = c ? /* @__PURE__ */ C(x, { children: [$, /* @__PURE__ */ S(a, {
166
+ tag: "span",
167
+ size: "inherit",
168
+ weight: "medium",
169
+ lineHeight: "tight",
170
+ className: r("whitespace-nowrap text-inherit", ie),
171
+ children: c
172
+ })] }) : /* @__PURE__ */ C(x, { children: [$, /* @__PURE__ */ S(a, {
173
+ tag: "span",
174
+ size: "inherit",
175
+ className: "sr-only",
176
+ children: U
177
+ })] });
178
+ return /* @__PURE__ */ C(v, {
179
+ open: z,
180
+ onOpenChange: B,
181
+ children: [/* @__PURE__ */ S(f, { render: P ?? ((e) => {
182
+ let { ref: t } = e, n = (e) => {
183
+ I(t, e), I(R, e);
184
+ };
185
+ return /* @__PURE__ */ S(i, {
186
+ ...re,
187
+ ...e,
188
+ ref: n,
189
+ type: "button",
190
+ tone: Z,
191
+ buttonStyle: Q,
192
+ size: ee,
193
+ iconOnly: te,
194
+ "data-context": d,
195
+ className: r("action-menu--component", ne, e.className),
196
+ children: ae
197
+ });
198
+ }) }), /* @__PURE__ */ S(g, {
199
+ density: k === "table" ? "compact" : k,
200
+ align: h,
201
+ side: _,
202
+ className: r("action-menu--content", w, s.menuMin, b),
203
+ children: /* @__PURE__ */ S(p, {
204
+ className: "action-menu--group",
205
+ children: F({
206
+ actions: W,
207
+ density: k,
208
+ closeOnSelect: D,
209
+ renderLink: N
210
+ })
211
+ })
212
+ })]
213
+ });
214
+ });
215
+ L.displayName = "ActionMenu";
216
+ var R = y.forwardRef(function({ actions: e, className: t, buttonClassName: n, size: a = "sm", renderLink: s }, c) {
217
+ let l = O(e, !0);
218
+ return l.length === 0 ? null : /* @__PURE__ */ S("div", {
219
+ ref: c,
220
+ className: r("action-buttons--component flex flex-wrap items-center", o.commands, t),
221
+ children: l.map((e, t) => {
222
+ let o = k(e, t);
223
+ if (e.render) return /* @__PURE__ */ S(y.Fragment, { children: e.render }, o);
224
+ let c = A(e.icon), l = N(e), u = /* @__PURE__ */ C(x, { children: [!!c && /* @__PURE__ */ S("span", {
225
+ className: "action-buttons--icon inline-flex shrink-0 items-center",
226
+ children: c
227
+ }), j(e.label, "action-buttons--label")] });
228
+ if (e.href && !e.disabled && s) {
229
+ let t = e.href;
230
+ return /* @__PURE__ */ S(i, {
231
+ type: "button",
232
+ tone: l.tone,
233
+ buttonStyle: l.buttonStyle,
234
+ size: e.buttonSize ?? a,
235
+ nativeButton: !1,
236
+ className: r("action-buttons--item", l.className, n, e.className),
237
+ onClick: () => {
238
+ e.onClick?.();
239
+ },
240
+ render: (n) => s({
241
+ ...n,
242
+ href: t,
243
+ children: n.children,
244
+ target: e.target,
245
+ rel: e.rel,
246
+ external: e.external,
247
+ disabled: e.disabled
248
+ }),
249
+ children: u
250
+ }, o);
251
+ }
252
+ return e.href && !e.disabled ? /* @__PURE__ */ S(i, {
253
+ href: e.href,
254
+ target: e.target,
255
+ rel: e.rel,
256
+ tone: l.tone,
257
+ buttonStyle: l.buttonStyle,
258
+ size: e.buttonSize ?? a,
259
+ className: r("action-buttons--item", l.className, n, e.className),
260
+ onClick: e.onClick,
261
+ children: u
262
+ }, o) : /* @__PURE__ */ S(i, {
263
+ type: "button",
264
+ tone: l.tone,
265
+ buttonStyle: l.buttonStyle,
266
+ size: e.buttonSize ?? a,
267
+ className: r("action-buttons--item", l.className, n, e.className),
268
+ disabled: !!e.disabled,
269
+ onClick: () => {
270
+ e.onClick?.();
271
+ },
272
+ children: u
273
+ }, o);
274
+ })
275
+ });
276
+ });
277
+ R.displayName = "ActionButtons";
278
+ //#endregion
279
+ export { L as n, E as r, R as t };
280
+
281
+ //# sourceMappingURL=action-menu-CHgs8vmj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-menu-CHgs8vmj.js","names":["Icon","_Fragment","_jsx","useDensityConfig","resolveComponentScale","cn","Button","Text","compositionClasses","popoverWidthRecipes","collectionRecipes","CollectionContent","DropdownMenuItem","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuCheckboxItem","DropdownMenuLabel","DropdownMenuContent","DropdownMenuLinkItem","DropdownMenu","React","Fragment$1","overflowTriggerRecipes","MoreHorizontal","defaultActionMenuStrings","isDestructiveAction","action","resolveActions","visible","actions","preserveOrder","standard","destructive","getActionKey","index","renderActionIcon","icon","isValidElement","renderActionLabel","label","className","toMenuVariant","tone","toButtonPresentation","buttonStyle","renderMenuAction","key","shouldCloseOnSelect","closeOnSelect","content","density","href","renderLink","props","renderGroupedActions","nodes","currentGroup","args","nextGroup","groupChanged","DropdownMenuSeparator","assignRef","ref","node","ActionMenu","stringsProp","open","setOpen","strings","useStrings","resolvedSrText","srText","resolvedActions","hasVisibleLabel","labelVisibility","hasResponsiveLabel","recipe","context","requestedSize","buttonProps","defaultScale","squareClass","defaultButtonProps","triggerClassName","triggerProps","labelClassName","triggerIcon","buttonContent","renderTrigger","baseTriggerRef","dropdownTriggerProps","composedRef","width","contentClassName","ActionButtons","visibleActions","resolved","children","size","buttonClassName","buttonRenderProps"],"sources":["../src/components/base/action-menu/action-menu.recipes.ts","../src/components/base/action-menu/action-menu.strings.ts","../src/components/base/action-menu/action-menu.tsx"],"sourcesContent":["/**\n * Overflow trigger recipe — the one `⋯` square every overflow menu shares.\n *\n * The glyph and the default \"More actions\" name are fixed. `context` picks the\n * treatment for where the menu sits, and the square takes the size of the\n * controls beside it (`buttonProps.size`) or the provider scale, like every\n * other Button. A menu that shares a row with a primary command ends that row.\n */\nimport { MoreHorizontal } from 'lucide-react';\n\n/**\n * Where an overflow menu sits. `inline` is the quiet ghost square for rows,\n * cards, list items and footers; `commands` is the outline square that ends a\n * row of outline commands, such as a page header or toolbar.\n */\nexport type ActionMenuContext = 'inline' | 'commands';\n\nexport const overflowTriggerRecipes = {\n\ticon: MoreHorizontal,\n\tcontext: {\n\t\t// No fill until hover, and a muted glyph that does not compete with the content.\n\t\tinline: { tone: 'secondary', buttonStyle: 'ghost', glyph: 'text-muted-foreground' },\n\t\t// The commands' own boundary and ink.\n\t\tcommands: { tone: 'secondary', buttonStyle: 'outline', glyph: undefined },\n\t},\n} as const;\n","export interface ActionMenuStrings {\n\topenMenuLabel: string;\n}\n\nexport const defaultActionMenuStrings: ActionMenuStrings = {\n\topenMenuLabel: 'More actions',\n};\n","/**\n * ActionMenu — centralized action chrome for page, card, table, and row\n * overflow menus.\n *\n * Primary API is definition-driven: pass `actions={[...]}` and the component\n * renders the trigger, menu surface, grouping, checkbox rows, destructive\n * separation, links, disabled state, and density. `ActionButtons` renders the\n * same definitions as inline buttons for page/toolbars that need visible\n * actions plus an overflow menu.\n *\n * Without a visible `label` the trigger is the shared overflow square from\n * `action-menu.recipes.ts`: a `⋯` glyph named \"More actions\", ghost `inline`\n * or outline `commands`, at the size of the controls beside it or the\n * provider scale.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport React, { isValidElement, type ComponentType, type ElementType, type ReactElement, type ReactNode } from 'react';\n\nimport { Button, type ButtonSize, type ButtonStyle } from '../buttons';\nimport { compositionClasses } from '../structure/composition.recipes';\nimport { collectionRecipes, popoverWidthRecipes, type CollectionDensity } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\nimport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuLinkItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '../navigation/dropdown-menu';\nimport { Text } from '../../typography';\nimport type { ActionButtonStyle, ActionPresentation } from '../../../lib/action-presentation';\nimport { resolveComponentScale, useDensityConfig } from '../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { overflowTriggerRecipes, type ActionMenuContext } from './action-menu.recipes';\nimport {\n\tdefaultActionMenuStrings,\n\ttype ActionMenuStrings,\n} from './action-menu.strings';\n\ntype ActionMenuButtonProps = Partial<React.ComponentPropsWithoutRef<typeof Button>> & {\n\t[key: `data-${string}`]: string | boolean | undefined;\n\t'aria-label'?: string;\n\tonPointerDown?: React.PointerEventHandler<HTMLButtonElement>;\n};\nexport type ActionMenuDensity = CollectionDensity | 'table';\nexport type ActionMenuLabelVisibility = 'visible' | 'responsive' | 'hidden';\nexport interface ActionMenuLinkRenderProps extends React.ComponentPropsWithoutRef<'a'> {\n\thref: string;\n\tdisabled?: boolean;\n\texternal?: boolean;\n}\n\nexport type ActionMenuIcon = LucideIcon | ComponentType<{ className?: string }> | ReactNode;\n\nexport interface ActionMenuAction extends ActionPresentation {\n\t/** Stable React key. Falls back to a string `label`, then the index. */\n\tid?: string;\n\t/** Visible label for the entry. */\n\tlabel: ReactNode;\n\t/** Leading glyph. Accepts a Lucide icon, a component, or a rendered node. */\n\ticon?: ActionMenuIcon;\n\t/** `'checkbox'` renders a toggle driven by `checked`/`onCheckedChange`. Defaults to `'item'`. */\n\ttype?: 'item' | 'checkbox';\n\t/**\n\t * Renders the entry as a link. By default this is a native `<a href>`, so it\n\t * performs a full page navigation; pass `renderLink` on `ActionMenu` to route\n\t * it through your framework's router instead.\n\t */\n\thref?: string;\n\t/** Anchor target forwarded to the rendered link. Requires `href`. */\n\ttarget?: string;\n\t/** Anchor rel forwarded to the rendered link. Requires `href`. */\n\trel?: string;\n\t/** Marks the destination as leaving the app; forwarded to `renderLink`. */\n\texternal?: boolean;\n\t/** Runs when the entry is chosen. This is the handler for a normal item. */\n\tonClick?: () => void;\n\t/** Checked state for a `'checkbox'` entry. */\n\tchecked?: boolean;\n\t/** Fires with the next checked state for a `'checkbox'` entry. */\n\tonCheckedChange?: (checked: boolean) => void;\n\t/**\n\t * Starts a new group, drawing a separator above this entry. A string also\n\t * captions the group; `true` rules off without a heading, for the common\n\t * case of holding one entry apart (a sign-out, a delete) with no label to\n\t * write.\n\t */\n\tgroup?: string | true;\n\t/** Class merged onto this group's starting separator/caption, for example a responsive boundary. Does not style or hide the action rows. */\n\tgroupClassName?: string;\n\t/** Overrides the button size when the action renders as a button. */\n\tbuttonSize?: ButtonSize;\n\t/** Escape hatch merged onto the entry root. */\n\tclassName?: string;\n\t/** Escape hatch merged onto the entry's inner content. */\n\tcontentClassName?: string;\n\t/** Overrides the menu's `closeOnSelect` for this entry. */\n\tcloseOnSelect?: boolean;\n\t/** Replaces the rendered entry, e.g. to emit a framework `<Link>`. */\n\trender?: ReactNode;\n}\n\nexport interface ActionMenuProps {\n\t/**\n\t * Commands to offer. Destructive entries are moved last unless\n\t * `preserveOrder` is set.\n\t */\n\tactions: readonly ActionMenuAction[];\n\t/** Trigger text. Omit for the shared icon-only overflow trigger, and set `srText` to name it. */\n\tlabel?: string;\n\t/** Trigger glyph. Defaults to the horizontal ellipsis (`MoreHorizontal`) every overflow menu shares. */\n\ticon?: ActionMenuIcon;\n\t/** Accessible name when the trigger shows no visible `label`. Defaults to `strings.openMenuLabel`, \"More actions\". */\n\tsrText?: string;\n\t/**\n\t * Where the menu sits, which picks the trigger treatment. `inline` (the\n\t * default) is the quiet ghost square for rows, cards and footers; `commands`\n\t * is the outline square that ends a row of outline commands. Place the menu\n\t * after any primary command in the same row.\n\t */\n\tcontext?: ActionMenuContext;\n\t/**\n\t * Escape hatch forwarded to the trigger button. An icon-only trigger takes\n\t * `size` from here to match the controls beside it, otherwise the provider\n\t * scale.\n\t */\n\tbuttonProps?: ActionMenuButtonProps;\n\t/** Menu alignment against the trigger. Defaults to `end`. */\n\talign?: 'center' | 'start' | 'end';\n\t/** Which edge of the trigger the menu opens from. Defaults to `bottom`. */\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\t/** Merged onto the menu surface. */\n\tcontentClassName?: string;\n\t/** Fixed menu width. Defaults to sizing from the widest item. */\n\twidth?: string;\n\t/** Closes the menu after an action runs. Defaults to `true`. */\n\tcloseOnSelect?: boolean;\n\t/** Vertical row rhythm; table preserves the legacy tight action spacing. Inline room stays stable. */\n\tdensity?: ActionMenuDensity;\n\t/** Whether the trigger's `label` is visible, hidden, or responsive. */\n\tlabelVisibility?: ActionMenuLabelVisibility;\n\t/** Preserve incoming action order instead of moving destructive items last. */\n\tpreserveOrder?: boolean;\n\t/**\n\t * Renders actions carrying an `href` through the consumer's router, keeping\n\t * this component framework-agnostic. Without it, such actions render as\n\t * plain anchors.\n\t */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n\t/**\n\t * Replaces the default trigger button entirely, so a menu can hang off a\n\t * shape that is not a button with a glyph — an account block, a sidebar\n\t * row, a tab that has to match its siblings.\n\t *\n\t * Takes Base UI's `render` contract: either an element, whose props are\n\t * merged for you, or a function receiving the props to spread. Either way\n\t * the ARIA wiring, the open/close handlers and the popup's anchor ref reach\n\t * a real DOM node without anyone cloning anything.\n\t *\n\t * For a plain button that just needs different words or a different glyph,\n\t * `label`, `icon` and `buttonProps` are the smaller tools; reach for this\n\t * only when the trigger is a different thing.\n\t */\n\trenderTrigger?: React.ComponentProps<typeof DropdownMenuTrigger>['render'];\n\t/** Overrides the menu's own copy (the default trigger label). */\n\tstrings?: StringsProp<ActionMenuStrings>;\n}\n\nexport interface ActionButtonsProps {\n\t/**\n\t * Commands to render side by side rather than collapsed into a menu. Each\n\t * resolves like `Button`: untoned actions are the default outline button and\n\t * a `tone` without `buttonStyle` is solid, so mark the main command\n\t * `tone: 'primary'`.\n\t */\n\tactions: readonly ActionMenuAction[];\n\t/** Merged onto the button group. */\n\tclassName?: string;\n\t/** Merged onto every button in the group. */\n\tbuttonClassName?: string;\n\t/** Height preset applied to each button. */\n\tsize?: ButtonSize;\n\t/** Renders actions carrying an `href` through the consumer's router. */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}\n\nfunction isDestructiveAction(action: ActionMenuAction) {\n\treturn action.tone === 'destructive';\n}\n\nfunction resolveActions(actions: readonly ActionMenuAction[], preserveOrder = false) {\n\tconst visible = actions.filter((action) => action.visible !== false);\n\tif (preserveOrder) return visible;\n\n\tconst standard = visible.filter((action) => !isDestructiveAction(action));\n\tconst destructive = visible.filter(isDestructiveAction);\n\treturn [...standard, ...destructive];\n}\n\nfunction getActionKey(action: ActionMenuAction, index: number) {\n\treturn action.id ?? (typeof action.label === 'string' ? action.label : `action-${index}`);\n}\n\nfunction renderActionIcon(icon: ActionMenuAction['icon']) {\n\tif (!icon) return null;\n\tif (isValidElement(icon)) return icon;\n\tif (typeof icon === 'function') {\n\t\tconst Icon = icon as LucideIcon;\n\t\treturn <Icon className=\"size-icon-sm\" aria-hidden=\"true\" />;\n\t}\n\tif (typeof icon === 'object' && icon !== null && '$$typeof' in icon) {\n\t\tconst Icon = icon as unknown as ElementType<{ className?: string; 'aria-hidden'?: boolean }>;\n\t\treturn <Icon className=\"size-icon-sm\" aria-hidden />;\n\t}\n\treturn icon;\n}\n\nfunction renderActionLabel(label: ReactNode, className?: string) {\n\tif (typeof label === 'string' || typeof label === 'number' || typeof label === 'bigint') {\n\t\t// Same label recipe as Button: inherited size, medium weight.\n\t\treturn <Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className={cn('text-inherit', className)}>{label}</Text>;\n\t}\n\treturn className ? <span className={className}>{label}</span> : label;\n}\n\nfunction toMenuVariant(tone: ActionMenuAction['tone']): 'default' | 'destructive' {\n\treturn tone === 'destructive' ? 'destructive' : 'default';\n}\n\n/**\n * Inline actions resolve exactly like `Button`: an untoned action is the neutral\n * default button, and a tone without a style asks for that tone's solid treatment.\n * Mark the one main command with `tone: 'primary'`.\n */\nfunction toButtonPresentation(action: Pick<ActionMenuAction, 'tone' | 'buttonStyle'>): {\n\ttone?: ActionMenuAction['tone'];\n\tbuttonStyle?: ButtonStyle;\n\tclassName?: string;\n} {\n\tconst buttonStyle: ActionButtonStyle | undefined = action.buttonStyle;\n\tif (buttonStyle === 'link') {\n\t\treturn {\n\t\t\ttone: action.tone,\n\t\t\tbuttonStyle: 'ghost',\n\t\t\tclassName: 'underline underline-offset-[0.2em]',\n\t\t};\n\t}\n\treturn { tone: action.tone, buttonStyle };\n}\n\nfunction renderMenuAction({\n\taction,\n\tindex,\n\tdensity,\n\tcloseOnSelect,\n\trenderLink,\n}: {\n\taction: ActionMenuAction;\n\tindex: number;\n\tdensity: ActionMenuDensity;\n\tcloseOnSelect: boolean;\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}) {\n\tconst key = getActionKey(action, index);\n\tconst shouldCloseOnSelect = action.closeOnSelect ?? closeOnSelect;\n\tif (action.render) {\n\t\treturn <div key={key} className=\"action-menu--item\">{action.render}</div>;\n\t}\n\n\tconst icon = renderActionIcon(action.icon);\n\tconst content = (\n\t\t<CollectionContent label={action.label} leading={icon} wrap\n\t\t className={cn('action-menu--item-content w-full',action.contentClassName)}\n\t\t leadingClassName=\"action-menu--item-icon text-inherit\" labelClassName=\"action-menu--item-label\"/>\n\t);\n\tconst className = cn(\n\t\t'action-menu--item',\n\t\tdensity === 'table' && collectionRecipes.tableRow,\n\t\taction.className,\n\t);\n\tif (action.type === 'checkbox') {\n\t\treturn (\n\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\tkey={key}\n\t\t\t\tchecked={!!action.checked}\n\t\t\t\tdisabled={action.disabled}\n\t\t\t\tcloseOnClick={shouldCloseOnSelect}\n\t\t\t\tonCheckedChange={action.onCheckedChange}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuCheckboxItem>\n\t\t);\n\t}\n\n\tif (action.href && !action.disabled) {\n\t\tconst href = action.href;\n\t\treturn (\n\t\t\t<DropdownMenuLinkItem\n\t\t\t\tkey={key}\n\t\t\t\thref={href}\n\t\t\t\tvariant={toMenuVariant(action.tone)}\n\t\t\t\tcloseOnClick={shouldCloseOnSelect}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\t// Element form, not a function, when the consumer supplies a link\n\t\t\t\t// renderer. The function form hands the menu-item props to the\n\t\t\t\t// consumer and trusts them to spread — and the renderer people\n\t\t\t\t// actually write destructures href/children/className and drops the\n\t\t\t\t// rest, which silently costs the row its `role=\"menuitem\"`. Handing\n\t\t\t\t// back an element lets the menu merge its own props on afterwards,\n\t\t\t\t// so a narrow renderer stays accessible.\n\t\t\t\trender={\n\t\t\t\t\trenderLink\n\t\t\t\t\t\t? (renderLink({\n\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t\tdisabled: action.disabled,\n\t\t\t\t\t\t}) as ReactElement)\n\t\t\t\t\t\t: (props) => (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\ttarget={action.target}\n\t\t\t\t\t\t\t\trel={action.rel}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuLinkItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DropdownMenuItem\n\t\tkey={key}\n\t\tdisabled={action.disabled}\n\t\tvariant={toMenuVariant(action.tone)}\n\t\tcloseOnClick={shouldCloseOnSelect}\n\t\tonClick={action.onClick}\n\t\tclassName={className}\n\t\t>\n\t\t\t{content}\n\t\t</DropdownMenuItem>\n\t);\n}\n\nfunction renderGroupedActions(args: {\n\tactions: readonly ActionMenuAction[];\n\tdensity: ActionMenuDensity;\n\tcloseOnSelect: boolean;\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}) {\n\tconst nodes: ReactNode[] = [];\n\tlet currentGroup: string | true | null = null;\n\n\targs.actions.forEach((action, index) => {\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (nodes.length > 0 && groupChanged) {\n\t\t\tnodes.push(<DropdownMenuSeparator key={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${index}`} className={action.groupClassName} />);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (typeof nextGroup === 'string') {\n\t\t\t\tnodes.push(\n\t\t\t\t\t<DropdownMenuLabel\n\t\t\t\t\t\tkey={`group-${nextGroup}-${index}`}\n\t\t\t\t\t\tclassName={cn('normal-case', action.groupClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{nextGroup}\n\t\t\t\t\t</DropdownMenuLabel>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tnodes.push(renderMenuAction({ ...args, action, index }));\n\t});\n\n\treturn nodes;\n}\n\n/**\n * Writes a node into a ref of either shape. `ActionMenu` has two claims on its\n * trigger — Base UI's own anchor ref and the consumer's — so neither may\n * overwrite the other.\n */\nfunction assignRef<T>(ref: React.Ref<T> | undefined, node: T | null) {\n\tif (typeof ref === 'function') {\n\t\tref(node);\n\t} else if (ref) {\n\t\t(ref as React.RefObject<T | null>).current = node;\n\t}\n}\n\nexport const ActionMenu = React.forwardRef<HTMLButtonElement, ActionMenuProps>(function ActionMenu({\n\tactions,\n\tlabel,\n\ticon = overflowTriggerRecipes.icon,\n\tsrText,\n\tcontext = 'inline',\n\tbuttonProps,\n\talign = 'end',\n\tside = 'bottom',\n\tcontentClassName = '',\n\twidth = 'w-auto',\n\tcloseOnSelect = true,\n\tdensity = 'default',\n\tlabelVisibility = 'visible',\n\tpreserveOrder = false,\n\trenderLink,\n\trenderTrigger,\n\tstrings: stringsProp,\n}: ActionMenuProps, ref) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst { defaultScale } = useDensityConfig();\n\tconst strings = useStrings(defaultActionMenuStrings, stringsProp);\n\tconst resolvedSrText = srText ?? strings.openMenuLabel;\n\tconst resolvedActions = React.useMemo(\n\t\t() => resolveActions(actions, preserveOrder),\n\t\t[actions, preserveOrder],\n\t);\n\n\tif (resolvedActions.length === 0) return null;\n\tconst hasVisibleLabel = Boolean(label) && labelVisibility === 'visible';\n\tconst hasResponsiveLabel = Boolean(label) && labelVisibility === 'responsive';\n\n\t// The icon-only square takes the size of the controls beside it\n\t// (`buttonProps.size`), otherwise the provider scale like every other Button.\n\tconst recipe = overflowTriggerRecipes.context[context] ?? overflowTriggerRecipes.context.inline;\n\tconst requestedSize = hasVisibleLabel ? buttonProps?.size ?? 'sm' : resolveComponentScale(buttonProps?.size, defaultScale);\n\tconst squareClass = requestedSize === 'sm' ? 'size-action-sm' : requestedSize === 'lg' ? 'size-action-lg' : 'size-action';\n\tconst defaultButtonProps: ActionMenuButtonProps = {\n\t\ttone: recipe.tone,\n\t\tbuttonStyle: recipe.buttonStyle,\n\t\tsize: requestedSize,\n\t\ticonOnly: !hasVisibleLabel,\n\t\tclassName: hasVisibleLabel\n\t\t\t? undefined\n\t\t\t: hasResponsiveLabel\n\t\t\t\t? `${squareClass} p-0 sm:w-auto sm:gap-space-sm sm:px-control-sm`\n\t\t\t\t: cn(`${squareClass} p-0`, recipe.glyph),\n\t};\n\n\tconst mergedButtonProps = {\n\t\t...defaultButtonProps,\n\t\t...buttonProps,\n\t\tclassName: cn(defaultButtonProps.className, buttonProps?.className),\n\t};\n\n\tconst {\n\t\ttone = recipe.tone,\n\t\tbuttonStyle = recipe.buttonStyle,\n\t\tsize = requestedSize,\n\t\ticonOnly = !hasVisibleLabel,\n\t\tclassName: triggerClassName,\n\t\t...triggerProps\n\t} = mergedButtonProps;\n\n\tconst labelClassName =\n\t\tlabelVisibility === 'hidden'\n\t\t\t? 'sr-only'\n\t\t\t: labelVisibility === 'responsive'\n\t\t\t\t? 'sr-only sm:not-sr-only'\n\t\t\t\t: undefined;\n\n\tconst triggerIcon = renderActionIcon(icon);\n\n\tconst buttonContent = label ? (\n\t\t<>\n\t\t\t{triggerIcon}\n\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className={cn('whitespace-nowrap text-inherit', labelClassName)}>\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</>\n\t) : (\n\t\t<>\n\t\t\t{triggerIcon}\n\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">{resolvedSrText}</Text>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<DropdownMenu open={open} onOpenChange={setOpen}>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={renderTrigger ?? ((dropdownTriggerProps) => {\n\t\t\t\t\t// Base UI supplies its own trigger ref through `render`. Composing\n\t\t\t\t\t// rather than overwriting keeps the popup anchored while still\n\t\t\t\t\t// handing the consumer the trigger element.\n\t\t\t\t\tconst { ref: baseTriggerRef } = dropdownTriggerProps as {\n\t\t\t\t\t\tref?: React.Ref<HTMLButtonElement>;\n\t\t\t\t\t};\n\n\t\t\t\t\tconst composedRef = (node: HTMLButtonElement | null) => {\n\t\t\t\t\t\tassignRef(baseTriggerRef, node);\n\t\t\t\t\t\tassignRef(ref, node);\n\t\t\t\t\t};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t{...dropdownTriggerProps}\n\t\t\t\t\t\t\tref={composedRef}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={tone}\n\t\t\t\t\t\t\tbuttonStyle={buttonStyle}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\ticonOnly={iconOnly}\n\t\t\t\t\t\t\tdata-context={context}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'action-menu--component',\n\t\t\t\t\t\t\t\ttriggerClassName,\n\t\t\t\t\t\t\t\t(dropdownTriggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{buttonContent}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t/>\n\t\t\t<DropdownMenuContent\n\t\t\t\tdensity={density === 'table' ? 'compact' : density}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-menu--content',\n\t\t\t\t\twidth,\n\t\t\t\t\tpopoverWidthRecipes.menuMin,\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<DropdownMenuGroup className=\"action-menu--group\">\n\t\t\t\t\t{renderGroupedActions({\n\t\t\t\t\t\tactions: resolvedActions,\n\t\t\t\t\t\tdensity,\n\t\t\t\t\t\tcloseOnSelect,\n\t\t\t\t\t\trenderLink,\n\t\t\t\t\t})}\n\t\t\t\t</DropdownMenuGroup>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n});\n\nActionMenu.displayName = 'ActionMenu';\n\nexport const ActionButtons = React.forwardRef<HTMLDivElement, ActionButtonsProps>(function ActionButtons({\n\tactions,\n\tclassName,\n\tbuttonClassName,\n\tsize = 'sm',\n\trenderLink,\n}: ActionButtonsProps, ref) {\n\tconst visibleActions = resolveActions(actions, true);\n\tif (visibleActions.length === 0) return null;\n\n\treturn (\n\t\t<div ref={ref} className={cn('action-buttons--component flex flex-wrap items-center', compositionClasses.commands, className)}>\n\t\t\t{visibleActions.map((action, index) => {\n\t\t\t\tconst key = getActionKey(action, index);\n\t\t\t\tif (action.render) {\n\t\t\t\t\treturn <React.Fragment key={key}>{action.render}</React.Fragment>;\n\t\t\t\t}\n\n\t\t\t\tconst icon = renderActionIcon(action.icon);\n\t\t\t\tconst resolved = toButtonPresentation(action);\n\t\t\t\tconst children = (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!icon && <span className=\"action-buttons--icon inline-flex shrink-0 items-center\">{icon}</span>}\n\t\t\t\t\t\t{renderActionLabel(action.label, 'action-buttons--label')}\n\t\t\t\t\t</>\n\t\t\t\t);\n\n\t\t\t\tif (action.href && !action.disabled && renderLink) {\n\t\t\t\t\tconst href = action.href;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\tsize={action.buttonSize ?? size}\n\t\t\t\t\t\t\tnativeButton={false}\n\t\t\t\t\t\t\tclassName={cn('action-buttons--item', resolved.className, buttonClassName, action.className)}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\taction.onClick?.();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trender={(buttonRenderProps) =>\n\t\t\t\t\t\t\t\trenderLink({\n\t\t\t\t\t\t\t\t\t...buttonRenderProps,\n\t\t\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\t\t\tchildren: buttonRenderProps.children,\n\t\t\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t\t\t\tdisabled: action.disabled,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (action.href && !action.disabled) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button key={key} href={action.href} target={action.target} rel={action.rel} tone={resolved.tone} buttonStyle={resolved.buttonStyle} size={action.buttonSize ?? size} className={cn('action-buttons--item', resolved.className, buttonClassName, action.className)} onClick={action.onClick}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst button = (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\tsize={action.buttonSize ?? size}\n\t\t\t\t\t\tclassName={cn('action-buttons--item', resolved.className, buttonClassName, action.className)}\n\t\t\t\t\t\tdisabled={!!action.disabled}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\taction.onClick?.();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\n\t\t\t\treturn button;\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\nActionButtons.displayName = 'ActionButtons';\n\nexport {\n\tdefaultActionMenuStrings,\n\ttype ActionMenuStrings,\n} from './action-menu.strings';\n"],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  //#region src/lib/affordance-geometry.generated.ts
2
2
  var e = {
3
+ surfaceGap: {
4
+ xs: "gap-[calc(var(--surface-y)*0.5*var(--space-scale))]",
5
+ sm: "gap-[calc(var(--surface-y)*2/3*var(--space-scale))]",
6
+ md: "gap-[calc(var(--surface-y)*var(--space-scale))]",
7
+ lg: "gap-[calc(var(--surface-y)*4/3*var(--space-scale))]"
8
+ },
3
9
  inlineEditColumns: {
4
10
  single: "grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale)*2+0.25rem*var(--space-scale))]",
5
11
  multiline: "grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale))]"
@@ -137,4 +143,4 @@ var e = {
137
143
  //#endregion
138
144
  export { e as t };
139
145
 
140
- //# sourceMappingURL=affordance-geometry.generated-tF36bREk.js.map
146
+ //# sourceMappingURL=affordance-geometry.generated-B8yGOr8-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affordance-geometry.generated-B8yGOr8-.js","names":["affordanceGeometry","\"surfaceGap\"","\"xs\"","\"sm\"","\"md\"","\"lg\"","\"inlineEditColumns\"","\"single\"","\"multiline\"","\"avatarOverlap\"","\"navigationGuideStart\"","\"clearEnd\"","\"clearPadding\"","\"pairedClearPadding\"","\"pairedIconPadding\"","\"pairedAddonPadding\"","\"pairedCountPadding\"","\"measuredPadding\"","\"measuredStartPadding\"","\"textareaCountPadding\"","\"togglePadding\"","\"largeIconStart\"","\"largeIconEnd\"","\"buttonBlockPadding\"","\"controlTextMinHeight\"","\"controlBlockPadding\"","\"fileField\"","\"minHeight\"","\"buttonMinHeight\"","\"blockPadding\"","\"rawFileField\"","\"overlayClose\"","\"overlayHeader\"","\"selectToggleTrack\"","\"selectTogglePadding\"","\"textareaBlockPadding\"","\"textareaClearTop\"","\"textareaIconTop\"","\"clearTargetBleed\"","\"actionGutter\"","\"start\"","\"end\"","\"menuActionReserve\"","\"item\"","\"subItem\"","\"toastCloseReserve\"","\"calendarCell\"","\"calendarCompactCell\"","\"overlayHeaderCentered\""],"sources":["../src/lib/affordance-geometry.generated.ts"],"sourcesContent":["/* Generated by scripts/primitive-geometry.mjs; recipes, not theme roots. */\nexport const affordanceGeometry = {\n \"surfaceGap\": {\n \"xs\": \"gap-[calc(var(--surface-y)*0.5*var(--space-scale))]\",\n \"sm\": \"gap-[calc(var(--surface-y)*2/3*var(--space-scale))]\",\n \"md\": \"gap-[calc(var(--surface-y)*var(--space-scale))]\",\n \"lg\": \"gap-[calc(var(--surface-y)*4/3*var(--space-scale))]\"\n },\n \"inlineEditColumns\": {\n \"single\": \"grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale)*2+0.25rem*var(--space-scale))]\",\n \"multiline\": \"grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale))]\"\n },\n \"avatarOverlap\": {\n \"sm\": \"has-data-[scale=sm]:-space-x-[calc(var(--avatar)*0.75/4)]\",\n \"md\": \"-space-x-[calc(var(--avatar)/4)]\",\n \"lg\": \"has-data-[scale=lg]:-space-x-[calc(var(--avatar)*1.25/4)]\"\n },\n \"navigationGuideStart\": \"ms-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--icon)*0.75/2)]\",\n \"clearEnd\": {\n \"sm\": \"end-[calc(var(--control-x)*0.8333333*var(--space-scale))]\",\n \"md\": \"end-[calc(var(--control-x)*var(--space-scale))]\",\n \"lg\": \"end-[calc(var(--control-x)*var(--space-scale))]\"\n },\n \"clearPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedClearPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\"\n },\n \"pairedIconPadding\": {\n \"sm\": \"pe-[calc((var(--control-x)*0.8333333+0.375rem)*var(--space-scale)+var(--icon)*0.75+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedAddonPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+1.25rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.5rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.5rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedCountPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+2.25rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.5rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.5rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"measuredPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\"\n },\n \"measuredStartPadding\": {\n \"sm\": \"ps-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\",\n \"md\": \"ps-[calc(var(--control-x)*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\",\n \"lg\": \"ps-[calc(var(--control-x)*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\"\n },\n \"textareaCountPadding\": \"pb-[calc(var(--text-xs)*var(--leading-normal)+0.625rem*var(--space-scale))]\",\n \"togglePadding\": \"pe-[calc(1.375rem*var(--density-scale)+0.625rem*var(--space-scale))]\",\n \"largeIconStart\": \"ps-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25)]\",\n \"largeIconEnd\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25)]\",\n \"buttonBlockPadding\": {\n \"sm\": \"py-[min(calc(0.25rem*var(--space-scale)),calc((var(--height-action)*8/9*var(--density-scale)-1lh)/2-1px))]\",\n \"md\": \"py-[min(calc(0.25rem*var(--space-scale)),calc((var(--height-action)*var(--density-scale)-1lh)/2-1px))]\",\n \"lg\": \"py-[min(calc(0.25rem*var(--space-scale)),calc((var(--height-action)*10/9*var(--density-scale)-1lh)/2-1px))]\"\n },\n \"controlTextMinHeight\": \"min-h-[calc(1lh+2px)]\",\n \"controlBlockPadding\": {\n \"sm\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*8/9*var(--density-scale)-1lh)/2-1px)))]\",\n \"md\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*var(--density-scale)-1lh)/2-1px)))]\",\n \"lg\": \"py-[max(0px,min(calc(0.375rem*var(--space-scale)),calc((var(--height-control)*10/9*var(--density-scale)-1lh)/2-1px)))]\"\n },\n \"fileField\": {\n \"minHeight\": \"min-h-[calc(max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-pxs)*var(--text-pxs--line-height)+2px)))+2px)]\",\n \"buttonMinHeight\": \"file:min-h-[calc(1lh+2px)]\",\n \"blockPadding\": {\n \"sm\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*8/9*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-pxs)*var(--text-pxs--line-height)+2px))))/2-1px)))]\",\n \"md\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-pxs)*var(--text-pxs--line-height)+2px))))/2-1px)))]\",\n \"lg\": \"py-[max(0px,min(calc(0.375rem*var(--space-scale)),calc((var(--height-control)*10/9*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-pxs)*var(--text-pxs--line-height)+2px))))/2-1px)))]\"\n }\n },\n \"rawFileField\": {\n \"minHeight\": \"min-h-[calc(max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-sm)*var(--text-sm--line-height)+0px)))+2px)]\",\n \"buttonMinHeight\": \"file:min-h-[calc(1lh+0px)]\",\n \"blockPadding\": {\n \"sm\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*8/9*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-sm)*var(--text-sm--line-height)+0px))))/2-1px)))]\",\n \"md\": \"py-[max(0px,min(calc(0.25rem*var(--space-scale)),calc((var(--height-control)*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-sm)*var(--text-sm--line-height)+0px))))/2-1px)))]\",\n \"lg\": \"py-[max(0px,min(calc(0.375rem*var(--space-scale)),calc((var(--height-control)*10/9*var(--density-scale)-max(1lh,max(calc(1.75rem*var(--density-scale)),calc(var(--text-sm)*var(--text-sm--line-height)+0px))))/2-1px)))]\"\n }\n },\n \"overlayClose\": \"absolute top-[calc(var(--surface-y)*var(--space-scale)+(var(--text-base)*var(--leading-snug)-var(--height-action)*8/9*var(--density-scale))/2)] end-[calc(var(--surface-x)*var(--space-scale))]\",\n \"overlayHeader\": \"[[data-slot$=-content]:has(>[data-overlay-close])>&]:pe-[calc(var(--surface-x)*var(--space-scale)+var(--height-action)*8/9*var(--density-scale)+0.5rem*var(--space-scale))]\",\n \"selectToggleTrack\": {\n \"sm\": \"end-[calc(var(--control-x)*0.8333333*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon)*0.75)/2)]\",\n \"md\": \"end-[calc(var(--control-x)*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon))/2)]\",\n \"lg\": \"end-[calc(var(--control-x)*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon)*1.25)/2)]\"\n },\n \"selectTogglePadding\": {\n \"sm\": \"pe-[calc((var(--control-x)*0.8333333+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon)*0.75)/2)]\",\n \"md\": \"pe-[calc((var(--control-x)+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon))/2)]\",\n \"lg\": \"pe-[calc((var(--control-x)+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon)*1.25)/2)]\"\n },\n \"textareaBlockPadding\": {\n \"sm\": \"py-[calc((var(--height-control)*8/9*var(--density-scale)-1lh)/2-1px)]\",\n \"md\": \"py-[calc((var(--height-control)*var(--density-scale)-1lh)/2-1px)]\",\n \"lg\": \"py-[calc((var(--height-control)*10/9*var(--density-scale)-1lh)/2-1px)]\"\n },\n \"textareaClearTop\": {\n \"sm\": \"top-[calc((var(--height-control)*8/9-1.375rem)*var(--density-scale)/2)]\",\n \"md\": \"top-[calc((var(--height-control)-1.375rem)*var(--density-scale)/2)]\",\n \"lg\": \"top-[calc((var(--height-control)*10/9-1.375rem)*var(--density-scale)/2)]\"\n },\n \"textareaIconTop\": {\n \"sm\": \"top-[calc((var(--height-control)*8/9*var(--density-scale)-var(--icon))/2)]\",\n \"md\": \"top-[calc((var(--height-control)*var(--density-scale)-var(--icon))/2)]\",\n \"lg\": \"top-[calc((var(--height-control)*10/9*var(--density-scale)-var(--icon))/2)]\"\n },\n \"clearTargetBleed\": \"-my-[calc((1.375rem*var(--density-scale)-var(--icon)*0.75)/2)]\",\n \"actionGutter\": {\n \"sm\": {\n \"start\": \"ps-[calc(var(--height-action)*8/9*var(--density-scale)+0.5rem*var(--space-scale))]\",\n \"end\": \"pe-[calc(var(--height-action)*8/9*var(--density-scale)+0.5rem*var(--space-scale))]\"\n },\n \"md\": {\n \"start\": \"ps-[calc(var(--height-action)*var(--density-scale)+0.5rem*var(--space-scale))]\",\n \"end\": \"pe-[calc(var(--height-action)*var(--density-scale)+0.5rem*var(--space-scale))]\"\n },\n \"lg\": {\n \"start\": \"ps-[calc(var(--height-action)*10/9*var(--density-scale)+0.5rem*var(--space-scale))]\",\n \"end\": \"pe-[calc(var(--height-action)*10/9*var(--density-scale)+0.5rem*var(--space-scale))]\"\n }\n },\n \"menuActionReserve\": {\n \"item\": \"group-has-[>[data-sidebar=menu-action]]/menu-item:pe-[calc(var(--height-action)*7/9*var(--density-scale)+var(--control-x)*var(--space-scale))]!\",\n \"subItem\": \"group-has-[>[data-sidebar=menu-action]]/menu-sub-item:pe-[calc(var(--height-action)*7/9*var(--density-scale)+var(--control-x)*var(--space-scale))]!\"\n },\n \"toastCloseReserve\": \"has-[[data-close-button]]:!pe-[calc(var(--height-action)*8/9*var(--density-scale)+0.75rem*var(--space-scale))]\",\n \"calendarCell\": \"[--cell-size:calc(var(--height-action)*8/9*var(--density-scale))] [--cell-radius:min(calc(var(--radius)*0.75),calc(min(var(--height-action),var(--height-control))*var(--density-scale)/4))]\",\n \"calendarCompactCell\": \"[--cell-size:calc(1.875rem*var(--density-scale))] sm:[--cell-size:calc(var(--height-action)*8/9*var(--density-scale))]\",\n \"overlayHeaderCentered\": \"[[data-slot$=-content]:has(>[data-overlay-close])>&]:ps-[calc(var(--surface-x)*var(--space-scale)+var(--height-action)*8/9*var(--density-scale)+0.5rem*var(--space-scale))]\"\n} as const;\n"],"mappings":";AACA,IAAaA,IAAqB;CAChCC,YAAc;EACZC,IAAM;EACNC,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAC,mBAAqB;EACnBC,QAAU;EACVC,WAAa;CACf;CACAC,eAAiB;EACfN,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAK,sBAAwB;CACxBC,UAAY;EACVR,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAO,cAAgB;EACdT,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAQ,oBAAsB;EACpBV,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAS,mBAAqB;EACnBX,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAU,oBAAsB;EACpBZ,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAW,oBAAsB;EACpBb,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAY,iBAAmB;EACjBd,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAa,sBAAwB;EACtBf,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAc,sBAAwB;CACxBC,eAAiB;CACjBC,gBAAkB;CAClBC,cAAgB;CAChBC,oBAAsB;EACpBpB,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAmB,sBAAwB;CACxBC,qBAAuB;EACrBtB,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAqB,WAAa;EACXC,WAAa;EACbC,iBAAmB;EACnBC,cAAgB;GACd1B,IAAM;GACNC,IAAM;GACNC,IAAM;EACR;CACF;CACAyB,cAAgB;EACdH,WAAa;EACbC,iBAAmB;EACnBC,cAAgB;GACd1B,IAAM;GACNC,IAAM;GACNC,IAAM;EACR;CACF;CACA0B,cAAgB;CAChBC,eAAiB;CACjBC,mBAAqB;EACnB9B,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACA6B,qBAAuB;EACrB/B,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACA8B,sBAAwB;EACtBhC,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACA+B,kBAAoB;EAClBjC,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAgC,iBAAmB;EACjBlC,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAiC,kBAAoB;CACpBC,cAAgB;EACdpC,IAAM;GACJqC,OAAS;GACTC,KAAO;EACT;EACArC,IAAM;GACJoC,OAAS;GACTC,KAAO;EACT;EACApC,IAAM;GACJmC,OAAS;GACTC,KAAO;EACT;CACF;CACAC,mBAAqB;EACnBC,MAAQ;EACRC,SAAW;CACb;CACAC,mBAAqB;CACrBC,cAAgB;CAChBC,qBAAuB;CACvBC,uBAAyB;AAC3B"}