themelia-react-ui 1.0.1 → 1.0.2

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 (488) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +59 -13
  3. package/dist/{accordion-B-5Focs8.js → accordion-BRTcsp8J.js} +8 -8
  4. package/dist/accordion-BRTcsp8J.js.map +1 -0
  5. package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
  6. package/dist/action-menu-Drxw_vJk.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
  8. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-DLVdK0Py.js} +151 -155
  10. package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-C_fKpljx.js} +11 -10
  12. package/dist/app-shell-C_fKpljx.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-DbjUWsP0.js} +12 -12
  14. package/dist/{attachment-BO2R47wn.js.map → attachment-DbjUWsP0.js.map} +1 -1
  15. package/dist/auth-CAQcasMV.js +723 -0
  16. package/dist/auth-CAQcasMV.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-Bu2HhitA.js} +6 -6
  18. package/dist/{avatar-Bpzty83c.js.map → avatar-Bu2HhitA.js.map} +1 -1
  19. package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
  20. package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +25 -27
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +150 -148
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +40 -43
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +1 -1
  51. package/dist/base/repeaters.js +33 -33
  52. package/dist/base/repeaters.js.map +1 -1
  53. package/dist/base/sheet.js +1 -1
  54. package/dist/base/sidebar.js +1 -1
  55. package/dist/base/signature-pad.js +83 -81
  56. package/dist/base/signature-pad.js.map +1 -1
  57. package/dist/base/skeleton.js +1 -1
  58. package/dist/base/spinner.js +1 -1
  59. package/dist/base/structure.js +1 -1
  60. package/dist/base/table.js +1 -1
  61. package/dist/base/text-inputs.js +2 -2
  62. package/dist/base/toaster.js +6 -6
  63. package/dist/base/toaster.js.map +1 -1
  64. package/dist/base/tree.js +1 -1
  65. package/dist/base/upload-queue.js +1 -1
  66. package/dist/base/upload.js +3 -3
  67. package/dist/base/value-inputs.js +1 -1
  68. package/dist/blocks/admin.js +134 -134
  69. package/dist/blocks/admin.js.map +1 -1
  70. package/dist/blocks/ai.js +120 -117
  71. package/dist/blocks/ai.js.map +1 -1
  72. package/dist/blocks/analytics/usage-card.js +1 -1
  73. package/dist/blocks/analytics.js +510 -472
  74. package/dist/blocks/analytics.js.map +1 -1
  75. package/dist/blocks/collaboration.js +2 -2
  76. package/dist/blocks/commerce/receipt.js +1 -1
  77. package/dist/blocks/commerce.js +395 -383
  78. package/dist/blocks/commerce.js.map +1 -1
  79. package/dist/blocks/data-display.js +1 -1
  80. package/dist/blocks/onboarding.js +6 -6
  81. package/dist/blocks/onboarding.js.map +1 -1
  82. package/dist/blocks/planning.js +36 -36
  83. package/dist/blocks/planning.js.map +1 -1
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
  86. package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
  87. package/dist/button-BZDasD04.js +651 -0
  88. package/dist/button-BZDasD04.js.map +1 -0
  89. package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
  90. package/dist/button-BZyfTvwm.js.map +1 -0
  91. package/dist/buttons-D_6KJvEE.js +99 -0
  92. package/dist/buttons-D_6KJvEE.js.map +1 -0
  93. package/dist/{cards-Cum56XOF.js → cards-qGSErLw_.js} +12 -12
  94. package/dist/{cards-Cum56XOF.js.map → cards-qGSErLw_.js.map} +1 -1
  95. package/dist/chart-Bsc5BICK.js +150 -0
  96. package/dist/chart-Bsc5BICK.js.map +1 -0
  97. package/dist/{checkbox-BavDRjF7.js → checkbox-BQNDjUCh.js} +3 -3
  98. package/dist/checkbox-BQNDjUCh.js.map +1 -0
  99. package/dist/choice-inputs-Mk3iWbhr.js +725 -0
  100. package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
  101. package/dist/{code-block-xHKbAJDj.js → code-block-DzHKRybS.js} +23 -23
  102. package/dist/code-block-DzHKRybS.js.map +1 -0
  103. package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
  104. package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
  105. package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
  106. package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
  107. package/dist/{combobox-DEbdr-3u.js → combobox-BFnbJJp3.js} +18 -18
  108. package/dist/combobox-BFnbJJp3.js.map +1 -0
  109. package/dist/{combobox-xv3yJbzl.js → combobox-hozNwUcc.js} +313 -316
  110. package/dist/combobox-hozNwUcc.js.map +1 -0
  111. package/dist/{command-C0xe7u9B.js → command-BnmSchli.js} +9 -9
  112. package/dist/command-BnmSchli.js.map +1 -0
  113. package/dist/comments-u5L0OGip.js +1156 -0
  114. package/dist/comments-u5L0OGip.js.map +1 -0
  115. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  116. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  117. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  118. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  119. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  120. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  121. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  122. package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
  123. package/dist/components/base/forms/form-field.d.ts +1 -0
  124. package/dist/components/base/forms/form-sizing.d.ts +3 -3
  125. package/dist/components/base/navigation/tabs.d.ts +3 -5
  126. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  127. package/dist/components/base/table/index.d.ts +1 -1
  128. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  129. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  130. package/dist/components/blocks/analytics/types.d.ts +1 -1
  131. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  132. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  133. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  134. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  135. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  136. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  137. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  138. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  139. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  140. package/dist/components/features/media-library/media-library.d.ts +1 -1
  141. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  142. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  143. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  144. package/dist/components/features/overlays/overlays.types.d.ts +5 -4
  145. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  146. package/dist/components/features/table/data-table.d.ts +1 -1
  147. package/dist/components/features/table/table.types.d.ts +1 -1
  148. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  149. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  150. package/dist/components/layout/page/page.d.ts +0 -1
  151. package/dist/components/layout/page/page.types.d.ts +9 -3
  152. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  153. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  154. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  155. package/dist/components/typography/heading.d.ts +5 -2
  156. package/dist/components/typography/index.d.ts +1 -1
  157. package/dist/components/typography/text.styles.d.ts +10 -0
  158. package/dist/components/ui/popover.d.ts +1 -1
  159. package/dist/components/ui/sidebar.d.ts +1 -1
  160. package/dist/components/ui/table.d.ts +2 -1
  161. package/dist/container.recipes-D9t8MHR3.js +27 -0
  162. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  163. package/dist/{containers-6s-ucRQQ.js → containers-DqB-bSYE.js} +33 -56
  164. package/dist/containers-DqB-bSYE.js.map +1 -0
  165. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  166. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  167. package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
  168. package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
  169. package/dist/{data-display-cWIRdeaf.js → data-display-Bihs9Ven.js} +545 -332
  170. package/dist/data-display-Bihs9Ven.js.map +1 -0
  171. package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
  172. package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
  173. package/dist/{date-picker-CA6ogMQB.js → date-picker-DzP5HQq7.js} +492 -472
  174. package/dist/date-picker-DzP5HQq7.js.map +1 -0
  175. package/dist/date-pickers-BpgGz7S-.js +196 -0
  176. package/dist/date-pickers-BpgGz7S-.js.map +1 -0
  177. package/dist/{display-CFM5myut.js → display-CS6Hbk18.js} +8 -8
  178. package/dist/{display-CFM5myut.js.map → display-CS6Hbk18.js.map} +1 -1
  179. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
  180. package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
  181. package/dist/features/activities.js +152 -141
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +182 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/async-preview.js +9 -9
  186. package/dist/features/async-preview.js.map +1 -1
  187. package/dist/features/combobox.js +1 -1
  188. package/dist/features/comments.js +1 -1
  189. package/dist/features/data-view.js +25 -23
  190. package/dist/features/data-view.js.map +1 -1
  191. package/dist/features/email-composer/engine.js +1 -1
  192. package/dist/features/email-composer.js +103 -104
  193. package/dist/features/email-composer.js.map +1 -1
  194. package/dist/features/event-calendar.js +375 -373
  195. package/dist/features/event-calendar.js.map +1 -1
  196. package/dist/features/filters.js +1 -1
  197. package/dist/features/global-search.js +222 -224
  198. package/dist/features/global-search.js.map +1 -1
  199. package/dist/features/kanban.js +29 -29
  200. package/dist/features/kanban.js.map +1 -1
  201. package/dist/features/map.js +59 -58
  202. package/dist/features/map.js.map +1 -1
  203. package/dist/features/media-library.js +856 -855
  204. package/dist/features/media-library.js.map +1 -1
  205. package/dist/features/mentions.js +1 -1
  206. package/dist/features/overlays.js +1 -1
  207. package/dist/features/products.js +1209 -1209
  208. package/dist/features/products.js.map +1 -1
  209. package/dist/features/questionnaire.js +52 -52
  210. package/dist/features/questionnaire.js.map +1 -1
  211. package/dist/features/resource-assignment.js +29 -31
  212. package/dist/features/resource-assignment.js.map +1 -1
  213. package/dist/features/resource.js +13 -13
  214. package/dist/features/resource.js.map +1 -1
  215. package/dist/features/rich-text-editor.js +2 -2
  216. package/dist/features/schema-form.js +82 -82
  217. package/dist/features/schema-form.js.map +1 -1
  218. package/dist/features/suggestions.js +3 -3
  219. package/dist/features/sync.js +4 -4
  220. package/dist/features/sync.js.map +1 -1
  221. package/dist/features/table.js +1 -1
  222. package/dist/features/theme-tweaker.js +456 -450
  223. package/dist/features/theme-tweaker.js.map +1 -1
  224. package/dist/{feedback-DWUkgEjR.js → feedback-CJkUAapr.js} +29 -29
  225. package/dist/feedback-CJkUAapr.js.map +1 -0
  226. package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
  227. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
  228. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
  229. package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
  230. package/dist/{filters-BhsUtsxW.js → filters-D6FF8L6s.js} +715 -720
  231. package/dist/filters-D6FF8L6s.js.map +1 -0
  232. package/dist/{form-field-Bn7ZH1rA.js → form-field-CZwrkP7m.js} +17 -9
  233. package/dist/form-field-CZwrkP7m.js.map +1 -0
  234. package/dist/{form-sizing-BWs70_a2.js → form-sizing-QP8aIRaW.js} +8 -5
  235. package/dist/form-sizing-QP8aIRaW.js.map +1 -0
  236. package/dist/{forms-B7pzS25o.js → forms-B5NCbkSC.js} +35 -35
  237. package/dist/{forms-B7pzS25o.js.map → forms-B5NCbkSC.js.map} +1 -1
  238. package/dist/forms-numeric-Crrm80Lm.js +867 -0
  239. package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
  240. package/dist/{header-C59QZyxV.js → header-kxruN3RM.js} +53 -49
  241. package/dist/header-kxruN3RM.js.map +1 -0
  242. package/dist/{hooks-CM1Vp9Pe.js → hooks-BrlnCwQd.js} +2 -2
  243. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-BrlnCwQd.js.map} +1 -1
  244. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  245. package/dist/http-CdEIHyQf.js.map +1 -0
  246. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
  247. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
  248. package/dist/index.js +2 -2
  249. package/dist/input-SX9V0AL3.js +255 -0
  250. package/dist/input-SX9V0AL3.js.map +1 -0
  251. package/dist/input-vxcaNCYC.js +20 -0
  252. package/dist/input-vxcaNCYC.js.map +1 -0
  253. package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
  254. package/dist/item-DE4YnuJx.js.map +1 -0
  255. package/dist/layout/app-shell.js +1 -1
  256. package/dist/layout/auth.js +1 -1
  257. package/dist/layout/containers.js +1 -1
  258. package/dist/layout/header.js +1 -1
  259. package/dist/layout/hooks.js +1 -1
  260. package/dist/layout/navigation.js +1 -1
  261. package/dist/layout/page.js +1 -1
  262. package/dist/layout/settings.js +1 -1
  263. package/dist/layout/sidebar.js +2 -2
  264. package/dist/layout/workspace.js +1 -1
  265. package/dist/layout.js +10 -10
  266. package/dist/lib/affordance-geometry.generated.d.ts +40 -9
  267. package/dist/lib/control-group-recipes.d.ts +22 -0
  268. package/dist/lib/field-affordance-recipes.d.ts +35 -2
  269. package/dist/lib/field-state-recipes.d.ts +2 -2
  270. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  271. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  272. package/dist/lib/surface-recipes.d.ts +5 -2
  273. package/dist/lib/token-merge.generated.d.ts +144 -2
  274. package/dist/lib/ui-provider/types.d.ts +4 -2
  275. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  276. package/dist/lib/utils.js +1 -1
  277. package/dist/{media-gallery-DhDRgnVZ.js → media-gallery-DLp3HAz0.js} +75 -74
  278. package/dist/media-gallery-DLp3HAz0.js.map +1 -0
  279. package/dist/{mentions-B8Ko-fhS.js → mentions-Cl0Kt_Pd.js} +52 -50
  280. package/dist/{mentions-B8Ko-fhS.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
  281. package/dist/message-SZUNB1eX.js +127 -0
  282. package/dist/message-SZUNB1eX.js.map +1 -0
  283. package/dist/{navigation-DBEu4POU.js → navigation-DnQSNMT0.js} +64 -55
  284. package/dist/navigation-DnQSNMT0.js.map +1 -0
  285. package/dist/{navigation-BUIn2Qxx.js → navigation-DyytsLRB.js} +37 -37
  286. package/dist/navigation-DyytsLRB.js.map +1 -0
  287. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
  288. package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
  289. package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
  290. package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
  291. package/dist/overlays-DUbs1KEi.js +1011 -0
  292. package/dist/overlays-DUbs1KEi.js.map +1 -0
  293. package/dist/{page-BV6ioQg3.js → page-hGmT4nWK.js} +75 -64
  294. package/dist/page-hGmT4nWK.js.map +1 -0
  295. package/dist/{page-header-DQRa0jug.js → page-header-D8nERkn5.js} +9 -9
  296. package/dist/page-header-D8nERkn5.js.map +1 -0
  297. package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
  298. package/dist/pagination-NLGqRirf.js.map +1 -0
  299. package/dist/{popover-CoLDEg19.js → popover-CghIYdQf.js} +23 -22
  300. package/dist/popover-CghIYdQf.js.map +1 -0
  301. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-B4PoWhRl.js} +6 -6
  302. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
  303. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
  304. package/dist/popover.recipes-QlD4JenO.js.map +1 -0
  305. package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
  306. package/dist/primitives-C7ff0QaI.js.map +1 -0
  307. package/dist/primitives.js +3 -3
  308. package/dist/{progress-BOe8l_FZ.js → progress-BroqrAyV.js} +10 -9
  309. package/dist/progress-BroqrAyV.js.map +1 -0
  310. package/dist/{receipt-BM8xsGFy.js → receipt-BuJynLgf.js} +8 -8
  311. package/dist/{receipt-BM8xsGFy.js.map → receipt-BuJynLgf.js.map} +1 -1
  312. package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
  313. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
  314. package/dist/rich-text-editor-BKyG7rWz.js +574 -0
  315. package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
  316. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
  317. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
  318. package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
  319. package/dist/scroll-area-D-pIhEKl.js.map +1 -0
  320. package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
  321. package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
  322. package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
  323. package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
  324. package/dist/services/actions.js +1 -1
  325. package/dist/{settings-BnCyyPOJ.js → settings-DOTOzeZ2.js} +10 -9
  326. package/dist/{settings-BnCyyPOJ.js.map → settings-DOTOzeZ2.js.map} +1 -1
  327. package/dist/{sheet-B-q914Ad.js → sheet-BFhrNehm.js} +11 -11
  328. package/dist/sheet-BFhrNehm.js.map +1 -0
  329. package/dist/{sidebar-DPR7fmqN.js → sidebar-CyR4XKwR.js} +219 -200
  330. package/dist/sidebar-CyR4XKwR.js.map +1 -0
  331. package/dist/{sidebar-C_2p3Tfj.js → sidebar-SvGJ0Zwi.js} +63 -58
  332. package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
  333. package/dist/{skeleton-CmT1ppqb.js → skeleton-3F0uhYn3.js} +4 -4
  334. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-3F0uhYn3.js.map} +1 -1
  335. package/dist/{smart-card-CYLn46e6.js → smart-card-DjGVV2xr.js} +171 -165
  336. package/dist/smart-card-DjGVV2xr.js.map +1 -0
  337. package/dist/{spinner-BY9HbUEh.js → spinner-Cpf7oRkF.js} +5 -5
  338. package/dist/{spinner-BY9HbUEh.js.map → spinner-Cpf7oRkF.js.map} +1 -1
  339. package/dist/{structure-MvKVq-oL.js → structure-CRdqVawd.js} +2 -2
  340. package/dist/{structure-MvKVq-oL.js.map → structure-CRdqVawd.js.map} +1 -1
  341. package/dist/style.css +1 -1
  342. package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
  343. package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
  344. package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
  345. package/dist/table-CLtJTxoR.js.map +1 -0
  346. package/dist/table-CcRDZiLP.js +1444 -0
  347. package/dist/table-CcRDZiLP.js.map +1 -0
  348. package/dist/tabs-BNgu7g0u.js +188 -0
  349. package/dist/tabs-BNgu7g0u.js.map +1 -0
  350. package/dist/text-inputs-DsR56TR-.js +330 -0
  351. package/dist/text-inputs-DsR56TR-.js.map +1 -0
  352. package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
  353. package/dist/text.styles-Q4sGAIgA.js.map +1 -0
  354. package/dist/theme.css +77 -115
  355. package/dist/{timelines-B9ICkQcV.js → timelines-D1pkt3se.js} +84 -78
  356. package/dist/timelines-D1pkt3se.js.map +1 -0
  357. package/dist/{tree-BdWSaoFT.js → tree-BtmYyMZV.js} +8 -8
  358. package/dist/{tree-BdWSaoFT.js.map → tree-BtmYyMZV.js.map} +1 -1
  359. package/dist/typography/rich-text.js +1 -1
  360. package/dist/typography-BxQgiZyw.js +96 -0
  361. package/dist/typography-BxQgiZyw.js.map +1 -0
  362. package/dist/typography.js +1 -1
  363. package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
  364. package/dist/ui-provider-DRPn3qNl.js.map +1 -0
  365. package/dist/ui-provider.js +1 -1
  366. package/dist/{upload-D8Za5x_c.js → upload-CDbYw1WN.js} +326 -323
  367. package/dist/upload-CDbYw1WN.js.map +1 -0
  368. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-CNd_hH_a.js} +25 -25
  369. package/dist/upload-queue-CNd_hH_a.js.map +1 -0
  370. package/dist/{usage-card-DnmnJ58D.js → usage-card-VyJLUwRr.js} +53 -54
  371. package/dist/usage-card-VyJLUwRr.js.map +1 -0
  372. package/dist/utils-BvH9PSmq.js +4275 -0
  373. package/dist/utils-BvH9PSmq.js.map +1 -0
  374. package/dist/value-inputs-D0KCrfVC.js +840 -0
  375. package/dist/value-inputs-D0KCrfVC.js.map +1 -0
  376. package/dist/{workspace-C1PZmk8L.js → workspace-CcR8r-Nt.js} +115 -122
  377. package/dist/workspace-CcR8r-Nt.js.map +1 -0
  378. package/docs/consumer-skill/SKILL.md +110 -119
  379. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  380. package/docs/consumer-skill/examples/app-layout.tsx +42 -12
  381. package/docs/consumer-skill/examples/detail.tsx +20 -4
  382. package/docs/consumer-skill/examples/manifest.json +13 -1
  383. package/docs/consumer-skill/examples/website.tsx +56 -0
  384. package/docs/consumer-skill/references/analytics.md +70 -0
  385. package/docs/consumer-skill/references/composition.md +116 -2
  386. package/docs/consumer-skill/references/design-contract.md +33 -7
  387. package/docs/consumer-skill/references/discovery.md +76 -5
  388. package/docs/consumer-skill/references/integration.md +14 -0
  389. package/docs/consumer-skill/references/public-api.json +2023 -218
  390. package/docs/consumer-skill/references/review.md +55 -3
  391. package/docs/consumer-skill/references/theming.md +52 -7
  392. package/docs/consumer-skill/references/tokens.json +177 -9
  393. package/docs/consumer-skill/references/workflows.md +32 -0
  394. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  395. package/docs/consumer-skill/scripts/composition-policy.mjs +179 -17
  396. package/docs/consumer-skill/scripts/discovery.mjs +61 -9
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  398. package/package.json +7 -4
  399. package/dist/accordion-B-5Focs8.js.map +0 -1
  400. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  401. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  402. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  403. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  404. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  405. package/dist/auth-OFwWSAap.js +0 -704
  406. package/dist/auth-OFwWSAap.js.map +0 -1
  407. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  408. package/dist/button-BS6l5JUw.js.map +0 -1
  409. package/dist/buttons-Co6GavvM.js +0 -674
  410. package/dist/buttons-Co6GavvM.js.map +0 -1
  411. package/dist/chart-DVfcwQu6.js +0 -149
  412. package/dist/chart-DVfcwQu6.js.map +0 -1
  413. package/dist/checkbox-BavDRjF7.js.map +0 -1
  414. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  415. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  416. package/dist/code-block-xHKbAJDj.js.map +0 -1
  417. package/dist/combobox-DEbdr-3u.js.map +0 -1
  418. package/dist/combobox-xv3yJbzl.js.map +0 -1
  419. package/dist/command-C0xe7u9B.js.map +0 -1
  420. package/dist/comments-DviPLnwy.js +0 -1132
  421. package/dist/comments-DviPLnwy.js.map +0 -1
  422. package/dist/containers-6s-ucRQQ.js.map +0 -1
  423. package/dist/data-display-cWIRdeaf.js.map +0 -1
  424. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  425. package/dist/date-pickers-BPIKLdsD.js +0 -224
  426. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  427. package/dist/feedback-DWUkgEjR.js.map +0 -1
  428. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  429. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  430. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  431. package/dist/filters-BhsUtsxW.js.map +0 -1
  432. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  433. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  434. package/dist/forms-numeric-BUBxELBv.js +0 -867
  435. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  436. package/dist/header-C59QZyxV.js.map +0 -1
  437. package/dist/http-CLTVJc5I.js.map +0 -1
  438. package/dist/input-WwYQZJzG.js +0 -202
  439. package/dist/input-WwYQZJzG.js.map +0 -1
  440. package/dist/input-ci9fIgFH.js +0 -20
  441. package/dist/input-ci9fIgFH.js.map +0 -1
  442. package/dist/item-pJ0GsOiJ.js.map +0 -1
  443. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  444. package/dist/message-COsdEvXT.js +0 -108
  445. package/dist/message-COsdEvXT.js.map +0 -1
  446. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  447. package/dist/navigation-DBEu4POU.js.map +0 -1
  448. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  449. package/dist/overlays-B11wZka6.js +0 -982
  450. package/dist/overlays-B11wZka6.js.map +0 -1
  451. package/dist/page-BV6ioQg3.js.map +0 -1
  452. package/dist/page-header-DQRa0jug.js.map +0 -1
  453. package/dist/pagination-C29vvt3I.js.map +0 -1
  454. package/dist/popover-CoLDEg19.js.map +0 -1
  455. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  456. package/dist/primitives-DKPOGVpj.js.map +0 -1
  457. package/dist/progress-BOe8l_FZ.js.map +0 -1
  458. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  459. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  460. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  461. package/dist/scroll-area-BheMQ270.js.map +0 -1
  462. package/dist/select-B2mb-qN2.js +0 -108
  463. package/dist/select-B2mb-qN2.js.map +0 -1
  464. package/dist/sheet-B-q914Ad.js.map +0 -1
  465. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  466. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  467. package/dist/smart-card-CYLn46e6.js.map +0 -1
  468. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  469. package/dist/table-BS39xnlq.js +0 -1424
  470. package/dist/table-BS39xnlq.js.map +0 -1
  471. package/dist/table-DnlAJ-xR.js.map +0 -1
  472. package/dist/tabs-B5cNMWiP.js +0 -187
  473. package/dist/tabs-B5cNMWiP.js.map +0 -1
  474. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  475. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  476. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  477. package/dist/timelines-B9ICkQcV.js.map +0 -1
  478. package/dist/typography-Cv8MT-82.js +0 -96
  479. package/dist/typography-Cv8MT-82.js.map +0 -1
  480. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  481. package/dist/upload-D8Za5x_c.js.map +0 -1
  482. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  483. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  484. package/dist/utils-C2EKeIw3.js +0 -72
  485. package/dist/utils-C2EKeIw3.js.map +0 -1
  486. package/dist/value-inputs-DX2dbxjj.js +0 -824
  487. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  488. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs-B5cNMWiP.js","names":["Tabs","TabsPrimitive","TabsList","TabsTrigger","TabsContent","Tabs","PrimitiveTabs","PrimitiveTabsList","PrimitiveTabsTrigger","PrimitiveTabsContent","Text","Stack","ScrollArea","defaultTabsScrollStrings","TabScrollViewport","stringsProp","strings","useStrings","frameRef","useRef","viewportRef","edges","setEdges","useState","viewport","measure","maximum","offset","available","next","current","reveal","selected","bounds","item","resize","selection","scroll","rtl","reduce","direction","Button","ChevronLeft","ChevronRight","Tabs$2","props","Tabs","orientation","cn","className","tabsListVariants","cva","TabsList$1","variant","TabsTrigger$1","TabsContent$1","isSimpleText","value","Tabs$1","TabsList","list","scrollable","scrollStrings","TabsTrigger","children","TabsContent"],"sources":["../src/components/base/navigation/tab-scroll-viewport.tsx","../src/components/ui/tabs.tsx","../src/components/base/navigation/tabs.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useLayoutEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '../buttons';\nimport { ScrollArea } from '../display/scroll-area';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\n\nexport interface TabsScrollStrings {\n\tprevious: string;\n\tnext: string;\n}\n\nexport const defaultTabsScrollStrings: TabsScrollStrings = {\n\tprevious: 'Previous tabs',\n\tnext: 'Next tabs',\n};\n\n/** Shared scroll mechanics for state tabs and route tabs; selection stays with each owner. */\nexport function TabScrollViewport({ children, strings: stringsProp }: {\n\tchildren: ReactNode;\n\tstrings?: StringsProp<TabsScrollStrings>;\n}) {\n\tconst strings = useStrings(defaultTabsScrollStrings, stringsProp);\n\tconst frameRef = useRef<HTMLDivElement>(null);\n\tconst viewportRef = useRef<HTMLDivElement>(null);\n\tconst [edges, setEdges] = useState({ overflow: false, start: true, end: true });\n\n\tuseLayoutEffect(() => {\n\t\tconst viewport = viewportRef.current;\n\t\tif (!viewport) return;\n\t\tconst measure = () => {\n\t\t\tconst maximum = viewport.scrollWidth - viewport.clientWidth;\n\t\t\tconst offset = Math.abs(viewport.scrollLeft);\n\t\t\t// Measure the full row so visible arrows cannot keep themselves alive after a resize.\n\t\t\tconst available = frameRef.current?.clientWidth || viewport.clientWidth;\n\t\t\tconst next = { overflow: viewport.scrollWidth > available + 1, start: offset <= 1, end: offset >= maximum - 1 };\n\t\t\tsetEdges(current => current.overflow === next.overflow && current.start === next.start && current.end === next.end ? current : next);\n\t\t};\n\t\tconst reveal = () => {\n\t\t\tconst selected = viewport.querySelector<HTMLElement>('[aria-selected=\"true\"], [aria-current=\"page\"]');\n\t\t\tif (selected) {\n\t\t\t\tconst bounds = viewport.getBoundingClientRect();\n\t\t\t\tconst item = selected.getBoundingClientRect();\n\t\t\t\tif (item.left < bounds.left) viewport.scrollLeft += item.left - bounds.left;\n\t\t\t\telse if (item.right > bounds.right) viewport.scrollLeft += item.right - bounds.right;\n\t\t\t}\n\t\t\tmeasure();\n\t\t};\n\t\tmeasure();\n\t\tviewport.addEventListener('scroll', measure, { passive: true });\n\t\tconst resize = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(reveal);\n\t\tresize?.observe(viewport);\n\t\tif (frameRef.current) resize?.observe(frameRef.current);\n\t\tif (viewport.firstElementChild) resize?.observe(viewport.firstElementChild);\n\t\tconst selection = new MutationObserver(reveal);\n\t\tselection.observe(viewport, { subtree: true, attributes: true, attributeFilter: ['aria-selected', 'aria-current'] });\n\t\treveal();\n\t\treturn () => { viewport.removeEventListener('scroll', measure); resize?.disconnect(); selection.disconnect(); };\n\t}, []);\n\n\tconst scroll = (direction: number) => {\n\t\tconst viewport = viewportRef.current;\n\t\tif (!viewport) return;\n\t\tconst rtl = getComputedStyle(viewport).direction === 'rtl';\n\t\tconst reduce = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\t\tviewport.scrollBy({ left: direction * (rtl ? -1 : 1) * viewport.clientWidth * 0.75, behavior: reduce ? 'instant' : 'smooth' });\n\t};\n\n\treturn <Stack ref={frameRef} direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false} className=\"tab-scroll--component w-full min-w-0\">\n\t\t{edges.overflow && <Button size=\"sm\" iconOnly icon={ChevronLeft} tone=\"secondary\" buttonStyle=\"ghost\" aria-label={strings.previous} disabled={edges.start} onClick={() => scroll(-1)} className=\"shrink-0 rtl:[&_svg]:rotate-180\" />}\n\t\t<ScrollArea orientation=\"horizontal\" viewportRef={viewportRef} className=\"min-w-0 flex-1\" viewportClassName=\"px-space-xs pt-space-xs pb-space-xl\">{children}</ScrollArea>\n\t\t{edges.overflow && <Button size=\"sm\" iconOnly icon={ChevronRight} tone=\"secondary\" buttonStyle=\"ghost\" aria-label={strings.next} disabled={edges.end} onClick={() => scroll(1)} className=\"shrink-0 rtl:[&_svg]:rotate-180\" />}\n\t</Stack>;\n}\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"gap-2 group/tabs flex data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background data-active:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"text-sm flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","/**\n * Typography- and token-aware wrappers around the internal shadcn tabs parts.\n *\n * The shadcn source is left untouched, so its literal `gap-1.5 rounded-md px-2\n * py-1` reached consumers unchanged and opted tabs out of scoped `--space-scale`\n * and `--radius` overrides — the only interactive family in the package that\n * did. These wrappers restate the same values as tokens; `cn` merges them last,\n * so they win. Every value below is pixel-identical to the primitive's default.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tTabs as PrimitiveTabs,\n\tTabsContent as PrimitiveTabsContent,\n\tTabsList as PrimitiveTabsList,\n\tTabsTrigger as PrimitiveTabsTrigger,\n} from '../../ui/tabs';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport type { StringsProp } from '../../../lib/strings';\nimport { TabScrollViewport, type TabsScrollStrings } from './tab-scroll-viewport';\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function Tabs({ className, ...props }: ComponentProps<typeof PrimitiveTabs>) {\n\treturn <PrimitiveTabs className={cn('tabs--component', className)} {...props} />;\n}\n\nexport type TabsListProps = ComponentProps<typeof PrimitiveTabsList> & {\n\t/** Adds previous/next controls when the tab list exceeds its container. */\n\tscrollable?: boolean;\n\t/** Accessible labels for the previous/next scroll controls. */\n\tscrollStrings?: StringsProp<TabsScrollStrings>;\n};\n\nexport function TabsList({ className, scrollable = false, scrollStrings, ...props }: TabsListProps) {\n\tconst list = (\n\t\t<PrimitiveTabsList\n\t\t\tclassName={cn('tabs-list--component', 'rounded-radius', scrollable && 'w-max', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n\treturn scrollable ? <TabScrollViewport strings={scrollStrings}>{list}</TabScrollViewport> : list;\n}\n\nexport function TabsTrigger({ className, children, ...props }: ComponentProps<typeof PrimitiveTabsTrigger>) {\n\treturn (\n\t\t<PrimitiveTabsTrigger\n\t\t\tclassName={cn(\n\t\t\t\t'tabs-trigger--component',\n\t\t\t\t'gap-space-sm rounded-radius px-space-md py-space-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</PrimitiveTabsTrigger>\n\t);\n}\n\nexport function TabsContent({ className, children, ...props }: ComponentProps<typeof PrimitiveTabsContent>) {\n\treturn (\n\t\t<PrimitiveTabsContent className={cn('tabs-content--component', className)} {...props}>\n\t\t\t{isSimpleText(children) ? <Text>{children}</Text> : children}\n\t\t</PrimitiveTabsContent>\n\t);\n}\n"],"mappings":"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"}
@@ -1,331 +0,0 @@
1
- "use client";
2
- import { s as e } from "./ui-provider-CftIB6TY.js";
3
- import { useStrings as t } from "./lib/strings.js";
4
- import { t as n } from "./utils-C2EKeIw3.js";
5
- import { n as r } from "./buttons-Co6GavvM.js";
6
- import { a as i } from "./typography-Cv8MT-82.js";
7
- import { t as a } from "./field-state-recipes-CBTRt9Bt.js";
8
- import { t as o } from "./field-affordance-recipes-IjzPrCTw.js";
9
- import { t as s } from "./editable-text-recipe-Bkm6wKHp.js";
10
- import { f as c, l, p as u } from "./form-sizing-BWs70_a2.js";
11
- import { r as d, t as f } from "./input-WwYQZJzG.js";
12
- import { t as p } from "./input-ci9fIgFH.js";
13
- import * as m from "react";
14
- import { useCallback as h, useEffect as g, useRef as _ } from "react";
15
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
16
- import { CircleXIcon as b, Eye as x, EyeOff as S, Loader2Icon as C } from "lucide-react";
17
- import { cva as w } from "class-variance-authority";
18
- //#region src/components/base/text-inputs/textarea.tsx
19
- var T = { clear: "Clear textarea" }, E = m.forwardRef(({ className: r, maxLength: l, showCharacterCount: f, clearable: p, onClear: m, loading: x = !1, invalid: S, size: w, autoResize: E = !1, minRows: D = 2, maxRows: O, onChange: k, value: A, defaultValue: j, id: M, strings: N, ...P }, F) => {
20
- let I = _(null), L = t(T, N), { defaultScale: R } = e(), z = u(w, R), { id: B, value: V, isReactHookForm: H, characterCount: U, hasCharacterLimit: W, showCount: G, hasValue: K, updateValue: q, clearValue: J, wouldExceedLimit: Y } = d({
21
- controlledValue: A,
22
- defaultValue: j,
23
- maxLength: l,
24
- showCharacterCount: f,
25
- providedId: M,
26
- idPrefix: "textarea",
27
- hasOnChange: k !== void 0
28
- }), X = !!S, Z = h(() => {
29
- if (!E || !I.current) return;
30
- let e = I.current, t = getComputedStyle(e), n = Number.parseFloat(t.lineHeight) || 20, r = (Number.parseFloat(t.paddingTop) || 0) + (Number.parseFloat(t.paddingBottom) || 0), i = t.boxSizing === "border-box" ? (Number.parseFloat(t.borderTopWidth) || 0) + (Number.parseFloat(t.borderBottomWidth) || 0) : 0;
31
- e.style.height = "auto";
32
- let a = n * D + r + i, o = O ? n * O + r + i : Infinity, s = Math.min(Math.max(e.scrollHeight + i, a), o);
33
- e.style.height = `${s}px`;
34
- }, [
35
- E,
36
- O,
37
- D
38
- ]);
39
- g(() => {
40
- Z();
41
- }, [
42
- V,
43
- P.placeholder,
44
- E,
45
- Z
46
- ]), g(() => {
47
- let e = I.current;
48
- if (!E || !e || typeof ResizeObserver > "u") return;
49
- let t = "", n = new ResizeObserver(() => {
50
- let n = getComputedStyle(e), r = `${e.clientWidth}:${n.fontSize}:${n.lineHeight}`;
51
- r !== t && (t = r, Z());
52
- });
53
- return n.observe(e), () => n.disconnect();
54
- }, [E, Z]);
55
- let Q = h((e) => {
56
- let t = e.target.value;
57
- Y(t) || (q(t), k?.(e), E && setTimeout(Z, 0));
58
- }, [
59
- k,
60
- q,
61
- Y,
62
- E,
63
- Z
64
- ]), ee = h(() => {
65
- J(), k?.({
66
- target: { value: "" },
67
- currentTarget: { value: "" }
68
- }), m?.(), I.current?.focus(), E && setTimeout(Z, 0);
69
- }, [
70
- J,
71
- k,
72
- m,
73
- E,
74
- Z
75
- ]), $ = p && K && !x;
76
- return /* @__PURE__ */ y("div", {
77
- className: n("textarea--component", "relative w-full"),
78
- children: [
79
- /* @__PURE__ */ v("textarea", {
80
- ref: (e) => {
81
- typeof F == "function" ? F(e) : F && (F.current = e), I.current = e;
82
- },
83
- id: B,
84
- ...!H && { value: V },
85
- onChange: Q,
86
- maxLength: l,
87
- "aria-invalid": X || void 0,
88
- disabled: P.disabled || x,
89
- rows: D,
90
- style: {
91
- resize: E ? "none" : P.style?.resize,
92
- overflow: E && O ? "auto" : "visible",
93
- ...P.style
94
- },
95
- className: n("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground", "border-input box-border flex w-full rounded-radius border bg-transparent px-control py-control-y-offset", "transition-[color,box-shadow] outline-none", "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", c[z], s[z], a.focus, a.invalid, $ && o.clearPadding.md, G && "pb-control-addon", r),
96
- ...P
97
- }),
98
- !!G && /* @__PURE__ */ v("div", {
99
- className: n("pointer-events-none absolute bottom-control-y-offset end-[calc(var(--control-x)*var(--space-scale))] text-xs tabular-nums", P.disabled && "opacity-50", X ? "text-destructive" : "text-muted-foreground"),
100
- "aria-live": "polite",
101
- role: "status",
102
- children: /* @__PURE__ */ y(i, {
103
- tag: "span",
104
- size: "xs",
105
- type: X ? "error" : "secondary",
106
- children: [U, W ? `/${l}` : ""]
107
- })
108
- }),
109
- !!x && !G && /* @__PURE__ */ v("div", {
110
- className: n("pointer-events-none absolute top-control-y-offset end-[calc(var(--control-x)*var(--space-scale))]", X ? "text-destructive" : "text-muted-foreground/80"),
111
- children: /* @__PURE__ */ v(C, {
112
- className: "size-icon animate-spin",
113
- "aria-hidden": "true"
114
- })
115
- }),
116
- !!$ && !G && /* @__PURE__ */ v("button", {
117
- type: "button",
118
- className: n(o.target, o.focus, o.clear, "absolute top-control-y-offset", o.clearEnd.md),
119
- "aria-label": L.clear,
120
- onClick: ee,
121
- disabled: P.disabled || x,
122
- children: /* @__PURE__ */ v(b, {
123
- className: o.icon,
124
- "aria-hidden": "true"
125
- })
126
- })
127
- ]
128
- });
129
- });
130
- E.displayName = "Textarea";
131
- //#endregion
132
- //#region src/components/ui/textarea.tsx
133
- function D({ className: e, ...t }) {
134
- return /* @__PURE__ */ v("textarea", {
135
- "data-slot": "textarea",
136
- className: n("border-input rounded-radius border bg-transparent px-control py-space-md shadow-none transition-[color,box-shadow] placeholder:text-muted-foreground flex field-sizing-content min-h-textarea w-full outline-none disabled:cursor-not-allowed disabled:opacity-50", s.md, a.focus, a.invalid, e),
137
- ...t
138
- });
139
- }
140
- //#endregion
141
- //#region src/components/ui/input-group.tsx
142
- function O({ className: e, ...t }) {
143
- return /* @__PURE__ */ v("div", {
144
- "data-slot": "input-group",
145
- role: "group",
146
- className: n("border-input h-control rounded-radius border shadow-none transition-[color,box-shadow] has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm [[data-slot=combobox-content]_&]:focus-within:border-inherit [[data-slot=combobox-content]_&]:focus-within:ring-0 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto", a.groupFocus, a.groupInvalid, e),
147
- ...t
148
- });
149
- }
150
- var k = w("text-muted-foreground h-auto gap-space-md py-space-sm text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-inner [&>svg:not([class*='size-'])]:size-icon flex cursor-text items-center justify-center select-none", {
151
- variants: { align: {
152
- "inline-start": "ps-control has-[>button]:-ms-space-xs has-[>kbd]:-ms-space-2xs order-first",
153
- "inline-end": "pe-control has-[>button]:-me-space-xs has-[>kbd]:-me-space-2xs order-last",
154
- "block-start": "px-control pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md order-first w-full justify-start",
155
- "block-end": "px-control pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md order-last w-full justify-start"
156
- } },
157
- defaultVariants: { align: "inline-start" }
158
- });
159
- function A({ className: e, align: t = "inline-start", ...r }) {
160
- return /* @__PURE__ */ v("div", {
161
- role: "group",
162
- "data-slot": "input-group-addon",
163
- "data-align": t,
164
- className: n(k({ align: t }), e),
165
- onClick: (e) => {
166
- e.target.closest("button") || e.currentTarget.parentElement?.querySelector("input")?.focus();
167
- },
168
- ...r
169
- });
170
- }
171
- w("gap-2 text-sm shadow-none flex items-center", {
172
- variants: { size: {
173
- xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
174
- sm: "",
175
- "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
176
- "icon-sm": "size-8 p-0 has-[>svg]:p-0"
177
- } },
178
- defaultVariants: { size: "xs" }
179
- });
180
- function j({ className: e, ...t }) {
181
- return /* @__PURE__ */ v("span", {
182
- className: n("text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none", e),
183
- ...t
184
- });
185
- }
186
- function M({ className: e, ...t }) {
187
- return /* @__PURE__ */ v(p, {
188
- "data-slot": "input-group-control",
189
- className: n("rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1", e),
190
- ...t
191
- });
192
- }
193
- function N({ className: e, ...t }) {
194
- return /* @__PURE__ */ v(D, {
195
- "data-slot": "input-group-control",
196
- className: n("rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1 resize-none", e),
197
- ...t
198
- });
199
- }
200
- //#endregion
201
- //#region src/components/base/text-inputs/input-group.tsx
202
- function P({ className: e, ...t }) {
203
- return /* @__PURE__ */ v(O, {
204
- className: n("input-group--component box-border h-control rounded-radius font-sans text-foreground shadow-none", "has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg", "has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm", e),
205
- ...t
206
- });
207
- }
208
- var F = {
209
- "inline-start": "h-full ps-control py-0",
210
- "inline-end": "h-full pe-control py-0",
211
- "block-start": "px-control pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md",
212
- "block-end": "px-control pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md"
213
- };
214
- function I({ className: e, align: t = "inline-start", ...r }) {
215
- return /* @__PURE__ */ v(A, {
216
- align: t,
217
- className: n("input-group-addon--component box-border gap-space-md py-space-sm [&>svg:not([class*='size-'])]:size-icon", F[t ?? "inline-start"], e),
218
- ...r
219
- });
220
- }
221
- function L({ className: e, tone: t = "secondary", buttonStyle: i = "ghost", ...a }) {
222
- return /* @__PURE__ */ v(r, {
223
- tone: t,
224
- buttonStyle: i,
225
- className: n("input-group-button--component max-h-full shadow-none", e),
226
- ...a
227
- });
228
- }
229
- function R(e) {
230
- return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
231
- }
232
- function z({ children: e, className: t, ...r }) {
233
- return /* @__PURE__ */ v(j, {
234
- className: n("input-group-text--component gap-space-md [&_svg:not([class*='size-'])]:size-icon", t),
235
- ...r,
236
- children: R(e) ? /* @__PURE__ */ v(i, {
237
- tag: "span",
238
- size: "inherit",
239
- lineHeight: "tight",
240
- className: "text-inherit",
241
- children: e
242
- }) : e
243
- });
244
- }
245
- function B({ className: e, ...t }) {
246
- return /* @__PURE__ */ v(M, {
247
- className: n("input-group-input--component box-border h-control max-h-full min-h-0 font-sans text-foreground", l.md, e),
248
- ...t
249
- });
250
- }
251
- function V({ className: e, ...t }) {
252
- return /* @__PURE__ */ v(N, {
253
- className: n("input-group-textarea--component box-border min-h-textarea px-control py-space-md font-sans text-foreground", e),
254
- ...t
255
- });
256
- }
257
- //#endregion
258
- //#region src/components/base/text-inputs/password-input.tsx
259
- var H = {
260
- showPassword: "Show password",
261
- hidePassword: "Hide password"
262
- }, U = m.forwardRef(function({ visible: e, defaultVisible: r = !1, onVisibleChange: i, revealable: a = !0, wrapperClassName: o, visibilityButtonClassName: s, className: c, disabled: l, loading: u, inputStrings: d, strings: p, ...h }, g) {
263
- let _ = t(H, p), [b, C] = m.useState(r), w = e !== void 0, T = w ? e : b, E = l || u, D = m.useCallback(() => {
264
- let e = !T;
265
- w || C(e), i?.(e);
266
- }, [
267
- w,
268
- T,
269
- i
270
- ]);
271
- return /* @__PURE__ */ y("div", {
272
- className: n("password-input--component", "relative", o),
273
- children: [/* @__PURE__ */ v(f, {
274
- ref: g,
275
- type: T ? "text" : "password",
276
- disabled: l,
277
- loading: u,
278
- className: n(a && "pe-control-actions", c),
279
- strings: d,
280
- ...h
281
- }), !!a && /* @__PURE__ */ v("button", {
282
- type: "button",
283
- className: n("password-input--toggle", "text-muted-foreground/80 hover:text-foreground focus-visible:border-input focus-visible:ring-ring/50 absolute inset-y-0 end-space-xs flex h-full w-control-clear items-center justify-center rounded-e-radius-md transition-[color,box-shadow] outline-none focus-visible:z-10 focus-visible:ring-2 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", s),
284
- "aria-label": T ? _.hidePassword : _.showPassword,
285
- "aria-pressed": T,
286
- disabled: E,
287
- onMouseDown: (e) => e.preventDefault(),
288
- onClick: D,
289
- children: v(T ? S : x, {
290
- className: "size-icon",
291
- "aria-hidden": "true"
292
- })
293
- })]
294
- });
295
- });
296
- U.displayName = "PasswordInput";
297
- //#endregion
298
- //#region src/components/base/text-inputs/slug-field.tsx
299
- function W(e, { separator: t = "-", lowercase: n = !0, trim: r = !0 } = {}) {
300
- let i = t || "-", a = i.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), o = String(e ?? "").normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/&/g, " and ").replace(/['’]/g, "");
301
- return n && (o = o.toLowerCase()), o = o.replace(/[^\p{Letter}\p{Number}]+/gu, i).replace(RegExp(`${a}{2,}`, "g"), i), r && (o = o.replace(RegExp(`^${a}|${a}$`, "g"), "")), o;
302
- }
303
- var G = m.forwardRef(function({ value: e, slugify: t, separator: r = "-", lowercase: i = !0, trim: a = !0, wrapperClassName: o, className: s, ...c }, l) {
304
- let u = m.useMemo(() => t?.(e) ?? W(e, {
305
- separator: r,
306
- lowercase: i,
307
- trim: a
308
- }), [
309
- i,
310
- r,
311
- t,
312
- a,
313
- e
314
- ]);
315
- return /* @__PURE__ */ v("div", {
316
- className: n("slug-field--component", o),
317
- children: /* @__PURE__ */ v(f, {
318
- ref: l,
319
- ...c,
320
- type: "text",
321
- value: u,
322
- readOnly: !0,
323
- className: s
324
- })
325
- });
326
- });
327
- G.displayName = "SlugField";
328
- //#endregion
329
- export { P as a, B as c, E as d, H as i, z as l, W as n, I as o, U as r, L as s, G as t, V as u };
330
-
331
- //# sourceMappingURL=text-inputs-Dh9XGyiS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-inputs-Dh9XGyiS.js","names":["Textarea","React","InputGroup","InputGroupAddon","InputGroupText","InputGroupInput","Input","InputGroupTextarea","InputGroupPrimitive","InputGroupAddonPrimitive","InputGroupTextPrimitive","InputGroupInputPrimitive","InputGroupTextareaPrimitive","React","React","useDensityConfig","cn","Button","Text","fieldStateRecipes","fieldAffordanceRecipes","editableTextSizeClasses","formTextareaSizeClasses","resolveFormControlSize","useFormFieldState","Input","Input$1","React$1","defaultTextareaStrings","Textarea$1","sizeProp","controlledValue","providedId","stringsProp","props","textareaRef","useRef","strings","useStrings","size","defaultScale","textareaValue","onChange","hasError","invalid","adjustHeight","useCallback","autoResize","textarea","css","lineHeight","padding","border","minHeight","minRows","maxHeight","maxRows","newHeight","useEffect","previous","observer","signature","handleTextareaChange","newValue","wouldExceedLimit","updateValue","handleClear","clearValue","onClear","showClearButton","clearable","hasValue","loading","forwardedRef","node","isReactHookForm","showCount","className","characterCount","hasCharacterLimit","maxLength","Loader2Icon","CircleXIcon","Textarea","InputGroup$1","inputGroupAddonVariants","cva","InputGroupAddon$1","align","InputGroupText$1","InputGroupInput$1","InputGroupTextarea$1","InputGroup","addonAlignmentClasses","InputGroupAddon","InputGroupButton","isScalarContent","content","InputGroupText","children","InputGroupInput","formControlPaddingClasses","InputGroupTextarea","defaultPasswordInputStrings","PasswordInput","internalVisible","setInternalVisible","defaultVisible","isControlled","visible","isVisible","disabledState","disabled","toggleVisibility","nextVisible","onVisibleChange","wrapperClassName","revealable","inputStrings","visibilityButtonClassName","event","jsx","EyeOff","Eye","slugifyValue","safeSeparator","separator","escapedSeparator","normalized","value","lowercase","trim","SlugField","slug","slugify"],"sources":["../src/components/base/text-inputs/textarea.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-group.tsx","../src/components/base/text-inputs/input-group.tsx","../src/components/base/text-inputs/password-input.tsx","../src/components/base/text-inputs/slug-field.tsx"],"sourcesContent":["import { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { fieldAffordanceRecipes } from '../../../lib/field-affordance-recipes';\nimport { editableTextSizeClasses } from '../../../lib/editable-text-recipe';\nimport { CircleXIcon, Loader2Icon } from 'lucide-react';\nimport * as React from 'react';\nimport { useRef, useCallback, useEffect } from 'react';\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 { formTextareaSizeClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { useFormFieldState } from './hooks';\n\nexport interface TextareaStrings {\n\t\tclear: string;\n}\n\nexport const defaultTextareaStrings: TextareaStrings = {\n\t\tclear: 'Clear textarea',\n};\n\nexport interface TextareaProps extends Omit<React.ComponentProps<'textarea'>, 'onChange'> {\n\t\t// String overrides (e.g. clear button aria-label)\n\t\t/** Overrides the character-count and clear copy. */\n\t\tstrings?: StringsProp<TextareaStrings>;\n\t\t// Character limit\n\t\t/** Character cap, also used as the denominator of the count. */\n\t\tmaxLength?: number;\n\t\t/** Shows the current and maximum character count. */\n\t\tshowCharacterCount?: boolean;\n\n\t\t// Clear button\n\t\t/** Shows an inline clear action when the field has a value. */\n\t\tclearable?: boolean;\n\t\tonClear?: () => void;\n\n\t\t// Loading state\n\t\t/** Replaces the trailing affordance with a loading indicator. */\n\t\tloading?: boolean;\n\n\t\t// Error state for styling (passed from FormField)\n\t\t/** Applies the invalid styling. Validation copy stays with FormField. */\n\t\tinvalid?: boolean;\n\n\t\t// Visual size\n\t\t/** Control density. Falls back to `UIProvider.density.defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t// Auto-resize functionality\n\t\t/** Grows the field with its content, between `minRows` and `maxRows`. */\n\t\tautoResize?: boolean;\n\t\t/** Smallest height, in rows, when `autoResize` is set. */\n\t\tminRows?: number;\n\t\t/** Height at which the field stops growing and starts scrolling. */\n\t\tmaxRows?: number;\n\n\t\t// Value props\n\t\tonChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n\t\t/** Current text. Controlled. */\n\t\tvalue?: string;\n\t\t/** Initial text for uncontrolled use. */\n\t\tdefaultValue?: string;\n}\n\nconst TextareaImpl = (\n\t\t{\n\t\t\t\tclassName,\n\t\t\t\tmaxLength,\n\t\t\t\tshowCharacterCount,\n\t\t\t\tclearable,\n\t\t\t\tonClear,\n\t\t\t\tloading = false,\n\t\t\t\tinvalid,\n\t\t\t\tsize: sizeProp,\n\t\t\t\tautoResize = false,\n\t\t\t\tminRows = 2,\n\t\t\t\tmaxRows,\n\t\t\t\tonChange,\n\t\t\t\tvalue: controlledValue,\n\t\t\t\tdefaultValue,\n\t\t\t\tid: providedId,\n\t\t\t\tstrings: stringsProp,\n\t\t\t\t...props\n\t\t}: TextareaProps,\n\t\tforwardedRef: React.ForwardedRef<HTMLTextAreaElement>,\n) => {\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst strings = useStrings(defaultTextareaStrings, stringsProp);\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\t\t// Use shared form field state hook\n\t\tconst {\n\t\t\t\tid,\n\t\t\t\tvalue: textareaValue,\n\t\t\t\tisReactHookForm,\n\t\t\t\tcharacterCount,\n\t\t\t\thasCharacterLimit,\n\t\t\t\tshowCount,\n\t\t\t\thasValue,\n\t\t\t\tupdateValue,\n\t\t\t\tclearValue,\n\t\t\t\twouldExceedLimit,\n\t\t} = useFormFieldState({\n\t\t\t\tcontrolledValue,\n\t\t\t\tdefaultValue,\n\t\t\t\tmaxLength,\n\t\t\t\tshowCharacterCount,\n\t\t\t\tprovidedId,\n\t\t\t\tidPrefix: 'textarea',\n\t\t\t\thasOnChange: onChange !== undefined,\n\t\t});\n\n\t\t// Derive display states\n\t\tconst hasError = Boolean(invalid);\n\n\t\tconst adjustHeight = useCallback(() => {\n\t\t\t\tif (!autoResize || !textareaRef.current) return;\n\n\t\t\t\tconst textarea = textareaRef.current;\n\n\t\t\t\tconst css = getComputedStyle(textarea);\n\t\t\t\tconst lineHeight = Number.parseFloat(css.lineHeight) || 20;\n\t\t\t\tconst padding = (Number.parseFloat(css.paddingTop) || 0) + (Number.parseFloat(css.paddingBottom) || 0);\n\t\t\t\tconst border = css.boxSizing === 'border-box' ? (Number.parseFloat(css.borderTopWidth) || 0) + (Number.parseFloat(css.borderBottomWidth) || 0) : 0;\n\t\t\t\ttextarea.style.height = 'auto';\n\t\t\t\tconst minHeight = lineHeight * minRows + padding + border;\n\t\t\t\tconst maxHeight = maxRows ? lineHeight * maxRows + padding + border : Infinity;\n\n\t\t\t\tconst newHeight = Math.min(Math.max(textarea.scrollHeight + border, minHeight), maxHeight);\n\t\t\t\ttextarea.style.height = `${newHeight}px`;\n\t\t}, [autoResize, maxRows, minRows]);\n\n\t\tuseEffect(() => {\n\t\t\t\tadjustHeight();\n\t\t}, [textareaValue, props.placeholder, autoResize, adjustHeight]);\n\n\t\tuseEffect(() => {\n\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\tif (!autoResize || !textarea || typeof ResizeObserver === 'undefined') return;\n\t\t\t\tlet previous = '';\n\t\t\t\tconst observer = new ResizeObserver(() => {\n\t\t\t\t\t\tconst css = getComputedStyle(textarea);\n\t\t\t\t\t\tconst signature = `${textarea.clientWidth}:${css.fontSize}:${css.lineHeight}`;\n\t\t\t\t\t\tif (signature === previous) return;\n\t\t\t\t\t\tprevious = signature;\n\t\t\t\t\t\tadjustHeight();\n\t\t\t\t});\n\t\t\t\tobserver.observe(textarea);\n\t\t\t\treturn () => observer.disconnect();\n\t\t}, [autoResize, adjustHeight]);\n\n\t\tconst handleTextareaChange = useCallback(\n\t\t\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\t\t\t\tconst newValue = e.target.value;\n\n\t\t\t\t\t\t// Check character limit\n\t\t\t\t\t\tif (wouldExceedLimit(newValue)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update internal state if uncontrolled\n\t\t\t\t\t\tupdateValue(newValue);\n\n\t\t\t\t\t\t// Call external onChange\n\t\t\t\t\t\tonChange?.(e);\n\n\t\t\t\t\t\t// Auto-resize if enabled\n\t\t\t\t\t\tif (autoResize) {\n\t\t\t\t\t\t\t\tsetTimeout(adjustHeight, 0);\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[onChange, updateValue, wouldExceedLimit, autoResize, adjustHeight]\n\t\t);\n\n\t\tconst handleClear = useCallback(() => {\n\t\t\t\tconst syntheticEvent = {\n\t\t\t\t\t\ttarget: { value: '' },\n\t\t\t\t\t\tcurrentTarget: { value: '' },\n\t\t\t\t} as React.ChangeEvent<HTMLTextAreaElement>;\n\n\t\t\t\t// Clear internal state\n\t\t\t\tclearValue();\n\n\t\t\t\t// Notify parent\n\t\t\t\tonChange?.(syntheticEvent);\n\n\t\t\t\t// Execute optional onClear callback\n\t\t\t\tonClear?.();\n\n\t\t\t\t// Focus the textarea after clearing\n\t\t\t\ttextareaRef.current?.focus();\n\n\t\t\t\t// Auto-resize if enabled\n\t\t\t\tif (autoResize) {\n\t\t\t\t\t\tsetTimeout(adjustHeight, 0);\n\t\t\t\t}\n\t\t}, [clearValue, onChange, onClear, autoResize, adjustHeight]);\n\n\t\t// Determine what to show in the end position\n\t\tconst showClearButton = clearable && hasValue && !loading;\n\n\t\treturn (\n\t\t\t\t<div className={cn('textarea--component', 'relative w-full')}>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tforwardedRef(node);\n\t\t\t\t\t\t\t\t\t\t} else if (forwardedRef) {\n\t\t\t\t\t\t\t\t\t\t\t\tforwardedRef.current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\ttextareaRef.current = node;\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\t{...(!isReactHookForm && { value: textareaValue })}\n\t\t\t\t\t\t\t\tonChange={handleTextareaChange}\n\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\taria-invalid={hasError || undefined}\n\t\t\t\t\t\t\t\tdisabled={props.disabled || loading}\n\t\t\t\t\t\t\t\trows={minRows}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tresize: autoResize ? 'none' : props.style?.resize,\n\t\t\t\t\t\t\t\t\t\toverflow: autoResize && maxRows ? 'auto' : 'visible',\n\t\t\t\t\t\t\t\t\t\t...props.style,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Base styles\n\t\t\t\t\t\t\t\t\t\t'placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground',\n\t\t\t\t\t\t\t\t\t\t'border-input box-border flex w-full rounded-radius border bg-transparent px-control py-control-y-offset',\n\t\t\t\t\t\t\t\t\t\t'transition-[color,box-shadow] outline-none',\n\t\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\t\t\t\tformTextareaSizeClasses[size],\n\t\t\t\t\t\t\t\t\t\teditableTextSizeClasses[size],\n\t\t\t\t\t\t\t\t\t\t// Focus styles\n\t\t\t\t\t\t\t\t\t\tfieldStateRecipes.focus,\n\t\t\t\t\t\t\t\t\t\t// Invalid/error styles\n\t\t\t\t\t\t\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\t\t\t\t\t\t// Dynamic padding for overlays\n\t\t\t\t\t\t\t\t\t\tshowClearButton && fieldAffordanceRecipes.clearPadding.md,\n\t\t\t\t\t\t\t\t\t\tshowCount && 'pb-control-addon',\n\t\t\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Character Count */}\n\t\t\t\t\t\t{!!showCount && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'pointer-events-none absolute bottom-control-y-offset end-[calc(var(--control-x)*var(--space-scale))] text-xs tabular-nums',\n\t\t\t\t\t\t\t\t\t\t\t\tprops.disabled && 'opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\thasError ? 'text-destructive' : 'text-muted-foreground'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type={hasError ? 'error' : 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{characterCount}\n\t\t\t\t\t\t\t\t\t\t\t\t{hasCharacterLimit ? `/${maxLength}` : ''}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Loading Spinner */}\n\t\t\t\t\t\t{!!loading && !showCount && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'pointer-events-none absolute top-control-y-offset end-[calc(var(--control-x)*var(--space-scale))]',\n\t\t\t\t\t\t\t\t\t\t\t\thasError ? 'text-destructive' : 'text-muted-foreground/80'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Loader2Icon className=\"size-icon animate-spin\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Clear Button */}\n\t\t\t\t\t\t{!!showClearButton && !showCount && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target,fieldAffordanceRecipes.focus,fieldAffordanceRecipes.clear,'absolute top-control-y-offset',fieldAffordanceRecipes.clearEnd.md)}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.clear}\n\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabled || loading}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<CircleXIcon className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t);\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(TextareaImpl);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import { fieldStateRecipes } from '../../lib/field-state-recipes';\nimport { editableTextSizeClasses } from '../../lib/editable-text-recipe';\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input rounded-radius border bg-transparent px-control py-space-md shadow-none transition-[color,box-shadow] placeholder:text-muted-foreground flex field-sizing-content min-h-textarea w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n editableTextSizeClasses.md,\n fieldStateRecipes.focus,\n fieldStateRecipes.invalid,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { fieldStateRecipes } from '../../lib/field-state-recipes';\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\nimport { cn } from \"../../lib/utils\"\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"border-input h-control rounded-radius border shadow-none transition-[color,box-shadow] has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm [[data-slot=combobox-content]_&]:focus-within:border-inherit [[data-slot=combobox-content]_&]:focus-within:ring-0 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto\",\n fieldStateRecipes.groupFocus,\n fieldStateRecipes.groupInvalid,\n className\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground h-auto gap-space-md py-space-sm text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-inner [&>svg:not([class*='size-'])]:size-icon flex cursor-text items-center justify-center select-none\",\n {\n variants: {\n align: {\n \"inline-start\": \"ps-control has-[>button]:-ms-space-xs has-[>kbd]:-ms-space-2xs order-first\",\n \"inline-end\": \"pe-control has-[>button]:-me-space-xs has-[>kbd]:-me-space-2xs order-last\",\n \"block-start\":\n \"px-control pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md order-first w-full justify-start\",\n \"block-end\":\n \"px-control pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md order-last w-full justify-start\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"gap-2 text-sm shadow-none flex items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\" | \"type\"> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\"\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\"rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1\", className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\"rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1 resize-none\", className)}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","/**\n * InputGroup — base wrapper around the shadcn `ui/input-group` primitive.\n *\n * What this layer adds on top of the primitive:\n * - Stable BEM hooks on every wrapped part's outermost node\n * (`input-group--component`, `input-group-addon--component`, and so on).\n * - Design-system typography for the scalar copy inside `InputGroupText`,\n * while arbitrary `ReactNode` content (icons, `kbd`, buttons) passes through\n * untouched so the compound pattern stays composable.\n * - Keeps the primitive's addon alignment and button-size variants, its\n * focus-within/aria-invalid ring behaviour, and every native prop by spread.\n *\n * Compose it as\n * `<InputGroup><InputGroupAddon><Icon/></InputGroupAddon><InputGroupInput/></InputGroup>`.\n *\n * Reach for it when one control needs inline affordances welded to its frame —\n * a search icon, a unit suffix, a busy indicator, an inline action. For the\n * label / control / hint / error row, use `FormField` instead; this wrapper\n * owns only the control frame.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tInputGroup as InputGroupPrimitive,\n\tInputGroupAddon as InputGroupAddonPrimitive,\n\tInputGroupInput as InputGroupInputPrimitive,\n\tInputGroupText as InputGroupTextPrimitive,\n\tInputGroupTextarea as InputGroupTextareaPrimitive,\n} from '../../ui/input-group';\nimport { Button, type ButtonProps } from '../buttons';\nimport { Text } from '../../typography';\nimport type { ComponentScale } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formControlPaddingClasses } from '../forms/form-sizing';\n\nexport type InputGroupProps = ComponentProps<typeof InputGroupPrimitive>;\nexport type InputGroupAddonProps = ComponentProps<typeof InputGroupAddonPrimitive>;\nexport interface InputGroupButtonProps extends Omit<ButtonProps, 'size'> {\n\t/** Component scale. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: ComponentScale;\n}\nexport type InputGroupInputProps = ComponentProps<typeof InputGroupInputPrimitive>;\nexport type InputGroupTextProps = ComponentProps<typeof InputGroupTextPrimitive>;\nexport type InputGroupTextareaProps = ComponentProps<typeof InputGroupTextareaPrimitive>;\n\n/** Control frame that welds inline addons onto a single input or textarea. */\nfunction InputGroup({ className, ...props }: InputGroupProps) {\n\treturn (\n\t\t<InputGroupPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'input-group--component box-border h-control rounded-radius font-sans text-foreground shadow-none',\n\t\t\t\t'has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg',\n\t\t\t\t'has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst addonAlignmentClasses = {\n\t'inline-start': 'h-full ps-control py-0',\n\t'inline-end': 'h-full pe-control py-0',\n\t'block-start': 'px-control pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md',\n\t'block-end': 'px-control pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md',\n} as const;\n\n/** Leading/trailing (or block start/end) affordance slot inside the frame. */\nfunction InputGroupAddon({ className, align = 'inline-start', ...props }: InputGroupAddonProps) {\n\treturn (\n\t\t<InputGroupAddonPrimitive\n\t\t\talign={align}\n\t\t\tclassName={cn(\n\t\t\t\t'input-group-addon--component box-border gap-space-md py-space-sm [&>svg:not([class*=\\'size-\\'])]:size-icon',\n\t\t\t\taddonAlignmentClasses[align ?? 'inline-start'],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Inline action button sized to sit inside the control frame. */\nfunction InputGroupButton({\n\tclassName,\n\ttone = 'secondary',\n\tbuttonStyle = 'ghost',\n\t...props\n}: InputGroupButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\ttone={tone}\n\t\t\tbuttonStyle={buttonStyle}\n\t\t\tclassName={cn('input-group-button--component max-h-full shadow-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction isScalarContent(content: ReactNode): content is string | number | bigint {\n\treturn typeof content === 'string' || typeof content === 'number' || typeof content === 'bigint';\n}\n\n/** Static copy segment — scalar text renders through Typography. */\nfunction InputGroupText({ children, className, ...props }: InputGroupTextProps) {\n\treturn (\n\t\t<InputGroupTextPrimitive\n\t\t\tclassName={cn('input-group-text--component gap-space-md [&_svg:not([class*=\\'size-\\'])]:size-icon', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalarContent(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</InputGroupTextPrimitive>\n\t);\n}\n\n/** Single-line control that inherits the group's frame instead of its own. */\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n\treturn (\n\t\t<InputGroupInputPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t// Fixed-height inline frames clamp the input to their content box.\n\t\t\t\t// Auto-height block compositions retain the shared control height.\n\t\t\t\t'input-group-input--component box-border h-control max-h-full min-h-0 font-sans text-foreground',\n\t\t\t\tformControlPaddingClasses.md,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Multi-line control that inherits the group's frame instead of its own. */\nfunction InputGroupTextarea({ className, ...props }: InputGroupTextareaProps) {\n\treturn (\n\t\t<InputGroupTextareaPrimitive\n\t\t\tclassName={cn('input-group-textarea--component box-border min-h-textarea px-control py-space-md font-sans text-foreground', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tInputGroup,\n\tInputGroupAddon,\n\tInputGroupButton,\n\tInputGroupInput,\n\tInputGroupText,\n\tInputGroupTextarea,\n};\n","import { Eye, EyeOff } from 'lucide-react';\nimport * as React from 'react';\n\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { Input, type InputProps } from './input';\n\nexport interface PasswordInputStrings {\n\tshowPassword: string;\n\thidePassword: string;\n}\n\nexport const defaultPasswordInputStrings: PasswordInputStrings = {\n\tshowPassword: 'Show password',\n\thidePassword: 'Hide password',\n};\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type' | 'endIcon' | 'strings'> {\n\t/** Whether the value is revealed. Controlled. */\n\tvisible?: boolean;\n\t/** Whether the value starts revealed, for uncontrolled use. */\n\tdefaultVisible?: boolean;\n\t/** Fired whenever the reveal state changes. */\n\tonVisibleChange?: (visible: boolean) => void;\n\t/** Shows the reveal toggle. Turn it off for fields that must stay masked. */\n\trevealable?: boolean;\n\t/** Merged onto the field wrapper, outside the input frame. */\n\twrapperClassName?: string;\n\t/** Merged onto the reveal toggle. */\n\tvisibilityButtonClassName?: string;\n\t/** Copy overrides forwarded to the underlying text input. */\n\tinputStrings?: InputProps['strings'];\n\t/** Overrides the show/hide accessible names. */\n\tstrings?: StringsProp<PasswordInputStrings>;\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n\tfunction PasswordInput(\n\t\t{\n\t\t\tvisible,\n\t\t\tdefaultVisible = false,\n\t\t\tonVisibleChange,\n\t\t\trevealable = true,\n\t\t\twrapperClassName,\n\t\t\tvisibilityButtonClassName,\n\t\t\tclassName,\n\t\t\tdisabled,\n\t\t\tloading,\n\t\t\tinputStrings,\n\t\t\tstrings: stringsProp,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst strings = useStrings(defaultPasswordInputStrings, stringsProp);\n\t\tconst [internalVisible, setInternalVisible] = React.useState(defaultVisible);\n\t\tconst isControlled = visible !== undefined;\n\t\tconst isVisible = isControlled ? visible : internalVisible;\n\t\tconst disabledState = disabled || loading;\n\n\t\tconst toggleVisibility = React.useCallback(() => {\n\t\t\tconst nextVisible = !isVisible;\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalVisible(nextVisible);\n\t\t\t}\n\t\t\tonVisibleChange?.(nextVisible);\n\t\t}, [isControlled, isVisible, onVisibleChange]);\n\n\t\treturn (\n\t\t\t<div className={cn('password-input--component', 'relative', wrapperClassName)}>\n\t\t\t\t<Input\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype={isVisible ? 'text' : 'password'}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\tclassName={cn(revealable && 'pe-control-actions', className)}\n\t\t\t\t\tstrings={inputStrings}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\n\t\t\t\t{!!revealable && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'password-input--toggle',\n\t\t\t\t\t\t\t'text-muted-foreground/80 hover:text-foreground focus-visible:border-input focus-visible:ring-ring/50 absolute inset-y-0 end-space-xs flex h-full w-control-clear items-center justify-center rounded-e-radius-md transition-[color,box-shadow] outline-none focus-visible:z-10 focus-visible:ring-2 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\tvisibilityButtonClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={isVisible ? strings.hidePassword : strings.showPassword}\n\t\t\t\t\t\taria-pressed={isVisible}\n\t\t\t\t\t\tdisabled={disabledState}\n\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\t\tonClick={toggleVisibility}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isVisible ? (\n\t\t\t\t\t\t\t<EyeOff className=\"size-icon\" aria-hidden=\"true\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Eye className=\"size-icon\" aria-hidden=\"true\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nPasswordInput.displayName = 'PasswordInput';\n\nexport { PasswordInput };\n","import * as React from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nimport { Input, type InputProps } from './input';\n\nexport interface SlugifyValueOptions {\n\t/** Character joining words in the generated slug. Default: `-`. */\n\tseparator?: string;\n\t/** Lowercases the generated slug. */\n\tlowercase?: boolean;\n\t/** Strips leading and trailing separators. */\n\ttrim?: boolean;\n}\n\nexport function slugifyValue(\n\tvalue: string | number | null | undefined,\n\t{\n\t\tseparator = '-',\n\t\tlowercase = true,\n\t\ttrim = true,\n\t}: SlugifyValueOptions = {},\n) {\n\tconst safeSeparator = separator || '-';\n\tconst escapedSeparator = safeSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tlet normalized = String(value ?? '')\n\t\t.normalize('NFKD')\n\t\t.replace(/[\\u0300-\\u036f]/g, '')\n\t\t.replace(/&/g, ' and ')\n\t\t.replace(/['’]/g, '');\n\n\tif (lowercase) {\n\t\tnormalized = normalized.toLowerCase();\n\t}\n\n\tnormalized = normalized\n\t\t.replace(/[^\\p{Letter}\\p{Number}]+/gu, safeSeparator)\n\t\t.replace(new RegExp(`${escapedSeparator}{2,}`, 'g'), safeSeparator);\n\n\tif (trim) {\n\t\tnormalized = normalized.replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, 'g'), '');\n\t}\n\n\treturn normalized;\n}\n\nexport interface SlugFieldProps\n\textends Omit<\n\t\tInputProps,\n\t\t'value' | 'defaultValue' | 'onChange' | 'readOnly' | 'type'\n\t>,\n\t\tSlugifyValueOptions {\n\t/** Current slug. Controlled. */\n\tvalue: string | number | null | undefined;\n\t/** Replaces the built-in slug derivation entirely. */\n\tslugify?: (value: string | number | null | undefined) => string;\n\t/** Merged onto the field wrapper, outside the input frame. */\n\twrapperClassName?: string;\n}\n\nconst SlugField = React.forwardRef<HTMLInputElement, SlugFieldProps>(\n\tfunction SlugField(\n\t\t{\n\t\t\tvalue,\n\t\t\tslugify,\n\t\t\tseparator = '-',\n\t\t\tlowercase = true,\n\t\t\ttrim = true,\n\t\t\twrapperClassName,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst slug = React.useMemo(\n\t\t\t() => slugify?.(value) ?? slugifyValue(value, { separator, lowercase, trim }),\n\t\t\t[lowercase, separator, slugify, trim, value],\n\t\t);\n\n\t\treturn (\n\t\t\t<div className={cn('slug-field--component', wrapperClassName)}>\n\t\t\t\t<Input\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...props}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={slug}\n\t\t\t\t\treadOnly\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nSlugField.displayName = 'SlugField';\n\nexport { SlugField };\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.styles-BwB7vAF2.js","names":["textTypes","textSizes","textWeights","textAlignments","textLineHeights","textVariants","cva","resolveTextClassNames","options"],"sources":["../src/components/typography/text.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const textTypes = {\n main: 'text-foreground', inverse: 'text-inverse-foreground',\n secondary: 'text-muted-foreground', discrete: 'text-muted-foreground',\n error: 'text-destructive', success: 'text-success', primary: 'text-primary-accent',\n} as const;\nexport const textSizes = {\n inherit: '[font-size:inherit]', xxs: 'text-xxs', xs: 'text-xs', pxs: 'text-pxs',\n sm: 'text-sm', base: 'text-base', lg: 'text-lg', xl: 'text-xl',\n} as const;\nexport const textWeights = {normal: 'font-normal', regular: 'font-normal', medium: 'font-medium', semibold: 'font-semibold', bold: 'font-bold'} as const;\nexport const textAlignments = {left: 'text-left', center: 'text-center', right: 'text-right'} as const;\nexport const textLineHeights = {normal: 'leading-normal', relaxed: 'leading-relaxed', loose: 'leading-loose', tight: 'leading-tight', snug: 'leading-snug', none: 'leading-none'} as const;\n\nexport const textVariants = cva('m-0 font-sans', {\n variants: {type: textTypes, size: textSizes, weight: textWeights, align: textAlignments, lineHeight: textLineHeights, numeric: {true: 'font-mono tabular-nums', false: ''}},\n defaultVariants: {type: 'main', size: 'sm', weight: 'regular', align: 'left', lineHeight: 'normal', numeric: false},\n});\n\nexport function resolveTextClassNames(options: Parameters<typeof textVariants>[0] & {className?: string}): string {\n return textVariants(options);\n}\n"],"mappings":";;AAEA,IAAaA,IAAY;CACvB,MAAM;CAAmB,SAAS;CAClC,WAAW;CAAyB,UAAU;CAC9C,OAAO;CAAoB,SAAS;CAAgB,SAAS;AAC/D,GACaC,IAAY;CACvB,SAAS;CAAuB,KAAK;CAAY,IAAI;CAAW,KAAK;CACrE,IAAI;CAAW,MAAM;CAAa,IAAI;CAAW,IAAI;AACvD,GACaC,IAAc;CAAC,QAAQ;CAAe,SAAS;CAAe,QAAQ;CAAe,UAAU;CAAiB,MAAM;AAAW,GACjIC,IAAiB;CAAC,MAAM;CAAa,QAAQ;CAAe,OAAO;AAAY,GAC/EC,IAAkB;CAAC,QAAQ;CAAkB,SAAS;CAAmB,OAAO;CAAiB,OAAO;CAAiB,MAAM;CAAgB,MAAM;AAAc,GAEnKC,IAAeC,EAAI,iBAAiB;CAC/C,UAAU;EAAC,MAAMN;EAAW,MAAMC;EAAW,QAAQC;EAAa,OAAOC;EAAgB,YAAYC;EAAiB,SAAS;GAAC,MAAM;GAA0B,OAAO;EAAE;CAAC;CAC1K,iBAAiB;EAAC,MAAM;EAAQ,MAAM;EAAM,QAAQ;EAAW,OAAO;EAAQ,YAAY;EAAU,SAAS;CAAK;AACpH,CAAC;AAED,SAAgBG,EAAsB,GAA4E;CAChH,OAAOF,EAAaG,CAAO;AAC7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"timelines-B9ICkQcV.js","names":["_Fragment","Text","SecondaryValue","MonoValue","Percent","Badge","ContentBlock","DOT_PX","ICON_PX","STATUS_TONE","Timeline","cn","className","items","tone","item","Icon","isLast","i","dotSize","statusStyles","Check","Loader2","Circle","StepsCard","steps","titleColor","step","HorizontalDot","status","stepNumber","StepsHorizontal","title","description","idx","lineColor","footerText","defaultChangelogTimelineStrings","KIND_TO_STATUS","KIND_TO_BADGE","KIND_ICON","Plus","Minus","Wrench","GitCommit","ChangelogTimeline","stringsProp","strings","useStrings","labelByKind","entries","entry","Fragment","defaultMilestonesTimelineStrings","STATUS_TO_TIMELINE","STATUS_ICON","Clock","X","STATUS_BADGE","MilestonesTimeline","labelByStatus","milestones","m"],"sources":["../src/components/blocks/timelines/shared/timeline.tsx","../src/components/blocks/timelines/steps-card/steps-card.tsx","../src/components/blocks/timelines/changelog/types.ts","../src/components/blocks/timelines/changelog/changelog-timeline.tsx","../src/components/blocks/timelines/milestones/types.ts","../src/components/blocks/timelines/milestones/milestones-timeline.tsx"],"sourcesContent":["/**\n * Timeline — shared base primitive for the blocks timeline family.\n *\n * Renders a vertical, dot-and-line list of events. Each item supports an\n * icon (Lucide component), a status that maps to dot tone, a title row, an\n * optional description block, an optional timestamp, and free-form content\n * via `children`. Use this primitive directly for new timeline variants\n * instead of reinventing the dot/line geometry — see `ChangeLogTimeline`,\n * `MilestonesTimeline`, and the existing OrderTimeline / PaymentTimeline /\n * ActivityStream consumers for examples.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport type { ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\n\nexport type TimelineStatus =\n\t| 'completed'\n\t| 'current'\n\t| 'pending'\n\t| 'success'\n\t| 'warning'\n\t| 'error'\n\t| 'neutral';\n\nexport type TimelineDotSize = ComponentScale;\n\nexport interface TimelineItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Formatted time for the entry. */\n\ttimestamp?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\tstatus?: TimelineStatus;\n\tchildren?: ReactNode;\n}\n\nexport interface TimelineProps {\n\titems: TimelineItem[];\n\tdotSize?: TimelineDotSize;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nconst DOT_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2.5',\n\tmd: 'size-icon-md',\n\tlg: 'size-icon-lg',\n};\n\nconst ICON_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2',\n\tmd: 'size-2.5',\n\tlg: 'size-icon-sm',\n};\n\nconst STATUS_TONE: Record<TimelineStatus, { bg: string; text: string; ring: string; line: string }> = {\n\tcompleted: { bg: 'bg-success', text: 'text-success-foreground', ring: 'ring-success/20', line: 'bg-success/40' },\n\tcurrent: { bg: 'bg-primary', text: 'text-primary-foreground', ring: 'ring-primary/30', line: 'bg-primary/40' },\n\tpending: { bg: 'bg-muted', text: 'text-muted-foreground', ring: 'ring-border', line: 'bg-border' },\n\tsuccess: { bg: 'bg-success', text: 'text-success-foreground', ring: 'ring-success/20', line: 'bg-success/40' },\n\twarning: { bg: 'bg-warning', text: 'text-warning-foreground', ring: 'ring-warning/30', line: 'bg-warning/40' },\n\terror: { bg: 'bg-destructive', text: 'text-destructive-foreground', ring: 'ring-destructive/30', line: 'bg-destructive/40' },\n\tneutral: { bg: 'bg-card', text: 'text-foreground', ring: 'ring-border', line: 'bg-border' },\n};\n\nexport function Timeline({ items, dotSize = 'md', className }: TimelineProps) {\n\treturn (\n\t\t<ol className={cn('timeline--component', 'relative space-y-space-xl', className)}>\n\t\t\t{items.map((item, i) => {\n\t\t\t\tconst status = item.status ?? 'neutral';\n\t\t\t\tconst tone = STATUS_TONE[status];\n\t\t\t\tconst Icon = item.icon;\n\t\t\t\tconst isLast = i === items.length - 1;\n\n\t\t\t\treturn (\n\t\t\t\t\t<li key={item.id} className=\"relative flex gap-space-lg\">\n\t\t\t\t\t\t{/* Connector line — fills available space below dot until last */}\n\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute left-[7px] top-4 bottom-[-1rem] w-px',\n\t\t\t\t\t\t\t\t\ttone.line,\n\t\t\t\t\t\t\t\t\tdotSize === 'lg' && 'left-[10px]',\n\t\t\t\t\t\t\t\t\tdotSize === 'sm' && 'left-[5px]',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div className=\"relative z-[1] mt-0.5 flex shrink-0 items-start\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'inline-flex items-center justify-center rounded-full ring-2',\n\t\t\t\t\t\t\t\t\ttone.bg,\n\t\t\t\t\t\t\t\t\ttone.text,\n\t\t\t\t\t\t\t\t\ttone.ring,\n\t\t\t\t\t\t\t\t\tDOT_PX[dotSize],\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 && <Icon className={ICON_PX[dotSize]} />}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1 pb-space-md\">\n\t\t\t\t\t\t\t<div className=\"flex items-baseline justify-between gap-space-md\">\n\t\t\t\t\t\t\t\t<Text weight=\"medium\" className=\"leading-tight\">\n\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!item.timestamp && (\n\t\t\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"shrink-0 tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.timestamp}\n\t\t\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-0.5\">\n\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!item.children && <div className=\"mt-space-md\">{item.children}</div>}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ol>\n\t);\n}\n\nTimeline.displayName = 'Timeline';\n","import { Text } from '../../../typography/text';\nimport { Badge } from '../../../base/badge';\nimport { ContentBlock } from '../../../base/display';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Circle, Loader2 } from 'lucide-react';\nimport { Timeline, type TimelineItem } from '../shared';\nimport { type StepStatus, type StepsCardProps, type StepsHorizontalProps } from './types';\n\nconst statusStyles: Record<StepStatus, {\n\tdot: string;\n\tline: string;\n\ttitle: string;\n\tIcon: typeof Check;\n}> = {\n\tcompleted: {\n\t\tdot: 'bg-success text-success-foreground',\n\t\tline: 'bg-success',\n\t\ttitle: 'text-foreground',\n\t\tIcon: Check,\n\t},\n\tcurrent: {\n\t\tdot: 'bg-primary text-primary-foreground ring-4 ring-primary/20',\n\t\tline: 'bg-border',\n\t\ttitle: 'text-foreground',\n\t\tIcon: Loader2,\n\t},\n\tupcoming: {\n\t\tdot: 'bg-muted text-muted-foreground',\n\t\tline: 'bg-border',\n\t\ttitle: 'text-muted-foreground',\n\t\tIcon: Circle,\n\t},\n};\n\n/* ─── Vertical StepsCard (original) ────────────────────────────────────────── */\n\nexport function StepsCard({ title, description, steps, footerText, className }: StepsCardProps) {\n\tconst items: TimelineItem[] = steps.map((step) => {\n\t\tconst { Icon, title: titleColor } = statusStyles[step.status];\n\t\treturn {\n\t\t\tid: step.id,\n\t\t\ttitle: (\n\t\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"semibold\" className={titleColor}>\n\t\t\t\t\t\t{step.title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{step.badge ? (\n\t\t\t\t\t\t<Badge tone={step.badgeTone ?? 'secondary'}>{step.badge}</Badge>\n\t\t\t\t\t) : null}\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tdescription: step.description,\n\t\t\ttimestamp: step.timestamp,\n\t\t\ticon: Icon,\n\t\t\tstatus: step.status === 'upcoming' ? 'pending' : step.status,\n\t\t\tchildren: step.content,\n\t\t};\n\t});\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"steps-card\"\n\t\t\tdata-slot=\"steps-card\"\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tfooterText={footerText}\n\t\t\tclassName={cn('steps-card--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"lg\" />\n\t\t</ContentBlock>\n\t);\n}\n\nStepsCard.displayName = 'StepsCard';\n\n/*──────────────────────────────────────────────────────────────────────────────\n * STEPS HORIZONTAL — Horizontal step bar with connecting lines\n *────────────────────────────────────────────────────────────────────────────*/\n\nfunction HorizontalDot({ status, stepNumber }: { status: StepStatus; stepNumber: number }) {\n\tif (status === 'completed') {\n\t\treturn (\n\t\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius bg-success text-success-foreground\">\n\t\t\t\t<Check className=\"h-4 w-4\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (status === 'current') {\n\t\treturn (\n\t\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius bg-primary text-primary-foreground\">\n\t\t\t\t<Text weight=\"bold\" className=\"text-primary-foreground\">\n\t\t\t\t\t{stepNumber}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius border-2 border-muted text-muted-foreground\">\n\t\t\t<Text weight=\"medium\" className=\"text-muted-foreground\">\n\t\t\t\t{stepNumber}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function StepsHorizontal({ title, description, steps, footerText, className }: StepsHorizontalProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"steps-horizontal\"\n\t\t\tdata-slot=\"steps-horizontal\"\n\t\t\tclassName={cn('steps-horizontal--component @container/steps-horizontal grid min-w-0 gap-space-md', className)}\n\t\t>\n\t\t\t{!!(title || description) && (\n\t\t\t\t<div className=\"steps-horizontal--header grid min-w-0 gap-space-xs\">\n\t\t\t\t\t{!!title && <Text weight=\"semibold\">{title}</Text>}\n\t\t\t\t\t{!!description && <Text type=\"secondary\">{description}</Text>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"space-y-space-lg @xl/steps-horizontal:hidden\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={step.id} className=\"flex gap-space-lg\">\n\t\t\t\t\t\t\t<div className=\"flex flex-col items-center\">\n\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\t\t\t\t\t\t\t\t{!isLast && <div className={cn('mt-1 w-0.5 flex-1 min-h-5', lineColor)} />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className={cn('min-w-0 flex-1 pb-space-md', isLast && 'pb-0')}>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'leading-snug',\n\t\t\t\t\t\t\t\t\t\tstep.status === 'upcoming' ? 'text-muted-foreground' : 'text-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t{step.description}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\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\n\t\t\t{/* Horizontal scroll wrapper — when total step width exceeds the\n\t\t\t\tcard, this lets users scroll instead of clipping labels. */}\n\t\t\t<div className=\"-mx-1 hidden overflow-x-auto px-1 @xl/steps-horizontal:block\">\n\t\t\t\t<div className=\"flex min-w-fit items-start\">\n\t\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={step.id} className=\"flex min-w-28 flex-1 items-start\">\n\t\t\t\t\t\t\t\t<div className=\"flex w-full flex-col items-center\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center\">\n\t\t\t\t\t\t\t\t\t\t{idx > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'h-0.5 flex-1',\n\t\t\t\t\t\t\t\t\t\t\t\tsteps[idx - 1].status === 'completed' ? 'bg-success' : 'bg-border',\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\t{idx === 0 && <div className=\"flex-1\" />}\n\n\t\t\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\n\t\t\t\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('h-0.5 flex-1', lineColor)} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!isLast && <div className=\"flex-1\" />}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Labels below dot — clamped to 2 lines so long step\n\t\t\t\t\t\t\t\t\t\tnames break gracefully instead of pushing the\n\t\t\t\t\t\t\t\t\t\trow taller. */}\n\t\t\t\t\t\t\t\t\t<div className=\"mt-space-md flex w-full flex-col items-center px-space-xs text-center\">\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\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\t'leading-snug line-clamp-2',\n\t\t\t\t\t\t\t\t\t\t\t\tstep.status === 'upcoming' ? 'text-muted-foreground' : 'text-foreground',\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\t\t{step.title}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 leading-snug line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{step.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)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{!!footerText && <Text size=\"xs\" type=\"secondary\">{footerText}</Text>}\n\t\t</div>\n\t);\n}\n\nStepsHorizontal.displayName = 'StepsHorizontal';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type ChangelogEntryKind = 'added' | 'removed' | 'modified' | 'fixed';\n\nexport interface ChangelogEntry {\n\t/** Stable identity for this entry. */\n\tid: string;\n\tkind: ChangelogEntryKind;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tversion?: string;\n\t/** Formatted time for the entry. */\n\ttimestamp?: string;\n\t/** Who produced the entry. */\n\tauthor?: string;\n}\n\nexport interface ChangelogTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tadded: string;\n\tremoved: string;\n\tmodified: string;\n\tfixed: string;\n}\n\nexport const defaultChangelogTimelineStrings: ChangelogTimelineStrings = {\n\ttitle: 'Changelog',\n\tadded: 'Added',\n\tremoved: 'Removed',\n\tmodified: 'Modified',\n\tfixed: 'Fixed',\n};\n\nexport interface ChangelogTimelineProps {\n\tentries: ChangelogEntry[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ChangelogTimelineStrings>;\n}\n","/**\n * ChangelogTimeline — code/release changelog rendered through the shared\n * `Timeline` primitive. Each entry maps a semantic kind (added / removed /\n * modified / fixed) to a colour-coded chip (green / red / amber / blue) plus\n * an optional version label and timestamp. Strings overridable for i18n.\n */\nimport { GitCommit, Minus, Plus, Wrench } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n\ttype TimelineStatus,\n} from '../shared';\nimport {\n\tdefaultChangelogTimelineStrings,\n\ttype ChangelogEntry,\n\ttype ChangelogEntryKind,\n\ttype ChangelogTimelineProps,\n} from './types';\n\nimport { cn } from '../../../../lib/utils';\nconst KIND_TO_STATUS: Record<ChangelogEntryKind, TimelineStatus> = {\n\tadded: 'success',\n\tremoved: 'error',\n\tmodified: 'warning',\n\tfixed: 'current',\n};\n\nconst KIND_TO_BADGE: Record<\n\tChangelogEntryKind,\n\t'success' | 'destructive' | 'warning' | 'info'\n> = {\n\tadded: 'success',\n\tremoved: 'destructive',\n\tmodified: 'warning',\n\tfixed: 'info',\n};\n\nconst KIND_ICON = {\n\tadded: Plus,\n\tremoved: Minus,\n\tmodified: Wrench,\n\tfixed: GitCommit,\n} as const;\n\nexport function ChangelogTimeline({\n\tentries,\n\tclassName,\n\tstrings: stringsProp,\n}: ChangelogTimelineProps) {\n\tconst strings = useStrings(defaultChangelogTimelineStrings, stringsProp);\n\tconst labelByKind: Record<ChangelogEntryKind, string> = {\n\t\tadded: strings.added,\n\t\tremoved: strings.removed,\n\t\tmodified: strings.modified,\n\t\tfixed: strings.fixed,\n\t};\n\n\tconst items: TimelineItem[] = entries.map((entry: ChangelogEntry) => ({\n\t\tid: entry.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Badge tone={KIND_TO_BADGE[entry.kind]}>\n\t\t\t\t\t{labelByKind[entry.kind]}\n\t\t\t\t</Badge>\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{entry.title}\n\t\t\t\t</Text>\n\t\t\t\t{!!entry.version && (\n\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{entry.version}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t),\n\t\tdescription: entry.author ? (\n\t\t\t<>\n\t\t\t\t{entry.description}\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"discrete\" className=\"ml-space-md\">\n\t\t\t\t\t— {entry.author}\n\t\t\t\t</Text>\n\t\t\t</>\n\t\t) : (\n\t\t\tentry.description\n\t\t),\n\t\ttimestamp: entry.timestamp,\n\t\ticon: KIND_ICON[entry.kind],\n\t\tstatus: KIND_TO_STATUS[entry.kind],\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"changelog-timeline\"\n\t\t\tdata-slot=\"changelog-timeline\"\n\t\t\tclassName={cn('changelog-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nChangelogTimeline.displayName = 'ChangelogTimeline';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type MilestoneStatus = 'completed' | 'in_progress' | 'upcoming' | 'blocked';\n\nexport interface MilestoneItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tdueDate?: string;\n\tstatus: MilestoneStatus;\n\t/** 0–100; only used when status is `in_progress`. */\n\tprogress?: number;\n}\n\nexport interface MilestonesTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tcompleted: string;\n\tin_progress: string;\n\tupcoming: string;\n\tblocked: string;\n\tdueOn: string;\n}\n\nexport const defaultMilestonesTimelineStrings: MilestonesTimelineStrings = {\n\ttitle: 'Milestones',\n\tcompleted: 'Completed',\n\tin_progress: 'In progress',\n\tupcoming: 'Upcoming',\n\tblocked: 'Blocked',\n\tdueOn: 'Due',\n};\n\nexport interface MilestonesTimelineProps {\n\tmilestones: MilestoneItem[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<MilestonesTimelineStrings>;\n}\n","/**\n * MilestonesTimeline — project / goal milestones rendered through the\n * shared `Timeline` primitive. Each milestone has a status (completed /\n * in-progress / upcoming / blocked) that drives the dot tone, and an\n * optional `progress` percent that renders an inline progress bar when the\n * milestone is in flight. Strings overridable for i18n.\n */\nimport { Check, Circle, Clock, X } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n\ttype TimelineStatus,\n} from '../shared';\nimport {\n\tdefaultMilestonesTimelineStrings,\n\ttype MilestoneItem,\n\ttype MilestoneStatus,\n\ttype MilestonesTimelineProps,\n} from './types';\n\nconst STATUS_TO_TIMELINE: Record<MilestoneStatus, TimelineStatus> = {\n\tcompleted: 'completed',\n\tin_progress: 'current',\n\tupcoming: 'pending',\n\tblocked: 'error',\n};\n\nconst STATUS_ICON = {\n\tcompleted: Check,\n\tin_progress: Clock,\n\tupcoming: Circle,\n\tblocked: X,\n} as const;\n\nconst STATUS_BADGE: Record<MilestoneStatus, 'success' | 'primary' | 'secondary' | 'destructive'> = {\n\tcompleted: 'success',\n\tin_progress: 'primary',\n\tupcoming: 'secondary',\n\tblocked: 'destructive',\n};\n\nexport function MilestonesTimeline({\n\tmilestones,\n\tclassName,\n\tstrings: stringsProp,\n}: MilestonesTimelineProps) {\n\tconst strings = useStrings(defaultMilestonesTimelineStrings, stringsProp);\n\tconst labelByStatus: Record<MilestoneStatus, string> = {\n\t\tcompleted: strings.completed,\n\t\tin_progress: strings.in_progress,\n\t\tupcoming: strings.upcoming,\n\t\tblocked: strings.blocked,\n\t};\n\n\tconst items: TimelineItem[] = milestones.map((m: MilestoneItem) => ({\n\t\tid: m.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{m.title}\n\t\t\t\t</Text>\n\t\t\t\t<Badge tone={STATUS_BADGE[m.status]}>\n\t\t\t\t\t{labelByStatus[m.status]}\n\t\t\t\t</Badge>\n\t\t\t</span>\n\t\t),\n\t\tdescription: m.description,\n\t\ttimestamp: m.dueDate ? `${strings.dueOn} ${m.dueDate}` : undefined,\n\t\ticon: STATUS_ICON[m.status],\n\t\tstatus: STATUS_TO_TIMELINE[m.status],\n\t\tchildren:\n\t\t\tm.status === 'in_progress' && typeof m.progress === 'number' ? (\n\t\t\t\t<div className=\"space-y-space-xs\">\n\t\t\t\t\t<div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn('h-full rounded-full bg-primary transition-[width] duration-300')}\n\t\t\t\t\t\t\tstyle={{ width: `${Math.max(0, Math.min(100, m.progress))}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Percent value={Math.round(m.progress)} scaled size=\"xs\" type=\"secondary\" align=\"left\" />\n\t\t\t\t</div>\n\t\t\t) : undefined,\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"milestones-timeline\"\n\t\t\tdata-slot=\"milestones-timeline\"\n\t\t\tclassName={cn('milestones-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nMilestonesTimeline.displayName = 'MilestonesTimeline';\n"],"mappings":"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"}