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
@@ -1 +1 @@
1
- {"version":3,"file":"signature-pad.js","names":["Text","Button","Stack","fieldStateRecipes","Input","FormField","defaultSignaturePadStrings","emptySignature","isSignatureEmpty","value","stroke","clamp","normalizeSignature","point","drawSignature","context","width","height","first","strokeWidth","i","a","b","escapeXml","text","character","signaturePadToSVG","signature","ink","index","SignaturePad","forwardRef","controlledValue","stringsProp","rootProps","props","controlled","internalValue","setInternalValue","useState","defaultValue","normalizedControlledValue","useMemo","valueRef","useRef","undoHistory","redoHistory","historyVersion","setHistoryVersion","live","drawing","setDrawing","canvasRef","fieldRef","typedRef","lastPublished","generatedId","useId","rootId","id","strings","useStrings","instructions","allowTypedSignature","locked","disabled","readOnly","inkWidth","paint","canvas","bounds","scale","cancelStroke","publish","normalized","next","history","onValueChange","version","undo","previous","redo","focus","useImperativeHandle","ref","snapshot","format","options","useEffect","redraw","resize","theme","ancestor","owner","active","resetTimer","reset","event","form","name","required","pointFrom","sample","finish","endpoint","last","empty","cn","className","invalid","samples","SignaturePadPreview","pointIndex"],"sources":["../../src/components/base/signature-pad/signature-pad.types.ts","../../src/components/base/signature-pad/signature-pad.utils.ts","../../src/components/base/signature-pad/signature-pad.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\n/** Coordinates are fractions of the drawing area, so signatures survive resize. */\nexport interface SignaturePadPoint { x: number; y: number; pressure: number }\nexport interface SignaturePadStroke { points: readonly SignaturePadPoint[] }\nexport interface SignaturePadValue {\n\tstrokes: readonly SignaturePadStroke[];\n\t/** Accessible alternative to drawing; included in exports and native form data. */\n\ttypedName?: string;\n}\nexport type SignaturePadFormat = 'png' | 'svg' | 'json';\nexport interface SignaturePadExportOptions { width?: number; height?: number; scale?: number }\nexport interface SignaturePadHandle {\n\tfocus: () => void;\n\tclear: () => void;\n\tundo: () => void;\n\tredo: () => void;\n\t/** PNG is a data URL, SVG is markup, JSON is the structured value. */\n\tserialize: (format?: SignaturePadFormat, options?: SignaturePadExportOptions) => string;\n}\nexport interface SignaturePadStrings {\n\tlabel: string; instructions: string; drawingInstructions: string; placeholder: string; typedName: string;\n\tundo: string; redo: string; clear: string; empty: string; signed: string;\n}\nexport const defaultSignaturePadStrings: SignaturePadStrings = {\n\tlabel: 'Signature', instructions: 'Draw with a pointer or type your name below. Escape cancels a stroke; Control or Command Z undoes it.',\n\tdrawingInstructions: 'Draw with a pointer. Escape cancels a stroke; Control or Command Z undoes it.',\n\tplaceholder: 'Sign here', typedName: 'Or type your full name',\n\tundo: 'Undo', redo: 'Redo', clear: 'Clear signature', empty: 'Signature is empty', signed: 'Signature entered',\n};\nexport interface SignaturePadProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'defaultValue' | 'onChange'> {\n\t/** Controlled structured signature. */\n\tvalue?: SignaturePadValue;\n\t/** Initial structured signature for uncontrolled use. */\n\tdefaultValue?: SignaturePadValue;\n\tonValueChange?: (value: SignaturePadValue) => void;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tinvalid?: boolean;\n\t/** Native field serializes JSON; an empty signature fails required validation. */\n\tname?: string;\n\tform?: string;\n\trequired?: boolean;\n\t/** Shows the keyboard-accessible typed signature alternative. @default true */\n\tallowTypedSignature?: boolean;\n\t/** Ink diameter in CSS drawing pixels; pen pressure varies it. @default 2 */\n\tstrokeWidth?: number;\n\tstrings?: StringsProp<SignaturePadStrings>;\n}\nexport interface SignaturePadPreviewProps extends ComponentPropsWithoutRef<'svg'> {\n\tvalue: SignaturePadValue;\n\tstrokeWidth?: number;\n}\n","import type { SignaturePadValue } from './signature-pad.types';\n\nexport const emptySignature: SignaturePadValue = { strokes: [] };\nexport function isSignatureEmpty(value: SignaturePadValue): boolean {\n\treturn !value.typedName?.trim() && !value.strokes.some((stroke) => stroke.points.length > 0);\n}\nconst clamp = (value: number) => Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;\nexport function normalizeSignature(value: SignaturePadValue): SignaturePadValue {\n\treturn {\n\t\tstrokes: value.strokes.filter((stroke) => stroke.points.length > 0).map((stroke) => ({\n\t\t\tpoints: stroke.points.map((point) => ({ x: clamp(point.x), y: clamp(point.y), pressure: clamp(point.pressure) })),\n\t\t})),\n\t\t...(value.typedName !== undefined ? { typedName: value.typedName } : {}),\n\t};\n}\n\n/** Drawing geometry, separate from structural UI spacing and theme tokens. */\nexport function drawSignature(context: CanvasRenderingContext2D, value: SignaturePadValue, width: number, height: number, strokeWidth: number) {\n\tcontext.clearRect(0, 0, width, height);\n\tcontext.lineCap = 'round';\n\tcontext.lineJoin = 'round';\n\tfor (const stroke of value.strokes) {\n\t\tconst first = stroke.points[0];\n\t\tif (!first) continue;\n\t\tif (stroke.points.length === 1) {\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc(first.x * width, first.y * height, strokeWidth * (0.5 + first.pressure) / 2, 0, Math.PI * 2);\n\t\t\tcontext.fill();\n\t\t}\n\t\tfor (let i = 1; i < stroke.points.length; i++) {\n\t\t\tconst a = stroke.points[i - 1]; const b = stroke.points[i];\n\t\t\tcontext.lineWidth = strokeWidth * (0.5 + (a.pressure + b.pressure) / 2);\n\t\t\tcontext.beginPath(); context.moveTo(a.x * width, a.y * height); context.lineTo(b.x * width, b.y * height); context.stroke();\n\t\t}\n\t}\n\tif (value.typedName) {\n\t\tcontext.font = `${Math.max(12, height / 5)}px cursive`;\n\t\tcontext.textBaseline = 'bottom';\n\t\tcontext.fillText(value.typedName, width * 0.04, height * 0.9, width * 0.92);\n\t}\n}\n\nconst escapeXml = (text: string) => text.replace(/[&<>\"']/g, (character) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&apos;' })[character]!);\n/** Semantic currentColor is preserved unless a resolved export ink is supplied. */\nexport function signaturePadToSVG(value: SignaturePadValue, width = 600, height = 200, strokeWidth = 2, ink = 'currentColor'): string {\n\tconst signature = normalizeSignature(value);\n\tconst shapes = signature.strokes.map((stroke) => {\n\t\tconst first = stroke.points[0];\n\t\tif (stroke.points.length === 1) return `<circle cx=\"${first.x * width}\" cy=\"${first.y * height}\" r=\"${strokeWidth * (0.5 + first.pressure) / 2}\" fill=\"${escapeXml(ink)}\"/>`;\n\t\treturn stroke.points.slice(1).map((point, index) => {\n\t\t\tconst a = stroke.points[index];\n\t\t\treturn `<path d=\"M${a.x * width} ${a.y * height}L${point.x * width} ${point.y * height}\" fill=\"none\" stroke=\"${escapeXml(ink)}\" stroke-width=\"${strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)}\" stroke-linecap=\"round\"/>`;\n\t\t}).join('');\n\t}).join('');\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${shapes}${signature.typedName ? `<text x=\"${width * 0.04}\" y=\"${height * 0.9}\" textLength=\"${Math.min(width * 0.92, signature.typedName.length * height * 0.1)}\" font-family=\"cursive\" font-size=\"${Math.max(12, height / 5)}\" fill=\"${escapeXml(ink)}\">${escapeXml(signature.typedName)}</text>` : ''}</svg>`;\n}\n","import { forwardRef, useEffect, useLayoutEffect, useId, useImperativeHandle, useMemo, useRef, useState, type PointerEvent } from 'react';\nimport { Button } from '../buttons';\nimport { FormField } from '../forms/form-field';\nimport { Input } from '../text-inputs';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useStrings } from '../../../lib/strings';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { defaultSignaturePadStrings, type SignaturePadHandle, type SignaturePadPoint, type SignaturePadProps, type SignaturePadPreviewProps, type SignaturePadValue } from './signature-pad.types';\nimport { drawSignature, emptySignature, isSignatureEmpty, normalizeSignature, signaturePadToSVG } from './signature-pad.utils';\n\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(function SignaturePad(props, ref) {\n\tconst { value: controlledValue, defaultValue = emptySignature, onValueChange, disabled = false, readOnly = false, invalid,\n\t\tname, form, required, allowTypedSignature = true, strokeWidth = 2, strings: stringsProp, className, id, ...rootProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst [internalValue, setInternalValue] = useState(() => normalizeSignature(defaultValue));\n\tconst normalizedControlledValue = useMemo(() => normalizeSignature(controlledValue ?? emptySignature), [controlledValue]);\n\tconst value = controlled ? normalizedControlledValue : internalValue;\n\tconst valueRef = useRef(value);\n\tuseLayoutEffect(() => { valueRef.current = value; }, [value]);\n\tconst undoHistory = useRef<SignaturePadValue[]>([]);\n\tconst redoHistory = useRef<SignaturePadValue[]>([]);\n\tconst [historyVersion, setHistoryVersion] = useState(0);\n\tconst live = useRef<{ pointerId: number; points: SignaturePadPoint[]; initial: SignaturePadValue } | null>(null);\n\tconst [drawing, setDrawing] = useState(false);\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst fieldRef = useRef<HTMLInputElement>(null);\n\tconst typedRef = useRef<HTMLInputElement>(null);\n\tconst lastPublished = useRef<SignaturePadValue | null>(null);\n\tconst generatedId = useId();\n\tconst rootId = id ?? `signature-${generatedId}`;\n\tconst strings = useStrings(defaultSignaturePadStrings, stringsProp);\n\tconst instructions = allowTypedSignature ? strings.instructions : stringsProp?.instructions ?? strings.drawingInstructions;\n\tconst locked = disabled || readOnly;\n\tconst inkWidth = Number.isFinite(strokeWidth) ? Math.max(0.25, strokeWidth) : 2;\n\n\tconst paint = (signature: SignaturePadValue) => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst bounds = canvas.getBoundingClientRect();\n\t\tif (!bounds.width || !bounds.height) return;\n\t\tconst scale = window.devicePixelRatio || 1;\n\t\tif (canvas.width !== Math.round(bounds.width * scale)) canvas.width = Math.round(bounds.width * scale);\n\t\tif (canvas.height !== Math.round(bounds.height * scale)) canvas.height = Math.round(bounds.height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) return;\n\t\tcontext.setTransform(scale, 0, 0, scale, 0, 0);\n\t\tcontext.strokeStyle = context.fillStyle = getComputedStyle(canvas).color;\n\t\tdrawSignature(context, normalizeSignature(signature), bounds.width, bounds.height, inkWidth);\n\t};\n\tconst cancelStroke = () => {\n\t\tconst stroke = live.current;\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (stroke && canvasRef.current?.hasPointerCapture?.(stroke.pointerId)) canvasRef.current.releasePointerCapture(stroke.pointerId);\n\t\tpaint(valueRef.current);\n\t};\n\tconst publish = (next: SignaturePadValue, history = true) => {\n\t\tif (locked) return;\n\t\tcancelStroke();\n\t\tconst normalized = normalizeSignature(next);\n\t\tif (history) { undoHistory.current.push(valueRef.current); redoHistory.current = []; }\n\t\tlastPublished.current = normalized;\n\t\tif (!controlled) { valueRef.current = normalized; setInternalValue(normalized); }\n\t\tonValueChange?.(normalized);\n\t\tsetHistoryVersion((version) => version + 1);\n\t};\n\tconst undo = () => {\n\t\tif (locked || !undoHistory.current.length) return;\n\t\tconst previous = undoHistory.current.pop()!;\n\t\tredoHistory.current.push(valueRef.current); publish(previous, false);\n\t};\n\tconst redo = () => {\n\t\tif (locked || !redoHistory.current.length) return;\n\t\tconst next = redoHistory.current.pop()!;\n\t\tundoHistory.current.push(valueRef.current); publish(next, false);\n\t};\n\tconst focus = () => (allowTypedSignature ? typedRef.current : canvasRef.current)?.focus();\n\tuseImperativeHandle(ref, () => ({ focus, undo, redo, clear: () => publish(emptySignature), serialize: (format = 'png', options = {}) => {\n\t\tconst snapshot = normalizeSignature(valueRef.current);\n\t\tif (format === 'json') return JSON.stringify(snapshot);\n\t\tconst bounds = canvasRef.current?.getBoundingClientRect();\n\t\tconst width = Number.isFinite(options.width) ? Math.max(1, options.width!) : bounds?.width || 600;\n\t\tconst height = Number.isFinite(options.height) ? Math.max(1, options.height!) : bounds?.height || 200;\n\t\tconst ink = canvasRef.current ? getComputedStyle(canvasRef.current).color : 'currentColor';\n\t\tif (format === 'svg') return signaturePadToSVG(snapshot, width, height, inkWidth, ink);\n\t\tconst scale = Number.isFinite(options.scale) ? Math.max(0.1, Math.min(8, options.scale!)) : window.devicePixelRatio || 1;\n\t\tconst canvas = document.createElement('canvas'); canvas.width = Math.round(width * scale); canvas.height = Math.round(height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) throw new Error('Canvas export is unavailable in this environment. Use SVG or JSON.');\n\t\tcontext.scale(scale, scale); context.strokeStyle = context.fillStyle = ink;\n\t\tdrawSignature(context, snapshot, width, height, inkWidth);\n\t\treturn canvas.toDataURL('image/png');\n\t} }));\n\n\tuseEffect(() => {\n\t\t// External replacement invalidates history; an acknowledged controlled edit retains it.\n\t\tif (controlled && JSON.stringify(value) !== JSON.stringify(lastPublished.current)) { undoHistory.current = []; redoHistory.current = []; setHistoryVersion((version) => version + 1); }\n\t\tlastPublished.current = value;\n\t\tcancelStroke();\n\t}, [value, disabled, readOnly]);\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst redraw = () => paint(live.current ? { ...live.current.initial, strokes: [...live.current.initial.strokes, { points: live.current.points }] } : valueRef.current);\n\t\tredraw();\n\t\tconst resize = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(redraw) : undefined;\n\t\tresize?.observe(canvas);\n\t\t// Theme scopes can change without resizing the drawing area.\n\t\tconst theme = new MutationObserver(redraw);\n\t\tfor (let ancestor: HTMLElement | null = canvas; ancestor; ancestor = ancestor.parentElement) theme.observe(ancestor, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n\t\twindow.addEventListener('resize', redraw);\n\t\treturn () => { resize?.disconnect(); theme.disconnect(); window.removeEventListener('resize', redraw); };\n\t}, [inkWidth]);\n\tuseEffect(() => {\n\t\tconst owner = fieldRef.current?.form ?? typedRef.current?.form ?? canvasRef.current?.closest('form');\n\t\tlet active = true;\n\t\tlet resetTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t// Trusted events can run microtasks between listeners. Wait for propagation and the native default action.\n\t\tconst reset = (event: Event) => {\n\t\t\tclearTimeout(resetTimer);\n\t\t\tresetTimer = setTimeout(() => { resetTimer = undefined; if (active && !event.defaultPrevented && !locked) { undoHistory.current = []; redoHistory.current = []; publish(defaultValue, false); } }, 0);\n\t\t};\n\t\towner?.addEventListener('reset', reset);\n\t\treturn () => { active = false; clearTimeout(resetTimer); owner?.removeEventListener('reset', reset); };\n\t}, [defaultValue, controlled, locked, onValueChange, form, name, required, allowTypedSignature]);\n\tconst pointFrom = (event: PointerEvent<HTMLCanvasElement>, sample: Pick<globalThis.PointerEvent, 'clientX' | 'clientY' | 'pressure'> = event): SignaturePadPoint => {\n\t\tconst bounds = event.currentTarget.getBoundingClientRect();\n\t\treturn { x: Math.max(0, Math.min(1, (sample.clientX - bounds.left) / (bounds.width || 1))), y: Math.max(0, Math.min(1, (sample.clientY - bounds.top) / (bounds.height || 1))), pressure: event.pointerType === 'pen' ? sample.pressure || 0.5 : 0.5 };\n\t};\n\tconst finish = (event: PointerEvent<HTMLCanvasElement>) => {\n\t\tconst stroke = live.current;\n\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t// A lift can arrive beyond the last move; keep that endpoint without duplicating a resting tap.\n\t\tconst endpoint = pointFrom(event);\n\t\tconst last = stroke.points[stroke.points.length - 1];\n\t\tif (last.x !== endpoint.x || last.y !== endpoint.y) stroke.points.push(endpoint);\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (valueRef.current === stroke.initial) publish({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t};\n\tconst empty = isSignatureEmpty(value);\n\treturn <Stack {...rootProps} id={rootId} role=\"group\" aria-label={rootProps['aria-label'] ?? strings.label} gap=\"sm\" className={cn('signature-pad--component min-w-0', className)} data-history-version={historyVersion} data-disabled={disabled || undefined} data-readonly={readOnly || undefined}>\n\t\t<Text id={`${rootId}-instructions`} size=\"xs\" type=\"secondary\">{instructions}</Text>\n\t\t{/* The drawing area is the field frame: keyboard focus on the canvas draws the\n\t\t shared outer ring on the frame, like any other field, instead of an inset ring. */}\n\t\t<div className={cn('signature-pad--area relative overflow-hidden rounded-inner border border-input bg-background text-foreground transition-[color,box-shadow]', 'has-[canvas:focus-visible]:ring-2 has-[canvas:focus-visible]:ring-ring', fieldStateRecipes.invalid, 'aria-invalid:has-[canvas:focus-visible]:ring-destructive', disabled && 'cursor-not-allowed opacity-50')} aria-invalid={invalid || undefined}>\n\t\t\t<canvas ref={canvasRef} className={cn('signature-pad--canvas block w-full aspect-[3/1] min-h-40 outline-none', !locked && 'touch-none cursor-crosshair')}\n\t\t\t\ttabIndex={disabled ? -1 : 0} role=\"img\" aria-label={strings.label} aria-describedby={`${rootId}-instructions ${rootId}-status`} aria-disabled={disabled || undefined} aria-invalid={invalid || undefined}\n\t\t\t\tonPointerDown={(event) => { if (locked || live.current || event.button !== 0) return; event.preventDefault(); event.currentTarget.focus(); event.currentTarget.setPointerCapture?.(event.pointerId); live.current = { pointerId: event.pointerId, points: [pointFrom(event)], initial: valueRef.current }; setDrawing(true); paint({ ...valueRef.current, strokes: [...valueRef.current.strokes, { points: live.current.points }] }); }}\n\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\tconst stroke = live.current;\n\t\t\t\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t\t\t\tconst samples = event.nativeEvent.getCoalescedEvents?.().filter((sample) => sample.pointerId === stroke.pointerId) ?? [];\n\t\t\t\t\tfor (const sample of samples.length ? samples : [event.nativeEvent]) stroke.points.push(pointFrom(event, sample));\n\t\t\t\t\tpaint({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t\t\t\t}}\n\t\t\t\tonPointerUp={finish} onPointerCancel={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }} onLostPointerCapture={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }}\n\t\t\t\tonContextMenu={(event) => { if (live.current) event.preventDefault(); }}\n\t\t\t\tonKeyDown={(event) => { if (event.key === 'Escape') cancelStroke(); if (locked) return; if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') { event.preventDefault(); if (event.shiftKey) redo(); else undo(); } if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') { event.preventDefault(); redo(); } }}>\n\t\t\t\t{instructions}\n\t\t\t</canvas>\n\t\t\t{empty && !drawing && <div aria-hidden=\"true\" className=\"signature-pad--placeholder pointer-events-none absolute inset-0 flex items-center justify-center\"><Text type=\"secondary\">{strings.placeholder}</Text></div>}\n\t\t</div>\n\t\t{allowTypedSignature && <FormField label={strings.typedName} htmlFor={`${rootId}-typed`}><Input ref={typedRef} id={`${rootId}-typed`} value={value.typedName ?? ''} disabled={disabled} readOnly={readOnly} invalid={invalid} onChange={(event) => publish({ ...valueRef.current, typedName: event.target.value })} /></FormField>}\n\t\t<Stack direction=\"horizontal\" gap=\"xs\" wrap>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !undoHistory.current.length} onClick={() => { undo(); focus(); }}>{strings.undo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !redoHistory.current.length} onClick={() => { redo(); focus(); }}>{strings.redo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || empty} onClick={() => { publish(emptySignature); focus(); }}>{strings.clear}</Button>\n\t\t</Stack>\n\t\t<Text id={`${rootId}-status`} role=\"status\" size=\"xs\" type=\"secondary\">{empty ? strings.empty : strings.signed}</Text>\n\t\t{(name || required) && <input ref={fieldRef} className=\"sr-only\" type=\"text\" tabIndex={-1} aria-hidden=\"true\" name={name} form={form} disabled={disabled} readOnly={readOnly} required={required} value={empty ? '' : JSON.stringify(value)} onChange={() => {}} onFocus={focus} onInvalid={focus} />}\n\t</Stack>;\n});\n\n/** Server-renderable preview; normalized geometry follows the semantic foreground. */\nexport const SignaturePadPreview = forwardRef<SVGSVGElement, SignaturePadPreviewProps>(function SignaturePadPreview({ value, strokeWidth = 2, className, ...props }, ref) {\n\tconst normalized = normalizeSignature(value);\n\treturn <svg ref={ref} role=\"img\" viewBox=\"0 0 600 200\" aria-label=\"Signature\" {...props} className={cn('signature-pad-preview--component w-full h-auto text-foreground', className)}>\n\t\t{normalized.strokes.map((stroke, index) => stroke.points.length === 1 ? <circle key={index} cx={stroke.points[0].x * 600} cy={stroke.points[0].y * 200} r={strokeWidth * (0.5 + stroke.points[0].pressure) / 2} fill=\"currentColor\" /> : <g key={index}>{stroke.points.slice(1).map((point, pointIndex) => { const a = stroke.points[pointIndex]; return <path key={pointIndex} d={`M${a.x * 600} ${a.y * 200}L${point.x * 600} ${point.y * 200}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)} strokeLinecap=\"round\" />; })}</g>)}\n\t\t{normalized.typedName && <text x=\"24\" y=\"180\" fill=\"currentColor\" fontFamily=\"cursive\" fontSize=\"40\" textLength={Math.min(552, normalized.typedName.length * 20)}>{normalized.typedName}</text>}\n\t</svg>;\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"signature-pad.js","names":["Text","Stack","fieldStateRecipes","Input","FormField","defaultSignaturePadStrings","emptySignature","isSignatureEmpty","value","stroke","clamp","normalizeSignature","point","signatureFallbackFont","drawSignature","context","width","height","first","strokeWidth","i","a","b","maxWidth","fontSize","fontFamily","measured","escapeXml","text","character","signaturePadToSVG","signature","ink","index","SignaturePad","forwardRef","controlledValue","stringsProp","rootProps","props","controlled","internalValue","setInternalValue","useState","defaultValue","normalizedControlledValue","useMemo","valueRef","useRef","undoHistory","redoHistory","historyVersion","setHistoryVersion","live","drawing","setDrawing","canvasRef","fieldRef","typedRef","lastPublished","generatedId","useId","rootId","id","strings","useStrings","instructions","allowTypedSignature","locked","disabled","readOnly","inkWidth","paint","canvas","bounds","scale","style","cancelStroke","publish","normalized","next","history","onValueChange","version","undo","previous","redo","focus","useImperativeHandle","ref","snapshot","format","options","useEffect","redraw","resize","theme","ancestor","fonts","owner","active","resetTimer","reset","event","form","name","required","pointFrom","sample","finish","endpoint","last","empty","cn","className","invalid","samples","Button","SignaturePadPreview","pointIndex"],"sources":["../../src/components/base/signature-pad/signature-pad.types.ts","../../src/components/base/signature-pad/signature-pad.utils.ts","../../src/components/base/signature-pad/signature-pad.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\n/** Coordinates are fractions of the drawing area, so signatures survive resize. */\nexport interface SignaturePadPoint { x: number; y: number; pressure: number }\nexport interface SignaturePadStroke { points: readonly SignaturePadPoint[] }\nexport interface SignaturePadValue {\n\tstrokes: readonly SignaturePadStroke[];\n\t/** Accessible alternative to drawing; included in exports and native form data. */\n\ttypedName?: string;\n}\nexport type SignaturePadFormat = 'png' | 'svg' | 'json';\nexport interface SignaturePadExportOptions { width?: number; height?: number; scale?: number }\nexport interface SignaturePadHandle {\n\tfocus: () => void;\n\tclear: () => void;\n\tundo: () => void;\n\tredo: () => void;\n\t/** PNG is a data URL, SVG is markup, JSON is the structured value. */\n\tserialize: (format?: SignaturePadFormat, options?: SignaturePadExportOptions) => string;\n}\nexport interface SignaturePadStrings {\n\tlabel: string; instructions: string; drawingInstructions: string; placeholder: string; typedName: string;\n\tundo: string; redo: string; clear: string; empty: string; signed: string;\n}\nexport const defaultSignaturePadStrings: SignaturePadStrings = {\n\tlabel: 'Signature', instructions: 'Draw with a pointer or type your name below. Escape cancels a stroke; Control or Command Z undoes it.',\n\tdrawingInstructions: 'Draw with a pointer. Escape cancels a stroke; Control or Command Z undoes it.',\n\tplaceholder: 'Sign here', typedName: 'Or type your full name',\n\tundo: 'Undo', redo: 'Redo', clear: 'Clear signature', empty: 'Signature is empty', signed: 'Signature entered',\n};\nexport interface SignaturePadProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'defaultValue' | 'onChange'> {\n\t/** Controlled structured signature. */\n\tvalue?: SignaturePadValue;\n\t/** Initial structured signature for uncontrolled use. */\n\tdefaultValue?: SignaturePadValue;\n\tonValueChange?: (value: SignaturePadValue) => void;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tinvalid?: boolean;\n\t/** Native field serializes JSON; an empty signature fails required validation. */\n\tname?: string;\n\tform?: string;\n\trequired?: boolean;\n\t/**\n\t * Shows the keyboard-accessible typed signature alternative. The typed name is\n\t * drawn and exported in the pad's font family: the theme sans unless a font is\n\t * set on the pad through `className` or `style`. @default true\n\t */\n\tallowTypedSignature?: boolean;\n\t/** Ink diameter in CSS drawing pixels; pen pressure varies it. @default 2 */\n\tstrokeWidth?: number;\n\tstrings?: StringsProp<SignaturePadStrings>;\n}\nexport interface SignaturePadPreviewProps extends ComponentPropsWithoutRef<'svg'> {\n\tvalue: SignaturePadValue;\n\tstrokeWidth?: number;\n}\n","import type { SignaturePadValue } from './signature-pad.types';\n\nexport const emptySignature: SignaturePadValue = { strokes: [] };\nexport function isSignatureEmpty(value: SignaturePadValue): boolean {\n\treturn !value.typedName?.trim() && !value.strokes.some((stroke) => stroke.points.length > 0);\n}\nconst clamp = (value: number) => Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;\nexport function normalizeSignature(value: SignaturePadValue): SignaturePadValue {\n\treturn {\n\t\tstrokes: value.strokes.filter((stroke) => stroke.points.length > 0).map((stroke) => ({\n\t\t\tpoints: stroke.points.map((point) => ({ x: clamp(point.x), y: clamp(point.y), pressure: clamp(point.pressure) })),\n\t\t})),\n\t\t...(value.typedName !== undefined ? { typedName: value.typedName } : {}),\n\t};\n}\n\n/**\n * A typed name is drawn in the field's own font family: the theme sans unless the\n * consumer sets a font on the pad. This fallback applies only outside the DOM.\n */\nexport const signatureFallbackFont = 'sans-serif';\n\n/** Drawing geometry, separate from structural UI spacing and theme tokens. */\nexport function drawSignature(context: CanvasRenderingContext2D, value: SignaturePadValue, width: number, height: number, strokeWidth: number, fontFamily = signatureFallbackFont) {\n\tcontext.clearRect(0, 0, width, height);\n\tcontext.lineCap = 'round';\n\tcontext.lineJoin = 'round';\n\tfor (const stroke of value.strokes) {\n\t\tconst first = stroke.points[0];\n\t\tif (!first) continue;\n\t\tif (stroke.points.length === 1) {\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc(first.x * width, first.y * height, strokeWidth * (0.5 + first.pressure) / 2, 0, Math.PI * 2);\n\t\t\tcontext.fill();\n\t\t}\n\t\tfor (let i = 1; i < stroke.points.length; i++) {\n\t\t\tconst a = stroke.points[i - 1]; const b = stroke.points[i];\n\t\t\tcontext.lineWidth = strokeWidth * (0.5 + (a.pressure + b.pressure) / 2);\n\t\t\tcontext.beginPath(); context.moveTo(a.x * width, a.y * height); context.lineTo(b.x * width, b.y * height); context.stroke();\n\t\t}\n\t}\n\tif (value.typedName) {\n\t\t// A long name steps the font down to fit before the canvas narrows its glyphs.\n\t\tconst maxWidth = width * 0.92;\n\t\tlet fontSize = Math.max(12, height / 5);\n\t\tcontext.font = `${fontSize}px ${fontFamily}`;\n\t\tconst measured = context.measureText?.(value.typedName).width ?? 0;\n\t\tif (measured > maxWidth) {\n\t\t\tfontSize = Math.max(12, fontSize * maxWidth / measured);\n\t\t\tcontext.font = `${fontSize}px ${fontFamily}`;\n\t\t}\n\t\tcontext.textBaseline = 'bottom';\n\t\tcontext.fillText(value.typedName, width * 0.04, height * 0.9, maxWidth);\n\t}\n}\n\nconst escapeXml = (text: string) => text.replace(/[&<>\"']/g, (character) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&apos;' })[character]!);\n/**\n * Semantic currentColor is preserved unless a resolved export ink is supplied. The\n * typed name uses `fontFamily`, which SignaturePad resolves from its rendered font.\n */\nexport function signaturePadToSVG(value: SignaturePadValue, width = 600, height = 200, strokeWidth = 2, ink = 'currentColor', fontFamily = signatureFallbackFont): string {\n\tconst signature = normalizeSignature(value);\n\tconst shapes = signature.strokes.map((stroke) => {\n\t\tconst first = stroke.points[0];\n\t\tif (stroke.points.length === 1) return `<circle cx=\"${first.x * width}\" cy=\"${first.y * height}\" r=\"${strokeWidth * (0.5 + first.pressure) / 2}\" fill=\"${escapeXml(ink)}\"/>`;\n\t\treturn stroke.points.slice(1).map((point, index) => {\n\t\t\tconst a = stroke.points[index];\n\t\t\treturn `<path d=\"M${a.x * width} ${a.y * height}L${point.x * width} ${point.y * height}\" fill=\"none\" stroke=\"${escapeXml(ink)}\" stroke-width=\"${strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)}\" stroke-linecap=\"round\"/>`;\n\t\t}).join('');\n\t}).join('');\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${shapes}${signature.typedName ? `<text x=\"${width * 0.04}\" y=\"${height * 0.9}\" textLength=\"${Math.min(width * 0.92, signature.typedName.length * height * 0.1)}\" font-family=\"${escapeXml(fontFamily)}\" font-size=\"${Math.max(12, height / 5)}\" fill=\"${escapeXml(ink)}\">${escapeXml(signature.typedName)}</text>` : ''}</svg>`;\n}\n","import { forwardRef, useEffect, useLayoutEffect, useId, useImperativeHandle, useMemo, useRef, useState, type PointerEvent } from 'react';\nimport { Button } from '../buttons';\nimport { FormField } from '../forms/form-field';\nimport { Input } from '../text-inputs';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useStrings } from '../../../lib/strings';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { defaultSignaturePadStrings, type SignaturePadHandle, type SignaturePadPoint, type SignaturePadProps, type SignaturePadPreviewProps, type SignaturePadValue } from './signature-pad.types';\nimport { drawSignature, emptySignature, isSignatureEmpty, normalizeSignature, signaturePadToSVG } from './signature-pad.utils';\n\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(function SignaturePad(props, ref) {\n\tconst { value: controlledValue, defaultValue = emptySignature, onValueChange, disabled = false, readOnly = false, invalid,\n\t\tname, form, required, allowTypedSignature = true, strokeWidth = 2, strings: stringsProp, className, id, ...rootProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst [internalValue, setInternalValue] = useState(() => normalizeSignature(defaultValue));\n\tconst normalizedControlledValue = useMemo(() => normalizeSignature(controlledValue ?? emptySignature), [controlledValue]);\n\tconst value = controlled ? normalizedControlledValue : internalValue;\n\tconst valueRef = useRef(value);\n\tuseLayoutEffect(() => { valueRef.current = value; }, [value]);\n\tconst undoHistory = useRef<SignaturePadValue[]>([]);\n\tconst redoHistory = useRef<SignaturePadValue[]>([]);\n\tconst [historyVersion, setHistoryVersion] = useState(0);\n\tconst live = useRef<{ pointerId: number; points: SignaturePadPoint[]; initial: SignaturePadValue } | null>(null);\n\tconst [drawing, setDrawing] = useState(false);\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst fieldRef = useRef<HTMLInputElement>(null);\n\tconst typedRef = useRef<HTMLInputElement>(null);\n\tconst lastPublished = useRef<SignaturePadValue | null>(null);\n\tconst generatedId = useId();\n\tconst rootId = id ?? `signature-${generatedId}`;\n\tconst strings = useStrings(defaultSignaturePadStrings, stringsProp);\n\tconst instructions = allowTypedSignature ? strings.instructions : stringsProp?.instructions ?? strings.drawingInstructions;\n\tconst locked = disabled || readOnly;\n\tconst inkWidth = Number.isFinite(strokeWidth) ? Math.max(0.25, strokeWidth) : 2;\n\n\tconst paint = (signature: SignaturePadValue) => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst bounds = canvas.getBoundingClientRect();\n\t\tif (!bounds.width || !bounds.height) return;\n\t\tconst scale = window.devicePixelRatio || 1;\n\t\tif (canvas.width !== Math.round(bounds.width * scale)) canvas.width = Math.round(bounds.width * scale);\n\t\tif (canvas.height !== Math.round(bounds.height * scale)) canvas.height = Math.round(bounds.height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) return;\n\t\tcontext.setTransform(scale, 0, 0, scale, 0, 0);\n\t\tconst style = getComputedStyle(canvas);\n\t\tcontext.strokeStyle = context.fillStyle = style.color;\n\t\tdrawSignature(context, normalizeSignature(signature), bounds.width, bounds.height, inkWidth, style.fontFamily || undefined);\n\t};\n\tconst cancelStroke = () => {\n\t\tconst stroke = live.current;\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (stroke && canvasRef.current?.hasPointerCapture?.(stroke.pointerId)) canvasRef.current.releasePointerCapture(stroke.pointerId);\n\t\tpaint(valueRef.current);\n\t};\n\tconst publish = (next: SignaturePadValue, history = true) => {\n\t\tif (locked) return;\n\t\tcancelStroke();\n\t\tconst normalized = normalizeSignature(next);\n\t\tif (history) { undoHistory.current.push(valueRef.current); redoHistory.current = []; }\n\t\tlastPublished.current = normalized;\n\t\tif (!controlled) { valueRef.current = normalized; setInternalValue(normalized); }\n\t\tonValueChange?.(normalized);\n\t\tsetHistoryVersion((version) => version + 1);\n\t};\n\tconst undo = () => {\n\t\tif (locked || !undoHistory.current.length) return;\n\t\tconst previous = undoHistory.current.pop()!;\n\t\tredoHistory.current.push(valueRef.current); publish(previous, false);\n\t};\n\tconst redo = () => {\n\t\tif (locked || !redoHistory.current.length) return;\n\t\tconst next = redoHistory.current.pop()!;\n\t\tundoHistory.current.push(valueRef.current); publish(next, false);\n\t};\n\tconst focus = () => (allowTypedSignature ? typedRef.current : canvasRef.current)?.focus();\n\tuseImperativeHandle(ref, () => ({ focus, undo, redo, clear: () => publish(emptySignature), serialize: (format = 'png', options = {}) => {\n\t\tconst snapshot = normalizeSignature(valueRef.current);\n\t\tif (format === 'json') return JSON.stringify(snapshot);\n\t\tconst bounds = canvasRef.current?.getBoundingClientRect();\n\t\tconst width = Number.isFinite(options.width) ? Math.max(1, options.width!) : bounds?.width || 600;\n\t\tconst height = Number.isFinite(options.height) ? Math.max(1, options.height!) : bounds?.height || 200;\n\t\tconst style = canvasRef.current ? getComputedStyle(canvasRef.current) : undefined;\n\t\tconst ink = style?.color || 'currentColor';\n\t\tconst fontFamily = style?.fontFamily || undefined;\n\t\tif (format === 'svg') return signaturePadToSVG(snapshot, width, height, inkWidth, ink, fontFamily);\n\t\tconst scale = Number.isFinite(options.scale) ? Math.max(0.1, Math.min(8, options.scale!)) : window.devicePixelRatio || 1;\n\t\tconst canvas = document.createElement('canvas'); canvas.width = Math.round(width * scale); canvas.height = Math.round(height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) throw new Error('Canvas export is unavailable in this environment. Use SVG or JSON.');\n\t\tcontext.scale(scale, scale); context.strokeStyle = context.fillStyle = ink;\n\t\tdrawSignature(context, snapshot, width, height, inkWidth, fontFamily);\n\t\treturn canvas.toDataURL('image/png');\n\t} }));\n\n\tuseEffect(() => {\n\t\t// External replacement invalidates history; an acknowledged controlled edit retains it.\n\t\tif (controlled && JSON.stringify(value) !== JSON.stringify(lastPublished.current)) { undoHistory.current = []; redoHistory.current = []; setHistoryVersion((version) => version + 1); }\n\t\tlastPublished.current = value;\n\t\tcancelStroke();\n\t}, [value, disabled, readOnly]);\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst redraw = () => paint(live.current ? { ...live.current.initial, strokes: [...live.current.initial.strokes, { points: live.current.points }] } : valueRef.current);\n\t\tredraw();\n\t\tconst resize = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(redraw) : undefined;\n\t\tresize?.observe(canvas);\n\t\t// Theme scopes can change without resizing the drawing area.\n\t\tconst theme = new MutationObserver(redraw);\n\t\tfor (let ancestor: HTMLElement | null = canvas; ancestor; ancestor = ancestor.parentElement) theme.observe(ancestor, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n\t\twindow.addEventListener('resize', redraw);\n\t\t// A typed name drawn before the theme font finished loading repaints in it.\n\t\tconst fonts = typeof document !== 'undefined' ? document.fonts : undefined;\n\t\tfonts?.addEventListener?.('loadingdone', redraw);\n\t\treturn () => { resize?.disconnect(); theme.disconnect(); window.removeEventListener('resize', redraw); fonts?.removeEventListener?.('loadingdone', redraw); };\n\t}, [inkWidth]);\n\tuseEffect(() => {\n\t\tconst owner = fieldRef.current?.form ?? typedRef.current?.form ?? canvasRef.current?.closest('form');\n\t\tlet active = true;\n\t\tlet resetTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t// Trusted events can run microtasks between listeners. Wait for propagation and the native default action.\n\t\tconst reset = (event: Event) => {\n\t\t\tclearTimeout(resetTimer);\n\t\t\tresetTimer = setTimeout(() => { resetTimer = undefined; if (active && !event.defaultPrevented && !locked) { undoHistory.current = []; redoHistory.current = []; publish(defaultValue, false); } }, 0);\n\t\t};\n\t\towner?.addEventListener('reset', reset);\n\t\treturn () => { active = false; clearTimeout(resetTimer); owner?.removeEventListener('reset', reset); };\n\t}, [defaultValue, controlled, locked, onValueChange, form, name, required, allowTypedSignature]);\n\tconst pointFrom = (event: PointerEvent<HTMLCanvasElement>, sample: Pick<globalThis.PointerEvent, 'clientX' | 'clientY' | 'pressure'> = event): SignaturePadPoint => {\n\t\tconst bounds = event.currentTarget.getBoundingClientRect();\n\t\treturn { x: Math.max(0, Math.min(1, (sample.clientX - bounds.left) / (bounds.width || 1))), y: Math.max(0, Math.min(1, (sample.clientY - bounds.top) / (bounds.height || 1))), pressure: event.pointerType === 'pen' ? sample.pressure || 0.5 : 0.5 };\n\t};\n\tconst finish = (event: PointerEvent<HTMLCanvasElement>) => {\n\t\tconst stroke = live.current;\n\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t// A lift can arrive beyond the last move; keep that endpoint without duplicating a resting tap.\n\t\tconst endpoint = pointFrom(event);\n\t\tconst last = stroke.points[stroke.points.length - 1];\n\t\tif (last.x !== endpoint.x || last.y !== endpoint.y) stroke.points.push(endpoint);\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (valueRef.current === stroke.initial) publish({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t};\n\tconst empty = isSignatureEmpty(value);\n\treturn <Stack {...rootProps} id={rootId} role=\"group\" aria-label={rootProps['aria-label'] ?? strings.label} gap=\"sm\" className={cn('signature-pad--component min-w-0 font-sans', className)} data-history-version={historyVersion} data-disabled={disabled || undefined} data-readonly={readOnly || undefined}>\n\t\t<Text id={`${rootId}-instructions`} size=\"xs\" type=\"secondary\">{instructions}</Text>\n\t\t{/* The drawing area is the field frame: keyboard focus on the canvas draws the\n\t\t shared outer ring on the frame, like any other field, instead of an inset ring. */}\n\t\t<div className={cn('signature-pad--area relative overflow-hidden rounded-inner border border-input bg-background text-foreground transition-[color,box-shadow]', 'has-[canvas:focus-visible]:border-ring has-[canvas:focus-visible]:ring-3 has-[canvas:focus-visible]:ring-ring/50', fieldStateRecipes.invalid, 'aria-invalid:has-[canvas:focus-visible]:border-destructive aria-invalid:has-[canvas:focus-visible]:ring-destructive/30 dark:aria-invalid:has-[canvas:focus-visible]:ring-destructive/50', disabled && 'cursor-not-allowed opacity-50')} aria-invalid={invalid || undefined}>\n\t\t\t<canvas ref={canvasRef} className={cn('signature-pad--canvas block w-full aspect-[3/1] min-h-40 outline-none', !locked && 'touch-none cursor-crosshair')}\n\t\t\t\ttabIndex={disabled ? -1 : 0} role=\"img\" aria-label={strings.label} aria-describedby={`${rootId}-instructions ${rootId}-status`} aria-disabled={disabled || undefined} aria-invalid={invalid || undefined}\n\t\t\t\tonPointerDown={(event) => { if (locked || live.current || event.button !== 0) return; event.preventDefault(); event.currentTarget.focus(); event.currentTarget.setPointerCapture?.(event.pointerId); live.current = { pointerId: event.pointerId, points: [pointFrom(event)], initial: valueRef.current }; setDrawing(true); paint({ ...valueRef.current, strokes: [...valueRef.current.strokes, { points: live.current.points }] }); }}\n\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\tconst stroke = live.current;\n\t\t\t\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t\t\t\tconst samples = event.nativeEvent.getCoalescedEvents?.().filter((sample) => sample.pointerId === stroke.pointerId) ?? [];\n\t\t\t\t\tfor (const sample of samples.length ? samples : [event.nativeEvent]) stroke.points.push(pointFrom(event, sample));\n\t\t\t\t\tpaint({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t\t\t\t}}\n\t\t\t\tonPointerUp={finish} onPointerCancel={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }} onLostPointerCapture={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }}\n\t\t\t\tonContextMenu={(event) => { if (live.current) event.preventDefault(); }}\n\t\t\t\tonKeyDown={(event) => { if (event.key === 'Escape') cancelStroke(); if (locked) return; if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') { event.preventDefault(); if (event.shiftKey) redo(); else undo(); } if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') { event.preventDefault(); redo(); } }}>\n\t\t\t\t{instructions}\n\t\t\t</canvas>\n\t\t\t{empty && !drawing && <div aria-hidden=\"true\" className=\"signature-pad--placeholder pointer-events-none absolute inset-0 flex items-center justify-center\"><Text type=\"secondary\">{strings.placeholder}</Text></div>}\n\t\t</div>\n\t\t{allowTypedSignature && <FormField label={strings.typedName} htmlFor={`${rootId}-typed`}><Input ref={typedRef} id={`${rootId}-typed`} value={value.typedName ?? ''} disabled={disabled} readOnly={readOnly} invalid={invalid} onChange={(event) => publish({ ...valueRef.current, typedName: event.target.value })} /></FormField>}\n\t\t<Stack direction=\"horizontal\" gap=\"xs\" wrap>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !undoHistory.current.length} onClick={() => { undo(); focus(); }}>{strings.undo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !redoHistory.current.length} onClick={() => { redo(); focus(); }}>{strings.redo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || empty} onClick={() => { publish(emptySignature); focus(); }}>{strings.clear}</Button>\n\t\t</Stack>\n\t\t<Text id={`${rootId}-status`} role=\"status\" size=\"xs\" type=\"secondary\">{empty ? strings.empty : strings.signed}</Text>\n\t\t{(name || required) && <input ref={fieldRef} className=\"sr-only\" type=\"text\" tabIndex={-1} aria-hidden=\"true\" name={name} form={form} disabled={disabled} readOnly={readOnly} required={required} value={empty ? '' : JSON.stringify(value)} onChange={() => {}} onFocus={focus} onInvalid={focus} />}\n\t</Stack>;\n});\n\n/** Server-renderable preview; normalized geometry follows the semantic foreground. */\nexport const SignaturePadPreview = forwardRef<SVGSVGElement, SignaturePadPreviewProps>(function SignaturePadPreview({ value, strokeWidth = 2, className, ...props }, ref) {\n\tconst normalized = normalizeSignature(value);\n\treturn <svg ref={ref} role=\"img\" viewBox=\"0 0 600 200\" aria-label=\"Signature\" {...props} className={cn('signature-pad-preview--component w-full h-auto font-sans text-foreground', className)}>\n\t\t{normalized.strokes.map((stroke, index) => stroke.points.length === 1 ? <circle key={index} cx={stroke.points[0].x * 600} cy={stroke.points[0].y * 200} r={strokeWidth * (0.5 + stroke.points[0].pressure) / 2} fill=\"currentColor\" /> : <g key={index}>{stroke.points.slice(1).map((point, pointIndex) => { const a = stroke.points[pointIndex]; return <path key={pointIndex} d={`M${a.x * 600} ${a.y * 200}L${point.x * 600} ${point.y * 200}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)} strokeLinecap=\"round\" />; })}</g>)}\n\t\t{normalized.typedName && <text x=\"24\" y=\"180\" fill=\"currentColor\" fontSize=\"40\" textLength={Math.min(552, normalized.typedName.length * 20)}>{normalized.typedName}</text>}\n\t</svg>;\n});\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, i as t, n, r, t as i } from "../skeleton-DVMXr15h.js";
2
+ import { a as e, i as t, n, r, t as i } from "../skeleton-Byjnt7qr.js";
3
3
  export { i as ContentSkeleton, n as PageSkeleton, r as Skeleton, t as TableSkeleton, e as TwoColumnPageSkeleton };
@@ -1,3 +1,80 @@
1
1
  "use client";
2
- import { n as e, t } from "../spinner-CmTAbEp0.js";
3
- export { t as Spinner, e as defaultSpinnerStrings };
2
+ import { f as e } from "../ui-provider-C_U0Xma4.js";
3
+ import { useStrings as t } from "../lib/strings.js";
4
+ import { t as n } from "../utils-BRhFDwuU.js";
5
+ import { c as r } from "../typography-UTnveOEy.js";
6
+ import { t as i } from "../structure-BmisBK-3.js";
7
+ import { n as a } from "../track-recipes-CDcKmndW.js";
8
+ import { forwardRef as o } from "react";
9
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
10
+ //#region src/components/base/spinner/spinner.tsx
11
+ var l = { loading: "Loading" }, u = o(function({ label: a, className: o = "", variant: u, strings: m, style: h }, g) {
12
+ let { defaultVariant: _ } = e(), v = t(l, m), y = u ?? _ ?? "default";
13
+ return /* @__PURE__ */ s("div", {
14
+ ref: g,
15
+ role: y === "progress" ? void 0 : "status",
16
+ "aria-label": y === "progress" || a ? void 0 : v.loading,
17
+ className: n("spinner--component", "flex items-center justify-center p-surface"),
18
+ style: h,
19
+ children: /* @__PURE__ */ c(i, {
20
+ gap: "md",
21
+ align: "center",
22
+ justify: "center",
23
+ className: "w-full text-center",
24
+ children: [
25
+ y === "default" && /* @__PURE__ */ s(d, { className: o }),
26
+ y === "shimmer" && /* @__PURE__ */ s(f, { className: o }),
27
+ y === "progress" && /* @__PURE__ */ s(p, {
28
+ className: o,
29
+ label: a ?? v.loading
30
+ }),
31
+ !!a && /* @__PURE__ */ s(r, {
32
+ type: "secondary",
33
+ children: a
34
+ })
35
+ ]
36
+ })
37
+ });
38
+ });
39
+ u.displayName = "Spinner";
40
+ function d({ className: e = "" }) {
41
+ return /* @__PURE__ */ c("svg", {
42
+ className: n("h-10 w-10 text-primary-accent", e),
43
+ fill: "currentColor",
44
+ viewBox: "0 0 24 24",
45
+ xmlns: "http://www.w3.org/2000/svg",
46
+ "aria-hidden": "true",
47
+ children: [/* @__PURE__ */ s("path", {
48
+ d: "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z",
49
+ opacity: ".25"
50
+ }), /* @__PURE__ */ s("path", {
51
+ d: "M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z",
52
+ children: /* @__PURE__ */ s("animateTransform", {
53
+ attributeName: "transform",
54
+ type: "rotate",
55
+ dur: "0.75s",
56
+ values: "0 12 12;360 12 12",
57
+ repeatCount: "indefinite"
58
+ })
59
+ })]
60
+ });
61
+ }
62
+ function f({ className: e = "" }) {
63
+ return /* @__PURE__ */ s("div", {
64
+ className: n("h-10 w-10 rounded-full bg-gradient-to-r from-muted via-muted-foreground/30 to-muted bg-[length:200%_100%]", "animate-[shimmer_1.5s_ease-in-out_infinite]", e),
65
+ "aria-hidden": "true"
66
+ });
67
+ }
68
+ function p({ className: e = "", label: t }) {
69
+ return /* @__PURE__ */ s("div", {
70
+ className: n("w-full max-w-32 overflow-hidden rounded-full bg-muted", a.md, e),
71
+ role: "progressbar",
72
+ "aria-label": t,
73
+ "aria-busy": "true",
74
+ children: /* @__PURE__ */ s("div", { className: "h-full w-1/3 animate-[progress-slide_1.4s_ease-in-out_infinite] rounded-full bg-primary" })
75
+ });
76
+ }
77
+ //#endregion
78
+ export { u as Spinner, l as defaultSpinnerStrings };
79
+
80
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","names":["useSpinnerConfig","cn","Text","Stack","trackHeightClasses","defaultSpinnerStrings","Spinner","forwardRef","variantProp","stringsProp","strings","useStrings","variant","defaultVariant","label","SpinnerDefault","SpinnerShimmer","SpinnerProgress","className"],"sources":["../../src/components/base/spinner/spinner.tsx"],"sourcesContent":["import { trackHeightClasses } from '../../../lib/track-recipes';\n/**\n * Spinner — three-variant loading indicator with optional label.\n *\n * Variants:\n * - `default` — circular SVG spinner\n * - `shimmer` — round shimmer bar\n * - `progress` — slim animated progress strip\n *\n * `variant` resolves via `useSpinnerConfig().defaultVariant ?? 'default'`,\n * so a consumer can set the library-wide spinner style at the\n * `<UIProvider>` root and override per-mount as needed. Forwards a ref to\n * the outer wrapper so consumers can position/measure the spinner.\n */\nimport { forwardRef, type CSSProperties } from 'react';\n\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useSpinnerConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nexport type SpinnerVariant = 'default' | 'shimmer' | 'progress';\n\nexport interface SpinnerStrings {\n\t/** Accessible fallback when an indeterminate progress bar has no visible label. */\n\tloading: string;\n}\n\nexport const defaultSpinnerStrings: SpinnerStrings = {\n\tloading: 'Loading',\n};\n\nexport interface SpinnerProps {\n\t/** Visible label under the indicator; also its accessible name. */\n\tlabel?: string;\n\t/** Merged onto the indicator graphic (size, colour), not the padded wrapper. */\n\tclassName?: string;\n\t/** Indicator style: circular `default`, `shimmer`, or `progress` strip. Defaults to `UIProvider.spinner.defaultVariant`, then `default`. */\n\tvariant?: SpinnerVariant;\n\t/** Localizes the fallback progress-bar name. */\n\tstrings?: StringsProp<SpinnerStrings>;\n\tstyle?: CSSProperties;\n}\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(function Spinner(\n\t{ label, className = '', variant: variantProp, strings: stringsProp, style },\n\tref,\n) {\n\tconst { defaultVariant } = useSpinnerConfig();\n\tconst strings = useStrings(defaultSpinnerStrings, stringsProp);\n\tconst variant: SpinnerVariant = variantProp ?? defaultVariant ?? 'default';\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\t// The progress strip names itself as a progressbar; the other indicators\n\t\t\t// are announced as a polite status named by the label or loading copy.\n\t\t\trole={variant === 'progress' ? undefined : 'status'}\n\t\t\taria-label={variant === 'progress' || label ? undefined : strings.loading}\n\t\t\tclassName={cn('spinner--component', 'flex items-center justify-center p-surface')}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<Stack gap=\"md\" align=\"center\" justify=\"center\" className=\"w-full text-center\">\n\t\t\t\t{variant === 'default' && <SpinnerDefault className={className} />}\n\t\t\t\t{variant === 'shimmer' && <SpinnerShimmer className={className} />}\n\t\t\t\t{variant === 'progress' && <SpinnerProgress className={className} label={label ?? strings.loading} />}\n\t\t\t\t{!!label && <Text type=\"secondary\">{label}</Text>}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n});\n\nSpinner.displayName = 'Spinner';\n\nfunction SpinnerDefault({ className = '' }: { className?: string }) {\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn('h-10 w-10 text-primary-accent', className)}\n\t\t\tfill=\"currentColor\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path\n\t\t\t\td=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\n\t\t\t\topacity=\".25\"\n\t\t\t/>\n\t\t\t<path d=\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\">\n\t\t\t\t<animateTransform\n\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\tdur=\"0.75s\"\n\t\t\t\t\tvalues=\"0 12 12;360 12 12\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t/>\n\t\t\t</path>\n\t\t</svg>\n\t);\n}\n\nfunction SpinnerShimmer({ className = '' }: { className?: string }) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'h-10 w-10 rounded-full bg-gradient-to-r from-muted via-muted-foreground/30 to-muted bg-[length:200%_100%]',\n\t\t\t\t'animate-[shimmer_1.5s_ease-in-out_infinite]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-hidden=\"true\"\n\t\t/>\n\t);\n}\n\nfunction SpinnerProgress({ className = '', label }: { className?: string; label: string }) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('w-full max-w-32 overflow-hidden rounded-full bg-muted', trackHeightClasses.md, className)}\n\t\t\trole=\"progressbar\"\n\t\t\taria-label={label}\n\t\t\taria-busy=\"true\"\n\t\t>\n\t\t\t<div className=\"h-full w-1/3 animate-[progress-slide_1.4s_ease-in-out_infinite] rounded-full bg-primary\" />\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;AA6BA,IAAaK,IAAwC,EACpD,SAAS,UACV,GAcaC,IAAUC,EAAyC,SAC/D,EAAE,UAAO,eAAY,IAAI,SAASC,GAAa,SAASC,GAAa,YACrE,GACC;CACD,IAAM,EAAE,sBAAmBT,EAAiB,GACtCU,IAAUC,EAAWN,GAAuBI,CAAW,GACvDG,IAA0BJ,KAAeK,KAAkB;CAEjE,OACC,kBAAC,OAAD;EACM;EAGL,MAAMD,MAAY,aAAa,KAAA,IAAY;EAC3C,cAAYA,MAAY,cAAcE,IAAQ,KAAA,IAAYJ,EAAQ;EAClE,WAAWT,EAAG,sBAAsB,4CAA4C;EACzE;EAEP,UAAA,kBAACE,GAAD;GAAO,KAAI;GAAK,OAAM;GAAS,SAAQ;GAAS,WAAU;GAA1D,UAAA;IACES,MAAY,aAAa,kBAACG,GAAD,EAA2B,aAAY,CAAA;IAChEH,MAAY,aAAa,kBAACI,GAAD,EAA2B,aAAY,CAAA;IAChEJ,MAAY,cAAc,kBAACK,GAAD;KAA4B;KAAW,OAAOH,KAASJ,EAAQ;IAAU,CAAA;IACnG,CAAC,CAACI,KAAS,kBAACZ,GAAD;KAAM,MAAK;KAAa,UAAAY;IAAY,CAAA;GAC1C;;CACH,CAAA;AAEP,CAAC;AAED,EAAQ,cAAc;AAEtB,SAASC,EAAe,EAAE,eAAY,MAA8B;CACnE,OACC,kBAAC,OAAD;EACC,WAAWd,EAAG,iCAAiCiB,CAAS;EACxD,MAAK;EACL,SAAQ;EACR,OAAM;EACN,eAAY;EALb,UAAA,CAOC,kBAAC,QAAD;GACC,GAAE;GACF,SAAQ;EACR,CAAA,GACD,kBAAC,QAAD;GAAM,GAAE;GACP,UAAA,kBAAC,oBAAD;IACC,eAAc;IACd,MAAK;IACL,KAAI;IACJ,QAAO;IACP,aAAY;GACZ,CAAA;EACI,CAAA,CACF;;AAEP;AAEA,SAASF,EAAe,EAAE,eAAY,MAA8B;CACnE,OACC,kBAAC,OAAD;EACC,WAAWf,EACV,6GACA,+CACAiB,CACD;EACA,eAAY;CACZ,CAAA;AAEH;AAEA,SAASD,EAAgB,EAAE,eAAY,IAAI,YAAgD;CAC1F,OACC,kBAAC,OAAD;EACC,WAAWhB,EAAG,yDAAyDG,EAAmB,IAAIc,CAAS;EACvG,MAAK;EACL,cAAYJ;EACZ,aAAU;EAEV,UAAA,kBAAC,OAAD,EAAK,WAAU,0FAA2F,CAAA;CACtG,CAAA;AAEP"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { i as e, n as t, r as n, t as r } from "../structure-hzCW-XsV.js";
2
+ import { i as e, n as t, r as n, t as r } from "../structure-BmisBK-3.js";
3
3
  export { e as AdaptiveGrid, n as Grid, t as GridCell, r as Stack };
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../table-D6zKeYQX.js";
2
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../table-DsfzoUia.js";
3
3
  export { s as Table, r as TableBody, a as TableCaption, n as TableCell, e as TableFooter, i as TableHead, o as TableHeader, t as TableRow };
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { n as e, t } from "../input-DhQdBnV3.js";
3
- import { a as n, c as r, d as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../text-inputs-BFpku0Qd.js";
2
+ import { n as e, t } from "../input-DQdEd0YD.js";
3
+ import { a as n, c as r, d as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../text-inputs-f9Ia-aCi.js";
4
4
  export { t as Input, n as InputGroup, c as InputGroupAddon, u as InputGroupButton, r as InputGroupInput, o as InputGroupText, f as InputGroupTextarea, l as PasswordInput, d as SlugField, i as Textarea, e as defaultInputStrings, a as defaultPasswordInputStrings, s as slugifyValue };
@@ -1,19 +1,20 @@
1
1
  "use client";
2
- import { f as e } from "../ui-provider-D2_TeLqw.js";
3
- import { t } from "../utils-Cospvlj1.js";
4
- import { jsx as n } from "react/jsx-runtime";
5
- import { CircleCheckIcon as r, InfoIcon as i, Loader2Icon as a, OctagonXIcon as o, TriangleAlertIcon as s } from "lucide-react";
6
- import { Toaster as c } from "sonner";
2
+ import { p as e } from "../ui-provider-C_U0Xma4.js";
3
+ import { t } from "../utils-BRhFDwuU.js";
4
+ import { t as n } from "../affordance-geometry.generated-tF36bREk.js";
5
+ import { jsx as r } from "react/jsx-runtime";
6
+ import { CircleCheckIcon as i, InfoIcon as a, Loader2Icon as o, OctagonXIcon as s, TriangleAlertIcon as c } from "lucide-react";
7
+ import { Toaster as l } from "sonner";
7
8
  //#region src/components/ui/sonner.tsx
8
- var l = ({ theme: e = "system", ...t }) => /* @__PURE__ */ n(c, {
9
+ var u = ({ theme: e = "system", ...t }) => /* @__PURE__ */ r(l, {
9
10
  theme: e,
10
11
  className: "toaster group",
11
12
  icons: {
12
- success: /* @__PURE__ */ n(r, { className: "size-4" }),
13
- info: /* @__PURE__ */ n(i, { className: "size-4" }),
14
- warning: /* @__PURE__ */ n(s, { className: "size-4" }),
15
- error: /* @__PURE__ */ n(o, { className: "size-4" }),
16
- loading: /* @__PURE__ */ n(a, { className: "size-4 animate-spin" })
13
+ success: /* @__PURE__ */ r(i, { className: "size-icon" }),
14
+ info: /* @__PURE__ */ r(a, { className: "size-icon" }),
15
+ warning: /* @__PURE__ */ r(c, { className: "size-icon" }),
16
+ error: /* @__PURE__ */ r(s, { className: "size-icon" }),
17
+ loading: /* @__PURE__ */ r(o, { className: "size-icon animate-spin" })
17
18
  },
18
19
  style: {
19
20
  "--normal-bg": "var(--popover)",
@@ -23,8 +24,8 @@ var l = ({ theme: e = "system", ...t }) => /* @__PURE__ */ n(c, {
23
24
  },
24
25
  toastOptions: { classNames: { toast: "cn-toast" } },
25
26
  ...t
26
- }), u = {
27
- toast: "toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius !border !border-inverse-border !bg-inverse-background !p-surface has-[[data-close-button]]:!pe-[calc(var(--height-action)*8/9*var(--density-scale)+0.75rem*var(--space-scale))] !text-inverse-foreground !shadow-lg",
27
+ }), d = {
28
+ toast: `toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius !border !border-inverse-border !bg-inverse-background !p-surface ${n.toastCloseReserve} !text-inverse-foreground !shadow-lg`,
28
29
  title: "toaster--title text-sm font-medium leading-snug text-current",
29
30
  description: "toaster--description !text-inverse-muted text-xs leading-snug",
30
31
  icon: "toaster--icon !m-0 flex size-icon-lg shrink-0 items-center justify-center self-center text-inverse-muted",
@@ -38,47 +39,47 @@ var l = ({ theme: e = "system", ...t }) => /* @__PURE__ */ n(c, {
38
39
  loading: "toaster--loading",
39
40
  default: "toaster--default",
40
41
  content: "toaster--content grid min-w-0 flex-1 gap-dense py-0 wrap-anywhere"
41
- }, d = {
42
- success: /* @__PURE__ */ n(r, { className: "size-icon-lg text-success" }),
43
- info: /* @__PURE__ */ n(i, { className: "size-icon-lg text-info" }),
44
- warning: /* @__PURE__ */ n(s, { className: "size-icon-lg text-warning-accent" }),
45
- error: /* @__PURE__ */ n(o, { className: "size-icon-lg text-destructive" }),
46
- loading: /* @__PURE__ */ n(a, { className: "size-icon-lg animate-spin text-inverse-muted" })
47
42
  }, f = {
43
+ success: /* @__PURE__ */ r(i, { className: "size-icon-lg text-success" }),
44
+ info: /* @__PURE__ */ r(a, { className: "size-icon-lg text-info" }),
45
+ warning: /* @__PURE__ */ r(c, { className: "size-icon-lg text-warning-accent" }),
46
+ error: /* @__PURE__ */ r(s, { className: "size-icon-lg text-destructive" }),
47
+ loading: /* @__PURE__ */ r(o, { className: "size-icon-lg animate-spin text-inverse-muted" })
48
+ }, p = {
48
49
  "--normal-bg": "var(--inverse-background)",
49
50
  "--normal-text": "var(--inverse-foreground)",
50
51
  "--normal-border": "var(--inverse-border)",
51
- "--border-radius": "var(--radius-md)",
52
+ "--border-radius": "var(--radius)",
52
53
  "--width": "min(92vw, 24rem)"
53
54
  };
54
- function p(e) {
55
+ function m(e) {
55
56
  return {
56
- toast: t(u.toast, e?.toast),
57
- title: t(u.title, e?.title),
58
- description: t(u.description, e?.description),
59
- icon: t(u.icon, e?.icon),
60
- closeButton: t(u.closeButton, e?.closeButton),
61
- actionButton: t(u.actionButton, e?.actionButton),
62
- cancelButton: t(u.cancelButton, e?.cancelButton),
63
- success: t(u.success, e?.success),
64
- info: t(u.info, e?.info),
65
- warning: t(u.warning, e?.warning),
66
- error: t(u.error, e?.error),
67
- loading: t(u.loading, e?.loading),
68
- default: t(u.default, e?.default),
57
+ toast: t(d.toast, e?.toast),
58
+ title: t(d.title, e?.title),
59
+ description: t(d.description, e?.description),
60
+ icon: t(d.icon, e?.icon),
61
+ closeButton: t(d.closeButton, e?.closeButton),
62
+ actionButton: t(d.actionButton, e?.actionButton),
63
+ cancelButton: t(d.cancelButton, e?.cancelButton),
64
+ success: t(d.success, e?.success),
65
+ info: t(d.info, e?.info),
66
+ warning: t(d.warning, e?.warning),
67
+ error: t(d.error, e?.error),
68
+ loading: t(d.loading, e?.loading),
69
+ default: t(d.default, e?.default),
69
70
  loader: e?.loader,
70
- content: t(u.content, e?.content)
71
+ content: t(d.content, e?.content)
71
72
  };
72
73
  }
73
- function m({ duration: r, position: i, theme: a, closeButton: o, richColors: s, visibleToasts: c, toastOptions: u, icons: m, className: h, style: g, ..._ }) {
74
+ function h({ duration: n, position: i, theme: a, closeButton: o, richColors: s, visibleToasts: c, toastOptions: l, icons: d, className: h, style: g, ..._ }) {
74
75
  let { duration: v, position: y, theme: b, closeButton: x, richColors: S, visibleToasts: C } = e(), w = {
75
- ...u,
76
- classNames: p(u?.classNames)
76
+ ...l,
77
+ classNames: m(l?.classNames)
77
78
  };
78
- return /* @__PURE__ */ n(l, {
79
+ return /* @__PURE__ */ r(u, {
79
80
  ..._,
80
81
  className: t("toaster group toaster--component dark", h),
81
- duration: r ?? v,
82
+ duration: n ?? v,
82
83
  position: i ?? y,
83
84
  theme: a ?? b ?? "dark",
84
85
  closeButton: o ?? x,
@@ -86,17 +87,17 @@ function m({ duration: r, position: i, theme: a, closeButton: o, richColors: s,
86
87
  visibleToasts: c ?? C,
87
88
  toastOptions: w,
88
89
  icons: {
89
- ...d,
90
- ...m
90
+ ...f,
91
+ ...d
91
92
  },
92
93
  style: {
93
- ...f,
94
+ ...p,
94
95
  ...g
95
96
  }
96
97
  });
97
98
  }
98
- m.displayName = "Toaster";
99
+ h.displayName = "Toaster";
99
100
  //#endregion
100
- export { m as Toaster };
101
+ export { h as Toaster };
101
102
 
102
103
  //# sourceMappingURL=toaster.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toaster.js","names":["Toaster","Sonner","PrimitiveToaster","useToastConfig","Toaster$1","Toaster$2","props","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon","DEFAULT_TOAST_CLASS_NAMES","DEFAULT_TOAST_ICONS","DEFAULT_TOAST_STYLE","mergeToastClassNames","cn","overrides","Toaster","durationProp","positionProp","themeProp","closeButtonProp","richColorsProp","visibleToastsProp","resolvedToastOptions","toastOptions","className","duration","position","theme","closeButton","richColors","visibleToasts","icons","style"],"sources":["../../src/components/ui/sonner.tsx","../../src/components/base/toaster/toaster.tsx"],"sourcesContent":["import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from \"lucide-react\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ theme = \"system\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme}\n className=\"toaster group\"\n icons={{\n success: (\n <CircleCheckIcon className=\"size-4\" />\n ),\n info: (\n <InfoIcon className=\"size-4\" />\n ),\n warning: (\n <TriangleAlertIcon className=\"size-4\" />\n ),\n error: (\n <OctagonXIcon className=\"size-4\" />\n ),\n loading: (\n <Loader2Icon className=\"size-4 animate-spin\" />\n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","/**\n * Toaster — base wrapper around the shadcn `ui/sonner` `<Toaster>` that\n * applies library-wide defaults from `<UIProvider>`:\n *\n * - `toast.duration` → default lifetime in ms\n * - `toast.position` → default screen position\n * - `toast.theme` / `toast.closeButton` / `toast.visibleToasts`\n * / `toast.richColors` → Sonner display defaults\n *\n * Per-mount props on this component still win over the store, so a single\n * `<Toaster duration={10_000} />` continues to override the global default.\n */\nimport {\n\tCircleCheckIcon,\n\tInfoIcon,\n\tLoader2Icon,\n\tOctagonXIcon,\n\tTriangleAlertIcon,\n} from 'lucide-react';\nimport type { CSSProperties } from 'react';\nimport type { ToastClassnames, ToasterProps } from 'sonner';\n\nimport { Toaster as PrimitiveToaster } from '../../ui/sonner';\nimport { useToastConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nexport type { ToasterProps };\n\ntype ToastIcons = NonNullable<ToasterProps['icons']>;\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n\ttoast:\n\t\t'toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius !border !border-inverse-border !bg-inverse-background !p-surface has-[[data-close-button]]:!pe-[calc(var(--height-action)*8/9*var(--density-scale)+0.75rem*var(--space-scale))] !text-inverse-foreground !shadow-lg',\n\ttitle: 'toaster--title text-sm font-medium leading-snug text-current',\n\tdescription: 'toaster--description !text-inverse-muted text-xs leading-snug',\n\ticon:\n\t\t'toaster--icon !m-0 flex size-icon-lg shrink-0 items-center justify-center self-center text-inverse-muted',\n\tcloseButton:\n\t\t'toaster--close-button !left-auto !right-space-sm !top-1/2 !size-action-xs !translate-x-0 !-translate-y-1/2 !transform-none !border-inverse-border !bg-transparent !text-inverse-foreground !opacity-60 transition-[background-color,opacity] hover:!bg-inverse-surface hover:!opacity-100',\n\tactionButton:\n\t\t'toaster--action-button !h-action-sm !rounded-inner !bg-inverse-foreground !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-background',\n\tcancelButton:\n\t\t'toaster--cancel-button !h-action-sm !rounded-inner !bg-inverse-surface !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-foreground',\n\tsuccess: 'toaster--success',\n\tinfo: 'toaster--info',\n\twarning: 'toaster--warning',\n\terror: 'toaster--error',\n\tloading: 'toaster--loading',\n\tdefault: 'toaster--default',\n\tcontent: 'toaster--content grid min-w-0 flex-1 gap-dense py-0 wrap-anywhere',\n} satisfies ToastClassnames;\n\nconst DEFAULT_TOAST_ICONS = {\n\tsuccess: <CircleCheckIcon className=\"size-icon-lg text-success\" />,\n\tinfo: <InfoIcon className=\"size-icon-lg text-info\" />,\n\twarning: <TriangleAlertIcon className=\"size-icon-lg text-warning-accent\" />,\n\terror: <OctagonXIcon className=\"size-icon-lg text-destructive\" />,\n\tloading: <Loader2Icon className=\"size-icon-lg animate-spin text-inverse-muted\" />,\n} satisfies ToastIcons;\n\nconst DEFAULT_TOAST_STYLE = {\n\t'--normal-bg': 'var(--inverse-background)',\n\t'--normal-text': 'var(--inverse-foreground)',\n\t'--normal-border': 'var(--inverse-border)',\n\t'--border-radius': 'var(--radius-md)',\n\t'--width': 'min(92vw, 24rem)',\n} as CSSProperties;\n\nfunction mergeToastClassNames(overrides?: ToastClassnames): ToastClassnames {\n\treturn {\n\t\ttoast: cn(DEFAULT_TOAST_CLASS_NAMES.toast, overrides?.toast),\n\t\ttitle: cn(DEFAULT_TOAST_CLASS_NAMES.title, overrides?.title),\n\t\tdescription: cn(DEFAULT_TOAST_CLASS_NAMES.description, overrides?.description),\n\t\ticon: cn(DEFAULT_TOAST_CLASS_NAMES.icon, overrides?.icon),\n\t\tcloseButton: cn(DEFAULT_TOAST_CLASS_NAMES.closeButton, overrides?.closeButton),\n\t\tactionButton: cn(DEFAULT_TOAST_CLASS_NAMES.actionButton, overrides?.actionButton),\n\t\tcancelButton: cn(DEFAULT_TOAST_CLASS_NAMES.cancelButton, overrides?.cancelButton),\n\t\tsuccess: cn(DEFAULT_TOAST_CLASS_NAMES.success, overrides?.success),\n\t\tinfo: cn(DEFAULT_TOAST_CLASS_NAMES.info, overrides?.info),\n\t\twarning: cn(DEFAULT_TOAST_CLASS_NAMES.warning, overrides?.warning),\n\t\terror: cn(DEFAULT_TOAST_CLASS_NAMES.error, overrides?.error),\n\t\tloading: cn(DEFAULT_TOAST_CLASS_NAMES.loading, overrides?.loading),\n\t\tdefault: cn(DEFAULT_TOAST_CLASS_NAMES.default, overrides?.default),\n\t\tloader: overrides?.loader,\n\t\tcontent: cn(DEFAULT_TOAST_CLASS_NAMES.content, overrides?.content),\n\t};\n}\n\nexport function Toaster({\n\tduration: durationProp,\n\tposition: positionProp,\n\ttheme: themeProp,\n\tcloseButton: closeButtonProp,\n\trichColors: richColorsProp,\n\tvisibleToasts: visibleToastsProp,\n\ttoastOptions,\n\ticons,\n\tclassName,\n\tstyle,\n\t...props\n}: ToasterProps) {\n\tconst {\n\t\tduration,\n\t\tposition,\n\t\ttheme,\n\t\tcloseButton,\n\t\trichColors,\n\t\tvisibleToasts,\n\t} = useToastConfig();\n\n\tconst resolvedToastOptions: ToasterProps['toastOptions'] = {\n\t\t...toastOptions,\n\t\tclassNames: mergeToastClassNames(toastOptions?.classNames),\n\t};\n\n\treturn (\n\t\t<PrimitiveToaster\n\t\t\t{...props}\n\t\t\t// Toasts always sit on the inverse (dark) surface. Scoping the dark theme here\n\t\t\t// resolves status icons and the focus ring to their dark-surface values, so a\n\t\t\t// light page does not paint dark-green or dark-red glyphs on a dark toast.\n\t\t\tclassName={cn('toaster group toaster--component dark', className)}\n\t\t\tduration={durationProp ?? duration}\n\t\t\tposition={positionProp ?? position}\n\t\t\ttheme={themeProp ?? theme ?? 'dark'}\n\t\t\tcloseButton={closeButtonProp ?? closeButton}\n\t\t\trichColors={richColorsProp ?? richColors}\n\t\t\tvisibleToasts={visibleToastsProp ?? visibleToasts}\n\t\t\ttoastOptions={resolvedToastOptions}\n\t\t\ticons={{ ...DEFAULT_TOAST_ICONS, ...icons }}\n\t\t\tstyle={{ ...DEFAULT_TOAST_STYLE, ...style } as CSSProperties}\n\t\t/>\n\t);\n}\n\nToaster.displayName = 'Toaster';\n"],"mappings":"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"}
1
+ {"version":3,"file":"toaster.js","names":["Toaster","Sonner","PrimitiveToaster","useToastConfig","affordanceGeometry","Toaster$1","Toaster$2","props","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon","DEFAULT_TOAST_CLASS_NAMES","DEFAULT_TOAST_ICONS","DEFAULT_TOAST_STYLE","mergeToastClassNames","cn","overrides","Toaster","durationProp","positionProp","themeProp","closeButtonProp","richColorsProp","visibleToastsProp","resolvedToastOptions","toastOptions","className","duration","position","theme","closeButton","richColors","visibleToasts","icons","style"],"sources":["../../src/components/ui/sonner.tsx","../../src/components/base/toaster/toaster.tsx"],"sourcesContent":["import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from \"lucide-react\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ theme = \"system\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme}\n className=\"toaster group\"\n icons={{\n success: (\n <CircleCheckIcon className=\"size-icon\" />\n ),\n info: (\n <InfoIcon className=\"size-icon\" />\n ),\n warning: (\n <TriangleAlertIcon className=\"size-icon\" />\n ),\n error: (\n <OctagonXIcon className=\"size-icon\" />\n ),\n loading: (\n <Loader2Icon className=\"size-icon animate-spin\" />\n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","/**\n * Toaster — base wrapper around the shadcn `ui/sonner` `<Toaster>` that\n * applies library-wide defaults from `<UIProvider>`:\n *\n * - `toast.duration` → default lifetime in ms\n * - `toast.position` → default screen position\n * - `toast.theme` / `toast.closeButton` / `toast.visibleToasts`\n * / `toast.richColors` → Sonner display defaults\n *\n * Per-mount props on this component still win over the store, so a single\n * `<Toaster duration={10_000} />` continues to override the global default.\n */\nimport {\n\tCircleCheckIcon,\n\tInfoIcon,\n\tLoader2Icon,\n\tOctagonXIcon,\n\tTriangleAlertIcon,\n} from 'lucide-react';\nimport type { CSSProperties } from 'react';\nimport type { ToastClassnames, ToasterProps } from 'sonner';\n\nimport { Toaster as PrimitiveToaster } from '../../ui/sonner';\nimport { useToastConfig } from '../../../lib/ui-provider';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { cn } from '../../../lib/utils';\n\nexport type { ToasterProps };\n\ntype ToastIcons = NonNullable<ToasterProps['icons']>;\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n\ttoast:\n\t\t`toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius !border !border-inverse-border !bg-inverse-background !p-surface ${affordanceGeometry.toastCloseReserve} !text-inverse-foreground !shadow-lg`,\n\ttitle: 'toaster--title text-sm font-medium leading-snug text-current',\n\tdescription: 'toaster--description !text-inverse-muted text-xs leading-snug',\n\ticon:\n\t\t'toaster--icon !m-0 flex size-icon-lg shrink-0 items-center justify-center self-center text-inverse-muted',\n\tcloseButton:\n\t\t'toaster--close-button !left-auto !right-space-sm !top-1/2 !size-action-xs !translate-x-0 !-translate-y-1/2 !transform-none !border-inverse-border !bg-transparent !text-inverse-foreground !opacity-60 transition-[background-color,opacity] hover:!bg-inverse-surface hover:!opacity-100',\n\tactionButton:\n\t\t'toaster--action-button !h-action-sm !rounded-inner !bg-inverse-foreground !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-background',\n\tcancelButton:\n\t\t'toaster--cancel-button !h-action-sm !rounded-inner !bg-inverse-surface !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-foreground',\n\tsuccess: 'toaster--success',\n\tinfo: 'toaster--info',\n\twarning: 'toaster--warning',\n\terror: 'toaster--error',\n\tloading: 'toaster--loading',\n\tdefault: 'toaster--default',\n\tcontent: 'toaster--content grid min-w-0 flex-1 gap-dense py-0 wrap-anywhere',\n} satisfies ToastClassnames;\n\nconst DEFAULT_TOAST_ICONS = {\n\tsuccess: <CircleCheckIcon className=\"size-icon-lg text-success\" />,\n\tinfo: <InfoIcon className=\"size-icon-lg text-info\" />,\n\twarning: <TriangleAlertIcon className=\"size-icon-lg text-warning-accent\" />,\n\terror: <OctagonXIcon className=\"size-icon-lg text-destructive\" />,\n\tloading: <Loader2Icon className=\"size-icon-lg animate-spin text-inverse-muted\" />,\n} satisfies ToastIcons;\n\nconst DEFAULT_TOAST_STYLE = {\n\t'--normal-bg': 'var(--inverse-background)',\n\t'--normal-text': 'var(--inverse-foreground)',\n\t'--normal-border': 'var(--inverse-border)',\n\t'--border-radius': 'var(--radius)',\n\t'--width': 'min(92vw, 24rem)',\n} as CSSProperties;\n\nfunction mergeToastClassNames(overrides?: ToastClassnames): ToastClassnames {\n\treturn {\n\t\ttoast: cn(DEFAULT_TOAST_CLASS_NAMES.toast, overrides?.toast),\n\t\ttitle: cn(DEFAULT_TOAST_CLASS_NAMES.title, overrides?.title),\n\t\tdescription: cn(DEFAULT_TOAST_CLASS_NAMES.description, overrides?.description),\n\t\ticon: cn(DEFAULT_TOAST_CLASS_NAMES.icon, overrides?.icon),\n\t\tcloseButton: cn(DEFAULT_TOAST_CLASS_NAMES.closeButton, overrides?.closeButton),\n\t\tactionButton: cn(DEFAULT_TOAST_CLASS_NAMES.actionButton, overrides?.actionButton),\n\t\tcancelButton: cn(DEFAULT_TOAST_CLASS_NAMES.cancelButton, overrides?.cancelButton),\n\t\tsuccess: cn(DEFAULT_TOAST_CLASS_NAMES.success, overrides?.success),\n\t\tinfo: cn(DEFAULT_TOAST_CLASS_NAMES.info, overrides?.info),\n\t\twarning: cn(DEFAULT_TOAST_CLASS_NAMES.warning, overrides?.warning),\n\t\terror: cn(DEFAULT_TOAST_CLASS_NAMES.error, overrides?.error),\n\t\tloading: cn(DEFAULT_TOAST_CLASS_NAMES.loading, overrides?.loading),\n\t\tdefault: cn(DEFAULT_TOAST_CLASS_NAMES.default, overrides?.default),\n\t\tloader: overrides?.loader,\n\t\tcontent: cn(DEFAULT_TOAST_CLASS_NAMES.content, overrides?.content),\n\t};\n}\n\nexport function Toaster({\n\tduration: durationProp,\n\tposition: positionProp,\n\ttheme: themeProp,\n\tcloseButton: closeButtonProp,\n\trichColors: richColorsProp,\n\tvisibleToasts: visibleToastsProp,\n\ttoastOptions,\n\ticons,\n\tclassName,\n\tstyle,\n\t...props\n}: ToasterProps) {\n\tconst {\n\t\tduration,\n\t\tposition,\n\t\ttheme,\n\t\tcloseButton,\n\t\trichColors,\n\t\tvisibleToasts,\n\t} = useToastConfig();\n\n\tconst resolvedToastOptions: ToasterProps['toastOptions'] = {\n\t\t...toastOptions,\n\t\tclassNames: mergeToastClassNames(toastOptions?.classNames),\n\t};\n\n\treturn (\n\t\t<PrimitiveToaster\n\t\t\t{...props}\n\t\t\t// Toasts always sit on the inverse (dark) surface. Scoping the dark theme here\n\t\t\t// resolves status icons and the focus ring to their dark-surface values, so a\n\t\t\t// light page does not paint dark-green or dark-red glyphs on a dark toast.\n\t\t\tclassName={cn('toaster group toaster--component dark', className)}\n\t\t\tduration={durationProp ?? duration}\n\t\t\tposition={positionProp ?? position}\n\t\t\ttheme={themeProp ?? theme ?? 'dark'}\n\t\t\tcloseButton={closeButtonProp ?? closeButton}\n\t\t\trichColors={richColorsProp ?? richColors}\n\t\t\tvisibleToasts={visibleToastsProp ?? visibleToasts}\n\t\t\ttoastOptions={resolvedToastOptions}\n\t\t\ticons={{ ...DEFAULT_TOAST_ICONS, ...icons }}\n\t\t\tstyle={{ ...DEFAULT_TOAST_STYLE, ...style } as CSSProperties}\n\t\t/>\n\t);\n}\n\nToaster.displayName = 'Toaster';\n"],"mappings":"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"}
package/dist/base/tree.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { t as e } from "../tree-BotPlyiD.js";
2
+ import { t as e } from "../tree-WnKQzwbq.js";
3
3
  export { e as Tree };
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { i as e, n as t, r as n, t as r } from "../upload-queue-BHZ_wBfd.js";
2
+ import { i as e, n as t, r as n, t as r } from "../upload-queue-Boscubn9.js";
3
3
  export { n as UploadProgressList, r as UploadTray, e as defaultUploadProgressListStrings, t as defaultUploadTrayStrings };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as e, t } from "../media-gallery-DQUQ0m3O.js";
3
- import { a as n, i as r, n as i, o as a, r as o, t as s } from "../upload-queue-BHZ_wBfd.js";
4
- import { a as c, i as l, n as u, o as d, r as f, t as p } from "../upload-B0WHW7ak.js";
2
+ import { n as e, t } from "../media-gallery-3zIVLMWH.js";
3
+ import { a as n, i as r, n as i, o as a, r as o, t as s } from "../upload-queue-Boscubn9.js";
4
+ import { a as c, i as l, n as u, o as d, r as f, t as p } from "../upload-CXyxmQBP.js";
5
5
  export { p as AvatarUpload, n as Dropzone, c as FileUpload, f as ImageUpload, t as MediaGallery, o as UploadProgressList, s as UploadTray, u as defaultAvatarUploadStrings, a as defaultDropzoneStrings, d as defaultFileUploadStrings, l as defaultImageUploadStrings, e as defaultMediaGalleryStrings, r as defaultUploadProgressListStrings, i as defaultUploadTrayStrings };
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c, u as l } from "../value-inputs-CjfzGMsN.js";
3
- export { a as COUNTRY_PREFIX_MAP, n as ColorInput, s as DEFAULT_COUNTRY_PREFIXES, c as DateTimeInput, t as PhoneInput, i as SliderField, l as TagsInput, e as defaultColorInputStrings, r as defaultPhoneInputStrings, o as defaultSliderStrings };
2
+ import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "../value-inputs-DXPDjvBU.js";
3
+ export { o as COUNTRY_PREFIX_MAP, r as ColorInput, c as DEFAULT_COUNTRY_PREFIXES, l as DateTimeInput, t as PhoneInput, a as SliderField, u as TagsInput, e as defaultColorInputStrings, i as defaultPhoneInputStrings, s as defaultSliderStrings, n as defaultTagsInputStrings };