themelia-react-ui 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (707) hide show
  1. package/CHANGELOG.md +527 -0
  2. package/README.md +47 -14
  3. package/THIRD_PARTY_NOTICES.md +13 -0
  4. package/dist/accordion-Cjb6sx0G.js +208 -0
  5. package/dist/accordion-Cjb6sx0G.js.map +1 -0
  6. package/dist/action-menu-CllU52Mm.js +280 -0
  7. package/dist/action-menu-CllU52Mm.js.map +1 -0
  8. package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
  9. package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
  10. package/dist/ai-artifact-DvTwDVyL.js +1148 -0
  11. package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
  12. package/dist/{app-shell-BE_j8-AT.js → app-shell-C4FhvCqF.js} +5 -5
  13. package/dist/{app-shell-BE_j8-AT.js.map → app-shell-C4FhvCqF.js.map} +1 -1
  14. package/dist/attachment-BxDfL2mw.js +246 -0
  15. package/dist/attachment-BxDfL2mw.js.map +1 -0
  16. package/dist/{auth-M3vGMgDR.js → auth-ax2BqjrI.js} +241 -235
  17. package/dist/auth-ax2BqjrI.js.map +1 -0
  18. package/dist/{avatar-djdaaQ_s.js → avatar-DAPlDvhJ.js} +67 -66
  19. package/dist/avatar-DAPlDvhJ.js.map +1 -0
  20. package/dist/badge-HpFqoqSY.js +93 -0
  21. package/dist/badge-HpFqoqSY.js.map +1 -0
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +3 -0
  28. package/dist/base/buttons.js +2 -3
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +50 -46
  31. package/dist/base/carousel.js.map +1 -1
  32. package/dist/base/cascader.js +69 -81
  33. package/dist/base/cascader.js.map +1 -1
  34. package/dist/base/chart.js +1 -1
  35. package/dist/base/choice-inputs.js +3 -3
  36. package/dist/base/code-block.js +1 -1
  37. package/dist/base/combobox.js +2 -2
  38. package/dist/base/command.js +1 -1
  39. package/dist/base/copyable.js +1 -1
  40. package/dist/base/date-pickers.js +2 -2
  41. package/dist/base/display.js +7 -7
  42. package/dist/base/feedback.js +3 -3
  43. package/dist/base/forms-numeric.js +1 -1
  44. package/dist/base/forms.js +2 -2
  45. package/dist/base/inline-edit.js +20 -20
  46. package/dist/base/inline-edit.js.map +1 -1
  47. package/dist/base/item.js +1 -1
  48. package/dist/base/media-gallery.js +1 -1
  49. package/dist/base/metadata-list.js +3 -0
  50. package/dist/base/navigation.js +7 -7
  51. package/dist/base/popover-menu.js +1 -1
  52. package/dist/base/popover.js +1 -1
  53. package/dist/base/qr-code.js +1 -1
  54. package/dist/base/repeaters.js +216 -220
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +147 -137
  59. package/dist/base/signature-pad.js.map +1 -1
  60. package/dist/base/skeleton.js +1 -1
  61. package/dist/base/spinner.js +79 -2
  62. package/dist/base/spinner.js.map +1 -0
  63. package/dist/base/structure.js +1 -1
  64. package/dist/base/table.js +1 -1
  65. package/dist/base/text-inputs.js +2 -2
  66. package/dist/base/toaster.js +46 -45
  67. package/dist/base/toaster.js.map +1 -1
  68. package/dist/base/tree.js +1 -1
  69. package/dist/base/upload-queue.js +1 -1
  70. package/dist/base/upload.js +3 -3
  71. package/dist/base/value-inputs.js +2 -2
  72. package/dist/batch-action-bar-DnUJ21NQ.js +105 -0
  73. package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
  74. package/dist/blocks/admin.js +171 -169
  75. package/dist/blocks/admin.js.map +1 -1
  76. package/dist/blocks/ai.js +308 -285
  77. package/dist/blocks/ai.js.map +1 -1
  78. package/dist/blocks/analytics/usage-card.js +1 -1
  79. package/dist/blocks/analytics.js +626 -589
  80. package/dist/blocks/analytics.js.map +1 -1
  81. package/dist/blocks/collaboration.js +1 -1
  82. package/dist/blocks/commerce/receipt.js +1 -1
  83. package/dist/blocks/commerce.js +2051 -1329
  84. package/dist/blocks/commerce.js.map +1 -1
  85. package/dist/blocks/data-display.js +3 -2
  86. package/dist/blocks/onboarding.js +68 -58
  87. package/dist/blocks/onboarding.js.map +1 -1
  88. package/dist/blocks/planning.js +27 -26
  89. package/dist/blocks/planning.js.map +1 -1
  90. package/dist/blocks/timelines.js +1 -1
  91. package/dist/breadcrumbs-C-oqs1sQ.js +129 -0
  92. package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
  93. package/dist/{button-R9CCoH7A.js → button-DVzspB_G.js} +15 -14
  94. package/dist/button-DVzspB_G.js.map +1 -0
  95. package/dist/{button-BS3KDg00.js → buttons-DPZekJFu.js} +208 -216
  96. package/dist/buttons-DPZekJFu.js.map +1 -0
  97. package/dist/cards-BaBZR-AU.js +68 -0
  98. package/dist/cards-BaBZR-AU.js.map +1 -0
  99. package/dist/{chart-DwYRKKc-.js → chart-ZOYyK2xG.js} +58 -55
  100. package/dist/chart-ZOYyK2xG.js.map +1 -0
  101. package/dist/checkbox-AWIhNhmo.js +36 -0
  102. package/dist/checkbox-AWIhNhmo.js.map +1 -0
  103. package/dist/choice-inputs-CNHvARCJ.js +770 -0
  104. package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
  105. package/dist/code-block-DeneBJR_.js +185 -0
  106. package/dist/code-block-DeneBJR_.js.map +1 -0
  107. package/dist/{collapsible-oMUGM4tr.js → collapsible-C-_l4hpy.js} +4 -4
  108. package/dist/{collapsible-oMUGM4tr.js.map → collapsible-C-_l4hpy.js.map} +1 -1
  109. package/dist/{collection-content-Ys-OZOkY.js → collection-content-By56pLog.js} +3 -3
  110. package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-By56pLog.js.map} +1 -1
  111. package/dist/combobox-C0EQW6dr.js +875 -0
  112. package/dist/combobox-C0EQW6dr.js.map +1 -0
  113. package/dist/combobox-xCQ2RMNE.js +309 -0
  114. package/dist/combobox-xCQ2RMNE.js.map +1 -0
  115. package/dist/{command-kPMPjIxJ.js → command-C25VMRII.js} +7 -7
  116. package/dist/{command-kPMPjIxJ.js.map → command-C25VMRII.js.map} +1 -1
  117. package/dist/{comments-You0Bzbr.js → comments-BYYlTA8E.js} +390 -379
  118. package/dist/comments-BYYlTA8E.js.map +1 -0
  119. package/dist/components/base/action-menu/action-menu.d.ts +21 -4
  120. package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
  121. package/dist/components/base/action-menu/index.d.ts +1 -0
  122. package/dist/components/base/badge/badge.recipes.d.ts +5 -5
  123. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  124. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  125. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  126. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  127. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  128. package/dist/components/base/buttons/loader-button.d.ts +2 -1
  129. package/dist/components/base/cards/card.recipes.d.ts +2 -3
  130. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
  131. package/dist/components/base/cards/smart-card.types.d.ts +11 -4
  132. package/dist/components/base/chart/chart.d.ts +2 -5
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
  135. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  136. package/dist/components/base/combobox/index.d.ts +30 -4
  137. package/dist/components/base/display/alert-dialog.d.ts +6 -5
  138. package/dist/components/base/display/dialog.d.ts +4 -8
  139. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  140. package/dist/components/base/forms/form-sizing.d.ts +26 -15
  141. package/dist/components/base/metadata-list/index.d.ts +12 -0
  142. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  143. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  144. package/dist/components/base/navigation/index.d.ts +1 -1
  145. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  146. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  147. package/dist/components/base/navigation/page-header/page-header.d.ts +26 -3
  148. package/dist/components/base/navigation/pagination.d.ts +5 -2
  149. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  150. package/dist/components/base/sheet/sheet.d.ts +4 -8
  151. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  152. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  153. package/dist/components/base/table/index.d.ts +9 -2
  154. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  155. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  156. package/dist/components/base/upload/upload.recipes.d.ts +25 -3
  157. package/dist/components/base/value-inputs/index.d.ts +5 -5
  158. package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
  159. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  160. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  161. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  162. package/dist/components/blocks/commerce/address-card/types.d.ts +2 -1
  163. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  164. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  165. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  166. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  167. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  168. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  169. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  170. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  171. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +45 -0
  172. package/dist/components/blocks/commerce/index.d.ts +13 -5
  173. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  174. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  175. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  176. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  177. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  178. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  179. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  180. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  181. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  182. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  183. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  184. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  185. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  186. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  187. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  188. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  189. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  190. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  191. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  192. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  193. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  194. package/dist/components/blocks/commerce/payment-method/types.d.ts +12 -1
  195. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  196. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  197. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  198. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  199. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  200. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  201. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  202. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  203. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  204. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  205. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  206. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  207. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  208. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  209. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  210. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  211. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  212. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  213. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  214. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  215. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  216. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  217. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  218. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  219. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  220. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  221. package/dist/components/features/combobox/types.d.ts +4 -0
  222. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  223. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  224. package/dist/components/features/kanban/kanban.d.ts +1 -1
  225. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  226. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  227. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  228. package/dist/components/features/media-library/index.d.ts +1 -1
  229. package/dist/components/features/media-library/media-library.d.ts +1 -1
  230. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  231. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  232. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  233. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  234. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  235. package/dist/components/features/overlays/dialog.d.ts +1 -1
  236. package/dist/components/features/overlays/index.d.ts +1 -1
  237. package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
  238. package/dist/components/features/overlays/overlays.types.d.ts +20 -0
  239. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  240. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  241. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  242. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  243. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  244. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  245. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  246. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  247. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  248. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  249. package/dist/components/features/products/products.types.d.ts +9 -2
  250. package/dist/components/features/resource/index.d.ts +1 -1
  251. package/dist/components/features/resource/resource.d.ts +1 -1
  252. package/dist/components/features/resource/resource.types.d.ts +34 -6
  253. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  254. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  255. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  256. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  257. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +7 -1
  258. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  259. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +54 -1
  260. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  261. package/dist/components/features/sync/index.d.ts +26 -3
  262. package/dist/components/features/table/data-table.d.ts +1 -1
  263. package/dist/components/features/table/table-header.d.ts +1 -1
  264. package/dist/components/features/table/table.strings.d.ts +55 -1
  265. package/dist/components/features/table/table.types.d.ts +49 -11
  266. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  267. package/dist/components/layout/page/index.d.ts +1 -1
  268. package/dist/components/layout/page/page.types.d.ts +33 -36
  269. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  270. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  271. package/dist/components/layout/settings/settings.d.ts +16 -2
  272. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  273. package/dist/components/primitives/number.d.ts +4 -2
  274. package/dist/components/primitives/value.d.ts +3 -1
  275. package/dist/components/typography/rich-text/index.d.ts +1 -1
  276. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  277. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  278. package/dist/components/typography/text-link.d.ts +8 -3
  279. package/dist/components/ui/checkbox.d.ts +4 -3
  280. package/dist/components/ui/combobox.d.ts +6 -2
  281. package/dist/components/ui/item.d.ts +8 -8
  282. package/dist/components/ui/overlay.recipes.d.ts +0 -9
  283. package/dist/components/ui/switch.d.ts +2 -2
  284. package/dist/components/ui/tabs.d.ts +1 -1
  285. package/dist/{containers-D_L4mTVb.js → containers-Mu1LMGV1.js} +36 -35
  286. package/dist/containers-Mu1LMGV1.js.map +1 -0
  287. package/dist/{copyable-DDjTeW_j.js → copyable-ClBuk_UK.js} +6 -6
  288. package/dist/{copyable-DDjTeW_j.js.map → copyable-ClBuk_UK.js.map} +1 -1
  289. package/dist/data-display-DT_khPl_.js +971 -0
  290. package/dist/data-display-DT_khPl_.js.map +1 -0
  291. package/dist/{date-uf3z37Nm.js → date-DCrsDTZc.js} +5 -5
  292. package/dist/{date-uf3z37Nm.js.map → date-DCrsDTZc.js.map} +1 -1
  293. package/dist/date-picker-ay0Pha_a.js +1530 -0
  294. package/dist/date-picker-ay0Pha_a.js.map +1 -0
  295. package/dist/date-pickers-Ccw8DL2b.js +175 -0
  296. package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
  297. package/dist/display-hAc1HjpI.js +344 -0
  298. package/dist/display-hAc1HjpI.js.map +1 -0
  299. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  300. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  301. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  302. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  303. package/dist/features/activities.js +478 -542
  304. package/dist/features/activities.js.map +1 -1
  305. package/dist/features/ai-chat.js +209 -199
  306. package/dist/features/ai-chat.js.map +1 -1
  307. package/dist/features/appointment-calendar.js +683 -0
  308. package/dist/features/appointment-calendar.js.map +1 -0
  309. package/dist/features/async-preview.js +109 -107
  310. package/dist/features/async-preview.js.map +1 -1
  311. package/dist/features/combobox.js +1 -1
  312. package/dist/features/comments.js +1 -1
  313. package/dist/features/data-view.js +30 -29
  314. package/dist/features/data-view.js.map +1 -1
  315. package/dist/features/email-composer/engine.js +1 -1
  316. package/dist/features/email-composer.js +285 -283
  317. package/dist/features/email-composer.js.map +1 -1
  318. package/dist/features/event-calendar.js +282 -273
  319. package/dist/features/event-calendar.js.map +1 -1
  320. package/dist/features/filters.js +1 -1
  321. package/dist/features/global-search.js +318 -318
  322. package/dist/features/global-search.js.map +1 -1
  323. package/dist/features/kanban.js +146 -147
  324. package/dist/features/kanban.js.map +1 -1
  325. package/dist/features/map.js +269 -268
  326. package/dist/features/map.js.map +1 -1
  327. package/dist/features/media-library.js +970 -863
  328. package/dist/features/media-library.js.map +1 -1
  329. package/dist/features/mentions.js +1 -1
  330. package/dist/features/overlays.js +1 -1
  331. package/dist/features/products.js +1137 -1124
  332. package/dist/features/products.js.map +1 -1
  333. package/dist/features/questionnaire.js +206 -194
  334. package/dist/features/questionnaire.js.map +1 -1
  335. package/dist/features/resource-assignment.js +24 -21
  336. package/dist/features/resource-assignment.js.map +1 -1
  337. package/dist/features/resource.js +77 -69
  338. package/dist/features/resource.js.map +1 -1
  339. package/dist/features/rich-text-editor.js +30 -11
  340. package/dist/features/rich-text-editor.js.map +1 -1
  341. package/dist/features/schema-form.js +35 -33
  342. package/dist/features/schema-form.js.map +1 -1
  343. package/dist/features/suggestions.js +3 -3
  344. package/dist/features/sync.js +11 -5
  345. package/dist/features/sync.js.map +1 -1
  346. package/dist/features/table.js +1 -1
  347. package/dist/features/theme-tweaker.js +501 -496
  348. package/dist/features/theme-tweaker.js.map +1 -1
  349. package/dist/feedback-BYIhtitP.js +239 -0
  350. package/dist/feedback-BYIhtitP.js.map +1 -0
  351. package/dist/field-affordance-recipes-DZhnIL_Y.js +41 -0
  352. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  353. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  354. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  355. package/dist/{filters-Da-gNPsE.js → filters-BGfvjP4d.js} +483 -472
  356. package/dist/filters-BGfvjP4d.js.map +1 -0
  357. package/dist/focus-recipes-B653VaLq.js +12 -0
  358. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  359. package/dist/{form-field-VZRULhUK.js → form-field-CwH9y77i.js} +6 -5
  360. package/dist/form-field-CwH9y77i.js.map +1 -0
  361. package/dist/{form-sizing-uWP4lzVh.js → form-sizing-BdP_Mf5p.js} +45 -46
  362. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  363. package/dist/{forms-DDeEnXSY.js → forms-B9G_xwzi.js} +22 -22
  364. package/dist/{forms-DDeEnXSY.js.map → forms-B9G_xwzi.js.map} +1 -1
  365. package/dist/forms-numeric-B_jraJaQ.js +906 -0
  366. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  367. package/dist/{header-2ycNqGOR.js → header-CGXuhcRm.js} +164 -161
  368. package/dist/header-CGXuhcRm.js.map +1 -0
  369. package/dist/{hooks-DQ5SPwZw.js → hooks-Dkz0K2WT.js} +2 -2
  370. package/dist/{hooks-DQ5SPwZw.js.map → hooks-Dkz0K2WT.js.map} +1 -1
  371. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  372. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  373. package/dist/icon-badge-DYKIwvOV.js +55 -0
  374. package/dist/icon-badge-DYKIwvOV.js.map +1 -0
  375. package/dist/index.js +7 -7
  376. package/dist/input-CZw8iU99.js +21 -0
  377. package/dist/input-CZw8iU99.js.map +1 -0
  378. package/dist/input-DQdEd0YD.js +263 -0
  379. package/dist/input-DQdEd0YD.js.map +1 -0
  380. package/dist/interaction-recipes-XR9ZpVYL.js +25 -0
  381. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  382. package/dist/item-K5_ghvze.js +275 -0
  383. package/dist/item-K5_ghvze.js.map +1 -0
  384. package/dist/layer-recipes-CCpklYME.js +13 -0
  385. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  386. package/dist/layout/app-shell.js +1 -1
  387. package/dist/layout/auth.js +1 -1
  388. package/dist/layout/containers.js +1 -1
  389. package/dist/layout/header.js +1 -1
  390. package/dist/layout/hooks.js +1 -1
  391. package/dist/layout/navigation.js +1 -1
  392. package/dist/layout/page.js +1 -1
  393. package/dist/layout/settings.js +1 -1
  394. package/dist/layout/sidebar.js +2 -2
  395. package/dist/layout/workspace.js +1 -1
  396. package/dist/layout.js +10 -10
  397. package/dist/lib/affordance-geometry.generated.d.ts +72 -0
  398. package/dist/lib/editable-text-recipe.d.ts +4 -4
  399. package/dist/lib/field-affordance-recipes.d.ts +8 -3
  400. package/dist/lib/field-state-recipes.d.ts +9 -8
  401. package/dist/lib/focus-recipes.d.ts +24 -0
  402. package/dist/lib/interaction-recipes.d.ts +40 -0
  403. package/dist/lib/layer-recipes.d.ts +19 -0
  404. package/dist/lib/motion-recipes.d.ts +1 -0
  405. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
  406. package/dist/lib/safe-image-src.d.ts +10 -0
  407. package/dist/lib/sanitize-html.d.ts +15 -3
  408. package/dist/lib/surface-recipes.d.ts +47 -7
  409. package/dist/lib/theme-mode-css.d.ts +7 -0
  410. package/dist/lib/token-merge.generated.d.ts +9 -6
  411. package/dist/lib/tone-recipes.d.ts +87 -0
  412. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  413. package/dist/lib/ui-provider/index.d.ts +2 -2
  414. package/dist/lib/ui-provider/types.d.ts +11 -2
  415. package/dist/lib/utils.js +1 -1
  416. package/dist/media-gallery-3zIVLMWH.js +203 -0
  417. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  418. package/dist/mentions-utuUvH1K.js +570 -0
  419. package/dist/mentions-utuUvH1K.js.map +1 -0
  420. package/dist/{message-YfFmbXNP.js → message-DZ_ruyUV.js} +7 -6
  421. package/dist/message-DZ_ruyUV.js.map +1 -0
  422. package/dist/metadata-list-8N16ZMW_.js +405 -0
  423. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  424. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  425. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  426. package/dist/navigation-Bnotn4AQ.js +145 -0
  427. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  428. package/dist/navigation-BzhHI3lo.js +269 -0
  429. package/dist/navigation-BzhHI3lo.js.map +1 -0
  430. package/dist/{navigation-row-recipes-DlU-4QYO.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  431. package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  432. package/dist/{number-CKRBYmZK.js → number-DbV1Dija.js} +36 -34
  433. package/dist/{number-CKRBYmZK.js.map → number-DbV1Dija.js.map} +1 -1
  434. package/dist/overflow-tab-bar-CWY7Nogn.js +282 -0
  435. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  436. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  437. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  438. package/dist/overlays-DNWmZrJ4.js +1001 -0
  439. package/dist/overlays-DNWmZrJ4.js.map +1 -0
  440. package/dist/page-Bgl1F560.js +224 -0
  441. package/dist/page-Bgl1F560.js.map +1 -0
  442. package/dist/page-header-commands-DOb6WsfD.js +126 -0
  443. package/dist/page-header-commands-DOb6WsfD.js.map +1 -0
  444. package/dist/pagination-BL25hu2s.js +158 -0
  445. package/dist/pagination-BL25hu2s.js.map +1 -0
  446. package/dist/{popover-Dcv_9jxr.js → popover-7_m66eYW.js} +11 -10
  447. package/dist/popover-7_m66eYW.js.map +1 -0
  448. package/dist/popover-menu-B9WWygpa.js +100 -0
  449. package/dist/popover-menu-B9WWygpa.js.map +1 -0
  450. package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-D3j8R8Yp.js} +18 -11
  451. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  452. package/dist/{primitives-BHrwQXFC.js → primitives-BFK08r9M.js} +45 -44
  453. package/dist/primitives-BFK08r9M.js.map +1 -0
  454. package/dist/primitives.js +4 -4
  455. package/dist/{progress-Br9WTFya.js → progress-B1VnCT0K.js} +9 -9
  456. package/dist/{progress-Br9WTFya.js.map → progress-B1VnCT0K.js.map} +1 -1
  457. package/dist/{receipt-CV89q1fs.js → receipt-BVSOH3Xo.js} +9 -6
  458. package/dist/{receipt-CV89q1fs.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  459. package/dist/rich-text-GOUyKQ-s.js +78 -0
  460. package/dist/rich-text-GOUyKQ-s.js.map +1 -0
  461. package/dist/rich-text-editor-cRLC-eBK.js +1196 -0
  462. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  463. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  464. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  465. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  466. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  467. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  468. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  469. package/dist/sanitize-html-DsQmI48u.js +92 -0
  470. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  471. package/dist/scroll-area-DcI-M1UT.js +48 -0
  472. package/dist/scroll-area-DcI-M1UT.js.map +1 -0
  473. package/dist/{separator-Do5GWDYi.js → separator-BDV-Y648.js} +3 -3
  474. package/dist/{separator-Do5GWDYi.js.map → separator-BDV-Y648.js.map} +1 -1
  475. package/dist/{separator-BMEvwnSX.js → separator-Bom7NsGO.js} +2 -2
  476. package/dist/{separator-BMEvwnSX.js.map → separator-Bom7NsGO.js.map} +1 -1
  477. package/dist/services/actions/action-adapters.d.ts +18 -0
  478. package/dist/services/actions/index.d.ts +1 -1
  479. package/dist/services/actions.js +16 -4
  480. package/dist/services/actions.js.map +1 -1
  481. package/dist/settings-ybnjVwbd.js +171 -0
  482. package/dist/settings-ybnjVwbd.js.map +1 -0
  483. package/dist/sheet-CGpB3omz.js +211 -0
  484. package/dist/sheet-CGpB3omz.js.map +1 -0
  485. package/dist/{sidebar-Cb8WzOvE.js → sidebar-A0ElHINE.js} +17 -16
  486. package/dist/sidebar-A0ElHINE.js.map +1 -0
  487. package/dist/{sidebar-Crc9M9JV.js → sidebar-CPx_7YBa.js} +205 -203
  488. package/dist/sidebar-CPx_7YBa.js.map +1 -0
  489. package/dist/{skeleton-DVMXr15h.js → skeleton-Byjnt7qr.js} +9 -9
  490. package/dist/{skeleton-DVMXr15h.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  491. package/dist/smart-card-DiC5aac3.js +604 -0
  492. package/dist/smart-card-DiC5aac3.js.map +1 -0
  493. package/dist/{structure-hzCW-XsV.js → structure-BmisBK-3.js} +2 -2
  494. package/dist/{structure-hzCW-XsV.js.map → structure-BmisBK-3.js.map} +1 -1
  495. package/dist/style.css +1 -1
  496. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  497. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  498. package/dist/table-BweFy_P9.js +1530 -0
  499. package/dist/table-BweFy_P9.js.map +1 -0
  500. package/dist/table-DsfzoUia.js +175 -0
  501. package/dist/table-DsfzoUia.js.map +1 -0
  502. package/dist/tabs-CDocW5D1.js +191 -0
  503. package/dist/tabs-CDocW5D1.js.map +1 -0
  504. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  505. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  506. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  507. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  508. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  509. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  510. package/dist/theme.css +285 -228
  511. package/dist/themes/green.css +16 -12
  512. package/dist/timelines-CwM_9IhD.js +457 -0
  513. package/dist/timelines-CwM_9IhD.js.map +1 -0
  514. package/dist/tone-recipes-BPsRAvhu.js +73 -0
  515. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  516. package/dist/tooltip-yiRJUFjp.js +111 -0
  517. package/dist/tooltip-yiRJUFjp.js.map +1 -0
  518. package/dist/{tree-BotPlyiD.js → tree-WnKQzwbq.js} +69 -67
  519. package/dist/tree-WnKQzwbq.js.map +1 -0
  520. package/dist/typography/rich-text.js +1 -1
  521. package/dist/typography-UTnveOEy.js +117 -0
  522. package/dist/typography-UTnveOEy.js.map +1 -0
  523. package/dist/typography.js +2 -2
  524. package/dist/{ui-provider-D2_TeLqw.js → ui-provider-C_U0Xma4.js} +13 -5
  525. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  526. package/dist/ui-provider.js +3 -3
  527. package/dist/{upload-B0WHW7ak.js → upload-CXyxmQBP.js} +210 -209
  528. package/dist/upload-CXyxmQBP.js.map +1 -0
  529. package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-Boscubn9.js} +111 -111
  530. package/dist/upload-queue-Boscubn9.js.map +1 -0
  531. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  532. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  533. package/dist/{usage-card-U0YBLTNT.js → usage-card-BhO5eqkX.js} +45 -29
  534. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  535. package/dist/{utils-Cospvlj1.js → utils-BRhFDwuU.js} +114 -67
  536. package/dist/utils-BRhFDwuU.js.map +1 -0
  537. package/dist/value-inputs-DXPDjvBU.js +963 -0
  538. package/dist/value-inputs-DXPDjvBU.js.map +1 -0
  539. package/dist/{value-typography-Deb3yQZg.js → value-typography-BP8OG6h5.js} +2 -2
  540. package/dist/{value-typography-Deb3yQZg.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  541. package/dist/workspace-Cdrg7k9f.js +408 -0
  542. package/dist/workspace-Cdrg7k9f.js.map +1 -0
  543. package/docs/consumer-skill/SKILL.md +21 -22
  544. package/docs/consumer-skill/examples/app-layout.tsx +1 -1
  545. package/docs/consumer-skill/examples/composition.tsx +3 -3
  546. package/docs/consumer-skill/examples/detail.tsx +59 -12
  547. package/docs/consumer-skill/examples/edit.tsx +1 -1
  548. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  549. package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
  550. package/docs/consumer-skill/examples/website.tsx +1 -1
  551. package/docs/consumer-skill/references/agents-md.md +33 -0
  552. package/docs/consumer-skill/references/analytics.md +1 -1
  553. package/docs/consumer-skill/references/composition.md +58 -13
  554. package/docs/consumer-skill/references/design-contract.md +12 -3
  555. package/docs/consumer-skill/references/installation.md +11 -1
  556. package/docs/consumer-skill/references/integration.md +4 -3
  557. package/docs/consumer-skill/references/public-api.json +956 -453
  558. package/docs/consumer-skill/references/review.md +32 -5
  559. package/docs/consumer-skill/references/theming.md +78 -9
  560. package/docs/consumer-skill/references/tokens.json +1 -1
  561. package/docs/consumer-skill/references/workflows.md +54 -10
  562. package/docs/consumer-skill/scripts/composition-policy.mjs +42 -11
  563. package/docs/consumer-skill/scripts/surface-policy.mjs +150 -5
  564. package/package.json +17 -5
  565. package/dist/accordion-CQXVcd7Q.js +0 -205
  566. package/dist/accordion-CQXVcd7Q.js.map +0 -1
  567. package/dist/action-menu-BTpyPWJ2.js +0 -264
  568. package/dist/action-menu-BTpyPWJ2.js.map +0 -1
  569. package/dist/affordance-geometry.generated-CCIXb2A1.js +0 -68
  570. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
  571. package/dist/ai-artifact-2PQ2fItc.js +0 -1112
  572. package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
  573. package/dist/attachment-q69dlt5Y.js +0 -244
  574. package/dist/attachment-q69dlt5Y.js.map +0 -1
  575. package/dist/auth-M3vGMgDR.js.map +0 -1
  576. package/dist/avatar-djdaaQ_s.js.map +0 -1
  577. package/dist/badge-0tATj-tW.js +0 -92
  578. package/dist/badge-0tATj-tW.js.map +0 -1
  579. package/dist/breadcrumbs-BG_FfMK4.js +0 -128
  580. package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
  581. package/dist/button-BS3KDg00.js.map +0 -1
  582. package/dist/button-R9CCoH7A.js.map +0 -1
  583. package/dist/buttons-DS0ZIwJ_.js +0 -99
  584. package/dist/buttons-DS0ZIwJ_.js.map +0 -1
  585. package/dist/cards-QoJ4syG9.js +0 -66
  586. package/dist/cards-QoJ4syG9.js.map +0 -1
  587. package/dist/chart-DwYRKKc-.js.map +0 -1
  588. package/dist/checkbox-B7ygNTYp.js +0 -35
  589. package/dist/checkbox-B7ygNTYp.js.map +0 -1
  590. package/dist/choice-inputs-DrJ17tpL.js +0 -752
  591. package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
  592. package/dist/code-block-CD0B7M93.js +0 -183
  593. package/dist/code-block-CD0B7M93.js.map +0 -1
  594. package/dist/combobox-6dvVny2q.js +0 -272
  595. package/dist/combobox-6dvVny2q.js.map +0 -1
  596. package/dist/combobox-CB7039j7.js +0 -865
  597. package/dist/combobox-CB7039j7.js.map +0 -1
  598. package/dist/comments-You0Bzbr.js.map +0 -1
  599. package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
  600. package/dist/containers-D_L4mTVb.js.map +0 -1
  601. package/dist/data-display-3xWQUnMA.js +0 -1335
  602. package/dist/data-display-3xWQUnMA.js.map +0 -1
  603. package/dist/date-picker-DrDFj8Lo.js +0 -1527
  604. package/dist/date-picker-DrDFj8Lo.js.map +0 -1
  605. package/dist/date-pickers-CnFCb0n2.js +0 -174
  606. package/dist/date-pickers-CnFCb0n2.js.map +0 -1
  607. package/dist/display-DrdvPwF0.js +0 -343
  608. package/dist/display-DrdvPwF0.js.map +0 -1
  609. package/dist/dropdown-menu-CURh59jb.js +0 -193
  610. package/dist/dropdown-menu-CURh59jb.js.map +0 -1
  611. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  612. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  613. package/dist/feedback-C7nR0UtT.js +0 -232
  614. package/dist/feedback-C7nR0UtT.js.map +0 -1
  615. package/dist/field-affordance-recipes-CkOCdE2y.js +0 -46
  616. package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
  617. package/dist/field-state-recipes-C-MFBX_8.js +0 -11
  618. package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
  619. package/dist/filters-Da-gNPsE.js.map +0 -1
  620. package/dist/form-field-VZRULhUK.js.map +0 -1
  621. package/dist/form-sizing-uWP4lzVh.js.map +0 -1
  622. package/dist/forms-numeric-D3CO60IF.js +0 -905
  623. package/dist/forms-numeric-D3CO60IF.js.map +0 -1
  624. package/dist/header-2ycNqGOR.js.map +0 -1
  625. package/dist/icon-badge-DKlaKXoo.js +0 -53
  626. package/dist/icon-badge-DKlaKXoo.js.map +0 -1
  627. package/dist/input-BoLm9Hks.js +0 -20
  628. package/dist/input-BoLm9Hks.js.map +0 -1
  629. package/dist/input-DhQdBnV3.js +0 -255
  630. package/dist/input-DhQdBnV3.js.map +0 -1
  631. package/dist/item-xzh8Df65.js +0 -264
  632. package/dist/item-xzh8Df65.js.map +0 -1
  633. package/dist/media-gallery-DQUQ0m3O.js +0 -201
  634. package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
  635. package/dist/mentions-DwnO1hh4.js +0 -564
  636. package/dist/mentions-DwnO1hh4.js.map +0 -1
  637. package/dist/message-YfFmbXNP.js.map +0 -1
  638. package/dist/navigation-Cbp5V8gG.js +0 -264
  639. package/dist/navigation-Cbp5V8gG.js.map +0 -1
  640. package/dist/navigation-Cs1npsPm.js +0 -300
  641. package/dist/navigation-Cs1npsPm.js.map +0 -1
  642. package/dist/overlay.recipes-CNO2S9V6.js +0 -34
  643. package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
  644. package/dist/overlays-DhZO7N-I.js +0 -994
  645. package/dist/overlays-DhZO7N-I.js.map +0 -1
  646. package/dist/page-C6R_8jFt.js +0 -325
  647. package/dist/page-C6R_8jFt.js.map +0 -1
  648. package/dist/page-header-hUTzcRZX.js +0 -112
  649. package/dist/page-header-hUTzcRZX.js.map +0 -1
  650. package/dist/pagination-Cm0jqa3I.js +0 -149
  651. package/dist/pagination-Cm0jqa3I.js.map +0 -1
  652. package/dist/popover-Dcv_9jxr.js.map +0 -1
  653. package/dist/popover-menu-DnRFKnHP.js +0 -99
  654. package/dist/popover-menu-DnRFKnHP.js.map +0 -1
  655. package/dist/popover.recipes-wmbvL8Ah.js.map +0 -1
  656. package/dist/primitives-BHrwQXFC.js.map +0 -1
  657. package/dist/rich-text-editor-CF8QYt5p.js +0 -574
  658. package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
  659. package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
  660. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +0 -1
  661. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  662. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  663. package/dist/rich-text-j-FGAeZW.js +0 -32
  664. package/dist/rich-text-j-FGAeZW.js.map +0 -1
  665. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  666. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  667. package/dist/scroll-area-DRdr16Pt.js +0 -47
  668. package/dist/scroll-area-DRdr16Pt.js.map +0 -1
  669. package/dist/settings-DHk0L2MF.js +0 -161
  670. package/dist/settings-DHk0L2MF.js.map +0 -1
  671. package/dist/sheet-DRFNY1_D.js +0 -207
  672. package/dist/sheet-DRFNY1_D.js.map +0 -1
  673. package/dist/sidebar-Cb8WzOvE.js.map +0 -1
  674. package/dist/sidebar-Crc9M9JV.js.map +0 -1
  675. package/dist/smart-card-Bek-TwUp.js +0 -599
  676. package/dist/smart-card-Bek-TwUp.js.map +0 -1
  677. package/dist/spinner-CmTAbEp0.js +0 -80
  678. package/dist/spinner-CmTAbEp0.js.map +0 -1
  679. package/dist/surface-recipes-DOdoBXGm.js +0 -28
  680. package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
  681. package/dist/table-D6zKeYQX.js +0 -162
  682. package/dist/table-D6zKeYQX.js.map +0 -1
  683. package/dist/table-Dn4XSrSB.js +0 -1444
  684. package/dist/table-Dn4XSrSB.js.map +0 -1
  685. package/dist/tabs-Dk8E_knt.js +0 -189
  686. package/dist/tabs-Dk8E_knt.js.map +0 -1
  687. package/dist/text-inputs-BFpku0Qd.js +0 -331
  688. package/dist/text-inputs-BFpku0Qd.js.map +0 -1
  689. package/dist/theme-scope-kStaAer0.js +0 -39
  690. package/dist/theme-scope-kStaAer0.js.map +0 -1
  691. package/dist/timelines-CxuAFIc2.js +0 -439
  692. package/dist/timelines-CxuAFIc2.js.map +0 -1
  693. package/dist/tree-BotPlyiD.js.map +0 -1
  694. package/dist/typography-CAr3dQhX.js +0 -116
  695. package/dist/typography-CAr3dQhX.js.map +0 -1
  696. package/dist/ui-provider-D2_TeLqw.js.map +0 -1
  697. package/dist/upload-B0WHW7ak.js.map +0 -1
  698. package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
  699. package/dist/usage-card-U0YBLTNT.js.map +0 -1
  700. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  701. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  702. package/dist/utils-Cospvlj1.js.map +0 -1
  703. package/dist/value-inputs-CjfzGMsN.js +0 -854
  704. package/dist/value-inputs-CjfzGMsN.js.map +0 -1
  705. package/dist/workspace-YoFjXi6i.js +0 -394
  706. package/dist/workspace-YoFjXi6i.js.map +0 -1
  707. /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-numeric-B_jraJaQ.js","names":["React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","Select","UNIT_OPTIONS","React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","React","useDensityConfig","useMoneyConfig","cn","Label","Text","TextLink","Grid","Stack","AlertDescription","Alert","interactionRecipes","selectToggleRecipes","formControlSizeClasses","formFieldTriggerClasses","formControlIconClasses","resolveFormControlSize","Input","FormField","SelectTrigger","SelectPopupContent","SelectPopupGroup","Select","Select$1","SelectPopupItem","SelectValue","controlGroupHeightClasses","React$1","defaultDecimalInputStrings","formatDecimalValue","value","formatted","allowNegative","hasLeadingMinus","parts","decimalPlaces","isWithinBounds","numValue","min","max","applyRounding","factor","decimals","shifted","mode","floor","diff","clamp","next","n","snapToStep","anchor","stepsFromAnchor","current","step","stepped","delta","fireChange","nativeSetter","target","STEPPER_SIZE_CLASS","DecimalInputImpl","controlledValue","sizeProp","stringsProp","props","size","defaultScale","strings","useStrings","validDecimalPlaces","inputRef","editingUnavailable","disabled","handleChange","useCallback","newValue","allowEmpty","modifiedEvent","onChange","handleBlur","onBlur","normalizeOnBlur","raw","num","roundingMode","adjust","showSteppers","handleKeyDown","onKeyDown","event","placeholderResolved","placeholder","Minus","node","forwardedRef","className","Plus","DecimalInput","PercentageInput","forwardRef","defaultCurrencyInputStrings","CURRENCY_SYMBOLS","normalizeCurrencies","currencies","currency","CurrencyInputImpl","controlledCurrency","decimalInputProps","currencyTriggerId","useId","normalizedCurrencies","useMemo","internalCurrency","setInternalCurrency","useState","defaultCurrency","isCurrencyControlled","selectedCurrency","details","disableCurrencySelector","onConfigError","handleCurrencyChange","newCurrency","onCurrencyChange","triggerClassName","currencyWidth","currencySelector","currencyLabel","invalid","currencyPlaceholder","curr","currencyPosition","CurrencyInput","memo","defaultMoneyInputStrings","interpolateMoneyInputString","values","key","output","template","FALLBACK_CURRENCIES","parseAmount","parsed","resolveFormatted","currencyOptionValue","option","MoneyInput","recordCurrencyProp","moneyConfig","resolvedDefaultCurrency","activeCurrency","useRef","availableCurrencies","source","unique","optionValue","options","recordCurrency","money","originalFormatted","showOriginalHint","willMigrate","isInvalid","error","assignRef","handleAmountChange","onChangeData","nextCurrency","defaultValue","input","required","controlStrings","controlClassName","hasFieldChrome","label","hint","helperText","showMigrationWarning","AlertTriangle","migrationWarningMessage","ORDERED_MODES","defaultRoundingModeLabels","RoundingModeSelect","controlled","allProps","labels","onValueChange","defaultDimensionsInputStrings","UNIT_OPTIONS$1","parseDimensionValue","format","p","formatDimensionValue","width","height","depth","DimensionsInput","controlledUnit","resolvedWidthLabel","widthLabel","resolvedHeightLabel","heightLabel","resolvedDepthLabel","depthLabel","resolvedUnitPlaceholder","unitPlaceholder","resolvedWidthPlaceholder","widthPlaceholder","resolvedHeightPlaceholder","heightPlaceholder","resolvedDepthPlaceholder","depthPlaceholder","shouldShowInlineLabels","layout","shouldShowVerticalLabels","shouldShowUnitSelector","showUnitSelector","hasUnitLabel","unitLabel","widthFieldLabel","heightFieldLabel","depthFieldLabel","fieldId","ids","subLabelClasses","formLabelLineClass","isValueControlled","isUnitControlled","initialParsed","internalWidth","setInternalWidth","internalHeight","setInternalHeight","internalDepth","setInternalDepth","internalUnit","setInternalUnit","defaultUnit","parsedValue","widthValue","heightValue","depthValue","unitValue","handleDimensionChange","updatedWidth","updatedHeight","updatedDepth","dimension","formattedValue","handleUnitChange","newUnit","typedUnit","onUnitChange","unitSelector","disableUnitSelector","unit","defaultWeightInputStrings","UNIT_OPTIONS","WeightInput","internalValue","setInternalValue","handleValueChange","nextUnit","weightUnit","unitOptions","unitTriggerId","unitWidth","defaultCoordinatesInputStrings","parseValue","lat","lng","part","formatValue","isFiniteNumberInRange","CoordinatesInput","isControlled","internalLat","setInternalLat","internalLng","setInternalLng","parsedControlled","update","nextLat","nextLng","mapUrl","hasValidLat","hasValidLng","showPreviewLink"],"sources":["../src/components/base/forms-numeric/decimal-input.tsx","../src/components/base/forms-numeric/percentage-input.tsx","../src/components/base/forms-numeric/currency-input.tsx","../src/components/base/forms-numeric/money-input.strings.ts","../src/components/base/forms-numeric/money-input.tsx","../src/components/base/forms-numeric/rounding-mode-select.tsx","../src/components/base/forms-numeric/dimensions-input.tsx","../src/components/base/forms-numeric/weight-input.tsx","../src/components/base/forms-numeric/coordinates-input.tsx"],"sourcesContent":["/**\n * DecimalInput — text-based numeric input with decimal-place enforcement,\n * locale-friendly comma → dot normalisation, optional min/max clamping,\n * rounding mode (`round` / `floor` / `ceil` / `half-even`), and optional\n * stepper buttons when `step` is set.\n *\n * Wraps the base `Input` so all add-on / icon / clear / loading features\n * still work. Extra features layered on top:\n *\n * - `step` — when set, renders − / + stepper buttons that snap the value\n * to a multiple of `step` (anchored at `min` if provided, else 0).\n * - `roundingMode` — controls how stepper / blur normalisation rounds\n * half values; default `'round'` (round-half-up).\n * - `normalizeOnBlur` (default `true`) — pads the displayed value to the\n * full `decimalPlaces` count and clamps to `[min, max]` when the field\n * loses focus.\n *\n * The `value` prop is always a plain string (consumers parse it as needed)\n * so RHF / Inertia can treat it like any other input.\n */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formControlIconClasses, formControlSizeClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { Input, type InputProps } from '../text-inputs';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport type DecimalRoundingMode = 'round' | 'floor' | 'ceil' | 'half-even';\n\nexport interface DecimalInputStrings {\n\t/** Accessible label for the decrement stepper. */\n\tdecrement: string;\n\t/** Accessible label for the increment stepper. */\n\tincrement: string;\n}\n\nexport const defaultDecimalInputStrings: DecimalInputStrings = {\n\tdecrement: 'Decrement',\n\tincrement: 'Increment',\n};\n\nexport interface DecimalInputProps extends Omit<InputProps, 'type' | 'inputMode' | 'strings'> {\n\t/** Maximum fractional digits accepted and used during normalization. */\n\tdecimalPlaces?: number;\n\t/** Minimum accepted numeric value. */\n\tmin?: number;\n\t/** Maximum accepted numeric value. */\n\tmax?: number;\n\t/** Whether a leading negative sign is accepted. */\n\tallowNegative?: boolean;\n\t/** Whether the field may remain blank. */\n\tallowEmpty?: boolean;\n\t/** When set, renders − / + steppers and snaps the value to multiples of `step`. */\n\tstep?: number;\n\t/** How to round when normalising on blur or stepping. Default `'round'`. */\n\troundingMode?: DecimalRoundingMode;\n\t/** Pad to full decimalPlaces and clamp to [min, max] on blur. Default `true`. */\n\tnormalizeOnBlur?: boolean;\n\t/** String overrides for stepper aria-labels. */\n\tstrings?: StringsProp<DecimalInputStrings>;\n}\n\nconst formatDecimalValue = (\n\tvalue: string,\n\tdecimalPlaces: number,\n\tallowNegative: boolean,\n): string => {\n\tif (!value) return '';\n\n\tlet formatted = value;\n\tformatted = formatted.replace(/,/g, '.');\n\n\tif (allowNegative) {\n\t\tformatted = formatted.replace(/[^\\d.-]/g, '');\n\t} else {\n\t\tformatted = formatted.replace(/[^\\d.]/g, '');\n\t}\n\n\tif (allowNegative && formatted.includes('-')) {\n\t\tconst hasLeadingMinus = formatted.startsWith('-');\n\t\tformatted = formatted.replace(/-/g, '');\n\t\tif (hasLeadingMinus) formatted = '-' + formatted;\n\t}\n\n\tconst parts = formatted.split('.');\n\tif (parts.length > 2) {\n\t\tformatted = parts[0] + '.' + parts.slice(1).join('');\n\t}\n\n\tif (parts.length === 2 && parts[1].length > decimalPlaces) {\n\t\tformatted = parts[0] + '.' + parts[1].substring(0, decimalPlaces);\n\t}\n\n\treturn formatted;\n};\n\nconst isWithinBounds = (value: string, min?: number, max?: number): boolean => {\n\tif (!value || value === '-') return true;\n\tconst numValue = parseFloat(value);\n\tif (Number.isNaN(numValue)) return true;\n\tif (min !== undefined && numValue < min) return false;\n\tif (max !== undefined && numValue > max) return false;\n\treturn true;\n};\n\nfunction applyRounding(value: number, decimals: number, mode: DecimalRoundingMode): number {\n\tconst factor = Math.pow(10, decimals);\n\tconst shifted = value * factor;\n\tswitch (mode) {\n\t\tcase 'floor':\n\t\t\treturn Math.floor(shifted) / factor;\n\t\tcase 'ceil':\n\t\t\treturn Math.ceil(shifted) / factor;\n\t\tcase 'half-even': {\n\t\t\tconst floor = Math.floor(shifted);\n\t\t\tconst diff = shifted - floor;\n\t\t\tif (diff > 0.5) return (floor + 1) / factor;\n\t\t\tif (diff < 0.5) return floor / factor;\n\t\t\treturn (floor % 2 === 0 ? floor : floor + 1) / factor;\n\t\t}\n\t\tcase 'round':\n\t\tdefault:\n\t\t\treturn Math.round(shifted) / factor;\n\t}\n}\n\nfunction clamp(n: number, min?: number, max?: number): number {\n\tlet next = n;\n\tif (min !== undefined) next = Math.max(min, next);\n\tif (max !== undefined) next = Math.min(max, next);\n\treturn next;\n}\n\nfunction snapToStep(\n\tcurrent: number,\n\tdelta: number,\n\tstep: number,\n\tmin?: number,\n\tmode: DecimalRoundingMode = 'round',\n): number {\n\tconst anchor = min ?? 0;\n\tconst stepsFromAnchor = (current - anchor) / step;\n\tconst rounded =\n\t\tmode === 'floor'\n\t\t\t? Math.floor(stepsFromAnchor)\n\t\t\t: mode === 'ceil'\n\t\t\t\t? Math.ceil(stepsFromAnchor)\n\t\t\t\t: Math.round(stepsFromAnchor);\n\tconst stepped = anchor + (rounded + delta) * step;\n\treturn Number(stepped.toFixed(12));\n}\n\nfunction fireChange(target: HTMLInputElement, value: string) {\n\t// Write through the native setter so React's value tracker sees a change,\n\t// then dispatch a real input event. React's own change handling then runs:\n\t// the Input's internal state (uncontrolled use), DecimalInput formatting and\n\t// the consumer callback each observe the step exactly once, and a later\n\t// re-render can no longer restore the stale value. A controlled consumer\n\t// that declines the change keeps its value, as with typing.\n\tconst nativeSetter = Object.getOwnPropertyDescriptor(\n\t\twindow.HTMLInputElement.prototype,\n\t\t'value',\n\t)?.set;\n\tif (nativeSetter) nativeSetter.call(target, value);\n\telse target.value = value;\n\ttarget.dispatchEvent(new Event('input', { bubbles: true }));\n}\n\nconst STEPPER_SIZE_CLASS: Record<FormControlSize, string> = {\n\tsm: 'w-control-sm',\n\tmd: 'w-control',\n\tlg: 'w-control-lg',\n};\n\nfunction DecimalInputImpl(\n\t{\n\t\tdecimalPlaces = 2,\n\t\tmin,\n\t\tmax,\n\t\tallowNegative = true,\n\t\tallowEmpty = true,\n\t\tstep,\n\t\troundingMode = 'round',\n\t\tnormalizeOnBlur = true,\n\t\tonChange,\n\t\tonBlur,\n\t\tonKeyDown,\n\t\tplaceholder,\n\t\tclassName,\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n\t\t...props\n\t}: DecimalInputProps,\n\tforwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size: FormControlSize = resolveFormControlSize(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultDecimalInputStrings, stringsProp);\n\tconst validDecimalPlaces = Math.min(12, Math.max(0, decimalPlaces));\n\tconst inputRef = React.useRef<HTMLInputElement | null>(null);\n\tconst editingUnavailable = disabled || props.loading || props.readOnly;\n\n\tconst handleChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newValue = e.target.value;\n\n\t\t\tif (!newValue && allowEmpty) {\n\t\t\t\tonChange?.(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formatted = formatDecimalValue(newValue, validDecimalPlaces, allowNegative);\n\t\t\tif (!isWithinBounds(formatted, min, max)) return;\n\n\t\t\tif (formatted !== newValue) {\n\t\t\t\tconst modifiedEvent = {\n\t\t\t\t\t...e,\n\t\t\t\t\ttarget: { ...e.target, value: formatted },\n\t\t\t\t\tcurrentTarget: { ...e.currentTarget, value: formatted },\n\t\t\t\t} as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\tonChange?.(modifiedEvent);\n\t\t\t} else {\n\t\t\t\tonChange?.(e);\n\t\t\t}\n\t\t},\n\t\t[onChange, validDecimalPlaces, allowNegative, allowEmpty, min, max],\n\t);\n\n\tconst handleBlur = useCallback(\n\t\t(e: React.FocusEvent<HTMLInputElement>) => {\n\t\t\tonBlur?.(e);\n\t\t\tif (!normalizeOnBlur) return;\n\t\t\tconst raw = e.target.value;\n\t\t\tif (!raw && allowEmpty) return;\n\t\t\tconst num = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tif (!Number.isFinite(num)) return;\n\t\t\tconst clamped = clamp(num, min, max);\n\t\t\tconst rounded = applyRounding(clamped, validDecimalPlaces, roundingMode);\n\t\t\tconst next = rounded.toFixed(validDecimalPlaces);\n\t\t\tif (next !== raw && inputRef.current) {\n\t\t\t\tfireChange(inputRef.current, next);\n\t\t\t}\n\t\t},\n\t\t[onBlur, onChange, normalizeOnBlur, allowEmpty, min, max, validDecimalPlaces, roundingMode],\n\t);\n\n\tconst adjust = useCallback(\n\t\t(delta: number) => {\n\t\t\tif (editingUnavailable || step === undefined) return;\n\t\t\tconst target = inputRef.current;\n\t\t\tif (!target) return;\n\t\t\tconst raw = target.value;\n\t\t\tconst current = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tconst base = Number.isFinite(current) ? current : (min ?? 0);\n\t\t\tconst snapped = clamp(snapToStep(base, delta, step, min, roundingMode), min, max);\n\t\t\tconst next = applyRounding(snapped, validDecimalPlaces, roundingMode).toFixed(validDecimalPlaces);\n\t\t\tfireChange(target, next);\n\t\t},\n\t\t[editingUnavailable, step, min, max, roundingMode, validDecimalPlaces, onChange],\n\t);\n\n\tconst showSteppers = typeof step === 'number' && step > 0;\n\n\t// With steppers, Arrow Up/Down step the value from the keyboard, so the\n\t// pointer-only stepper buttons are never the only way to step.\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\tonKeyDown?.(event);\n\t\t\tif (event.defaultPrevented || !showSteppers) return;\n\t\t\tif (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tadjust(event.key === 'ArrowUp' ? 1 : -1);\n\t\t\t}\n\t\t},\n\t\t[onKeyDown, showSteppers, adjust],\n\t);\n\tconst placeholderResolved =\n\t\tplaceholder ?? (validDecimalPlaces > 0 ? `0.${'0'.repeat(validDecimalPlaces)}` : '0');\n\n\tif (showSteppers) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('decimal-input--component', \n\t\t\t\t\t// Stepper segmented group — input + adjacent − / + buttons\n\t\t\t\t\t// share a single border radius so the group reads as one\n\t\t\t\t\t// control instead of three loose chips.\n\t\t\t\t\t'flex items-stretch overflow-hidden rounded-inner border border-input bg-transparent [&>.input--component]:h-full',\n\t\t\t\t\tformControlSizeClasses[size],\n\t\t\t\t\t// The frame is the field: it carries the shared keyboard-focus,\n\t\t\t\t\t// validation and read-only states once for the whole group.\n\t\t\t\t\t'has-[input:focus-visible]:border-ring has-[input:focus-visible]:ring-3 has-[input:focus-visible]:ring-ring/50',\n\t\t\t\t\t'has-[input[aria-invalid=true]]:border-destructive has-[input[aria-invalid=true]]:has-[input:focus-visible]:border-destructive has-[input[aria-invalid=true]]:has-[input:focus-visible]:ring-destructive/30 dark:has-[input[aria-invalid=true]]:has-[input:focus-visible]:ring-destructive/50',\n\t\t\t\t\t'has-[input:read-only:not(:disabled)]:bg-muted',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.decrement}\n\t\t\t\t\tdisabled={editingUnavailable}\n\t\t\t\t\tonClick={() => adjust(-1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tinteractionRecipes.nativeButtonReset,\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-e border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t// A disabled frame dims once; read-only or loading dims only the steppers.\n\t\t\t\t\t\t'disabled:pointer-events-none disabled:cursor-not-allowed',\n\t\t\t\t\t\t!disabled && 'disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Minus aria-hidden=\"true\" className={formControlIconClasses[size]} />\n\t\t\t\t</button>\n\t\t\t\t<Input\n\t\t\t\t\tsize={size}\n\t\t\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\t\t\tplaceholder={placeholderResolved}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tvalue={controlledValue}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// The frame owns border, ring, fill and dimming; the inner field draws none of them.\n\t\t\t\t\t\t'!h-full min-h-0 flex-1 tabular-nums text-center border-0 shadow-none rounded-none bg-transparent read-only:bg-transparent focus-visible:ring-0 focus-visible:border-0 aria-invalid:ring-0 aria-invalid:focus-visible:ring-0 disabled:opacity-100',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.increment}\n\t\t\t\t\tdisabled={editingUnavailable}\n\t\t\t\t\tonClick={() => adjust(1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tinteractionRecipes.nativeButtonReset,\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-s border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t'disabled:pointer-events-none disabled:cursor-not-allowed',\n\t\t\t\t\t\t!disabled && 'disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Plus aria-hidden=\"true\" className={formControlIconClasses[size]} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Input\n\t\t\tsize={size}\n\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\ttype=\"text\"\n\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\tplaceholder={placeholderResolved}\n\t\t\tonChange={handleChange}\n\t\t\tonBlur={handleBlur}\n\t\t\tonKeyDown={onKeyDown}\n\t\t\tvalue={controlledValue}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn('tabular-nums text-end', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst DecimalInput = React.forwardRef<HTMLInputElement, DecimalInputProps>(DecimalInputImpl);\nDecimalInput.displayName = 'DecimalInput';\n\nexport { DecimalInput };\n","/**\n * PercentageInput — DecimalInput configured for 0..100 percent values with a\n * trailing `%` add-on. Inherits stepper / rounding / normalisation features\n * from DecimalInput.\n */\nimport { forwardRef } from 'react';\nimport { DecimalInput, type DecimalInputProps } from './decimal-input';\n\nexport type PercentageInputProps = Omit<\n\tDecimalInputProps,\n\t'min' | 'max' | 'allowNegative' | 'endAddon'\n> & {\n\t/** Minimum percentage value. Defaults to 0. */\n\tmin?: number;\n\t/** Maximum percentage value. Defaults to 100. */\n\tmax?: number;\n};\n\nexport const PercentageInput = forwardRef<HTMLInputElement, PercentageInputProps>(\n\tfunction PercentageInput({ decimalPlaces = 2, min = 0, max = 100, step, ...props }, ref) {\n\t\treturn (\n\t\t\t<DecimalInput className=\"percentage-input--component\"\n\t\t\t\tref={ref}\n\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\tallowNegative={false}\n\t\t\t\tmin={min}\n\t\t\t\tmax={max}\n\t\t\t\tstep={step}\n\t\t\t\tendAddon=\"%\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nPercentageInput.displayName = 'PercentageInput';\n","import { useId, useState, useCallback, useEffect, useMemo, memo, forwardRef, type ForwardedRef } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Label, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize, formLabelLineClass } from '../forms/form-sizing';\nimport { selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport {\n\tDecimalInput,\n\tdefaultDecimalInputStrings,\n\ttype DecimalInputProps,\n\ttype DecimalInputStrings,\n} from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport interface CurrencyOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface CurrencyInputStrings extends DecimalInputStrings {\n\t/** Accessible name for the currency selector. */\n\tcurrencyAriaLabel: string;\n}\n\nexport const defaultCurrencyInputStrings: CurrencyInputStrings = {\n\t...defaultDecimalInputStrings,\n\tcurrencyAriaLabel: 'Currency',\n};\n\nexport interface CurrencyInputProps extends Omit<DecimalInputProps, 'label' | 'hint' | 'helperText' | 'error' | 'strings'> {\n\t/** Current currency value */\n\tcurrency?: string;\n\n\t/** Default currency if uncontrolled */\n\tdefaultCurrency?: string;\n\n\t/** List of available currencies (simple strings or objects with value/label) */\n\tcurrencies?: (string | CurrencyOption)[];\n\n\t/** Callback when currency changes */\n\tonCurrencyChange?: (currency: string) => void;\n\n\t/** Position of currency dropdown */\n\tcurrencyPosition?: 'start' | 'end';\n\n\t/** Disable currency selection */\n\tdisableCurrencySelector?: boolean;\n\n\t/** Placeholder for currency dropdown */\n\tcurrencyPlaceholder?: string;\n\n\t/** Width of the currency dropdown */\n\tcurrencyWidth?: string;\n\n\t/** Label for currency field (sub-label) */\n\tcurrencyLabel?: string;\n\n\t/** Localizes the selector name and inherited decimal-stepper labels. */\n\tstrings?: StringsProp<CurrencyInputStrings>;\n\n\t/** Error state for styling (passed from FormField) */\n\tinvalid?: boolean;\n\n\t/** Called when the input is misconfigured (mismatched currency/defaultCurrency\n\t * while the selector is disabled, missing currency, etc.). The library\n\t * also DEV-logs the same message to the console. */\n\tonConfigError?: (\n\t\tmessage: string,\n\t\tdetails: { currency?: string; defaultCurrency?: string; disableCurrencySelector?: boolean },\n\t) => void;\n}\n\n// Common currency symbols\nconst CURRENCY_SYMBOLS: Record<string, string> = {\n\tUSD: '$',\n\tEUR: '€',\n\tGBP: '£',\n\tBGN: 'лв',\n\tJPY: '¥',\n\tCNY: '¥',\n\tCHF: 'CHF',\n\tCAD: 'C$',\n\tAUD: 'A$',\n};\n\nconst normalizeCurrencies = (currencies?: (string | CurrencyOption)[]): CurrencyOption[] => {\n\tif (!currencies || currencies.length === 0) return [];\n\n\treturn currencies.map((currency) => {\n\t\tif (typeof currency === 'string') {\n\t\t\tconst symbol = CURRENCY_SYMBOLS[currency] || currency;\n\t\t\treturn {\n\t\t\t\tvalue: currency,\n\t\t\t\tlabel: `${symbol} ${currency}`,\n\t\t\t};\n\t\t}\n\t\treturn currency;\n\t});\n};\n\nfunction CurrencyInputImpl(\n\t{\n\t\tcurrency: controlledCurrency,\n\t\tdefaultCurrency,\n\t\tcurrencies,\n\t\tonCurrencyChange,\n\t\tcurrencyPosition = 'start',\n\t\tdisableCurrencySelector = false,\n\t\tcurrencyPlaceholder,\n\t\tcurrencyWidth = 'w-28',\n\t\tcurrencyLabel,\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tdisabled,\n\t\tonConfigError,\n\t\tsize: sizeProp,\n\t\t...decimalInputProps\n\t}: CurrencyInputProps,\n\tforwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultCurrencyInputStrings, stringsProp);\n\tconst currencyTriggerId = useId();\n\n\t// Memoize normalized currencies\n\tconst normalizedCurrencies = useMemo(() => normalizeCurrencies(currencies), [currencies]);\n\n\t// Internal state for uncontrolled currency\n\tconst [internalCurrency, setInternalCurrency] = useState(\n\t\tdefaultCurrency ?? normalizedCurrencies[0]?.value ?? ''\n\t);\n\n\t// Determine if currency is controlled\n\tconst isCurrencyControlled = controlledCurrency !== undefined;\n\tconst selectedCurrency = isCurrencyControlled ? controlledCurrency : internalCurrency;\n\n\tuseEffect(() => {\n\t\tconst details = { currency: controlledCurrency, defaultCurrency, disableCurrencySelector };\n\t\tif (\n\t\t\tdisableCurrencySelector &&\n\t\t\ttypeof controlledCurrency === 'string' &&\n\t\t\ttypeof defaultCurrency === 'string' &&\n\t\t\tcontrolledCurrency.trim() !== '' &&\n\t\t\tdefaultCurrency.trim() !== '' &&\n\t\t\tcontrolledCurrency !== defaultCurrency\n\t\t) {\n\t\t\tconst message = '[CurrencyInput] currency/defaultCurrency mismatch while selector is disabled.';\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn(message, { currency: controlledCurrency, defaultCurrency });\n\t\t\t}\n\t\t\tonConfigError?.(message, details);\n\t\t}\n\n\t\tif (\n\t\t\tdisableCurrencySelector &&\n\t\t\t(typeof selectedCurrency !== 'string' || selectedCurrency.trim().length === 0)\n\t\t) {\n\t\t\tconst message = '[CurrencyInput] disableCurrencySelector is enabled but no currency is provided.';\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn(message);\n\t\t\t}\n\t\t\tonConfigError?.(message, details);\n\t\t}\n\t}, [controlledCurrency, defaultCurrency, disableCurrencySelector, onConfigError, selectedCurrency]);\n\n\t// Handle currency change\n\tconst handleCurrencyChange = useCallback(\n\t\t(newCurrency: string | null) => {\n\t\t\tif (newCurrency === null) return;\n\t\t\tif (!isCurrencyControlled) {\n\t\t\t\tsetInternalCurrency(newCurrency);\n\t\t\t}\n\t\t\tonCurrencyChange?.(newCurrency);\n\t\t},\n\t\t[isCurrencyControlled, onCurrencyChange]\n\t);\n\n\t// Memoize trigger class names. `formFieldTriggerClasses` is the canonical\n\t// select/trigger chrome, so this selector keeps the height, padding, radius,\n\t// and focus treatment of a standalone `Select` — previously only the height\n\t// was shared, leaving shadcn's `rounded-md` and `py-2 pr-2 pl-2.5` in place\n\t// and making the unit selector visibly narrower-cornered than its siblings.\n\t// `currencyWidth` still wins over the helper's `w-full` through twMerge.\n\tconst triggerClassName = useMemo(\n\t\t() =>\n\t\t\tcn(\n\t\t\t\t'currency-input--selector-trigger',\n\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\tcurrencyWidth,\n\t\t\t),\n\t\t[size, currencyWidth]\n\t);\n\n\t// Currency selector component\n\tconst currencySelector = (\n\t\t// A sub-label uses the FormField label recipe and rhythm.\n\t\t<Stack gap=\"xs\" className=\"currency-input--selector\">\n\t\t\t{!!currencyLabel && <Label htmlFor={currencyTriggerId} className={cn('currency-input--selector-label text-inherit', formLabelLineClass)}>{currencyLabel}</Label>}\n\t\t\t<baseui.Select\n\t\t\t\tvalue={selectedCurrency}\n\t\t\t\tonValueChange={(value) => handleCurrencyChange(value)}\n\t\t\t\tdisabled={disabled || disableCurrencySelector}\n\t\t\t>\n\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\tid={currencyTriggerId}\n\t\t\t\t\taria-label={currencyLabel || strings.currencyAriaLabel}\n\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\ticonClassName={selectToggleRecipes.icon[size]}\n\t\t\t\t\tclassName={triggerClassName}\n\t\t\t\t>\n\t\t\t\t\t<baseui.SelectValue\n\t\t\t\t\t\tplaceholder={currencyPlaceholder ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t{currencyPlaceholder}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t{normalizedCurrencies.map((curr) => (\n\t\t\t\t\t\t\t<SelectPopupItem key={curr.value} value={curr.value} size={size}>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t{curr.label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t</SelectPopupContent>\n\t\t\t</baseui.Select>\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t// Bottom-aligned, so the amount and currency controls stay level when only\n\t\t// the currency carries a sub-label.\n\t\t<div className={cn('currency-input--component', 'flex items-end gap-space-md')}>\n\t\t\t{currencyPosition === 'start' && currencySelector}\n\n\t\t\t<div className=\"currency-input--amount min-w-0 flex-1\">\n\t\t\t\t<DecimalInput\n\t\t\t\t\tref={forwardedRef}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tdecimalPlaces={2}\n\t\t\t\t\tallowNegative={false}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\tstrings={{ decrement: strings.decrement, increment: strings.increment }}\n\t\t\t\t\t{...decimalInputProps}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{currencyPosition === 'end' && currencySelector}\n\t\t</div>\n\t);\n}\n\n// forwardRef + memo: forward to the underlying decimal input so consumers\n// can focus/measure programmatically.\nexport const CurrencyInput = memo(forwardRef<HTMLInputElement, CurrencyInputProps>(CurrencyInputImpl));\nCurrencyInput.displayName = 'CurrencyInput';\n","export interface MoneyInputStrings {\n\toriginalValue: string;\n\tconversionWarning: string;\n}\n\nexport const defaultMoneyInputStrings: MoneyInputStrings = {\n\toriginalValue: 'Original value: {value}',\n\tconversionWarning: 'Currency will be converted from {from} to {to}.',\n};\n\nexport function interpolateMoneyInputString(\n\ttemplate: string,\n\tvalues: Record<string, string>,\n) {\n\treturn Object.entries(values).reduce(\n\t\t(output, [key, value]) => output.replaceAll(`{${key}}`, value),\n\t\ttemplate,\n\t);\n}\n","/**\n * MoneyInput — canonical monetary editor.\n *\n * It composes CurrencyInput with optional FormField chrome, one combined\n * amount/currency callback, and opt-in original-value/conversion context.\n * Consumers import it from `themelia-react-ui/base/forms`; display-only\n * monetary values use `Money` from `themelia-react-ui/primitives`.\n */\nimport { AlertTriangle } from 'lucide-react';\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ChangeEvent,\n\ttype ReactNode,\n} from 'react';\n\nimport { Alert, AlertDescription } from '../feedback';\nimport { FormField } from '../forms/form-field';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useMoneyConfig, type CurrencyCode } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tCurrencyInput,\n\ttype CurrencyInputProps,\n\ttype CurrencyOption,\n} from './currency-input';\nimport {\n\tdefaultMoneyInputStrings,\n\tinterpolateMoneyInputString,\n\ttype MoneyInputStrings,\n} from './money-input.strings';\n\nexport interface MoneyInputContext {\n\t/** Original major-unit amount, when available. */\n\tamount?: number | string | null;\n\t/** Original value currency, when available. */\n\tcurrency?: string | null;\n\t/** Optional original/record currency that can trigger a conversion warning. */\n\trecordCurrency?: string | null;\n\t/** Consumer-formatted original value shown as supporting context. */\n\tpair?: { formatted?: string | null } | null;\n}\n\nexport interface MoneyInputData {\n\t/** Parsed major-unit amount. `null` means the field is empty or incomplete; it is never coerced to zero. */\n\tamount: number | null;\n\t/** Active ISO 4217 currency code. */\n\tcurrency: CurrencyCode;\n}\n\nexport interface MoneyInputProps extends Omit<\n\tCurrencyInputProps,\n\t'currency' | 'defaultCurrency' | 'currencies' | 'onCurrencyChange' | 'strings'\n> {\n\t/** Current currency value (ISO 4217 code, e.g. `USD`). */\n\tcurrency?: CurrencyCode;\n\t/** Initial currency when uncontrolled. Falls back to UIProvider money config. */\n\tdefaultCurrency?: CurrencyCode;\n\t/** Available currencies. Custom option labels are preserved. */\n\tcurrencies?: Array<CurrencyCode | CurrencyOption>;\n\t/** Currency-only callback for existing form integrations. */\n\tonCurrencyChange?: (currency: CurrencyCode) => void;\n\t/**\n\t * Combined amount/currency callback for domain-form state. The amount is\n\t * parsed while the raw `value` / `onChange` channel keeps intermediate text\n\t * such as `1.` available to the editor.\n\t */\n\tonChangeData?: (data: MoneyInputData) => void;\n\t/** Optional context used for original-value and conversion messaging. */\n\tmoney?: MoneyInputContext | null;\n\t/** Optional field label. Omit when an external FormField already owns the chrome. */\n\tlabel?: string;\n\t/** Short guidance rendered below the control when no helper text or error is present. */\n\thint?: string;\n\t/** Supporting copy rendered below the control. */\n\thelperText?: string;\n\t/** Validation message. Also marks the amount and currency controls invalid. */\n\terror?: string;\n\t/** Marks the owned label and native amount input as required. */\n\trequired?: boolean;\n\t/** Existing record currency used to detect a currency migration. */\n\trecordCurrency?: CurrencyCode;\n\t/** Whether a record-currency mismatch renders the conversion warning. */\n\tshowMigrationWarning?: boolean;\n\t/** Consumer-owned warning content for a record-currency mismatch. */\n\tmigrationWarningMessage?: ReactNode;\n\t/** Whether to render `money.pair.formatted` as original-value context. */\n\tshowOriginalHint?: boolean;\n\t/** String overrides forwarded to the underlying DecimalInput steppers. */\n\tcontrolStrings?: CurrencyInputProps['strings'];\n\t/** Class name for the inner amount input. `className` styles the complete MoneyInput surface. */\n\tcontrolClassName?: string;\n\t/** Copy overrides for original-value and conversion-warning messages. */\n\tstrings?: StringsProp<MoneyInputStrings>;\n}\n\nconst FALLBACK_CURRENCIES: CurrencyCode[] = ['USD', 'EUR'];\n\nfunction parseAmount(value: unknown) {\n\tconst raw = String(value ?? '').trim();\n\tif (!raw) return null;\n\tconst parsed = Number.parseFloat(raw.replace(',', '.'));\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction resolveFormatted(value: unknown) {\n\treturn typeof value === 'string' ? value.trim() : '';\n}\n\nfunction currencyOptionValue(option: CurrencyCode | CurrencyOption) {\n\treturn typeof option === 'string' ? option : option.value;\n}\n\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n\t{\n\t\tcurrency: controlledCurrency,\n\t\tdefaultCurrency,\n\t\tcurrencies,\n\t\tonCurrencyChange,\n\t\tonChangeData,\n\t\tmoney,\n\t\tlabel,\n\t\thint,\n\t\thelperText,\n\t\terror,\n\t\trequired,\n\t\tinvalid,\n\t\trecordCurrency: recordCurrencyProp,\n\t\tshowMigrationWarning = true,\n\t\tmigrationWarningMessage,\n\t\tshowOriginalHint = true,\n\t\tcontrolStrings,\n\t\tcontrolClassName,\n\t\tstrings: stringsProp,\n\t\tclassName,\n\t\tonChange,\n\t\tvalue,\n\t\tdefaultValue,\n\t\t...props\n\t},\n\tforwardedRef,\n) {\n\tconst moneyConfig = useMoneyConfig();\n\tconst strings = useStrings(defaultMoneyInputStrings, stringsProp);\n\tconst resolvedDefaultCurrency = defaultCurrency\n\t\t?? moneyConfig.defaultCurrency\n\t\t?? 'USD';\n\tconst [internalCurrency, setInternalCurrency] = useState(resolvedDefaultCurrency);\n\tconst activeCurrency = controlledCurrency ?? internalCurrency;\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\n\tconst availableCurrencies = useMemo(() => {\n\t\tconst source = currencies?.length\n\t\t\t? currencies\n\t\t\t: [resolvedDefaultCurrency, ...FALLBACK_CURRENCIES];\n\t\tconst unique = new Map<string, CurrencyCode | CurrencyOption>();\n\t\tfor (const option of source) {\n\t\t\tconst optionValue = currencyOptionValue(option);\n\t\t\tif (!unique.has(optionValue)) unique.set(optionValue, option);\n\t\t}\n\t\tconst options = Array.from(unique.values());\n\t\treturn unique.has(activeCurrency) ? options : [activeCurrency, ...options];\n\t}, [activeCurrency, currencies, resolvedDefaultCurrency]);\n\tconst recordCurrency = recordCurrencyProp ?? money?.recordCurrency ?? undefined;\n\tconst originalFormatted = showOriginalHint\n\t\t? resolveFormatted(money?.pair?.formatted)\n\t\t: '';\n\tconst willMigrate = Boolean(\n\t\trecordCurrency\n\t\t&& activeCurrency\n\t\t&& recordCurrency !== activeCurrency,\n\t);\n\tconst isInvalid = invalid ?? Boolean(error);\n\n\tconst assignRef = useCallback((node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t\tif (typeof forwardedRef === 'function') forwardedRef(node);\n\t\telse if (forwardedRef) forwardedRef.current = node;\n\t}, [forwardedRef]);\n\n\tconst handleAmountChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n\t\tonChange?.(event);\n\t\tonChangeData?.({\n\t\t\tamount: parseAmount(event.target.value),\n\t\t\tcurrency: activeCurrency,\n\t\t});\n\t}, [activeCurrency, onChange, onChangeData]);\n\n\tconst handleCurrencyChange = useCallback((nextCurrency: CurrencyCode) => {\n\t\tif (controlledCurrency === undefined) setInternalCurrency(nextCurrency);\n\t\tonCurrencyChange?.(nextCurrency);\n\t\tonChangeData?.({\n\t\t\tamount: parseAmount(inputRef.current?.value ?? value ?? defaultValue),\n\t\t\tcurrency: nextCurrency,\n\t\t});\n\t}, [controlledCurrency, defaultValue, onChangeData, onCurrencyChange, value]);\n\n\tconst input = (\n\t\t<CurrencyInput\n\t\t\t{...props}\n\t\t\tref={assignRef}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tcurrency={activeCurrency}\n\t\t\tcurrencies={availableCurrencies}\n\t\t\tonChange={handleAmountChange}\n\t\t\tonCurrencyChange={handleCurrencyChange}\n\t\t\tinvalid={isInvalid}\n\t\t\trequired={required}\n\t\t\taria-required={required ? true : props['aria-required']}\n\t\t\tstrings={controlStrings}\n\t\t\tclassName={controlClassName}\n\t\t/>\n\t);\n\tconst hasFieldChrome = Boolean(label || hint || helperText || error || required);\n\n\treturn (\n\t\t<Stack gap=\"sm\" className={cn('money-input--component', className)}>\n\t\t\t{/* The original value is one more supporting line: it keeps the field's\n\t\t\t hint rhythm and type, without a decorative glyph. */}\n\t\t\t<Stack gap=\"xs\" className=\"money-input--field\">\n\t\t\t\t{hasFieldChrome ? (\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\thint={hint}\n\t\t\t\t\t\thelperText={helperText}\n\t\t\t\t\t\terror={error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t>\n\t\t\t\t\t\t{input}\n\t\t\t\t\t</FormField>\n\t\t\t\t) : input}\n\n\t\t\t\t{!!originalFormatted && !error && (\n\t\t\t\t\t<Text tag=\"p\" size=\"xs\" type=\"secondary\" className=\"money-input--original\">\n\t\t\t\t\t\t{interpolateMoneyInputString(strings.originalValue, { value: originalFormatted })}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\n\t\t\t{!!willMigrate && showMigrationWarning && (\n\t\t\t\t<Alert tone=\"warning\" className=\"money-input--warning\">\n\t\t\t\t\t<AlertTriangle aria-hidden=\"true\" />\n\t\t\t\t\t<AlertDescription>\n\t\t\t\t\t\t{migrationWarningMessage ?? interpolateMoneyInputString(\n\t\t\t\t\t\t\tstrings.conversionWarning,\n\t\t\t\t\t\t\t{ from: recordCurrency ?? '', to: activeCurrency },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AlertDescription>\n\t\t\t\t</Alert>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nMoneyInput.displayName = 'MoneyInput';\n\nexport {\n\tdefaultMoneyInputStrings,\n\ttype MoneyInputStrings,\n} from './money-input.strings';\n","import { forwardRef, useMemo, useCallback } from 'react';\nimport { Select, type SelectProps } from '../choice-inputs';\nimport { cn } from '../../../lib/utils';\n\ntype RoundingMode = string;\n\nexport interface RoundingModeSelectProps extends Omit<SelectProps, 'options' | 'value' | 'onValueChange'> {\n\t/** Current rounding mode value */\n\tvalue?: RoundingMode;\n\n\t/** Canonical change handler. */\n\tonValueChange?: (value: RoundingMode | undefined) => void;\n\n\t/**\n\t * Labels for the rounding modes. Defaults to sentence-case names: `floor` →\n\t * \"Round down\", `half_up` → \"Round half up\", `ceil` → \"Round up\".\n\t */\n\tlabels?: Partial<Record<RoundingMode, string>>;\n}\n\nconst ORDERED_MODES: RoundingMode[] = ['floor', 'half_up', 'ceil'];\n\n/** People read a policy name, never the stored identifier. */\nconst defaultRoundingModeLabels: Record<string, string> = {\n\tfloor: 'Round down',\n\thalf_up: 'Round half up',\n\tceil: 'Round up',\n};\n\nexport const RoundingModeSelect = forwardRef<HTMLButtonElement, RoundingModeSelectProps>(function RoundingModeSelect(allProps, ref) {\n\tconst controlled = Object.prototype.hasOwnProperty.call(allProps, 'value');\n\tconst { value, onValueChange, labels, placeholder, className, ...props } = allProps;\n\tconst options = useMemo(\n\t\t() =>\n\t\t\tORDERED_MODES.map((mode) => ({\n\t\t\t\tvalue: mode,\n\t\t\t\tlabel: labels?.[mode] ?? defaultRoundingModeLabels[mode] ?? mode,\n\t\t\t})),\n\t\t[labels]\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(next: string | undefined) => {\n\t\t\tonValueChange?.(next as RoundingMode | undefined);\n\t\t},\n\t\t[onValueChange]\n\t);\n\n\treturn <Select ref={ref} className={cn('rounding-mode-select--component', className)} options={options} {...(controlled ? { value } : {})} onValueChange={handleChange} placeholder={placeholder} {...props} />;\n});\n\nRoundingModeSelect.displayName = 'RoundingModeSelect';\n","import * as React from 'react';\nimport { useId, useState, useEffect, useCallback } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Label, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize, formLabelLineClass } from '../forms/form-sizing';\nimport { selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport { controlGroupHeightClasses } from '../../../lib/control-group-recipes';\nimport { DecimalInput } from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport interface DimensionObject {\n\t\twidth?: string;\n\t\theight?: string;\n\t\tdepth?: string;\n}\n\nexport type DimensionValue = string | DimensionObject;\nexport type DimensionUnit = 'mm' | 'cm' | 'm' | 'in' | 'ft' | 'px';\n\nexport interface DimensionsInputStrings {\n\t\twidth: string;\n\t\theight: string;\n\t\tdepth: string;\n\t\tunit: string;\n\t\twidthPlaceholder: string;\n\t\theightPlaceholder: string;\n\t\tdepthPlaceholder: string;\n}\n\nexport const defaultDimensionsInputStrings: DimensionsInputStrings = {\n\t\twidth: 'Width',\n\t\theight: 'Height',\n\t\tdepth: 'Depth',\n\t\tunit: 'Unit',\n\t\twidthPlaceholder: '0.00',\n\t\theightPlaceholder: '0.00',\n\t\tdepthPlaceholder: '0.00',\n};\n\nexport interface DimensionsInputProps {\n\t\t/** Current value (string \"WxHxD\" or object { width, height, depth }) */\n\t\tvalue?: DimensionValue;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: DimensionValue;\n\n\t\t/** Format type: 'string' for \"WxHxD\" or 'object' for { width, height, depth } */\n\t\tformat?: 'string' | 'object';\n\n\t/** Current length unit value. */\n\tunit?: DimensionUnit;\n\n\t/** Default length unit for uncontrolled mode. */\n\tdefaultUnit?: DimensionUnit;\n\n\t\t/** Label for width input (sub-label) */\n\t\twidthLabel?: string;\n\n\t\t/** Label for height input (sub-label) */\n\t\theightLabel?: string;\n\n\t\t/** Label for depth/length input (sub-label) */\n\t\tdepthLabel?: string;\n\n\t\t/** Label for unit selector (sub-label) */\n\t\tunitLabel?: string;\n\n\t\t/** Placeholder for the unit select */\n\t\tunitPlaceholder?: string;\n\n\t\t/** Placeholder for width */\n\t\twidthPlaceholder?: string;\n\n\t\t/** Placeholder for height */\n\t\theightPlaceholder?: string;\n\n\t\t/** Placeholder for depth */\n\t\tdepthPlaceholder?: string;\n\n\t\t/** Form control size — flows through `useDensityConfig().defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t/** Callback when value changes */\n\t\tonChange?: (e: { target: { value: DimensionValue } }) => void;\n\n\t\t/** Callback when unit changes */\n\tonUnitChange?: (unit: DimensionUnit) => void;\n\n\t\t/** Number of decimal places. Defaults to 2 */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Minimum value for all dimensions */\n\t\tmin?: number;\n\n\t\t/** Maximum value for all dimensions */\n\t\tmax?: number;\n\n\t\t/** Show unit selector. Defaults to true */\n\t\tshowUnitSelector?: boolean;\n\n\t\t/** Disable unit selector */\n\t\tdisableUnitSelector?: boolean;\n\n\t\t/** Layout orientation. Defaults to 'horizontal' */\n\t\tlayout?: 'horizontal' | 'vertical';\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n\n\t\t/** Additional CSS classes */\n\t\tclassName?: string;\n\n\t\t/** String overrides merged over defaults. Direct props (e.g. `widthLabel`) win over `strings` keys. */\n\t\tstrings?: StringsProp<DimensionsInputStrings>;\n}\n\n// Unit options\nconst UNIT_OPTIONS = [\n\t{ value: 'mm', label: 'mm' },\n\t{ value: 'cm', label: 'cm' },\n\t{ value: 'm', label: 'm' },\n\t{ value: 'in', label: 'in' },\n\t{ value: 'ft', label: 'ft' },\n\t{ value: 'px', label: 'px' },\n] as const;\n\nconst parseDimensionValue = (\n\t\tvalue: DimensionValue | undefined,\n\t\tformat: 'string' | 'object'\n): { width: string; height: string; depth: string } => {\n\t\tif (!value) {\n\t\t\t\treturn { width: '', height: '', depth: '' };\n\t\t}\n\n\t\tif (format === 'string' && typeof value === 'string') {\n\t\t\t\tconst parts = value.split('x').map((p) => p.trim());\n\t\t\t\treturn {\n\t\t\t\t\t\twidth: parts[0] || '',\n\t\t\t\t\t\theight: parts[1] || '',\n\t\t\t\t\t\tdepth: parts[2] || '',\n\t\t\t\t};\n\t\t}\n\n\t\tif (format === 'object' && typeof value === 'object') {\n\t\t\t\treturn {\n\t\t\t\t\t\twidth: value.width || '',\n\t\t\t\t\t\theight: value.height || '',\n\t\t\t\t\t\tdepth: value.depth || '',\n\t\t\t\t};\n\t\t}\n\n\t\treturn { width: '', height: '', depth: '' };\n};\n\nconst formatDimensionValue = (\n\t\twidth: string,\n\t\theight: string,\n\t\tdepth: string,\n\t\tformat: 'string' | 'object'\n): DimensionValue => {\n\t\tif (format === 'string') {\n\t\t\t\treturn `${width}x${height}x${depth}`;\n\t\t}\n\t\treturn { width, height, depth };\n};\n\nexport const DimensionsInput = React.forwardRef<HTMLDivElement, DimensionsInputProps>(function DimensionsInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tformat = 'string',\n\t\tunit: controlledUnit,\n\tdefaultUnit = 'cm',\n\t\twidthLabel,\n\t\theightLabel,\n\t\tdepthLabel,\n\t\tunitLabel,\n\t\tunitPlaceholder,\n\t\twidthPlaceholder,\n\t\theightPlaceholder,\n\t\tdepthPlaceholder,\n\t\tonChange,\n\t\tonUnitChange,\n\t\tdecimalPlaces = 2,\n\t\tmin = 0,\n\t\tmax,\n\t\tshowUnitSelector = true,\n\t\tdisableUnitSelector = false,\n\t\tlayout = 'horizontal',\n\t\tinvalid,\n\t\tdisabled = false,\n\t\tclassName,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n}: DimensionsInputProps, ref) {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst strings = useStrings(defaultDimensionsInputStrings, stringsProp);\n\t\tconst resolvedWidthLabel = widthLabel ?? strings.width;\n\t\tconst resolvedHeightLabel = heightLabel ?? strings.height;\n\t\tconst resolvedDepthLabel = depthLabel ?? strings.depth;\n\t\tconst resolvedUnitPlaceholder = unitPlaceholder ?? strings.unit;\n\t\tconst resolvedWidthPlaceholder = widthPlaceholder ?? strings.widthPlaceholder;\n\t\tconst resolvedHeightPlaceholder = heightPlaceholder ?? strings.heightPlaceholder;\n\t\tconst resolvedDepthPlaceholder = depthPlaceholder ?? strings.depthPlaceholder;\n\t\tconst shouldShowInlineLabels = layout === 'horizontal';\n\t\tconst shouldShowVerticalLabels = layout === 'vertical';\n\t\tconst shouldShowUnitSelector = showUnitSelector === true;\n\t\tconst hasUnitLabel = (unitLabel ?? '').length > 0;\n\t\tconst widthFieldLabel = shouldShowVerticalLabels ? resolvedWidthLabel : '';\n\t\tconst heightFieldLabel = shouldShowVerticalLabels ? resolvedHeightLabel : '';\n\t\tconst depthFieldLabel = shouldShowVerticalLabels ? resolvedDepthLabel : '';\n\t\tconst fieldId = useId();\n\t\tconst ids = { width: `${fieldId}-width`, height: `${fieldId}-height`, depth: `${fieldId}-depth`, unit: `${fieldId}-unit` };\n\t\t// Sub-labels above a field use the FormField label recipe; captions sit below.\n\t\tconst subLabelClasses = cn('text-inherit', formLabelLineClass);\n\n\t\t// Determine if value is controlled\n\t\tconst isValueControlled = controlledValue !== undefined;\n\t\tconst isUnitControlled = controlledUnit !== undefined;\n\n\t\t// Parse initial value\n\t\tconst initialParsed = parseDimensionValue(\n\t\t\t\tisValueControlled ? controlledValue : defaultValue,\n\t\t\t\tformat\n\t\t);\n\n\t\t// Internal state for uncontrolled mode\n\t\tconst [internalWidth, setInternalWidth] = useState(initialParsed.width);\n\t\tconst [internalHeight, setInternalHeight] = useState(initialParsed.height);\n\t\tconst [internalDepth, setInternalDepth] = useState(initialParsed.depth);\n\t\tconst [internalUnit, setInternalUnit] = useState(controlledUnit || defaultUnit);\n\n\t\t// Get current values\n\t\tconst parsedValue = parseDimensionValue(controlledValue, format);\n\t\tconst widthValue = isValueControlled ? parsedValue.width : internalWidth;\n\t\tconst heightValue = isValueControlled ? parsedValue.height : internalHeight;\n\t\tconst depthValue = isValueControlled ? parsedValue.depth : internalDepth;\n\t\tconst unitValue = isUnitControlled ? controlledUnit : internalUnit;\n\n\t\t// Sync internal state when controlled value changes\n\t\tuseEffect(() => {\n\t\t\t\tif (isValueControlled) {\n\t\t\t\t\t\tconst parsed = parseDimensionValue(controlledValue, format);\n\t\t\t\t\t\tsetInternalWidth(parsed.width);\n\t\t\t\t\t\tsetInternalHeight(parsed.height);\n\t\t\t\t\t\tsetInternalDepth(parsed.depth);\n\t\t\t\t}\n\t\t}, [controlledValue, format, isValueControlled]);\n\n\t\t// Handle dimension changes\n\t\tconst handleDimensionChange = useCallback(\n\t\t\t\t(dimension: 'width' | 'height' | 'depth', newValue: string) => {\n\t\t\t\t\t\tlet updatedWidth = widthValue;\n\t\t\t\t\t\tlet updatedHeight = heightValue;\n\t\t\t\t\t\tlet updatedDepth = depthValue;\n\n\t\t\t\t\t\tif (dimension === 'width') updatedWidth = newValue;\n\t\t\t\t\t\tif (dimension === 'height') updatedHeight = newValue;\n\t\t\t\t\t\tif (dimension === 'depth') updatedDepth = newValue;\n\n\t\t\t\t\t\tif (!isValueControlled) {\n\t\t\t\t\t\t\t\tsetInternalWidth(updatedWidth);\n\t\t\t\t\t\t\t\tsetInternalHeight(updatedHeight);\n\t\t\t\t\t\t\t\tsetInternalDepth(updatedDepth);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst formattedValue = formatDimensionValue(updatedWidth, updatedHeight, updatedDepth, format);\n\t\t\t\t\t\tonChange?.({ target: { value: formattedValue } });\n\t\t\t\t},\n\t\t\t\t[widthValue, heightValue, depthValue, isValueControlled, format, onChange]\n\t\t);\n\n\t\tconst handleUnitChange = useCallback(\n\t\t\t\t(newUnit: string | null) => {\n\t\t\t\t\t\tif (newUnit === null) return;\n\t\t\tconst typedUnit = newUnit as DimensionUnit;\n\t\t\t\t\t\tif (!isUnitControlled) {\n\t\t\t\t\t\t\t\tsetInternalUnit(typedUnit);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonUnitChange?.(typedUnit);\n\t\t\t\t},\n\t\t\t\t[isUnitControlled, onUnitChange]\n\t\t);\n\n\tconst unitSelector = (\n\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t{!!hasUnitLabel && shouldShowVerticalLabels && <Label htmlFor={ids.unit} className={subLabelClasses}>{unitLabel}</Label>}\n\t\t\t\t\t\t<baseui.Select\n\t\t\t\t\t\t\t\tvalue={unitValue}\n\t\t\t\t\t\t\t\tonValueChange={(value) => handleUnitChange(value)}\n\t\t\t\t\t\t\t\tdisabled={disabled || disableUnitSelector}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\t\t\t\t\t\tid={ids.unit}\n\t\t\t\t\t\t\t\t\t\taria-label={unitLabel ?? strings.unit}\n\t\t\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\t\t\ticonClassName={selectToggleRecipes.icon[size]}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t\t\tlayout === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'w-full'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'w-full @md/dimensions-input:w-32',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<baseui.SelectValue\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedUnitPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t{UNIT_OPTIONS.map((unit) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupItem key={unit.value} value={unit.value} size={size}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{unit.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t\t\t\t\t</SelectPopupContent>\n\t\t\t\t\t\t</baseui.Select>\n\t\t</Stack>\n\t\t);\n\n\t\treturn (\n\t\t<Stack ref={ref} gap=\"md\" className={cn('dimensions-input--component @container/dimensions-input', className)}>\n\t\t\t\t\t\t{/* Dimensions Inputs */}\n\t\t\t<Stack\n\t\t\t\tdirection={layout === 'vertical' ? 'vertical' : 'horizontal'}\n\t\t\t\tgap=\"md\"\n\t\t\t\talign={layout === 'vertical' ? 'stretch' : 'start'}\n\t\t\t\tclassName=\"dimensions-input--fields\"\n\t\t\t>\n\t\t\t\t\t\t\t\t{/* Width */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!widthFieldLabel && <Label htmlFor={ids.width} className={subLabelClasses}>{widthFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tid={ids.width}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={widthValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('width', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedWidthPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedWidthLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedWidthLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Separator */}\n\t\t\t\t\t\t\t\t{layout === 'horizontal' && (\n\t\t\t\t\t\t\t\t\t\t// One control tall, so the sign centres on the fields at every size.\n\t\t\t\t\t\t\t\t\t\t<div aria-hidden=\"true\" className={cn('dimensions-input--separator flex items-center', controlGroupHeightClasses[size])}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">×</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Height */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!heightFieldLabel && <Label htmlFor={ids.height} className={subLabelClasses}>{heightFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tid={ids.height}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={heightValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('height', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedHeightPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedHeightLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedHeightLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Separator */}\n\t\t\t\t\t\t\t\t{layout === 'horizontal' && (\n\t\t\t\t\t\t\t\t\t\t// One control tall, so the sign centres on the fields at every size.\n\t\t\t\t\t\t\t\t\t\t<div aria-hidden=\"true\" className={cn('dimensions-input--separator flex items-center', controlGroupHeightClasses[size])}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">×</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Depth */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!depthFieldLabel && <Label htmlFor={ids.depth} className={subLabelClasses}>{depthFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tid={ids.depth}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={depthValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('depth', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedDepthPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedDepthLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedDepthLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Unit Selector */}\n\t\t\t\t\t\t\t\t{!!shouldShowUnitSelector && (\n\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'dimensions-input--unit',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlayout === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'w-full'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'w-full basis-full pt-0 @md/dimensions-input:w-32 @md/dimensions-input:basis-32 @md/dimensions-input:shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{unitSelector}\n\t\t\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{hasUnitLabel ? unitLabel : resolvedUnitPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t\t);\n});\n\nDimensionsInput.displayName = 'DimensionsInput';\n","import * as React from 'react';\nimport { useId, useState, useMemo, useCallback } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize, formLabelLineClass } from '../forms/form-sizing';\nimport { selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport { DecimalInput } from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport type WeightUnit = 'g' | 'kg' | 'lb' | 'oz';\n\nexport interface WeightInputStrings {\n\t\t/** Above-field label for the unit selector. Empty string hides it. */\n\t\tunitLabel: string;\n\t\t/** Accessible name for the unit selector. */\n\t\tunitAriaLabel: string;\n\t\t/** Placeholder shown in the unit selector. */\n\t\tunitPlaceholder: string;\n}\n\nexport const defaultWeightInputStrings: WeightInputStrings = {\n\t\tunitLabel: '',\n\t\tunitAriaLabel: 'Unit',\n\t\tunitPlaceholder: '',\n};\n\nexport interface WeightInputProps {\n\t\t/** Controlled value */\n\t\tvalue?: string;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: string;\n\n\t\t/** Current unit */\n\t\tunit?: WeightUnit;\n\n\t\t/** Default unit for uncontrolled mode */\n\t\tdefaultUnit?: WeightUnit;\n\n\t\t/** Value change handler */\n\t\tonChange?: (e: { target: { value: string } }) => void;\n\n\t\t/** Unit change handler */\n\t\tonUnitChange?: (unit: WeightUnit) => void;\n\n\t\t/** Number of decimal places */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Minimum value */\n\t\tmin?: number;\n\n\t\t/** Maximum value */\n\t\tmax?: number;\n\n\t\t/** Show unit selector */\n\t\tshowUnitSelector?: boolean;\n\n\t\t/** Disable unit selector */\n\t\tdisableUnitSelector?: boolean;\n\n\t\t/** Override default strings (unit selector label + placeholder). */\n\t\tstrings?: StringsProp<WeightInputStrings>;\n\n\t\t/** Width of unit selector */\n\t\tunitWidth?: string;\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n\n\t\t/** Form control size — flows through `useDensityConfig().defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t/** Additional class names */\n\t\tclassName?: string;\n}\n\nconst UNIT_OPTIONS: Array<{ value: WeightUnit; label: string }> = [\n\t\t{ value: 'g', label: 'g' },\n\t\t{ value: 'kg', label: 'kg' },\n\t\t{ value: 'lb', label: 'lb' },\n\t\t{ value: 'oz', label: 'oz' },\n];\n\nexport const WeightInput = React.forwardRef<HTMLDivElement, WeightInputProps>(function WeightInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tunit: controlledUnit,\n\t\tdefaultUnit = 'g',\n\t\tonChange,\n\t\tonUnitChange,\n\t\tdecimalPlaces = 2,\n\t\tmin = 0,\n\t\tmax,\n\t\tshowUnitSelector = true,\n\t\tdisableUnitSelector = false,\n\t\tunitWidth = 'w-24',\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tdisabled = false,\n\t\tsize: sizeProp,\n\t\tclassName,\n}: WeightInputProps, ref) {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst strings = useStrings(defaultWeightInputStrings, stringsProp);\n\t\tconst isValueControlled = controlledValue !== undefined;\n\t\tconst isUnitControlled = controlledUnit !== undefined;\n\n\t\tconst [internalValue, setInternalValue] = useState(defaultValue ?? '');\n\t\tconst [internalUnit, setInternalUnit] = useState<WeightUnit>(controlledUnit ?? defaultUnit);\n\n\t\tconst value = isValueControlled ? controlledValue ?? '' : internalValue;\n\t\tconst unit = isUnitControlled ? controlledUnit ?? defaultUnit : internalUnit;\n\n\t\tconst handleValueChange = useCallback(\n\t\t\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\tif (!isValueControlled) {\n\t\t\t\t\t\t\t\tsetInternalValue(e.target.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonChange?.({ target: { value: e.target.value } });\n\t\t\t\t},\n\t\t\t\t[isValueControlled, onChange]\n\t\t);\n\n\t\tconst handleUnitChange = useCallback(\n\t\t\t\t(nextUnit: string | null) => {\n\t\t\t\t\t\tif (nextUnit === null) return;\n\t\t\t\t\t\tconst weightUnit = nextUnit as WeightUnit;\n\t\t\t\t\t\tif (!isUnitControlled) {\n\t\t\t\t\t\t\t\tsetInternalUnit(weightUnit);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonUnitChange?.(weightUnit);\n\t\t\t\t},\n\t\t\t\t[isUnitControlled, onUnitChange]\n\t\t);\n\n\t\tconst unitOptions = useMemo(() => UNIT_OPTIONS, []);\n\t\tconst hasUnitLabel = strings.unitLabel !== '';\n\t\tconst unitTriggerId = useId();\n\n\t\treturn (\n\t\t\t\t// Bottom-aligned, so value and unit stay level when only the unit has a sub-label.\n\t\t\t\t<div ref={ref} className={cn('weight-input--component', 'flex items-end gap-space-md', className)}>\n\t\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\tonChange={handleValueChange}\n\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\tallowNegative={false}\n\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!showUnitSelector && (\n\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t{!!hasUnitLabel && <Label htmlFor={unitTriggerId} className={cn('text-inherit', formLabelLineClass)}>{strings.unitLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<baseui.Select value={unit} onValueChange={(value) => handleUnitChange(value)} disabled={disabled || disableUnitSelector}>\n\t\t\t\t\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\t\t\t\t\t\tid={unitTriggerId}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.unitLabel || strings.unitAriaLabel}\n\t\t\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\t\t\ticonClassName={selectToggleRecipes.icon[size]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tunitWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<baseui.SelectValue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.unitPlaceholder ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.unitPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{unitOptions.map((option) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupItem key={option.value} value={option.value} size={size}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t</SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t</baseui.Select>\n\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t);\n});\n\nWeightInput.displayName = 'WeightInput';\n","import * as React from 'react';\nimport { useEffect, useMemo, useState, useCallback } from 'react';\nimport { FormField } from '../forms/form-field';\nimport { Grid, Stack } from '../structure';\nimport { TextLink } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport type { FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { DecimalInput } from './decimal-input';\n\nexport interface CoordinatesObjectValue {\n\t\tlat?: string;\n\t\tlng?: string;\n}\n\nexport type CoordinatesValue = string | CoordinatesObjectValue;\n\nexport interface CoordinatesInputStrings {\n\t\t/** Above-field label for the latitude input. Empty string hides it. */\n\t\tlatLabel: string;\n\t\t/** Above-field label for the longitude input. Empty string hides it. */\n\t\tlngLabel: string;\n\t\t/** Placeholder shown in the latitude input. */\n\t\tlatPlaceholder: string;\n\t\t/** Placeholder shown in the longitude input. */\n\t\tlngPlaceholder: string;\n\t\t/** Anchor text for the Google Maps preview link. Empty string hides it. */\n\t\tpreviewLinkLabel: string;\n}\n\nexport const defaultCoordinatesInputStrings: CoordinatesInputStrings = {\n\t\tlatLabel: '',\n\t\tlngLabel: '',\n\t\tlatPlaceholder: '',\n\t\tlngPlaceholder: '',\n\t\tpreviewLinkLabel: '',\n};\n\nexport interface CoordinatesInputProps {\n\t\t/** Controlled value */\n\t\tvalue?: CoordinatesValue;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: CoordinatesValue;\n\n\t\t/** Output format */\n\t\tformat?: 'string' | 'object';\n\n\t\t/** Change handler */\n\t\tonChange?: (e: { target: { value: CoordinatesValue } }) => void;\n\n\t\t/** Number of decimal places */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Show preview link to Google Maps */\n\t\tshowPreviewLink?: boolean;\n\n\t\t/** Override default strings (labels + placeholders + preview link). */\n\t\tstrings?: StringsProp<CoordinatesInputStrings>;\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Additional class names */\n\t\tclassName?: string;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n\n\t\t/** Control-height preset for both fields. Falls back to `UIProvider.density.defaultScale`, like the other numeric inputs. */\n\t\tsize?: FormControlSize;\n}\n\nconst parseValue = (\n\t\tvalue: CoordinatesValue | undefined,\n\t\tformat: 'string' | 'object'\n): { lat: string; lng: string } => {\n\t\tif (!value) {\n\t\t\t\treturn { lat: '', lng: '' };\n\t\t}\n\n\t\tif (format === 'string' && typeof value === 'string') {\n\t\t\t\tconst [lat, lng] = value.split(',').map((part) => part.trim());\n\t\t\t\treturn { lat: lat ?? '', lng: lng ?? '' };\n\t\t}\n\n\t\tif (format === 'object' && typeof value === 'object') {\n\t\t\t\treturn { lat: value.lat ?? '', lng: value.lng ?? '' };\n\t\t}\n\n\t\treturn { lat: '', lng: '' };\n};\n\nconst formatValue = (lat: string, lng: string, format: 'string' | 'object'): CoordinatesValue => {\n\t\tif (format === 'string') {\n\t\t\t\treturn `${lat},${lng}`;\n\t\t}\n\t\treturn { lat, lng };\n};\n\nconst isFiniteNumberInRange = (value: string, min: number, max: number): boolean => {\n\t\tif (!value) return false;\n\t\tconst num = Number(value);\n\t\treturn Number.isFinite(num) && num >= min && num <= max;\n};\n\nexport const CoordinatesInput = React.forwardRef<HTMLDivElement, CoordinatesInputProps>(function CoordinatesInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tformat = 'object',\n\t\tonChange,\n\t\tdecimalPlaces = 6,\n\t\tshowPreviewLink = true,\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tclassName,\n\t\tdisabled,\n\t\tsize,\n}: CoordinatesInputProps, ref) {\n\t\tconst strings = useStrings(defaultCoordinatesInputStrings, stringsProp);\n\t\tconst isControlled = controlledValue !== undefined;\n\n\t\tconst initialParsed = parseValue(isControlled ? controlledValue : defaultValue, format);\n\t\tconst [internalLat, setInternalLat] = useState(initialParsed.lat);\n\t\tconst [internalLng, setInternalLng] = useState(initialParsed.lng);\n\n\t\tconst parsedControlled = parseValue(controlledValue, format);\n\t\tconst lat = isControlled ? parsedControlled.lat : internalLat;\n\t\tconst lng = isControlled ? parsedControlled.lng : internalLng;\n\n\t\tuseEffect(() => {\n\t\t\t\tif (isControlled) {\n\t\t\t\t\t\tsetInternalLat(parsedControlled.lat);\n\t\t\t\t\t\tsetInternalLng(parsedControlled.lng);\n\t\t\t\t}\n\t\t}, [isControlled, parsedControlled.lat, parsedControlled.lng]);\n\n\t\tconst update = useCallback(\n\t\t\t\t(nextLat: string, nextLng: string) => {\n\t\t\t\t\t\tif (!isControlled) {\n\t\t\t\t\t\t\t\tsetInternalLat(nextLat);\n\t\t\t\t\t\t\t\tsetInternalLng(nextLng);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange?.({ target: { value: formatValue(nextLat, nextLng, format) } });\n\t\t\t\t},\n\t\t\t\t[isControlled, onChange, format]\n\t\t);\n\n\t\tconst mapUrl = useMemo(() => {\n\t\t\t\tconst hasValidLat = isFiniteNumberInRange(lat, -90, 90);\n\t\t\t\tconst hasValidLng = isFiniteNumberInRange(lng, -180, 180);\n\t\t\t\tif (!hasValidLat || !hasValidLng) return null;\n\t\t\t\treturn `https://www.google.com/maps?q=${encodeURIComponent(`${lat},${lng}`)}`;\n\t\t}, [lat, lng]);\n\n\t\treturn (\n\t\t\t\t<Stack ref={ref} gap=\"lg\" className={cn('coordinates-input--component', className)}>\n\t\t\t\t\t\t<Grid columns={{ base: 1, md: 2 }} gap=\"lg\">\n\t\t\t\t\t\t\t\t<FormField label={strings.latLabel || undefined}>\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.latPlaceholder || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={lat}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => update(e.target.value, lng)}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tallowNegative\n\t\t\t\t\t\t\t\t\t\t\t\tmin={-90}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={90}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.lngLabel || undefined}>\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.lngPlaceholder || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={lng}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => update(lat, e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tallowNegative\n\t\t\t\t\t\t\t\t\t\t\t\tmin={-180}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={180}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t</Grid>\n\n\t\t\t\t\t\t{!!showPreviewLink && !!mapUrl && !!strings.previewLinkLabel && (\n\t\t\t\t\t\t\t\t<TextLink href={mapUrl} type=\"secondary\" underline={false}>\n\t\t\t\t\t\t\t\t\t\t{strings.previewLinkLabel}\n\t\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t);\n});\n\nCoordinatesInput.displayName = 'CoordinatesInput';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuCA,IAAa0C,IAAkD;CAC9D,WAAW;CACX,WAAW;AACZ,GAuBMC,KACL,GACA,GACA,MACY;CACZ,IAAI,CAACC,GAAO,OAAO;CAEnB,IAAIC,IAAYD;CAShB,IARA,IAAYC,EAAU,QAAQ,MAAM,GAAG,GAEvC,AAGCA,IAHGC,IACSD,EAAU,QAAQ,YAAY,EAAE,IAEhCA,EAAU,QAAQ,WAAW,EAAE,GAGxCC,KAAiBD,EAAU,SAAS,GAAG,GAAG;EAC7C,IAAME,IAAkBF,EAAU,WAAW,GAAG;EAEhD,AADA,IAAYA,EAAU,QAAQ,MAAM,EAAE,GAClCE,MAAiB,IAAY,MAAMF;CACxC;CAEA,IAAMG,IAAQH,EAAU,MAAM,GAAG;CASjC,OARIG,EAAM,SAAS,MAClB,IAAYA,EAAM,KAAK,MAAMA,EAAM,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAGhDA,EAAM,WAAW,KAAKA,EAAM,EAAE,CAAC,SAASC,MAC3C,IAAYD,EAAM,KAAK,MAAMA,EAAM,EAAE,CAAC,UAAU,GAAGC,CAAa,IAG1DJ;AACR,GAEMK,KAAkB,GAAe,GAAc,MAA0B;CAC9E,IAAI,CAACN,KAASA,MAAU,KAAK,OAAO;CACpC,IAAMO,IAAW,WAAWP,CAAK;CAIjC,OAHI,OAAO,MAAMO,CAAQ,IAAU,KAEnC,EADIC,MAAQ,KAAA,KAAaD,IAAWC,KAChCC,MAAQ,KAAA,KAAaF,IAAWE;AAErC;AAEA,SAASC,EAAc,GAAe,GAAkB,GAAmC;CAC1F,IAAMC,IAAkB,MAAIC,GACtBC,IAAUb,IAAQW;CACxB,QAAQG,GAAR;EACC,KAAK,SACJ,OAAO,KAAK,MAAMD,CAAO,IAAIF;EAC9B,KAAK,QACJ,OAAO,KAAK,KAAKE,CAAO,IAAIF;EAC7B,KAAK,aAAa;GACjB,IAAMI,IAAQ,KAAK,MAAMF,CAAO,GAC1BG,IAAOH,IAAUE;GAGvB,OAFIC,IAAO,MAAaD,IAAQ,KAAKJ,IACjCK,IAAO,KAAYD,IAAQJ,KACvBI,IAAQ,KAAM,IAAIA,IAAQA,IAAQ,KAAKJ;EAChD;EAEA,SACC,OAAO,KAAK,MAAME,CAAO,IAAIF;CAC/B;AACD;AAEA,SAASM,EAAM,GAAW,GAAc,GAAsB;CAC7D,IAAIC,IAAOC;CAGX,OAFIX,MAAQ,KAAA,MAAW,IAAO,KAAK,IAAIA,GAAKU,CAAI,IAC5CT,MAAQ,KAAA,MAAW,IAAO,KAAK,IAAIA,GAAKS,CAAI,IACzCA;AACR;AAEA,SAASE,GACR,GACA,GACA,GACA,GACA,IAA4B,SACnB;CACT,IAAMC,IAASb,KAAO,GAChBc,KAAmBC,IAAUF,KAAUG,GAOvCC,IAAUJ,MALfP,MAAS,UACN,KAAK,MAAMQ,CAAe,IAC1BR,MAAS,SACR,KAAK,KAAKQ,CAAe,IACzB,KAAK,MAAMA,CAAe,KACKI,KAASF;CAC7C,OAAO,OAAOC,EAAQ,QAAQ,EAAE,CAAC;AAClC;AAEA,SAASE,EAAW,GAA0B,GAAe;CAO5D,IAAMC,IAAe,OAAO,yBAC3B,OAAO,iBAAiB,WACxB,OACD,CAAC,EAAE;CAGH,AAFIA,IAAcA,EAAa,KAAKC,GAAQ7B,CAAK,IAC5C,EAAO,QAAQA,GACpB6B,EAAO,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,GAAK,CAAC,CAAC;AAC3D;AAEA,IAAMC,IAAsD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;AACL;AAEA,SAASC,EACR,EACC,mBAAgB,GAChB,QACA,QACA,mBAAgB,IAChB,gBAAa,IACb,SACA,kBAAe,SACf,qBAAkB,IAClB,aACA,WACA,cACA,gBACA,cACA,OAAOC,IACP,kBACA,aACA,MAAMC,GACN,SAASC,GACT,GAAGC,KAEJ,GACC;CACD,IAAM,EAAE,oBAAiBhE,EAAiB,GACpCiE,IAAwBlD,EAAuB+C,GAAUI,CAAY,GACrEC,KAAUC,EAAWzC,GAA4BoC,CAAW,GAC5DM,IAAqB,KAAK,IAAI,IAAI,KAAK,IAAI,GAAGnC,CAAa,CAAC,GAC5DoC,IAAWrF,EAAM,OAAgC,IAAI,GACrDsF,IAAqBC,KAAYR,EAAM,WAAWA,EAAM,UAExDS,IAAeC,GACnB,MAA2C;EAC3C,IAAMC,IAAW,EAAE,OAAO;EAE1B,IAAI,CAACA,KAAYC,GAAY;GAC5B,IAAW,CAAC;GACZ;EACD;EAEA,IAAM9C,IAAYF,EAAmB+C,GAAUN,GAAoBtC,CAAa;EAChF,IAAKI,EAAeL,GAAWO,GAAKC,CAAG,GAEvC;OAAIR,MAAc6C,GAAU;IAC3B,IAAME,IAAgB;KACrB,GAAG;KACH,QAAQ;MAAE,GAAG,EAAE;MAAQ,OAAO/C;KAAU;KACxC,eAAe;MAAE,GAAG,EAAE;MAAe,OAAOA;KAAU;IACvD;IACA,IAAW+C,CAAa;GACzB,OACC,IAAW,CAAC;EAAA;CAEd,GACA;EAACC;EAAUT;EAAoBtC;EAAe6C;EAAYvC;EAAKC;CAAG,CACnE,GAEMyC,IAAaL,GACjB,MAA0C;EAE1C,IADAM,IAAS,CAAC,GACN,CAACC,GAAiB;EACtB,IAAMC,IAAM,EAAE,OAAO;EACrB,IAAI,CAACA,KAAON,GAAY;EACxB,IAAMO,IAAM,OAAO,WAAWD,EAAI,QAAQ,KAAK,GAAG,CAAC;EACnD,IAAI,CAAC,OAAO,SAASC,CAAG,GAAG;EAG3B,IAAMpC,IADUR,EADAO,EAAMqC,GAAK9C,GAAKC,CACF,GAAS+B,GAAoBe,CAC9C,CAAA,CAAQ,QAAQf,CAAkB;EAC/C,AAAItB,MAASmC,KAAOZ,EAAS,WAC5Bd,EAAWc,EAAS,SAASvB,CAAI;CAEnC,GACA;EAACiC;EAAQF;EAAUG;EAAiBL;EAAYvC;EAAKC;EAAK+B;EAAoBe;CAAY,CAC3F,GAEMC,IAASX,GACb,MAAkB;EAClB,IAAIH,KAAsBlB,MAAS,KAAA,GAAW;EAC9C,IAAMK,IAASY,EAAS;EACxB,IAAI,CAACZ,GAAQ;EACb,IAAMwB,IAAMxB,EAAO,OACbN,IAAU,OAAO,WAAW8B,EAAI,QAAQ,KAAK,GAAG,CAAC;EAIvD,EAAWxB,GADEnB,EADGO,EAAMG,GADT,OAAO,SAASG,CAAO,IAAIA,IAAWf,KAAO,GACnBkB,GAAOF,GAAMhB,GAAK+C,CAAY,GAAG/C,GAAKC,CAClD,GAAS+B,GAAoBe,CAAY,CAAC,CAAC,QAAQf,CAC3D,CAAI;CACxB,GACA;EAACE;EAAoBlB;EAAMhB;EAAKC;EAAK8C;EAAcf;EAAoBS;CAAQ,CAChF,GAEMQ,IAAe,OAAOjC,KAAS,YAAYA,IAAO,GAIlDkC,IAAgBb,GACpB,MAAiD;EAEjD,AADAc,IAAYC,CAAK,GACb,GAAM,oBAAqBH,MAC3BG,EAAM,QAAQ,aAAaA,EAAM,QAAQ,iBAC5CA,EAAM,eAAe,GACrBJ,EAAOI,EAAM,QAAQ,YAAY,IAAI,EAAE;CAEzC,GACA;EAACD;EAAWF;EAAcD;CAAM,CACjC,GACMK,IACLC,MAAgBtB,IAAqB,IAAI,KAAK,IAAI,OAAOA,CAAkB,MAAM;CA6ElF,OA3EIiB,IAEF,kBAAC,OAAD;EACC,WAAWpF,EAAG,4BAIb,oHACAU,EAAuBqD,IAGvB,iHACA,gSACA,iDACAO,KAAY,+BACb;EAbD,UAAA;GAeC,kBAAC,UAAD;IACC,MAAK;IACL,UAAU;IACV,cAAYL,GAAQ;IACpB,UAAUI;IACV,eAAec,EAAO,EAAE;IACxB,WAAWnF,EACVQ,EAAmB,mBACnB,kHACAiD,EAAmBM,IACnBvD,EAAmB,UAEnB,4DACA,CAAC8D,KAAY,qBACd;IAEA,UAAA,kBAACoB,GAAD;KAAO,eAAY;KAAO,WAAW9E,EAAuBmD;IAAQ,CAAA;GAC7D,CAAA;GACR,kBAACjD,GAAD;IACO;IACN,MAAM,MAAS;KAA2B,AAAzB,EAAS,UAAU6E,GAAU,OAAOC,KAAiB,aAAYA,EAAaD,CAAI,IAAYC,MAAc,EAAa,UAAUD;IAAM;IAC1J,MAAK;IACL,WAAWxB,IAAqB,IAAI,YAAY;IAChD,aAAaqB;IACb,UAAUjB;IACV,QAAQM;IACR,WAAWQ;IACX,OAAO1B;IACO;IACJ;IACV,WAAW3D,EAEV,oPACA6F,CACD;IACA,GAAI/B;GACJ,CAAA;GACD,kBAAC,UAAD;IACC,MAAK;IACL,UAAU;IACV,cAAYG,GAAQ;IACpB,UAAUI;IACV,eAAec,EAAO,CAAC;IACvB,WAAWnF,EACVQ,EAAmB,mBACnB,kHACAiD,EAAmBM,IACnBvD,EAAmB,UACnB,4DACA,CAAC8D,KAAY,qBACd;IAEA,UAAA,kBAACwB,GAAD;KAAM,eAAY;KAAO,WAAWlF,EAAuBmD;IAAQ,CAAA;GAC5D,CAAA;EACJ;MAKN,kBAACjD,GAAD;EACO;EACN,MAAM,MAAS;GAA2B,AAAzB,EAAS,UAAU6E,GAAU,OAAOC,KAAiB,aAAYA,EAAaD,CAAI,IAAYC,MAAc,EAAa,UAAUD;EAAM;EAC1J,MAAK;EACL,WAAWxB,IAAqB,IAAI,YAAY;EAChD,aAAaqB;EACb,UAAUjB;EACV,QAAQM;EACG;EACX,OAAOlB;EACO;EACJ;EACV,WAAW3D,EAAG,yBAAyB6F,CAAS;EAChD,GAAI/B;CACJ,CAAA;AAEH;AAEA,IAAMiC,IAAehH,EAAM,WAAgD2E,CAAgB;AAC3F,EAAa,cAAc;;;AC1W3B,IAAasC,IAAkBC,EAC9B,SAAyB,EAAE,mBAAgB,GAAG,SAAM,GAAG,SAAM,KAAK,SAAM,GAAGnC,KAAS,GAAK;CACxF,OACC,kBAACiC,GAAD;EAAc,WAAU;EAClB;EACU;EACf,eAAe;EACV;EACA;EACC;EACN,UAAS;EACT,GAAIjC;CACJ,CAAA;AAEH,CACD;AAEA,EAAgB,cAAc;;;ACR9B,IAAaoC,IAAoD;CAChE,GAAGzE;CACH,mBAAmB;AACpB,GA8CM0E,KAA2C;CAChD,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;AACN,GAEMC,KAAuB,MACxB,CAACC,KAAcA,EAAW,WAAW,IAAU,CAAC,IAE7CA,EAAW,KAAK,MAClB,OAAOC,KAAa,WAEhB;CACN,OAAOA;CACP,OAAO,GAHOH,GAAiBG,MAAaA,EAG3B,GAAGA;AACrB,IAEMA,CACP;AAGF,SAASC,GACR,EACC,UAAUC,GACV,oBACA,eACA,qBACA,sBAAmB,SACnB,6BAA0B,IAC1B,wBACA,mBAAgB,QAChB,kBACA,SAAS3C,GACT,YACA,aACA,kBACA,MAAMD,GACN,GAAG6C,KAEJ,GACC;CACD,IAAM,EAAE,oBAAiB3G,EAAiB,GACpCiE,IAAOlD,EAAuB+C,GAAUI,CAAY,GACpDC,IAAUC,EAAWgC,GAA6BrC,CAAW,GAC7D6C,IAAoBC,EAAM,GAG1BC,IAAuBC,QAAcT,EAAoBC,CAAU,GAAG,CAACA,CAAU,CAAC,GAGlF,CAACS,GAAkBC,KAAuBC,EAC/CC,KAAmBL,EAAqB,EAAE,EAAE,SAAS,EACtD,GAGMM,IAAuBV,MAAuB,KAAA,GAC9CW,IAAmBD,IAAuBV,IAAqBM;CAErE,SAAgB;EACf,IAAMM,IAAU;GAAE,UAAUZ;GAAoB;GAAiB;EAAwB;EAgBzF,AAdCa,KACA,OAAOb,KAAuB,YAC9B,OAAOS,KAAoB,YAC3BT,EAAmB,KAAK,MAAM,MAC9BS,EAAgB,KAAK,MAAM,MAC3BT,MAAuBS,KAMvBK,IAAgB,iFAASF,CAAO,GAIhCC,MACC,OAAOF,KAAqB,YAAYA,EAAiB,KAAK,CAAC,CAAC,WAAW,MAM5EG,IAAgB,mFAASF,CAAO;CAElC,GAAG;EAACZ;EAAoBS;EAAiBI;EAAyBC;EAAeH;CAAgB,CAAC;CAGlG,IAAMI,KAAuB/C,GAC3B,MAA+B;EAC/B,AAAIgD,MAAgB,SACfN,KACJH,EAAoBS,CAAW,GAEhCC,IAAmBD,CAAW;CAC/B,GACA,CAACN,GAAsBO,CAAgB,CACxC,GAQMC,IAAmBb,QAEvB7G,EACC,oCACAW,EAAwBoD,CAAI,GAC5B4D,CACD,GACD,CAAC5D,GAAM4D,CAAa,CACrB,GAGMC,IAEL,kBAACvH,GAAD;EAAO,KAAI;EAAK,WAAU;EAA1B,UAAA,CACE,CAAC,CAACwH,KAAiB,kBAAC5H,GAAD;GAAO,SAASyG;GAAmB,WAAW1G,EAAG,+CAAA,WAAiE;GAAI,UAAA6H;EAAqB,CAAA,GAC/J,kBAAC7I,GAAD;GACC,OAAOmI;GACP,gBAAgB,MAAUI,GAAqB5F,CAAK;GACpD,UAAU2C,KAAY+C;GAHvB,UAAA,CAKC,kBAACpI,GAAD;IACC,IAAIyH;IACJ,cAAYmB,KAAiB5D,EAAQ;IACrC,gBAAc6D,KAAW,KAAA;IACzB,eAAerH,EAAoB,KAAKsD;IACxC,WAAW2D;IAEX,UAAA,kBAACxI,GAAD,EACC,aAAa6I,IACZ,kBAAC7H,GAAD;KAAM,KAAI;KAAO,MAAK;KAAU,MAAK;KAAY,YAAW;KAAQ,WAAU;KAC5E,UAAA6H;IACI,CAAA,IACH,KAAA,EACJ,CAAA;GACoB,CAAA,GACtB,kBAAC9G,IAAD,EAAA,UACC,kBAACC,IAAD,EAAA,UACE0F,EAAqB,KAAK,MAC1B,kBAACvF,GAAD;IAAkC,OAAO2G,EAAK;IAAa;IAC1D,UAAA,kBAAC9H,GAAD;KAAM,KAAI;KAAO,MAAK;KAAU,YAAW;KAAQ,WAAU;KAC3D,UAAA8H,EAAK;IACD,CAAA;GACU,GAJKA,EAAK,KAIV,CACjB,EACgB,CAAA,EACC,CAAA,CACN;EACT,CAAA,CAAA;;CAGR,OAGC,kBAAC,OAAD;EAAK,WAAWhI,EAAG,6BAA6B,6BAA6B;EAA7E,UAAA;GACEiI,MAAqB,WAAWL;GAEjC,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAAC7B,GAAD;KACC,KAAKH;KACC;KACN,eAAe;KACf,eAAe;KACL;KACD;KACT,SAAS;MAAE,WAAW3B,EAAQ;MAAW,WAAWA,EAAQ;KAAU;KACtE,GAAIwC;IACJ,CAAA;GACG,CAAA;GAEJwB,MAAqB,SAASL;EAC3B;;AAEP;AAIA,IAAaM,KAAgBC,EAAKlC,EAAiDM,EAAiB,CAAC;AACrG,GAAc,cAAc;;;ACnQ5B,IAAa6B,KAA8C;CAC1D,eAAe;CACf,mBAAmB;AACpB;AAEA,SAAgBC,GACf,GACA,GACC;CACD,OAAO,OAAO,QAAQC,CAAM,CAAC,CAAC,QAC5B,GAAQ,CAACC,GAAK5G,OAAW6G,EAAO,WAAW,IAAID,EAAI,IAAI5G,CAAK,GAC7D8G,CACD;AACD;;;ACoFA,IAAMC,KAAsC,CAAC,OAAO,KAAK;AAEzD,SAASC,GAAY,GAAgB;CACpC,IAAM3D,IAAM,OAAOrD,KAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,CAACqD,GAAK,OAAO;CACjB,IAAM4D,IAAS,OAAO,WAAW5D,EAAI,QAAQ,KAAK,GAAG,CAAC;CACtD,OAAO,OAAO,SAAS4D,CAAM,IAAIA,IAAS;AAC3C;AAEA,SAASC,EAAiB,GAAgB;CACzC,OAAO,OAAOlH,KAAU,WAAWA,EAAM,KAAK,IAAI;AACnD;AAEA,SAASmH,GAAoB,GAAuC;CACnE,OAAO,OAAOC,KAAW,WAAWA,IAASA,EAAO;AACrD;AAEA,IAAaC,KAAa/C,EAA8C,SACvE,EACC,UAAUO,GACV,oBACA,eACA,qBACA,iBACA,UACA,UACA,SACA,eACA,UACA,aACA,YACA,gBAAgByC,GAChB,2BAAuB,IACvB,6BACA,sBAAmB,IACnB,mBACA,qBACA,SAASpF,GACT,cACA,aACA,UACA,iBACA,GAAGC,MAEJ,GACC;CACD,IAAMoF,IAAcnJ,EAAe,GAC7BkE,IAAUC,EAAWkE,IAA0BvE,CAAW,GAC1DsF,IAA0BlC,KAC5BiC,EAAY,mBACZ,OACE,CAACpC,GAAkBC,KAAuBC,EAASmC,CAAuB,GAC1EC,IAAiB5C,KAAsBM,GACvC1C,IAAWiF,EAAgC,IAAI,GAE/CC,KAAsBzC,QAAc;EACzC,IAAM0C,IAASlD,GAAY,SACxBA,IACA,CAAC8C,GAAyB,GAAGT,EAAmB,GAC7Cc,oBAAS,IAAI,IAA2C;EAC9D,KAAK,IAAMT,KAAUQ,GAAQ;GAC5B,IAAME,IAAcX,GAAoBC,CAAM;GAC9C,AAAKS,EAAO,IAAIC,CAAW,KAAGD,EAAO,IAAIC,GAAaV,CAAM;EAC7D;EACA,IAAMW,IAAU,MAAM,KAAKF,EAAO,OAAO,CAAC;EAC1C,OAAOA,EAAO,IAAIJ,CAAc,IAAIM,IAAU,CAACN,GAAgB,GAAGM,CAAO;CAC1E,GAAG;EAACN;EAAgB/C;EAAY8C;CAAuB,CAAC,GAClDQ,IAAiBV,KAAsBW,GAAO,kBAAkB,KAAA,GAChEC,IAAoBC,IACvBjB,EAAiBe,GAAO,MAAM,SAAS,IACvC,IACGG,IAAc,GACnBJ,KACGP,KACAO,MAAmBP,IAEjBY,IAAYlC,KAAW,EAAQmC,GAE/BC,IAAY1F,GAAa,MAAkC;EAEhE,AADA,EAAS,UAAUmB,GACf,OAAOC,KAAiB,aAAYA,EAAaD,CAAI,IAChDC,MAAc,EAAa,UAAUD;CAC/C,GAAG,CAACC,CAAY,CAAC,GAEXuE,IAAqB3F,GAAa,MAAyC;EAEhF,AADAI,IAAWW,CAAK,GAChB6E,IAAe;GACd,QAAQzB,GAAYpD,EAAM,OAAO,KAAK;GACtC,UAAU6D;EACX,CAAC;CACF,GAAG;EAACA;EAAgBxE;EAAUwF;CAAY,CAAC,GAErC7C,KAAuB/C,GAAa,MAA+B;EAGxE,AAFIgC,MAAuB,KAAA,KAAWO,EAAoBsD,CAAY,GACtE5C,IAAmB4C,CAAY,GAC/BD,IAAe;GACd,QAAQzB,GAAYvE,EAAS,SAAS,SAASzC,KAAS2I,CAAY;GACpE,UAAUD;EACX,CAAC;CACF,GAAG;EAAC7D;EAAoB8D;EAAcF;EAAc3C;EAAkB9F;CAAK,CAAC,GAEtE4I,IACL,kBAACrC,IAAD;EACC,GAAIpE;EACJ,KAAKoG;EACE;EACO;EACd,UAAUd;EACV,YAAYE;EACZ,UAAUa;EACV,kBAAkB5C;EAClB,SAASyC;EACC;EACV,iBAAeQ,IAAW,KAAO1G,GAAM;EACvC,SAAS2G;EACT,WAAWC;CACX,CAAA,GAEIC,KAAiB,GAAQC,KAASC,KAAQC,KAAcb,KAASO;CAEvE,OACC,kBAACnK,GAAD;EAAO,KAAI;EAAK,WAAWL,EAAG,0BAA0B6F,CAAS;EAAjE,UAAA,CAGC,kBAACxF,GAAD;GAAO,KAAI;GAAK,WAAU;GAA1B,UAAA,CACEsK,KACA,kBAAC5J,GAAD;IACQ;IACD;IACM;IACL;IACG;IAET,UAAAwJ;GACS,CAAA,IACRA,GAEH,CAAC,CAACV,KAAqB,CAACI,KACxB,kBAAC/J,GAAD;IAAM,KAAI;IAAI,MAAK;IAAK,MAAK;IAAY,WAAU;IACjD,UAAAmI,GAA4BpE,EAAQ,eAAe,EAAE,OAAO4F,EAAkB,CAAC;GAC3E,CAAA,CAED;EAEN,CAAA,GAAA,CAAC,CAACE,KAAegB,MACjB,kBAACxK,GAAD;GAAO,MAAK;GAAU,WAAU;GAAhC,UAAA,CACC,kBAACyK,GAAD,EAAe,eAAY,OAAQ,CAAA,GACnC,kBAAC1K,GAAD,EAAA,UACE2K,MAA2B5C,GAC3BpE,EAAQ,mBACR;IAAE,MAAM0F,KAAkB;IAAI,IAAIP;GAAe,CAClD,EACiB,CAAA,CACZ;EAEF,CAAA,CAAA;;AAET,CAAC;AAED,GAAW,cAAc;;;ACjPzB,IAAM8B,KAAgC;CAAC;CAAS;CAAW;AAAM,GAG3DC,KAAoD;CACzD,OAAO;CACP,SAAS;CACT,MAAM;AACP,GAEaC,KAAqBnF,EAAuD,SAA4B,GAAU,GAAK;CACnI,IAAMoF,IAAa,OAAO,UAAU,eAAe,KAAKC,GAAU,OAAO,GACnE,EAAE,UAAO,kBAAe,WAAQ,gBAAa,cAAW,GAAGxH,MAAUwH,GACrE5B,IAAU7C,QAEdqE,GAAc,KAAK,OAAU;EAC5B,OAAOzI;EACP,OAAO8I,IAAS9I,MAAS0I,GAA0B1I,MAASA;CAC7D,EAAE,GACH,CAAC8I,CAAM,CACR,GAEMhH,IAAeC,GACnB,MAA6B;EAC7B,IAAgB3B,CAAgC;CACjD,GACA,CAAC2I,CAAa,CACf;CAEA,OAAO,kBAACrM,GAAD;EAAa;EAAK,WAAWa,EAAG,mCAAmC6F,CAAS;EAAY;EAAS,GAAKwF,IAAa,EAAE,SAAM,IAAI,CAAC;EAAI,eAAe9G;EAA2B;EAAa,GAAIT;CAAQ,CAAA;AAC/M,CAAC;AAED,GAAmB,cAAc;;;AClBjC,IAAa2H,KAAwD;CACnE,OAAO;CACP,QAAQ;CACR,OAAO;CACP,MAAM;CACN,kBAAkB;CAClB,mBAAmB;CACnB,kBAAkB;AACpB,GAmFMrM,KAAe;CACpB;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAK,OAAO;CAAI;CACzB;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAM,OAAO;CAAK;AAC5B,GAEMuM,MACJ,GACA,MACqD;CACrD,IAAI,CAAChK,GACH,OAAO;EAAE,OAAO;EAAI,QAAQ;EAAI,OAAO;CAAG;CAG5C,IAAIiK,MAAW,YAAY,OAAOjK,KAAU,UAAU;EACpD,IAAMI,IAAQJ,EAAM,MAAM,GAAG,CAAC,CAAC,KAAK,MAAMkK,EAAE,KAAK,CAAC;EAClD,OAAO;GACL,OAAO9J,EAAM,MAAM;GACnB,QAAQA,EAAM,MAAM;GACpB,OAAOA,EAAM,MAAM;EACrB;CACF;CAUA,OARI6J,MAAW,YAAY,OAAOjK,KAAU,WACnC;EACL,OAAOA,EAAM,SAAS;EACtB,QAAQA,EAAM,UAAU;EACxB,OAAOA,EAAM,SAAS;CACxB,IAGK;EAAE,OAAO;EAAI,QAAQ;EAAI,OAAO;CAAG;AAC5C,GAEMmK,MACJ,GACA,GACA,GACA,MAEIF,MAAW,WACN,GAAGG,EAAM,GAAGC,EAAO,GAAGC,MAExB;CAAE;CAAO;CAAQ;AAAM,GAGnBC,KAAkB7M,EAAM,WAAiD,SAAyB,EAC7G,OAAOsE,GACP,iBACA,YAAS,UACT,MAAMwI,GACP,iBAAc,MACb,eACA,gBACA,eACA,cACA,oBACA,qBACA,sBACA,qBACA,aACA,iBACA,mBAAgB,GAChB,SAAM,GACN,QACA,sBAAmB,IACnB,yBAAsB,IACtB,YAAS,cACT,YACA,cAAW,IACX,cACA,MAAMvI,IACN,SAASC,KACc,GAAK;CAC5B,IAAM,EAAE,oBAAiB/D,EAAiB,GACpCiE,IAAOlD,EAAuB+C,IAAUI,CAAY,GACpDC,IAAUC,EAAWuH,IAA+B5H,CAAW,GAC/DuI,KAAqBC,KAAcpI,EAAQ,OAC3CqI,IAAsBC,KAAetI,EAAQ,QAC7CuI,KAAqBC,KAAcxI,EAAQ,OAC3CyI,KAA0BC,KAAmB1I,EAAQ,MACrD2I,KAA2BC,KAAoB5I,EAAQ,kBACvD6I,KAA4BC,KAAqB9I,EAAQ,mBACzD+I,KAA2BC,KAAoBhJ,EAAQ,kBACvDiJ,KAAyBC,MAAW,cACpCC,IAA2BD,MAAW,YACtCE,KAAyBC,MAAqB,IAC9CC,MAAgBC,KAAa,GAAA,CAAI,SAAS,GAC1CC,KAAkBL,IAA2BhB,KAAqB,IAClEsB,KAAmBN,IAA2Bd,IAAsB,IACpEqB,KAAkBP,IAA2BZ,KAAqB,IAClEoB,KAAUjH,EAAM,GAChBkH,IAAM;EAAE,OAAO,GAAGD,GAAQ;EAAS,QAAQ,GAAGA,GAAQ;EAAU,OAAO,GAAGA,GAAQ;EAAS,MAAM,GAAGA,GAAQ;CAAO,GAEnHE,KAAkB9N,EAAG,gBAAgB+N,CAAkB,GAGvDC,IAAoBrK,MAAoB,KAAA,GACxCsK,KAAmB9B,MAAmB,KAAA,GAGtC+B,KAAgBvC,GACpBqC,IAAoBrK,IAAkB2G,GACtCsB,CACF,GAGM,CAACuC,IAAeC,MAAoBpH,EAASkH,GAAc,KAAK,GAChE,CAACG,IAAgBC,MAAqBtH,EAASkH,GAAc,MAAM,GACnE,CAACK,IAAeC,MAAoBxH,EAASkH,GAAc,KAAK,GAChE,CAACO,IAAcC,MAAmB1H,EAASmF,KAAkBwC,CAAW,GAGxEC,KAAcjD,GAAoBhI,GAAiBiI,CAAM,GACzDiD,KAAab,IAAoBY,GAAY,QAAQT,IACrDW,KAAcd,IAAoBY,GAAY,SAASP,IACvDU,KAAaf,IAAoBY,GAAY,QAAQL,IACrDS,KAAYf,KAAmB9B,IAAiBsC;CAGtD,SAAgB;EACd,IAAIT,GAAmB;GACrB,IAAMpF,IAAS+C,GAAoBhI,GAAiBiI,CAAM;GAG1D,AAFAwC,GAAiBxF,EAAO,KAAK,GAC7B0F,GAAkB1F,EAAO,MAAM,GAC/B4F,GAAiB5F,EAAO,KAAK;EAC/B;CACF,GAAG;EAACjF;EAAiBiI;EAAQoC;CAAiB,CAAC;CAG/C,IAAMiB,KAAwBzK,GAC3B,GAAyC,MAAqB;EAC7D,IAAI0K,IAAeL,IACfM,IAAgBL,IAChBM,IAAeL;EAMnB,AAJIM,MAAc,YAAS,IAAe5K,IACtC4K,MAAc,aAAU,IAAgB5K,IACxC4K,MAAc,YAAS,IAAe5K,IAErCuJ,MACHI,GAAiBc,CAAY,GAC7BZ,GAAkBa,CAAa,GAC/BX,GAAiBY,CAAY;EAG/B,IAAME,IAAiBxD,GAAqBoD,GAAcC,GAAeC,GAAcxD,CAAM;EAC7F,IAAW,EAAE,QAAQ,EAAE,OAAO0D,EAAe,EAAE,CAAC;CAClD,GACA;EAACT;EAAYC;EAAaC;EAAYf;EAAmBpC;EAAQhH;CAAQ,CAC3E,GAEM2K,KAAmB/K,GACtB,MAA2B;EAC1B,IAAIgL,MAAY,MAAM;EACzB,IAAMC,IAAYD;EAIf,AAHKvB,MACHS,GAAgBe,CAAS,GAE3BC,IAAeD,CAAS;CAC1B,GACA,CAACxB,IAAkByB,CAAY,CACjC,GAEKC,KACL,kBAACtP,GAAD;EAAO,KAAI;EAAX,UAAA,CACK,CAAC,CAACkN,MAAgBH,KAA4B,kBAACnN,GAAD;GAAO,SAAS4N,EAAI;GAAM,WAAWC;GAAkB,UAAAN;EAAiB,CAAA,GACvH,kBAAClO,GAAD;GACE,OAAO0P;GACP,gBAAgB,MAAUO,GAAiB5N,CAAK;GAChD,UAAU2C,KAAYsL;GAHxB,UAAA,CAKE,kBAACrQ,GAAD;IACE,IAAIsO,EAAI;IACR,cAAYL,KAAavJ,EAAQ;IACjC,gBAAc6D,KAAW,KAAA;IACzB,eAAerH,EAAoB,KAAKsD;IACxC,WAAW/D,EACTW,EAAwBoD,CAAI,GAC5BoJ,MAAW,aACP,WACA,kCACN;IAEA,UAAA,kBAAC3N,GAAD,EACE,aACE,kBAACU,GAAD;KAAM,KAAI;KAAO,MAAK;KAAU,MAAK;KAAY,YAAW;KAAQ,WAAU;KAC3E,UAAAwM;IACG,CAAA,EAET,CAAA;GACmB,CAAA,GACtB,kBAACzL,IAAD,EAAA,UACE,kBAACC,IAAD,EAAA,UACG9B,GAAa,KAAK,MACjB,kBAACiC,GAAD;IAAkC,OAAOwO,EAAK;IAAa;IACzD,UAAA,kBAAC3P,GAAD;KAAM,KAAI;KAAO,MAAK;KAAU,YAAW;KAAQ,WAAU;KAC1D,UAAA2P,EAAK;IACF,CAAA;GACS,GAJKA,EAAK,KAIV,CAClB,EACe,CAAA,EACA,CAAA,CACP;EACZ,CAAA,CAAA;;CAGP,OACA,kBAACxP,GAAD;EAAY;EAAK,KAAI;EAAK,WAAWL,EAAG,2DAA2D6F,CAAS;EAE3G,UAAA,kBAACxF,GAAD;GACC,WAAW8M,MAAW,aAAa,aAAa;GAChD,KAAI;GACJ,OAAOA,MAAW,aAAa,YAAY;GAC3C,WAAU;GAJX,UAAA;IAOC,kBAAC9M,GAAD;KAAO,KAAI;KAAK,WAAU;KAA1B,UAAA;MACO,CAAC,CAAC+M,KAA4B,CAAC,CAACK,MAAmB,kBAACxN,GAAD;OAAO,SAAS4N,EAAI;OAAO,WAAWC;OAAkB,UAAAL;MAAuB,CAAA;MACnI,kBAAC1H,GAAD;OACE,IAAI8H,EAAI;OACF;OACN,OAAOgB;OACP,WAAW,MAAMI,GAAsB,SAAS,EAAE,OAAO,KAAK;OAC9D,aAAarC;OACE;OACV;OACA;OACK;OACD;OACT,cAAYR;MACb,CAAA;MACA,CAAC,CAACc,MACD,kBAAChN,GAAD;OAAM,MAAK;OAAK,MAAK;OAAY,WAAU;OACxC,UAAAkM;MACG,CAAA;KAEP;;IAGFe,MAAW,gBAEV,kBAAC,OAAD;KAAK,eAAY;KAAO,WAAWnN,EAAG,iDAAiDuB,EAA0BwC,EAAK;KACpH,UAAA,kBAAC7D,GAAD;MAAM,KAAI;MAAO,MAAK;MAAY,UAAA;KAAO,CAAA;IACtC,CAAA;IAIX,kBAACG,GAAD;KAAO,KAAI;KAAK,WAAU;KAA1B,UAAA;MACO,CAAC,CAAC+M,KAA4B,CAAC,CAACM,MAAoB,kBAACzN,GAAD;OAAO,SAAS4N,EAAI;OAAQ,WAAWC;OAAkB,UAAAJ;MAAwB,CAAA;MACtI,kBAAC3H,GAAD;OACE,IAAI8H,EAAI;OACF;OACN,OAAOiB;OACP,WAAW,MAAMG,GAAsB,UAAU,EAAE,OAAO,KAAK;OAC/D,aAAanC;OACE;OACV;OACA;OACK;OACD;OACT,cAAYR;MACb,CAAA;MACA,CAAC,CAACY,MACD,kBAAChN,GAAD;OAAM,MAAK;OAAK,MAAK;OAAY,WAAU;OACxC,UAAAoM;MACG,CAAA;KAEP;;IAGFa,MAAW,gBAEV,kBAAC,OAAD;KAAK,eAAY;KAAO,WAAWnN,EAAG,iDAAiDuB,EAA0BwC,EAAK;KACpH,UAAA,kBAAC7D,GAAD;MAAM,KAAI;MAAO,MAAK;MAAY,UAAA;KAAO,CAAA;IACtC,CAAA;IAIX,kBAACG,GAAD;KAAO,KAAI;KAAK,WAAU;KAA1B,UAAA;MACO,CAAC,CAAC+M,KAA4B,CAAC,CAACO,MAAmB,kBAAC1N,GAAD;OAAO,SAAS4N,EAAI;OAAO,WAAWC;OAAkB,UAAAH;MAAuB,CAAA;MACnI,kBAAC5H,GAAD;OACE,IAAI8H,EAAI;OACF;OACN,OAAOkB;OACP,WAAW,MAAME,GAAsB,SAAS,EAAE,OAAO,KAAK;OAC9D,aAAajC;OACE;OACV;OACA;OACK;OACD;OACT,cAAYR;MACb,CAAA;MACA,CAAC,CAACU,MACD,kBAAChN,GAAD;OAAM,MAAK;OAAK,MAAK;OAAY,WAAU;OACxC,UAAAsM;MACG,CAAA;KAEP;;IAGF,CAAC,CAACa,MACD,kBAAChN,GAAD;KAAO,KAAI;KACT,WAAWL,EACT,0BACAmN,MAAW,aACP,WACA,8GACN;KANF,UAAA,CAQGwC,IACA,CAAC,CAACzC,MACD,kBAAChN,GAAD;MAAM,MAAK;MAAK,MAAK;MAAY,WAAU;MACxC,UAAAqN,KAAeC,IAAYd;KACxB,CAAA,CAEH;;GAEP;;CACD,CAAA;AAET,CAAC;AAED,GAAgB,cAAc;;;AC3a9B,IAAaoD,IAAgD;CAC3D,WAAW;CACX,eAAe;CACf,iBAAiB;AACnB,GAuDMC,KAA4D;CAChE;EAAE,OAAO;EAAK,OAAO;CAAI;CACzB;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAM,OAAO;CAAK;CAC3B;EAAE,OAAO;EAAM,OAAO;CAAK;AAC7B,GAEaC,IAAcvQ,EAAM,WAA6C,SAAqB,EACjG,OAAOkE,GACP,iBACA,MAAMwI,GACN,iBAAc,KACd,aACA,iBACA,mBAAgB,GAChB,SAAM,GACN,QACA,sBAAmB,IACnB,yBAAsB,IACtB,eAAY,QACZ,SAAStI,GACT,YACA,cAAW,IACX,MAAMD,GACN,iBACmB,GAAK;CACxB,IAAM,EAAE,oBAAiB9D,EAAiB,GACpCiE,IAAOlD,EAAuB+C,GAAUI,CAAY,GACpDC,IAAUC,EAAW4L,GAA2BjM,CAAW,GAC3DmK,IAAoBrK,MAAoB,KAAA,GACxCsK,IAAmB9B,MAAmB,KAAA,GAEtC,CAAC8D,GAAeC,KAAoBlJ,EAASsD,KAAgB,EAAE,GAC/D,CAACmE,GAAcC,MAAmB1H,EAAqBmF,KAAkBwC,CAAW,GAEpFhN,IAAQqM,IAAoBrK,KAAmB,KAAKsM,GACpDJ,IAAO5B,IAAmB9B,KAAkBwC,IAAcF,GAE1D0B,IAAoB3L,GACvB,MAA2C;EAI1C,AAHKwJ,KACHkC,EAAiB,EAAE,OAAO,KAAK,GAEjCtL,IAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;CAClD,GACA,CAACoJ,GAAmBpJ,CAAQ,CAC9B,GAEM2K,IAAmB/K,GACtB,MAA4B;EAC3B,IAAI4L,MAAa,MAAM;EACvB,IAAMC,IAAaD;EAInB,AAHKnC,KACHS,GAAgB2B,CAAU,GAE5BX,IAAeW,CAAU;CAC3B,GACA,CAACpC,GAAkByB,CAAY,CACjC,GAEMY,IAAczJ,QAAckJ,IAAc,CAAC,CAAC,GAC5CxC,KAAetJ,EAAQ,cAAc,IACrCsM,IAAgB5J,EAAM;CAE5B,OAEE,kBAAC,OAAD;EAAU;EAAK,WAAW3G,EAAG,2BAA2B,+BAA+B6F,EAAS;EAAhG,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAACE,GAAD;IACQ;IACC;IACP,UAAUoK;IACK;IACf,eAAe;IACV;IACA;IACK;IACD;GACV,CAAA;EACE,CAAA,GACJ,CAAC,CAAC7C,KACL,kBAACjN,GAAD;GAAO,KAAI;GAAX,UAAA,CACO,CAAC,CAACkN,MAAgB,kBAACtN,GAAD;IAAO,SAASsQ;IAAe,WAAWvQ,EAAG,gBAAA,WAAkC;IAAI,UAAAiE,EAAQ;GAAiB,CAAA,GAC/H,kBAACvE,GAAD;IAAe,OAAOmQ;IAAM,gBAAgB,MAAUN,EAAiB5N,CAAK;IAAG,UAAU2C,KAAYsL;IAArG,UAAA,CACF,kBAACjQ,GAAD;KACE,IAAI4Q;KACJ,cAAYtM,EAAQ,aAAaA,EAAQ;KACzC,gBAAc6D,KAAW,KAAA;KACzB,eAAerH,EAAoB,KAAKsD;KACpC,WAAW/D,EACTW,EAAwBoD,CAAI,GAC5ByM,CACF;KAEA,UAAA,kBAAC5Q,GAAD,EACE,aAAaqE,EAAQ,kBACnB,kBAAC/D,GAAD;MAAM,KAAI;MAAO,MAAK;MAAU,MAAK;MAAY,YAAW;MAAQ,WAAU;MAC3E,UAAA+D,EAAQ;KACL,CAAA,IACJ,KAAA,EACL,CAAA;IACmB,CAAA,GACtB,kBAAChD,IAAD,EAAA,UACE,kBAACC,IAAD,EAAA,UACGoP,EAAY,KAAK,MAChB,kBAACjP,GAAD;KAAoC,OAAO0H,EAAO;KAAa;KAC7D,UAAA,kBAAC7I,GAAD;MAAM,KAAI;MAAO,MAAK;MAAU,YAAW;MAAQ,WAAU;MAC1D,UAAA6I,EAAO;KACJ,CAAA;IACS,GAJKA,EAAO,KAIZ,CAClB,EACe,CAAA,EACA,CAAA,CACP;GACd,CAAA,CAAA;EAEF,CAAA,CAAA;;AAET,CAAC;AAED,EAAY,cAAc;;;AC7K1B,IAAa0H,KAA0D;CACrE,UAAU;CACV,UAAU;CACV,gBAAgB;CAChB,gBAAgB;CAChB,kBAAkB;AACpB,GAqCMC,MACJ,GACA,MACiC;CACjC,IAAI,CAAC/O,GACH,OAAO;EAAE,KAAK;EAAI,KAAK;CAAG;CAG5B,IAAIiK,MAAW,YAAY,OAAOjK,KAAU,UAAU;EACpD,IAAM,CAACgP,GAAKC,KAAOjP,EAAM,MAAM,GAAG,CAAC,CAAC,KAAK,MAASkP,EAAK,KAAK,CAAC;EAC7D,OAAO;GAAE,KAAKF,KAAO;GAAI,KAAKC,KAAO;EAAG;CAC1C;CAMA,OAJIhF,MAAW,YAAY,OAAOjK,KAAU,WACnC;EAAE,KAAKA,EAAM,OAAO;EAAI,KAAKA,EAAM,OAAO;CAAG,IAG/C;EAAE,KAAK;EAAI,KAAK;CAAG;AAC5B,GAEMmP,MAAe,GAAa,GAAa,MACzClF,MAAW,WACN,GAAG+E,EAAI,GAAGC,MAEZ;CAAE;CAAK;AAAI,GAGdG,MAAyB,GAAe,GAAa,MAAyB;CAClF,IAAI,CAACpP,GAAO,OAAO;CACnB,IAAMsD,IAAM,OAAOtD,CAAK;CACxB,OAAO,OAAO,SAASsD,CAAG,KAAKA,KAAO9C,KAAO8C,KAAO7C;AACtD,GAEa4O,KAAmBnR,EAAM,WAAkD,SAA0B,EAChH,OAAO8D,GACP,iBACA,YAAS,UACT,aACA,mBAAgB,GAChB,qBAAkB,IAClB,SAASE,GACT,YACA,cACA,aACA,WACwB,GAAK;CAC7B,IAAMI,IAAUC,EAAWuM,IAAgC5M,CAAW,GAChEoN,IAAetN,MAAoB,KAAA,GAEnCuK,IAAgBwC,GAAWO,IAAetN,IAAkB2G,GAAcsB,CAAM,GAChF,CAACsF,IAAaC,MAAkBnK,EAASkH,EAAc,GAAG,GAC1D,CAACkD,GAAaC,KAAkBrK,EAASkH,EAAc,GAAG,GAE1DoD,IAAmBZ,GAAW/M,GAAiBiI,CAAM,GACrD+E,IAAMM,IAAeK,EAAiB,MAAMJ,IAC5CN,IAAMK,IAAeK,EAAiB,MAAMF;CAElD,SAAgB;EACd,AAAIH,MACFE,GAAeG,EAAiB,GAAG,GACnCD,EAAeC,EAAiB,GAAG;CAEvC,GAAG;EAACL;EAAcK,EAAiB;EAAKA,EAAiB;CAAG,CAAC;CAE7D,IAAMC,IAAS/M,GACZ,GAAiB,MAAoB;EAMpC,AALKyM,MACHE,GAAeK,CAAO,GACtBH,EAAeI,CAAO,IAGxB7M,IAAW,EAAE,QAAQ,EAAE,OAAOkM,GAAYU,GAASC,GAAS7F,CAAM,EAAE,EAAE,CAAC;CACzE,GACA;EAACqF;EAAcrM;EAAUgH;CAAM,CACjC,GAEM8F,IAAS7K,QAAc;EAC3B,IAAM8K,IAAcZ,GAAsBJ,GAAK,KAAK,EAAE,GAChDiB,IAAcb,GAAsBH,GAAK,MAAM,GAAG;EAExD,OADI,CAACe,KAAe,CAACC,IAAoB,OAClC,iCAAiC,mBAAmB,GAAGjB,EAAI,GAAGC,GAAK;CAC5E,GAAG,CAACD,GAAKC,CAAG,CAAC;CAEb,OACE,kBAACvQ,GAAD;EAAY;EAAK,KAAI;EAAK,WAAWL,EAAG,gCAAgC6F,CAAS;EAAjF,UAAA,CACE,kBAACzF,GAAD;GAAM,SAAS;IAAE,MAAM;IAAG,IAAI;GAAE;GAAG,KAAI;GAAvC,UAAA,CACE,kBAACW,GAAD;IAAW,OAAOkD,EAAQ,YAAY,KAAA;IACpC,UAAA,kBAAC8B,GAAD;KACE,aAAa9B,EAAQ,kBAAkB,KAAA;KACvC,OAAO0M;KACP,WAAW,MAAMY,EAAO,EAAE,OAAO,OAAOX,CAAG;KAC5B;KACf,eAAA;KACA,KAAK;KACL,KAAK;KACI;KACC;KACJ;IACP,CAAA;GACQ,CAAA,GACX,kBAAC7P,GAAD;IAAW,OAAOkD,EAAQ,YAAY,KAAA;IACpC,UAAA,kBAAC8B,GAAD;KACE,aAAa9B,EAAQ,kBAAkB,KAAA;KACvC,OAAO2M;KACP,WAAW,MAAMW,EAAOZ,GAAK,EAAE,OAAO,KAAK;KAC5B;KACf,eAAA;KACA,KAAK;KACL,KAAK;KACI;KACC;KACJ;IACP,CAAA;GACQ,CAAA,CACP;EAEL,CAAA,GAAA,CAAC,CAACkB,KAAmB,CAAC,CAACH,KAAU,CAAC,CAACzN,EAAQ,oBAC1C,kBAAC9D,GAAD;GAAU,MAAMuR;GAAQ,MAAK;GAAY,WAAW;GACjD,UAAAzN,EAAQ;EACD,CAAA,CAEP;;AAEX,CAAC;AAED,GAAiB,cAAc"}