themelia-react-ui 2.0.0 → 2.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 (707) hide show
  1. package/CHANGELOG.md +527 -0
  2. package/README.md +47 -14
  3. package/THIRD_PARTY_NOTICES.md +13 -0
  4. package/dist/accordion-Cjb6sx0G.js +208 -0
  5. package/dist/accordion-Cjb6sx0G.js.map +1 -0
  6. package/dist/action-menu-CllU52Mm.js +280 -0
  7. package/dist/action-menu-CllU52Mm.js.map +1 -0
  8. package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
  9. package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
  10. package/dist/ai-artifact-DvTwDVyL.js +1148 -0
  11. package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
  12. package/dist/{app-shell-BE_j8-AT.js → app-shell-C4FhvCqF.js} +5 -5
  13. package/dist/{app-shell-BE_j8-AT.js.map → app-shell-C4FhvCqF.js.map} +1 -1
  14. package/dist/attachment-BxDfL2mw.js +246 -0
  15. package/dist/attachment-BxDfL2mw.js.map +1 -0
  16. package/dist/{auth-M3vGMgDR.js → auth-ax2BqjrI.js} +241 -235
  17. package/dist/auth-ax2BqjrI.js.map +1 -0
  18. package/dist/{avatar-djdaaQ_s.js → avatar-DAPlDvhJ.js} +67 -66
  19. package/dist/avatar-DAPlDvhJ.js.map +1 -0
  20. package/dist/badge-HpFqoqSY.js +93 -0
  21. package/dist/badge-HpFqoqSY.js.map +1 -0
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +3 -0
  28. package/dist/base/buttons.js +2 -3
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +50 -46
  31. package/dist/base/carousel.js.map +1 -1
  32. package/dist/base/cascader.js +69 -81
  33. package/dist/base/cascader.js.map +1 -1
  34. package/dist/base/chart.js +1 -1
  35. package/dist/base/choice-inputs.js +3 -3
  36. package/dist/base/code-block.js +1 -1
  37. package/dist/base/combobox.js +2 -2
  38. package/dist/base/command.js +1 -1
  39. package/dist/base/copyable.js +1 -1
  40. package/dist/base/date-pickers.js +2 -2
  41. package/dist/base/display.js +7 -7
  42. package/dist/base/feedback.js +3 -3
  43. package/dist/base/forms-numeric.js +1 -1
  44. package/dist/base/forms.js +2 -2
  45. package/dist/base/inline-edit.js +20 -20
  46. package/dist/base/inline-edit.js.map +1 -1
  47. package/dist/base/item.js +1 -1
  48. package/dist/base/media-gallery.js +1 -1
  49. package/dist/base/metadata-list.js +3 -0
  50. package/dist/base/navigation.js +7 -7
  51. package/dist/base/popover-menu.js +1 -1
  52. package/dist/base/popover.js +1 -1
  53. package/dist/base/qr-code.js +1 -1
  54. package/dist/base/repeaters.js +216 -220
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +147 -137
  59. package/dist/base/signature-pad.js.map +1 -1
  60. package/dist/base/skeleton.js +1 -1
  61. package/dist/base/spinner.js +79 -2
  62. package/dist/base/spinner.js.map +1 -0
  63. package/dist/base/structure.js +1 -1
  64. package/dist/base/table.js +1 -1
  65. package/dist/base/text-inputs.js +2 -2
  66. package/dist/base/toaster.js +46 -45
  67. package/dist/base/toaster.js.map +1 -1
  68. package/dist/base/tree.js +1 -1
  69. package/dist/base/upload-queue.js +1 -1
  70. package/dist/base/upload.js +3 -3
  71. package/dist/base/value-inputs.js +2 -2
  72. package/dist/batch-action-bar-DnUJ21NQ.js +105 -0
  73. package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
  74. package/dist/blocks/admin.js +171 -169
  75. package/dist/blocks/admin.js.map +1 -1
  76. package/dist/blocks/ai.js +308 -285
  77. package/dist/blocks/ai.js.map +1 -1
  78. package/dist/blocks/analytics/usage-card.js +1 -1
  79. package/dist/blocks/analytics.js +626 -589
  80. package/dist/blocks/analytics.js.map +1 -1
  81. package/dist/blocks/collaboration.js +1 -1
  82. package/dist/blocks/commerce/receipt.js +1 -1
  83. package/dist/blocks/commerce.js +2051 -1329
  84. package/dist/blocks/commerce.js.map +1 -1
  85. package/dist/blocks/data-display.js +3 -2
  86. package/dist/blocks/onboarding.js +68 -58
  87. package/dist/blocks/onboarding.js.map +1 -1
  88. package/dist/blocks/planning.js +27 -26
  89. package/dist/blocks/planning.js.map +1 -1
  90. package/dist/blocks/timelines.js +1 -1
  91. package/dist/breadcrumbs-C-oqs1sQ.js +129 -0
  92. package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
  93. package/dist/{button-R9CCoH7A.js → button-DVzspB_G.js} +15 -14
  94. package/dist/button-DVzspB_G.js.map +1 -0
  95. package/dist/{button-BS3KDg00.js → buttons-DPZekJFu.js} +208 -216
  96. package/dist/buttons-DPZekJFu.js.map +1 -0
  97. package/dist/cards-BaBZR-AU.js +68 -0
  98. package/dist/cards-BaBZR-AU.js.map +1 -0
  99. package/dist/{chart-DwYRKKc-.js → chart-ZOYyK2xG.js} +58 -55
  100. package/dist/chart-ZOYyK2xG.js.map +1 -0
  101. package/dist/checkbox-AWIhNhmo.js +36 -0
  102. package/dist/checkbox-AWIhNhmo.js.map +1 -0
  103. package/dist/choice-inputs-CNHvARCJ.js +770 -0
  104. package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
  105. package/dist/code-block-DeneBJR_.js +185 -0
  106. package/dist/code-block-DeneBJR_.js.map +1 -0
  107. package/dist/{collapsible-oMUGM4tr.js → collapsible-C-_l4hpy.js} +4 -4
  108. package/dist/{collapsible-oMUGM4tr.js.map → collapsible-C-_l4hpy.js.map} +1 -1
  109. package/dist/{collection-content-Ys-OZOkY.js → collection-content-By56pLog.js} +3 -3
  110. package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-By56pLog.js.map} +1 -1
  111. package/dist/combobox-C0EQW6dr.js +875 -0
  112. package/dist/combobox-C0EQW6dr.js.map +1 -0
  113. package/dist/combobox-xCQ2RMNE.js +309 -0
  114. package/dist/combobox-xCQ2RMNE.js.map +1 -0
  115. package/dist/{command-kPMPjIxJ.js → command-C25VMRII.js} +7 -7
  116. package/dist/{command-kPMPjIxJ.js.map → command-C25VMRII.js.map} +1 -1
  117. package/dist/{comments-You0Bzbr.js → comments-BYYlTA8E.js} +390 -379
  118. package/dist/comments-BYYlTA8E.js.map +1 -0
  119. package/dist/components/base/action-menu/action-menu.d.ts +21 -4
  120. package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
  121. package/dist/components/base/action-menu/index.d.ts +1 -0
  122. package/dist/components/base/badge/badge.recipes.d.ts +5 -5
  123. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  124. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  125. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  126. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  127. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  128. package/dist/components/base/buttons/loader-button.d.ts +2 -1
  129. package/dist/components/base/cards/card.recipes.d.ts +2 -3
  130. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
  131. package/dist/components/base/cards/smart-card.types.d.ts +11 -4
  132. package/dist/components/base/chart/chart.d.ts +2 -5
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
  135. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  136. package/dist/components/base/combobox/index.d.ts +30 -4
  137. package/dist/components/base/display/alert-dialog.d.ts +6 -5
  138. package/dist/components/base/display/dialog.d.ts +4 -8
  139. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  140. package/dist/components/base/forms/form-sizing.d.ts +26 -15
  141. package/dist/components/base/metadata-list/index.d.ts +12 -0
  142. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  143. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  144. package/dist/components/base/navigation/index.d.ts +1 -1
  145. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  146. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  147. package/dist/components/base/navigation/page-header/page-header.d.ts +26 -3
  148. package/dist/components/base/navigation/pagination.d.ts +5 -2
  149. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  150. package/dist/components/base/sheet/sheet.d.ts +4 -8
  151. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  152. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  153. package/dist/components/base/table/index.d.ts +9 -2
  154. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  155. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  156. package/dist/components/base/upload/upload.recipes.d.ts +25 -3
  157. package/dist/components/base/value-inputs/index.d.ts +5 -5
  158. package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
  159. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  160. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  161. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  162. package/dist/components/blocks/commerce/address-card/types.d.ts +2 -1
  163. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  164. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  165. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  166. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  167. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  168. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  169. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  170. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  171. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +45 -0
  172. package/dist/components/blocks/commerce/index.d.ts +13 -5
  173. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  174. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  175. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  176. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  177. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  178. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  179. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  180. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  181. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  182. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  183. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  184. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  185. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  186. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  187. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  188. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  189. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  190. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  191. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  192. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  193. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  194. package/dist/components/blocks/commerce/payment-method/types.d.ts +12 -1
  195. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  196. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  197. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  198. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  199. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  200. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  201. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  202. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  203. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  204. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  205. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  206. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  207. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  208. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  209. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  210. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  211. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  212. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  213. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  214. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  215. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  216. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  217. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  218. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  219. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  220. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  221. package/dist/components/features/combobox/types.d.ts +4 -0
  222. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  223. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  224. package/dist/components/features/kanban/kanban.d.ts +1 -1
  225. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  226. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  227. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  228. package/dist/components/features/media-library/index.d.ts +1 -1
  229. package/dist/components/features/media-library/media-library.d.ts +1 -1
  230. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  231. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  232. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  233. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  234. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  235. package/dist/components/features/overlays/dialog.d.ts +1 -1
  236. package/dist/components/features/overlays/index.d.ts +1 -1
  237. package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
  238. package/dist/components/features/overlays/overlays.types.d.ts +20 -0
  239. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  240. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  241. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  242. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  243. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  244. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  245. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  246. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  247. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  248. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  249. package/dist/components/features/products/products.types.d.ts +9 -2
  250. package/dist/components/features/resource/index.d.ts +1 -1
  251. package/dist/components/features/resource/resource.d.ts +1 -1
  252. package/dist/components/features/resource/resource.types.d.ts +34 -6
  253. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  254. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  255. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  256. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  257. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +7 -1
  258. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  259. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +54 -1
  260. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  261. package/dist/components/features/sync/index.d.ts +26 -3
  262. package/dist/components/features/table/data-table.d.ts +1 -1
  263. package/dist/components/features/table/table-header.d.ts +1 -1
  264. package/dist/components/features/table/table.strings.d.ts +55 -1
  265. package/dist/components/features/table/table.types.d.ts +49 -11
  266. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  267. package/dist/components/layout/page/index.d.ts +1 -1
  268. package/dist/components/layout/page/page.types.d.ts +33 -36
  269. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  270. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  271. package/dist/components/layout/settings/settings.d.ts +16 -2
  272. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  273. package/dist/components/primitives/number.d.ts +4 -2
  274. package/dist/components/primitives/value.d.ts +3 -1
  275. package/dist/components/typography/rich-text/index.d.ts +1 -1
  276. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  277. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  278. package/dist/components/typography/text-link.d.ts +8 -3
  279. package/dist/components/ui/checkbox.d.ts +4 -3
  280. package/dist/components/ui/combobox.d.ts +6 -2
  281. package/dist/components/ui/item.d.ts +8 -8
  282. package/dist/components/ui/overlay.recipes.d.ts +0 -9
  283. package/dist/components/ui/switch.d.ts +2 -2
  284. package/dist/components/ui/tabs.d.ts +1 -1
  285. package/dist/{containers-D_L4mTVb.js → containers-Mu1LMGV1.js} +36 -35
  286. package/dist/containers-Mu1LMGV1.js.map +1 -0
  287. package/dist/{copyable-DDjTeW_j.js → copyable-ClBuk_UK.js} +6 -6
  288. package/dist/{copyable-DDjTeW_j.js.map → copyable-ClBuk_UK.js.map} +1 -1
  289. package/dist/data-display-DT_khPl_.js +971 -0
  290. package/dist/data-display-DT_khPl_.js.map +1 -0
  291. package/dist/{date-uf3z37Nm.js → date-DCrsDTZc.js} +5 -5
  292. package/dist/{date-uf3z37Nm.js.map → date-DCrsDTZc.js.map} +1 -1
  293. package/dist/date-picker-ay0Pha_a.js +1530 -0
  294. package/dist/date-picker-ay0Pha_a.js.map +1 -0
  295. package/dist/date-pickers-Ccw8DL2b.js +175 -0
  296. package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
  297. package/dist/display-hAc1HjpI.js +344 -0
  298. package/dist/display-hAc1HjpI.js.map +1 -0
  299. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  300. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  301. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  302. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  303. package/dist/features/activities.js +478 -542
  304. package/dist/features/activities.js.map +1 -1
  305. package/dist/features/ai-chat.js +209 -199
  306. package/dist/features/ai-chat.js.map +1 -1
  307. package/dist/features/appointment-calendar.js +683 -0
  308. package/dist/features/appointment-calendar.js.map +1 -0
  309. package/dist/features/async-preview.js +109 -107
  310. package/dist/features/async-preview.js.map +1 -1
  311. package/dist/features/combobox.js +1 -1
  312. package/dist/features/comments.js +1 -1
  313. package/dist/features/data-view.js +30 -29
  314. package/dist/features/data-view.js.map +1 -1
  315. package/dist/features/email-composer/engine.js +1 -1
  316. package/dist/features/email-composer.js +285 -283
  317. package/dist/features/email-composer.js.map +1 -1
  318. package/dist/features/event-calendar.js +282 -273
  319. package/dist/features/event-calendar.js.map +1 -1
  320. package/dist/features/filters.js +1 -1
  321. package/dist/features/global-search.js +318 -318
  322. package/dist/features/global-search.js.map +1 -1
  323. package/dist/features/kanban.js +146 -147
  324. package/dist/features/kanban.js.map +1 -1
  325. package/dist/features/map.js +269 -268
  326. package/dist/features/map.js.map +1 -1
  327. package/dist/features/media-library.js +970 -863
  328. package/dist/features/media-library.js.map +1 -1
  329. package/dist/features/mentions.js +1 -1
  330. package/dist/features/overlays.js +1 -1
  331. package/dist/features/products.js +1137 -1124
  332. package/dist/features/products.js.map +1 -1
  333. package/dist/features/questionnaire.js +206 -194
  334. package/dist/features/questionnaire.js.map +1 -1
  335. package/dist/features/resource-assignment.js +24 -21
  336. package/dist/features/resource-assignment.js.map +1 -1
  337. package/dist/features/resource.js +77 -69
  338. package/dist/features/resource.js.map +1 -1
  339. package/dist/features/rich-text-editor.js +30 -11
  340. package/dist/features/rich-text-editor.js.map +1 -1
  341. package/dist/features/schema-form.js +35 -33
  342. package/dist/features/schema-form.js.map +1 -1
  343. package/dist/features/suggestions.js +3 -3
  344. package/dist/features/sync.js +11 -5
  345. package/dist/features/sync.js.map +1 -1
  346. package/dist/features/table.js +1 -1
  347. package/dist/features/theme-tweaker.js +501 -496
  348. package/dist/features/theme-tweaker.js.map +1 -1
  349. package/dist/feedback-BYIhtitP.js +239 -0
  350. package/dist/feedback-BYIhtitP.js.map +1 -0
  351. package/dist/field-affordance-recipes-DZhnIL_Y.js +41 -0
  352. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  353. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  354. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  355. package/dist/{filters-Da-gNPsE.js → filters-BGfvjP4d.js} +483 -472
  356. package/dist/filters-BGfvjP4d.js.map +1 -0
  357. package/dist/focus-recipes-B653VaLq.js +12 -0
  358. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  359. package/dist/{form-field-VZRULhUK.js → form-field-CwH9y77i.js} +6 -5
  360. package/dist/form-field-CwH9y77i.js.map +1 -0
  361. package/dist/{form-sizing-uWP4lzVh.js → form-sizing-BdP_Mf5p.js} +45 -46
  362. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  363. package/dist/{forms-DDeEnXSY.js → forms-B9G_xwzi.js} +22 -22
  364. package/dist/{forms-DDeEnXSY.js.map → forms-B9G_xwzi.js.map} +1 -1
  365. package/dist/forms-numeric-B_jraJaQ.js +906 -0
  366. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  367. package/dist/{header-2ycNqGOR.js → header-CGXuhcRm.js} +164 -161
  368. package/dist/header-CGXuhcRm.js.map +1 -0
  369. package/dist/{hooks-DQ5SPwZw.js → hooks-Dkz0K2WT.js} +2 -2
  370. package/dist/{hooks-DQ5SPwZw.js.map → hooks-Dkz0K2WT.js.map} +1 -1
  371. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  372. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  373. package/dist/icon-badge-DYKIwvOV.js +55 -0
  374. package/dist/icon-badge-DYKIwvOV.js.map +1 -0
  375. package/dist/index.js +7 -7
  376. package/dist/input-CZw8iU99.js +21 -0
  377. package/dist/input-CZw8iU99.js.map +1 -0
  378. package/dist/input-DQdEd0YD.js +263 -0
  379. package/dist/input-DQdEd0YD.js.map +1 -0
  380. package/dist/interaction-recipes-XR9ZpVYL.js +25 -0
  381. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  382. package/dist/item-K5_ghvze.js +275 -0
  383. package/dist/item-K5_ghvze.js.map +1 -0
  384. package/dist/layer-recipes-CCpklYME.js +13 -0
  385. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  386. package/dist/layout/app-shell.js +1 -1
  387. package/dist/layout/auth.js +1 -1
  388. package/dist/layout/containers.js +1 -1
  389. package/dist/layout/header.js +1 -1
  390. package/dist/layout/hooks.js +1 -1
  391. package/dist/layout/navigation.js +1 -1
  392. package/dist/layout/page.js +1 -1
  393. package/dist/layout/settings.js +1 -1
  394. package/dist/layout/sidebar.js +2 -2
  395. package/dist/layout/workspace.js +1 -1
  396. package/dist/layout.js +10 -10
  397. package/dist/lib/affordance-geometry.generated.d.ts +72 -0
  398. package/dist/lib/editable-text-recipe.d.ts +4 -4
  399. package/dist/lib/field-affordance-recipes.d.ts +8 -3
  400. package/dist/lib/field-state-recipes.d.ts +9 -8
  401. package/dist/lib/focus-recipes.d.ts +24 -0
  402. package/dist/lib/interaction-recipes.d.ts +40 -0
  403. package/dist/lib/layer-recipes.d.ts +19 -0
  404. package/dist/lib/motion-recipes.d.ts +1 -0
  405. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
  406. package/dist/lib/safe-image-src.d.ts +10 -0
  407. package/dist/lib/sanitize-html.d.ts +15 -3
  408. package/dist/lib/surface-recipes.d.ts +47 -7
  409. package/dist/lib/theme-mode-css.d.ts +7 -0
  410. package/dist/lib/token-merge.generated.d.ts +9 -6
  411. package/dist/lib/tone-recipes.d.ts +87 -0
  412. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  413. package/dist/lib/ui-provider/index.d.ts +2 -2
  414. package/dist/lib/ui-provider/types.d.ts +11 -2
  415. package/dist/lib/utils.js +1 -1
  416. package/dist/media-gallery-3zIVLMWH.js +203 -0
  417. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  418. package/dist/mentions-utuUvH1K.js +570 -0
  419. package/dist/mentions-utuUvH1K.js.map +1 -0
  420. package/dist/{message-YfFmbXNP.js → message-DZ_ruyUV.js} +7 -6
  421. package/dist/message-DZ_ruyUV.js.map +1 -0
  422. package/dist/metadata-list-8N16ZMW_.js +405 -0
  423. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  424. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  425. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  426. package/dist/navigation-Bnotn4AQ.js +145 -0
  427. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  428. package/dist/navigation-BzhHI3lo.js +269 -0
  429. package/dist/navigation-BzhHI3lo.js.map +1 -0
  430. package/dist/{navigation-row-recipes-DlU-4QYO.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  431. package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  432. package/dist/{number-CKRBYmZK.js → number-DbV1Dija.js} +36 -34
  433. package/dist/{number-CKRBYmZK.js.map → number-DbV1Dija.js.map} +1 -1
  434. package/dist/overflow-tab-bar-CWY7Nogn.js +282 -0
  435. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  436. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  437. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  438. package/dist/overlays-DNWmZrJ4.js +1001 -0
  439. package/dist/overlays-DNWmZrJ4.js.map +1 -0
  440. package/dist/page-Bgl1F560.js +224 -0
  441. package/dist/page-Bgl1F560.js.map +1 -0
  442. package/dist/page-header-commands-DOb6WsfD.js +126 -0
  443. package/dist/page-header-commands-DOb6WsfD.js.map +1 -0
  444. package/dist/pagination-BL25hu2s.js +158 -0
  445. package/dist/pagination-BL25hu2s.js.map +1 -0
  446. package/dist/{popover-Dcv_9jxr.js → popover-7_m66eYW.js} +11 -10
  447. package/dist/popover-7_m66eYW.js.map +1 -0
  448. package/dist/popover-menu-B9WWygpa.js +100 -0
  449. package/dist/popover-menu-B9WWygpa.js.map +1 -0
  450. package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-D3j8R8Yp.js} +18 -11
  451. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  452. package/dist/{primitives-BHrwQXFC.js → primitives-BFK08r9M.js} +45 -44
  453. package/dist/primitives-BFK08r9M.js.map +1 -0
  454. package/dist/primitives.js +4 -4
  455. package/dist/{progress-Br9WTFya.js → progress-B1VnCT0K.js} +9 -9
  456. package/dist/{progress-Br9WTFya.js.map → progress-B1VnCT0K.js.map} +1 -1
  457. package/dist/{receipt-CV89q1fs.js → receipt-BVSOH3Xo.js} +9 -6
  458. package/dist/{receipt-CV89q1fs.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  459. package/dist/rich-text-GOUyKQ-s.js +78 -0
  460. package/dist/rich-text-GOUyKQ-s.js.map +1 -0
  461. package/dist/rich-text-editor-cRLC-eBK.js +1196 -0
  462. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  463. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  464. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  465. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  466. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  467. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  468. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  469. package/dist/sanitize-html-DsQmI48u.js +92 -0
  470. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  471. package/dist/scroll-area-DcI-M1UT.js +48 -0
  472. package/dist/scroll-area-DcI-M1UT.js.map +1 -0
  473. package/dist/{separator-Do5GWDYi.js → separator-BDV-Y648.js} +3 -3
  474. package/dist/{separator-Do5GWDYi.js.map → separator-BDV-Y648.js.map} +1 -1
  475. package/dist/{separator-BMEvwnSX.js → separator-Bom7NsGO.js} +2 -2
  476. package/dist/{separator-BMEvwnSX.js.map → separator-Bom7NsGO.js.map} +1 -1
  477. package/dist/services/actions/action-adapters.d.ts +18 -0
  478. package/dist/services/actions/index.d.ts +1 -1
  479. package/dist/services/actions.js +16 -4
  480. package/dist/services/actions.js.map +1 -1
  481. package/dist/settings-ybnjVwbd.js +171 -0
  482. package/dist/settings-ybnjVwbd.js.map +1 -0
  483. package/dist/sheet-CGpB3omz.js +211 -0
  484. package/dist/sheet-CGpB3omz.js.map +1 -0
  485. package/dist/{sidebar-Cb8WzOvE.js → sidebar-A0ElHINE.js} +17 -16
  486. package/dist/sidebar-A0ElHINE.js.map +1 -0
  487. package/dist/{sidebar-Crc9M9JV.js → sidebar-CPx_7YBa.js} +205 -203
  488. package/dist/sidebar-CPx_7YBa.js.map +1 -0
  489. package/dist/{skeleton-DVMXr15h.js → skeleton-Byjnt7qr.js} +9 -9
  490. package/dist/{skeleton-DVMXr15h.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  491. package/dist/smart-card-DiC5aac3.js +604 -0
  492. package/dist/smart-card-DiC5aac3.js.map +1 -0
  493. package/dist/{structure-hzCW-XsV.js → structure-BmisBK-3.js} +2 -2
  494. package/dist/{structure-hzCW-XsV.js.map → structure-BmisBK-3.js.map} +1 -1
  495. package/dist/style.css +1 -1
  496. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  497. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  498. package/dist/table-BweFy_P9.js +1530 -0
  499. package/dist/table-BweFy_P9.js.map +1 -0
  500. package/dist/table-DsfzoUia.js +175 -0
  501. package/dist/table-DsfzoUia.js.map +1 -0
  502. package/dist/tabs-CDocW5D1.js +191 -0
  503. package/dist/tabs-CDocW5D1.js.map +1 -0
  504. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  505. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  506. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  507. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  508. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  509. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  510. package/dist/theme.css +285 -228
  511. package/dist/themes/green.css +16 -12
  512. package/dist/timelines-CwM_9IhD.js +457 -0
  513. package/dist/timelines-CwM_9IhD.js.map +1 -0
  514. package/dist/tone-recipes-BPsRAvhu.js +73 -0
  515. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  516. package/dist/tooltip-yiRJUFjp.js +111 -0
  517. package/dist/tooltip-yiRJUFjp.js.map +1 -0
  518. package/dist/{tree-BotPlyiD.js → tree-WnKQzwbq.js} +69 -67
  519. package/dist/tree-WnKQzwbq.js.map +1 -0
  520. package/dist/typography/rich-text.js +1 -1
  521. package/dist/typography-UTnveOEy.js +117 -0
  522. package/dist/typography-UTnveOEy.js.map +1 -0
  523. package/dist/typography.js +2 -2
  524. package/dist/{ui-provider-D2_TeLqw.js → ui-provider-C_U0Xma4.js} +13 -5
  525. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  526. package/dist/ui-provider.js +3 -3
  527. package/dist/{upload-B0WHW7ak.js → upload-CXyxmQBP.js} +210 -209
  528. package/dist/upload-CXyxmQBP.js.map +1 -0
  529. package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-Boscubn9.js} +111 -111
  530. package/dist/upload-queue-Boscubn9.js.map +1 -0
  531. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  532. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  533. package/dist/{usage-card-U0YBLTNT.js → usage-card-BhO5eqkX.js} +45 -29
  534. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  535. package/dist/{utils-Cospvlj1.js → utils-BRhFDwuU.js} +114 -67
  536. package/dist/utils-BRhFDwuU.js.map +1 -0
  537. package/dist/value-inputs-DXPDjvBU.js +963 -0
  538. package/dist/value-inputs-DXPDjvBU.js.map +1 -0
  539. package/dist/{value-typography-Deb3yQZg.js → value-typography-BP8OG6h5.js} +2 -2
  540. package/dist/{value-typography-Deb3yQZg.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  541. package/dist/workspace-Cdrg7k9f.js +408 -0
  542. package/dist/workspace-Cdrg7k9f.js.map +1 -0
  543. package/docs/consumer-skill/SKILL.md +21 -22
  544. package/docs/consumer-skill/examples/app-layout.tsx +1 -1
  545. package/docs/consumer-skill/examples/composition.tsx +3 -3
  546. package/docs/consumer-skill/examples/detail.tsx +59 -12
  547. package/docs/consumer-skill/examples/edit.tsx +1 -1
  548. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  549. package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
  550. package/docs/consumer-skill/examples/website.tsx +1 -1
  551. package/docs/consumer-skill/references/agents-md.md +33 -0
  552. package/docs/consumer-skill/references/analytics.md +1 -1
  553. package/docs/consumer-skill/references/composition.md +58 -13
  554. package/docs/consumer-skill/references/design-contract.md +12 -3
  555. package/docs/consumer-skill/references/installation.md +11 -1
  556. package/docs/consumer-skill/references/integration.md +4 -3
  557. package/docs/consumer-skill/references/public-api.json +956 -453
  558. package/docs/consumer-skill/references/review.md +32 -5
  559. package/docs/consumer-skill/references/theming.md +78 -9
  560. package/docs/consumer-skill/references/tokens.json +1 -1
  561. package/docs/consumer-skill/references/workflows.md +54 -10
  562. package/docs/consumer-skill/scripts/composition-policy.mjs +42 -11
  563. package/docs/consumer-skill/scripts/surface-policy.mjs +150 -5
  564. package/package.json +17 -5
  565. package/dist/accordion-CQXVcd7Q.js +0 -205
  566. package/dist/accordion-CQXVcd7Q.js.map +0 -1
  567. package/dist/action-menu-BTpyPWJ2.js +0 -264
  568. package/dist/action-menu-BTpyPWJ2.js.map +0 -1
  569. package/dist/affordance-geometry.generated-CCIXb2A1.js +0 -68
  570. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
  571. package/dist/ai-artifact-2PQ2fItc.js +0 -1112
  572. package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
  573. package/dist/attachment-q69dlt5Y.js +0 -244
  574. package/dist/attachment-q69dlt5Y.js.map +0 -1
  575. package/dist/auth-M3vGMgDR.js.map +0 -1
  576. package/dist/avatar-djdaaQ_s.js.map +0 -1
  577. package/dist/badge-0tATj-tW.js +0 -92
  578. package/dist/badge-0tATj-tW.js.map +0 -1
  579. package/dist/breadcrumbs-BG_FfMK4.js +0 -128
  580. package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
  581. package/dist/button-BS3KDg00.js.map +0 -1
  582. package/dist/button-R9CCoH7A.js.map +0 -1
  583. package/dist/buttons-DS0ZIwJ_.js +0 -99
  584. package/dist/buttons-DS0ZIwJ_.js.map +0 -1
  585. package/dist/cards-QoJ4syG9.js +0 -66
  586. package/dist/cards-QoJ4syG9.js.map +0 -1
  587. package/dist/chart-DwYRKKc-.js.map +0 -1
  588. package/dist/checkbox-B7ygNTYp.js +0 -35
  589. package/dist/checkbox-B7ygNTYp.js.map +0 -1
  590. package/dist/choice-inputs-DrJ17tpL.js +0 -752
  591. package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
  592. package/dist/code-block-CD0B7M93.js +0 -183
  593. package/dist/code-block-CD0B7M93.js.map +0 -1
  594. package/dist/combobox-6dvVny2q.js +0 -272
  595. package/dist/combobox-6dvVny2q.js.map +0 -1
  596. package/dist/combobox-CB7039j7.js +0 -865
  597. package/dist/combobox-CB7039j7.js.map +0 -1
  598. package/dist/comments-You0Bzbr.js.map +0 -1
  599. package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
  600. package/dist/containers-D_L4mTVb.js.map +0 -1
  601. package/dist/data-display-3xWQUnMA.js +0 -1335
  602. package/dist/data-display-3xWQUnMA.js.map +0 -1
  603. package/dist/date-picker-DrDFj8Lo.js +0 -1527
  604. package/dist/date-picker-DrDFj8Lo.js.map +0 -1
  605. package/dist/date-pickers-CnFCb0n2.js +0 -174
  606. package/dist/date-pickers-CnFCb0n2.js.map +0 -1
  607. package/dist/display-DrdvPwF0.js +0 -343
  608. package/dist/display-DrdvPwF0.js.map +0 -1
  609. package/dist/dropdown-menu-CURh59jb.js +0 -193
  610. package/dist/dropdown-menu-CURh59jb.js.map +0 -1
  611. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  612. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  613. package/dist/feedback-C7nR0UtT.js +0 -232
  614. package/dist/feedback-C7nR0UtT.js.map +0 -1
  615. package/dist/field-affordance-recipes-CkOCdE2y.js +0 -46
  616. package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
  617. package/dist/field-state-recipes-C-MFBX_8.js +0 -11
  618. package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
  619. package/dist/filters-Da-gNPsE.js.map +0 -1
  620. package/dist/form-field-VZRULhUK.js.map +0 -1
  621. package/dist/form-sizing-uWP4lzVh.js.map +0 -1
  622. package/dist/forms-numeric-D3CO60IF.js +0 -905
  623. package/dist/forms-numeric-D3CO60IF.js.map +0 -1
  624. package/dist/header-2ycNqGOR.js.map +0 -1
  625. package/dist/icon-badge-DKlaKXoo.js +0 -53
  626. package/dist/icon-badge-DKlaKXoo.js.map +0 -1
  627. package/dist/input-BoLm9Hks.js +0 -20
  628. package/dist/input-BoLm9Hks.js.map +0 -1
  629. package/dist/input-DhQdBnV3.js +0 -255
  630. package/dist/input-DhQdBnV3.js.map +0 -1
  631. package/dist/item-xzh8Df65.js +0 -264
  632. package/dist/item-xzh8Df65.js.map +0 -1
  633. package/dist/media-gallery-DQUQ0m3O.js +0 -201
  634. package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
  635. package/dist/mentions-DwnO1hh4.js +0 -564
  636. package/dist/mentions-DwnO1hh4.js.map +0 -1
  637. package/dist/message-YfFmbXNP.js.map +0 -1
  638. package/dist/navigation-Cbp5V8gG.js +0 -264
  639. package/dist/navigation-Cbp5V8gG.js.map +0 -1
  640. package/dist/navigation-Cs1npsPm.js +0 -300
  641. package/dist/navigation-Cs1npsPm.js.map +0 -1
  642. package/dist/overlay.recipes-CNO2S9V6.js +0 -34
  643. package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
  644. package/dist/overlays-DhZO7N-I.js +0 -994
  645. package/dist/overlays-DhZO7N-I.js.map +0 -1
  646. package/dist/page-C6R_8jFt.js +0 -325
  647. package/dist/page-C6R_8jFt.js.map +0 -1
  648. package/dist/page-header-hUTzcRZX.js +0 -112
  649. package/dist/page-header-hUTzcRZX.js.map +0 -1
  650. package/dist/pagination-Cm0jqa3I.js +0 -149
  651. package/dist/pagination-Cm0jqa3I.js.map +0 -1
  652. package/dist/popover-Dcv_9jxr.js.map +0 -1
  653. package/dist/popover-menu-DnRFKnHP.js +0 -99
  654. package/dist/popover-menu-DnRFKnHP.js.map +0 -1
  655. package/dist/popover.recipes-wmbvL8Ah.js.map +0 -1
  656. package/dist/primitives-BHrwQXFC.js.map +0 -1
  657. package/dist/rich-text-editor-CF8QYt5p.js +0 -574
  658. package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
  659. package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
  660. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +0 -1
  661. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  662. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  663. package/dist/rich-text-j-FGAeZW.js +0 -32
  664. package/dist/rich-text-j-FGAeZW.js.map +0 -1
  665. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  666. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  667. package/dist/scroll-area-DRdr16Pt.js +0 -47
  668. package/dist/scroll-area-DRdr16Pt.js.map +0 -1
  669. package/dist/settings-DHk0L2MF.js +0 -161
  670. package/dist/settings-DHk0L2MF.js.map +0 -1
  671. package/dist/sheet-DRFNY1_D.js +0 -207
  672. package/dist/sheet-DRFNY1_D.js.map +0 -1
  673. package/dist/sidebar-Cb8WzOvE.js.map +0 -1
  674. package/dist/sidebar-Crc9M9JV.js.map +0 -1
  675. package/dist/smart-card-Bek-TwUp.js +0 -599
  676. package/dist/smart-card-Bek-TwUp.js.map +0 -1
  677. package/dist/spinner-CmTAbEp0.js +0 -80
  678. package/dist/spinner-CmTAbEp0.js.map +0 -1
  679. package/dist/surface-recipes-DOdoBXGm.js +0 -28
  680. package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
  681. package/dist/table-D6zKeYQX.js +0 -162
  682. package/dist/table-D6zKeYQX.js.map +0 -1
  683. package/dist/table-Dn4XSrSB.js +0 -1444
  684. package/dist/table-Dn4XSrSB.js.map +0 -1
  685. package/dist/tabs-Dk8E_knt.js +0 -189
  686. package/dist/tabs-Dk8E_knt.js.map +0 -1
  687. package/dist/text-inputs-BFpku0Qd.js +0 -331
  688. package/dist/text-inputs-BFpku0Qd.js.map +0 -1
  689. package/dist/theme-scope-kStaAer0.js +0 -39
  690. package/dist/theme-scope-kStaAer0.js.map +0 -1
  691. package/dist/timelines-CxuAFIc2.js +0 -439
  692. package/dist/timelines-CxuAFIc2.js.map +0 -1
  693. package/dist/tree-BotPlyiD.js.map +0 -1
  694. package/dist/typography-CAr3dQhX.js +0 -116
  695. package/dist/typography-CAr3dQhX.js.map +0 -1
  696. package/dist/ui-provider-D2_TeLqw.js.map +0 -1
  697. package/dist/upload-B0WHW7ak.js.map +0 -1
  698. package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
  699. package/dist/usage-card-U0YBLTNT.js.map +0 -1
  700. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  701. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  702. package/dist/utils-Cospvlj1.js.map +0 -1
  703. package/dist/value-inputs-CjfzGMsN.js +0 -854
  704. package/dist/value-inputs-CjfzGMsN.js.map +0 -1
  705. package/dist/workspace-YoFjXi6i.js +0 -394
  706. package/dist/workspace-YoFjXi6i.js.map +0 -1
  707. /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-BzhHI3lo.js","names":["Text","DisplayLabel","focusRecipes","Stack","toneRecipes","interactionRecipes","Percent","Badge","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","defaultBreadcrumbProgressStrings","BreadcrumbProgress","stringsProp","strings","useStrings","cn","className","currentIndex","steps","isCompleted","idx","isCurrent","isClickable","onStepClick","Button","step","Check","CategoryNav","title","items","Icon","it","active","activeId","onSelect","ChevronRight","defaultSectionNavStrings","SectionNav","forwardRef","ariaLabel","rootProps","setActive","useState","useEffect","obs","visible","entries","el","rootMargin","isActive","e","defaultSideNavStrings","normalizePath","rawUrl","baseOrigin","trimmed","isSimpleText","value","SideNav","groupsProp","groups","useMemo","activePath","currentPath","activeNormalized","g","item","normalizedPath","b","a","collapsed","setCollapsed","toggleGroup","prev","id","resolvedActive","activeItemClassName","isCollapsed","group","showLabel","shouldRenderItems","ChevronDown","itemClassName"],"sources":["../src/components/layout/navigation/breadcrumb-progress/types.ts","../src/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.tsx","../src/components/layout/navigation/category-nav/category-nav.tsx","../src/components/layout/navigation/section-nav/section-nav.tsx","../src/components/layout/navigation/side-nav.tsx"],"sourcesContent":["import type { StringsProp } from '../../../../lib/strings';\n\nexport interface BreadcrumbProgressStep {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Short guidance shown beneath the control. */\n\thint?: string;\n}\n\nexport interface BreadcrumbProgressStrings {\n\tstepLabel: string;\n\tofLabel: string;\n}\n\nexport const defaultBreadcrumbProgressStrings: BreadcrumbProgressStrings = {\n\tstepLabel: 'Step',\n\tofLabel: 'of',\n};\n\nexport interface BreadcrumbProgressProps {\n\t/** Steps in the flow, in order. */\n\tsteps: BreadcrumbProgressStep[];\n\t/** Zero-based position of the active step. */\n\tcurrentIndex: number;\n\tonStepClick?: (id: string, index: number) => void;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<BreadcrumbProgressStrings>;\n}\n","/**\n * BreadcrumbProgress — wizard / multi-step navigation with completed,\n * current, and upcoming states. Click any completed step to jump back.\n */\nimport { Check } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultBreadcrumbProgressStrings,\n\ttype BreadcrumbProgressProps,\n} from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\nexport function BreadcrumbProgress({ steps, currentIndex, onStepClick, className, strings: stringsProp }: BreadcrumbProgressProps) {\n\tconst strings = useStrings(defaultBreadcrumbProgressStrings, stringsProp);\n\n\treturn (\n\t\t<div className={cn('breadcrumb-progress--component', 'w-full', className)}>\n\t\t\t<div className=\"flex items-center justify-between mb-space-md\">\n\t\t\t\t<DisplayLabel>\n\t\t\t\t\t{strings.stepLabel} {currentIndex + 1} {strings.ofLabel} {steps.length}\n\t\t\t\t</DisplayLabel>\n\t\t\t\t<Percent value={Math.round(((currentIndex + 1) / steps.length) * 100)} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t</div>\n\t\t\t<ol className=\"m-0 list-none p-0 font-sans flex items-center gap-space-md\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isCompleted = idx < currentIndex;\n\t\t\t\t\tconst isCurrent = idx === currentIndex;\n\t\t\t\t\tconst isClickable = onStepClick && (isCompleted || isCurrent);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={step.id} className=\"flex min-w-0 flex-1 items-center gap-space-md\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={`${strings.stepLabel} ${idx + 1}: ${step.label}`}\n\t\t\t\t\t\t\t\tonClick={() => isClickable && onStepClick?.(step.id, idx)}\n\t\t\t\t\t\t\t\tdisabled={!isClickable}\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'min-w-0 justify-start gap-space-md text-left transition-colors',\n\t\t\t\t\t\t\t\t\tisClickable && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t!isClickable && 'cursor-default',\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<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\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'flex size-6 shrink-0 items-center justify-center rounded-full tabular-nums',\n\t\t\t\t\t\t\t\t\t\tisCompleted && 'bg-success text-success-foreground',\n\t\t\t\t\t\t\t\t\t\tisCurrent && `bg-primary text-primary-foreground ring-4 ${toneRecipes.primary.halo}`,\n\t\t\t\t\t\t\t\t\t\t!isCompleted && !isCurrent && 'bg-muted text-muted-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{isCompleted ? <Check className=\"size-icon-md\" /> : idx + 1}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<div className=\"hidden min-w-0 lg:block\">\n\t\t\t\t\t\t\t\t\t<Text weight=\"semibold\" className={cn(!isCurrent && !isCompleted && 'text-muted-foreground')}>{step.label}</Text>\n\t\t\t\t\t\t\t\t\t{!!step.hint && <Text size=\"xs\" type=\"discrete\" className=\"truncate\">{step.hint}</Text>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{idx < steps.length - 1 && (\n\t\t\t\t\t\t\t\t<div className={cn('h-px flex-1', isCompleted ? 'bg-success' : 'bg-border')} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</div>\n\t);\n}\n\nBreadcrumbProgress.displayName = 'BreadcrumbProgress';\n","/**\n * CategoryNav — vertical icon + label list with optional count badge per row.\n * Use as a sidebar nav for filtering or category browsing.\n */\nimport { ChevronRight } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\n\nimport type { CategoryNavProps } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function CategoryNav({ title, items, activeId, onSelect, className }: CategoryNavProps) {\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"category-nav\"\n\t\t\tdata-slot=\"category-nav\"\n\t\t\taria-label={title}\n\t\t\tclassName={cn('category-nav--component min-w-0', className)}\n\t\t>\n\t\t\t<ItemGroup>\n\t\t\t\t{items.map((it) => {\n\t\t\t\t\tconst Icon = it.icon;\n\t\t\t\t\tconst active = it.id === activeId;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t// Not `size=\"sm\"`. That maps to the primitive `xs` scale, which\n\t\t\t\t\t\t\t// shrinks media icons to 12px for a genuinely compact row — but\n\t\t\t\t\t\t\t// this row carries a title, a description and a badge and stands\n\t\t\t\t\t\t\t// 58px tall. The result was a 12px leading icon beside a 16px\n\t\t\t\t\t\t\t// chevron, because a `size-` class opts an icon out of that\n\t\t\t\t\t\t\t// scaling rule. The default scale matches `base/item`'s own\n\t\t\t\t\t\t\t// reference row at the same height.\n\t\t\t\t\t\t\tonClick={() => onSelect?.(it.id)}\n\t\t\t\t\t\t\tdata-state={active ? 'active' : 'inactive'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// The selected tint spans the row, so the row needs horizontal\n\t\t\t\t\t\t\t\t// padding of its own or the icon sits 1px from the tint's edge.\n\t\t\t\t\t\t\t\t// `px-space-md` is what `SectionNav` uses for the same job.\n\t\t\t\t\t\t\t\t'cursor-pointer rounded-inner px-space-md transition-colors',\n\t\t\t\t\t\t\t\tactive ? interactionRecipes.rowCurrent : interactionRecipes.rowHover,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className={cn(active ? 'text-accent-foreground' : 'text-muted-foreground')}>\n\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t<ItemTitle bold={active}>{it.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!it.hint && <ItemDescription clamp={1}>{it.hint}</ItemDescription>}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t{typeof it.count === 'number' && (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{it.count}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\tclassName={cn('size-icon shrink-0 text-muted-foreground', active && 'text-accent-foreground')}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ItemGroup>\n\t\t</nav>\n\t);\n}\n\nCategoryNav.displayName = 'CategoryNav';\n","/**\n * SectionNav — sticky in-page anchor nav. Pass a list of section ids; the active one\n * is tracked via IntersectionObserver and the matching item is highlighted. Click to\n * scroll to that section. Pure JS — no router required.\n */\nimport { forwardRef, useEffect, useState, type ComponentPropsWithoutRef } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\n\nexport interface SectionNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSectionNavStrings: SectionNavStrings = {\n\tnavigationLabel: 'Section navigation',\n};\n\nexport interface SectionNavItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface SectionNavProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children' | 'onSelect'> {\n\t/** Entries to render, in order. */\n\titems: SectionNavItem[];\n\trootMargin?: string;\n\tonSelect?: (id: string) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SectionNavStrings>;\n}\n\nexport const SectionNav = forwardRef<HTMLElement, SectionNavProps>(function SectionNav({\n\titems,\n\trootMargin = '-40% 0px -50% 0px',\n\tclassName,\n\tonSelect,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSectionNavStrings, stringsProp);\n\tconst [active, setActive] = useState<string | null>(items[0]?.id ?? null);\n\n\tuseEffect(() => {\n\t\tconst obs = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst visible = entries.find((e) => e.isIntersecting);\n\t\t\t\tif (visible?.target.id) setActive(visible.target.id);\n\t\t\t},\n\t\t\t{ rootMargin, threshold: 0 },\n\t\t);\n\t\titems.forEach((it) => {\n\t\t\tconst el = document.getElementById(it.id);\n\t\t\tif (el) obs.observe(el);\n\t\t});\n\t\treturn () => obs.disconnect();\n\t}, [items, rootMargin]);\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\tclassName={cn('section-nav--component', className)}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"2xs\" className=\"section-nav--items\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\tconst Icon = it.icon;\n\t\t\t\tconst isActive = active === it.id;\n\t\t\t\treturn (\n\t\t\t\t\t<a\n\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\thref={`#${it.id}`}\n\t\t\t\t\t\taria-current={isActive ? 'location' : undefined}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tdocument.getElementById(it.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t\t\t\t\tsetActive(it.id);\n\t\t\t\t\t\t\tonSelect?.(it.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`flex items-center gap-space-md rounded-inner px-space-md py-row-y transition-colors outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\tisActive ? interactionRecipes.rowCurrent : `text-muted-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-md shrink-0\" />}\n\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight={isActive ? 'semibold' : 'medium'}>{it.label}</Text>\n\t\t\t\t\t</a>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSectionNav.displayName = 'SectionNav';\n","/**\n * SideNav — collapsible vertical sidebar navigation. Items can be grouped\n * with a heading and optionally collapsed; each item supports an icon, badge,\n * and active-state highlight. The active item is matched by deepest path\n * prefix so nested routes still highlight their parent group.\n *\n * Pass `items` for the short flat-list default. Use `groups` only when the\n * navigation needs headings or collapsible sections.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useMemo, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface SideNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSideNavStrings: SideNavStrings = {\n\tnavigationLabel: 'Side navigation',\n};\n\nexport interface SideNavItem {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n}\n\nexport interface SideNavGroup {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** Entries to render, in order. */\n\titems: SideNavItem[];\n\tdefaultCollapsed?: boolean;\n\tcollapsible?: boolean;\n}\n\ninterface SideNavSharedProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'> {\n\t/** Path of the active route, used to mark the current entry. */\n\tcurrentPath?: string;\n\titemClassName?: string;\n\tactiveItemClassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SideNavStrings>;\n}\n\nexport type SideNavProps = SideNavSharedProps & (\n\t| {\n\t\t/** Short default for one flat navigation list. */\n\t\titems: SideNavItem[];\n\t\t/** Sections of the settings navigation. */\n\t\tgroups?: never;\n\t}\n\t| {\n\t\t/** Grouped navigation with optional headings and collapse behavior. */\n\t\tgroups: SideNavGroup[];\n\t\titems?: never;\n\t}\n);\n\nfunction normalizePath(rawUrl: string): string {\n\tif (rawUrl.length === 0) return '/';\n\ttry {\n\t\tconst baseOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, baseOrigin);\n\t\tconst trimmed = parsed.pathname.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t} catch {\n\t\tconst clean = rawUrl.split('?')[0] ?? rawUrl;\n\t\tconst trimmed = clean.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t}\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav({\n\titems,\n\tgroups: groupsProp,\n\tcurrentPath,\n\tclassName,\n\titemClassName,\n\tactiveItemClassName,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSideNavStrings, stringsProp);\n\tconst groups = useMemo<SideNavGroup[]>(\n\t\t() => groupsProp ?? [\n\t\t\t{ id: 'side-nav-items', items: items ?? [], collapsible: false },\n\t\t],\n\t\t[groupsProp, items],\n\t);\n\tconst rawActivePath = currentPath ?? (typeof window !== 'undefined' ? window.location.pathname : '');\n\tconst activePath = normalizePath(rawActivePath);\n\n\tconst allNormalized = useMemo(() => {\n\t\treturn groups.flatMap((g) =>\n\t\t\tg.items.map((item) => ({ groupId: g.id, normalizedPath: normalizePath(item.href) })),\n\t\t);\n\t}, [groups]);\n\n\tconst activeNormalized =\n\t\tallNormalized\n\t\t\t.filter(\n\t\t\t\t({ normalizedPath }) =>\n\t\t\t\t\tactivePath === normalizedPath || activePath.startsWith(`${normalizedPath}/`),\n\t\t\t)\n\t\t\t.sort((a, b) => b.normalizedPath.length - a.normalizedPath.length)[0]?.normalizedPath ??\n\t\tnull;\n\n\tconst [collapsed, setCollapsed] = useState<Record<string, boolean>>(() =>\n\t\tObject.fromEntries(groups.map((g) => [g.id, Boolean(g.defaultCollapsed)])),\n\t);\n\n\tconst toggleGroup = (id: string) =>\n\t\tsetCollapsed((prev) => ({ ...prev, [id]: !prev[id] }));\n\n\tconst resolvedActive =\n\t\tactiveItemClassName && activeItemClassName.length > 0\n\t\t\t? activeItemClassName\n\t\t\t: interactionRecipes.rowCurrent;\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tclassName={cn('side-nav--component', className)}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"side-nav--groups\">\n\t\t\t\t{groups.map((group) => {\n\t\t\t\tconst isCollapsed = group.collapsible !== false && collapsed[group.id];\n\t\t\t\tconst showLabel = !!group.label;\n\t\t\t\tconst shouldRenderItems = !isCollapsed;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack key={group.id} gap=\"2xs\" className=\"side-nav--group\">\n\t\t\t\t\t\t{!!showLabel && (\n\t\t\t\t\t\t\tgroup.collapsible !== false ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tonClick={() => toggleGroup(group.id)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-auto min-h-action-sm justify-between px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t'hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t) : group.label}\n\t\t\t\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'size-icon-md transition-transform',\n\t\t\t\t\t\t\t\t\t\t\tisCollapsed && '-rotate-90',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tisSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"px-row-x py-row-y\">\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t) : group.label\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!shouldRenderItems && (\n\t\t\t\t\t\t\t<Stack gap=\"2xs\" className=\"side-nav--items\">\n\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\tconst itemPath = normalizePath(item.href);\n\t\t\t\t\t\t\t\t\tconst isActive = itemPath === activeNormalized;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\tkey={item.href}\n\t\t\t\t\t\t\t\t\t\t\thref={item.disabled ? undefined : item.href}\n\t\t\t\t\t\t\t\t\t\t\taria-current={isActive ? 'page' : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-disabled={item.disabled || undefined}\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'group flex items-center gap-space-md rounded-inner px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t\t\t'text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\tisActive && resolvedActive,\n\t\t\t\t\t\t\t\t\t\t\t\titemClassName,\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{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\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\t\t'size-icon shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive ? 'text-accent-foreground' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{isSimpleText(item.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : item.label}\n\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</a>\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</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSideNav.displayName = 'SideNav';\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./affordance-geometry.generated-CCIXb2A1.js";
1
+ import { t as e } from "./affordance-geometry.generated-tF36bREk.js";
2
2
  //#region src/lib/navigation-row-recipes.ts
3
3
  var t = "box-border min-w-0 gap-space-md rounded-inner px-control-sm text-sm", n = `mx-0 ${e.navigationGuideStart} translate-x-0 px-space-sm`, r = {
4
4
  compact: {
@@ -26,4 +26,4 @@ var t = "box-border min-w-0 gap-space-md rounded-inner px-control-sm text-sm", n
26
26
  //#endregion
27
27
  export { r as n, t as r, n as t };
28
28
 
29
- //# sourceMappingURL=navigation-row-recipes-DlU-4QYO.js.map
29
+ //# sourceMappingURL=navigation-row-recipes-BFLCk_Aq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-row-recipes-DlU-4QYO.js","names":["affordanceGeometry","navigationRowInlineClasses","navigationChildInsetClasses","navigationRowDensityRecipes"],"sources":["../src/lib/navigation-row-recipes.ts"],"sourcesContent":["import type { RowDensity } from './row-recipes';\nimport { affordanceGeometry } from './affordance-geometry.generated';\n\n/** Shared navigation geometry and primary-copy fallback. Density changes height,\n * never primary text size; owners may retain an explicit typography override. */\nexport const navigationRowInlineClasses = 'box-border min-w-0 gap-space-md rounded-inner px-control-sm text-sm';\n// Start the guide at the small-control inset plus half of the small caret glyph.\n// Derive both terms from their existing roots; a guide is not another theme knob.\nexport const navigationChildInsetClasses = `mx-0 ${affordanceGeometry.navigationGuideStart} translate-x-0 px-space-sm`;\nexport const navigationRowDensityRecipes = {\n compact: { size: 'sm', gap: 'gap-0', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n default: { size: 'sm', gap: 'gap-space-2xs', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n comfortable: { size: 'md', gap: 'gap-space-2xs', childGap: 'gap-space-2xs py-space-2xs', height: 'h-action', childHeight: 'h-action-sm' },\n} as const satisfies Record<RowDensity, { size: 'sm' | 'md'; gap: string; childGap: string; height: string; childHeight: string }>;\n"],"mappings":";;AAKA,IAAaC,IAA6B,uEAG7BC,IAA8B,QAAQF,EAAmB,qBAAqB,6BAC9EG,IAA8B;CAC1C,SAAS;EAAE,MAAM;EAAM,KAAK;EAAS,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CAC/G,SAAS;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CACvH,aAAa;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAA8B,QAAQ;EAAY,aAAa;CAAc;AACzI"}
1
+ {"version":3,"file":"navigation-row-recipes-BFLCk_Aq.js","names":["affordanceGeometry","navigationRowInlineClasses","navigationChildInsetClasses","navigationRowDensityRecipes"],"sources":["../src/lib/navigation-row-recipes.ts"],"sourcesContent":["import type { RowDensity } from './row-recipes';\nimport { affordanceGeometry } from './affordance-geometry.generated';\n\n/** Shared navigation geometry and primary-copy fallback. Density changes height,\n * never primary text size; owners may retain an explicit typography override. */\nexport const navigationRowInlineClasses = 'box-border min-w-0 gap-space-md rounded-inner px-control-sm text-sm';\n// Start the guide at the small-control inset plus half of the small caret glyph.\n// Derive both terms from their existing roots; a guide is not another theme knob.\nexport const navigationChildInsetClasses = `mx-0 ${affordanceGeometry.navigationGuideStart} translate-x-0 px-space-sm`;\nexport const navigationRowDensityRecipes = {\n compact: { size: 'sm', gap: 'gap-0', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n default: { size: 'sm', gap: 'gap-space-2xs', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n comfortable: { size: 'md', gap: 'gap-space-2xs', childGap: 'gap-space-2xs py-space-2xs', height: 'h-action', childHeight: 'h-action-sm' },\n} as const satisfies Record<RowDensity, { size: 'sm' | 'md'; gap: string; childGap: string; height: string; childHeight: string }>;\n"],"mappings":";;AAKA,IAAaC,IAA6B,uEAG7BC,IAA8B,QAAQF,EAAmB,qBAAqB,6BAC9EG,IAA8B;CAC1C,SAAS;EAAE,MAAM;EAAM,KAAK;EAAS,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CAC/G,SAAS;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CACvH,aAAa;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAA8B,QAAQ;EAAY,aAAa;CAAc;AACzI"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { c as e, u as t } from "./ui-provider-D2_TeLqw.js";
3
- import { t as n } from "./utils-Cospvlj1.js";
4
- import { s as r } from "./typography-CAr3dQhX.js";
5
- import { n as i, o as a, t as o } from "./value-typography-Deb3yQZg.js";
2
+ import { c as e, u as t } from "./ui-provider-C_U0Xma4.js";
3
+ import { t as n } from "./utils-BRhFDwuU.js";
4
+ import { c as r } from "./typography-UTnveOEy.js";
5
+ import { n as i, o as a, t as o } from "./value-typography-BP8OG6h5.js";
6
6
  import { useCallback as s } from "react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
8
  //#region src/lib/money-format.ts
@@ -157,7 +157,7 @@ function x(e) {
157
157
  justify: "justify-end"
158
158
  };
159
159
  }
160
- function S({ amount: a, currency: s, unit: u = "major", minorUnitScale: d, symbol: f, locale: p, currencyDisplay: m, minimumFractionDigits: h, maximumFractionDigits: _, formatMode: y, emptyLabel: S = "—", size: C, align: w = "right", weight: T, type: E, tag: D = "span", lineHeight: O, numeric: k, secondary: A, displayMode: ee, layout: te, secondaryEmphasis: j = "discrete", separator: M = "·", className: N, ref: P, ...F }) {
160
+ function S({ amount: a, currency: s, unit: u = "major", minorUnitScale: d, symbol: f, locale: p, currencyDisplay: m, minimumFractionDigits: h, maximumFractionDigits: _, formatMode: y, emptyLabel: S = "—", size: C, align: w = "right", weight: T, type: E, tag: D = "span", lineHeight: O, numeric: k, secondary: A, displayMode: ee, layout: j, secondaryEmphasis: M = "discrete", separator: te = "·", className: N, ref: P, ...F }) {
161
161
  let I = e(), L = t(), R = i({
162
162
  size: C,
163
163
  type: E,
@@ -194,7 +194,7 @@ function S({ amount: a, currency: s, unit: u = "major", minorUnitScale: d, symbo
194
194
  });
195
195
  }
196
196
  let K = A ? v(A) : null, q = A?.currency ?? L.displayCurrency ?? U, J = ee ?? (L.dualPricingEnabled ? L.displayMode : void 0) ?? "dual";
197
- if (K === null || j === "hidden" || J === "default_only" || J === "dynamic" && q === U || !A) return /* @__PURE__ */ c(r, {
197
+ if (K === null || M === "hidden" || J === "default_only" || J === "dynamic" && q === U || !A) return /* @__PURE__ */ c(r, {
198
198
  ref: P,
199
199
  tag: D,
200
200
  size: z,
@@ -216,7 +216,7 @@ function S({ amount: a, currency: s, unit: u = "major", minorUnitScale: d, symbo
216
216
  minimumFractionDigits: A.minimumFractionDigits ?? h,
217
217
  maximumFractionDigits: A.maximumFractionDigits ?? _,
218
218
  formatMode: A.formatMode ?? y ?? L.formatMode ?? "with_code"
219
- }), ne = te ?? (L.dualPricingDisplay === "inline" ? "inline" : "stacked"), X = j === "match" ? z : j === "muted" ? "xs" : "xxs", Z = j === "match" ? B : j === "muted" ? "secondary" : "discrete", Q = j === "match" ? V : "regular", $ = x(w);
219
+ }), ne = j ?? (L.dualPricingDisplay === "inline" ? "inline" : "stacked"), X = M === "match" ? z : M === "muted" ? "xs" : "xxs", Z = M === "match" ? B : M === "muted" ? "secondary" : "discrete", Q = M === "match" ? V : "regular", $ = x(w);
220
220
  return ne === "inline" ? /* @__PURE__ */ l(r, {
221
221
  ref: P,
222
222
  tag: D,
@@ -242,7 +242,7 @@ function S({ amount: a, currency: s, unit: u = "major", minorUnitScale: d, symbo
242
242
  /* @__PURE__ */ c("span", {
243
243
  className: "money--separator inline-flex shrink-0 items-center text-muted-foreground",
244
244
  "aria-hidden": "true",
245
- children: M
245
+ children: te
246
246
  }),
247
247
  /* @__PURE__ */ c(r, {
248
248
  tag: "span",
@@ -304,49 +304,51 @@ function T(e, t, n) {
304
304
  let r = w(e);
305
305
  return r === null ? null : a(new Intl.NumberFormat(t, n), r);
306
306
  }
307
- function E({ value: t, locale: a, options: s, emptyLabel: l = "—", size: u, align: d = "right", weight: f, type: p, className: m, ref: h, ...g }) {
308
- let _ = e(), v = i({
307
+ function E({ value: t, locale: a, options: s, emptyLabel: l = "—", size: u, align: d = "right", weight: f, type: p, lineHeight: m, className: h, ref: g, ..._ }) {
308
+ let v = e(), y = i({
309
309
  size: u,
310
310
  type: p,
311
- weight: f
312
- }, C), y = T(t, a ?? _.locale, s), b = y === null ? o(v, f) : v;
311
+ weight: f,
312
+ lineHeight: m
313
+ }, C), b = T(t, a ?? v.locale, s), x = b === null ? o(y, f) : y;
313
314
  return /* @__PURE__ */ c(r, {
314
- ref: h,
315
+ ref: g,
315
316
  tag: "span",
316
- size: b.size,
317
+ size: x.size,
317
318
  align: d,
318
- weight: b.weight,
319
- type: b.type,
320
- lineHeight: b.lineHeight,
321
- className: n("number--component inline tabular-nums", m),
322
- ...g,
323
- children: y ?? l
319
+ weight: x.weight,
320
+ type: x.type,
321
+ lineHeight: x.lineHeight,
322
+ className: n("number--component inline tabular-nums", h),
323
+ ..._,
324
+ children: b ?? l
324
325
  });
325
326
  }
326
- function D({ value: t, locale: s, scaled: l = !1, options: u, emptyLabel: d = "—", size: f, align: p = "right", weight: m, type: h, className: g, ref: _, ...v }) {
327
- let y = e(), b = i({
327
+ function D({ value: t, locale: s, scaled: l = !1, options: u, emptyLabel: d = "—", size: f, align: p = "right", weight: m, type: h, lineHeight: g, className: _, ref: v, ...y }) {
328
+ let b = e(), x = i({
328
329
  size: f,
329
330
  type: h,
330
- weight: m
331
- }, C), x = w(t), S = x === null ? null : a(new Intl.NumberFormat(s ?? y.locale, {
331
+ weight: m,
332
+ lineHeight: g
333
+ }, C), S = w(t), T = S === null ? null : a(new Intl.NumberFormat(s ?? b.locale, {
332
334
  style: "percent",
333
335
  maximumFractionDigits: 1,
334
336
  ...u
335
- }), l ? x / 100 : x), T = S === null ? o(b, m) : b;
337
+ }), l ? S / 100 : S), E = T === null ? o(x, m) : x;
336
338
  return /* @__PURE__ */ c(r, {
337
- ref: _,
339
+ ref: v,
338
340
  tag: "span",
339
- size: T.size,
341
+ size: E.size,
340
342
  align: p,
341
- weight: T.weight,
342
- type: T.type,
343
- lineHeight: T.lineHeight,
344
- className: n("percent--component inline tabular-nums", g),
345
- ...v,
346
- children: S ?? d
343
+ weight: E.weight,
344
+ type: E.type,
345
+ lineHeight: E.lineHeight,
346
+ className: n("percent--component inline tabular-nums", _),
347
+ ...y,
348
+ children: T ?? d
347
349
  });
348
350
  }
349
351
  //#endregion
350
352
  export { g as a, y as i, D as n, S as r, E as t };
351
353
 
352
- //# sourceMappingURL=number-CKRBYmZK.js.map
354
+ //# sourceMappingURL=number-DbV1Dija.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number-CKRBYmZK.js","names":["Number","useFormattingConfig","useMoneyConfig","cn","Text","useValueTypography","formatWithMinusSign","emptyValueTypography","normalizeDecimalString","trimmed","value","comma","dot","decimalSeparator","groupingSeparator","head","tail","parseMoneyAmount","amount","parsed","normalizeFractionDigits","fallback","resolveFractionDigits","normalizedMaximum","maximumFractionDigits","normalizedMinimum","minimumFractionDigits","resolveCurrencyFractionDigits","currency","resolved","locale","replaceCurrencyPart","formatter","part","symbol","formatMoneyAmount","resolvedCurrency","numberOptions","formatMode","formattedNumber","normalizeMinorUnitScale","resolveMajorAmount","useMoneyFormatter","formatting","money","defaults","useCallback","options","overrides","resolvedEmptyLabel","major","unit","minorUnitScale","currencyDisplay","emptyLabel","MONEY_ROLE","getAlignmentClasses","align","Money","sizeProp","weightProp","typeProp","lineHeightProp","props","typography","primaryAmount","primaryLabel","empty","className","secondaryAmount","secondary","resolvedSecondaryCurrency","resolvedDisplayMode","displayMode","secondaryEmphasis","secondaryLabel","resolvedLayout","layout","secondarySize","size","secondaryType","type","secondaryWeight","weight","alignment","separator","NUMBER_ROLE","parseNumericValue","renderNumberLabel","Number$1","label","Percent","scaled"],"sources":["../src/lib/money-format.ts","../src/components/primitives/money.tsx","../src/components/primitives/number.tsx"],"sourcesContent":["/**\n * Shared money formatting for the Money primitive and metric surfaces.\n *\n * One formatter keeps currency labels, fraction digits and format modes\n * identical wherever an amount is shown. Components resolve locale, currency\n * and format mode from UIProvider before calling it.\n */\nimport type { MoneyFormatMode } from './ui-provider/types';\nimport { formatWithMinusSign, MINUS_SIGN } from './format';\n\n/** A numeric amount or an unformatted decimal string. */\nexport type MoneyAmountInput = number | string | null | undefined;\n\nexport interface FormatMoneyAmountOptions {\n\t/** Major-unit amount. Strings accept either decimal separator. */\n\tamount: MoneyAmountInput;\n\t/** ISO 4217 currency code; an empty value formats as a plain decimal. */\n\tcurrency?: string | null;\n\t/** BCP-47 locale for Intl formatting. */\n\tlocale?: string;\n\t/** Intl currency label style when the format mode uses currency formatting. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Provider format policy: decimal, with_code, with_symbol or locale_aware. */\n\tformatMode?: MoneyFormatMode;\n\t/** Consumer-resolved symbol; Intl placement is preserved. */\n\tsymbol?: string | null;\n}\n\nfunction normalizeDecimalString(value: string) {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return '';\n\n\tconst comma = trimmed.lastIndexOf(',');\n\tconst dot = trimmed.lastIndexOf('.');\n\n\tif (comma >= 0 && dot >= 0) {\n\t\tconst decimalSeparator = comma > dot ? ',' : '.';\n\t\tconst groupingSeparator = decimalSeparator === ',' ? '.' : ',';\n\t\treturn trimmed\n\t\t\t.replace(new RegExp(`\\\\${groupingSeparator}`, 'g'), '')\n\t\t\t.replace(decimalSeparator, '.');\n\t}\n\n\tif (comma >= 0) {\n\t\tconst [head, tail = ''] = trimmed.split(',');\n\t\tif (tail.length > 0 && tail.length <= 2) return `${head.replace(/,/g, '')}.${tail}`;\n\t\treturn trimmed.replace(/,/g, '');\n\t}\n\n\tif (dot >= 0) {\n\t\tconst [head, tail = ''] = trimmed.split('.');\n\t\tif (tail.length === 3 && head.length > 0) return trimmed.replace(/\\./g, '');\n\t}\n\n\treturn trimmed;\n}\n\nexport function parseMoneyAmount(amount: MoneyAmountInput): number | null {\n\tif (amount === null || amount === undefined || amount === '') return null;\n\tif (typeof amount === 'number') return Number.isFinite(amount) ? amount : null;\n\tconst parsed = Number.parseFloat(normalizeDecimalString(amount));\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction normalizeFractionDigits(value: number | undefined, fallback: number) {\n\tif (value === undefined || !Number.isFinite(value)) return fallback;\n\treturn Math.min(100, Math.max(0, Math.trunc(value)));\n}\n\nfunction resolveFractionDigits(\n\tminimumFractionDigits?: number,\n\tmaximumFractionDigits?: number,\n\tfallback = { minimumFractionDigits: 2, maximumFractionDigits: 2 },\n) {\n\tconst normalizedMaximum = normalizeFractionDigits(\n\t\tmaximumFractionDigits,\n\t\tfallback.maximumFractionDigits,\n\t);\n\tconst normalizedMinimum = normalizeFractionDigits(\n\t\tminimumFractionDigits,\n\t\tMath.min(fallback.minimumFractionDigits, normalizedMaximum),\n\t);\n\n\treturn {\n\t\tminimumFractionDigits: normalizedMinimum,\n\t\tmaximumFractionDigits: Math.max(normalizedMinimum, normalizedMaximum),\n\t};\n}\n\nfunction resolveCurrencyFractionDigits(currency: string, locale?: string) {\n\tif (!currency) return { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\ttry {\n\t\tconst resolved = new Intl.NumberFormat(locale, {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency,\n\t\t}).resolvedOptions();\n\t\treturn {\n\t\t\tminimumFractionDigits: resolved.minimumFractionDigits ?? 2,\n\t\t\tmaximumFractionDigits: resolved.maximumFractionDigits ?? 2,\n\t\t};\n\t} catch {\n\t\treturn { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\t}\n}\n\nfunction replaceCurrencyPart(\n\tformatter: Intl.NumberFormat,\n\tvalue: number,\n\tsymbol: string,\n) {\n\treturn formatter\n\t\t.formatToParts(value)\n\t\t.map((part) => part.type === 'currency' ? symbol : part.type === 'minusSign' ? part.value.replace('-', MINUS_SIGN) : part.value)\n\t\t.join('');\n}\n\nexport function formatMoneyAmount({\n\tamount,\n\tcurrency,\n\tlocale,\n\tcurrencyDisplay = 'symbol',\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\tsymbol,\n}: FormatMoneyAmountOptions) {\n\tconst value = parseMoneyAmount(amount);\n\tif (value === null) return null;\n\n\tconst resolvedCurrency = currency ?? '';\n\tconst numberOptions: Intl.NumberFormatOptions = resolveFractionDigits(\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t\tresolveCurrencyFractionDigits(resolvedCurrency, locale),\n\t);\n\n\tif (formatMode === 'decimal' || !resolvedCurrency) {\n\t\treturn formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t}\n\n\tif (formatMode === 'with_code') {\n\t\treturn `${formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value)} ${resolvedCurrency}`.trim();\n\t}\n\n\ttry {\n\t\tconst formatter = new Intl.NumberFormat(locale, {\n\t\t\t...numberOptions,\n\t\t\tstyle: 'currency',\n\t\t\tcurrency: resolvedCurrency,\n\t\t\tcurrencyDisplay,\n\t\t});\n\t\treturn symbol\n\t\t\t? replaceCurrencyPart(formatter, value, symbol)\n\t\t\t: formatWithMinusSign(formatter, value);\n\t} catch {\n\t\tconst formattedNumber = formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t\treturn symbol\n\t\t\t? `${symbol}${formattedNumber}`\n\t\t\t: `${formattedNumber} ${resolvedCurrency}`.trim();\n\t}\n}\n","import { useCallback, type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY } from '../../lib/format';\nimport { formatMoneyAmount, parseMoneyAmount } from '../../lib/money-format';\nimport {\n\tuseFormattingConfig,\n\tuseMoneyConfig,\n\ttype MoneyDisplayMode,\n\ttype MoneyFormatMode,\n} from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport type MoneyUnit = 'major' | 'minor';\nexport type MoneyLayout = 'inline' | 'stacked';\nexport type MoneySecondaryEmphasis = 'discrete' | 'muted' | 'match' | 'hidden';\n\n/** A secondary monetary value rendered by the canonical `<Money>` primitive. */\nexport interface MoneyValue {\n\t/** Numeric amount or an unformatted decimal string. */\n\tamount?: number | string | null;\n\t/** ISO 4217 currency code. Falls back to `UIProvider.money.defaultCurrency`. */\n\tcurrency?: string | null;\n\t/** Unit of the incoming amount. `minor` converts cents/pence before formatting. */\n\tunit?: MoneyUnit;\n\t/** Number of minor units in one major unit. Defaults to 100. */\n\tminorUnitScale?: number;\n\t/** Optional consumer-resolved symbol. Intl placement is preserved. */\n\tsymbol?: string | null;\n\t/** Intl currency label style when the resolved format mode uses currency formatting. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Per-value override for the UIProvider money format policy. */\n\tformatMode?: MoneyFormatMode;\n}\n\nexport interface MoneyProps extends SpanProps, MoneyValue {\n\t/** Ref to the semantic root selected by `tag`. */\n\tref?: Ref<HTMLElement>;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Content rendered, with the shared empty treatment, when the amount is absent or cannot be parsed. */\n\temptyLabel?: ReactNode;\n\t/**\n\t * Typography size for the primary value (and a `match` secondary). Defaults to\n\t * the provider text size; inside running text, the surrounding size.\n\t */\n\tsize?: TextSize;\n\t/** Inline text alignment. Defaults to right alignment for numeric scanning. */\n\talign?: TextProps['align'];\n\t/** Weight of the primary value. Defaults to `medium`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\t/** Semantic root element used by the typography primitive. */\n\ttag?: TextProps['tag'];\n\t/** Line-height preset applied to the root value. Defaults to `normal`; inside running text, the surrounding leading. */\n\tlineHeight?: TextProps['lineHeight'];\n\t/**\n\t * Opt-in monospace figures. Amounts already render in the sans UI font with\n\t * tabular figures; reserve this for code-like ledgers. Defaults to `false`.\n\t */\n\tnumeric?: TextProps['numeric'];\n\t/**\n\t * Optional converted/display value. Passing it is an explicit request to\n\t * render both values unless `displayMode=\"default_only\"` or\n\t * `secondaryEmphasis=\"hidden\"` is set.\n\t */\n\tsecondary?: MoneyValue | null;\n\t/**\n\t * Controls whether the secondary value is visible. `dynamic` shows it only\n\t * when the two currency codes differ. When omitted, an explicitly supplied\n\t * `secondary` renders; an enabled UIProvider money policy can narrow it.\n\t */\n\tdisplayMode?: MoneyDisplayMode;\n\t/** Pair layout. Falls back to the UIProvider `dualPricingDisplay` policy. */\n\tlayout?: MoneyLayout;\n\t/** Visual prominence of a secondary value. */\n\tsecondaryEmphasis?: MoneySecondaryEmphasis;\n\t/** Inline separator. Defaults to a quiet middle dot; pass an arrow for conversion flows. */\n\tseparator?: ReactNode;\n}\n\nfunction normalizeMinorUnitScale(value: number | undefined) {\n\tif (value === undefined || !Number.isFinite(value) || value <= 0) return 100;\n\treturn value;\n}\n\nfunction resolveMajorAmount(value: MoneyValue): number | null {\n\tconst parsed = parseMoneyAmount(value.amount);\n\tif (parsed === null) return null;\n\treturn value.unit === 'minor'\n\t\t? parsed / normalizeMinorUnitScale(value.minorUnitScale)\n\t\t: parsed;\n}\n\n/** Options for formatting money as text; they mirror the Money primitive's value props. */\nexport type MoneyFormatterOptions = Omit<MoneyValue, 'amount'> & {\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Text returned when the amount is absent or cannot be parsed. */\n\temptyLabel?: string;\n};\n\n/** Formats an amount as text; per-call options win over the hook's defaults. */\nexport type MoneyFormatter = (amount: MoneyValue['amount'], options?: MoneyFormatterOptions) => string;\n\n/**\n * Text formatting with the Money primitive's rules and UIProvider defaults, for\n * places that need a string: button labels, toasts, activity text, aria labels.\n * Pass defaults such as `{ currency: 'USD' }` once for a screen whose amounts\n * share a currency.\n */\nexport function useMoneyFormatter(defaults: MoneyFormatterOptions = {}): MoneyFormatter {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst {\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t} = defaults;\n\treturn useCallback<MoneyFormatter>((amount, overrides = {}) => {\n\t\tconst options: MoneyFormatterOptions = {\n\t\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\t\t...overrides,\n\t\t};\n\t\tconst resolvedEmptyLabel = options.emptyLabel ?? EMPTY;\n\t\tconst major = resolveMajorAmount({ amount, unit: options.unit, minorUnitScale: options.minorUnitScale });\n\t\tif (major === null) return resolvedEmptyLabel;\n\t\treturn formatMoneyAmount({\n\t\t\tamount: major,\n\t\t\tcurrency: options.currency ?? money.defaultCurrency ?? 'USD',\n\t\t\tsymbol: options.symbol,\n\t\t\tlocale: options.locale ?? formatting.locale,\n\t\t\tcurrencyDisplay: options.currencyDisplay,\n\t\t\tminimumFractionDigits: options.minimumFractionDigits,\n\t\t\tmaximumFractionDigits: options.maximumFractionDigits,\n\t\t\tformatMode: options.formatMode ?? money.formatMode ?? 'with_code',\n\t\t}) ?? resolvedEmptyLabel;\n\t}, [\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\tformatting.locale, money.defaultCurrency, money.formatMode,\n\t]);\n}\n\n/** Standalone amounts read as foreground medium; in a sentence they take its typography. */\nconst MONEY_ROLE: ValueTypographyRole = { type: 'main', weight: 'medium' };\n\n/** Logical alignment: `left`/`right` follow the reading direction, like `Text`. */\nfunction getAlignmentClasses(align: TextProps['align']) {\n\tif (align === 'left') return { text: 'text-start', justify: 'justify-start' };\n\tif (align === 'center') return { text: 'text-center', justify: 'justify-center' };\n\treturn { text: 'text-end', justify: 'justify-end' };\n}\n\n/**\n * Canonical monetary display primitive.\n *\n * It owns major/minor-unit conversion, locale-aware formatting, empty values,\n * and optional inline/stacked dual-currency display. Consumers should use\n * this component instead of composing separate money-display or currency-pair\n * wrappers.\n */\nexport function Money({\n\tamount,\n\tcurrency,\n\tunit = 'major',\n\tminorUnitScale,\n\tsymbol,\n\tlocale,\n\tcurrencyDisplay,\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\temptyLabel = EMPTY,\n\tsize: sizeProp,\n\talign = 'right',\n\tweight: weightProp,\n\ttype: typeProp,\n\ttag = 'span',\n\tlineHeight: lineHeightProp,\n\tnumeric,\n\tsecondary,\n\tdisplayMode,\n\tlayout,\n\tsecondaryEmphasis = 'discrete',\n\tseparator = '·',\n\tclassName,\n\tref,\n\t...props\n}: MoneyProps) {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst typography = useValueTypography(\n\t\t{ size: sizeProp, type: typeProp, weight: weightProp, lineHeight: lineHeightProp },\n\t\tMONEY_ROLE,\n\t);\n\tconst { size, type, weight, lineHeight } = typography;\n\tconst resolvedCurrency = currency ?? money.defaultCurrency ?? 'USD';\n\tconst primaryAmount = resolveMajorAmount({ amount, unit, minorUnitScale });\n\tconst primaryLabel = primaryAmount === null\n\t\t? null\n\t\t: formatMoneyAmount({\n\t\t\t\tamount: primaryAmount,\n\t\t\t\tcurrency: resolvedCurrency,\n\t\t\t\tsymbol,\n\t\t\t\tlocale: locale ?? formatting.locale,\n\t\t\t\tcurrencyDisplay,\n\t\t\t\tminimumFractionDigits,\n\t\t\t\tmaximumFractionDigits,\n\t\t\t\tformatMode: formatMode ?? money.formatMode ?? 'with_code',\n\t\t\t});\n\n\tif (primaryLabel === null) {\n\t\tconst empty = emptyValueTypography(typography, weightProp);\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={empty.size}\n\t\t\t\talign={align}\n\t\t\t\tweight={empty.weight}\n\t\t\t\ttype={empty.type}\n\t\t\t\tlineHeight={empty.lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryAmount = secondary ? resolveMajorAmount(secondary) : null;\n\tconst resolvedSecondaryCurrency = secondary?.currency ?? money.displayCurrency ?? resolvedCurrency;\n\tconst resolvedDisplayMode = displayMode\n\t\t?? (money.dualPricingEnabled ? money.displayMode : undefined)\n\t\t?? 'dual';\n\tconst hasDifferentCurrencies = resolvedSecondaryCurrency !== resolvedCurrency;\n\tconst shouldRenderSecondary = secondaryAmount !== null\n\t\t&& secondaryEmphasis !== 'hidden'\n\t\t&& resolvedDisplayMode !== 'default_only'\n\t\t&& (resolvedDisplayMode !== 'dynamic' || hasDifferentCurrencies);\n\n\tif (!shouldRenderSecondary || !secondary) {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\tweight={weight}\n\t\t\t\ttype={type}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline whitespace-nowrap tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryLabel = formatMoneyAmount({\n\t\tamount: secondaryAmount,\n\t\tcurrency: resolvedSecondaryCurrency,\n\t\tsymbol: secondary.symbol,\n\t\tlocale: locale ?? formatting.locale,\n\t\tcurrencyDisplay: secondary.currencyDisplay ?? currencyDisplay,\n\t\tminimumFractionDigits: secondary.minimumFractionDigits ?? minimumFractionDigits,\n\t\tmaximumFractionDigits: secondary.maximumFractionDigits ?? maximumFractionDigits,\n\t\tformatMode: secondary.formatMode ?? formatMode ?? money.formatMode ?? 'with_code',\n\t});\n\tconst resolvedLayout: MoneyLayout = layout\n\t\t?? (money.dualPricingDisplay === 'inline' ? 'inline' : 'stacked');\n\tconst secondarySize: TextSize | undefined = secondaryEmphasis === 'match'\n\t\t? size\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'xs'\n\t\t\t: 'xxs';\n\tconst secondaryType: TextProps['type'] = secondaryEmphasis === 'match'\n\t\t? type\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'secondary'\n\t\t\t: 'discrete';\n\tconst secondaryWeight: TextProps['weight'] = secondaryEmphasis === 'match' ? weight : 'regular';\n\tconst alignment = getAlignmentClasses(align);\n\n\tif (resolvedLayout === 'inline') {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\ttype={type}\n\t\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'money--component money--inline inline-flex items-baseline gap-space-xs whitespace-nowrap tabular-nums',\n\t\t\t\t\talignment.justify,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size={size} weight={weight} type={type} lineHeight={lineHeight} numeric={numeric} className=\"money--primary\">\n\t\t\t\t\t{primaryLabel}\n\t\t\t\t</Text>\n\t\t\t\t<span className=\"money--separator inline-flex shrink-0 items-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t{separator}\n\t\t\t\t</span>\n\t\t\t\t<Text tag=\"span\" size={secondarySize} weight={secondaryWeight} type={secondaryType} lineHeight={lineHeight} numeric={numeric} className=\"money--secondary\">\n\t\t\t\t\t{secondaryLabel}\n\t\t\t\t</Text>\n\t\t\t</Text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag={tag}\n\t\t\tsize={size}\n\t\t\talign={align}\n\t\t\ttype={type}\n\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\tlineHeight=\"tight\"\n\t\t\tnumeric={numeric}\n\t\t\tclassName={cn(\n\t\t\t\t'money--component money--stacked inline-flex flex-col whitespace-nowrap tabular-nums',\n\t\t\t\talignment.text,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Text tag=\"span\" size={size} align={align} weight={weight} type={type} lineHeight=\"tight\" numeric={numeric} className=\"money--primary\">\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t\t<Text tag=\"span\" size={secondarySize} align={align} weight={secondaryWeight} type={secondaryType} lineHeight=\"tight\" numeric={numeric} className=\"money--secondary\">\n\t\t\t\t{secondaryLabel}\n\t\t\t</Text>\n\t\t</Text>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY, formatWithMinusSign } from '../../lib/format';\nimport { useFormattingConfig } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport interface NumberProps extends SpanProps {\n\tvalue?: number | string | null;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Passed to `Intl.NumberFormat`; for example `signDisplay: 'exceptZero'` for deltas. */\n\toptions?: Intl.NumberFormatOptions;\n\t/** Rendered with the shared empty treatment when the value is absent or unparsable. Defaults to an em dash. */\n\temptyLabel?: ReactNode;\n\t/** Text size. Defaults to the provider text size; inside running text, the surrounding size. */\n\tsize?: TextSize;\n\t/** Text alignment. Defaults to `right` so columns of figures line up. */\n\talign?: TextProps['align'];\n\t/** Font weight. Defaults to `regular`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\tref?: Ref<HTMLSpanElement>;\n}\n\nexport interface PercentProps extends Omit<NumberProps, 'options'> {\n\t/** The value is already 0–100 rather than a 0–1 ratio. Defaults to `false`. */\n\tscaled?: boolean;\n\t/** Passed to `Intl.NumberFormat` after the percent style and one-decimal default. */\n\toptions?: Intl.NumberFormatOptions;\n\tref?: Ref<HTMLSpanElement>;\n}\n\nconst NUMBER_ROLE: ValueTypographyRole = { type: 'main', weight: 'regular' };\n\nfunction parseNumericValue(value: NumberProps['value']) {\n\tif (value === null || value === undefined || value === '') return null;\n\tconst parsed = typeof value === 'number' ? value : globalThis.Number.parseFloat(value);\n\treturn globalThis.Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction renderNumberLabel(value: NumberProps['value'], locale?: string, options?: Intl.NumberFormatOptions) {\n\tconst parsed = parseNumericValue(value);\n\tif (parsed === null) return null;\n\treturn formatWithMinusSign(new Intl.NumberFormat(locale, options), parsed);\n}\n\n/**\n * A locale-formatted count or quantity in the sans UI font with tabular figures.\n * Negative values use the typographic minus sign (U+2212).\n */\nexport function Number({\n\tvalue,\n\tlocale,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tclassName,\n\tref,\n\t...props\n}: NumberProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight }, NUMBER_ROLE);\n\tconst label = renderNumberLabel(value, locale ?? formatting.locale, options);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('number--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n\n/**\n * A percentage in the sans UI font with tabular figures. Expects a 0–1 ratio\n * unless `scaled`; one decimal place by default; negative values use U+2212.\n */\nexport function Percent({\n\tvalue,\n\tlocale,\n\tscaled = false,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tclassName,\n\tref,\n\t...props\n}: PercentProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight }, NUMBER_ROLE);\n\tconst parsed = parseNumericValue(value);\n\tconst label = parsed === null\n\t\t? null\n\t\t: formatWithMinusSign(new Intl.NumberFormat(locale ?? formatting.locale, {\n\t\t\t\tstyle: 'percent',\n\t\t\t\tmaximumFractionDigits: 1,\n\t\t\t\t...options,\n\t\t\t}), scaled ? parsed / 100 : parsed);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('percent--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"number-DbV1Dija.js","names":["Number","useFormattingConfig","useMoneyConfig","cn","Text","useValueTypography","formatWithMinusSign","emptyValueTypography","normalizeDecimalString","trimmed","value","comma","dot","decimalSeparator","groupingSeparator","head","tail","parseMoneyAmount","amount","parsed","normalizeFractionDigits","fallback","resolveFractionDigits","normalizedMaximum","maximumFractionDigits","normalizedMinimum","minimumFractionDigits","resolveCurrencyFractionDigits","currency","resolved","locale","replaceCurrencyPart","formatter","part","symbol","formatMoneyAmount","resolvedCurrency","numberOptions","formatMode","formattedNumber","normalizeMinorUnitScale","resolveMajorAmount","useMoneyFormatter","formatting","money","defaults","useCallback","options","overrides","resolvedEmptyLabel","major","unit","minorUnitScale","currencyDisplay","emptyLabel","MONEY_ROLE","getAlignmentClasses","align","Money","sizeProp","weightProp","typeProp","lineHeightProp","props","typography","primaryAmount","primaryLabel","empty","className","secondaryAmount","secondary","resolvedSecondaryCurrency","resolvedDisplayMode","displayMode","secondaryEmphasis","secondaryLabel","resolvedLayout","layout","secondarySize","size","secondaryType","type","secondaryWeight","weight","alignment","separator","NUMBER_ROLE","parseNumericValue","renderNumberLabel","Number$1","label","Percent","scaled"],"sources":["../src/lib/money-format.ts","../src/components/primitives/money.tsx","../src/components/primitives/number.tsx"],"sourcesContent":["/**\n * Shared money formatting for the Money primitive and metric surfaces.\n *\n * One formatter keeps currency labels, fraction digits and format modes\n * identical wherever an amount is shown. Components resolve locale, currency\n * and format mode from UIProvider before calling it.\n */\nimport type { MoneyFormatMode } from './ui-provider/types';\nimport { formatWithMinusSign, MINUS_SIGN } from './format';\n\n/** A numeric amount or an unformatted decimal string. */\nexport type MoneyAmountInput = number | string | null | undefined;\n\nexport interface FormatMoneyAmountOptions {\n\t/** Major-unit amount. Strings accept either decimal separator. */\n\tamount: MoneyAmountInput;\n\t/** ISO 4217 currency code; an empty value formats as a plain decimal. */\n\tcurrency?: string | null;\n\t/** BCP-47 locale for Intl formatting. */\n\tlocale?: string;\n\t/** Intl currency label style when the format mode uses currency formatting. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Provider format policy: decimal, with_code, with_symbol or locale_aware. */\n\tformatMode?: MoneyFormatMode;\n\t/** Consumer-resolved symbol; Intl placement is preserved. */\n\tsymbol?: string | null;\n}\n\nfunction normalizeDecimalString(value: string) {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return '';\n\n\tconst comma = trimmed.lastIndexOf(',');\n\tconst dot = trimmed.lastIndexOf('.');\n\n\tif (comma >= 0 && dot >= 0) {\n\t\tconst decimalSeparator = comma > dot ? ',' : '.';\n\t\tconst groupingSeparator = decimalSeparator === ',' ? '.' : ',';\n\t\treturn trimmed\n\t\t\t.replace(new RegExp(`\\\\${groupingSeparator}`, 'g'), '')\n\t\t\t.replace(decimalSeparator, '.');\n\t}\n\n\tif (comma >= 0) {\n\t\tconst [head, tail = ''] = trimmed.split(',');\n\t\tif (tail.length > 0 && tail.length <= 2) return `${head.replace(/,/g, '')}.${tail}`;\n\t\treturn trimmed.replace(/,/g, '');\n\t}\n\n\tif (dot >= 0) {\n\t\tconst [head, tail = ''] = trimmed.split('.');\n\t\tif (tail.length === 3 && head.length > 0) return trimmed.replace(/\\./g, '');\n\t}\n\n\treturn trimmed;\n}\n\nexport function parseMoneyAmount(amount: MoneyAmountInput): number | null {\n\tif (amount === null || amount === undefined || amount === '') return null;\n\tif (typeof amount === 'number') return Number.isFinite(amount) ? amount : null;\n\tconst parsed = Number.parseFloat(normalizeDecimalString(amount));\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction normalizeFractionDigits(value: number | undefined, fallback: number) {\n\tif (value === undefined || !Number.isFinite(value)) return fallback;\n\treturn Math.min(100, Math.max(0, Math.trunc(value)));\n}\n\nfunction resolveFractionDigits(\n\tminimumFractionDigits?: number,\n\tmaximumFractionDigits?: number,\n\tfallback = { minimumFractionDigits: 2, maximumFractionDigits: 2 },\n) {\n\tconst normalizedMaximum = normalizeFractionDigits(\n\t\tmaximumFractionDigits,\n\t\tfallback.maximumFractionDigits,\n\t);\n\tconst normalizedMinimum = normalizeFractionDigits(\n\t\tminimumFractionDigits,\n\t\tMath.min(fallback.minimumFractionDigits, normalizedMaximum),\n\t);\n\n\treturn {\n\t\tminimumFractionDigits: normalizedMinimum,\n\t\tmaximumFractionDigits: Math.max(normalizedMinimum, normalizedMaximum),\n\t};\n}\n\nfunction resolveCurrencyFractionDigits(currency: string, locale?: string) {\n\tif (!currency) return { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\ttry {\n\t\tconst resolved = new Intl.NumberFormat(locale, {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency,\n\t\t}).resolvedOptions();\n\t\treturn {\n\t\t\tminimumFractionDigits: resolved.minimumFractionDigits ?? 2,\n\t\t\tmaximumFractionDigits: resolved.maximumFractionDigits ?? 2,\n\t\t};\n\t} catch {\n\t\treturn { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\t}\n}\n\nfunction replaceCurrencyPart(\n\tformatter: Intl.NumberFormat,\n\tvalue: number,\n\tsymbol: string,\n) {\n\treturn formatter\n\t\t.formatToParts(value)\n\t\t.map((part) => part.type === 'currency' ? symbol : part.type === 'minusSign' ? part.value.replace('-', MINUS_SIGN) : part.value)\n\t\t.join('');\n}\n\nexport function formatMoneyAmount({\n\tamount,\n\tcurrency,\n\tlocale,\n\tcurrencyDisplay = 'symbol',\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\tsymbol,\n}: FormatMoneyAmountOptions) {\n\tconst value = parseMoneyAmount(amount);\n\tif (value === null) return null;\n\n\tconst resolvedCurrency = currency ?? '';\n\tconst numberOptions: Intl.NumberFormatOptions = resolveFractionDigits(\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t\tresolveCurrencyFractionDigits(resolvedCurrency, locale),\n\t);\n\n\tif (formatMode === 'decimal' || !resolvedCurrency) {\n\t\treturn formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t}\n\n\tif (formatMode === 'with_code') {\n\t\treturn `${formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value)} ${resolvedCurrency}`.trim();\n\t}\n\n\ttry {\n\t\tconst formatter = new Intl.NumberFormat(locale, {\n\t\t\t...numberOptions,\n\t\t\tstyle: 'currency',\n\t\t\tcurrency: resolvedCurrency,\n\t\t\tcurrencyDisplay,\n\t\t});\n\t\treturn symbol\n\t\t\t? replaceCurrencyPart(formatter, value, symbol)\n\t\t\t: formatWithMinusSign(formatter, value);\n\t} catch {\n\t\tconst formattedNumber = formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t\treturn symbol\n\t\t\t? `${symbol}${formattedNumber}`\n\t\t\t: `${formattedNumber} ${resolvedCurrency}`.trim();\n\t}\n}\n","import { useCallback, type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY } from '../../lib/format';\nimport { formatMoneyAmount, parseMoneyAmount } from '../../lib/money-format';\nimport {\n\tuseFormattingConfig,\n\tuseMoneyConfig,\n\ttype MoneyDisplayMode,\n\ttype MoneyFormatMode,\n} from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport type MoneyUnit = 'major' | 'minor';\nexport type MoneyLayout = 'inline' | 'stacked';\nexport type MoneySecondaryEmphasis = 'discrete' | 'muted' | 'match' | 'hidden';\n\n/** A secondary monetary value rendered by the canonical `<Money>` primitive. */\nexport interface MoneyValue {\n\t/** Numeric amount or an unformatted decimal string. */\n\tamount?: number | string | null;\n\t/** ISO 4217 currency code. Falls back to `UIProvider.money.defaultCurrency`. */\n\tcurrency?: string | null;\n\t/** Unit of the incoming amount. `minor` converts cents/pence before formatting. */\n\tunit?: MoneyUnit;\n\t/** Number of minor units in one major unit. Defaults to 100. */\n\tminorUnitScale?: number;\n\t/** Optional consumer-resolved symbol. Intl placement is preserved. */\n\tsymbol?: string | null;\n\t/** Intl currency label style when the resolved format mode uses currency formatting. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Per-value override for the UIProvider money format policy. */\n\tformatMode?: MoneyFormatMode;\n}\n\nexport interface MoneyProps extends SpanProps, MoneyValue {\n\t/** Ref to the semantic root selected by `tag`. */\n\tref?: Ref<HTMLElement>;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Content rendered, with the shared empty treatment, when the amount is absent or cannot be parsed. */\n\temptyLabel?: ReactNode;\n\t/**\n\t * Typography size for the primary value (and a `match` secondary). Defaults to\n\t * the provider text size; inside running text, the surrounding size.\n\t */\n\tsize?: TextSize;\n\t/** Inline text alignment. Defaults to right alignment for numeric scanning. */\n\talign?: TextProps['align'];\n\t/** Weight of the primary value. Defaults to `medium`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\t/** Semantic root element used by the typography primitive. */\n\ttag?: TextProps['tag'];\n\t/** Line-height preset applied to the root value. Defaults to `normal`; inside running text, the surrounding leading. */\n\tlineHeight?: TextProps['lineHeight'];\n\t/**\n\t * Opt-in monospace figures. Amounts already render in the sans UI font with\n\t * tabular figures; reserve this for code-like ledgers. Defaults to `false`.\n\t */\n\tnumeric?: TextProps['numeric'];\n\t/**\n\t * Optional converted/display value. Passing it is an explicit request to\n\t * render both values unless `displayMode=\"default_only\"` or\n\t * `secondaryEmphasis=\"hidden\"` is set.\n\t */\n\tsecondary?: MoneyValue | null;\n\t/**\n\t * Controls whether the secondary value is visible. `dynamic` shows it only\n\t * when the two currency codes differ. When omitted, an explicitly supplied\n\t * `secondary` renders; an enabled UIProvider money policy can narrow it.\n\t */\n\tdisplayMode?: MoneyDisplayMode;\n\t/** Pair layout. Falls back to the UIProvider `dualPricingDisplay` policy. */\n\tlayout?: MoneyLayout;\n\t/** Visual prominence of a secondary value. */\n\tsecondaryEmphasis?: MoneySecondaryEmphasis;\n\t/** Inline separator. Defaults to a quiet middle dot; pass an arrow for conversion flows. */\n\tseparator?: ReactNode;\n}\n\nfunction normalizeMinorUnitScale(value: number | undefined) {\n\tif (value === undefined || !Number.isFinite(value) || value <= 0) return 100;\n\treturn value;\n}\n\nfunction resolveMajorAmount(value: MoneyValue): number | null {\n\tconst parsed = parseMoneyAmount(value.amount);\n\tif (parsed === null) return null;\n\treturn value.unit === 'minor'\n\t\t? parsed / normalizeMinorUnitScale(value.minorUnitScale)\n\t\t: parsed;\n}\n\n/** Options for formatting money as text; they mirror the Money primitive's value props. */\nexport type MoneyFormatterOptions = Omit<MoneyValue, 'amount'> & {\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Text returned when the amount is absent or cannot be parsed. */\n\temptyLabel?: string;\n};\n\n/** Formats an amount as text; per-call options win over the hook's defaults. */\nexport type MoneyFormatter = (amount: MoneyValue['amount'], options?: MoneyFormatterOptions) => string;\n\n/**\n * Text formatting with the Money primitive's rules and UIProvider defaults, for\n * places that need a string: button labels, toasts, activity text, aria labels.\n * Pass defaults such as `{ currency: 'USD' }` once for a screen whose amounts\n * share a currency.\n */\nexport function useMoneyFormatter(defaults: MoneyFormatterOptions = {}): MoneyFormatter {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst {\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t} = defaults;\n\treturn useCallback<MoneyFormatter>((amount, overrides = {}) => {\n\t\tconst options: MoneyFormatterOptions = {\n\t\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\t\t...overrides,\n\t\t};\n\t\tconst resolvedEmptyLabel = options.emptyLabel ?? EMPTY;\n\t\tconst major = resolveMajorAmount({ amount, unit: options.unit, minorUnitScale: options.minorUnitScale });\n\t\tif (major === null) return resolvedEmptyLabel;\n\t\treturn formatMoneyAmount({\n\t\t\tamount: major,\n\t\t\tcurrency: options.currency ?? money.defaultCurrency ?? 'USD',\n\t\t\tsymbol: options.symbol,\n\t\t\tlocale: options.locale ?? formatting.locale,\n\t\t\tcurrencyDisplay: options.currencyDisplay,\n\t\t\tminimumFractionDigits: options.minimumFractionDigits,\n\t\t\tmaximumFractionDigits: options.maximumFractionDigits,\n\t\t\tformatMode: options.formatMode ?? money.formatMode ?? 'with_code',\n\t\t}) ?? resolvedEmptyLabel;\n\t}, [\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\tformatting.locale, money.defaultCurrency, money.formatMode,\n\t]);\n}\n\n/** Standalone amounts read as foreground medium; in a sentence they take its typography. */\nconst MONEY_ROLE: ValueTypographyRole = { type: 'main', weight: 'medium' };\n\n/** Logical alignment: `left`/`right` follow the reading direction, like `Text`. */\nfunction getAlignmentClasses(align: TextProps['align']) {\n\tif (align === 'left') return { text: 'text-start', justify: 'justify-start' };\n\tif (align === 'center') return { text: 'text-center', justify: 'justify-center' };\n\treturn { text: 'text-end', justify: 'justify-end' };\n}\n\n/**\n * Canonical monetary display primitive.\n *\n * It owns major/minor-unit conversion, locale-aware formatting, empty values,\n * and optional inline/stacked dual-currency display. Consumers should use\n * this component instead of composing separate money-display or currency-pair\n * wrappers.\n */\nexport function Money({\n\tamount,\n\tcurrency,\n\tunit = 'major',\n\tminorUnitScale,\n\tsymbol,\n\tlocale,\n\tcurrencyDisplay,\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\temptyLabel = EMPTY,\n\tsize: sizeProp,\n\talign = 'right',\n\tweight: weightProp,\n\ttype: typeProp,\n\ttag = 'span',\n\tlineHeight: lineHeightProp,\n\tnumeric,\n\tsecondary,\n\tdisplayMode,\n\tlayout,\n\tsecondaryEmphasis = 'discrete',\n\tseparator = '·',\n\tclassName,\n\tref,\n\t...props\n}: MoneyProps) {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst typography = useValueTypography(\n\t\t{ size: sizeProp, type: typeProp, weight: weightProp, lineHeight: lineHeightProp },\n\t\tMONEY_ROLE,\n\t);\n\tconst { size, type, weight, lineHeight } = typography;\n\tconst resolvedCurrency = currency ?? money.defaultCurrency ?? 'USD';\n\tconst primaryAmount = resolveMajorAmount({ amount, unit, minorUnitScale });\n\tconst primaryLabel = primaryAmount === null\n\t\t? null\n\t\t: formatMoneyAmount({\n\t\t\t\tamount: primaryAmount,\n\t\t\t\tcurrency: resolvedCurrency,\n\t\t\t\tsymbol,\n\t\t\t\tlocale: locale ?? formatting.locale,\n\t\t\t\tcurrencyDisplay,\n\t\t\t\tminimumFractionDigits,\n\t\t\t\tmaximumFractionDigits,\n\t\t\t\tformatMode: formatMode ?? money.formatMode ?? 'with_code',\n\t\t\t});\n\n\tif (primaryLabel === null) {\n\t\tconst empty = emptyValueTypography(typography, weightProp);\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={empty.size}\n\t\t\t\talign={align}\n\t\t\t\tweight={empty.weight}\n\t\t\t\ttype={empty.type}\n\t\t\t\tlineHeight={empty.lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryAmount = secondary ? resolveMajorAmount(secondary) : null;\n\tconst resolvedSecondaryCurrency = secondary?.currency ?? money.displayCurrency ?? resolvedCurrency;\n\tconst resolvedDisplayMode = displayMode\n\t\t?? (money.dualPricingEnabled ? money.displayMode : undefined)\n\t\t?? 'dual';\n\tconst hasDifferentCurrencies = resolvedSecondaryCurrency !== resolvedCurrency;\n\tconst shouldRenderSecondary = secondaryAmount !== null\n\t\t&& secondaryEmphasis !== 'hidden'\n\t\t&& resolvedDisplayMode !== 'default_only'\n\t\t&& (resolvedDisplayMode !== 'dynamic' || hasDifferentCurrencies);\n\n\tif (!shouldRenderSecondary || !secondary) {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\tweight={weight}\n\t\t\t\ttype={type}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline whitespace-nowrap tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryLabel = formatMoneyAmount({\n\t\tamount: secondaryAmount,\n\t\tcurrency: resolvedSecondaryCurrency,\n\t\tsymbol: secondary.symbol,\n\t\tlocale: locale ?? formatting.locale,\n\t\tcurrencyDisplay: secondary.currencyDisplay ?? currencyDisplay,\n\t\tminimumFractionDigits: secondary.minimumFractionDigits ?? minimumFractionDigits,\n\t\tmaximumFractionDigits: secondary.maximumFractionDigits ?? maximumFractionDigits,\n\t\tformatMode: secondary.formatMode ?? formatMode ?? money.formatMode ?? 'with_code',\n\t});\n\tconst resolvedLayout: MoneyLayout = layout\n\t\t?? (money.dualPricingDisplay === 'inline' ? 'inline' : 'stacked');\n\tconst secondarySize: TextSize | undefined = secondaryEmphasis === 'match'\n\t\t? size\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'xs'\n\t\t\t: 'xxs';\n\tconst secondaryType: TextProps['type'] = secondaryEmphasis === 'match'\n\t\t? type\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'secondary'\n\t\t\t: 'discrete';\n\tconst secondaryWeight: TextProps['weight'] = secondaryEmphasis === 'match' ? weight : 'regular';\n\tconst alignment = getAlignmentClasses(align);\n\n\tif (resolvedLayout === 'inline') {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\ttype={type}\n\t\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'money--component money--inline inline-flex items-baseline gap-space-xs whitespace-nowrap tabular-nums',\n\t\t\t\t\talignment.justify,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size={size} weight={weight} type={type} lineHeight={lineHeight} numeric={numeric} className=\"money--primary\">\n\t\t\t\t\t{primaryLabel}\n\t\t\t\t</Text>\n\t\t\t\t<span className=\"money--separator inline-flex shrink-0 items-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t{separator}\n\t\t\t\t</span>\n\t\t\t\t<Text tag=\"span\" size={secondarySize} weight={secondaryWeight} type={secondaryType} lineHeight={lineHeight} numeric={numeric} className=\"money--secondary\">\n\t\t\t\t\t{secondaryLabel}\n\t\t\t\t</Text>\n\t\t\t</Text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag={tag}\n\t\t\tsize={size}\n\t\t\talign={align}\n\t\t\ttype={type}\n\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\tlineHeight=\"tight\"\n\t\t\tnumeric={numeric}\n\t\t\tclassName={cn(\n\t\t\t\t'money--component money--stacked inline-flex flex-col whitespace-nowrap tabular-nums',\n\t\t\t\talignment.text,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Text tag=\"span\" size={size} align={align} weight={weight} type={type} lineHeight=\"tight\" numeric={numeric} className=\"money--primary\">\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t\t<Text tag=\"span\" size={secondarySize} align={align} weight={secondaryWeight} type={secondaryType} lineHeight=\"tight\" numeric={numeric} className=\"money--secondary\">\n\t\t\t\t{secondaryLabel}\n\t\t\t</Text>\n\t\t</Text>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY, formatWithMinusSign } from '../../lib/format';\nimport { useFormattingConfig } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport interface NumberProps extends SpanProps {\n\tvalue?: number | string | null;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Passed to `Intl.NumberFormat`; for example `signDisplay: 'exceptZero'` for deltas. */\n\toptions?: Intl.NumberFormatOptions;\n\t/** Rendered with the shared empty treatment when the value is absent or unparsable. Defaults to an em dash. */\n\temptyLabel?: ReactNode;\n\t/** Text size. Defaults to the provider text size; inside running text, the surrounding size. */\n\tsize?: TextSize;\n\t/** Text alignment. Defaults to `right` so columns of figures line up. */\n\talign?: TextProps['align'];\n\t/** Font weight. Defaults to `regular`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\t/** Line height. Defaults to the role leading; inside running text, the surrounding leading. */\n\tlineHeight?: TextProps['lineHeight'];\n\tref?: Ref<HTMLSpanElement>;\n}\n\nexport interface PercentProps extends Omit<NumberProps, 'options'> {\n\t/** The value is already 0–100 rather than a 0–1 ratio. Defaults to `false`. */\n\tscaled?: boolean;\n\t/** Passed to `Intl.NumberFormat` after the percent style and one-decimal default. */\n\toptions?: Intl.NumberFormatOptions;\n\tref?: Ref<HTMLSpanElement>;\n}\n\nconst NUMBER_ROLE: ValueTypographyRole = { type: 'main', weight: 'regular' };\n\nfunction parseNumericValue(value: NumberProps['value']) {\n\tif (value === null || value === undefined || value === '') return null;\n\tconst parsed = typeof value === 'number' ? value : globalThis.Number.parseFloat(value);\n\treturn globalThis.Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction renderNumberLabel(value: NumberProps['value'], locale?: string, options?: Intl.NumberFormatOptions) {\n\tconst parsed = parseNumericValue(value);\n\tif (parsed === null) return null;\n\treturn formatWithMinusSign(new Intl.NumberFormat(locale, options), parsed);\n}\n\n/**\n * A locale-formatted count or quantity in the sans UI font with tabular figures.\n * Negative values use the typographic minus sign (U+2212).\n */\nexport function Number({\n\tvalue,\n\tlocale,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tlineHeight,\n\tclassName,\n\tref,\n\t...props\n}: NumberProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight, lineHeight }, NUMBER_ROLE);\n\tconst label = renderNumberLabel(value, locale ?? formatting.locale, options);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('number--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n\n/**\n * A percentage in the sans UI font with tabular figures. Expects a 0–1 ratio\n * unless `scaled`; one decimal place by default; negative values use U+2212.\n */\nexport function Percent({\n\tvalue,\n\tlocale,\n\tscaled = false,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tlineHeight,\n\tclassName,\n\tref,\n\t...props\n}: PercentProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight, lineHeight }, NUMBER_ROLE);\n\tconst parsed = parseNumericValue(value);\n\tconst label = parsed === null\n\t\t? null\n\t\t: formatWithMinusSign(new Intl.NumberFormat(locale ?? formatting.locale, {\n\t\t\t\tstyle: 'percent',\n\t\t\t\tmaximumFractionDigits: 1,\n\t\t\t\t...options,\n\t\t\t}), scaled ? parsed / 100 : parsed);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('percent--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n"],"mappings":"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"}