themelia-react-ui 1.0.1 → 2.0.0

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 (640) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/README.md +67 -16
  3. package/dist/{accordion-B-5Focs8.js → accordion-CQXVcd7Q.js} +15 -15
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CCIXb2A1.js +68 -0
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-2PQ2fItc.js} +206 -215
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-BE_j8-AT.js} +11 -10
  12. package/dist/app-shell-BE_j8-AT.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-q69dlt5Y.js} +14 -14
  14. package/dist/attachment-q69dlt5Y.js.map +1 -0
  15. package/dist/auth-M3vGMgDR.js +723 -0
  16. package/dist/auth-M3vGMgDR.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-djdaaQ_s.js} +15 -13
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +33 -35
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +246 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +94 -92
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +53 -53
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +84 -82
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +7 -7
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +228 -219
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +182 -212
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +665 -620
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +2 -2
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1439 -1553
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +88 -97
  84. package/dist/blocks/planning.js.map +1 -1
  85. package/dist/blocks/timelines.js +1 -1
  86. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BG_FfMK4.js} +10 -9
  87. package/dist/breadcrumbs-BG_FfMK4.js.map +1 -0
  88. package/dist/button-BS3KDg00.js +674 -0
  89. package/dist/button-BS3KDg00.js.map +1 -0
  90. package/dist/{button-BS6l5JUw.js → button-R9CCoH7A.js} +3 -3
  91. package/dist/button-R9CCoH7A.js.map +1 -0
  92. package/dist/buttons-DS0ZIwJ_.js +99 -0
  93. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  94. package/dist/{cards-Cum56XOF.js → cards-QoJ4syG9.js} +12 -12
  95. package/dist/{cards-Cum56XOF.js.map → cards-QoJ4syG9.js.map} +1 -1
  96. package/dist/chart-DwYRKKc-.js +152 -0
  97. package/dist/chart-DwYRKKc-.js.map +1 -0
  98. package/dist/checkbox-B7ygNTYp.js +35 -0
  99. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  100. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  101. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  102. package/dist/{code-block-xHKbAJDj.js → code-block-CD0B7M93.js} +27 -27
  103. package/dist/code-block-CD0B7M93.js.map +1 -0
  104. package/dist/{collapsible-DsnktFNv.js → collapsible-oMUGM4tr.js} +3 -3
  105. package/dist/{collapsible-DsnktFNv.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  106. package/dist/{collection-content-C4fthJV_.js → collection-content-Ys-OZOkY.js} +3 -3
  107. package/dist/{collection-content-C4fthJV_.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  108. package/dist/combobox-6dvVny2q.js +272 -0
  109. package/dist/combobox-6dvVny2q.js.map +1 -0
  110. package/dist/combobox-CB7039j7.js +865 -0
  111. package/dist/combobox-CB7039j7.js.map +1 -0
  112. package/dist/{command-C0xe7u9B.js → command-kPMPjIxJ.js} +35 -31
  113. package/dist/command-kPMPjIxJ.js.map +1 -0
  114. package/dist/{comments-DviPLnwy.js → comments-You0Bzbr.js} +434 -409
  115. package/dist/comments-You0Bzbr.js.map +1 -0
  116. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  118. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  119. package/dist/components/base/badge/badge.d.ts +1 -1
  120. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  121. package/dist/components/base/buttons/base-button.d.ts +7 -0
  122. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  123. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  124. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  125. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  126. package/dist/components/base/buttons/text-button.d.ts +2 -2
  127. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  128. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  129. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  130. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  131. package/dist/components/base/carousel/carousel.d.ts +3 -1
  132. package/dist/components/base/chart/chart.d.ts +7 -7
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  135. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  136. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  137. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  138. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  139. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  140. package/dist/components/base/date-pickers/datepicker.types.d.ts +16 -3
  141. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  142. package/dist/components/base/display/content-block.d.ts +4 -2
  143. package/dist/components/base/display/date-block.d.ts +1 -1
  144. package/dist/components/base/display/dialog.d.ts +12 -5
  145. package/dist/components/base/display/surface-title.d.ts +6 -1
  146. package/dist/components/base/feedback/alert.d.ts +1 -1
  147. package/dist/components/base/feedback/state-display.d.ts +5 -4
  148. package/dist/components/base/forms/form-field.d.ts +1 -0
  149. package/dist/components/base/forms/form-sizing.d.ts +35 -3
  150. package/dist/components/base/forms/workflow.d.ts +2 -0
  151. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  152. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  153. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  154. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  155. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  156. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  157. package/dist/components/base/navigation/tabs.d.ts +3 -5
  158. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  159. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  160. package/dist/components/base/sheet/index.d.ts +29 -1
  161. package/dist/components/base/sheet/sheet.d.ts +14 -5
  162. package/dist/components/base/spinner/spinner.d.ts +3 -2
  163. package/dist/components/base/structure/structure.types.d.ts +1 -1
  164. package/dist/components/base/table/index.d.ts +1 -1
  165. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  166. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  167. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  168. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  169. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  170. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  171. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  172. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  173. package/dist/components/blocks/analytics/index.d.ts +1 -1
  174. package/dist/components/blocks/analytics/types.d.ts +1 -1
  175. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  176. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  177. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  178. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  180. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  181. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  182. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  183. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  184. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  185. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  186. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  187. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  188. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  190. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  191. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  192. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  193. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  194. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  195. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  196. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  197. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  198. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  199. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  200. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  201. package/dist/components/features/media-library/media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  203. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  204. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  205. package/dist/components/features/overlays/drawer.d.ts +1 -1
  206. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  207. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  208. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  209. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  210. package/dist/components/features/overlays/overlays.types.d.ts +46 -22
  211. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  212. package/dist/components/features/products/partials/index.d.ts +1 -1
  213. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  214. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  215. package/dist/components/features/products/products.types.d.ts +2 -1
  216. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  217. package/dist/components/features/table/data-table.d.ts +1 -1
  218. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  219. package/dist/components/features/table/table.types.d.ts +1 -1
  220. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  221. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  222. package/dist/components/layout/page/index.d.ts +1 -1
  223. package/dist/components/layout/page/page.d.ts +0 -1
  224. package/dist/components/layout/page/page.types.d.ts +62 -6
  225. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  226. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  227. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  228. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  229. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  230. package/dist/components/primitives/date.d.ts +16 -3
  231. package/dist/components/primitives/dimensions.d.ts +6 -0
  232. package/dist/components/primitives/duration.d.ts +6 -0
  233. package/dist/components/primitives/file-size.d.ts +6 -0
  234. package/dist/components/primitives/index.d.ts +1 -1
  235. package/dist/components/primitives/initials.d.ts +11 -2
  236. package/dist/components/primitives/link.d.ts +7 -0
  237. package/dist/components/primitives/money.d.ts +29 -7
  238. package/dist/components/primitives/number.d.ts +17 -0
  239. package/dist/components/primitives/value-typography.d.ts +54 -0
  240. package/dist/components/primitives/value.d.ts +31 -6
  241. package/dist/components/typography/heading.d.ts +13 -2
  242. package/dist/components/typography/index.d.ts +1 -1
  243. package/dist/components/typography/label.d.ts +3 -0
  244. package/dist/components/typography/running-text.d.ts +12 -0
  245. package/dist/components/typography/text-link.d.ts +23 -1
  246. package/dist/components/typography/text.d.ts +12 -0
  247. package/dist/components/typography/text.styles.d.ts +37 -5
  248. package/dist/components/ui/button.d.ts +1 -1
  249. package/dist/components/ui/checkbox.d.ts +5 -0
  250. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  251. package/dist/components/ui/popover.d.ts +1 -1
  252. package/dist/components/ui/select.d.ts +3 -1
  253. package/dist/components/ui/sidebar.d.ts +1 -1
  254. package/dist/components/ui/switch.d.ts +5 -0
  255. package/dist/components/ui/table.d.ts +2 -1
  256. package/dist/container.recipes-D9t8MHR3.js +27 -0
  257. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  258. package/dist/{containers-6s-ucRQQ.js → containers-D_L4mTVb.js} +34 -57
  259. package/dist/containers-D_L4mTVb.js.map +1 -0
  260. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  261. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  262. package/dist/{copyable-B7SBXJMr.js → copyable-DDjTeW_j.js} +6 -6
  263. package/dist/{copyable-B7SBXJMr.js.map → copyable-DDjTeW_j.js.map} +1 -1
  264. package/dist/data-display-3xWQUnMA.js +1335 -0
  265. package/dist/data-display-3xWQUnMA.js.map +1 -0
  266. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  267. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  268. package/dist/date-pickers-CnFCb0n2.js +174 -0
  269. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  270. package/dist/date-uf3z37Nm.js +144 -0
  271. package/dist/date-uf3z37Nm.js.map +1 -0
  272. package/dist/{display-CFM5myut.js → display-DrdvPwF0.js} +25 -25
  273. package/dist/display-DrdvPwF0.js.map +1 -0
  274. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-CURh59jb.js} +22 -15
  275. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  276. package/dist/features/activities.js +177 -163
  277. package/dist/features/activities.js.map +1 -1
  278. package/dist/features/ai-chat.js +187 -183
  279. package/dist/features/ai-chat.js.map +1 -1
  280. package/dist/features/async-preview.js +9 -9
  281. package/dist/features/async-preview.js.map +1 -1
  282. package/dist/features/combobox.js +1 -1
  283. package/dist/features/comments.js +1 -1
  284. package/dist/features/data-view.js +25 -23
  285. package/dist/features/data-view.js.map +1 -1
  286. package/dist/features/email-composer/engine.js +1 -1
  287. package/dist/features/email-composer.js +353 -355
  288. package/dist/features/email-composer.js.map +1 -1
  289. package/dist/features/event-calendar.js +346 -354
  290. package/dist/features/event-calendar.js.map +1 -1
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +225 -227
  293. package/dist/features/global-search.js.map +1 -1
  294. package/dist/features/kanban.js +29 -29
  295. package/dist/features/kanban.js.map +1 -1
  296. package/dist/features/map.js +59 -58
  297. package/dist/features/map.js.map +1 -1
  298. package/dist/features/media-library.js +898 -900
  299. package/dist/features/media-library.js.map +1 -1
  300. package/dist/features/mentions.js +1 -1
  301. package/dist/features/overlays.js +1 -1
  302. package/dist/features/products.js +1412 -1444
  303. package/dist/features/products.js.map +1 -1
  304. package/dist/features/questionnaire.js +51 -49
  305. package/dist/features/questionnaire.js.map +1 -1
  306. package/dist/features/resource-assignment.js +103 -97
  307. package/dist/features/resource-assignment.js.map +1 -1
  308. package/dist/features/resource.js +13 -13
  309. package/dist/features/resource.js.map +1 -1
  310. package/dist/features/rich-text-editor.js +2 -2
  311. package/dist/features/schema-form.js +187 -183
  312. package/dist/features/schema-form.js.map +1 -1
  313. package/dist/features/suggestions.js +3 -3
  314. package/dist/features/sync.js +7 -7
  315. package/dist/features/sync.js.map +1 -1
  316. package/dist/features/table.js +1 -1
  317. package/dist/features/theme-tweaker.js +508 -503
  318. package/dist/features/theme-tweaker.js.map +1 -1
  319. package/dist/{feedback-DWUkgEjR.js → feedback-C7nR0UtT.js} +30 -31
  320. package/dist/feedback-C7nR0UtT.js.map +1 -0
  321. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  322. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  323. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-C-MFBX_8.js} +5 -5
  324. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  325. package/dist/{filters-BhsUtsxW.js → filters-Da-gNPsE.js} +760 -765
  326. package/dist/filters-Da-gNPsE.js.map +1 -0
  327. package/dist/{form-field-Bn7ZH1rA.js → form-field-VZRULhUK.js} +20 -12
  328. package/dist/form-field-VZRULhUK.js.map +1 -0
  329. package/dist/form-sizing-uWP4lzVh.js +126 -0
  330. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  331. package/dist/{forms-B7pzS25o.js → forms-DDeEnXSY.js} +38 -38
  332. package/dist/forms-DDeEnXSY.js.map +1 -0
  333. package/dist/forms-numeric-D3CO60IF.js +905 -0
  334. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  335. package/dist/{header-C59QZyxV.js → header-2ycNqGOR.js} +42 -37
  336. package/dist/header-2ycNqGOR.js.map +1 -0
  337. package/dist/{hooks-CM1Vp9Pe.js → hooks-DQ5SPwZw.js} +2 -2
  338. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  339. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  340. package/dist/http-CdEIHyQf.js.map +1 -0
  341. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-DKlaKXoo.js} +4 -4
  342. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  343. package/dist/index.js +2 -2
  344. package/dist/input-BoLm9Hks.js +20 -0
  345. package/dist/input-BoLm9Hks.js.map +1 -0
  346. package/dist/input-DhQdBnV3.js +255 -0
  347. package/dist/input-DhQdBnV3.js.map +1 -0
  348. package/dist/item-xzh8Df65.js +264 -0
  349. package/dist/item-xzh8Df65.js.map +1 -0
  350. package/dist/layout/app-shell.js +1 -1
  351. package/dist/layout/auth.js +1 -1
  352. package/dist/layout/containers.js +1 -1
  353. package/dist/layout/header.js +1 -1
  354. package/dist/layout/hooks.js +1 -1
  355. package/dist/layout/navigation.js +1 -1
  356. package/dist/layout/page.js +1 -1
  357. package/dist/layout/settings.js +1 -1
  358. package/dist/layout/sidebar.js +2 -2
  359. package/dist/layout/workspace.js +1 -1
  360. package/dist/layout.js +10 -10
  361. package/dist/lib/affordance-geometry.generated.d.ts +46 -10
  362. package/dist/lib/control-group-recipes.d.ts +22 -0
  363. package/dist/lib/field-affordance-recipes.d.ts +70 -2
  364. package/dist/lib/field-state-recipes.d.ts +6 -4
  365. package/dist/lib/format.d.ts +9 -0
  366. package/dist/lib/money-format.d.ts +30 -0
  367. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  368. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -2
  369. package/dist/lib/surface-recipes.d.ts +13 -8
  370. package/dist/lib/token-merge.generated.d.ts +144 -2
  371. package/dist/lib/track-recipes.d.ts +1 -1
  372. package/dist/lib/ui-provider/provider.d.ts +7 -2
  373. package/dist/lib/ui-provider/store.d.ts +6 -2
  374. package/dist/lib/ui-provider/types.d.ts +9 -4
  375. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  376. package/dist/lib/utils.js +1 -1
  377. package/dist/media-gallery-DQUQ0m3O.js +201 -0
  378. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  379. package/dist/{mentions-B8Ko-fhS.js → mentions-DwnO1hh4.js} +40 -39
  380. package/dist/{mentions-B8Ko-fhS.js.map → mentions-DwnO1hh4.js.map} +1 -1
  381. package/dist/message-YfFmbXNP.js +127 -0
  382. package/dist/message-YfFmbXNP.js.map +1 -0
  383. package/dist/{navigation-BUIn2Qxx.js → navigation-Cbp5V8gG.js} +27 -28
  384. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  385. package/dist/navigation-Cs1npsPm.js +300 -0
  386. package/dist/navigation-Cs1npsPm.js.map +1 -0
  387. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DlU-4QYO.js} +3 -3
  388. package/dist/navigation-row-recipes-DlU-4QYO.js.map +1 -0
  389. package/dist/number-CKRBYmZK.js +352 -0
  390. package/dist/number-CKRBYmZK.js.map +1 -0
  391. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  392. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  393. package/dist/overlays-DhZO7N-I.js +994 -0
  394. package/dist/overlays-DhZO7N-I.js.map +1 -0
  395. package/dist/page-C6R_8jFt.js +325 -0
  396. package/dist/page-C6R_8jFt.js.map +1 -0
  397. package/dist/{page-header-DQRa0jug.js → page-header-hUTzcRZX.js} +12 -12
  398. package/dist/page-header-hUTzcRZX.js.map +1 -0
  399. package/dist/{pagination-C29vvt3I.js → pagination-Cm0jqa3I.js} +21 -21
  400. package/dist/pagination-Cm0jqa3I.js.map +1 -0
  401. package/dist/{popover-CoLDEg19.js → popover-Dcv_9jxr.js} +23 -22
  402. package/dist/popover-Dcv_9jxr.js.map +1 -0
  403. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-DnRFKnHP.js} +6 -6
  404. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  405. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-wmbvL8Ah.js} +5 -5
  406. package/dist/popover.recipes-wmbvL8Ah.js.map +1 -0
  407. package/dist/primitives-BHrwQXFC.js +379 -0
  408. package/dist/primitives-BHrwQXFC.js.map +1 -0
  409. package/dist/primitives.js +5 -5
  410. package/dist/{progress-BOe8l_FZ.js → progress-Br9WTFya.js} +12 -11
  411. package/dist/progress-Br9WTFya.js.map +1 -0
  412. package/dist/{receipt-BM8xsGFy.js → receipt-CV89q1fs.js} +8 -8
  413. package/dist/{receipt-BM8xsGFy.js.map → receipt-CV89q1fs.js.map} +1 -1
  414. package/dist/rich-text-editor-CF8QYt5p.js +574 -0
  415. package/dist/rich-text-editor-CF8QYt5p.js.map +1 -0
  416. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-CnrbmTS1.js} +35 -26
  417. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +1 -0
  418. package/dist/{rich-text-B7sBAdDG.js → rich-text-j-FGAeZW.js} +4 -4
  419. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  420. package/dist/{scroll-area-BheMQ270.js → scroll-area-DRdr16Pt.js} +3 -3
  421. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  422. package/dist/{separator-DO0EbCEm.js → separator-BMEvwnSX.js} +2 -2
  423. package/dist/{separator-DO0EbCEm.js.map → separator-BMEvwnSX.js.map} +1 -1
  424. package/dist/{separator-Gk_WXH-l.js → separator-Do5GWDYi.js} +4 -4
  425. package/dist/separator-Do5GWDYi.js.map +1 -0
  426. package/dist/services/actions/action-adapters.d.ts +4 -0
  427. package/dist/services/actions.js +8 -3
  428. package/dist/services/actions.js.map +1 -1
  429. package/dist/{settings-BnCyyPOJ.js → settings-DHk0L2MF.js} +20 -19
  430. package/dist/settings-DHk0L2MF.js.map +1 -0
  431. package/dist/sheet-DRFNY1_D.js +207 -0
  432. package/dist/sheet-DRFNY1_D.js.map +1 -0
  433. package/dist/sidebar-Cb8WzOvE.js +511 -0
  434. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  435. package/dist/{sidebar-DPR7fmqN.js → sidebar-Crc9M9JV.js} +220 -201
  436. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  437. package/dist/{skeleton-CmT1ppqb.js → skeleton-DVMXr15h.js} +5 -5
  438. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-DVMXr15h.js.map} +1 -1
  439. package/dist/smart-card-Bek-TwUp.js +599 -0
  440. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  441. package/dist/{spinner-BY9HbUEh.js → spinner-CmTAbEp0.js} +8 -6
  442. package/dist/spinner-CmTAbEp0.js.map +1 -0
  443. package/dist/{structure-MvKVq-oL.js → structure-hzCW-XsV.js} +3 -3
  444. package/dist/{structure-MvKVq-oL.js.map → structure-hzCW-XsV.js.map} +1 -1
  445. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  446. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  447. package/dist/style.css +1 -1
  448. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  449. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  450. package/dist/table-D6zKeYQX.js +162 -0
  451. package/dist/table-D6zKeYQX.js.map +1 -0
  452. package/dist/table-Dn4XSrSB.js +1444 -0
  453. package/dist/table-Dn4XSrSB.js.map +1 -0
  454. package/dist/tabs-Dk8E_knt.js +189 -0
  455. package/dist/tabs-Dk8E_knt.js.map +1 -0
  456. package/dist/text-inputs-BFpku0Qd.js +331 -0
  457. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  458. package/dist/{text.styles-BwB7vAF2.js → text.styles-g4He6UIW.js} +26 -15
  459. package/dist/text.styles-g4He6UIW.js.map +1 -0
  460. package/dist/theme.css +90 -124
  461. package/dist/themes/green.css +24 -0
  462. package/dist/{timelines-B9ICkQcV.js → timelines-CxuAFIc2.js} +97 -104
  463. package/dist/timelines-CxuAFIc2.js.map +1 -0
  464. package/dist/track-recipes-CDcKmndW.js +10 -0
  465. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  466. package/dist/{tree-BdWSaoFT.js → tree-BotPlyiD.js} +13 -13
  467. package/dist/{tree-BdWSaoFT.js.map → tree-BotPlyiD.js.map} +1 -1
  468. package/dist/typography/rich-text.js +1 -1
  469. package/dist/typography-CAr3dQhX.js +116 -0
  470. package/dist/typography-CAr3dQhX.js.map +1 -0
  471. package/dist/typography.js +2 -2
  472. package/dist/{ui-provider-CftIB6TY.js → ui-provider-D2_TeLqw.js} +22 -22
  473. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  474. package/dist/ui-provider.js +1 -1
  475. package/dist/{upload-D8Za5x_c.js → upload-B0WHW7ak.js} +278 -274
  476. package/dist/upload-B0WHW7ak.js.map +1 -0
  477. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-BHZ_wBfd.js} +72 -75
  478. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  479. package/dist/{usage-card-DnmnJ58D.js → usage-card-U0YBLTNT.js} +31 -33
  480. package/dist/usage-card-U0YBLTNT.js.map +1 -0
  481. package/dist/utils-Cospvlj1.js +4445 -0
  482. package/dist/utils-Cospvlj1.js.map +1 -0
  483. package/dist/value-inputs-CjfzGMsN.js +854 -0
  484. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  485. package/dist/value-typography-Deb3yQZg.js +116 -0
  486. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  487. package/dist/{workspace-C1PZmk8L.js → workspace-YoFjXi6i.js} +97 -105
  488. package/dist/workspace-YoFjXi6i.js.map +1 -0
  489. package/docs/consumer-skill/SKILL.md +123 -119
  490. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  491. package/docs/consumer-skill/examples/app-layout.tsx +42 -14
  492. package/docs/consumer-skill/examples/detail.tsx +20 -5
  493. package/docs/consumer-skill/examples/edit.tsx +1 -1
  494. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  495. package/docs/consumer-skill/examples/manifest.json +37 -3
  496. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  497. package/docs/consumer-skill/examples/website.tsx +56 -0
  498. package/docs/consumer-skill/references/analytics.md +70 -0
  499. package/docs/consumer-skill/references/composition.md +195 -9
  500. package/docs/consumer-skill/references/design-contract.md +33 -7
  501. package/docs/consumer-skill/references/discovery.md +80 -5
  502. package/docs/consumer-skill/references/installation.md +22 -0
  503. package/docs/consumer-skill/references/integration.md +46 -1
  504. package/docs/consumer-skill/references/public-api.json +2083 -237
  505. package/docs/consumer-skill/references/review.md +74 -6
  506. package/docs/consumer-skill/references/theming.md +59 -8
  507. package/docs/consumer-skill/references/tokens.json +180 -9
  508. package/docs/consumer-skill/references/workflows.md +34 -0
  509. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  510. package/docs/consumer-skill/scripts/composition-policy.mjs +271 -18
  511. package/docs/consumer-skill/scripts/discovery.mjs +69 -9
  512. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  513. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  514. package/package.json +11 -6
  515. package/dist/accordion-B-5Focs8.js.map +0 -1
  516. package/dist/action-menu-Cx3SdfbN.js +0 -265
  517. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  518. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  519. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  520. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  521. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  522. package/dist/attachment-BO2R47wn.js.map +0 -1
  523. package/dist/auth-OFwWSAap.js +0 -704
  524. package/dist/auth-OFwWSAap.js.map +0 -1
  525. package/dist/avatar-Bpzty83c.js.map +0 -1
  526. package/dist/badge-BZXZT9wd.js.map +0 -1
  527. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  528. package/dist/button-BS6l5JUw.js.map +0 -1
  529. package/dist/buttons-Co6GavvM.js +0 -674
  530. package/dist/buttons-Co6GavvM.js.map +0 -1
  531. package/dist/chart-DVfcwQu6.js +0 -149
  532. package/dist/chart-DVfcwQu6.js.map +0 -1
  533. package/dist/checkbox-BavDRjF7.js +0 -34
  534. package/dist/checkbox-BavDRjF7.js.map +0 -1
  535. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  536. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  537. package/dist/code-block-xHKbAJDj.js.map +0 -1
  538. package/dist/combobox-DEbdr-3u.js +0 -273
  539. package/dist/combobox-DEbdr-3u.js.map +0 -1
  540. package/dist/combobox-xv3yJbzl.js +0 -850
  541. package/dist/combobox-xv3yJbzl.js.map +0 -1
  542. package/dist/command-C0xe7u9B.js.map +0 -1
  543. package/dist/comments-DviPLnwy.js.map +0 -1
  544. package/dist/containers-6s-ucRQQ.js.map +0 -1
  545. package/dist/data-display-cWIRdeaf.js +0 -1129
  546. package/dist/data-display-cWIRdeaf.js.map +0 -1
  547. package/dist/date-BFNMnrS5.js +0 -140
  548. package/dist/date-BFNMnrS5.js.map +0 -1
  549. package/dist/date-picker-CA6ogMQB.js +0 -1521
  550. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  551. package/dist/date-pickers-BPIKLdsD.js +0 -224
  552. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  553. package/dist/display-CFM5myut.js.map +0 -1
  554. package/dist/dropdown-menu-BlnyHr-9.js.map +0 -1
  555. package/dist/feedback-DWUkgEjR.js.map +0 -1
  556. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  557. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  558. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  559. package/dist/filters-BhsUtsxW.js.map +0 -1
  560. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  561. package/dist/form-sizing-BWs70_a2.js +0 -100
  562. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  563. package/dist/format-iamDSqs2.js +0 -110
  564. package/dist/format-iamDSqs2.js.map +0 -1
  565. package/dist/forms-B7pzS25o.js.map +0 -1
  566. package/dist/forms-numeric-BUBxELBv.js +0 -867
  567. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  568. package/dist/header-C59QZyxV.js.map +0 -1
  569. package/dist/http-CLTVJc5I.js.map +0 -1
  570. package/dist/input-WwYQZJzG.js +0 -202
  571. package/dist/input-WwYQZJzG.js.map +0 -1
  572. package/dist/input-ci9fIgFH.js +0 -20
  573. package/dist/input-ci9fIgFH.js.map +0 -1
  574. package/dist/item-pJ0GsOiJ.js +0 -257
  575. package/dist/item-pJ0GsOiJ.js.map +0 -1
  576. package/dist/media-gallery-DhDRgnVZ.js +0 -200
  577. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  578. package/dist/message-COsdEvXT.js +0 -108
  579. package/dist/message-COsdEvXT.js.map +0 -1
  580. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  581. package/dist/navigation-DBEu4POU.js +0 -267
  582. package/dist/navigation-DBEu4POU.js.map +0 -1
  583. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  584. package/dist/number-BNT_BIzJ.js +0 -269
  585. package/dist/number-BNT_BIzJ.js.map +0 -1
  586. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  587. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  588. package/dist/overlays-B11wZka6.js +0 -982
  589. package/dist/overlays-B11wZka6.js.map +0 -1
  590. package/dist/page-BV6ioQg3.js +0 -202
  591. package/dist/page-BV6ioQg3.js.map +0 -1
  592. package/dist/page-header-DQRa0jug.js.map +0 -1
  593. package/dist/pagination-C29vvt3I.js.map +0 -1
  594. package/dist/popover-CoLDEg19.js.map +0 -1
  595. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  596. package/dist/primitives-DKPOGVpj.js +0 -330
  597. package/dist/primitives-DKPOGVpj.js.map +0 -1
  598. package/dist/progress-BOe8l_FZ.js.map +0 -1
  599. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  600. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  601. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  602. package/dist/scroll-area-BheMQ270.js.map +0 -1
  603. package/dist/select-B2mb-qN2.js +0 -108
  604. package/dist/select-B2mb-qN2.js.map +0 -1
  605. package/dist/separator-Gk_WXH-l.js.map +0 -1
  606. package/dist/settings-BnCyyPOJ.js.map +0 -1
  607. package/dist/sheet-B-q914Ad.js +0 -205
  608. package/dist/sheet-B-q914Ad.js.map +0 -1
  609. package/dist/sidebar-C_2p3Tfj.js +0 -501
  610. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  611. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  612. package/dist/smart-card-CYLn46e6.js +0 -578
  613. package/dist/smart-card-CYLn46e6.js.map +0 -1
  614. package/dist/spinner-BY9HbUEh.js.map +0 -1
  615. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  616. package/dist/surface-recipes-CQfRr-VL.js +0 -27
  617. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  618. package/dist/table-BS39xnlq.js +0 -1424
  619. package/dist/table-BS39xnlq.js.map +0 -1
  620. package/dist/table-DnlAJ-xR.js +0 -146
  621. package/dist/table-DnlAJ-xR.js.map +0 -1
  622. package/dist/tabs-B5cNMWiP.js +0 -187
  623. package/dist/tabs-B5cNMWiP.js.map +0 -1
  624. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  625. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  626. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  627. package/dist/timelines-B9ICkQcV.js.map +0 -1
  628. package/dist/track-recipes-LLPNVwFg.js +0 -10
  629. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  630. package/dist/typography-Cv8MT-82.js +0 -96
  631. package/dist/typography-Cv8MT-82.js.map +0 -1
  632. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  633. package/dist/upload-D8Za5x_c.js.map +0 -1
  634. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  635. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  636. package/dist/utils-C2EKeIw3.js +0 -72
  637. package/dist/utils-C2EKeIw3.js.map +0 -1
  638. package/dist/value-inputs-DX2dbxjj.js +0 -824
  639. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  640. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"value-inputs-DX2dbxjj.js","names":["record","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","React","React","SliderPrimitive","React","useDensityConfig","cn","TextButton","Text","Stack","sliderTrackThickness","Badge","formControlHorizontalPaddingClasses","formFieldTriggerClasses","resolveFormControlSize","formControlSizeClasses","Input","DatePicker","SelectValue","SelectTrigger","Select","SelectPopupGroup","SelectPopupItem","SelectPopupContent","React$1","defaultTagsInputStrings","current","max","TagsInput","ariaDescribedBy","stringsProp","placeholderStrings","useStrings","placeholder","strings","inputValue","setInputValue","useState","open","setOpen","selectedIndex","setSelectedIndex","inputRef","useRef","getDisplayValue","useCallback","tag","field","candidate","createTagFromString","value","input","normalizedRecommendations","useMemo","recommendations","rec","filteredRecommendations","search","caseSensitive","existingValues","displayVal","v","label","val","allowDuplicates","displayValue","sortTags","aStr","a","bStr","b","addTag","actualTag","trimmedDisplayVal","minLength","maxLength","maxTags","existingDisplayVal","validate","newValue","onValueChange","removeTag","i","index","handleInputChange","handleKeyDown","disabled","prev","handlePaste","delimiter","t","handleBlur","addOnBlur","clearAll","defaultRenderTag","tagKey","onRemove","X","resolvedInvalid","invalid","className","recommendationKey","isPicked","e","idx","Check","renderTag","showClearAll","showMaxTags","defaultPhoneInputStrings","COUNTRY_PREFIX_MAP","DEFAULT_COUNTRY_PREFIXES","normalizePrefixInput","normalizePrefixes","inputs","p","normalizePhone","normalized","selectedPrefix","resolvePrefixToDialCode","prefix","normalizedPrefixes","PhoneInputImpl","controlledPrefix","sizeProp","props","size","defaultScale","basePrefixes","prefixes","resolvedDefaultPrefix","defaultPrefix","internalPrefix","setInternalPrefix","selectedIso","setSelectedIso","initial","option","isPrefixControlled","known","currentPrefixOption","handlePrefixChange","newPrefix","item","onPrefixChange","handleChange","onChange","raw","event","stripped","national","normalizeOnBlur","nextValue","onBlur","disablePrefixSelector","staticPrefix","forwardedRef","prefixWidth","prefixPlaceholder","prefixOption","showPrefixInDropdown","showCountryName","PhoneInput","memo","defaultColorInputStrings","pickerSizeClasses","normalizeHexColor","part","roundColorChannel","rounded","precision","hexColorToOklch","red","green","blue","offset","channel","lRoot","mRoot","sRoot","lightness","chroma","hue","renderedColorToHex","computedColor","element","directHex","fallback","canvas","context","alpha","ColorInput","internalValue","setInternalValue","defaultValue","resolvedValue","resolvedPreview","previewValue","initialPickerValue","pickerValue","setPickerValue","swatchRef","publishChange","readOnly","pickerAriaLabel","inputStrings","defaultSliderStrings","SliderFieldImpl","ariaLabel","ariaLabelledBy","generatedId","useId","resolvedId","id","resolvedName","name","resolvedAriaLabel","handleValueChange","singleValue","handleValueCommitted","onValueCommitted","showValue","currentValue","min","formatValue","unit","sliderValue","sliderDefaultValue","Slider","SliderField","DateTimeInput","forwardRef","dateValue","errorValue","output","stepMinutes"],"sources":["../src/components/base/value-inputs/tags-input.tsx","../src/components/base/value-inputs/phone-input.tsx","../src/components/base/value-inputs/color-input.tsx","../src/components/base/value-inputs/slider.tsx","../src/components/base/value-inputs/date-time-input.tsx"],"sourcesContent":["/**\n * TagsInput — generic typed tag picker with optional recommendation list,\n * paste-to-bulk, validation, max-tag enforcement, and customizable rendering.\n * Supports both string tags and complex objects (via the `field` prop pointing\n * at the display key). Strings overridable for i18n via `strings`.\n *\n * Ref note: `TagsInput` is generic over `T` and does not use `forwardRef`\n * (generic-+-forwardRef is awkward in TS). Consumers wire RHF via `value` /\n * `onValueChange` props directly. To focus the inner input from a parent, render\n * a wrapping element with `data-tags-input` and call `.querySelector('input').focus()`.\n */\nimport { X, Check } from 'lucide-react';\nimport * as React from 'react';\nimport { useState, useRef, useCallback, useMemo } from 'react';\nimport { TextButton } from '../buttons';\nimport { Badge } from '../badge';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { Input } from '../text-inputs';\n\nexport interface TagsInputStrings {\n\tplaceholder: string;\n\temptyRecommendations: string;\n\tclearAll: string;\n\t/** Summary line shown when `maxTags` + `showMaxTags` are set. Receives\n\t * `current` (number of tags entered) and `max` (the limit). The\n\t * default is English `\"{current} / {max} tags\"` — override for i18n. */\n\tsummary: (current: number, max: number) => string;\n}\n\nexport const defaultTagsInputStrings: TagsInputStrings = {\n\tplaceholder: 'Add a tag…',\n\temptyRecommendations: 'No recommendations found.',\n\tclearAll: 'Clear all',\n\tsummary: (current, max) => `${current} / ${max} tags`,\n};\n\nexport interface TagsInputProps<T = string> {\n\t/** ID of the editable input, for an external field label. */\n\tid?: string;\n\t/** Additional supporting/error descriptions associated with the editable control. */\n\t'aria-describedby'?: string;\n\t\t/** Current value (array of T) */\n\t\tvalue?: T[];\n\n\t\t/** Callback when value changes */\n\t\tonValueChange?: (value: T[]) => void;\n\n\t\t/** Placeholder text for the input */\n\t\tplaceholder?: string;\n\n\t\t/** Array of recommendations to suggest */\n\t\trecommendations?: Array<T | { value: T; label: string }>;\n\n\t\t/** Maximum number of tags allowed */\n\t\tmaxTags?: number;\n\n\t\t/** Show the label for the maximum tags */\n\t\tshowMaxTags?: boolean;\n\n\t\t/** Whether duplicate tags are allowed */\n\t\tallowDuplicates?: boolean;\n\n\t\t/** Custom validation function */\n\t\tvalidate?: (value: T) => boolean;\n\n\t\t/** Whether the input is disabled */\n\t\tdisabled?: boolean;\n\n\t\t/** Whether to show the clear all button */\n\t\tshowClearAll?: boolean;\n\n\t\t/** Custom tag component */\n\t\trenderTag?: (tag: T, index: number, onRemove: (index: number) => void) => React.ReactNode;\n\n\t\t/** Delimiter for separating tags when pasting */\n\t\tdelimiter?: string | RegExp;\n\n\t\t/** Whether to trigger add on blur */\n\t\taddOnBlur?: boolean;\n\n\t\t/** Minimum length for a tag */\n\t\tminLength?: number;\n\n\t\t/** Maximum length for a tag */\n\t\tmaxLength?: number;\n\n\t\t/** Override default English strings (placeholder, empty list, clear-all). */\n\t\tstrings?: StringsProp<TagsInputStrings>;\n\n\t\t/** Whether tags should be sorted */\n\t\tsortTags?: boolean;\n\n\t\t/** Case sensitivity for duplicate checking */\n\t\tcaseSensitive?: boolean;\n\n\t\t/** Field to extract display value from an object (required when T is not string) */\n\t\tfield?: T extends string ? never : keyof T;\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\nexport function TagsInput<T = string>({\n\t\tid,\n\t\t'aria-describedby': ariaDescribedBy,\n\t\tvalue = [],\n\t\tonValueChange,\n\t\tplaceholder,\n\t\trecommendations,\n\t\tmaxTags,\n\t\tshowMaxTags = false,\n\t\tallowDuplicates = false,\n\t\tvalidate,\n\t\tdisabled = false,\n\t\tshowClearAll = false,\n\t\trenderTag,\n\t\tdelimiter = /[\\n,]/,\n\t\taddOnBlur = true,\n\t\tminLength = 1,\n\t\tmaxLength,\n\t\tsortTags = false,\n\t\tcaseSensitive = false,\n\t\tfield,\n\t\tinvalid,\n\t\tclassName,\n\t\tstrings: stringsProp,\n}: TagsInputProps<T>) {\n\t\tconst placeholderStrings = useStrings(\n\t\t\t\tdefaultTagsInputStrings,\n\t\t\t\tplaceholder !== undefined ? { placeholder } : undefined,\n\t\t);\n\t\tconst strings = useStrings(placeholderStrings, stringsProp);\n\t\tconst [inputValue, setInputValue] = useState('');\n\t\tconst [open, setOpen] = useState(false);\n\t\tconst [selectedIndex, setSelectedIndex] = useState(-1);\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\t\t// Helper function to get display value from tag\n\t\tconst getDisplayValue = useCallback(\n\t\t\t\t(tag: T): string => {\n\t\t\t\t\t\tif (typeof tag === 'string') {\n\t\t\t\t\t\t\t\treturn tag;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (field && typeof tag === 'object' && tag !== null) {\n\t\t\t\t\t\t\t\tconst record = tag as Record<string | number | symbol, unknown>;\n\t\t\t\t\t\t\t\tconst candidate = record[field];\n\t\t\t\t\t\t\t\tif (typeof candidate === 'string') {\n\t\t\t\t\t\t\t\t\t\treturn candidate;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (candidate === undefined || candidate === null) {\n\t\t\t\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn String(candidate);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn String(tag);\n\t\t\t\t},\n\t\t\t\t[field]\n\t\t);\n\n\t\t// Helper function to create tag from string input\n\t\tconst createTagFromString = useCallback(\n\t\t\t\t(input: string): T => {\n\t\t\t\t\t\tif (typeof value[0] === 'string' || value.length === 0) {\n\t\t\t\t\t\t\t\treturn input as T;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (field) {\n\t\t\t\t\t\t\t\treturn { [field]: input } as T;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn input as unknown as T;\n\t\t\t\t},\n\t\t\t\t[field, value]\n\t\t);\n\n\t\t// Normalize recommendations to always be objects\n\t\tconst normalizedRecommendations = useMemo(() => {\n\t\t\t\tif (!recommendations) return [];\n\t\t\t\treturn recommendations.map((rec) => {\n\t\t\t\t\t\tif (rec && typeof rec === 'object' && 'value' in rec && 'label' in rec) {\n\t\t\t\t\t\t\t\treturn rec as { value: T; label: string };\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst displayValue = getDisplayValue(rec);\n\t\t\t\t\t\treturn { value: rec, label: displayValue };\n\t\t\t\t});\n\t\t}, [recommendations, getDisplayValue]);\n\n\t\t// Filter recommendations based on input and existing tags\n\t\tconst filteredRecommendations = useMemo(() => {\n\t\t\t\tif (!normalizedRecommendations.length || !inputValue) return normalizedRecommendations;\n\n\t\t\t\tconst search = caseSensitive ? inputValue : inputValue.toLowerCase();\n\t\t\t\tconst existingValues = new Set(\n\t\t\t\t\t\tvalue.map((v) => {\n\t\t\t\t\t\t\t\tconst displayVal = getDisplayValue(v);\n\t\t\t\t\t\t\t\treturn caseSensitive ? displayVal : displayVal.toLowerCase();\n\t\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn normalizedRecommendations.filter((rec) => {\n\t\t\t\t\t\tconst label = caseSensitive ? rec.label : rec.label.toLowerCase();\n\t\t\t\t\t\tconst displayVal = getDisplayValue(rec.value);\n\t\t\t\t\t\tconst val = caseSensitive ? displayVal : displayVal.toLowerCase();\n\n\t\t\t\t\t\treturn (label.includes(search) || val.includes(search)) && (allowDuplicates || !existingValues.has(val));\n\t\t\t\t});\n\t\t}, [normalizedRecommendations, inputValue, value, allowDuplicates, caseSensitive, getDisplayValue]);\n\n\t\t// Sort tags if needed\n\t\tconst displayValue = useMemo(() => {\n\t\t\t\tif (!sortTags) return value;\n\t\t\t\treturn [...value].sort((a, b) => {\n\t\t\t\t\t\tconst aStr = getDisplayValue(a);\n\t\t\t\t\t\tconst bStr = getDisplayValue(b);\n\t\t\t\t\t\treturn aStr.localeCompare(bStr);\n\t\t\t\t});\n\t\t}, [value, sortTags, getDisplayValue]);\n\n\t\tconst addTag = useCallback(\n\t\t\t\t(tag: T | string) => {\n\t\t\t\t\t\tconst actualTag = typeof tag === 'string' ? createTagFromString(tag) : tag;\n\t\t\t\t\t\tconst displayVal = getDisplayValue(actualTag);\n\t\t\t\t\t\tconst trimmedDisplayVal = displayVal.trim();\n\n\t\t\t\t\t\t// Validation checks\n\t\t\t\t\t\tif (!trimmedDisplayVal) return;\n\t\t\t\t\t\tif (trimmedDisplayVal.length < minLength) return;\n\t\t\t\t\t\tif (maxLength && trimmedDisplayVal.length > maxLength) return;\n\t\t\t\t\t\tif (maxTags && value.length >= maxTags) return;\n\n\t\t\t\t\t\tif (!allowDuplicates) {\n\t\t\t\t\t\t\t\tconst exists = value.some((v) => {\n\t\t\t\t\t\t\t\t\t\tconst existingDisplayVal = getDisplayValue(v);\n\t\t\t\t\t\t\t\t\t\treturn caseSensitive\n\t\t\t\t\t\t\t\t\t\t\t\t? existingDisplayVal === trimmedDisplayVal\n\t\t\t\t\t\t\t\t\t\t\t\t: existingDisplayVal.toLowerCase() === trimmedDisplayVal.toLowerCase();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (exists) return;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (validate && !validate(actualTag)) return;\n\n\t\t\t\t\t\tconst newValue = [...value, actualTag];\n\t\t\t\t\t\tonValueChange?.(newValue);\n\t\t\t\t\t\tsetInputValue('');\n\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\tsetSelectedIndex(-1);\n\t\t\t\t},\n\t\t\t\t[value, onValueChange, maxTags, allowDuplicates, validate, minLength, maxLength, caseSensitive, getDisplayValue, createTagFromString]\n\t\t);\n\n\t\tconst removeTag = useCallback(\n\t\t\t\t(index: number) => {\n\t\t\t\t\t\tconst newValue = value.filter((_, i) => i !== index);\n\t\t\t\t\t\tonValueChange?.(newValue);\n\t\t\t\t},\n\t\t\t\t[value, onValueChange]\n\t\t);\n\n\t\tconst handleInputChange = useCallback(\n\t\t\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\tconst newValue = e.target.value;\n\t\t\t\t\t\tsetInputValue(newValue);\n\t\t\t\t\t\tsetSelectedIndex(-1);\n\n\t\t\t\t\t\tif (recommendations && recommendations.length > 0) {\n\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[recommendations]\n\t\t);\n\n\t\tconst handleKeyDown = useCallback(\n\t\t\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\t\t\t\tif (disabled) return;\n\n\t\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif (open && selectedIndex >= 0 && selectedIndex < filteredRecommendations.length) {\n\t\t\t\t\t\t\t\t\t\taddTag(filteredRecommendations[selectedIndex].value);\n\t\t\t\t\t\t\t\t\t\tsetSelectedIndex(-1);\n\t\t\t\t\t\t\t\t} else if (inputValue.trim()) {\n\t\t\t\t\t\t\t\t\t\taddTag(inputValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.key === 'Tab') {\n\t\t\t\t\t\t\t\tif (inputValue) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\taddTag(inputValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.key === 'ArrowDown') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif (open) {\n\t\t\t\t\t\t\t\t\t\tsetSelectedIndex((prev) => (prev < filteredRecommendations.length - 1 ? prev + 1 : prev));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif (open) {\n\t\t\t\t\t\t\t\t\t\tsetSelectedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.key === 'Escape') {\n\t\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\t\tsetSelectedIndex(-1);\n\t\t\t\t\t\t} else if (e.key === 'Backspace' && !inputValue && value.length > 0) {\n\t\t\t\t\t\t\t\tremoveTag(value.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[disabled, open, selectedIndex, filteredRecommendations, inputValue, addTag, removeTag, value.length]\n\t\t);\n\n\t\tconst handlePaste = useCallback(\n\t\t\t\t(e: React.ClipboardEvent<HTMLInputElement>) => {\n\t\t\t\t\t\tif (disabled) return;\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tconst pastedText = e.clipboardData.getData('text');\n\t\t\t\t\t\tconst tags = pastedText\n\t\t\t\t\t\t\t\t.split(delimiter)\n\t\t\t\t\t\t\t\t.map((t) => t.trim())\n\t\t\t\t\t\t\t\t.filter(Boolean);\n\n\t\t\t\t\t\ttags.forEach((tag) => addTag(tag));\n\t\t\t\t},\n\t\t\t\t[disabled, delimiter, addTag]\n\t\t);\n\n\t\tconst handleBlur = useCallback(() => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\tif (addOnBlur && inputValue) {\n\t\t\t\t\t\t\t\taddTag(inputValue);\n\t\t\t\t\t\t}\n\t\t\t\t}, 200);\n\t\t}, [addOnBlur, inputValue, addTag]);\n\n\t\tconst clearAll = useCallback(() => {\n\t\t\t\tonValueChange?.([]);\n\t\t\t\tsetInputValue('');\n\t\t}, [onValueChange]);\n\n\t\tconst defaultRenderTag = useCallback(\n\t\t\t\t(tag: T, index: number, onRemove: (index: number) => void) => {\n\t\t\t\t\t\tconst tagKey = `${getDisplayValue(tag)}-${index}`;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Badge key={tagKey} tone=\"secondary\" className={cn('tags-input--component', 'gap-space-xs pr-space-xs')}>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"normal\" lineHeight=\"none\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t{getDisplayValue(tag)}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Remove ${getDisplayValue(tag)}`}\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'inline-flex size-icon items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'text-muted-foreground/70 hover:bg-foreground/10 hover:text-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'disabled:opacity-50 disabled:pointer-events-none',\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\tonClick={() => onRemove(index)}\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>\n\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t[getDisplayValue, disabled]\n\t\t);\n\n\t\tconst resolvedInvalid = Boolean(invalid);\n\n\t\treturn (\n\t\t\t\t<div className={cn('w-full relative', className)}>\n\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholder}\n\t\t\t\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (recommendations && filteredRecommendations.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpen(true);\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\tdisabled={disabled || (maxTags !== undefined && value.length >= maxTags)}\n\t\t\t\t\t\t\t\t\t\tinvalid={resolvedInvalid}\n\t\t\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Recommendations dropdown — mirrors PopoverContent + CommandItem\n\t\t\t\t\t\t\t\t\t\tsurface tokens (bg-popover, text-popover-foreground, ring-1\n\t\t\t\t\t\t\t\t\t\tring-foreground/10, shadow-md, rounded-radius-md) so it reads\n\t\t\t\t\t\t\t\t\t\tidentically to a real popover. The hand-rolled wrapper\n\t\t\t\t\t\t\t\t\t\tstays because the dropdown is tightly bound to the\n\t\t\t\t\t\t\t\t\t\tInput's keyboard handler (selectedIndex, arrow nav). */}\n\t\t\t\t\t\t\t\t{!!recommendations && !!open && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"absolute top-full left-0 right-0 z-50 mt-1 max-h-[200px] overflow-y-auto rounded-radius-md bg-popover p-surface-xs text-popover-foreground shadow-md ring-1 ring-foreground/10\">\n\t\t\t\t\t\t\t\t\t\t\t\t{filteredRecommendations.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilteredRecommendations.map((rec, idx) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst recommendationKey = getDisplayValue(rec.value);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isPicked = value.some(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(v) => getDisplayValue(v) === getDisplayValue(rec.value),\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\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={recommendationKey}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taddTag(rec.value);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedIndex(-1);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\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\t\t\t\t\t\tonMouseEnter={() => setSelectedIndex(idx)}\n\t\t\t\t\t\t\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'relative flex w-full cursor-pointer items-center justify-between gap-space-sm rounded-radius-md px-control-sm py-row-y',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'hover:bg-accent hover:text-accent-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'focus-visible:outline-none',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedIndex === idx && 'bg-accent text-accent-foreground',\n\t\t\t\t\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\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" 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{rec.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\t\t<Check\n\t\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t\t'ml-auto size-icon-sm',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisPicked ? 'opacity-100' : 'opacity-0',\n\t\t\t\t\t\t\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\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\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})\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<Text tag=\"div\" size=\"xs\" type=\"secondary\" className=\"px-space-md py-row-y\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.emptyRecommendations}\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</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Tags container */}\n\t\t\t\t\t\t{displayValue.length > 0 && (\n\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"mt-space-md\">\n\t\t\t\t\t\t\t\t\t\t{displayValue.map((tag, index) =>\n\t\t\t\t\t\t\t\t\t\t\t\trenderTag ? renderTag(tag, index, removeTag) : defaultRenderTag(tag, index, removeTag)\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{!!showClearAll && value.length > 0 && !disabled && (\n\t\t\t\t\t\t\t\t\t\t\t\t<TextButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={clearAll}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ml-auto\"\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{strings.clearAll}\n\t\t\t\t\t\t\t\t\t\t\t\t</TextButton>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{!!maxTags && !!showMaxTags && (\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-1\">\n\t\t\t\t\t\t\t\t\t\t{strings.summary(value.length, maxTags)}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t);\n}\n\nTagsInput.displayName = 'TagsInput';\n","import * as React from 'react';\nimport { useState, useCallback, useMemo, memo } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formControlHorizontalPaddingClasses, formControlSizeClasses, formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { Input, type InputProps } from '../text-inputs';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport interface PhoneInputStrings {\n\t\tprefixPlaceholder: string;\n\t\t/** Accessible name for the country-prefix selector. */\n\t\tprefixAriaLabel: string;\n}\n\nexport const defaultPhoneInputStrings: PhoneInputStrings = {\n\t\tprefixPlaceholder: 'Prefix',\n\t\tprefixAriaLabel: 'Country prefix',\n};\n\nexport interface CountryPrefixOption {\n\t\t/** Country code value (e.g., '+1') */\n\t\tvalue: string;\n\n\t\t/** Display label (e.g., 'Bulgaria') */\n\t\tlabel: string;\n\n\t\t/** ISO country code (e.g., 'US') */\n\t\tiso: string;\n}\n\n/** Country data mapped by ISO code */\nexport const COUNTRY_PREFIX_MAP: Record<string, CountryPrefixOption> = {\n\t\tUS: { value: '+1', label: 'United States', iso: 'US' },\n\t\tCA: { value: '+1', label: 'Canada', iso: 'CA' },\n\t\tAU: { value: '+61', label: 'Australia', iso: 'AU' },\n\t\tBG: { value: '+359', label: 'Bulgaria', iso: 'BG' },\n\t\tGR: { value: '+30', label: 'Greece', iso: 'GR' },\n\t\tGB: { value: '+44', label: 'United Kingdom', iso: 'GB' },\n\t\tDE: { value: '+49', label: 'Germany', iso: 'DE' },\n\t\tFR: { value: '+33', label: 'France', iso: 'FR' },\n\t\tIT: { value: '+39', label: 'Italy', iso: 'IT' },\n\t\tES: { value: '+34', label: 'Spain', iso: 'ES' },\n\t\tNL: { value: '+31', label: 'Netherlands', iso: 'NL' },\n\t\tBE: { value: '+32', label: 'Belgium', iso: 'BE' },\n\t\tAT: { value: '+43', label: 'Austria', iso: 'AT' },\n\t\tCH: { value: '+41', label: 'Switzerland', iso: 'CH' },\n\t\tPL: { value: '+48', label: 'Poland', iso: 'PL' },\n\t\tRO: { value: '+40', label: 'Romania', iso: 'RO' },\n\t\tRS: { value: '+381', label: 'Serbia', iso: 'RS' },\n\t\tHR: { value: '+385', label: 'Croatia', iso: 'HR' },\n\t\tSI: { value: '+386', label: 'Slovenia', iso: 'SI' },\n\t\tMK: { value: '+389', label: 'North Macedonia', iso: 'MK' },\n\t\tTR: { value: '+90', label: 'Turkey', iso: 'TR' },\n\t\tRU: { value: '+7', label: 'Russia', iso: 'RU' },\n\t\tUA: { value: '+380', label: 'Ukraine', iso: 'UA' },\n\t\tSK: { value: '+421', label: 'Slovakia', iso: 'SK' },\n\t\tCZ: { value: '+420', label: 'Czech Republic', iso: 'CZ' },\n\t\tHU: { value: '+36', label: 'Hungary', iso: 'HU' },\n\t\tPT: { value: '+351', label: 'Portugal', iso: 'PT' },\n\t\tIE: { value: '+353', label: 'Ireland', iso: 'IE' },\n\t\tSE: { value: '+46', label: 'Sweden', iso: 'SE' },\n\t\tNO: { value: '+47', label: 'Norway', iso: 'NO' },\n\t\tDK: { value: '+45', label: 'Denmark', iso: 'DK' },\n\t\tFI: { value: '+358', label: 'Finland', iso: 'FI' },\n\t\tCY: { value: '+357', label: 'Cyprus', iso: 'CY' },\n\t\tAL: { value: '+355', label: 'Albania', iso: 'AL' },\n\t\tME: { value: '+382', label: 'Montenegro', iso: 'ME' },\n\t\tBA: { value: '+387', label: 'Bosnia and Herzegovina', iso: 'BA' },\n\t\tXK: { value: '+383', label: 'Kosovo', iso: 'XK' },\n\t\tMD: { value: '+373', label: 'Moldova', iso: 'MD' },\n\t\tBY: { value: '+375', label: 'Belarus', iso: 'BY' },\n\t\tLT: { value: '+370', label: 'Lithuania', iso: 'LT' },\n\t\tLV: { value: '+371', label: 'Latvia', iso: 'LV' },\n\t\tEE: { value: '+372', label: 'Estonia', iso: 'EE' },\n};\n\n/** Type for prefix input - either ISO code string or full option object */\nexport type CountryPrefixInput = string | CountryPrefixOption;\n\n/** Default country prefixes - commonly used codes */\nexport const DEFAULT_COUNTRY_PREFIXES: CountryPrefixInput[] = ['US', 'CA', 'GB', 'DE', 'FR', 'IT', 'ES', 'AU'];\n\n/**\n * Normalize prefix input to CountryPrefixOption\n * Accepts either ISO code ('US') or full object ({ value: '+1', label: 'United States', iso: 'US' })\n */\nconst normalizePrefixInput = (input: CountryPrefixInput): CountryPrefixOption | null => {\n\t\tif (typeof input === 'string') {\n\t\t\t\t// It's an ISO code - look it up\n\t\t\t\tconst upperInput = input.toUpperCase();\n\t\t\t\treturn COUNTRY_PREFIX_MAP[upperInput] ?? null;\n\t\t}\n\t\t// It's already a full object\n\t\treturn input;\n};\n\n/**\n * Normalize array of prefix inputs to CountryPrefixOption[]\n */\nconst normalizePrefixes = (inputs: CountryPrefixInput[]): CountryPrefixOption[] => {\n\t\treturn inputs.map(normalizePrefixInput).filter((p): p is CountryPrefixOption => p !== null);\n};\n\nexport interface PhoneInputProps extends Omit<InputProps, 'type' | 'startAddon' | 'strings'> {\n\t\t/** Normalize phone number on blur. Defaults to true */\n\t\tnormalizeOnBlur?: boolean;\n\n\t\t/** Current country prefix value (dial code like '+1' or ISO code like 'US') */\n\t\tprefix?: string;\n\n\t\t/** Default prefix if uncontrolled (dial code like '+1' or ISO code like 'US') */\n\t\tdefaultPrefix?: string;\n\n\t\t/** List of available country prefixes - ISO codes ('US', 'GR') or full objects */\n\t\tprefixes?: CountryPrefixInput[];\n\n\t\t/** Callback when prefix changes - returns dial code (e.g., '+1') */\n\t\tonPrefixChange?: (prefix: string) => void;\n\n\t\t/** Disable prefix selection */\n\t\tdisablePrefixSelector?: boolean;\n\n\t\t/** Placeholder for prefix dropdown */\n\t\tprefixPlaceholder?: string;\n\n\t\t/** Width of the prefix dropdown */\n\t\tprefixWidth?: string;\n\n\t\t/** Show country name in dropdown. Defaults to true */\n\t\tshowCountryName?: boolean;\n\n\t\t/** Show prefix in dropdown items. Defaults to true */\n\t\tshowPrefixInDropdown?: boolean;\n\n\t\t/** String overrides (e.g. prefix dropdown placeholder). */\n\t\tstrings?: StringsProp<PhoneInputStrings>;\n}\n\nconst normalizePhone = (value: string, selectedPrefix?: string): string => {\n\t\tlet normalized = value\n\t\t\t\t.trim()\n\t\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t\t.replace(/[^\\d ()+-]/g, '');\n\n\t\t// Strip the selected prefix from the input if the user typed it redundantly\n\t\tif (selectedPrefix && normalized.startsWith(selectedPrefix)) {\n\t\t\t\tnormalized = normalized.slice(selectedPrefix.length).replace(/^[\\s-]+/, '');\n\t\t}\n\n\t\t// Strip leading zero from national numbers when a prefix is selected (e.g., 0877... → 877...)\n\t\tif (selectedPrefix && normalized.startsWith('0')) {\n\t\t\t\tnormalized = normalized.slice(1);\n\t\t}\n\n\t\treturn normalized;\n};\n\n/**\n * Resolve a prefix string (ISO code or dial code) to dial code\n */\nconst resolvePrefixToDialCode = (prefix: string | undefined, normalizedPrefixes: CountryPrefixOption[]): string => {\n\t\tif (!prefix) return normalizedPrefixes[0]?.value ?? '';\n\n\t\t// Check if it's already a dial code (starts with +)\n\t\tif (prefix.startsWith('+')) {\n\t\t\t\treturn prefix;\n\t\t}\n\n\t\t// It's an ISO code - look it up\n\t\tconst upperPrefix = prefix.toUpperCase();\n\t\tconst found = COUNTRY_PREFIX_MAP[upperPrefix];\n\t\treturn found?.value ?? prefix;\n};\n\nfunction PhoneInputImpl(\n\t\t{\n\t\t\t\tnormalizeOnBlur = true,\n\t\t\t\tonBlur,\n\t\t\t\tonChange,\n\t\t\t\tprefix: controlledPrefix,\n\t\t\t\tdefaultPrefix,\n\t\t\t\tprefixes = DEFAULT_COUNTRY_PREFIXES,\n\t\t\t\tonPrefixChange,\n\t\t\t\tdisablePrefixSelector = false,\n\t\t\t\tprefixPlaceholder,\n\t\t\t\tprefixWidth = 'w-30',\n\t\t\t\tshowCountryName = true,\n\t\t\t\tshowPrefixInDropdown = true,\n\t\t\t\tinvalid,\n\t\t\t\tdisabled,\n\t\t\t\tclassName,\n\t\t\t\tsize: sizeProp,\n\t\t\t\tstrings: stringsProp,\n\t\t\t\t...props\n\t\t}: PhoneInputProps,\n\t\tforwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst strings = useStrings(defaultPhoneInputStrings, stringsProp);\n\t\t// Normalize prefix options from mixed input (ISO codes or full objects)\n\t\tconst basePrefixes = useMemo(() => normalizePrefixes(prefixes), [prefixes]);\n\n\t\t// Resolve controlled/default prefix to dial code\n\t\tconst resolvedDefaultPrefix = useMemo(\n\t\t\t\t() => resolvePrefixToDialCode(defaultPrefix, basePrefixes),\n\t\t\t\t[defaultPrefix, basePrefixes]\n\t\t);\n\n\t\t// Internal state for uncontrolled prefix (always stores dial code)\n\t\tconst [internalPrefix, setInternalPrefix] = useState(resolvedDefaultPrefix);\n\t\t// Country identity is distinct from its dial code (US and CA both use +1).\n\t\tconst [selectedIso, setSelectedIso] = useState(() => {\n\t\t\t\tconst initial = controlledPrefix ?? defaultPrefix;\n\t\t\t\treturn initial && !initial.startsWith('+') ? initial.toUpperCase() : basePrefixes.find((option) => option.value === resolvedDefaultPrefix)?.iso;\n\t\t});\n\n\t\t// Determine if prefix is controlled\n\t\tconst isPrefixControlled = controlledPrefix !== undefined;\n\t\tconst selectedPrefix = isPrefixControlled\n\t\t\t\t? resolvePrefixToDialCode(controlledPrefix, basePrefixes)\n\t\t\t\t: internalPrefix;\n\n\t\t/*\n\t\t * The selected dial code has to be representable in the menu, or the\n\t\t * trigger renders blank.\n\t\t *\n\t\t * `DEFAULT_COUNTRY_PREFIXES` is eight countries, while `COUNTRY_PREFIX_MAP`\n\t\t * knows many more. So `defaultPrefix=\"BG\"` resolved to `+359` — correctly —\n\t\t * and then found no option to display, leaving an empty control with no\n\t\t * error. Naming a country the component itself knows about is a reasonable\n\t\t * thing to do, so the option is carried in rather than dropped.\n\t\t */\n\t\tconst normalizedPrefixes = useMemo(() => {\n\t\t\t\tif (!selectedPrefix || basePrefixes.some((option) => option.value === selectedPrefix)) {\n\t\t\t\t\t\treturn basePrefixes;\n\t\t\t\t}\n\t\t\t\tconst known = Object.values(COUNTRY_PREFIX_MAP).find((option) => option.value === selectedPrefix);\n\t\t\t\treturn known ? [known, ...basePrefixes] : basePrefixes;\n\t\t}, [basePrefixes, selectedPrefix]);\n\n\t\t// Find current prefix option for display\n\t\tconst currentPrefixOption = useMemo(\n\t\t\t\t() => normalizedPrefixes.find((p) => p.iso === (controlledPrefix && !controlledPrefix.startsWith('+') ? controlledPrefix.toUpperCase() : selectedIso) && p.value === selectedPrefix)\n\t\t\t\t\t\t?? normalizedPrefixes.find((p) => p.value === selectedPrefix),\n\t\t\t\t[normalizedPrefixes, selectedPrefix, selectedIso, controlledPrefix]\n\t\t);\n\n\t\t// Handle prefix change\n\t\tconst handlePrefixChange = useCallback(\n\t\t\t\t(newPrefix: string | null) => {\n\t\t\t\t\t\tif (newPrefix === null) return;\n\t\t\t\t\t\tconst option = normalizedPrefixes.find((item) => item.iso === newPrefix);\n\t\t\t\t\t\tif (!option) return;\n\t\t\t\t\t\tsetSelectedIso(option.iso);\n\t\t\t\t\t\tif (!isPrefixControlled) {\n\t\t\t\t\t\t\t\tsetInternalPrefix(option.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonPrefixChange?.(option.value);\n\t\t\t\t},\n\t\t\t\t[isPrefixControlled, onPrefixChange, normalizedPrefixes]\n\t\t);\n\n\t\t// Handle phone change — strip redundant prefix on every keystroke/autofill\n\t\tconst handleChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n\t\t\t\t(event) => {\n\t\t\t\t\t\tif (!onChange) return;\n\n\t\t\t\t\t\tconst raw = event.target.value;\n\n\t\t\t\t\t\t// Strip the selected prefix if the value starts with it (autofill, paste, manual typing)\n\t\t\t\t\t\tif (selectedPrefix && raw.startsWith(selectedPrefix)) {\n\t\t\t\t\t\t\t\tconst stripped = raw.slice(selectedPrefix.length).replace(/^[\\s-]+/, '');\n\t\t\t\t\t\t\t\t// Also strip leading zero from national part\n\t\t\t\t\t\t\t\tconst national = stripped.startsWith('0') ? stripped.slice(1) : stripped;\n\t\t\t\t\t\t\t\tif (national !== raw) {\n\t\t\t\t\t\t\t\t\t\tconst syntheticEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\t\t\t\ttarget: { ...event.target, value: national },\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentTarget: { ...event.currentTarget, value: national },\n\t\t\t\t\t\t\t\t\t\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\t\t\t\t\t\t\tonChange(syntheticEvent);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange(event);\n\t\t\t\t},\n\t\t\t\t[onChange, selectedPrefix]\n\t\t);\n\n\t\t// Handle phone blur with normalization\n\t\tconst handleBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(\n\t\t\t\t(event) => {\n\t\t\t\t\t\tif (normalizeOnBlur && typeof onChange === 'function') {\n\t\t\t\t\t\t\t\tconst nextValue = normalizePhone(event.target.value, selectedPrefix);\n\t\t\t\t\t\t\t\tif (nextValue !== event.target.value) {\n\t\t\t\t\t\t\t\t\t\tconst syntheticEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\t\t\t\ttarget: { ...event.target, value: nextValue },\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentTarget: { ...event.currentTarget, value: nextValue },\n\t\t\t\t\t\t\t\t\t\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\n\t\t\t\t\t\t\t\t\t\tonChange(syntheticEvent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonBlur?.(event);\n\t\t\t\t},\n\t\t\t\t[normalizeOnBlur, onChange, onBlur, selectedPrefix]\n\t\t);\n\n\t\t// If no prefixes or disabled, render simple input with prefix display\n\t\tif (normalizedPrefixes.length === 0 || disablePrefixSelector) {\n\t\t\t\tconst staticPrefix = selectedPrefix || defaultPrefix;\n\n\t\t\t\tif (!staticPrefix) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tref={forwardedRef}\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"tel\"\n\t\t\t\t\t\t\t\t\t\tinputMode=\"tel\"\n\t\t\t\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('phone-input--component', className)}\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t\t<div className=\"flex items-start gap-space-md\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'flex items-center justify-center rounded-radius-md border border-input bg-muted',\n\t\t\t\t\t\t\t\t\t\t\t\tformControlSizeClasses[size],\n\t\t\t\t\t\t\t\t\t\t\t\tformControlHorizontalPaddingClasses[size],\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled && 'opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20'\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<Text tag=\"span\" size=\"inherit\" type=\"secondary\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t{staticPrefix}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\tref={forwardedRef}\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\ttype=\"tel\"\n\t\t\t\t\t\t\t\t\t\t\t\tautoComplete=\"tel\"\n\t\t\t\t\t\t\t\t\t\t\t\tinputMode=\"tel\"\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\t\t\t\t\t\tonBlur={handleBlur}\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\tclassName={className}\n\t\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\n\t\t// Render with prefix selector\n\t\treturn (\n\t\t\t\t<div className=\"flex items-start gap-space-md\">\n\t\t\t\t\t\t{/* Prefix selector */}\n\t\t\t\t\t\t<baseui.Select\n\t\t\t\t\t\t\t\tvalue={currentPrefixOption?.iso ?? null}\n\t\t\t\t\t\t\t\tonValueChange={(value) => handlePrefixChange(value)}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\t\t\t\taria-label={strings.prefixAriaLabel}\n\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\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\t'shrink-0 !shadow-none',\n\t\t\t\t\t\t\t\t\t\t\t\tprefixWidth,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed'\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{prefixPlaceholder ?? strings.prefixPlaceholder}\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\t\t\t\t{!!currentPrefixOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{currentPrefixOption.value}\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</baseui.SelectValue>\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{normalizedPrefixes.map((prefixOption) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupItem key={prefixOption.iso} value={prefixOption.iso} size={size}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!showPrefixInDropdown && (\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\" weight=\"medium\" className=\"min-w-13 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{prefixOption.value}\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\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!showCountryName && (\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\" 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\t\t{prefixOption.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\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\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\n\t\t\t\t\t\t{/* Phone number input */}\n\t\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tref={forwardedRef}\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"tel\"\n\t\t\t\t\t\t\t\t\t\tinputMode=\"tel\"\n\t\t\t\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t);\n}\n\n// forwardRef + memo: forward to the underlying phone input so consumers can\n// focus/measure programmatically (RHF Controller, parent imperative refs).\nexport const PhoneInput = memo(React.forwardRef<HTMLInputElement, PhoneInputProps>(PhoneInputImpl));\nPhoneInput.displayName = 'PhoneInput';\n","import * as React from 'react';\n\nimport { Stack } from '../structure';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport { Input, type InputProps, type InputStrings } from '../text-inputs';\n\nexport interface ColorInputStrings {\n\t/** Accessible label for the native color-picker trigger. */\n\tchooseColor: string;\n}\n\nexport const defaultColorInputStrings: ColorInputStrings = {\n\tchooseColor: 'Choose color',\n};\n\nexport interface ColorInputProps extends Omit<InputProps, 'type' | 'strings'> {\n\t/** CSS color expression shown by the swatch. Defaults to the current value. */\n\tpreviewValue?: string;\n\t/** CSS-color callback. Text entry is preserved verbatim; native picker values are normalized to OKLCH. */\n\tonValueChange?: (value: string) => void;\n\t/** Accessible label for the native color picker. Defaults to the component strings. */\n\tpickerAriaLabel?: string;\n\t/** ColorInput-owned accessible copy. */\n\tstrings?: StringsProp<ColorInputStrings>;\n\t/** Copy overrides forwarded to the underlying text Input. */\n\tinputStrings?: StringsProp<InputStrings>;\n}\n\nconst pickerSizeClasses: Record<FormControlSize, string> = {\n\tsm: 'size-control-sm',\n\tmd: 'size-control',\n\tlg: 'size-control-lg',\n};\n\nfunction normalizeHexColor(value: string): string | null {\n\tconst normalized = value.trim().toLowerCase();\n\tif (/^#[0-9a-f]{6}$/.test(normalized)) return normalized;\n\tif (/^#[0-9a-f]{3}$/.test(normalized)) {\n\t\treturn `#${normalized.slice(1).split('').map((part) => `${part}${part}`).join('')}`;\n\t}\n\treturn null;\n}\n\nfunction roundColorChannel(value: number, precision: number): number {\n\tconst rounded = Number(value.toFixed(precision));\n\treturn Object.is(rounded, -0) ? 0 : rounded;\n}\n\nfunction hexColorToOklch(value: string): string {\n\tconst normalized = normalizeHexColor(value);\n\tif (!normalized) return value;\n\n\tconst channels = [1, 3, 5].map((offset) => Number.parseInt(normalized.slice(offset, offset + 2), 16) / 255);\n\tconst [red, green, blue] = channels.map((channel) =>\n\t\tchannel <= 0.04045\n\t\t\t? channel / 12.92\n\t\t\t: ((channel + 0.055) / 1.055) ** 2.4,\n\t);\n\tconst lRoot = Math.cbrt(0.4122214708 * red + 0.5363325363 * green + 0.0514459929 * blue);\n\tconst mRoot = Math.cbrt(0.2119034982 * red + 0.6806995451 * green + 0.1073969566 * blue);\n\tconst sRoot = Math.cbrt(0.0883024619 * red + 0.2817188376 * green + 0.6299787005 * blue);\n\tconst lightness = 0.2104542553 * lRoot + 0.793617785 * mRoot - 0.0040720468 * sRoot;\n\tconst a = 1.9779984951 * lRoot - 2.428592205 * mRoot + 0.4505937099 * sRoot;\n\tconst b = 0.0259040371 * lRoot + 0.7827717662 * mRoot - 0.808675766 * sRoot;\n\tconst chroma = Math.hypot(a, b);\n\tconst hue = chroma < 0.00005\n\t\t? 0\n\t\t: (Math.atan2(b, a) * 180) / Math.PI + (b < 0 ? 360 : 0);\n\n\treturn `oklch(${roundColorChannel(lightness, 4)} ${roundColorChannel(chroma, 4)} ${roundColorChannel(hue, 2)})`;\n}\n\nfunction renderedColorToHex(element: HTMLElement, fallback: string): string {\n\tconst computedColor = window.getComputedStyle(element).backgroundColor;\n\tconst directHex = normalizeHexColor(computedColor);\n\tif (directHex) return directHex;\n\tif (typeof CanvasRenderingContext2D === 'undefined') return fallback;\n\n\ttry {\n\t\tconst canvas = document.createElement('canvas');\n\t\tcanvas.width = 1;\n\t\tcanvas.height = 1;\n\t\tconst context = canvas.getContext('2d', { willReadFrequently: true });\n\t\tif (!context) return fallback;\n\t\tcontext.clearRect(0, 0, 1, 1);\n\t\tcontext.fillStyle = computedColor;\n\t\tcontext.fillRect(0, 0, 1, 1);\n\t\tconst [red, green, blue, alpha] = context.getImageData(0, 0, 1, 1).data;\n\t\tif (alpha === 0) return fallback;\n\t\treturn `#${[red, green, blue]\n\t\t\t.map((channel) => channel.toString(16).padStart(2, '0'))\n\t\t\t.join('')}`;\n\t} catch {\n\t\treturn fallback;\n\t}\n}\n\n/**\n * CSS-color editor that pairs exact text entry with a native visual picker.\n * The swatch accepts modern CSS colors and inherited `var(...)` expressions;\n * the picker commits OKLCH values without narrowing text input.\n */\nexport const ColorInput = React.forwardRef<HTMLInputElement, ColorInputProps>(function ColorInput({\n\tclassName,\n\tvalue,\n\tdefaultValue,\n\tonChange,\n\tonValueChange,\n\tpreviewValue,\n\tpickerAriaLabel,\n\tsize: sizeProp,\n\tdisabled,\n\treadOnly,\n\tstrings: stringsProp,\n\tinputStrings,\n\t...props\n}, forwardedRef) {\n\tconst strings = useStrings(defaultColorInputStrings, stringsProp);\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst [internalValue, setInternalValue] = React.useState(defaultValue ?? '');\n\tconst resolvedValue = value ?? internalValue;\n\tconst resolvedPreview = previewValue ?? resolvedValue;\n\tconst initialPickerValue = normalizeHexColor(resolvedValue) ?? '#000000';\n\tconst [pickerValue, setPickerValue] = React.useState(initialPickerValue);\n\tconst swatchRef = React.useRef<HTMLSpanElement>(null);\n\n\tReact.useLayoutEffect(() => {\n\t\tconst directHex = normalizeHexColor(resolvedPreview);\n\t\tif (directHex) {\n\t\t\tsetPickerValue(directHex);\n\t\t\treturn;\n\t\t}\n\t\tif (!swatchRef.current || typeof window === 'undefined') return;\n\t\tsetPickerValue((current) => renderedColorToHex(swatchRef.current as HTMLElement, current));\n\t}, [resolvedPreview]);\n\n\tconst publishChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (value === undefined) setInternalValue(event.target.value);\n\t\tonChange?.(event);\n\t\tonValueChange?.(event.target.value);\n\t};\n\tconst publishPickerInput = (event: React.FormEvent<HTMLInputElement>) => {\n\t\tconst nextValue = hexColorToOklch(event.currentTarget.value);\n\t\tif (value === undefined) setInternalValue(nextValue);\n\t\tif (onChange) {\n\t\t\tconst normalizedEvent = {\n\t\t\t\t...event,\n\t\t\t\ttarget: { ...event.currentTarget, value: nextValue },\n\t\t\t\tcurrentTarget: { ...event.currentTarget, value: nextValue },\n\t\t\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\t\t\tonChange(normalizedEvent);\n\t\t}\n\t\tonValueChange?.(nextValue);\n\t};\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"horizontal\"\n\t\t\tgap=\"sm\"\n\t\t\talign=\"center\"\n\t\t\twrap={false}\n\t\t\tclassName={cn(\n\t\t\t\t'color-input--component min-w-0 [&>.input--component]:min-w-0 [&>.input--component]:flex-1',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<label\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'color-input--picker relative shrink-0 cursor-pointer overflow-hidden rounded-radius border border-input bg-background shadow-xs',\n\t\t\t\t\t'focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50',\n\t\t\t\t\t'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50',\n\t\t\t\t\tpickerSizeClasses[size],\n\t\t\t\t)}\n\t\t\t\tdata-disabled={disabled || readOnly || undefined}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tref={swatchRef}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tdata-user-color\n\t\t\t\t\tclassName=\"color-input--swatch absolute inset-1 rounded-[calc(var(--radius)-2px)]\"\n\t\t\t\t\tstyle={{ background: resolvedPreview || 'transparent' }}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"color\"\n\t\t\t\t\tvalue={pickerValue}\n\t\t\t\t\tdisabled={disabled || readOnly}\n\t\t\t\t\taria-label={pickerAriaLabel ?? strings.chooseColor}\n\t\t\t\t\tonInput={publishPickerInput}\n\t\t\t\t\tclassName=\"color-input--native absolute inset-0 size-full cursor-pointer opacity-0\"\n\t\t\t\t/>\n\t\t\t</label>\n\t\t\t{/*\n\t\t\t * `font-mono` keeps the hex value column-aligned; the size is left to\n\t\t\t * `Input` so the value matches every other control instead of\n\t\t\t * rendering a step smaller than its own label.\n\t\t\t */}\n\t\t\t<Input\n\t\t\t\t{...props}\n\t\t\t\tref={forwardedRef}\n\t\t\t\tsize={size}\n\t\t\t\tvalue={resolvedValue}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tonChange={publishChange}\n\t\t\t\tstrings={inputStrings}\n\t\t\t\tclassName=\"min-w-0 flex-1 font-mono\"\n\t\t\t/>\n\t\t</Stack>\n\t);\n});\n\nColorInput.displayName = 'ColorInput';\n","import { sliderTrackThickness } from '../../../lib/track-recipes';\nimport * as React from 'react';\nimport { useCallback, useId, useMemo, type ElementRef } from 'react';\nimport { Slider as SliderPrimitive } from '@base-ui/react/slider';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nexport interface SliderStrings {\n\t/** Accessible fallback name for the native range input. */\n\tariaLabel: string;\n}\n\nexport const defaultSliderStrings: SliderStrings = {\n\tariaLabel: 'Value',\n};\n\nexport interface SliderImitationEvent {\n\ttarget: {\n\t\tname: string;\n\t\tvalue: number;\n\t};\n}\n\nexport interface SliderProps {\n\t/** Field name for form integration */\n\tname?: string;\n\n\t/** Element id */\n\tid?: string;\n\n\t/** Accessible name when a visible label is not associated with the slider. */\n\t'aria-label'?: string;\n\t/** Id of the visible label associated with the slider. */\n\t'aria-labelledby'?: string;\n\t/** Id of supporting or validation copy associated with the slider. */\n\t'aria-describedby'?: string;\n\t/** Localizes the fallback native-range name. */\n\tstrings?: StringsProp<SliderStrings>;\n\n\t/** Current value (single thumb) */\n\tvalue?: number;\n\n\t/** Default value when uncontrolled */\n\tdefaultValue?: number;\n\n\t/** Minimum value. Defaults to 0 */\n\tmin?: number;\n\n\t/** Maximum value. Defaults to 100 */\n\tmax?: number;\n\n\t/** Step increment. Defaults to 1 */\n\tstep?: number;\n\n\t/** Whether the slider is disabled */\n\tdisabled?: boolean;\n\n\t/** Error state for styling (passed from FormField) */\n\tinvalid?: boolean;\n\n\t/** Event-style change handler for react-hook-form compatibility */\n\tonChange?: (event: SliderImitationEvent) => void;\n\n\t/** Raw value change handler (alternative to onChange) */\n\tonValueChange?: (value: number) => void;\n\n\t/** Fires on pointer up / keyboard commit */\n\tonValueCommitted?: (value: number) => void;\n\n\t/** Show the current value next to the slider */\n\tshowValue?: boolean;\n\n\t/** Format the displayed value */\n\tformatValue?: (value: number) => string;\n\n\t/** Unit suffix displayed after the value (e.g. \"px\", \"%\", \"mm\") */\n\tunit?: string;\n\n\t/** Additional class name for the root wrapper */\n\tclassName?: string;\n\n\t/** Orientation */\n\torientation?: 'horizontal' | 'vertical';\n}\n\ntype SliderElement = ElementRef<typeof SliderPrimitive.Root>;\n\nfunction SliderFieldImpl(\n\t{\n\t\tname,\n\t\tid,\n\t\t'aria-label': ariaLabel,\n\t\t'aria-labelledby': ariaLabelledBy,\n\t\t'aria-describedby': ariaDescribedBy,\n\t\tstrings: stringsProp,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tmin = 0,\n\t\tmax = 100,\n\t\tstep = 1,\n\t\tdisabled = false,\n\t\tinvalid = false,\n\t\tonChange,\n\t\tonValueChange,\n\t\tonValueCommitted,\n\t\tshowValue = false,\n\t\tformatValue,\n\t\tunit,\n\t\tclassName,\n\t\torientation = 'horizontal',\n\t}: SliderProps,\n\tref: React.ForwardedRef<SliderElement>,\n) {\n\tconst generatedId = useId();\n\tconst strings = useStrings(defaultSliderStrings, stringsProp);\n\tconst resolvedId = id ?? `slider-${generatedId}`;\n\tconst resolvedName = name ?? resolvedId;\n\tconst resolvedAriaLabel = ariaLabel ?? strings.ariaLabel;\n\n\tconst handleValueChange = useCallback(\n\t\t(newValue: number | readonly number[]) => {\n\t\t\tconst singleValue = Array.isArray(newValue) ? newValue[0] : newValue;\n\n\t\t\tonValueChange?.(singleValue);\n\n\t\t\tonChange?.({\n\t\t\t\ttarget: { name: resolvedName, value: singleValue },\n\t\t\t});\n\t\t},\n\t\t[resolvedName, onChange, onValueChange]\n\t);\n\n\tconst handleValueCommitted = useCallback(\n\t\t(newValue: number | readonly number[]) => {\n\t\t\tconst singleValue = Array.isArray(newValue) ? newValue[0] : newValue;\n\t\t\tonValueCommitted?.(singleValue);\n\t\t},\n\t\t[onValueCommitted]\n\t);\n\n\tconst displayValue = useMemo(() => {\n\t\tif (!showValue) return null;\n\n\t\tconst currentValue = value ?? defaultValue ?? min;\n\n\t\tif (formatValue) return formatValue(currentValue);\n\n\t\treturn unit ? `${currentValue}${unit}` : String(currentValue);\n\t}, [showValue, value, defaultValue, min, formatValue, unit]);\n\n\t// Wrap single value in array for the primitive\n\tconst sliderValue = value !== undefined ? [value] : undefined;\n\tconst sliderDefaultValue = defaultValue !== undefined ? [defaultValue] : [min];\n\n\treturn (\n\t\t<div className={cn('slider--component', 'flex items-center gap-space-lg', className)}>\n\t\t\t<SliderPrimitive.Root\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"slider\"\n\t\t\t\tid={resolvedId}\n\t\t\t\taria-label={resolvedAriaLabel}\n\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\tvalue={sliderValue}\n\t\t\t\tdefaultValue={sliderDefaultValue}\n\t\t\t\tmin={min}\n\t\t\t\tmax={max}\n\t\t\t\tstep={step}\n\t\t\t\tdisabled={disabled}\n\t\t\t\torientation={orientation}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tonValueCommitted={handleValueCommitted}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'box-border data-[orientation=horizontal]:w-full data-[orientation=horizontal]:px-control data-[orientation=vertical]:h-full',\n\t\t\t\t\t'min-w-0 flex-1',\n\t\t\t\t\tinvalid && '[&_[data-slot=slider-range]]:bg-destructive [&_[data-slot=slider-thumb]]:border-destructive',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<SliderPrimitive.Control className=\"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=horizontal]:min-h-control data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\">\n\t\t\t\t\t<SliderPrimitive.Track\n\t\t\t\t\t\tdata-slot=\"slider-track\"\n\t\t\t\t\t\tclassName={cn('relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full', sliderTrackThickness)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<SliderPrimitive.Indicator\n\t\t\t\t\t\t\tdata-slot=\"slider-range\"\n\t\t\t\t\t\t\tclassName=\"absolute bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SliderPrimitive.Track>\n\t\t\t\t\t<SliderPrimitive.Thumb\n\t\t\t\t\t\tindex={0}\n\t\t\t\t\t\tdata-slot=\"slider-thumb\"\n\t\t\t\t\t\tgetAriaLabel={() => resolvedAriaLabel}\n\t\t\t\t\t\tclassName=\"block size-icon shrink-0 rounded-full border border-primary bg-background shadow-sm ring-ring/50 transition-[color,box-shadow] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</SliderPrimitive.Control>\n\t\t\t</SliderPrimitive.Root>\n\n\t\t\t{!!showValue && displayValue !== null && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype={invalid ? 'error' : 'secondary'}\n\t\t\t\t\tclassName=\"min-w-8 shrink-0 text-right tabular-nums\"\n\t\t\t\t>\n\t\t\t\t\t{displayValue}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst SliderField = React.forwardRef<SliderElement, SliderProps>(SliderFieldImpl);\nSliderField.displayName = 'SliderField';\n\nexport { SliderField };\n","import { forwardRef, useCallback } from 'react';\nimport { DatePicker } from '../date-pickers/date-picker';\nimport type { DateOutput } from '../date-pickers/datepicker.types';\n\nexport interface DateTimeInputProps {\n\t/** Controlled value (ISO string) */\n\tvalue?: string;\n\n\t/** Change handler */\n\tonValueChange?: (value: string | undefined) => void;\n\n\t/** Placeholder text */\n\tplaceholder?: string;\n\n\t/** Display format for the date */\n\treadableFormat?: string;\n\n\t/** Step for time selection in minutes */\n\tstepMinutes?: number;\n\n\t/** Use modal for picker */\n\tmodal?: boolean;\n\n\t/** Error state for styling (passed from FormField) */\n\tinvalid?: boolean;\n\n\t/** Disabled state */\n\tdisabled?: boolean;\n}\n\nexport const DateTimeInput = forwardRef<HTMLDivElement, DateTimeInputProps>(function DateTimeInput({\n\tvalue,\n\tonValueChange,\n\tplaceholder,\n\treadableFormat = 'dd-MM-yyyy HH:mm',\n\tstepMinutes = 30,\n\tmodal = true,\n\tinvalid,\n\tdisabled,\n}: DateTimeInputProps, ref) {\n\tconst dateValue = value ? new Date(value) : undefined;\n\tconst errorValue = invalid ? ' ' : undefined;\n\n\tconst handleChange = useCallback(\n\t\t(output: DateOutput) => {\n\t\t\tonValueChange?.(output.date ? output.date.toISOString() : undefined);\n\t\t},\n\t\t[onValueChange]\n\t);\n\n\treturn (\n\t\t<DatePicker ref={ref} className=\"date-time-input--component\"\n\t\t\tmode=\"single\"\n\t\t\tdisabled={disabled}\n\t\t\terror={errorValue}\n\t\t\tplaceholder={placeholder}\n\t\t\tvalue={dateValue}\n\t\t\tonValueChange={handleChange}\n\t\t\treadableFormat={readableFormat}\n\t\t\twithTime={{ enabled: true, format: '24', step: stepMinutes }}\n\t\t\tmodal={modal}\n\t\t/>\n\t);\n});\n\nDateTimeInput.displayName = 'DateTimeInput';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-C1PZmk8L.js","names":["Icon","React","_Fragment","Text","DisplayLabel","Stack","Progress","Value","SecondaryValue","Badge","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","useLayoutLinkRenderer","React$1","Fragment$1","defaultWorkspaceRecordHeaderStrings","defaultWorkspaceNavStrings","value","defaultWorkspaceLocaleStripStrings","CONTENT_WIDTH_CLASS","STATUS_ICON","Check","Circle","CircleAlert","STATUS_CLASS","clampPercent","DynamicWorkspaceIcon","icon","getStatus","item","active","WorkspaceLayout","props","hasSidebar","sidebar","hasRail","rail","ariaLabel","cn","contentWidth","className","header","headerClassName","bodyClassName","sidebarClassName","mainClassName","contentClassName","railClassName","WorkspaceRecordHeader","stringsProp","strings","useStrings","hasMetadata","metadata","media","titleSlot","Heading","title","badges","status","description","index","actions","secondaryActions","headerEnd","WorkspaceNav","resolvedRenderLink","groups","group","activeId","StatusIcon","completion","handleSelect","context","renderItem","rowContent","itemClassName","linkNode","footerSlot","WorkspaceLocaleStrip","handleLocaleClick","locale","onLocaleChange","locales","activeLocale","Button"],"sources":["../src/components/layout/workspace/workspace.strings.ts","../src/components/layout/workspace/workspace.tsx"],"sourcesContent":["export interface WorkspaceRecordHeaderStrings {\n\tmetadataLabel: string;\n\tactionsLabel: string;\n\tsecondaryActionsLabel: string;\n}\n\nexport const defaultWorkspaceRecordHeaderStrings: WorkspaceRecordHeaderStrings = {\n\tmetadataLabel: 'Record metadata',\n\tactionsLabel: 'Record actions',\n\tsecondaryActionsLabel: 'Secondary actions',\n};\n\nexport interface WorkspaceNavStrings {\n\tariaLabel: string;\n\tcompletionLabel: (value: number) => string;\n\tcurrentLabel: string;\n}\n\nexport const defaultWorkspaceNavStrings: WorkspaceNavStrings = {\n\tariaLabel: 'Workspace navigation',\n\tcompletionLabel: (value) => `${value}% complete`,\n\tcurrentLabel: 'Current',\n};\n\nexport interface WorkspaceLocaleStripStrings {\n\tariaLabel: string;\n\tactiveLabel: string;\n\tcompletionLabel: (value: number) => string;\n}\n\nexport const defaultWorkspaceLocaleStripStrings: WorkspaceLocaleStripStrings = {\n\tariaLabel: 'Workspace locales',\n\tactiveLabel: 'Active',\n\tcompletionLabel: (value) => `${value}% complete`,\n};\n","import * as React from 'react';\nimport {\n\tCheck,\n\tCircle,\n\tCircleAlert,\n\ttype LucideIcon,\n\t} from 'lucide-react';\n\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Progress } from '../../base/feedback';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { SecondaryValue, Value } from '../../primitives';\nimport { DisplayLabel, Heading, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type { LayoutIconComponent } from '../layout.types';\nimport {\n\tdefaultWorkspaceLocaleStripStrings,\n\tdefaultWorkspaceNavStrings,\n\tdefaultWorkspaceRecordHeaderStrings,\n} from './workspace.strings';\nimport type {\n\tWorkspaceContentWidth,\n\tWorkspaceLayoutProps,\n\tWorkspaceLocaleItem,\n\tWorkspaceLocaleStripProps,\n\tWorkspaceNavItem,\n\tWorkspaceNavItemStatus,\n\tWorkspaceNavProps,\n\tWorkspaceRecordHeaderProps,\n} from './workspace.types';\n\nconst CONTENT_WIDTH_CLASS: Record<WorkspaceContentWidth, string> = {\n\tdefault: '[--workspace-content-max-width:58rem]',\n\twide: '[--workspace-content-max-width:86rem]',\n\tfull: '[--workspace-content-max-width:none]',\n};\n\nconst STATUS_ICON: Record<WorkspaceNavItemStatus, LucideIcon> = {\n\tcomplete: Check,\n\tcurrent: Circle,\n\tattention: CircleAlert,\n\tdisabled: Circle,\n\tidle: Circle,\n};\n\nconst STATUS_CLASS: Record<WorkspaceNavItemStatus, string> = {\n\tcomplete: 'text-success',\n\tcurrent: 'text-primary-accent',\n\tattention: 'text-warning',\n\tdisabled: 'text-muted-foreground/40',\n\tidle: 'text-muted-foreground',\n};\n\nfunction clampPercent(value: number): number {\n\tif (!Number.isFinite(value)) return 0;\n\treturn Math.min(100, Math.max(0, Math.round(value)));\n}\n\nfunction DynamicWorkspaceIcon({\n\ticon,\n\tclassName,\n}: {\n\t/** Leading glyph. */\n\ticon?: LayoutIconComponent;\n\tclassName?: string;\n}) {\n\tif (!icon) return null;\n\tconst Icon = icon;\n\treturn <Icon className={className} aria-hidden=\"true\" />;\n}\n\nfunction getStatus(item: WorkspaceNavItem, active: boolean): WorkspaceNavItemStatus {\n\tif (item.disabled) return 'disabled';\n\tif (item.status) return item.status;\n\tif (item.warning) return 'attention';\n\tif (active) return 'current';\n\tif (item.completion !== undefined && clampPercent(item.completion) >= 100) return 'complete';\n\treturn 'idle';\n}\n\nexport const WorkspaceLayout = React.forwardRef<HTMLDivElement, WorkspaceLayoutProps>(function WorkspaceLayout({\n\theader,\n\tsidebar,\n\trail,\n\tchildren,\n\tcontentWidth = 'wide',\n\tclassName,\n\theaderClassName,\n\tbodyClassName,\n\tsidebarClassName,\n\tmainClassName,\n\tcontentClassName,\n\trailClassName,\n\tariaLabel,\n\tstyle,\n\t...props\n}, ref) {\n\tconst hasSidebar = !!sidebar;\n\tconst hasRail = !!rail;\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn(\n\t\t\t\t'workspace-layout--component flex h-full min-h-0 w-full flex-col overflow-hidden rounded-radius-md border border-border bg-background text-foreground',\n\t\t\t\t'[--workspace-sidebar-width:16rem] [--workspace-rail-width:20rem]',\n\t\t\t\tCONTENT_WIDTH_CLASS[contentWidth],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={style}\n\t\t\t{...props}\n\t\t>\n\t\t\t{!!header && (\n\t\t\t\t<header className={cn('workspace-layout--header shrink-0 border-b border-border bg-background', headerClassName)}>\n\t\t\t\t\t{header}\n\t\t\t\t</header>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'workspace-layout--body grid min-h-0 flex-1 grid-cols-1 bg-muted/20',\n\t\t\t\t\thasSidebar && !hasRail && 'min-[80rem]:grid-cols-[var(--workspace-sidebar-width)_minmax(0,1fr)]',\n\t\t\t\t\thasSidebar && hasRail && 'min-[80rem]:grid-cols-[var(--workspace-sidebar-width)_minmax(0,1fr)] min-[96rem]:grid-cols-[var(--workspace-sidebar-width)_minmax(0,1fr)_var(--workspace-rail-width)]',\n\t\t\t\t\t!hasSidebar && hasRail && 'min-[96rem]:grid-cols-[minmax(0,1fr)_var(--workspace-rail-width)]',\n\t\t\t\t\tbodyClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!hasSidebar && (\n\t\t\t\t\t<aside\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'workspace-layout--sidebar hidden min-h-0 border-r border-border bg-background min-[80rem]:block',\n\t\t\t\t\t\t\tsidebarClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full overflow-y-auto overscroll-contain p-space-lg\">\n\t\t\t\t\t\t\t{sidebar}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</aside>\n\t\t\t\t)}\n\t\t\t\t<main\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'workspace-layout--main min-h-0 min-w-0 overflow-y-auto overscroll-contain focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/70 focus-visible:ring-inset',\n\t\t\t\t\t\tmainClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'workspace-layout--content mx-auto flex min-h-full w-full max-w-[var(--workspace-content-max-width)] flex-col gap-space-xl p-4 min-[64rem]:p-5',\n\t\t\t\t\t\t\tcontentWidth === 'full' && 'max-w-none',\n\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</main>\n\t\t\t\t{!!hasRail && (\n\t\t\t\t\t<aside\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'workspace-layout--rail hidden min-h-0 border-l border-border bg-background min-[96rem]:block',\n\t\t\t\t\t\t\trailClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full overflow-y-auto overscroll-contain p-space-lg\">\n\t\t\t\t\t\t\t{rail}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</aside>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nWorkspaceLayout.displayName = 'WorkspaceLayout';\n\nexport const WorkspaceRecordHeader = React.forwardRef<HTMLDivElement, WorkspaceRecordHeaderProps>(function WorkspaceRecordHeader({\n\ttitle,\n\tdescription,\n\tbadges,\n\tmetadata,\n\tactions,\n\tsecondaryActions,\n\tstatus,\n\tmedia,\n\theaderEnd,\n\ttitleSlot,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultWorkspaceRecordHeaderStrings, stringsProp);\n\tconst hasMetadata = !!metadata?.length;\n\n\treturn (\n\t\t<Stack\n\t\t\tref={ref}\n\t\t\tdirection={{ base: 'vertical', lg: 'horizontal' }}\n\t\t\tgap=\"xl\"\n\t\t\talign={{ lg: 'start' }}\n\t\t\tjustify={{ lg: 'between' }}\n\t\t\twrap={{ base: false, lg: false }}\n\t\t\tclassName={cn(\n\t\t\t\t'workspace-record-header--component px-4 py-4 lg:px-5',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"lg\" align=\"start\" wrap={false} className=\"workspace-record-header--identity flex-1\">\n\t\t\t\t{!!media && (\n\t\t\t\t\t<div className=\"workspace-record-header--media flex size-12 shrink-0 items-center justify-center overflow-hidden rounded-radius-md border border-border bg-muted/40\">\n\t\t\t\t\t\t{media}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t\t<Stack gap=\"md\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" className=\"workspace-record-header--title-row\">\n\t\t\t\t\t\t{titleSlot ?? (\n\t\t\t\t\t\t\t<Heading tag=\"h4\" className=\"leading-tight\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!badges && <Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\" className=\"workspace-record-header--badges\">{badges}</Stack>}\n\t\t\t\t\t\t\t{!!status && <div className=\"workspace-record-header--status\">{status}</div>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\" className=\"workspace-record-header--description max-w-4xl leading-relaxed\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!hasMetadata && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-label={strings.metadataLabel}\n\t\t\t\t\t\t\tclassName=\"workspace-record-header--metadata flex flex-wrap items-center gap-x-space-xl gap-y-space-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{metadata.map((item, index) => (\n\t\t\t\t\t\t\t\t<div key={item.id ?? index} className=\"flex items-baseline gap-space-sm\">\n\t\t\t\t\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t<Value weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t\t\t\t</Value>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t{!!(actions || secondaryActions || headerEnd) && (\n\t\t\t\t<div className=\"workspace-record-header--actions flex shrink-0 flex-wrap items-center gap-space-md min-[64rem]:justify-end\">\n\t\t\t\t\t{!!secondaryActions && (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\" aria-label={strings.secondaryActionsLabel}>\n\t\t\t\t\t\t\t{secondaryActions}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!actions && (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\" aria-label={strings.actionsLabel}>\n\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!headerEnd && <div className=\"workspace-record-header--end\">{headerEnd}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nWorkspaceRecordHeader.displayName = 'WorkspaceRecordHeader';\n\nexport const WorkspaceNav = React.forwardRef<HTMLElement, WorkspaceNavProps>(function WorkspaceNav({\n\tgroups,\n\tactiveId,\n\tonSelect,\n\trenderItem,\n\tfooterSlot,\n\trenderLink,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultWorkspaceNavStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\n\treturn (\n\t\t<Stack\n\t\t\trender={(\n\t\t\t\t<nav\n\t\t\t\t\tref={ref}\n\t\t\t\t\taria-label={props['aria-label'] ?? strings.ariaLabel}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tgap=\"xl\"\n\t\t\tclassName={cn('workspace-nav--component h-full', className)}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"workspace-nav--groups min-h-0 flex-1\">\n\t\t\t\t{groups.map((group) => (\n\t\t\t\t\t<Stack key={group.id} gap=\"md\" className=\"workspace-nav--group\">\n\t\t\t\t\t\t{!!group.label && (\n\t\t\t\t\t\t\t<div className=\"workspace-nav--group-header px-space-xs\">\n\t\t\t\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t{!!group.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 leading-snug\">\n\t\t\t\t\t\t\t\t\t\t{group.description}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<ItemGroup className=\"workspace-nav--items gap-space-xs\">\n\t\t\t\t\t\t\t{group.items.map((item, index) => {\n\t\t\t\t\t\t\t\tconst active = item.id === activeId;\n\t\t\t\t\t\t\t\tconst status = getStatus(item, active);\n\t\t\t\t\t\t\t\tconst StatusIcon = STATUS_ICON[status];\n\t\t\t\t\t\t\t\tconst completion = item.completion === undefined ? undefined : clampPercent(item.completion);\n\t\t\t\t\t\t\t\tconst handleSelect = (event: React.MouseEvent<HTMLElement>) => {\n\t\t\t\t\t\t\t\t\tif (item.disabled) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonSelect?.(item);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst context = { active, group, index, onSelect: handleSelect };\n\n\t\t\t\t\t\t\t\tif (renderItem) {\n\t\t\t\t\t\t\t\t\treturn <React.Fragment key={item.id}>{renderItem(item, context)}</React.Fragment>;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst rowContent = (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className={cn(active && 'bg-primary/10 text-primary-accent')}>\n\t\t\t\t\t\t\t\t\t\t\t{item.icon ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<DynamicWorkspaceIcon icon={item.icon} className=\"size-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<StatusIcon className={cn('size-icon-md', STATUS_CLASS[status])} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<ItemTitle>{item.label}</ItemTitle>\n\t\t\t\t\t\t\t\t\t\t\t\t{active && (\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">{strings.currentLabel}</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\t</div>\n\t\t\t\t\t\t\t\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mt-1.5 flex items-center gap-space-md\">\n\t\t\t\t\t\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.completionLabel(completion)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex-1\"\n\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<SecondaryValue size=\"xs\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.completionLabel(completion)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t\t\t{!!item.badge && <ItemActions>{item.badge}</ItemActions>}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst itemClassName = cn(\n\t\t\t\t\t\t\t\t\t'workspace-nav--item w-full border border-transparent px-2 py-2 text-left transition-colors',\n\t\t\t\t\t\t\t\t\tactive && 'border-primary/20 bg-primary/5',\n\t\t\t\t\t\t\t\t\titem.warning && !active && 'border-warning/30 bg-warning/5',\n\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (item.href) {\n\t\t\t\t\t\t\t\t\tconst linkNode = resolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\t\t\t\tchildren: rowContent,\n\t\t\t\t\t\t\t\t\t\tclassName: 'block',\n\t\t\t\t\t\t\t\t\t\tactive,\n\t\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t\t\texternal: item.external,\n\t\t\t\t\t\t\t\t\t\ttarget: item.target,\n\t\t\t\t\t\t\t\t\t\trel: item.rel,\n\t\t\t\t\t\t\t\t\t\tonClick: handleSelect as React.MouseEventHandler<HTMLAnchorElement>,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Item key={item.id} size=\"md\" render={linkNode as React.ReactElement} className={itemClassName}>\n\t\t\t\t\t\t\t\t\t\t\t{rowContent}\n\t\t\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\t\t\trender={<button type=\"button\" onClick={handleSelect} disabled={item.disabled} />}\n\t\t\t\t\t\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{rowContent}\n\t\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Stack>\n\t\t\t{!!footerSlot && <div className=\"workspace-nav--footer shrink-0 border-t border-border pt-space-lg\">{footerSlot}</div>}\n\t\t</Stack>\n\t);\n});\n\nWorkspaceNav.displayName = 'WorkspaceNav';\n\nexport const WorkspaceLocaleStrip = React.forwardRef<HTMLDivElement, WorkspaceLocaleStripProps>(function WorkspaceLocaleStrip({\n\tlocales,\n\tactiveLocale,\n\tonLocaleChange,\n\tactions,\n\tstatus,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultWorkspaceLocaleStripStrings, stringsProp);\n\n\tconst handleLocaleClick = (locale: WorkspaceLocaleItem) => {\n\t\tif (locale.disabled) return;\n\t\tonLocaleChange?.(locale);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={cn('workspace-locale-strip--component flex flex-col gap-space-lg border-t border-border bg-muted/20 px-4 py-3 min-[64rem]:flex-row min-[64rem]:items-center min-[64rem]:justify-between min-[64rem]:px-5', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\" className=\"workspace-locale-strip--locales min-w-0\" role=\"group\" aria-label={strings.ariaLabel}>\n\t\t\t\t{locales.map((locale) => {\n\t\t\t\t\tconst active = locale.id === activeLocale;\n\t\t\t\t\tconst completion = locale.completion === undefined ? undefined : clampPercent(locale.completion);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={locale.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={active ? 'primary' : 'secondary'}\n\t\t\t\t\t\t\tbuttonStyle={active ? 'solid' : 'ghost'}\n\t\t\t\t\t\t\tonClick={() => handleLocaleClick(locale)}\n\t\t\t\t\t\t\tdisabled={locale.disabled}\n\t\t\t\t\t\t\taria-pressed={active}\n\t\t\t\t\t\t\tclassName={cn('workspace-locale-strip--item h-auto min-h-action-sm justify-start px-control-sm py-1.5')}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\" render={<span />} className=\"min-w-0\">\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"truncate text-inherit\">{locale.label}</Text>\n\t\t\t\t\t\t\t{active && <Text tag=\"span\" size=\"inherit\" className=\"sr-only\">{strings.activeLabel}</Text>}\n\t\t\t\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t\t\t\t/* On an active pill the button surface is solid, so the tonal\n\t\t\t\t\t\t\t\t\t badge variants land coloured-on-coloured. Derive the nested\n\t\t\t\t\t\t\t\t\t badge from the primary foreground pair so it remains legible\n\t\t\t\t\t\t\t\t\t when dark themes intentionally lighten `--primary`. */\n\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\ttone={completion >= 100 ? 'success' : 'secondary'}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'shrink-0',\n\t\t\t\t\t\t\t\t\t\t\tactive && 'border-primary-foreground/20 bg-primary-foreground/10 text-primary-foreground',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.completionLabel(completion)}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!locale.status && <span className=\"shrink-0\">{locale.status}</span>}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t\t{!!(status || actions) && (\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\" className=\"workspace-locale-strip--actions shrink-0\">\n\t\t\t\t\t{!!status && <div className=\"workspace-locale-strip--status\">{status}</div>}\n\t\t\t\t\t{!!actions && <Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\" className=\"\">{actions}</Stack>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n\nWorkspaceLocaleStrip.displayName = 'WorkspaceLocaleStrip';\n"],"mappings":"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"}