themelia-react-ui 2.0.1 → 2.0.3

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 (490) hide show
  1. package/CHANGELOG.md +317 -131
  2. package/README.md +25 -9
  3. package/THIRD_PARTY_NOTICES.md +7 -0
  4. package/dist/{accordion-B6a3vVgA.js → accordion-Cjb6sx0G.js} +14 -13
  5. package/dist/accordion-Cjb6sx0G.js.map +1 -0
  6. package/dist/action-menu-CllU52Mm.js +280 -0
  7. package/dist/action-menu-CllU52Mm.js.map +1 -0
  8. package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
  9. package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
  10. package/dist/ai-artifact-DvTwDVyL.js +1148 -0
  11. package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
  12. package/dist/{app-shell-ZK5RWdo6.js → app-shell-C4FhvCqF.js} +5 -5
  13. package/dist/{app-shell-ZK5RWdo6.js.map → app-shell-C4FhvCqF.js.map} +1 -1
  14. package/dist/attachment-BxDfL2mw.js +246 -0
  15. package/dist/attachment-BxDfL2mw.js.map +1 -0
  16. package/dist/{auth-CYxKfo69.js → auth-BGua8ouh.js} +58 -54
  17. package/dist/auth-BGua8ouh.js.map +1 -0
  18. package/dist/{avatar-BBnEJIx8.js → avatar-DAPlDvhJ.js} +7 -7
  19. package/dist/avatar-DAPlDvhJ.js.map +1 -0
  20. package/dist/{badge-MrKVNzW9.js → badge-HpFqoqSY.js} +40 -40
  21. package/dist/badge-HpFqoqSY.js.map +1 -0
  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 +40 -36
  31. package/dist/base/carousel.js.map +1 -1
  32. package/dist/base/cascader.js +92 -92
  33. package/dist/base/cascader.js.map +1 -1
  34. package/dist/base/chart.js +1 -1
  35. package/dist/base/choice-inputs.js +2 -2
  36. package/dist/base/code-block.js +1 -1
  37. package/dist/base/combobox.js +2 -2
  38. package/dist/base/command.js +1 -1
  39. package/dist/base/copyable.js +1 -1
  40. package/dist/base/date-pickers.js +2 -2
  41. package/dist/base/display.js +6 -6
  42. package/dist/base/feedback.js +3 -3
  43. package/dist/base/forms-numeric.js +1 -1
  44. package/dist/base/forms.js +2 -2
  45. package/dist/base/inline-edit.js +14 -14
  46. package/dist/base/inline-edit.js.map +1 -1
  47. package/dist/base/item.js +1 -1
  48. package/dist/base/media-gallery.js +1 -1
  49. package/dist/base/metadata-list.js +1 -1
  50. package/dist/base/navigation.js +6 -6
  51. package/dist/base/popover-menu.js +1 -1
  52. package/dist/base/popover.js +1 -1
  53. package/dist/base/qr-code.js +1 -1
  54. package/dist/base/repeaters.js +171 -176
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +6 -6
  59. package/dist/base/skeleton.js +1 -1
  60. package/dist/base/spinner.js +79 -2
  61. package/dist/base/spinner.js.map +1 -0
  62. package/dist/base/structure.js +1 -1
  63. package/dist/base/table.js +1 -1
  64. package/dist/base/text-inputs.js +2 -2
  65. package/dist/base/toaster.js +46 -45
  66. package/dist/base/toaster.js.map +1 -1
  67. package/dist/base/tree.js +1 -1
  68. package/dist/base/upload-queue.js +1 -1
  69. package/dist/base/upload.js +3 -3
  70. package/dist/base/value-inputs.js +1 -1
  71. package/dist/{batch-action-bar-BZGDG-Si.js → batch-action-bar-DnUJ21NQ.js} +6 -5
  72. package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
  73. package/dist/blocks/admin.js +42 -42
  74. package/dist/blocks/admin.js.map +1 -1
  75. package/dist/blocks/ai.js +260 -240
  76. package/dist/blocks/ai.js.map +1 -1
  77. package/dist/blocks/analytics/usage-card.js +1 -1
  78. package/dist/blocks/analytics.js +620 -585
  79. package/dist/blocks/analytics.js.map +1 -1
  80. package/dist/blocks/collaboration.js +1 -1
  81. package/dist/blocks/commerce/receipt.js +1 -1
  82. package/dist/blocks/commerce.js +1152 -1109
  83. package/dist/blocks/commerce.js.map +1 -1
  84. package/dist/blocks/data-display.js +2 -2
  85. package/dist/blocks/onboarding.js +48 -39
  86. package/dist/blocks/onboarding.js.map +1 -1
  87. package/dist/blocks/planning.js +13 -12
  88. package/dist/blocks/planning.js.map +1 -1
  89. package/dist/blocks/timelines.js +1 -1
  90. package/dist/{breadcrumbs-D5t7I023.js → breadcrumbs-C-oqs1sQ.js} +5 -5
  91. package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
  92. package/dist/{button-QYwiyhD2.js → button-DVzspB_G.js} +2 -2
  93. package/dist/{button-QYwiyhD2.js.map → button-DVzspB_G.js.map} +1 -1
  94. package/dist/{buttons-SbIcm1HJ.js → buttons-DPZekJFu.js} +20 -15
  95. package/dist/buttons-DPZekJFu.js.map +1 -0
  96. package/dist/cards-BaBZR-AU.js +68 -0
  97. package/dist/cards-BaBZR-AU.js.map +1 -0
  98. package/dist/{chart-QfrARkXl.js → chart-ZOYyK2xG.js} +58 -55
  99. package/dist/chart-ZOYyK2xG.js.map +1 -0
  100. package/dist/{checkbox-DhB6K0bK.js → checkbox-AWIhNhmo.js} +2 -2
  101. package/dist/{checkbox-DhB6K0bK.js.map → checkbox-AWIhNhmo.js.map} +1 -1
  102. package/dist/{choice-inputs-t6w3ATNz.js → choice-inputs-CNHvARCJ.js} +49 -45
  103. package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
  104. package/dist/{code-block-Dgbu-CU3.js → code-block-DeneBJR_.js} +8 -8
  105. package/dist/code-block-DeneBJR_.js.map +1 -0
  106. package/dist/{collapsible-D8AEGU1-.js → collapsible-C-_l4hpy.js} +3 -3
  107. package/dist/{collapsible-D8AEGU1-.js.map → collapsible-C-_l4hpy.js.map} +1 -1
  108. package/dist/{collection-content-uK16Grv0.js → collection-content-By56pLog.js} +3 -3
  109. package/dist/{collection-content-uK16Grv0.js.map → collection-content-By56pLog.js.map} +1 -1
  110. package/dist/combobox-DaHESuiL.js +355 -0
  111. package/dist/combobox-DaHESuiL.js.map +1 -0
  112. package/dist/{combobox-DLl0bfiq.js → combobox-Dxo2fAYQ.js} +289 -279
  113. package/dist/combobox-Dxo2fAYQ.js.map +1 -0
  114. package/dist/{command-kNR20o7x.js → command-C25VMRII.js} +7 -7
  115. package/dist/{command-kNR20o7x.js.map → command-C25VMRII.js.map} +1 -1
  116. package/dist/{comments-BpDuCUUu.js → comments-DD0DUPwJ.js} +114 -105
  117. package/dist/comments-DD0DUPwJ.js.map +1 -0
  118. package/dist/components/base/badge/badge.recipes.d.ts +1 -1
  119. package/dist/components/base/buttons/loader-button.d.ts +2 -1
  120. package/dist/components/base/cards/card.recipes.d.ts +2 -3
  121. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
  122. package/dist/components/base/cards/smart-card.types.d.ts +11 -4
  123. package/dist/components/base/chart/chart.d.ts +2 -5
  124. package/dist/components/base/combobox/combobox-field.d.ts +16 -0
  125. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  126. package/dist/components/base/combobox/index.d.ts +30 -4
  127. package/dist/components/base/forms/form-sizing.d.ts +11 -3
  128. package/dist/components/base/navigation/pagination.d.ts +5 -2
  129. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  130. package/dist/components/base/table/index.d.ts +9 -2
  131. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  132. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  133. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  134. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +3 -1
  135. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  136. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  137. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  138. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  139. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  140. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  141. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  142. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  143. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  144. package/dist/components/features/combobox/types.d.ts +4 -0
  145. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  146. package/dist/components/features/rich-text-editor/index.d.ts +1 -1
  147. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +6 -0
  148. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +9 -1
  149. package/dist/components/features/table/table-header.d.ts +1 -1
  150. package/dist/components/features/table/table.strings.d.ts +55 -1
  151. package/dist/components/features/table/table.types.d.ts +17 -4
  152. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  153. package/dist/components/primitives/number.d.ts +4 -2
  154. package/dist/components/primitives/value.d.ts +3 -1
  155. package/dist/components/typography/text-link.d.ts +4 -0
  156. package/dist/components/ui/combobox-dismiss.d.ts +16 -0
  157. package/dist/components/ui/combobox.d.ts +16 -7
  158. package/dist/components/ui/dialog.d.ts +1 -1
  159. package/dist/components/ui/item.d.ts +8 -8
  160. package/dist/components/ui/popover.d.ts +1 -1
  161. package/dist/components/ui/sheet.d.ts +1 -1
  162. package/dist/components/ui/tabs.d.ts +1 -1
  163. package/dist/{containers-DmWiJa2I.js → containers-Mu1LMGV1.js} +2 -2
  164. package/dist/{containers-DmWiJa2I.js.map → containers-Mu1LMGV1.js.map} +1 -1
  165. package/dist/{copyable-B3Gwgdqc.js → copyable-ClBuk_UK.js} +4 -4
  166. package/dist/{copyable-B3Gwgdqc.js.map → copyable-ClBuk_UK.js.map} +1 -1
  167. package/dist/{data-display-DafIvCl5.js → data-display-DT_khPl_.js} +98 -87
  168. package/dist/data-display-DT_khPl_.js.map +1 -0
  169. package/dist/{date-BgK3bTdo.js → date-DCrsDTZc.js} +5 -5
  170. package/dist/{date-BgK3bTdo.js.map → date-DCrsDTZc.js.map} +1 -1
  171. package/dist/{date-picker-CF-DtUpF.js → date-picker-B2K3ucWn.js} +594 -593
  172. package/dist/date-picker-B2K3ucWn.js.map +1 -0
  173. package/dist/date-pickers-Ds8gLaoP.js +175 -0
  174. package/dist/date-pickers-Ds8gLaoP.js.map +1 -0
  175. package/dist/{display-DsQTVzMz.js → display-hAc1HjpI.js} +49 -49
  176. package/dist/display-hAc1HjpI.js.map +1 -0
  177. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  178. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  179. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  180. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  181. package/dist/features/activities.js +398 -375
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +188 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/appointment-calendar.js +683 -0
  186. package/dist/features/appointment-calendar.js.map +1 -0
  187. package/dist/features/async-preview.js +109 -107
  188. package/dist/features/async-preview.js.map +1 -1
  189. package/dist/features/combobox.js +1 -1
  190. package/dist/features/comments.js +1 -1
  191. package/dist/features/data-view.js +137 -137
  192. package/dist/features/data-view.js.map +1 -1
  193. package/dist/features/email-composer.js +255 -255
  194. package/dist/features/email-composer.js.map +1 -1
  195. package/dist/features/event-calendar.js +254 -248
  196. package/dist/features/event-calendar.js.map +1 -1
  197. package/dist/features/filters.js +1 -1
  198. package/dist/features/global-search.js +35 -32
  199. package/dist/features/global-search.js.map +1 -1
  200. package/dist/features/kanban.js +118 -117
  201. package/dist/features/kanban.js.map +1 -1
  202. package/dist/features/map.js +233 -231
  203. package/dist/features/map.js.map +1 -1
  204. package/dist/features/media-library.js +789 -775
  205. package/dist/features/media-library.js.map +1 -1
  206. package/dist/features/mentions.js +1 -1
  207. package/dist/features/overlays.js +1 -1
  208. package/dist/features/products.js +922 -902
  209. package/dist/features/products.js.map +1 -1
  210. package/dist/features/questionnaire.js +28 -24
  211. package/dist/features/questionnaire.js.map +1 -1
  212. package/dist/features/resource-assignment.js +18 -15
  213. package/dist/features/resource-assignment.js.map +1 -1
  214. package/dist/features/resource.js +12 -12
  215. package/dist/features/resource.js.map +1 -1
  216. package/dist/features/rich-text-editor.js +2 -2
  217. package/dist/features/schema-form.js +15 -13
  218. package/dist/features/schema-form.js.map +1 -1
  219. package/dist/features/suggestions.js +3 -3
  220. package/dist/features/sync.js +11 -5
  221. package/dist/features/sync.js.map +1 -1
  222. package/dist/features/table.js +1 -1
  223. package/dist/features/theme-tweaker.js +493 -489
  224. package/dist/features/theme-tweaker.js.map +1 -1
  225. package/dist/feedback-BYIhtitP.js +239 -0
  226. package/dist/feedback-BYIhtitP.js.map +1 -0
  227. package/dist/{field-affordance-recipes-qQeIf4lG.js → field-affordance-recipes-DZhnIL_Y.js} +11 -18
  228. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  229. package/dist/{filters-BkHH53uv.js → filters-DJVAveHA.js} +589 -580
  230. package/dist/filters-DJVAveHA.js.map +1 -0
  231. package/dist/{form-field-DUt4UxSV.js → form-field-CwH9y77i.js} +6 -5
  232. package/dist/form-field-CwH9y77i.js.map +1 -0
  233. package/dist/{form-sizing-By94KzXE.js → form-sizing-BdP_Mf5p.js} +39 -44
  234. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  235. package/dist/{forms-Bzha-Y3B.js → forms-B9G_xwzi.js} +8 -8
  236. package/dist/{forms-Bzha-Y3B.js.map → forms-B9G_xwzi.js.map} +1 -1
  237. package/dist/{forms-numeric-C0bvjRPZ.js → forms-numeric-B_jraJaQ.js} +309 -309
  238. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  239. package/dist/{header-BOefOKd1.js → header-BSfIEWbI.js} +160 -153
  240. package/dist/header-BSfIEWbI.js.map +1 -0
  241. package/dist/{hooks-9k_TtmKh.js → hooks-ClH9thn4.js} +2 -2
  242. package/dist/{hooks-9k_TtmKh.js.map → hooks-ClH9thn4.js.map} +1 -1
  243. package/dist/{icon-badge-CAuKupo9.js → icon-badge-DYKIwvOV.js} +4 -4
  244. package/dist/{icon-badge-CAuKupo9.js.map → icon-badge-DYKIwvOV.js.map} +1 -1
  245. package/dist/index.js +3 -3
  246. package/dist/input-CZw8iU99.js +21 -0
  247. package/dist/input-CZw8iU99.js.map +1 -0
  248. package/dist/input-DQdEd0YD.js +263 -0
  249. package/dist/input-DQdEd0YD.js.map +1 -0
  250. package/dist/{interaction-recipes-CHr0dJUs.js → interaction-recipes-XR9ZpVYL.js} +2 -1
  251. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  252. package/dist/item-K5_ghvze.js +275 -0
  253. package/dist/item-K5_ghvze.js.map +1 -0
  254. package/dist/layout/app-shell.js +1 -1
  255. package/dist/layout/auth.js +1 -1
  256. package/dist/layout/containers.js +1 -1
  257. package/dist/layout/header.js +1 -1
  258. package/dist/layout/hooks.js +1 -1
  259. package/dist/layout/navigation.js +1 -1
  260. package/dist/layout/page.js +1 -1
  261. package/dist/layout/settings.js +1 -1
  262. package/dist/layout/sidebar.js +2 -2
  263. package/dist/layout/workspace.js +1 -1
  264. package/dist/layout.js +10 -10
  265. package/dist/lib/affordance-geometry.generated.d.ts +71 -0
  266. package/dist/lib/editable-text-recipe.d.ts +4 -4
  267. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  268. package/dist/lib/interaction-recipes.d.ts +5 -0
  269. package/dist/lib/theme-mode-css.d.ts +7 -0
  270. package/dist/lib/tone-recipes.d.ts +8 -0
  271. package/dist/lib/ui-provider/types.d.ts +2 -2
  272. package/dist/lib/use-popup-focus-recovery.d.ts +8 -0
  273. package/dist/lib/utils.js +1 -1
  274. package/dist/{media-gallery-DcTtAaeC.js → media-gallery-3zIVLMWH.js} +8 -8
  275. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  276. package/dist/{mentions-D-uyCh01.js → mentions-CGlEJ15c.js} +144 -142
  277. package/dist/mentions-CGlEJ15c.js.map +1 -0
  278. package/dist/{message-CdHgIWKf.js → message-DZ_ruyUV.js} +6 -5
  279. package/dist/message-DZ_ruyUV.js.map +1 -0
  280. package/dist/{metadata-list-X5rYAKSB.js → metadata-list-8N16ZMW_.js} +130 -119
  281. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  282. package/dist/{navigation-D3KwXmaq.js → navigation-Bnotn4AQ.js} +19 -19
  283. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  284. package/dist/{navigation-HJf5zxlH.js → navigation-BzhHI3lo.js} +36 -35
  285. package/dist/navigation-BzhHI3lo.js.map +1 -0
  286. package/dist/{navigation-row-recipes-BVowojQw.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  287. package/dist/{navigation-row-recipes-BVowojQw.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  288. package/dist/{number-DMhe-Vsk.js → number-DbV1Dija.js} +36 -34
  289. package/dist/{number-DMhe-Vsk.js.map → number-DbV1Dija.js.map} +1 -1
  290. package/dist/{overflow-tab-bar-sQHXLlwQ.js → overflow-tab-bar-CWY7Nogn.js} +105 -103
  291. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  292. package/dist/{overlays-I0axtYA6.js → overlays-tMkF-VAN.js} +282 -278
  293. package/dist/overlays-tMkF-VAN.js.map +1 -0
  294. package/dist/{page-B5dTH9gE.js → page-CL9YeH_V.js} +8 -8
  295. package/dist/{page-B5dTH9gE.js.map → page-CL9YeH_V.js.map} +1 -1
  296. package/dist/{page-header-commands-DjzFEq3E.js → page-header-commands-DOb6WsfD.js} +5 -5
  297. package/dist/{page-header-commands-DjzFEq3E.js.map → page-header-commands-DOb6WsfD.js.map} +1 -1
  298. package/dist/pagination-BL25hu2s.js +158 -0
  299. package/dist/pagination-BL25hu2s.js.map +1 -0
  300. package/dist/{popover-Di55PyAI.js → popover-gnTOhbFM.js} +69 -66
  301. package/dist/popover-gnTOhbFM.js.map +1 -0
  302. package/dist/popover-menu-Cn9rUkdc.js +100 -0
  303. package/dist/popover-menu-Cn9rUkdc.js.map +1 -0
  304. package/dist/{popover.recipes-Bdyhj2db.js → popover.recipes-D3j8R8Yp.js} +17 -10
  305. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  306. package/dist/{primitives-B-CkiEMU.js → primitives-BFK08r9M.js} +45 -44
  307. package/dist/primitives-BFK08r9M.js.map +1 -0
  308. package/dist/primitives.js +4 -4
  309. package/dist/{progress-rnS8-uAW.js → progress-B1VnCT0K.js} +5 -5
  310. package/dist/{progress-rnS8-uAW.js.map → progress-B1VnCT0K.js.map} +1 -1
  311. package/dist/{receipt-D0oswZ0p.js → receipt-BVSOH3Xo.js} +9 -6
  312. package/dist/{receipt-D0oswZ0p.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  313. package/dist/{rich-text-DvGulsNJ.js → rich-text-GOUyKQ-s.js} +3 -3
  314. package/dist/{rich-text-DvGulsNJ.js.map → rich-text-GOUyKQ-s.js.map} +1 -1
  315. package/dist/{rich-text-editor-sMU_Scqm.js → rich-text-editor-cRLC-eBK.js} +418 -426
  316. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  317. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  318. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  319. package/dist/{scroll-area-Bt_vXY2b.js → scroll-area-DcI-M1UT.js} +2 -2
  320. package/dist/{scroll-area-Bt_vXY2b.js.map → scroll-area-DcI-M1UT.js.map} +1 -1
  321. package/dist/{separator-C8DlRGwF.js → separator-BDV-Y648.js} +3 -3
  322. package/dist/{separator-C8DlRGwF.js.map → separator-BDV-Y648.js.map} +1 -1
  323. package/dist/{separator-CYHnjsAb.js → separator-Bom7NsGO.js} +2 -2
  324. package/dist/{separator-CYHnjsAb.js.map → separator-Bom7NsGO.js.map} +1 -1
  325. package/dist/services/actions.js +1 -1
  326. package/dist/{settings-CQW3b-Cu.js → settings-ybnjVwbd.js} +20 -19
  327. package/dist/settings-ybnjVwbd.js.map +1 -0
  328. package/dist/{sheet-4SEvVYzA.js → sheet-ijlsjq-n.js} +76 -73
  329. package/dist/sheet-ijlsjq-n.js.map +1 -0
  330. package/dist/{sidebar-C7WWR29L.js → sidebar-Db6gkh3U.js} +183 -182
  331. package/dist/sidebar-Db6gkh3U.js.map +1 -0
  332. package/dist/{sidebar-d7Dg80ln.js → sidebar-DkTO4VTO.js} +14 -13
  333. package/dist/{sidebar-d7Dg80ln.js.map → sidebar-DkTO4VTO.js.map} +1 -1
  334. package/dist/{skeleton-Cz890JZF.js → skeleton-Byjnt7qr.js} +3 -3
  335. package/dist/{skeleton-Cz890JZF.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  336. package/dist/smart-card-DiC5aac3.js +604 -0
  337. package/dist/smart-card-DiC5aac3.js.map +1 -0
  338. package/dist/{structure-DC2dygdA.js → structure-BmisBK-3.js} +2 -2
  339. package/dist/{structure-DC2dygdA.js.map → structure-BmisBK-3.js.map} +1 -1
  340. package/dist/style.css +1 -1
  341. package/dist/table-BweFy_P9.js +1530 -0
  342. package/dist/table-BweFy_P9.js.map +1 -0
  343. package/dist/{table-CIKyLUsy.js → table-DsfzoUia.js} +75 -63
  344. package/dist/table-DsfzoUia.js.map +1 -0
  345. package/dist/{tabs-DwBJfjxX.js → tabs-CDocW5D1.js} +14 -13
  346. package/dist/tabs-CDocW5D1.js.map +1 -0
  347. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  348. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  349. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  350. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  351. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  352. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  353. package/dist/theme.css +285 -228
  354. package/dist/themes/green.css +16 -12
  355. package/dist/timelines-CwM_9IhD.js +457 -0
  356. package/dist/timelines-CwM_9IhD.js.map +1 -0
  357. package/dist/{tone-recipes-CPoExcTE.js → tone-recipes-BPsRAvhu.js} +5 -2
  358. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  359. package/dist/{tooltip-CsfgrfS7.js → tooltip-yiRJUFjp.js} +4 -4
  360. package/dist/{tooltip-CsfgrfS7.js.map → tooltip-yiRJUFjp.js.map} +1 -1
  361. package/dist/{tree-BiKhg8AY.js → tree-WnKQzwbq.js} +9 -9
  362. package/dist/{tree-BiKhg8AY.js.map → tree-WnKQzwbq.js.map} +1 -1
  363. package/dist/typography/rich-text.js +1 -1
  364. package/dist/{typography-DTRkE9zL.js → typography-UTnveOEy.js} +6 -6
  365. package/dist/typography-UTnveOEy.js.map +1 -0
  366. package/dist/typography.js +2 -2
  367. package/dist/{ui-provider-1D_NSYzO.js → ui-provider-C_U0Xma4.js} +3 -3
  368. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  369. package/dist/ui-provider.js +2 -2
  370. package/dist/{upload-BO8-CLN6.js → upload-CXyxmQBP.js} +13 -12
  371. package/dist/upload-CXyxmQBP.js.map +1 -0
  372. package/dist/{upload-queue-EOC8g1gf.js → upload-queue-Boscubn9.js} +11 -9
  373. package/dist/upload-queue-Boscubn9.js.map +1 -0
  374. package/dist/{usage-card-obRaBskq.js → usage-card-BhO5eqkX.js} +53 -37
  375. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  376. package/dist/use-popup-focus-recovery-C0QPvgOR.js +36 -0
  377. package/dist/use-popup-focus-recovery-C0QPvgOR.js.map +1 -0
  378. package/dist/{utils-l5LpDw2z.js → utils-BRhFDwuU.js} +59 -44
  379. package/dist/utils-BRhFDwuU.js.map +1 -0
  380. package/dist/{value-inputs-TAYMX111.js → value-inputs-TaX4OjNk.js} +268 -252
  381. package/dist/value-inputs-TaX4OjNk.js.map +1 -0
  382. package/dist/{value-typography-b8wpz1eX.js → value-typography-BP8OG6h5.js} +2 -2
  383. package/dist/{value-typography-b8wpz1eX.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  384. package/dist/{workspace-DH0v0KcB.js → workspace-B-OEm3Kf.js} +34 -33
  385. package/dist/workspace-B-OEm3Kf.js.map +1 -0
  386. package/docs/consumer-skill/SKILL.md +3 -3
  387. package/docs/consumer-skill/references/agents-md.md +1 -1
  388. package/docs/consumer-skill/references/composition.md +8 -6
  389. package/docs/consumer-skill/references/installation.md +6 -0
  390. package/docs/consumer-skill/references/integration.md +4 -3
  391. package/docs/consumer-skill/references/public-api.json +105 -2
  392. package/docs/consumer-skill/references/review.md +7 -0
  393. package/docs/consumer-skill/references/theming.md +71 -6
  394. package/docs/consumer-skill/references/tokens.json +1 -1
  395. package/docs/consumer-skill/references/workflows.md +26 -0
  396. package/docs/consumer-skill/scripts/composition-policy.mjs +3 -2
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +11 -0
  398. package/package.json +8 -4
  399. package/dist/accordion-B6a3vVgA.js.map +0 -1
  400. package/dist/action-menu-TzCoSlwL.js +0 -280
  401. package/dist/action-menu-TzCoSlwL.js.map +0 -1
  402. package/dist/affordance-geometry.generated-B5iu-Mkr.js +0 -69
  403. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +0 -1
  404. package/dist/ai-artifact-BMJdv-6q.js +0 -1115
  405. package/dist/ai-artifact-BMJdv-6q.js.map +0 -1
  406. package/dist/attachment-BtfhGm8i.js +0 -245
  407. package/dist/attachment-BtfhGm8i.js.map +0 -1
  408. package/dist/auth-CYxKfo69.js.map +0 -1
  409. package/dist/avatar-BBnEJIx8.js.map +0 -1
  410. package/dist/badge-MrKVNzW9.js.map +0 -1
  411. package/dist/batch-action-bar-BZGDG-Si.js.map +0 -1
  412. package/dist/breadcrumbs-D5t7I023.js.map +0 -1
  413. package/dist/buttons-SbIcm1HJ.js.map +0 -1
  414. package/dist/cards-CiiHpKYd.js +0 -66
  415. package/dist/cards-CiiHpKYd.js.map +0 -1
  416. package/dist/chart-QfrARkXl.js.map +0 -1
  417. package/dist/choice-inputs-t6w3ATNz.js.map +0 -1
  418. package/dist/code-block-Dgbu-CU3.js.map +0 -1
  419. package/dist/combobox-2Ic8N9bL.js +0 -278
  420. package/dist/combobox-2Ic8N9bL.js.map +0 -1
  421. package/dist/combobox-DLl0bfiq.js.map +0 -1
  422. package/dist/comments-BpDuCUUu.js.map +0 -1
  423. package/dist/data-display-DafIvCl5.js.map +0 -1
  424. package/dist/date-picker-CF-DtUpF.js.map +0 -1
  425. package/dist/date-pickers-BmzxJl5l.js +0 -174
  426. package/dist/date-pickers-BmzxJl5l.js.map +0 -1
  427. package/dist/display-DsQTVzMz.js.map +0 -1
  428. package/dist/dropdown-menu-E2qmdC7o.js +0 -193
  429. package/dist/dropdown-menu-E2qmdC7o.js.map +0 -1
  430. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  431. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  432. package/dist/feedback-qNuMBtRH.js +0 -233
  433. package/dist/feedback-qNuMBtRH.js.map +0 -1
  434. package/dist/field-affordance-recipes-qQeIf4lG.js.map +0 -1
  435. package/dist/filters-BkHH53uv.js.map +0 -1
  436. package/dist/form-field-DUt4UxSV.js.map +0 -1
  437. package/dist/form-sizing-By94KzXE.js.map +0 -1
  438. package/dist/forms-numeric-C0bvjRPZ.js.map +0 -1
  439. package/dist/header-BOefOKd1.js.map +0 -1
  440. package/dist/input-DWhBBBww.js +0 -262
  441. package/dist/input-DWhBBBww.js.map +0 -1
  442. package/dist/input-Ddi_LSYv.js +0 -20
  443. package/dist/input-Ddi_LSYv.js.map +0 -1
  444. package/dist/interaction-recipes-CHr0dJUs.js.map +0 -1
  445. package/dist/item-DEmDiTlD.js +0 -265
  446. package/dist/item-DEmDiTlD.js.map +0 -1
  447. package/dist/media-gallery-DcTtAaeC.js.map +0 -1
  448. package/dist/mentions-D-uyCh01.js.map +0 -1
  449. package/dist/message-CdHgIWKf.js.map +0 -1
  450. package/dist/metadata-list-X5rYAKSB.js.map +0 -1
  451. package/dist/navigation-D3KwXmaq.js.map +0 -1
  452. package/dist/navigation-HJf5zxlH.js.map +0 -1
  453. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +0 -1
  454. package/dist/overlays-I0axtYA6.js.map +0 -1
  455. package/dist/pagination-3bPA_a6K.js +0 -149
  456. package/dist/pagination-3bPA_a6K.js.map +0 -1
  457. package/dist/popover-Di55PyAI.js.map +0 -1
  458. package/dist/popover-menu-B71Tn2Qz.js +0 -99
  459. package/dist/popover-menu-B71Tn2Qz.js.map +0 -1
  460. package/dist/popover.recipes-Bdyhj2db.js.map +0 -1
  461. package/dist/primitives-B-CkiEMU.js.map +0 -1
  462. package/dist/rich-text-editor-sMU_Scqm.js.map +0 -1
  463. package/dist/rich-text-editor.recipes-CadiF_Uu.js +0 -88
  464. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +0 -1
  465. package/dist/settings-CQW3b-Cu.js.map +0 -1
  466. package/dist/sheet-4SEvVYzA.js.map +0 -1
  467. package/dist/sidebar-C7WWR29L.js.map +0 -1
  468. package/dist/smart-card-lFKxn5Hu.js +0 -595
  469. package/dist/smart-card-lFKxn5Hu.js.map +0 -1
  470. package/dist/spinner-fa3h1Aif.js +0 -80
  471. package/dist/spinner-fa3h1Aif.js.map +0 -1
  472. package/dist/table-CIKyLUsy.js.map +0 -1
  473. package/dist/table-CrcLN9Io.js +0 -1458
  474. package/dist/table-CrcLN9Io.js.map +0 -1
  475. package/dist/tabs-DwBJfjxX.js.map +0 -1
  476. package/dist/text-inputs-aaK9wcDT.js +0 -326
  477. package/dist/text-inputs-aaK9wcDT.js.map +0 -1
  478. package/dist/theme-scope-kStaAer0.js +0 -39
  479. package/dist/theme-scope-kStaAer0.js.map +0 -1
  480. package/dist/timelines-C_SBwHNP.js +0 -442
  481. package/dist/timelines-C_SBwHNP.js.map +0 -1
  482. package/dist/tone-recipes-CPoExcTE.js.map +0 -1
  483. package/dist/typography-DTRkE9zL.js.map +0 -1
  484. package/dist/ui-provider-1D_NSYzO.js.map +0 -1
  485. package/dist/upload-BO8-CLN6.js.map +0 -1
  486. package/dist/upload-queue-EOC8g1gf.js.map +0 -1
  487. package/dist/usage-card-obRaBskq.js.map +0 -1
  488. package/dist/utils-l5LpDw2z.js.map +0 -1
  489. package/dist/value-inputs-TAYMX111.js.map +0 -1
  490. package/dist/workspace-DH0v0KcB.js.map +0 -1
@@ -1,22 +1,22 @@
1
1
  "use client";
2
- import { m as e, s as t, v as n } from "./ui-provider-1D_NSYzO.js";
3
- import { r } from "./theme-scope-kStaAer0.js";
2
+ import { m as e, s as t, v as n } from "./ui-provider-C_U0Xma4.js";
3
+ import { r } from "./theme-scope-BJ6eE2xt.js";
4
4
  import { useStrings as i } from "./lib/strings.js";
5
- import { t as a } from "./utils-l5LpDw2z.js";
6
- import { i as o, s } from "./typography-DTRkE9zL.js";
5
+ import { t as a } from "./utils-BRhFDwuU.js";
6
+ import { a as o, c as s } from "./typography-UTnveOEy.js";
7
7
  import { a as c, i as l } from "./text.styles-g4He6UIW.js";
8
8
  import { t as u } from "./focus-recipes-B653VaLq.js";
9
9
  import { t as d } from "./anchored-positioning-DPnKTvNs.js";
10
10
  import { t as f } from "./motion-recipes-ChBg4HBq.js";
11
- import { t as p } from "./structure-DC2dygdA.js";
11
+ import { t as p } from "./structure-BmisBK-3.js";
12
12
  import { a as m } from "./surface-recipes-BKRVW8Os.js";
13
- import { n as h, r as g, t as _ } from "./popover.recipes-Bdyhj2db.js";
14
- import { n as v, t as y } from "./collection-content-uK16Grv0.js";
15
- import { t as b } from "./interaction-recipes-CHr0dJUs.js";
13
+ import { n as h, r as g, t as _ } from "./popover.recipes-D3j8R8Yp.js";
14
+ import { n as v, t as y } from "./collection-content-By56pLog.js";
15
+ import { t as b } from "./interaction-recipes-XR9ZpVYL.js";
16
16
  import { t as x } from "./field-state-recipes-BVA2CWHo.js";
17
- import { r as S } from "./field-affordance-recipes-qQeIf4lG.js";
18
- import { _ as C, f as w, o as T, p as E, u as D } from "./form-sizing-By94KzXE.js";
19
- import { t as O } from "./checkbox-DhB6K0bK.js";
17
+ import { r as S } from "./field-affordance-recipes-DZhnIL_Y.js";
18
+ import { d as C, h as w, p as T, s as E, y as D } from "./form-sizing-BdP_Mf5p.js";
19
+ import { t as O } from "./checkbox-AWIhNhmo.js";
20
20
  import * as k from "react";
21
21
  import { forwardRef as A, memo as j, useCallback as M, useId as N, useMemo as P, useState as F } from "react";
22
22
  import { jsx as I, jsxs as L } from "react/jsx-runtime";
@@ -218,14 +218,14 @@ function xe({ option: e, size: t }) {
218
218
  leadingDecorative: !0,
219
219
  wrap: !0,
220
220
  className: "select--option-content",
221
- leadingClassName: a("select--option-icon", T[t]),
221
+ leadingClassName: a("select--option-icon", E[t]),
222
222
  bodyClassName: "select--option-text text-start",
223
223
  labelClassName: "select--option-label block",
224
224
  descriptionClassName: "select--option-description line-clamp-2"
225
225
  });
226
226
  }
227
227
  var Se = j(A(function(e, n) {
228
- let r = Object.prototype.hasOwnProperty.call(e, "value"), { options: o, density: s, placeholder: c, strings: l, allowClear: u = !1, invalid: d, size: f, className: p, contentClassName: m, onValueChange: h, disabled: g, readOnly: _, defaultOpen: v, open: y, onOpenChange: b, onOpenChangeComplete: x, modal: T, highlightItemOnHover: E, name: D, form: O, autoComplete: k, inputRef: A, id: j, required: N, "aria-label": F, "aria-labelledby": R, "aria-describedby": z, "aria-invalid": ee, onFocus: B, onBlur: V, value: H, defaultValue: U, renderOption: W, renderValue: G, ...ie } = e, ae = i(me, l), { defaultScale: oe } = t(), K = C(f, oe), q = c ?? ae.placeholder, J = P(() => {
228
+ let r = Object.prototype.hasOwnProperty.call(e, "value"), { options: o, density: s, placeholder: c, strings: l, allowClear: u = !1, invalid: d, size: f, className: p, contentClassName: m, onValueChange: h, disabled: g, readOnly: _, defaultOpen: v, open: y, onOpenChange: b, onOpenChangeComplete: x, modal: C, highlightItemOnHover: w, name: E, form: O, autoComplete: k, inputRef: A, id: j, required: N, "aria-label": F, "aria-labelledby": R, "aria-describedby": z, "aria-invalid": ee, onFocus: B, onBlur: V, value: H, defaultValue: U, renderOption: W, renderValue: G, ...ie } = e, ae = i(me, l), { defaultScale: oe } = t(), K = D(f, oe), q = c ?? ae.placeholder, J = P(() => {
229
229
  let e = o.map((e) => ({
230
230
  option: e,
231
231
  internalValue: ge(e.value)
@@ -253,9 +253,9 @@ var Se = j(A(function(e, n) {
253
253
  open: y,
254
254
  onOpenChange: b,
255
255
  onOpenChangeComplete: x,
256
- modal: T,
257
- highlightItemOnHover: E,
258
- name: D,
256
+ modal: C,
257
+ highlightItemOnHover: w,
258
+ name: E,
259
259
  form: O,
260
260
  autoComplete: k,
261
261
  inputRef: A,
@@ -273,7 +273,7 @@ var Se = j(A(function(e, n) {
273
273
  onFocus: B,
274
274
  onBlur: V,
275
275
  iconClassName: S.icon[K],
276
- className: a("select--component select--trigger", w(K), "data-[placeholder]:text-muted-foreground", p),
276
+ className: a("select--component select--trigger", T(K), "data-[placeholder]:text-muted-foreground", p),
277
277
  ...ie,
278
278
  children: /* @__PURE__ */ I(ne, {
279
279
  className: "select--value min-w-0",
@@ -367,7 +367,7 @@ var we = {
367
367
  md: "px-row-x py-row-y",
368
368
  lg: "px-row-x py-row-y-lg"
369
369
  }, De = `${b.tileHover} ${u.frame}`, $ = "flex h-lh shrink-0 items-center", Oe = "size-action-sm shrink-0 text-primary-foreground fill-primary stroke-primary-foreground", ke = "inline-flex size-action-sm shrink-0 items-center justify-center", Ae = k.forwardRef(function({ "aria-describedby": e, label: r, description: i, hint: c, icon: l, name: u, value: d, defaultValue: f, onValueChange: m, disabled: h = !1, invalid: g, className: _ }, v) {
370
- let y = d !== void 0, [b, S] = F(f ?? !1), C = y ? d ?? !1 : b, { defaultScale: w } = t(), T = E[n(void 0, w)], D = N(), O = P(() => u ?? D, [u, D]), k = typeof i == "string" && i.trim() !== "", A = k ? `${O}-description` : void 0, j = M((e) => {
370
+ let y = d !== void 0, [b, S] = F(f ?? !1), C = y ? d ?? !1 : b, { defaultScale: T } = t(), E = w[n(void 0, T)], D = N(), O = P(() => u ?? D, [u, D]), k = typeof i == "string" && i.trim() !== "", A = k ? `${O}-description` : void 0, j = M((e) => {
371
371
  h || (y || S(e), m?.(e));
372
372
  }, [
373
373
  h,
@@ -380,7 +380,7 @@ var we = {
380
380
  ref: v,
381
381
  "aria-invalid": g || void 0,
382
382
  onClick: R,
383
- className: a("switch-card--component", "group relative flex items-start gap-space-lg rounded-radius border bg-card p-surface transition-[background,border-color,box-shadow] duration-150", "border-border", C && "border-primary", x.invalid, !h && "cursor-pointer hover:border-input", h && "cursor-not-allowed opacity-50", _),
383
+ className: a("switch-card--component", "group relative flex items-start gap-space-lg rounded-radius border bg-card text-card-foreground p-surface transition-[background,border-color,box-shadow] duration-150", "border-border", C && "border-primary", x.invalid, !h && "cursor-pointer hover:border-input", h && "cursor-not-allowed opacity-50", _),
384
384
  children: [
385
385
  !!u && /* @__PURE__ */ I("input", {
386
386
  type: "hidden",
@@ -398,7 +398,7 @@ var we = {
398
398
  children: [
399
399
  /* @__PURE__ */ I(o, {
400
400
  htmlFor: O,
401
- className: a("block", h ? "cursor-not-allowed" : "cursor-pointer"),
401
+ className: a("block text-inherit", h ? "cursor-not-allowed" : "cursor-pointer"),
402
402
  children: r
403
403
  }),
404
404
  !!k && /* @__PURE__ */ I(s, {
@@ -415,8 +415,9 @@ var we = {
415
415
  ]
416
416
  }),
417
417
  /* @__PURE__ */ I("div", {
418
- className: a("switch-card--control", $, T),
418
+ className: a("switch-card--control", $, E),
419
419
  children: /* @__PURE__ */ I(Q, {
420
+ className: "data-disabled:opacity-100",
420
421
  id: O,
421
422
  checked: C,
422
423
  onValueChange: j,
@@ -436,7 +437,7 @@ function je(e) {
436
437
  return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
437
438
  }
438
439
  var Me = A(function({ "aria-describedby": e, label: r, description: i, kind: c = "switch", value: l, defaultValue: u, onValueChange: d, disabled: f = !1, invalid: m = !1, name: h, className: g, controlPosition: _ = "trailing" }, v) {
439
- let y = l !== void 0, [b, x] = F(u ?? !1), S = y ? l ?? !1 : b, { defaultScale: C } = t(), w = a("toggle-field--control", $, E[n(void 0, C)]), T = N(), D = `${T}-label`, k = i != null && i !== !1, A = k ? `${T}-description` : void 0, j = M((e) => {
440
+ let y = l !== void 0, [b, x] = F(u ?? !1), S = y ? l ?? !1 : b, { defaultScale: C } = t(), T = a("toggle-field--control", $, w[n(void 0, C)]), E = N(), D = `${E}-label`, k = i != null && i !== !1, A = k ? `${E}-description` : void 0, j = M((e) => {
440
441
  f || (y || x(e), d?.(e));
441
442
  }, [
442
443
  f,
@@ -446,7 +447,7 @@ var Me = A(function({ "aria-describedby": e, label: r, description: i, kind: c =
446
447
  e.target.closest("[role=\"switch\"], [role=\"checkbox\"], input[type=\"checkbox\"]") || j(!S);
447
448
  }, R = c === "switch" ? /* @__PURE__ */ I(Q, {
448
449
  className: "after:inset-x-0",
449
- id: T,
450
+ id: E,
450
451
  name: h,
451
452
  checked: S,
452
453
  onValueChange: j,
@@ -455,7 +456,7 @@ var Me = A(function({ "aria-describedby": e, label: r, description: i, kind: c =
455
456
  "aria-labelledby": D,
456
457
  "aria-describedby": [e, A].filter(Boolean).join(" ") || void 0
457
458
  }) : /* @__PURE__ */ I(O, {
458
- id: T,
459
+ id: E,
459
460
  name: h,
460
461
  checked: S,
461
462
  onCheckedChange: (e) => j(e === !0),
@@ -469,8 +470,9 @@ var Me = A(function({ "aria-describedby": e, label: r, description: i, kind: c =
469
470
  children: [/* @__PURE__ */ I("div", {
470
471
  id: D,
471
472
  children: je(r) ? /* @__PURE__ */ I(o, {
472
- htmlFor: T,
473
- className: a("block", f ? "cursor-not-allowed opacity-50" : "cursor-pointer"),
473
+ htmlFor: E,
474
+ "data-disabled": f || void 0,
475
+ className: a("block text-inherit data-disabled:opacity-50", f ? "cursor-not-allowed" : "cursor-pointer"),
474
476
  children: r
475
477
  }) : r
476
478
  }), k && /* @__PURE__ */ I("div", {
@@ -493,12 +495,12 @@ var Me = A(function({ "aria-describedby": e, label: r, description: i, kind: c =
493
495
  className: a("toggle-field--component rounded-radius py-row-y", f && "pointer-events-none", g),
494
496
  children: [
495
497
  _ === "leading" && /* @__PURE__ */ I("div", {
496
- className: w,
498
+ className: T,
497
499
  children: R
498
500
  }),
499
501
  z,
500
502
  _ === "trailing" && /* @__PURE__ */ I("div", {
501
- className: w,
503
+ className: T,
502
504
  children: R
503
505
  })
504
506
  ]
@@ -516,19 +518,19 @@ var Pe = {
516
518
  3: "grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @xl/card-checkbox-group:grid-cols-3",
517
519
  4: "grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @2xl/card-checkbox-group:grid-cols-4"
518
520
  }, Fe = A(function({ "aria-describedby": n, options: r, value: i, defaultValue: o, onValueChange: u, name: d, columns: f = 3, invalid: m, disabled: h, size: g, className: _ }, v) {
519
- let { defaultScale: y } = t(), { defaultTextSize: b } = e(), S = C(g, y), w = a("card-checkbox-group--marker", $, c[b ?? "sm"], l.normal), T = i !== void 0, [E, D] = F(o ?? []), O = P(() => T ? i ?? [] : E, [
520
- E,
521
+ let { defaultScale: y } = t(), { defaultTextSize: b } = e(), S = D(g, y), C = a("card-checkbox-group--marker", $, c[b ?? "sm"], l.normal), w = i !== void 0, [T, E] = F(o ?? []), O = P(() => w ? i ?? [] : T, [
521
522
  T,
523
+ w,
522
524
  i
523
525
  ]), k = we[S], A = M((e) => {
524
526
  if (h || r.find((t) => t.value === e)?.disabled) return;
525
527
  let t = O.includes(e) ? O.filter((t) => t !== e) : [...O, e];
526
- T || D(t), u?.(t);
528
+ w || E(t), u?.(t);
527
529
  }, [
528
530
  h,
529
531
  r,
530
532
  O,
531
- T,
533
+ w,
532
534
  u
533
535
  ]);
534
536
  return /* @__PURE__ */ I("div", {
@@ -558,7 +560,7 @@ var Pe = {
558
560
  onClick: () => A(e.value),
559
561
  disabled: i,
560
562
  "data-selected": r,
561
- className: a("box-border group relative flex w-full flex-col items-start text-start outline-none cursor-pointer", "rounded-radius border border-border bg-card transition-[color,box-shadow,background,border-color] duration-150", De, "data-[selected=true]:border-primary", k.padding, k.gap, x.invalid, "disabled:cursor-not-allowed disabled:opacity-50"),
563
+ className: a("box-border group relative flex w-full flex-col items-start text-start outline-none cursor-pointer", "rounded-radius border border-border bg-card text-card-foreground transition-[color,box-shadow,background,border-color] duration-150", De, "data-[selected=true]:border-primary", k.padding, k.gap, x.invalid, "disabled:cursor-not-allowed disabled:opacity-50"),
562
564
  children: [!!t && /* @__PURE__ */ I("span", {
563
565
  className: a("inline-flex shrink-0 items-center justify-center rounded-inner bg-muted text-muted-foreground", k.iconBox),
564
566
  children: /* @__PURE__ */ I(t, { className: k.iconSize })
@@ -569,6 +571,7 @@ var Pe = {
569
571
  className: "min-w-0 flex-1",
570
572
  children: [Ne(n) ? /* @__PURE__ */ I(s, {
571
573
  tag: "span",
574
+ type: "inherit",
572
575
  weight: "medium",
573
576
  children: n
574
577
  }) : n, !!e.description && (Ne(e.description) ? /* @__PURE__ */ I(s, {
@@ -578,7 +581,7 @@ var Pe = {
578
581
  }) : e.description)]
579
582
  }), /* @__PURE__ */ I("span", {
580
583
  "aria-hidden": "true",
581
- className: w,
584
+ className: C,
582
585
  children: /* @__PURE__ */ I("span", {
583
586
  className: ke,
584
587
  children: /* @__PURE__ */ I(B, { className: a(Oe, !r && "hidden") })
@@ -604,7 +607,7 @@ var Le = {
604
607
  4: "grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2 @2xl/card-radio-group:grid-cols-4"
605
608
  };
606
609
  function Re({ "aria-describedby": n, options: r, value: i, defaultValue: o, onValueChange: u, name: d, columns: f = 3, invalid: m, disabled: h, size: g, className: _ }, v) {
607
- let { defaultScale: y } = t(), { defaultTextSize: b } = e(), S = C(g, y), w = a("card-radio-group--marker", $, c[b ?? "sm"], l.normal), T = we[S], E = P(() => a("card-radio-group--grid", Le[f]), [f]);
610
+ let { defaultScale: y } = t(), { defaultTextSize: b } = e(), S = D(g, y), C = a("card-radio-group--marker", $, c[b ?? "sm"], l.normal), w = we[S], T = P(() => a("card-radio-group--grid", Le[f]), [f]);
608
611
  return /* @__PURE__ */ I("div", {
609
612
  ref: v,
610
613
  className: a("card-radio-group--component @container/card-radio-group", _),
@@ -616,24 +619,25 @@ function Re({ "aria-describedby": n, options: r, value: i, defaultValue: o, onVa
616
619
  disabled: h,
617
620
  "aria-describedby": n,
618
621
  "aria-invalid": m || void 0,
619
- className: E,
622
+ className: T,
620
623
  children: r.map((e) => {
621
624
  let t = e.icon, n = e.label;
622
625
  return /* @__PURE__ */ L(U.Root, {
623
626
  value: e.value,
624
627
  disabled: h || e.disabled,
625
628
  "aria-invalid": m || void 0,
626
- className: a("box-border relative group flex flex-col text-start outline-none cursor-pointer", "rounded-radius border border-border bg-card transition-[color,box-shadow,background,border-color] duration-150", De, "data-[checked]:border-primary", T.padding, T.gap, x.invalid, "data-disabled:cursor-not-allowed data-disabled:opacity-50"),
629
+ className: a("box-border relative group flex flex-col text-start outline-none cursor-pointer", "rounded-radius border border-border bg-card text-card-foreground transition-[color,box-shadow,background,border-color] duration-150", De, "data-[checked]:border-primary", w.padding, w.gap, x.invalid, "data-disabled:cursor-not-allowed data-disabled:opacity-50"),
627
630
  children: [!!t && /* @__PURE__ */ I("span", {
628
- className: a("inline-flex shrink-0 items-center justify-center rounded-inner bg-muted text-muted-foreground", T.iconBox),
629
- children: /* @__PURE__ */ I(t, { className: T.iconSize })
631
+ className: a("inline-flex shrink-0 items-center justify-center rounded-inner bg-muted text-muted-foreground", w.iconBox),
632
+ children: /* @__PURE__ */ I(t, { className: w.iconSize })
630
633
  }), /* @__PURE__ */ L("span", {
631
- className: a("card-radio-group--body flex w-full min-w-0 items-start", T.gap),
634
+ className: a("card-radio-group--body flex w-full min-w-0 items-start", w.gap),
632
635
  children: [/* @__PURE__ */ L(p, {
633
636
  gap: "dense",
634
637
  className: "min-w-0 flex-1",
635
638
  children: [Ie(n) ? /* @__PURE__ */ I(s, {
636
639
  tag: "span",
640
+ type: "inherit",
637
641
  weight: "medium",
638
642
  children: n
639
643
  }) : n, !!e.description && (Ie(e.description) ? /* @__PURE__ */ I(s, {
@@ -643,7 +647,7 @@ function Re({ "aria-describedby": n, options: r, value: i, defaultValue: o, onVa
643
647
  }) : e.description)]
644
648
  }), /* @__PURE__ */ I("span", {
645
649
  "aria-hidden": "true",
646
- className: w,
650
+ className: C,
647
651
  children: /* @__PURE__ */ I("span", {
648
652
  className: ke,
649
653
  children: /* @__PURE__ */ I(U.Indicator, { render: /* @__PURE__ */ I(B, { className: Oe }) })
@@ -663,7 +667,7 @@ function Be(e) {
663
667
  return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
664
668
  }
665
669
  var Ve = A(function({ options: n, value: r, defaultValue: i, onValueChange: o, name: l, invalid: u, disabled: d, size: f, className: m }, h) {
666
- let { defaultScale: g } = t(), { defaultTextSize: _ } = e(), v = Ee[C(f, g)], y = a(c[_ ?? "sm"], "leading-tight");
670
+ let { defaultScale: g } = t(), { defaultTextSize: _ } = e(), v = Ee[D(f, g)], y = a(c[_ ?? "sm"], "leading-tight");
667
671
  return /* @__PURE__ */ I(W, {
668
672
  ref: h,
669
673
  value: r,
@@ -708,7 +712,7 @@ Ve.displayName = "ListRadioGroup";
708
712
  //#endregion
709
713
  //#region src/components/base/choice-inputs/pill-radio-group.tsx
710
714
  var He = /* @__PURE__ */ new Set(["ArrowRight", "ArrowDown"]), Ue = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowUp"]), We = k.forwardRef(function({ name: e, value: n, options: r, onValueChange: i, allowClear: o = !1, size: c, fullWidth: l = !1, disabled: d = !1, invalid: f = !1, className: p, "aria-label": m, "aria-labelledby": h, "aria-describedby": g }, _) {
711
- let { defaultScale: v } = t(), y = C(c, v), b = k.useRef([]), S = k.useCallback((e) => !d && !e.disabled, [d]), w = r.findIndex((e) => e.value === n), T = w >= 0 && S(r[w]) ? w : r.findIndex(S), E = k.useCallback((e) => {
715
+ let { defaultScale: v } = t(), y = D(c, v), b = k.useRef([]), S = k.useCallback((e) => !d && !e.disabled, [d]), w = r.findIndex((e) => e.value === n), T = w >= 0 && S(r[w]) ? w : r.findIndex(S), E = k.useCallback((e) => {
712
716
  e === n ? o && i(null) : i(e);
713
717
  }, [
714
718
  o,
@@ -732,7 +736,7 @@ var He = /* @__PURE__ */ new Set(["ArrowRight", "ArrowDown"]), Ue = /* @__PURE__
732
736
  let o = getComputedStyle(e.currentTarget).direction === "rtl", s = o ? /* @__PURE__ */ new Set(["ArrowLeft", "ArrowDown"]) : He, c = o ? /* @__PURE__ */ new Set(["ArrowRight", "ArrowUp"]) : Ue, l = t.indexOf(a), u;
733
737
  s.has(e.key) ? u = t[(l + 1) % t.length] : c.has(e.key) ? u = t[(l - 1 + t.length) % t.length] : e.key === "Home" ? u = t[0] : e.key === "End" && (u = t[t.length - 1]), u !== void 0 && (e.preventDefault(), b.current[u]?.focus(), r[u].value !== n && i(r[u].value));
734
738
  },
735
- className: a("pill-radio-group--component", "border-input inline-flex items-center overflow-hidden rounded-inner border", D[y], l ? "w-full" : "w-fit self-start", x.invalid, d && "pointer-events-none opacity-50", p),
739
+ className: a("pill-radio-group--component", "border-input inline-flex items-center overflow-hidden rounded-inner border", C[y], l ? "w-full" : "w-fit self-start", x.invalid, d && "pointer-events-none opacity-50", p),
736
740
  children: r.map((e, t) => {
737
741
  let r = e.value === n, i = e.icon, o = typeof e.label == "string" ? e.label : void 0;
738
742
  return /* @__PURE__ */ L("button", {
@@ -763,4 +767,4 @@ We.displayName = "PillRadioGroup";
763
767
  //#endregion
764
768
  export { re as _, Me as a, Q as c, ce as d, le as f, te as g, pe as h, Fe as i, Se as l, fe as m, Ve as n, Ae as o, ue as p, ze as r, $ as s, We as t, me as u, ne as v };
765
769
 
766
- //# sourceMappingURL=choice-inputs-t6w3ATNz.js.map
770
+ //# sourceMappingURL=choice-inputs-CNHvARCJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-inputs-CNHvARCJ.js","names":["Select","SelectPrimitive","isScalar","baseui.SelectContent","baseui.SelectGroup","baseui.SelectItem","baseui.SelectLabel","baseui.SelectSeparator","Select","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","Switch","SwitchPrimitive","Switch","SwitchPrimitive","React","Switch","isSimpleText","Switch","isSimpleText","GRID_COLS","isSimpleText","RadioGroupPrimitive","RadioPrimitive","React","RadioGroupPrimitive","RadioPrimitive","React","useTypographyConfig","useDensityConfig","resolveComponentScale","cn","Label","Text","textSizes","textLineHeights","focusRecipes","anchoredPositionMethod","motionRecipes","Stack","surfaceDividerRecipes","collectionRowClasses","popoverRecipes","collectionRecipes","CollectionLabel","CollectionContent","interactionRecipes","fieldStateRecipes","selectToggleRecipes","formControlSizeClasses","formLabelSizeClasses","formFieldTriggerClasses","formControlIconClasses","resolveFormControlSize","Checkbox","React$1","Select$2","Select","SelectGroup","props","className","SelectValue","SelectTrigger","size","children","ChevronDownIcon","iconClassName","SelectContent","resolvedContainer","useThemePortalContainer","container","alignItemWithTrigger","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","CheckIcon","SelectSeparator","ChevronUpIcon","SELECT_POPUP_BEM","selectPopupItemSizeClasses","isScalar$1","value","SelectPopupContent","SelectPopupGroup","SelectPopupItem","density","defaultTextSize","selectPopupLabelSizeClasses","SelectPopupLabel","SelectPopupSeparator","defaultSelectStrings","CLEAR_VALUE","OPTION_VALUE_PREFIX","toInternalOptionValue","toInternalSelectedValue","toExternalValue","isScalar","typographyNode","DefaultOptionContent","option","Select$1","memo","forwardRef","isControlled","stringsProp","sizeProp","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaInvalid","triggerProps","strings","useStrings","defaultScale","resolvedPlaceholder","placeholder","internalOptions","useMemo","mapped","options","allowClear","internalValue","optionsByInternalValue","entry","normalizedValue","normalizedDefaultValue","defaultValue","handleValueChange","useCallback","externalValue","nextValue","onValueChange","serializeValue","invalid","selectedOption","currentValue","renderValue","contentClassName","rendered","renderOption","Switch$2","Switch","Switch$1","rest","resolvedAriaInvalid","resolvedInvalid","checked","choiceCardSizeTokens","choicePillSizeTokens","choiceListSizeTokens","choiceCardStateClasses","choiceControlTrackClasses","choiceCardMarkerClasses","choiceCardMarkerSlotClasses","SwitchCard","Icon","internal","setInternal","useState","labelLineClasses","generatedId","useId","id","name","hasDescription","description","describedById","handleToggle","disabled","newChecked","handleCardClick","label","hint","isSimpleText$3","ToggleField","controlTrackClasses","inputId","labelId","descriptionId","set","next","onRowClick","Control","kind","v","TextBlock","controlPosition","isSimpleText$2","GRID_COLS$1","CardCheckboxGroup","markerTrackClasses","selected","tokens","toggle","o","val","columns","optionLabel","isSelected","isDisabled","shouldIncludeHidden","nameAttr","CircleCheck","isSimpleText$1","GRID_COLS","CardRadioGroupImpl","gridClassName","RadioGroup","Radio","CardRadioGroup","isSimpleText","ListRadioGroup","rowPadding","NEXT_KEYS","PREVIOUS_KEYS","PillRadioGroup","buttonRefs","isEnabled","selectedIndex","tabStopIndex","handleClick","optionValue","enabled","index","current","button","event","rtl","forward","backward","position","fullWidth","node"],"sources":["../src/components/ui/select.tsx","../src/components/base/choice-inputs/select-popup.tsx","../src/components/base/choice-inputs/select.tsx","../src/components/ui/switch.tsx","../src/components/base/choice-inputs/switch.tsx","../src/components/base/choice-inputs/choice-types.ts","../src/components/base/choice-inputs/switch-card.tsx","../src/components/base/choice-inputs/toggle-field.tsx","../src/components/base/choice-inputs/card-checkbox-group.tsx","../src/components/base/choice-inputs/card-radio-group.tsx","../src/components/base/choice-inputs/list-radio-group.tsx","../src/components/base/choice-inputs/pill-radio-group.tsx"],"sourcesContent":["import { anchoredPositionMethod } from '../../lib/anchored-positioning';\nimport { fieldStateRecipes } from '../../lib/field-state-recipes';\nimport { selectToggleRecipes } from '../../lib/field-affordance-recipes';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { surfaceDividerRecipes } from '../../lib/surface-recipes';\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\"flex flex-1 text-start\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n iconClassName,\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n /** Chevron size; owners pass the matching control icon size. Defaults to the shared select-toggle glyph for `size`. */\n iconClassName?: string\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"box-border flex w-fit items-center justify-between gap-space-sm whitespace-nowrap rounded-inner border border-input bg-transparent px-control py-space-xs font-sans text-sm text-foreground shadow-none outline-none transition-[color,box-shadow]\",\n \"data-[placeholder]:text-muted-foreground data-[size=default]:h-control data-[size=sm]:h-control-sm\",\n fieldStateRecipes.focus,\n fieldStateRecipes.invalid,\n \"disabled:cursor-not-allowed disabled:opacity-50 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n \"*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-space-sm [&_svg:not([class*='size-'])]:size-icon [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={\n <ChevronDownIcon aria-hidden=\"true\" className={cn(\"pointer-events-none shrink-0 text-muted-foreground\", selectToggleRecipes.icon[size === \"sm\" ? \"sm\" : \"md\"], iconClassName)} />\n }\n />\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n container,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n positionMethod = anchoredPositionMethod,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\" | \"positionMethod\"\n > & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <SelectPrimitive.Portal container={resolvedContainer}>\n <SelectPrimitive.Positioner\n positionMethod={positionMethod}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n data-align-trigger={alignItemWithTrigger}\n className={cn(\n motionRecipes.popup,\n 'data-[align-trigger=true]:transition-none data-[align-trigger=true]:duration-0 data-[align-trigger=true]:scale-100 data-[align-trigger=true]:translate-none data-[align-trigger=true]:opacity-100',\n \"relative isolate z-50 max-h-(--available-height) min-w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-radius bg-popover text-popover-foreground shadow-md\",\n surfaceDividerRecipes.anchored.shell,\n className\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"px-row-x py-row-y-sm text-xs font-medium text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex min-w-0 flex-1 gap-space-sm\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={<span className=\"pointer-events-none flex shrink-0 items-center justify-center\" />}\n >\n <CheckIcon className=\"pointer-events-none\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none my-space-xs h-px\", surfaceDividerRecipes.anchored.separator, className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-space-xs [&_svg:not([class*='size-'])]:size-icon top-0 w-full\", className)}\n {...props}\n >\n <ChevronUpIcon\n />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\"bg-popover z-10 flex cursor-default items-center justify-center py-space-xs [&_svg:not([class*='size-'])]:size-icon bottom-0 w-full\", className)}\n {...props}\n >\n <ChevronDownIcon\n />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import { CollectionLabel } from '../popover/collection-content';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\n\nimport * as baseui from '../../ui/select';\nimport { Text } from '../../typography';\nimport { textSizes } from '../../typography/text.styles';\nimport { useTypographyConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { collectionRecipes, collectionRowClasses, popoverRecipes, type CollectionDensity } from '../popover/popover.recipes';\n\nconst SELECT_POPUP_BEM = {\n\tcontent: 'select-popup--component',\n\tgroup: 'select-popup--group',\n\titem: 'select-popup--item',\n\tlabel: 'select-popup--label',\n\tseparator: 'select-popup--separator',\n} as const;\n\nconst selectPopupItemSizeClasses: Record<FormControlSize, string> = {\n\tsm: \"[&_svg:not([class*='size-'])]:size-icon-sm\",\n\tmd: \"[&_svg:not([class*='size-'])]:size-icon\",\n\tlg: \"[&_svg:not([class*='size-'])]:size-icon-lg\",\n};\n\nfunction isScalar(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/**\n * Private presentation layer for every Select-based form popup.\n *\n * It deliberately leaves Root/Trigger/Value state and form semantics with the\n * owning control, while centralizing the collection popup's compact surface inset, row\n * rhythm, option indicator clearance, icon sizing, and group anatomy.\n */\nexport function SelectPopupContent({\n\tclassName,\n\talign = 'start',\n\talignItemWithTrigger = false,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectContent>) {\n\treturn (\n\t\t<baseui.SelectContent\n\t\t\talign={align}\n\t\t\talignItemWithTrigger={alignItemWithTrigger}\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.content,\n\t\t\t\tpopoverRecipes.surface,\n\t\t\t\tpopoverRecipes.menu,\n\t\t\t\t'w-max min-w-(--anchor-width) max-w-(--available-width)',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function SelectPopupGroup({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectGroup>) {\n\treturn (\n\t\t<baseui.SelectGroup\n\t\t\tclassName={cn(SELECT_POPUP_BEM.group, 'p-0', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport interface SelectPopupItemProps\n\textends ComponentPropsWithoutRef<typeof baseui.SelectItem> {\n\t/** Match option typography, gap, icon, and indicator clearance to its trigger. */\n\tsize?: FormControlSize;\n\t/** Vertical option rhythm, independent from trigger/icon size. */\n\tdensity?: CollectionDensity;\n}\n\nexport function SelectPopupItem({\n\tchildren,\n\tclassName,\n\tsize = 'md',\n\tdensity = 'default',\n\t...props\n}: SelectPopupItemProps) {\n\tconst { defaultTextSize } = useTypographyConfig();\n\treturn (\n\t\t<baseui.SelectItem\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.item,\n\t\t\t\tcollectionRowClasses(density),\n\t\t\t\tcollectionRecipes.highlighted,\n\t\t\t\tcollectionRecipes.disabled,\n\t\t\t\tselectPopupItemSizeClasses[size],\n\t\t\t\ttextSizes[defaultTextSize ?? 'sm'],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalar(children) ? <CollectionLabel>{children}</CollectionLabel> : children}\n\t\t</baseui.SelectItem>\n\t);\n}\n\nexport interface SelectPopupLabelProps\n\textends ComponentPropsWithoutRef<typeof baseui.SelectLabel> {\n\t/**\n\t * Owning control scale. Group captions sit one step below the option text:\n\t * `sm` and `md` use the compact caption size, `lg` the default text size.\n\t * Defaults to `md`.\n\t */\n\tsize?: FormControlSize;\n}\n\nconst selectPopupLabelSizeClasses: Record<FormControlSize, string> = {\n\tsm: 'text-xs',\n\tmd: 'text-xs',\n\tlg: 'text-sm',\n};\n\n/**\n * Group caption. Supporting copy rather than another option, so it uses the\n * secondary medium caption role shared with menu and command group captions.\n */\nexport function SelectPopupLabel({\n\tchildren,\n\tclassName,\n\tsize = 'md',\n\t...props\n}: SelectPopupLabelProps) {\n\treturn (\n\t\t<baseui.SelectLabel\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.label,\n\t\t\t\t'px-row-x py-row-y-sm font-medium text-muted-foreground',\n\t\t\t\tselectPopupLabelSizeClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalar(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"inherit\" weight=\"inherit\" lineHeight=\"tight\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</baseui.SelectLabel>\n\t);\n}\n\nexport function SelectPopupSeparator({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectSeparator>) {\n\treturn (\n\t\t<baseui.SelectSeparator\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.separator,\n\t\t\t\tpopoverRecipes.separator,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { CollectionContent } from '../popover/collection-content';\nimport {\n\tforwardRef,\n\tmemo,\n\tuseCallback,\n\tuseMemo,\n\ttype ComponentPropsWithoutRef,\n\ttype FocusEventHandler,\n\ttype ReactNode,\n\ttype Ref,\n} from 'react';\n\nimport * as baseui from '../../ui/select';\nimport { Text } from '../../typography';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport type { CollectionDensity } from '../popover/popover.recipes';\n\nimport {\n\tformControlIconClasses,\n\tformFieldTriggerClasses,\n\tresolveFormControlSize,\n} from '../forms/form-sizing';\nimport {\n\tSelectPopupContent,\n\tSelectPopupGroup,\n\tSelectPopupItem,\n} from './select-popup';\n\nexport interface SelectStrings {\n\tplaceholder: string;\n}\n\nexport const defaultSelectStrings: SelectStrings = {\n\tplaceholder: 'Select an option',\n};\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdescription?: string;\n\ticon?: ReactNode;\n\tdisabled?: boolean;\n}\n\ntype BaseSelectTriggerProps = ComponentPropsWithoutRef<typeof baseui.SelectTrigger>;\n\ntype SelectTriggerProps = Omit<\n\tBaseSelectTriggerProps,\n\t| 'aria-describedby'\n\t| 'aria-invalid'\n\t| 'aria-label'\n\t| 'aria-labelledby'\n\t| 'children'\n\t| 'className'\n\t| 'defaultValue'\n\t| 'disabled'\n\t| 'form'\n\t| 'id'\n\t| 'name'\n\t| 'onBlur'\n\t| 'onChange'\n\t| 'onFocus'\n\t| 'required'\n\t| 'size'\n\t| 'value'\n>;\n\nexport interface SelectProps extends SelectTriggerProps {\n\t/** Popup option rhythm, independent from the trigger size. Defaults to default. */\n\tdensity?: CollectionDensity;\n\t/** Available options. An empty-string option clears the selection. */\n\toptions: SelectOption[];\n\n\t/** Placeholder text — overrides `strings.placeholder` when provided. */\n\tplaceholder?: string;\n\n\t/** String overrides (e.g. placeholder). */\n\tstrings?: StringsProp<SelectStrings>;\n\n\t/** Add a placeholder option that clears the current selection. */\n\tallowClear?: boolean;\n\n\t/** Error state for styling (passed from FormField). */\n\tinvalid?: boolean;\n\n\t/** Visual size. */\n\tsize?: FormControlSize;\n\n\t/** Additional class names for the trigger. */\n\tclassName?: string;\n\n\t/** Additional class names for the popup surface. */\n\tcontentClassName?: string;\n\n\t/** Canonical value callback. Returns `undefined` when the selection is cleared. */\n\tonValueChange?: (value: string | undefined) => void;\n\n\t/** Current value. Passing `value={undefined}` explicitly keeps the control controlled and clear. */\n\tvalue?: string | null;\n\n\t/** Initial value for an uncontrolled select. */\n\tdefaultValue?: string | null;\n\n\t/** Disabled state. */\n\tdisabled?: boolean;\n\n\t/** Read-only state. */\n\treadOnly?: boolean;\n\n\t/** Field name used by the hidden native input. */\n\tname?: string;\n\n\t/** The owning form id when the select is rendered outside that form. */\n\tform?: string;\n\n\t/** Native autocomplete hint forwarded to the hidden input. */\n\tautoComplete?: string;\n\n\t/** Ref to the hidden native input used for form submission. */\n\tinputRef?: Ref<HTMLInputElement>;\n\n\t/** Root id; Base UI applies it to the trigger/field contract. */\n\tid?: string;\n\n\t/** Required state. */\n\trequired?: boolean;\n\n\t/** Accessible label for externally-labelled or compact trigger contexts. */\n\t'aria-label'?: string;\n\n\t/** Ids of elements that label the trigger. */\n\t'aria-labelledby'?: string;\n\n\t/** Ids of elements that describe the trigger. */\n\t'aria-describedby'?: string;\n\n\t/** Native invalid state forwarded to the trigger. `invalid` takes precedence. */\n\t'aria-invalid'?: BaseSelectTriggerProps['aria-invalid'];\n\n\t/** Native focus callback forwarded to the trigger. */\n\tonFocus?: FocusEventHandler<HTMLButtonElement>;\n\n\t/** Native blur callback forwarded to the trigger. */\n\tonBlur?: FocusEventHandler<HTMLButtonElement>;\n\n\t/** Open state (controlled). */\n\topen?: boolean;\n\n\t/** Default open state. */\n\tdefaultOpen?: boolean;\n\n\t/** Open change handler. */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** Called after the popup's opening or closing animation completes. */\n\tonOpenChangeComplete?: (open: boolean) => void;\n\n\t/** Whether the open popup should isolate interaction from the rest of the page. */\n\tmodal?: boolean;\n\n\t/** Whether pointer movement should highlight popup options. */\n\thighlightItemOnHover?: boolean;\n\n\t/** Replace the default icon/label/description option presentation. */\n\trenderOption?: (option: SelectOption) => ReactNode;\n\n\t/** Replace the trigger value presentation. Receives `undefined` for the placeholder state. */\n\trenderValue?: (option: SelectOption | undefined) => ReactNode;\n}\n\ninterface InternalSelectOption {\n\tinternalValue: string;\n\toption: SelectOption;\n}\n\n// Base UI reserves the empty string for an empty native form value. Encoding every\n// real option keeps consumer values collision-free, including values that happen to\n// equal this component's clear sentinel.\nconst CLEAR_VALUE = '__admin_ui_select_clear__';\nconst OPTION_VALUE_PREFIX = '__admin_ui_select_option__:';\n\nfunction toInternalOptionValue(value: string): string {\n\treturn value === '' ? CLEAR_VALUE : `${OPTION_VALUE_PREFIX}${value}`;\n}\n\nfunction toInternalSelectedValue(value: string | null | undefined): string | null {\n\tif (value === '' || value === null || value === undefined) return null;\n\treturn `${OPTION_VALUE_PREFIX}${value}`;\n}\n\nfunction toExternalValue(value: string | null): string | undefined {\n\tif (value === null || value === CLEAR_VALUE) return undefined;\n\tif (value.startsWith(OPTION_VALUE_PREFIX)) return value.slice(OPTION_VALUE_PREFIX.length);\n\treturn undefined;\n}\n\nfunction isScalar(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction typographyNode(value: ReactNode, className?: string): ReactNode {\n\tif (!isScalar(value)) return value;\n\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className={cn('text-inherit', className)}>\n\t\t\t{value}\n\t\t</Text>\n\t);\n}\n\nfunction DefaultOptionContent({ option, size }: { option: SelectOption; size: FormControlSize }) {\n return <CollectionContent label={option.label} description={option.description} leading={option.icon} leadingDecorative wrap\n className=\"select--option-content\" leadingClassName={cn('select--option-icon',formControlIconClasses[size])}\n bodyClassName=\"select--option-text text-start\" labelClassName=\"select--option-label block\"\n descriptionClassName=\"select--option-description line-clamp-2\"/>;\n}\n\n/**\n * Canonical finite-option form control. `Select` owns the single Base UI state\n * engine used by both standard and descriptive option presentations.\n */\nexport const Select = memo(\n\tforwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n\t\tconst isControlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\t\tconst {\n\t\t\toptions,\n\t\t\tdensity,\n\t\t\tplaceholder,\n\t\t\tstrings: stringsProp,\n\t\t\tallowClear = false,\n\t\t\tinvalid,\n\t\t\tsize: sizeProp,\n\t\t\tclassName,\n\t\t\tcontentClassName,\n\t\t\tonValueChange,\n\t\t\tdisabled,\n\t\t\treadOnly,\n\t\t\tdefaultOpen,\n\t\t\topen,\n\t\t\tonOpenChange,\n\t\t\tonOpenChangeComplete,\n\t\t\tmodal,\n\t\t\thighlightItemOnHover,\n\t\t\tname,\n\t\t\tform,\n\t\t\tautoComplete,\n\t\t\tinputRef,\n\t\t\tid,\n\t\t\trequired,\n\t\t\t'aria-label': ariaLabel,\n\t\t\t'aria-labelledby': ariaLabelledBy,\n\t\t\t'aria-describedby': ariaDescribedBy,\n\t\t\t'aria-invalid': ariaInvalid,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\trenderOption,\n\t\t\trenderValue,\n\t\t\t...triggerProps\n\t\t} = props;\n\t\tconst strings = useStrings(defaultSelectStrings, stringsProp);\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst resolvedPlaceholder = placeholder ?? strings.placeholder;\n\n\t\tconst internalOptions = useMemo<InternalSelectOption[]>(() => {\n\t\t\tconst mapped = options.map((option) => ({\n\t\t\t\toption,\n\t\t\t\tinternalValue: toInternalOptionValue(option.value),\n\t\t\t}));\n\n\t\t\tif (allowClear && !mapped.some(({ internalValue }) => internalValue === CLEAR_VALUE)) {\n\t\t\t\tmapped.unshift({\n\t\t\t\t\tinternalValue: CLEAR_VALUE,\n\t\t\t\t\toption: { value: '', label: resolvedPlaceholder },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn mapped;\n\t\t}, [allowClear, options, resolvedPlaceholder]);\n\n\t\tconst optionsByInternalValue = useMemo(\n\t\t\t() => new Map(internalOptions.map((entry) => [entry.internalValue, entry.option])),\n\t\t\t[internalOptions],\n\t\t);\n\t\tconst normalizedValue = toInternalSelectedValue(value);\n\t\tconst normalizedDefaultValue = toInternalSelectedValue(defaultValue);\n\n\t\tconst handleValueChange = useCallback(\n\t\t\t(nextValue: string | null) => {\n\t\t\t\tconst externalValue = toExternalValue(nextValue);\n\t\t\t\tonValueChange?.(externalValue);\n\t\t\t},\n\t\t\t[onValueChange],\n\t\t);\n\n\t\tconst serializeValue = useCallback((internalValue: string) => {\n\t\t\treturn toExternalValue(internalValue) ?? '';\n\t\t}, []);\n\n\t\tconst controlledValueProps = isControlled ? { value: normalizedValue } : {};\n\n\t\treturn (\n\t\t\t<baseui.Select\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tonOpenChangeComplete={onOpenChangeComplete}\n\t\t\t\tmodal={modal}\n\t\t\t\thighlightItemOnHover={highlightItemOnHover}\n\t\t\t\tname={name}\n\t\t\t\tform={form}\n\t\t\t\tautoComplete={autoComplete}\n\t\t\t\tinputRef={inputRef}\n\t\t\t\tid={id}\n\t\t\t\trequired={required}\n\t\t\t\tdefaultValue={normalizedDefaultValue}\n\t\t\t\titemToStringValue={serializeValue}\n\t\t\t\t{...controlledValueProps}\n\t\t\t>\n\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\ticonClassName={selectToggleRecipes.icon[size]}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'select--component select--trigger',\n\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t'data-[placeholder]:text-muted-foreground',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...triggerProps}\n\t\t\t\t>\n\t\t\t\t\t<baseui.SelectValue className=\"select--value min-w-0\">\n\t\t\t\t\t\t{(currentValue: string | null) => {\n\t\t\t\t\t\t\tconst selectedOption = currentValue && currentValue !== CLEAR_VALUE\n\t\t\t\t\t\t\t\t? optionsByInternalValue.get(currentValue)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tconst rendered = renderValue\n\t\t\t\t\t\t\t\t? renderValue(selectedOption)\n\t\t\t\t\t\t\t\t: selectedOption?.label ?? resolvedPlaceholder;\n\n\t\t\t\t\t\t\treturn typographyNode(rendered, 'min-w-0 truncate');\n\t\t\t\t\t\t}}\n\t\t\t\t\t</baseui.SelectValue>\n\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t<SelectPopupContent className={cn('select--content', contentClassName)}>\n\t\t\t\t\t<SelectPopupGroup className=\"select--group\">\n\t\t\t\t\t\t{internalOptions.map(({ internalValue, option }) => {\n\t\t\t\t\t\t\tconst rendered = renderOption?.(option);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<SelectPopupItem\n\t\t\t\t\t\t\t\t\tkey={internalValue}\n\t\t\t\t\t\t\t\t\tvalue={internalValue}\n\t\t\t\t\t\t\t\t\tlabel={option.label}\n\t\t\t\t\t\t\t\t\taria-label={option.label}\n\t\t\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\t\t\t\tclassName=\"select--item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{renderOption\n\t\t\t\t\t\t\t\t\t\t? typographyNode(rendered, 'select--option-custom')\n\t\t\t\t\t\t\t\t\t\t: <DefaultOptionContent option={option} size={size} />}\n\t\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t</SelectPopupContent>\n\t\t\t</baseui.Select>\n\t\t);\n\t}),\n);\n\nSelect.displayName = 'Select';\n","import { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\n\nimport { cn } from \"../../lib/utils\"\nimport { focusRecipes } from \"../../lib/focus-recipes\"\nimport { fieldStateRecipes } from \"../../lib/field-state-recipes\"\n\n/**\n * Raw switch recipe. The unchecked track is the shared `--input` control\n * boundary; focus is the shared focus frame, and invalid follows the field-state\n * contract (destructive border, destructive halo on focus) like every field.\n */\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative box-border inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-[background-color,border-color,box-shadow]\",\n \"data-checked:bg-primary data-unchecked:bg-input\",\n \"data-[size=default]:h-5 data-[size=default]:w-9 data-[size=sm]:h-4 data-[size=sm]:w-7\",\n focusRecipes.frame,\n fieldStateRecipes.invalid,\n \"after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-background rounded-full shadow-sm group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[16px] group-data-[size=sm]/switch:data-checked:translate-x-[12px] group-data-[size=default]/switch:data-unchecked:translate-x-0.5 group-data-[size=sm]/switch:data-unchecked:translate-x-0.5 pointer-events-none block ring-0 transition-transform motion-reduce:transition-none\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","/**\n * Switch — canonical boolean switch wrapper around the internal shadcn primitive.\n *\n * `onValueChange` is the package-wide value callback.\n */\nimport { forwardRef, type ComponentProps } from 'react';\n\nimport { Switch as SwitchPrimitive } from '../../ui/switch';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\n\ntype BaseSwitchProps = ComponentProps<typeof SwitchPrimitive>;\ntype SwitchElement = React.ElementRef<typeof SwitchPrimitive>;\n\nexport interface SwitchProps extends Omit<BaseSwitchProps, 'onCheckedChange' | 'size'> {\n\t/** Component scale. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: ComponentScale;\n\t/** Controlled checked state. */\n\tchecked?: boolean;\n\t/** Initial checked state for uncontrolled usage. */\n\tdefaultChecked?: boolean;\n\t/** Disable interaction and native form participation changes. */\n\tdisabled?: boolean;\n\t/** Prevent changes while retaining the current submitted value. */\n\treadOnly?: boolean;\n\t/** Require the switch to be checked for native form validation. */\n\trequired?: boolean;\n\t/** Hidden input name used during native form submission. */\n\tname?: string;\n\t/** Hidden input value submitted while checked. */\n\tvalue?: string;\n\t/** Optional value submitted while unchecked. */\n\tuncheckedValue?: string;\n\t/** Associate the hidden input with a form by id. */\n\tform?: string;\n\t/** Canonical boolean value callback. */\n\tonValueChange?: (checked: boolean) => void;\n\n\t/** Error state for styling (passed from FormField). */\n\tinvalid?: boolean;\n}\n\n/** Canonical boolean control with native form state and value-first callbacks. */\nexport const Switch = forwardRef<SwitchElement, SwitchProps>(function Switch(\n\t{\n\t\tonValueChange,\n\t\tsize: sizeProp,\n\t\tinvalid,\n\t\tclassName,\n\t\tid,\n\t\tname,\n\t\t'aria-invalid': ariaInvalid,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst resolvedAriaInvalid = invalid ? true : ariaInvalid;\n\tconst resolvedInvalid = resolvedAriaInvalid !== undefined && resolvedAriaInvalid !== false && resolvedAriaInvalid !== 'false';\n\n\treturn (\n\t\t<SwitchPrimitive\n\t\t\tref={ref}\n\t\t\t{...rest}\n\t\t\tid={id}\n\t\t\tname={name}\n\t\t\tonCheckedChange={(checked) => onValueChange?.(checked)}\n\t\t\tsize={size === 'sm' ? 'sm' : 'default'}\n\t\t\taria-invalid={resolvedAriaInvalid}\n\t\t\tclassName={cn(\n\t\t\t\t'switch--component',\n\t\t\t\tsize === 'lg' && 'h-6! w-11! [&_[data-slot=switch-thumb]]:size-5! [&[data-checked]_[data-slot=switch-thumb]]:translate-x-[20px]!',\n\t\t\t\tresolvedInvalid && 'data-unchecked:border-destructive',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nSwitch.displayName = 'Switch';\n","/**\n * Shared types for choice-style form fields (CardRadio, CardCheckbox,\n * ListRadio, PillRadio). Each variant exports its own `Option` type that\n * extends `ChoiceOptionBase`, so consumers see one consistent option shape\n * across the family.\n *\n * Sizes follow the package component scale (`sm | md | lg`). CardRadio and\n * CardCheckbox additionally accept `size` to drive padding, icon size, and type\n * scale through shared form/display variables.\n */\nimport type { ComponentType, ReactNode } from 'react';\nimport type { ComponentScale } from '../../../lib/ui-provider';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport type ChoiceSize = ComponentScale;\n\nexport interface ChoiceOptionBase<TValue extends string = string> {\n\tvalue: TValue;\n\tlabel: ReactNode;\n\tdescription?: ReactNode;\n\ticon?: ComponentType<{ className?: string }>;\n\tdisabled?: boolean;\n}\n\nexport interface ChoiceGroupBaseProps {\n\t/** Supporting/error descriptions associated with the group. */\n\t'aria-describedby'?: string;\n\t/** Form field name (also used for hidden inputs and aria grouping). */\n\tname?: string;\n\t/** Disable the entire group. */\n\tdisabled?: boolean;\n\t/** Show error styling. */\n\tinvalid?: boolean;\n\t/** Density / control size. Defaults from `useDensityConfig().defaultScale`. */\n\tsize?: ChoiceSize;\n\tclassName?: string;\n}\n\n/**\n * Padding / icon-size token map shared across CardRadio + CardCheckbox so the\n * two variants line up visually when placed side-by-side.\n */\nexport const choiceCardSizeTokens: Record<\n\tChoiceSize,\n\t{ padding: string; iconBox: string; iconSize: string; gap: string }\n> = {\n\tsm: { padding: 'p-surface-xs', iconBox: 'size-avatar-sm', iconSize: 'size-icon-sm', gap: 'gap-space-sm' },\n\tmd: { padding: 'p-surface', iconBox: 'size-avatar', iconSize: 'size-icon', gap: 'gap-space-md' },\n\tlg: { padding: 'p-surface-lg', iconBox: 'size-avatar-lg', iconSize: 'size-icon-lg', gap: 'gap-space-lg' },\n};\n\n/**\n * Pill height / horizontal padding tokens. Shared across PillRadioGroup\n * and any future toggle-bar variant so they stack cleanly.\n */\nexport const choicePillSizeTokens: Record<ChoiceSize, string> = {\n\tsm: 'h-control-sm px-control-sm text-pxs',\n\tmd: 'h-control px-control text-sm',\n\tlg: 'h-control-lg px-control text-sm',\n};\n\n/**\n * Row padding tokens for ListRadio and any future inline list variant.\n */\nexport const choiceListSizeTokens: Record<ChoiceSize, string> = {\n\tsm: 'px-row-x py-row-y-sm',\n\tmd: 'px-row-x py-row-y',\n\tlg: 'px-row-x py-row-y-lg',\n};\n\n/**\n * Shared option-card states for CardRadioGroup and CardCheckboxGroup: the resting\n * `border-border` divider (declared beside `border` by each owner) steps up to the\n * control boundary on hover, and keyboard focus draws the shared focus frame.\n * Selection and validation are added by each owner as data/aria variants, so they\n * keep their border while focused.\n */\nexport const choiceCardStateClasses = `${interactionRecipes.tileHover} ${focusRecipes.frame}`;\n\n/** Optional option glyph: one neutral tile in every state, so colour stays for meaning. */\nexport const choiceCardIconClasses = 'inline-flex shrink-0 items-center justify-center rounded-inner bg-muted text-muted-foreground';\n\n/**\n * A control track exactly one label line tall. Pair it with the label's own text\n * role (size and leading) and align the row to its start: a checkbox, radio,\n * switch or selection marker then centres on the label's first line at every\n * scale, whether or not the label wraps.\n */\nexport const choiceControlTrackClasses = 'flex h-lh shrink-0 items-center';\n\n/**\n * Shared selected-card marker, derived from action geometry. It sits in a\n * `choiceControlTrackClasses` track beside the option label, inside a slot that\n * keeps its width while unselected so selecting never rewraps the label.\n */\nexport const choiceCardMarkerClasses = 'size-action-sm shrink-0 text-primary-foreground fill-primary stroke-primary-foreground';\nexport const choiceCardMarkerSlotClasses = 'inline-flex size-action-sm shrink-0 items-center justify-center';\n","/**\n * SwitchCard — bordered settings card with an icon, title, optional\n * description, optional hint, and a trailing switch. The whole card is\n * clickable and toggles the switch; clicking inside the actual switch only\n * toggles once. The on state draws the primary border; the switch itself carries the state.\n *\n * Use for top-of-list \"feature\" toggles where the switch needs more visual\n * weight than a `ToggleField`. For dense rows, prefer `ToggleField`.\n */\nimport { type LucideIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useCallback, useId, useMemo, useState } from 'react';\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { formLabelSizeClasses } from '../forms/form-sizing';\n\nimport { choiceCardIconClasses, choiceControlTrackClasses } from './choice-types';\nimport { Switch } from './switch';\n\nexport interface SwitchCardProps {\n\t/** Additional supporting/error descriptions associated with the editable control. */\n\t'aria-describedby'?: string;\n\t/** Card title, also the switch's accessible name. */\n\tlabel: string;\n\t/** Supporting sentence under the label. */\n\tdescription?: string;\n\t/** Short guidance below the description. */\n\thint?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Form field name, forwarded for native submits. */\n\tname?: string;\n\t/** Whether the switch is on. Controlled. */\n\tvalue?: boolean;\n\t/** Initial switch state for uncontrolled use. */\n\tdefaultValue?: boolean;\n\tonValueChange?: (checked: boolean) => void;\n\t/** Disables the switch and mutes the card. */\n\tdisabled?: boolean;\n\t/** Applies the invalid styling. */\n\tinvalid?: boolean;\n\tclassName?: string;\n}\n\nexport const SwitchCard = React.forwardRef<HTMLDivElement, SwitchCardProps>(function SwitchCard({\n\t'aria-describedby': ariaDescribedBy,\n\tlabel,\n\tdescription,\n\thint,\n\ticon: Icon,\n\tname,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tdisabled = false,\n\tinvalid,\n\tclassName,\n}: SwitchCardProps, ref) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst { defaultScale } = useDensityConfig();\n\t// The switch track is one label line tall, so the switch centres on the title's first line.\n\tconst labelLineClasses = formLabelSizeClasses[resolveComponentScale(undefined, defaultScale)];\n\tconst generatedId = useId();\n\tconst id = useMemo(() => name ?? generatedId, [name, generatedId]);\n\n\tconst hasDescription = typeof description === 'string' && description.trim() !== '';\n\tconst describedById = hasDescription ? `${id}-description` : undefined;\n\n\tconst handleToggle = useCallback(\n\t\t(newChecked: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(newChecked);\n\t\t\tonValueChange?.(newChecked);\n\t\t},\n\t\t[disabled, isControlled, onValueChange],\n\t);\n\n\tconst handleCardClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif ((e.target as HTMLElement).closest('[role=\"switch\"]')) return;\n\t\t\thandleToggle(!checked);\n\t\t},\n\t\t[checked, handleToggle],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tonClick={handleCardClick}\n\t\t\tclassName={cn('switch-card--component', \n\t\t\t\t'group relative flex items-start gap-space-lg rounded-radius border bg-card text-card-foreground p-surface transition-[background,border-color,box-shadow] duration-150',\n\t\t\t\t// Same resting, hover, selected and invalid states as the choice cards.\n\t\t\t\t'border-border',\n\t\t\t\tchecked && 'border-primary',\n\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t!disabled && 'cursor-pointer hover:border-input',\n\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!name && (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={checked ? '1' : '0'}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!Icon && (\n\t\t\t\t<span className={cn('switch-card--icon size-control', choiceCardIconClasses)}>\n\t\t\t\t\t<Icon className=\"size-icon\" />\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t\t<Label\n\t\t\t\t\thtmlFor={id}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'block text-inherit',\n\t\t\t\t\t\tdisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<Text id={describedById} size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!hint && (\n\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t{hint}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t<div className={cn('switch-card--control', choiceControlTrackClasses, labelLineClasses)}>\n\t\t\t\t<Switch\n\t\t\t\t\t// The card owns the disabled fade; the switch keeps native disabled behavior.\n\t\t\t\t\tclassName=\"data-disabled:opacity-100\"\n\t\t\t\t\tid={id}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tonValueChange={handleToggle}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\taria-label={label}\n\t\t\t\t\taria-describedby={[ariaDescribedBy, describedById].filter(Boolean).join(' ') || undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nSwitchCard.displayName = 'SwitchCard';\n","/**\n * ToggleField — inline label-and-control row for switches and checkboxes.\n *\n * Pattern: a left-aligned descriptive label/description block with the\n * control sitting on the trailing edge. Use for settings rows (e.g. \"Email\n * notifications\" + switch) where a full SwitchCard is too heavy and a bare\n * `Switch` + `<label>` is too brittle. The whole row is clickable and\n * keyboard-accessible.\n *\n * Two control kinds: `'switch'` (default) and `'checkbox'`. Both honour\n * controlled `value` / `defaultValue` / `onValueChange`. Strings are passed via\n * standard React props rather than a `strings` object — there are no\n * defaults to override.\n */\nimport type { ReactNode } from 'react';\nimport { forwardRef, useCallback, useId, useState } from 'react';\n\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { formLabelSizeClasses } from '../forms/form-sizing';\n\nimport { Checkbox } from './checkbox';\nimport { choiceControlTrackClasses } from './choice-types';\nimport { Switch } from './switch';\n\nexport type ToggleFieldKind = 'switch' | 'checkbox';\n\nexport interface ToggleFieldProps {\n\t/** Additional supporting/error descriptions associated with the editable control. */\n\t'aria-describedby'?: string;\n\t/** Control label. */\n\tlabel: ReactNode;\n\t/** Supporting sentence under the label. */\n\tdescription?: ReactNode;\n\t/** Which control renders — a switch or a checkbox. */\n\tkind?: ToggleFieldKind;\n\t/** Whether the control is on. Controlled. */\n\tvalue?: boolean;\n\t/** Initial state for uncontrolled use. */\n\tdefaultValue?: boolean;\n\tonValueChange?: (checked: boolean) => void;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n\t/** Applies the invalid styling. */\n\tinvalid?: boolean;\n\t/** Form field name, forwarded for native submits. */\n\tname?: string;\n\tclassName?: string;\n\t/** Place the control on the leading edge instead of trailing (default). */\n\tcontrolPosition?: 'leading' | 'trailing';\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const ToggleField = forwardRef<HTMLDivElement, ToggleFieldProps>(function ToggleField({\n\t'aria-describedby': ariaDescribedBy,\n\tlabel,\n\tdescription,\n\tkind = 'switch',\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tdisabled = false,\n\tinvalid = false,\n\tname,\n\tclassName,\n\tcontrolPosition = 'trailing',\n}: ToggleFieldProps, ref) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst { defaultScale } = useDensityConfig();\n\t// The control track is exactly one label line tall, so a switch or checkbox\n\t// centres on the label's first line at every scale, wrapped or not.\n\tconst controlTrackClasses = cn('toggle-field--control', choiceControlTrackClasses, formLabelSizeClasses[resolveComponentScale(undefined, defaultScale)]);\n\tconst inputId = useId();\n\tconst labelId = `${inputId}-label`;\n\tconst hasDescription = description !== null && description !== undefined && description !== false;\n\tconst descriptionId = hasDescription ? `${inputId}-description` : undefined;\n\n\tconst set = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(next);\n\t\t\tonValueChange?.(next);\n\t\t},\n\t\t[disabled, isControlled, onValueChange],\n\t);\n\n\tconst onRowClick = (e: React.MouseEvent) => {\n\t\t// Avoid double-toggle when clicking the control itself.\n\t\tconst target = e.target as HTMLElement;\n\t\tif (target.closest('[role=\"switch\"], [role=\"checkbox\"], input[type=\"checkbox\"]')) return;\n\t\tset(!checked);\n\t};\n\n\tconst Control =\n\t\tkind === 'switch' ? (\n\t\t\t<Switch\n\t\t\t\t// The row already expands the hit area; a horizontal switch hit\n\t\t\t\t// extension would overflow when this field sits at a surface edge.\n\t\t\t\tclassName=\"after:inset-x-0\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonValueChange={set}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tinvalid={invalid}\n\t\t\t\taria-labelledby={labelId}\n\t\t\t\taria-describedby={[ariaDescribedBy, descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t\t/>\n\t\t) : (\n\t\t\t<Checkbox\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={(v) => set(v === true)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\taria-labelledby={labelId}\n\t\t\t\taria-describedby={[ariaDescribedBy, descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t\t/>\n\t\t);\n\n\tconst TextBlock = (\n\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t<div id={labelId}>\n\t\t\t\t{isSimpleText(label) ? (\n\t\t\t\t\t<Label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Leading is left to `Label` so this sits on the same\n\t\t\t\t\t\t\t// baseline rhythm as the switch, checkbox, and switch-card\n\t\t\t\t\t\t\t// labels; `leading-snug` here made it the only inline\n\t\t\t\t\t\t\t// control label in the package at 19.25px.\n\t\t\t\t\t\t\t'block text-inherit data-disabled:opacity-50',\n\t\t\t\t\t\t\tdisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Label>\n\t\t\t\t) : label}\n\t\t\t</div>\n\t\t\t{hasDescription && (\n\t\t\t\t<div id={descriptionId}>\n\t\t\t\t\t{isSimpleText(description) ? (\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : description}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tref={ref}\n\t\t\tdirection=\"horizontal\"\n\t\t\talign=\"start\"\n\t\t\twrap={false}\n\t\t\tgap=\"md\"\n\t\t\trole=\"group\"\n\t\t\tonClick={onRowClick}\n\t\t\tclassName={cn('toggle-field--component rounded-radius py-row-y',\n\t\t\t\tdisabled && 'pointer-events-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{controlPosition === 'leading' && <div className={controlTrackClasses}>{Control}</div>}\n\t\t\t{TextBlock}\n\t\t\t{controlPosition === 'trailing' && <div className={controlTrackClasses}>{Control}</div>}\n\t\t</Stack>\n\t);\n});\n\nToggleField.displayName = 'ToggleField';\n","/**\n * CardCheckboxGroup — multi-select group rendered as a grid of card-shaped\n * options with title, optional description, and optional leading icon.\n * Use for a small set of feature flags / preferences where each option\n * benefits from extra context that a flat checkbox list can't carry.\n *\n * Pairs with `CardRadioGroup` (single-select). Both share spacing tokens\n * from `./choice-types` so they line up when used side-by-side.\n */\nimport { CircleCheck, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useState, useCallback, useMemo, type ReactNode } from 'react';\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { useDensityConfig, useTypographyConfig } from '../../../lib/ui-provider';\nimport { textLineHeights, textSizes } from '../../typography/text.styles';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceCardSizeTokens,\n\tchoiceCardIconClasses,\n\tchoiceCardMarkerClasses,\n\tchoiceCardMarkerSlotClasses,\n\tchoiceCardStateClasses,\n\tchoiceControlTrackClasses,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface CardCheckboxOption extends ChoiceOptionBase {\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface CardCheckboxGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: CardCheckboxOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string[];\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string[];\n\tonValueChange?: (values: string[]) => void;\n\t/** How many columns the grid uses. */\n\tcolumns?: 1 | 2 | 3 | 4;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/*\n * Container widths, not viewport widths — a choice-card group is as likely to\n * sit in a settings rail or a drawer as at page width, and keyed to the screen\n * it laid three cards across a 300px column.\n *\n * 384/576/672 puts every tier clear of the widths this actually renders at: the\n * shipped three-up group is 672px wide, so the three-column step sits 96px\n * below it rather than exactly on it, and 384 keeps the two-column step above\n * every mobile mount (316px).\n */\nconst GRID_COLS: Record<NonNullable<CardCheckboxGroupProps['columns']>, string> = {\n\t1: 'grid grid-cols-1 gap-space-md',\n\t2: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2',\n\t3: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @xl/card-checkbox-group:grid-cols-3',\n\t4: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @2xl/card-checkbox-group:grid-cols-4',\n};\n\nexport const CardCheckboxGroup = forwardRef<HTMLDivElement, CardCheckboxGroupProps>(function CardCheckboxGroup({\n\t'aria-describedby': ariaDescribedBy,\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tcolumns = 3,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: CardCheckboxGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst { defaultTextSize } = useTypographyConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t// The marker track is one line of the option label's own text role tall, so\n\t// the selected check centres on the label's first line.\n\tconst markerTrackClasses = cn('card-checkbox-group--marker', choiceControlTrackClasses, textSizes[defaultTextSize ?? 'sm'], textLineHeights.normal);\n\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<string[]>(defaultValue ?? []);\n\tconst selected = useMemo(\n\t\t() => (isControlled ? value ?? [] : internal),\n\t\t[internal, isControlled, value],\n\t);\n\tconst tokens = choiceCardSizeTokens[size];\n\n\tconst toggle = useCallback(\n\t\t(val: string) => {\n\t\t\tif (disabled) return;\n\t\t\tif (options.find((o) => o.value === val)?.disabled) return;\n\t\t\tconst exists = selected.includes(val);\n\t\t\tconst next = exists ? selected.filter((v) => v !== val) : [...selected, val];\n\t\t\tif (!isControlled) setInternal(next);\n\t\t\tonValueChange?.(next);\n\t\t},\n\t\t[disabled, options, selected, isControlled, onValueChange],\n\t);\n\n\treturn (\n\t\t/*\n\t\t * The root exists to be the query container: an element cannot match its\n\t\t * own container query, so the grid whose columns react sits inside the\n\t\t * element being measured.\n\t\t */\n\t\t<div ref={ref} className={cn('card-checkbox-group--component @container/card-checkbox-group', className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn('card-checkbox-group--grid', GRID_COLS[columns])}\n\t\t\t\trole=\"group\"\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t>\n\t\t\t\t{options.map((option) => {\n\t\t\t\t\tconst Icon = option.icon;\n\t\t\t\t\tconst optionLabel = option.label;\n\t\t\t\t\tconst isSelected = selected.includes(option.value);\n\t\t\t\t\tconst isDisabled = disabled || option.disabled;\n\t\t\t\t\tconst shouldIncludeHidden = Boolean(name) && isSelected;\n\t\t\t\t\tconst nameAttr = name ? `${name}[]` : undefined;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={option.value} className=\"relative\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\t\t\tname={nameAttr}\n\t\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\thidden\n\t\t\t\t\t\t\t\tdisabled={!shouldIncludeHidden}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={isSelected}\n\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\tonClick={() => toggle(option.value)}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tdata-selected={isSelected}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'box-border group relative flex w-full flex-col items-start text-start outline-none cursor-pointer',\n\t\t\t\t\t\t\t\t\t'rounded-radius border border-border bg-card text-card-foreground transition-[color,box-shadow,background,border-color] duration-150',\n\t\t\t\t\t\t\t\t\tchoiceCardStateClasses,\n\t\t\t\t\t\t\t\t\t'data-[selected=true]:border-primary',\n\t\t\t\t\t\t\t\t\ttokens.padding,\n\t\t\t\t\t\t\t\t\ttokens.gap,\n\t\t\t\t\t\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t<span className={cn(choiceCardIconClasses, tokens.iconBox)}>\n\t\t\t\t\t\t\t\t\t\t<Icon className={tokens.iconSize} />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<span className={cn('card-checkbox-group--body flex w-full min-w-0 items-start', tokens.gap)}>\n\t\t\t\t\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t{isSimpleText(optionLabel) ? (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t{optionLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : optionLabel}\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<span aria-hidden=\"true\" className={markerTrackClasses}>\n\t\t\t\t\t\t\t\t\t<span className={choiceCardMarkerSlotClasses}>\n\t\t\t\t\t\t\t\t\t\t<CircleCheck\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tchoiceCardMarkerClasses,\n\t\t\t\t\t\t\t\t\t\t\t\t!isSelected && 'hidden',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nCardCheckboxGroup.displayName = 'CardCheckboxGroup';\n","/**\n * CardRadioGroup — single-select radio group rendered as a grid of card-shaped\n * options with title, optional description, and optional leading icon. Built\n * on `@base-ui/react/radio` for accessibility (keyboard navigation, focus\n * management, native form participation).\n *\n * Pairs with `CardCheckboxGroup` (multi-select). Shares spacing tokens from\n * `./choice-types`.\n */\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { CircleCheck, type LucideIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { memo, useMemo, type ReactNode } from 'react';\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { useDensityConfig, useTypographyConfig } from '../../../lib/ui-provider';\nimport { textLineHeights, textSizes } from '../../typography/text.styles';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceCardSizeTokens,\n\tchoiceCardIconClasses,\n\tchoiceCardMarkerClasses,\n\tchoiceCardMarkerSlotClasses,\n\tchoiceCardStateClasses,\n\tchoiceControlTrackClasses,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface CardRadioOption extends ChoiceOptionBase {\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface CardRadioGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: CardRadioOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string;\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\t/** How many columns the grid uses. */\n\tcolumns?: 1 | 2 | 3 | 4;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/*\n * Container widths, not viewport widths — a choice-card group is as likely to\n * sit in a settings rail or a drawer as at page width, and keyed to the screen\n * it laid three cards across a 300px column.\n *\n * 384/576/672 puts every tier clear of the widths this actually renders at: the\n * shipped three-up group is 672px wide, so the three-column step sits 96px\n * below it rather than exactly on it, and 384 keeps the two-column step above\n * every mobile mount (316px).\n */\nconst GRID_COLS: Record<NonNullable<CardRadioGroupProps['columns']>, string> = {\n\t1: 'grid grid-cols-1 gap-space-md',\n\t2: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2',\n\t3: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2 @xl/card-radio-group:grid-cols-3',\n\t4: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2 @2xl/card-radio-group:grid-cols-4',\n};\n\nfunction CardRadioGroupImpl({\n\t'aria-describedby': ariaDescribedBy,\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tcolumns = 3,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: CardRadioGroupProps, ref: React.ForwardedRef<HTMLDivElement>) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst { defaultTextSize } = useTypographyConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t// The marker track is one line of the option label's own text role tall, so\n\t// the selected check centres on the label's first line.\n\tconst markerTrackClasses = cn('card-radio-group--marker', choiceControlTrackClasses, textSizes[defaultTextSize ?? 'sm'], textLineHeights.normal);\n\n\tconst tokens = choiceCardSizeTokens[size];\n\tconst gridClassName = useMemo(() => cn('card-radio-group--grid', GRID_COLS[columns]), [columns]);\n\n\treturn (\n\t\t/*\n\t\t * The root exists to be the query container: an element cannot match its\n\t\t * own container query, so the grid whose columns react sits inside the\n\t\t * element being measured.\n\t\t */\n\t\t<div ref={ref} className={cn('card-radio-group--component @container/card-radio-group', className)}>\n\t\t\t<RadioGroupPrimitive\n\t\t\t\tvalue={value}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tonValueChange={(val) => val && onValueChange?.(val)}\n\t\t\t\tname={name}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\tclassName={gridClassName}\n\t\t\t>\n\t\t\t\t{options.map((option) => {\n\t\t\t\t\tconst Icon = option.icon;\n\t\t\t\t\tconst optionLabel = option.label;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<RadioPrimitive.Root\n\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'box-border relative group flex flex-col text-start outline-none cursor-pointer',\n\t\t\t\t\t\t\t\t'rounded-radius border border-border bg-card text-card-foreground transition-[color,box-shadow,background,border-color] duration-150',\n\t\t\t\t\t\t\t\tchoiceCardStateClasses,\n\t\t\t\t\t\t\t\t'data-[checked]:border-primary',\n\t\t\t\t\t\t\t\ttokens.padding,\n\t\t\t\t\t\t\t\ttokens.gap,\n\t\t\t\t\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\t\t\t\t// The radio root is a span, so state comes from Base UI's attribute.\n\t\t\t\t\t\t\t\t'data-disabled:cursor-not-allowed data-disabled:opacity-50',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<span className={cn(choiceCardIconClasses, tokens.iconBox)}>\n\t\t\t\t\t\t\t\t\t<Icon className={tokens.iconSize} />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className={cn('card-radio-group--body flex w-full min-w-0 items-start', tokens.gap)}>\n\t\t\t\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t{isSimpleText(optionLabel) ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t{optionLabel}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : optionLabel}\n\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<span aria-hidden=\"true\" className={markerTrackClasses}>\n\t\t\t\t\t\t\t\t<span className={choiceCardMarkerSlotClasses}>\n\t\t\t\t\t\t\t\t\t<RadioPrimitive.Indicator\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t<CircleCheck className={choiceCardMarkerClasses} />\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</RadioPrimitive.Root>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RadioGroupPrimitive>\n\t\t</div>\n\t);\n}\n\nexport const CardRadioGroup = memo(React.forwardRef<HTMLDivElement, CardRadioGroupProps>(CardRadioGroupImpl));\nCardRadioGroup.displayName = 'CardRadioGroup';\n","/**\n * ListRadioGroup — single-select radio group rendered as a vertical list with\n * dividers between rows. Use when options have descriptive secondary text and\n * read better as a stack than a grid (e.g. plan tiers, role definitions).\n *\n * Pairs with `CardRadioGroup` for grid-style choices and `PillRadioGroup` for\n * inline compact toggles.\n */\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { forwardRef } from 'react';\nimport { Text } from '../../typography';\nimport { textSizes } from '../../typography/text.styles';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { useDensityConfig, useTypographyConfig } from '../../../lib/ui-provider';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceControlTrackClasses,\n\tchoiceListSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface ListRadioOption extends ChoiceOptionBase {}\n\nexport interface ListRadioGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: ListRadioOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string;\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n}\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const ListRadioGroup = forwardRef<HTMLDivElement, ListRadioGroupProps>(function ListRadioGroup({\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: ListRadioGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst { defaultTextSize } = useTypographyConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\tconst rowPadding = choiceListSizeTokens[size];\n\t// The radio track is one line of the label's own text role tall, so the\n\t// circle centres on the first line whether or not the label wraps.\n\tconst labelLineClasses = cn(textSizes[defaultTextSize ?? 'sm'], 'leading-tight');\n\treturn (\n\t\t<RadioGroupPrimitive\n\t\t\tref={ref}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tonValueChange={(val) => val && onValueChange?.(val)}\n\t\t\tname={name}\n\t\t\tdisabled={disabled}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tclassName={cn('list-radio-group--component', \n\t\t\t\t'overflow-hidden rounded-radius border border-border [&>[role=radio]~[role=radio]]:border-t [&>[role=radio]~[role=radio]]:border-border',\n\t\t\t\t// Validation marks the group frame once, never each radio; the focused\n\t\t\t\t// row's radio draws the focus frame.\n\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t// A disabled group dims once; its rows do not dim again.\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option) => (\n\t\t\t\t<RadioPrimitive.Root\n\t\t\t\t\tkey={option.value}\n\t\t\t\t\tvalue={option.value}\n\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'box-border group flex w-full items-start gap-space-lg text-start outline-none cursor-pointer',\n\t\t\t\t\t\t`transition-colors ${interactionRecipes.rowHover}`,\n\t\t\t\t\t\t'data-disabled:cursor-not-allowed',\n\t\t\t\t\t\t!disabled && 'data-disabled:opacity-50',\n\t\t\t\t\t\trowPadding,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<span aria-hidden=\"true\" className={cn('list-radio-group--track', choiceControlTrackClasses, labelLineClasses)}>\n\t\t\t\t\t\t{/* Selection reads from the radio itself: the shared control\n\t\t\t\t\t\t boundary, the primary ring and dot when checked, and the shared\n\t\t\t\t\t\t focus frame when the row has keyboard focus. */}\n\t\t\t\t\t\t<span className={cn(\n\t\t\t\t\t\t\t'list-radio-group--radio box-border flex size-4 items-center justify-center rounded-full border border-input transition-[border-color,box-shadow]',\n\t\t\t\t\t\t\t'group-data-[checked]:border-primary group-focus-visible:border-ring group-focus-visible:ring-3 group-focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t<RadioPrimitive.Indicator className=\"list-radio-group--dot size-2 rounded-full bg-primary\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<Stack gap=\"dense\" className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t{isSimpleText(option.label) ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\" lineHeight=\"tight\" className=\"block\">\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : option.label}\n\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"block\">\n\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioPrimitive.Root>\n\t\t\t))}\n\t\t</RadioGroupPrimitive>\n\t);\n});\n\nListRadioGroup.displayName = 'ListRadioGroup';\n","/**\n * PillRadioGroup — compact, inline single-select rendered as connected pill\n * buttons. Best for 2–4 options where a full `<Select>` is too heavy and\n * cards are too tall (e.g. timeframe toggles, view-mode switchers).\n *\n * Custom-styled buttons rather than the shadcn ToggleGroup primitive: the\n * primitive strips inner rounding when spacing=0, which doesn't match this\n * design system's pill connector style.\n *\n * Keyboard follows the native radio-group pattern: the group is one Tab stop\n * (the selected pill, or the first enabled one), the arrow keys move to the\n * previous/next enabled pill and select it, Home/End jump to the ends, and\n * Space/Enter select the focused pill (or clear it when `allowClear` is set).\n */\nimport * as React from 'react';\n\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { formControlSizeClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoicePillSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\n\nexport interface PillRadioGroupOption extends ChoiceOptionBase {}\n\nexport interface PillRadioGroupProps\n\textends Omit<ChoiceGroupBaseProps, 'name'> {\n\t/** Form field name, forwarded for native submits. */\n\tname: string;\n\t/** Current value. Controlled. */\n\tvalue: string | null | undefined;\n\t/** Choices offered. */\n\toptions: PillRadioGroupOption[];\n\tonValueChange: (value: string | null) => void;\n\t/** Allow deselecting (click active pill to clear). Default false. */\n\tallowClear?: boolean;\n\t/** Stretch pills to fill the container. */\n\tfullWidth?: boolean;\n\t/** Accessible name of the group when no visible label is associated with it. */\n\t'aria-label'?: string;\n\t/** Id of a visible label that names the group. */\n\t'aria-labelledby'?: string;\n}\n\nconst NEXT_KEYS = new Set(['ArrowRight', 'ArrowDown']);\nconst PREVIOUS_KEYS = new Set(['ArrowLeft', 'ArrowUp']);\n\nexport const PillRadioGroup = React.forwardRef<HTMLDivElement, PillRadioGroupProps>(function PillRadioGroup({\n\tname,\n\tvalue,\n\toptions,\n\tonValueChange,\n\tallowClear = false,\n\tsize: sizeProp,\n\tfullWidth = false,\n\tdisabled = false,\n\tinvalid = false,\n\tclassName,\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledBy,\n\t'aria-describedby': ariaDescribedBy,\n}: PillRadioGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst buttonRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n\n\tconst isEnabled = React.useCallback(\n\t\t(option: PillRadioGroupOption) => !disabled && !option.disabled,\n\t\t[disabled],\n\t);\n\tconst selectedIndex = options.findIndex((option) => option.value === value);\n\t// One Tab stop: the selected enabled pill, otherwise the first enabled one.\n\tconst tabStopIndex = selectedIndex >= 0 && isEnabled(options[selectedIndex])\n\t\t? selectedIndex\n\t\t: options.findIndex(isEnabled);\n\n\tconst handleClick = React.useCallback(\n\t\t(optionValue: string) => {\n\t\t\tif (optionValue === value) {\n\t\t\t\tif (allowClear) onValueChange(null);\n\t\t\t} else {\n\t\t\t\tonValueChange(optionValue);\n\t\t\t}\n\t\t},\n\t\t[allowClear, onValueChange, value],\n\t);\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\tconst enabled = options.map((option, index) => (isEnabled(option) ? index : -1)).filter((index) => index >= 0);\n\t\tif (!enabled.length) return;\n\t\tconst current = buttonRefs.current.findIndex((button) => button === event.target);\n\t\tif (current < 0) return;\n\t\tconst rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n\t\tconst forward = rtl ? new Set(['ArrowLeft', 'ArrowDown']) : NEXT_KEYS;\n\t\tconst backward = rtl ? new Set(['ArrowRight', 'ArrowUp']) : PREVIOUS_KEYS;\n\t\tconst position = enabled.indexOf(current);\n\t\tlet next: number | undefined;\n\t\tif (forward.has(event.key)) next = enabled[(position + 1) % enabled.length];\n\t\telse if (backward.has(event.key)) next = enabled[(position - 1 + enabled.length) % enabled.length];\n\t\telse if (event.key === 'Home') next = enabled[0];\n\t\telse if (event.key === 'End') next = enabled[enabled.length - 1];\n\t\tif (next === undefined) return;\n\t\tevent.preventDefault();\n\t\tbuttonRefs.current[next]?.focus();\n\t\t// Moving within a radio group selects, as native radios do.\n\t\tif (options[next].value !== value) onValueChange(options[next].value);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-name={name}\n\t\t\trole=\"radiogroup\"\n\t\t\taria-label={ariaLabel}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\taria-describedby={ariaDescribedBy}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\taria-disabled={disabled || undefined}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tclassName={cn('pill-radio-group--component',\n\t\t\t\t'border-input inline-flex items-center overflow-hidden rounded-inner border',\n\t\t\t\tformControlSizeClasses[size],\n\t\t\t\tfullWidth ? 'w-full' : 'w-fit self-start',\n\t\t\t\t// The group is the field frame: validation marks it once, and the\n\t\t\t\t// focused pill draws the inset focus recipe inside it.\n\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t// A disabled group dims once; its pills do not dim again.\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option, index) => {\n\t\t\t\tconst isSelected = option.value === value;\n\t\t\t\tconst Icon = option.icon;\n\t\t\t\tconst optionLabel =\n\t\t\t\t\ttypeof option.label === 'string' ? option.label : undefined;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\tref={(node) => { buttonRefs.current[index] = node; }}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\taria-checked={isSelected}\n\t\t\t\t\t\taria-label={optionLabel || option.value}\n\t\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\t\ttabIndex={index === tabStopIndex ? 0 : -1}\n\t\t\t\t\t\tonClick={() => handleClick(option.value)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'box-border inline-flex select-none items-center justify-center border-0 p-0 font-sans font-medium transition-colors',\n\t\t\t\t\t\t\t// Inset, so the frame's clipped rounded corners never cut the ring.\n\t\t\t\t\t\t\t`outline-none focus-visible:z-10 ${focusRecipes.inset}`,\n\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t!disabled && 'disabled:opacity-50',\n\t\t\t\t\t\t\tchoicePillSizeTokens[size],\n\t\t\t\t\t\t\t'h-full min-h-0',\n\t\t\t\t\t\t\tfullWidth && 'flex-1',\n\t\t\t\t\t\t\tindex > 0 && 'border-input border-s',\n\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t? 'bg-primary text-primary-foreground focus-visible:inset-ring-primary-foreground focus-visible:ring-primary-foreground/50'\n\t\t\t\t\t\t\t\t: 'bg-background text-foreground hover:bg-muted',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className={cn(size === 'sm' ? 'size-icon-sm' : 'size-icon', option.label && 'me-space-sm')} />}\n\t\t\t\t\t\t{typeof option.label === 'string' || typeof option.label === 'number' || typeof option.label === 'bigint' ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : option.label}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\nPillRadioGroup.displayName = 'PillRadioGroup';\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-l5LpDw2z.js";
4
- import { n } from "./buttons-SbIcm1HJ.js";
5
- import { s as r } from "./typography-DTRkE9zL.js";
3
+ import { t } from "./utils-BRhFDwuU.js";
4
+ import { n } from "./buttons-DPZekJFu.js";
5
+ import { c as r } from "./typography-UTnveOEy.js";
6
6
  import { n as i } from "./text.styles-g4He6UIW.js";
7
7
  import { t as a } from "./focus-recipes-B653VaLq.js";
8
- import { t as o } from "./structure-DC2dygdA.js";
9
- import { r as s } from "./tone-recipes-CPoExcTE.js";
8
+ import { t as o } from "./structure-BmisBK-3.js";
9
+ import { i as s } from "./tone-recipes-BPsRAvhu.js";
10
10
  import { a as c } from "./surface-recipes-BKRVW8Os.js";
11
- import { m as l } from "./primitives-B-CkiEMU.js";
11
+ import { m as l } from "./primitives-BFK08r9M.js";
12
12
  import { forwardRef as u, useEffect as d, useRef as f, useState as p } from "react";
13
13
  import { jsx as m, jsxs as h } from "react/jsx-runtime";
14
14
  import { Check as g, Copy as _, WrapText as v } from "lucide-react";
@@ -50,7 +50,7 @@ var b = {
50
50
  ...B,
51
51
  ref: V,
52
52
  "data-wrap": G || void 0,
53
- className: t("code-block--component group/code-block w-full min-w-0 max-w-full overflow-hidden rounded-radius bg-card text-card-foreground", c.frame.shell, z),
53
+ className: t("code-block--component group/code-block box-border w-full min-w-0 max-w-full overflow-hidden rounded-radius bg-card text-card-foreground", c.frame.shell, z),
54
54
  children: [
55
55
  !D && /* @__PURE__ */ h(o, {
56
56
  direction: "horizontal",
@@ -182,4 +182,4 @@ x.displayName = "CodeBlock";
182
182
  //#endregion
183
183
  export { b as n, x as t };
184
184
 
185
- //# sourceMappingURL=code-block-Dgbu-CU3.js.map
185
+ //# sourceMappingURL=code-block-DeneBJR_.js.map