themelia-react-ui 2.0.5 → 2.0.6

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 (489) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/MIGRATION.md +119 -0
  3. package/README.md +13 -6
  4. package/dist/{accordion-B9MHG0cT.js → accordion-0tQUZ20r.js} +7 -7
  5. package/dist/accordion-0tQUZ20r.js.map +1 -0
  6. package/dist/{action-menu-Dr8K-ghE.js → action-menu-C0gjzLyE.js} +7 -7
  7. package/dist/{action-menu-Dr8K-ghE.js.map → action-menu-C0gjzLyE.js.map} +1 -1
  8. package/dist/{ai-artifact-C58tQcBy.js → ai-artifact-CGGpQryR.js} +172 -157
  9. package/dist/ai-artifact-CGGpQryR.js.map +1 -0
  10. package/dist/{app-shell-B_IuNWOo.js → app-shell-EHuuRDGy.js} +5 -5
  11. package/dist/{app-shell-B_IuNWOo.js.map → app-shell-EHuuRDGy.js.map} +1 -1
  12. package/dist/{attachment-Dg_69lPS.js → attachment-BCpA4e7i.js} +8 -8
  13. package/dist/{attachment-Dg_69lPS.js.map → attachment-BCpA4e7i.js.map} +1 -1
  14. package/dist/{auth-DTkkshS8.js → auth-B0girIk_.js} +15 -15
  15. package/dist/auth-B0girIk_.js.map +1 -0
  16. package/dist/{avatar-CeZaFmNH.js → avatar-B9Jnp-T-.js} +3 -3
  17. package/dist/{avatar-CeZaFmNH.js.map → avatar-B9Jnp-T-.js.map} +1 -1
  18. package/dist/{badge-xIiV_E7f.js → badge-wWauMgAt.js} +3 -3
  19. package/dist/{badge-xIiV_E7f.js.map → badge-wWauMgAt.js.map} +1 -1
  20. package/dist/base/accordion.js +1 -1
  21. package/dist/base/action-menu.js +1 -1
  22. package/dist/base/attachment.js +1 -1
  23. package/dist/base/avatar.js +1 -1
  24. package/dist/base/badge.js +1 -1
  25. package/dist/base/batch-action-bar.js +1 -1
  26. package/dist/base/buttons.js +1 -1
  27. package/dist/base/cards.js +2 -2
  28. package/dist/base/carousel.js +3 -3
  29. package/dist/base/cascader.js +1 -1
  30. package/dist/base/chart.js +1 -1
  31. package/dist/base/choice-inputs.js +2 -2
  32. package/dist/base/code-block.js +1 -1
  33. package/dist/base/combobox.js +1 -1
  34. package/dist/base/command.js +1 -1
  35. package/dist/base/copyable.js +1 -1
  36. package/dist/base/date-pickers.js +2 -2
  37. package/dist/base/display.js +6 -6
  38. package/dist/base/feedback.js +4 -4
  39. package/dist/base/forms-numeric.js +1 -1
  40. package/dist/base/forms.js +2 -2
  41. package/dist/base/inline-edit.js +8 -8
  42. package/dist/base/item.js +1 -1
  43. package/dist/base/media-gallery.js +1 -1
  44. package/dist/base/metadata-list.js +1 -1
  45. package/dist/base/navigation.js +6 -6
  46. package/dist/base/popover-menu.js +1 -1
  47. package/dist/base/popover.js +1 -1
  48. package/dist/base/qr-code.js +1 -1
  49. package/dist/base/repeaters.js +195 -188
  50. package/dist/base/repeaters.js.map +1 -1
  51. package/dist/base/sheet.js +1 -1
  52. package/dist/base/sidebar.js +2 -2
  53. package/dist/base/signature-pad.js +7 -7
  54. package/dist/base/skeleton.js +1 -1
  55. package/dist/base/spinner.js +5 -5
  56. package/dist/base/spinner.js.map +1 -1
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +1 -1
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-BoqWIIpV.js} +5 -5
  66. package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-BoqWIIpV.js.map} +1 -1
  67. package/dist/blocks/admin.js +17 -17
  68. package/dist/blocks/ai.js +227 -221
  69. package/dist/blocks/ai.js.map +1 -1
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +424 -449
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +225 -220
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-J-K2kl4c.js → breadcrumbs-Bp9Ke7kd.js} +4 -4
  82. package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
  83. package/dist/{button-S2Cubiiz.js → button-ChBovTx0.js} +2 -2
  84. package/dist/{button-S2Cubiiz.js.map → button-ChBovTx0.js.map} +1 -1
  85. package/dist/{buttons-BedGfygC.js → buttons-DeW0bQeK.js} +6 -6
  86. package/dist/{buttons-BedGfygC.js.map → buttons-DeW0bQeK.js.map} +1 -1
  87. package/dist/{cards-rNX1M4Xn.js → cards-CNXnmvV5.js} +8 -8
  88. package/dist/{cards-rNX1M4Xn.js.map → cards-CNXnmvV5.js.map} +1 -1
  89. package/dist/{cascader-B1MiqkBq.js → cascader-CrAl9zD5.js} +15 -15
  90. package/dist/{cascader-B1MiqkBq.js.map → cascader-CrAl9zD5.js.map} +1 -1
  91. package/dist/{chart-Darg_0Kv.js → chart-I7ROnsl8.js} +5 -5
  92. package/dist/{chart-Darg_0Kv.js.map → chart-I7ROnsl8.js.map} +1 -1
  93. package/dist/{checkbox-fflqmODR.js → checkbox-MoyHIAPs.js} +3 -3
  94. package/dist/{checkbox-fflqmODR.js.map → checkbox-MoyHIAPs.js.map} +1 -1
  95. package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-DHGtx0QV.js} +122 -110
  96. package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
  97. package/dist/{code-block-BzmM9Eig.js → code-block-BSJyq9e-.js} +7 -7
  98. package/dist/{code-block-BzmM9Eig.js.map → code-block-BSJyq9e-.js.map} +1 -1
  99. package/dist/{collapsible-BkAI_XD4.js → collapsible-BzJ91LUG.js} +3 -3
  100. package/dist/{collapsible-BkAI_XD4.js.map → collapsible-BzJ91LUG.js.map} +1 -1
  101. package/dist/{collection-content-gDh1v6O4.js → collection-content-CSnwtOTH.js} +3 -3
  102. package/dist/{collection-content-gDh1v6O4.js.map → collection-content-CSnwtOTH.js.map} +1 -1
  103. package/dist/{combobox-BEx0vJgF.js → combobox-Bcvu5J8O.js} +11 -10
  104. package/dist/{combobox-BEx0vJgF.js.map → combobox-Bcvu5J8O.js.map} +1 -1
  105. package/dist/combobox-C2JiSQPc.js +915 -0
  106. package/dist/combobox-C2JiSQPc.js.map +1 -0
  107. package/dist/{command-CrlPIL6m.js → command-9e52NPgK.js} +6 -6
  108. package/dist/{command-CrlPIL6m.js.map → command-9e52NPgK.js.map} +1 -1
  109. package/dist/{comments-Dmpp0YIc.js → comments-BsgErEqd.js} +33 -28
  110. package/dist/comments-BsgErEqd.js.map +1 -0
  111. package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
  112. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
  113. package/dist/components/base/combobox/combobox-field.d.ts +2 -2
  114. package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
  115. package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
  116. package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
  117. package/dist/components/base/feedback/state-display.d.ts +5 -1
  118. package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
  119. package/dist/components/base/forms/form-field.d.ts +7 -2
  120. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
  121. package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
  122. package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
  123. package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
  124. package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
  125. package/dist/components/base/navigation/language-switcher.d.ts +12 -4
  126. package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
  127. package/dist/components/base/sidebar/sidebar.d.ts +2 -0
  128. package/dist/components/base/upload/avatar-upload.d.ts +2 -1
  129. package/dist/components/base/upload/image-upload.d.ts +2 -1
  130. package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
  131. package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
  132. package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
  133. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +2 -0
  134. package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
  135. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  136. package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
  137. package/dist/components/blocks/analytics/types.d.ts +2 -2
  138. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  139. package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
  140. package/dist/components/features/activities/activities.types.d.ts +18 -11
  141. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
  142. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
  143. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
  144. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
  145. package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
  146. package/dist/components/features/combobox/combobox.d.ts +2 -2
  147. package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
  148. package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
  149. package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
  150. package/dist/components/features/combobox/types.d.ts +37 -8
  151. package/dist/components/features/email-composer/types.d.ts +3 -1
  152. package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
  153. package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
  154. package/dist/components/features/filters/filters.types.d.ts +3 -3
  155. package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
  156. package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
  157. package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
  158. package/dist/components/features/filters/utils/filter-utils.d.ts +5 -1
  159. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  160. package/dist/components/features/media-library/media-library.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  162. package/dist/components/features/media-library/media-library.types.d.ts +36 -8
  163. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  164. package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
  165. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
  166. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
  167. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
  168. package/dist/components/features/products/products.types.d.ts +2 -2
  169. package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
  170. package/dist/components/features/resource/resource.d.ts +1 -1
  171. package/dist/components/features/resource/resource.types.d.ts +2 -0
  172. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
  173. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
  174. package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
  175. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
  176. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  177. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
  178. package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
  179. package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
  180. package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
  181. package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
  182. package/dist/components/features/table/data-table.d.ts +1 -1
  183. package/dist/components/features/table/index.d.ts +1 -0
  184. package/dist/components/features/table/table-body.d.ts +1 -1
  185. package/dist/components/features/table/table-helpers.d.ts +6 -3
  186. package/dist/components/features/table/table.strings.d.ts +3 -0
  187. package/dist/components/features/table/table.types.d.ts +17 -1
  188. package/dist/components/layout/header/header.types.d.ts +3 -2
  189. package/dist/components/layout/layout.types.d.ts +5 -3
  190. package/dist/components/layout/navigation/side-nav.d.ts +3 -2
  191. package/dist/components/layout/normalize-layout-path.d.ts +1 -0
  192. package/dist/components/layout/settings/settings.d.ts +1 -1
  193. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  194. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +3 -1
  195. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
  196. package/dist/components/layout/sidebar/sidebar.types.d.ts +2 -0
  197. package/dist/components/primitives/link.d.ts +3 -2
  198. package/dist/components/primitives/money.d.ts +1 -1
  199. package/dist/components/primitives/number.d.ts +1 -1
  200. package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
  201. package/dist/{containers-CIxwbZt5.js → containers-CSdc32h9.js} +2 -2
  202. package/dist/{containers-CIxwbZt5.js.map → containers-CSdc32h9.js.map} +1 -1
  203. package/dist/{copyable-DIznBqiT.js → copyable-3fdHfMR3.js} +4 -4
  204. package/dist/{copyable-DIznBqiT.js.map → copyable-3fdHfMR3.js.map} +1 -1
  205. package/dist/{data-display-BdgCAw8T.js → data-display-Cmj-xZYl.js} +16 -15
  206. package/dist/data-display-Cmj-xZYl.js.map +1 -0
  207. package/dist/{date-Cq8ioE4o.js → date-Br0FicVv.js} +4 -4
  208. package/dist/{date-Cq8ioE4o.js.map → date-Br0FicVv.js.map} +1 -1
  209. package/dist/date-picker-CyQlFYsP.js +1617 -0
  210. package/dist/date-picker-CyQlFYsP.js.map +1 -0
  211. package/dist/date-pickers-tj2MXmXd.js +185 -0
  212. package/dist/date-pickers-tj2MXmXd.js.map +1 -0
  213. package/dist/{display-KsZLw9Ov.js → display-CT_N2a3w.js} +7 -7
  214. package/dist/{display-KsZLw9Ov.js.map → display-CT_N2a3w.js.map} +1 -1
  215. package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-C08iIugv.js} +6 -6
  216. package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-C08iIugv.js.map} +1 -1
  217. package/dist/features/activities.js +283 -270
  218. package/dist/features/activities.js.map +1 -1
  219. package/dist/features/ai-chat.js +40 -27
  220. package/dist/features/ai-chat.js.map +1 -1
  221. package/dist/features/appointment-calendar.js +126 -126
  222. package/dist/features/appointment-calendar.js.map +1 -1
  223. package/dist/features/async-preview.js +9 -9
  224. package/dist/features/combobox.js +1 -1
  225. package/dist/features/comments.js +1 -1
  226. package/dist/features/data-view.js +10 -10
  227. package/dist/features/email-composer.js +24 -19
  228. package/dist/features/email-composer.js.map +1 -1
  229. package/dist/features/event-calendar.js +129 -125
  230. package/dist/features/event-calendar.js.map +1 -1
  231. package/dist/features/filters.js +2 -2
  232. package/dist/features/global-search.js +16 -20
  233. package/dist/features/global-search.js.map +1 -1
  234. package/dist/features/kanban.js +18 -28
  235. package/dist/features/kanban.js.map +1 -1
  236. package/dist/features/map/style.css +15 -0
  237. package/dist/features/map.js +331 -314
  238. package/dist/features/map.js.map +1 -1
  239. package/dist/features/media-library.js +1044 -866
  240. package/dist/features/media-library.js.map +1 -1
  241. package/dist/features/mentions.js +2 -2
  242. package/dist/features/overlays.js +1 -1
  243. package/dist/features/products.js +978 -964
  244. package/dist/features/products.js.map +1 -1
  245. package/dist/features/questionnaire.js +159 -152
  246. package/dist/features/questionnaire.js.map +1 -1
  247. package/dist/features/resource-assignment.js +8 -8
  248. package/dist/features/resource.js +74 -71
  249. package/dist/features/resource.js.map +1 -1
  250. package/dist/features/rich-text-editor.js +28 -19
  251. package/dist/features/rich-text-editor.js.map +1 -1
  252. package/dist/features/schema-form.js +297 -256
  253. package/dist/features/schema-form.js.map +1 -1
  254. package/dist/features/suggestions.js +57 -50
  255. package/dist/features/suggestions.js.map +1 -1
  256. package/dist/features/sync.js +3 -3
  257. package/dist/features/table.js +1 -1
  258. package/dist/features/theme-tweaker.js +400 -399
  259. package/dist/features/theme-tweaker.js.map +1 -1
  260. package/dist/feedback-Dzo1xtAU.js +246 -0
  261. package/dist/feedback-Dzo1xtAU.js.map +1 -0
  262. package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-D6H7tVJi.js} +2 -2
  263. package/dist/{field-affordance-recipes-DWcNcOjh.js.map → field-affordance-recipes-D6H7tVJi.js.map} +1 -1
  264. package/dist/field-control-attributes-B6i335wr.js +18 -0
  265. package/dist/field-control-attributes-B6i335wr.js.map +1 -0
  266. package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
  267. package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
  268. package/dist/{filters-DzgSJpMK.js → filters-Dl80yYtN.js} +763 -605
  269. package/dist/filters-Dl80yYtN.js.map +1 -0
  270. package/dist/form-field-CAPdwdnZ.js +74 -0
  271. package/dist/form-field-CAPdwdnZ.js.map +1 -0
  272. package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-CgcrUbLU.js} +2 -2
  273. package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-CgcrUbLU.js.map} +1 -1
  274. package/dist/{forms-C0RGnJTe.js → forms-B3W8CH7-.js} +8 -8
  275. package/dist/{forms-C0RGnJTe.js.map → forms-B3W8CH7-.js.map} +1 -1
  276. package/dist/forms-numeric-CwjQJe-O.js +991 -0
  277. package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
  278. package/dist/{header-DMMxG__r.js → header-ZIIsRKxP.js} +113 -113
  279. package/dist/header-ZIIsRKxP.js.map +1 -0
  280. package/dist/hooks/use-files.d.ts +2 -0
  281. package/dist/{hooks-DB6CJ4MR.js → hooks-BitHSh-Y.js} +3 -3
  282. package/dist/{hooks-DB6CJ4MR.js.map → hooks-BitHSh-Y.js.map} +1 -1
  283. package/dist/{icon-badge-DZF-YjQp.js → icon-badge-npxF1SLX.js} +2 -2
  284. package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-npxF1SLX.js.map} +1 -1
  285. package/dist/index.js +1 -1
  286. package/dist/{input-CvyDQlY7.js → input-7KAc7XQL.js} +6 -6
  287. package/dist/{input-CvyDQlY7.js.map → input-7KAc7XQL.js.map} +1 -1
  288. package/dist/{input-DMBwAZmr.js → input-DIREVYHs.js} +3 -3
  289. package/dist/{input-DMBwAZmr.js.map → input-DIREVYHs.js.map} +1 -1
  290. package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
  291. package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
  292. package/dist/{item-DjCcM18E.js → item-FfWnaYST.js} +99 -98
  293. package/dist/item-FfWnaYST.js.map +1 -0
  294. package/dist/layout/app-shell.js +1 -1
  295. package/dist/layout/auth.js +1 -1
  296. package/dist/layout/containers.js +1 -1
  297. package/dist/layout/header.js +1 -1
  298. package/dist/layout/hooks.js +1 -1
  299. package/dist/layout/navigation.js +1 -1
  300. package/dist/layout/page.js +1 -1
  301. package/dist/layout/settings.js +1 -1
  302. package/dist/layout/sidebar.js +2 -2
  303. package/dist/layout/workspace.js +1 -1
  304. package/dist/layout.js +11 -11
  305. package/dist/layout.types-E_GAApzO.js +30 -0
  306. package/dist/layout.types-E_GAApzO.js.map +1 -0
  307. package/dist/lib/field-control-attributes.d.ts +11 -0
  308. package/dist/lib/field-state-recipes.d.ts +2 -0
  309. package/dist/lib/format.d.ts +1 -0
  310. package/dist/lib/surface-recipes.d.ts +1 -1
  311. package/dist/lib/token-merge.generated.d.ts +6 -6
  312. package/dist/lib/utils.js +1 -1
  313. package/dist/{media-gallery-C-vChPmE.js → media-gallery-C81DAnKI.js} +6 -6
  314. package/dist/{media-gallery-C-vChPmE.js.map → media-gallery-C81DAnKI.js.map} +1 -1
  315. package/dist/{mentions-0_4nWuI-.js → mentions-qOnedSt4.js} +236 -167
  316. package/dist/mentions-qOnedSt4.js.map +1 -0
  317. package/dist/message-BJHnn43M.js +135 -0
  318. package/dist/message-BJHnn43M.js.map +1 -0
  319. package/dist/{metadata-list-C3MkU-Om.js → metadata-list-XkqZ_UXH.js} +11 -11
  320. package/dist/{metadata-list-C3MkU-Om.js.map → metadata-list-XkqZ_UXH.js.map} +1 -1
  321. package/dist/{navigation-DaRjthVk.js → navigation-BgtPJAhi.js} +119 -119
  322. package/dist/navigation-BgtPJAhi.js.map +1 -0
  323. package/dist/{navigation-C90-oQFq.js → navigation-Bt-v7rWP.js} +52 -46
  324. package/dist/navigation-Bt-v7rWP.js.map +1 -0
  325. package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
  326. package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
  327. package/dist/{number-CRU3kGuk.js → number-CYqBcrSj.js} +78 -86
  328. package/dist/number-CYqBcrSj.js.map +1 -0
  329. package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-BQCA2Zn2.js} +7 -7
  330. package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-BQCA2Zn2.js.map} +1 -1
  331. package/dist/{overlays-BSgCtM2v.js → overlays-CC8zI3Du.js} +264 -260
  332. package/dist/overlays-CC8zI3Du.js.map +1 -0
  333. package/dist/{page-DUUKDAjo.js → page-BoQ1VaFJ.js} +13 -13
  334. package/dist/{page-DUUKDAjo.js.map → page-BoQ1VaFJ.js.map} +1 -1
  335. package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-DIKspJfx.js} +4 -4
  336. package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-DIKspJfx.js.map} +1 -1
  337. package/dist/{pagination-CgCjElfu.js → pagination-Br8TdV9A.js} +4 -4
  338. package/dist/{pagination-CgCjElfu.js.map → pagination-Br8TdV9A.js.map} +1 -1
  339. package/dist/{popover-B85RenIl.js → popover-k8TdUcAt.js} +10 -10
  340. package/dist/popover-k8TdUcAt.js.map +1 -0
  341. package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-yn-o0kyA.js} +7 -7
  342. package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
  343. package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-DJ0AkUan.js} +2 -2
  344. package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-DJ0AkUan.js.map} +1 -1
  345. package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-DyUXqUtD.js} +2 -2
  346. package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-DyUXqUtD.js.map} +1 -1
  347. package/dist/{primitives-ByWgGUgt.js → primitives-BkkQjYl7.js} +22 -17
  348. package/dist/primitives-BkkQjYl7.js.map +1 -0
  349. package/dist/primitives.js +4 -4
  350. package/dist/{progress-BJhQP9WX.js → progress-DZFXXzPs.js} +4 -4
  351. package/dist/{progress-BJhQP9WX.js.map → progress-DZFXXzPs.js.map} +1 -1
  352. package/dist/{receipt-tOc7B3hw.js → receipt-C7LhOg7Q.js} +6 -6
  353. package/dist/{receipt-tOc7B3hw.js.map → receipt-C7LhOg7Q.js.map} +1 -1
  354. package/dist/rich-text-BnTzZjIo.js +45 -0
  355. package/dist/rich-text-BnTzZjIo.js.map +1 -0
  356. package/dist/rich-text-editor-CAurDwT5.js +1273 -0
  357. package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
  358. package/dist/{rich-text-editor-toolbar-laT3tpBT.js → rich-text-editor-toolbar-DbXig7Jk.js} +36 -35
  359. package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
  360. package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
  361. package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
  362. package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
  363. package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
  364. package/dist/{scroll-area-B0dB2cBi.js → scroll-area-Bj6CRUif.js} +2 -2
  365. package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
  366. package/dist/{separator-Bb17I4pu.js → separator-B9ewiCGO.js} +2 -2
  367. package/dist/{separator-Bb17I4pu.js.map → separator-B9ewiCGO.js.map} +1 -1
  368. package/dist/{separator-Ct_WSWTJ.js → separator-DM6gs2vu.js} +3 -3
  369. package/dist/{separator-Ct_WSWTJ.js.map → separator-DM6gs2vu.js.map} +1 -1
  370. package/dist/services/actions.js +1 -1
  371. package/dist/settings-DZPHgpx4.js +155 -0
  372. package/dist/settings-DZPHgpx4.js.map +1 -0
  373. package/dist/{sheet-BGPERY55.js → sheet-C4DHsgLk.js} +6 -6
  374. package/dist/{sheet-BGPERY55.js.map → sheet-C4DHsgLk.js.map} +1 -1
  375. package/dist/sidebar-C8BnDwTH.js +709 -0
  376. package/dist/sidebar-C8BnDwTH.js.map +1 -0
  377. package/dist/{sidebar-f9gRWXIR.js → sidebar-CmD6a-HK.js} +16 -13
  378. package/dist/sidebar-CmD6a-HK.js.map +1 -0
  379. package/dist/{skeleton-BapcJd9C.js → skeleton-DDgdhmu9.js} +5 -5
  380. package/dist/{skeleton-BapcJd9C.js.map → skeleton-DDgdhmu9.js.map} +1 -1
  381. package/dist/{smart-card-CW0hjetE.js → smart-card-B6vLxqa_.js} +8 -8
  382. package/dist/{smart-card-CW0hjetE.js.map → smart-card-B6vLxqa_.js.map} +1 -1
  383. package/dist/{structure-DuxKl954.js → structure-DZJ2wbAU.js} +2 -2
  384. package/dist/{structure-DuxKl954.js.map → structure-DZJ2wbAU.js.map} +1 -1
  385. package/dist/style.css +1 -1
  386. package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
  387. package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
  388. package/dist/{table-CFOWY9pQ.js → table-CBonSdTp.js} +534 -486
  389. package/dist/table-CBonSdTp.js.map +1 -0
  390. package/dist/{table-B4TE7iOV.js → table-CXSPHH25.js} +75 -71
  391. package/dist/table-CXSPHH25.js.map +1 -0
  392. package/dist/{tabs-e7ko9S2o.js → tabs-C4Kr_hCr.js} +50 -49
  393. package/dist/tabs-C4Kr_hCr.js.map +1 -0
  394. package/dist/{text-inputs-B1culiSK.js → text-inputs-jdkS3ReG.js} +9 -9
  395. package/dist/{text-inputs-B1culiSK.js.map → text-inputs-jdkS3ReG.js.map} +1 -1
  396. package/dist/{timelines-D3Sl9ueq.js → timelines-CoPwdJP0.js} +10 -10
  397. package/dist/{timelines-D3Sl9ueq.js.map → timelines-CoPwdJP0.js.map} +1 -1
  398. package/dist/{tooltip-8wz5S_Zr.js → tooltip-31NwIpTo.js} +4 -4
  399. package/dist/{tooltip-8wz5S_Zr.js.map → tooltip-31NwIpTo.js.map} +1 -1
  400. package/dist/{tree-CzUJHnFs.js → tree-CeYVzdFE.js} +6 -6
  401. package/dist/{tree-CzUJHnFs.js.map → tree-CeYVzdFE.js.map} +1 -1
  402. package/dist/typography/rich-text.js +1 -1
  403. package/dist/{typography-BQnine1k.js → typography-C7-YMW1S.js} +2 -2
  404. package/dist/{typography-BQnine1k.js.map → typography-C7-YMW1S.js.map} +1 -1
  405. package/dist/typography.js +1 -1
  406. package/dist/{upload-BOW6U2tI.js → upload-Hdm5gObf.js} +303 -291
  407. package/dist/upload-Hdm5gObf.js.map +1 -0
  408. package/dist/{upload-queue-qUXn1ykN.js → upload-queue-D0sYPuqo.js} +8 -8
  409. package/dist/{upload-queue-qUXn1ykN.js.map → upload-queue-D0sYPuqo.js.map} +1 -1
  410. package/dist/{usage-card-BeSLY0i0.js → usage-card-9s8hLDfn.js} +9 -9
  411. package/dist/{usage-card-BeSLY0i0.js.map → usage-card-9s8hLDfn.js.map} +1 -1
  412. package/dist/{utils-B6kKb8jB.js → utils-DhuoqFy4.js} +31 -37
  413. package/dist/utils-DhuoqFy4.js.map +1 -0
  414. package/dist/{value-inputs-skdVB2zh.js → value-inputs-D3aPgq9H.js} +15 -15
  415. package/dist/{value-inputs-skdVB2zh.js.map → value-inputs-D3aPgq9H.js.map} +1 -1
  416. package/dist/{value-typography-uAmWUAL1.js → value-typography-uSzzG9Gf.js} +32 -26
  417. package/dist/value-typography-uSzzG9Gf.js.map +1 -0
  418. package/dist/{workspace-DHeHv0qw.js → workspace-CC8Vchiu.js} +12 -12
  419. package/dist/{workspace-DHeHv0qw.js.map → workspace-CC8Vchiu.js.map} +1 -1
  420. package/docs/consumer-skill/examples/edit.tsx +3 -3
  421. package/docs/consumer-skill/references/agents-md.md +19 -19
  422. package/docs/consumer-skill/references/analytics.md +15 -0
  423. package/docs/consumer-skill/references/component-contracts.json +14724 -13057
  424. package/docs/consumer-skill/references/composition.md +21 -4
  425. package/docs/consumer-skill/references/design-contract.md +1 -0
  426. package/docs/consumer-skill/references/installation.md +51 -8
  427. package/docs/consumer-skill/references/integration.md +24 -1
  428. package/docs/consumer-skill/references/public-api.json +172 -34
  429. package/docs/consumer-skill/references/review.md +51 -11
  430. package/docs/consumer-skill/references/rhf-workflows.md +72 -0
  431. package/docs/consumer-skill/references/theming.md +7 -2
  432. package/docs/consumer-skill/references/tokens.json +1 -1
  433. package/docs/consumer-skill/scripts/composition-policy.mjs +144 -30
  434. package/docs/consumer-skill/scripts/setup-skills.mjs +46 -9
  435. package/package.json +4 -2
  436. package/templates/admin-shell-template.tsx +1 -2
  437. package/templates/customers-template.tsx +18 -16
  438. package/dist/accordion-B9MHG0cT.js.map +0 -1
  439. package/dist/ai-artifact-C58tQcBy.js.map +0 -1
  440. package/dist/auth-DTkkshS8.js.map +0 -1
  441. package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
  442. package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
  443. package/dist/combobox-BwzoXFSG.js +0 -884
  444. package/dist/combobox-BwzoXFSG.js.map +0 -1
  445. package/dist/comments-Dmpp0YIc.js.map +0 -1
  446. package/dist/data-display-BdgCAw8T.js.map +0 -1
  447. package/dist/date-picker-RlIzKom_.js +0 -1551
  448. package/dist/date-picker-RlIzKom_.js.map +0 -1
  449. package/dist/date-pickers-DY-CpXS1.js +0 -179
  450. package/dist/date-pickers-DY-CpXS1.js.map +0 -1
  451. package/dist/feedback-Dm4izqFn.js +0 -240
  452. package/dist/feedback-Dm4izqFn.js.map +0 -1
  453. package/dist/filters-DzgSJpMK.js.map +0 -1
  454. package/dist/form-field-BriWAXyg.js +0 -63
  455. package/dist/form-field-BriWAXyg.js.map +0 -1
  456. package/dist/forms-numeric-DIhghX1Q.js +0 -910
  457. package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
  458. package/dist/header-DMMxG__r.js.map +0 -1
  459. package/dist/item-DjCcM18E.js.map +0 -1
  460. package/dist/layout.types-Cn7aUzJp.js +0 -20
  461. package/dist/layout.types-Cn7aUzJp.js.map +0 -1
  462. package/dist/mentions-0_4nWuI-.js.map +0 -1
  463. package/dist/message-g8p7eVtN.js +0 -128
  464. package/dist/message-g8p7eVtN.js.map +0 -1
  465. package/dist/navigation-C90-oQFq.js.map +0 -1
  466. package/dist/navigation-DaRjthVk.js.map +0 -1
  467. package/dist/number-CRU3kGuk.js.map +0 -1
  468. package/dist/overlays-BSgCtM2v.js.map +0 -1
  469. package/dist/popover-B85RenIl.js.map +0 -1
  470. package/dist/primitives-ByWgGUgt.js.map +0 -1
  471. package/dist/rich-text-Dth5E882.js +0 -78
  472. package/dist/rich-text-Dth5E882.js.map +0 -1
  473. package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
  474. package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
  475. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
  476. package/dist/safe-image-src-C6kQSMBZ.js +0 -17
  477. package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
  478. package/dist/sanitize-html-DsQmI48u.js.map +0 -1
  479. package/dist/settings-Bar5wiSo.js +0 -167
  480. package/dist/settings-Bar5wiSo.js.map +0 -1
  481. package/dist/sidebar-D-JYMMbY.js +0 -686
  482. package/dist/sidebar-D-JYMMbY.js.map +0 -1
  483. package/dist/sidebar-f9gRWXIR.js.map +0 -1
  484. package/dist/table-B4TE7iOV.js.map +0 -1
  485. package/dist/table-CFOWY9pQ.js.map +0 -1
  486. package/dist/tabs-e7ko9S2o.js.map +0 -1
  487. package/dist/upload-BOW6U2tI.js.map +0 -1
  488. package/dist/utils-B6kKb8jB.js.map +0 -1
  489. package/dist/value-typography-uAmWUAL1.js.map +0 -1
@@ -1,32 +1,34 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-B6kKb8jB.js";
4
- import { n } from "./buttons-BedGfygC.js";
5
- import { c as r, o as i } from "./typography-BQnine1k.js";
3
+ import { t } from "./utils-DhuoqFy4.js";
4
+ import { n } from "./buttons-DeW0bQeK.js";
5
+ import { c as r, o as i } from "./typography-C7-YMW1S.js";
6
6
  import { t as a } from "./focus-recipes-B653VaLq.js";
7
- import { t as o } from "./structure-DuxKl954.js";
7
+ import { t as o } from "./structure-DZJ2wbAU.js";
8
8
  import { i as s } from "./tone-recipes-BPsRAvhu.js";
9
- import { t as c } from "./interaction-recipes-XR9ZpVYL.js";
10
- import { n as l } from "./number-CRU3kGuk.js";
11
- import { t as u } from "./badge-xIiV_E7f.js";
12
- import { c as d, i as f, n as p, o as m, r as h, t as g, u as _ } from "./item-DjCcM18E.js";
13
- import { forwardRef as v, useCallback as y, useEffect as b, useMemo as x, useRef as S, useState as C } from "react";
14
- import { jsx as w, jsxs as T } from "react/jsx-runtime";
15
- import { Check as E, ChevronDown as D, ChevronRight as O } from "lucide-react";
9
+ import { t as c } from "./interaction-recipes-4wZ2tvfb.js";
10
+ import { n as l } from "./number-CYqBcrSj.js";
11
+ import { t as u } from "./badge-wWauMgAt.js";
12
+ import { c as d, i as f, n as p, o as m, r as h, t as g, u as _ } from "./item-FfWnaYST.js";
13
+ import { f as v } from "./hooks-BitHSh-Y.js";
14
+ import { t as y } from "./normalize-layout-path-BmEgg6fu.js";
15
+ import { Fragment as b, forwardRef as x, useCallback as S, useEffect as C, useMemo as w, useRef as T, useState as E } from "react";
16
+ import { Fragment as D, jsx as O, jsxs as k } from "react/jsx-runtime";
17
+ import { Check as A, ChevronDown as j, ChevronRight as M } from "lucide-react";
16
18
  //#region src/components/layout/navigation/breadcrumb-progress/types.ts
17
- var k = {
19
+ var N = {
18
20
  stepLabel: "Step",
19
21
  ofLabel: "of"
20
22
  };
21
23
  //#endregion
22
24
  //#region src/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.tsx
23
- function A({ steps: a, currentIndex: o, onStepClick: u, className: d, strings: f }) {
24
- let p = e(k, f);
25
- return /* @__PURE__ */ T("div", {
25
+ function P({ steps: a, currentIndex: o, onStepClick: u, className: d, strings: f }) {
26
+ let p = e(N, f);
27
+ return /* @__PURE__ */ k("div", {
26
28
  className: t("breadcrumb-progress--component", "w-full", d),
27
- children: [/* @__PURE__ */ T("div", {
29
+ children: [/* @__PURE__ */ k("div", {
28
30
  className: "flex items-center justify-between mb-space-md",
29
- children: [/* @__PURE__ */ T(i, { children: [
31
+ children: [/* @__PURE__ */ k(i, { children: [
30
32
  p.stepLabel,
31
33
  " ",
32
34
  o + 1,
@@ -34,19 +36,19 @@ function A({ steps: a, currentIndex: o, onStepClick: u, className: d, strings: f
34
36
  p.ofLabel,
35
37
  " ",
36
38
  a.length
37
- ] }), /* @__PURE__ */ w(l, {
39
+ ] }), /* @__PURE__ */ O(l, {
38
40
  value: Math.round((o + 1) / a.length * 100),
39
41
  scaled: !0,
40
42
  size: "xs",
41
43
  weight: "semibold"
42
44
  })]
43
- }), /* @__PURE__ */ w("ol", {
45
+ }), /* @__PURE__ */ O("ol", {
44
46
  className: "m-0 list-none p-0 font-sans flex items-center gap-space-md",
45
47
  children: a.map((e, i) => {
46
48
  let l = i < o, d = i === o, f = u && (l || d);
47
- return /* @__PURE__ */ T("li", {
49
+ return /* @__PURE__ */ k("li", {
48
50
  className: "flex min-w-0 flex-1 items-center gap-space-md",
49
- children: [/* @__PURE__ */ T(n, {
51
+ children: [/* @__PURE__ */ k(n, {
50
52
  type: "button",
51
53
  "aria-label": `${p.stepLabel} ${i + 1}: ${e.label}`,
52
54
  onClick: () => f && u?.(e.id, i),
@@ -55,82 +57,88 @@ function A({ steps: a, currentIndex: o, onStepClick: u, className: d, strings: f
55
57
  buttonStyle: "ghost",
56
58
  size: "md",
57
59
  className: t("min-w-0 justify-start gap-space-md text-left transition-colors", f && c.rowHover, !f && "cursor-default"),
58
- children: [/* @__PURE__ */ w(r, {
60
+ children: [/* @__PURE__ */ O(r, {
59
61
  tag: "span",
60
62
  size: "xs",
61
63
  weight: "semibold",
62
64
  className: t("flex size-6 shrink-0 items-center justify-center rounded-full tabular-nums", l && "bg-success text-success-foreground", d && `bg-primary text-primary-foreground ring-4 ${s.primary.halo}`, !l && !d && "bg-muted text-muted-foreground"),
63
- children: l ? /* @__PURE__ */ w(E, { className: "size-icon-md" }) : i + 1
64
- }), /* @__PURE__ */ T("div", {
65
+ children: l ? /* @__PURE__ */ O(A, { className: "size-icon-md" }) : i + 1
66
+ }), /* @__PURE__ */ k("div", {
65
67
  className: "hidden min-w-0 lg:block",
66
- children: [/* @__PURE__ */ w(r, {
68
+ children: [/* @__PURE__ */ O(r, {
67
69
  weight: "semibold",
68
70
  className: t(!d && !l && "text-muted-foreground"),
69
71
  children: e.label
70
- }), !!e.hint && /* @__PURE__ */ w(r, {
72
+ }), !!e.hint && /* @__PURE__ */ O(r, {
71
73
  size: "xs",
72
74
  type: "discrete",
73
75
  className: "truncate",
74
76
  children: e.hint
75
77
  })]
76
78
  })]
77
- }), i < a.length - 1 && /* @__PURE__ */ w("div", { className: t("h-px flex-1", l ? "bg-success" : "bg-border") })]
79
+ }), i < a.length - 1 && /* @__PURE__ */ O("div", { className: t("h-px flex-1", l ? "bg-success" : "bg-border") })]
78
80
  }, e.id);
79
81
  })
80
82
  })]
81
83
  });
82
84
  }
83
- A.displayName = "BreadcrumbProgress";
85
+ P.displayName = "BreadcrumbProgress";
84
86
  //#endregion
85
87
  //#region src/components/layout/navigation/category-nav/category-nav.tsx
86
- function j({ title: e, items: n, activeId: r, onSelect: i, className: a }) {
87
- return /* @__PURE__ */ w("nav", {
88
+ function F({ title: e, items: n, activeId: r, onSelect: i, className: a }) {
89
+ return /* @__PURE__ */ O("nav", {
88
90
  "data-component": "category-nav",
89
91
  "data-slot": "category-nav",
90
92
  "aria-label": e,
91
93
  className: t("category-nav--component min-w-0", a),
92
- children: /* @__PURE__ */ w(m, { children: n.map((e) => {
93
- let n = e.icon, a = e.id === r;
94
- return /* @__PURE__ */ T(g, {
95
- onClick: () => i?.(e.id),
96
- "data-state": a ? "active" : "inactive",
97
- className: t("cursor-pointer rounded-radius px-space-md transition-colors", a ? c.rowCurrent : c.rowHover),
98
- children: [
99
- !!n && /* @__PURE__ */ w(d, {
100
- variant: "icon",
101
- className: t(a ? "text-accent-foreground" : "text-muted-foreground"),
102
- children: /* @__PURE__ */ w(n, {})
103
- }),
104
- /* @__PURE__ */ T(h, { children: [/* @__PURE__ */ w(_, {
105
- bold: a,
106
- children: e.label
107
- }), !!e.hint && /* @__PURE__ */ w(f, {
108
- clamp: 1,
109
- children: e.hint
110
- })] }),
111
- /* @__PURE__ */ T(p, { children: [typeof e.count == "number" && /* @__PURE__ */ w(u, {
112
- tone: "secondary",
113
- className: "tabular-nums",
114
- children: e.count
115
- }), /* @__PURE__ */ w(O, { className: t("size-icon shrink-0 text-muted-foreground", a && "text-accent-foreground") })] })
116
- ]
117
- }, e.id);
118
- }) })
94
+ children: /* @__PURE__ */ O(m, {
95
+ role: "group",
96
+ children: n.map((e) => {
97
+ let n = e.icon, a = e.id === r;
98
+ return /* @__PURE__ */ k(g, {
99
+ render: i ? /* @__PURE__ */ O("button", { type: "button" }) : void 0,
100
+ onClick: i ? () => i(e.id) : void 0,
101
+ "aria-pressed": i ? a : void 0,
102
+ "aria-current": !i && a ? !0 : void 0,
103
+ "data-state": a ? "active" : "inactive",
104
+ className: t("rounded-radius px-space-md transition-colors", i && "cursor-pointer", a ? c.rowCurrent : i && c.rowHover),
105
+ children: [
106
+ !!n && /* @__PURE__ */ O(d, {
107
+ variant: "icon",
108
+ className: t(a ? "text-accent-foreground" : "text-muted-foreground"),
109
+ children: /* @__PURE__ */ O(n, {})
110
+ }),
111
+ /* @__PURE__ */ k(h, { children: [/* @__PURE__ */ O(_, {
112
+ bold: a,
113
+ children: e.label
114
+ }), !!e.hint && /* @__PURE__ */ O(f, {
115
+ clamp: 1,
116
+ children: e.hint
117
+ })] }),
118
+ /* @__PURE__ */ k(p, { children: [typeof e.count == "number" && /* @__PURE__ */ O(u, {
119
+ tone: "secondary",
120
+ className: "tabular-nums",
121
+ children: e.count
122
+ }), /* @__PURE__ */ O(M, { className: t("size-icon shrink-0 text-muted-foreground", a && "text-accent-foreground") })] })
123
+ ]
124
+ }, e.id);
125
+ })
126
+ })
119
127
  });
120
128
  }
121
- j.displayName = "CategoryNav";
129
+ F.displayName = "CategoryNav";
122
130
  //#endregion
123
131
  //#region src/components/layout/navigation/section-nav/section-nav.tsx
124
- var M = { navigationLabel: "Section navigation" }, N = 150, P = v(function({ items: n, rootMargin: i = "-40% 0px -50% 0px", className: s, onSelect: l, strings: u, "aria-label": d, ...f }, p) {
125
- let m = e(M, u), [h, g] = C(n[0]?.id ?? null), _ = S(null), v = S(void 0), x = n.map((e) => e.id).join("\0"), E = y(() => {
132
+ var I = { navigationLabel: "Section navigation" }, L = 150, R = x(function({ items: n, rootMargin: i = "-40% 0px -50% 0px", className: s, onSelect: l, strings: u, "aria-label": d, ...f }, p) {
133
+ let m = e(I, u), [h, g] = E(n[0]?.id ?? null), _ = T(null), v = T(void 0), y = n.map((e) => e.id).join("\0"), b = S(() => {
126
134
  clearTimeout(v.current), v.current = setTimeout(() => {
127
135
  _.current && (_.current.settled = !0);
128
- }, N);
136
+ }, L);
129
137
  }, []);
130
- return b(() => {
138
+ return C(() => {
131
139
  let e = () => {
132
140
  let e = _.current;
133
- e && (e.settled ? _.current = null : E());
141
+ e && (e.settled ? _.current = null : b());
134
142
  };
135
143
  return document.addEventListener("scroll", e, {
136
144
  capture: !0,
@@ -138,8 +146,8 @@ var M = { navigationLabel: "Section navigation" }, N = 150, P = v(function({ ite
138
146
  }), () => {
139
147
  document.removeEventListener("scroll", e, { capture: !0 }), clearTimeout(v.current);
140
148
  };
141
- }, [E]), b(() => {
142
- let e = x ? x.split("\0") : [], t = /* @__PURE__ */ new Map(), n = new IntersectionObserver((n) => {
149
+ }, [b]), C(() => {
150
+ let e = y ? y.split("\0") : [], t = /* @__PURE__ */ new Map(), n = new IntersectionObserver((n) => {
143
151
  if (n.forEach((e) => t.set(e.target.id, e.isIntersecting)), _.current) return;
144
152
  let r = e.find((e) => t.get(e));
145
153
  r && g(r);
@@ -151,30 +159,30 @@ var M = { navigationLabel: "Section navigation" }, N = 150, P = v(function({ ite
151
159
  let t = document.getElementById(e);
152
160
  t && n.observe(t);
153
161
  }), () => n.disconnect();
154
- }, [x, i]), /* @__PURE__ */ w("nav", {
162
+ }, [y, i]), /* @__PURE__ */ O("nav", {
155
163
  ref: p,
156
164
  className: t("section-nav--component", s),
157
165
  "aria-label": d ?? m.navigationLabel,
158
166
  ...f,
159
- children: /* @__PURE__ */ w(o, {
167
+ children: /* @__PURE__ */ O(o, {
160
168
  gap: "2xs",
161
169
  className: "section-nav--items",
162
170
  children: n.map((e) => {
163
171
  let n = e.icon, i = h === e.id;
164
- return /* @__PURE__ */ T("a", {
172
+ return /* @__PURE__ */ k("a", {
165
173
  href: `#${e.id}`,
166
174
  "aria-current": i ? "location" : void 0,
167
175
  onClick: (t) => {
168
176
  t.preventDefault(), _.current = {
169
177
  id: e.id,
170
178
  settled: !1
171
- }, E(), document.getElementById(e.id)?.scrollIntoView({
179
+ }, b(), document.getElementById(e.id)?.scrollIntoView({
172
180
  behavior: "smooth",
173
181
  block: "start"
174
182
  }), g(e.id), l?.(e.id);
175
183
  },
176
184
  className: t(`flex items-center gap-space-md rounded-radius px-space-md py-row-y transition-colors outline-none ${a.edge}`, i ? c.rowCurrent : `text-muted-foreground ${c.rowHover}`),
177
- children: [!!n && /* @__PURE__ */ w(n, { className: "size-icon-md shrink-0" }), /* @__PURE__ */ w(r, {
185
+ children: [!!n && /* @__PURE__ */ O(n, { className: "size-icon-md shrink-0" }), /* @__PURE__ */ O(r, {
178
186
  tag: "span",
179
187
  type: "inherit",
180
188
  weight: i ? "semibold" : "medium",
@@ -185,81 +193,73 @@ var M = { navigationLabel: "Section navigation" }, N = 150, P = v(function({ ite
185
193
  })
186
194
  });
187
195
  });
188
- P.displayName = "SectionNav";
196
+ R.displayName = "SectionNav";
189
197
  //#endregion
190
198
  //#region src/components/layout/navigation/side-nav.tsx
191
- var F = { navigationLabel: "Side navigation" };
192
- function I(e) {
193
- if (e.length === 0) return "/";
194
- try {
195
- let t = typeof window < "u" ? window.location.origin : "http://localhost", n = new URL(e, t).pathname.replace(/\/+$/, "");
196
- return n.length > 0 ? n : "/";
197
- } catch {
198
- let t = (e.split("?")[0] ?? e).replace(/\/+$/, "");
199
- return t.length > 0 ? t : "/";
200
- }
201
- }
202
- function L(e) {
199
+ var z = { navigationLabel: "Side navigation" };
200
+ function B(e) {
203
201
  return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
204
202
  }
205
- var R = v(function({ items: s, groups: l, currentPath: d, className: f, itemClassName: p, activeItemClassName: m, strings: h, "aria-label": g, ..._ }, v) {
206
- let y = e(F, h), b = x(() => l ?? [{
203
+ var V = x(function({ items: s, groups: l, currentPath: d, renderLink: f, className: p, itemClassName: m, activeItemClassName: h, strings: g, "aria-label": _, ...x }, S) {
204
+ let C = e(z, g), T = v({ renderLink: f }), A = w(() => l ?? [{
207
205
  id: "side-nav-items",
208
206
  items: s ?? [],
209
207
  collapsible: !1
210
- }], [l, s]), S = I(d ?? (typeof window < "u" ? window.location.pathname : "")), E = x(() => b.flatMap((e) => e.items.map((t) => ({
211
- groupId: e.id,
212
- normalizedPath: I(t.href)
213
- }))), [b]).filter(({ normalizedPath: e }) => S === e || S.startsWith(`${e}/`)).sort((e, t) => t.normalizedPath.length - e.normalizedPath.length)[0]?.normalizedPath ?? null, [O, k] = C(() => Object.fromEntries(b.map((e) => [e.id, !!e.defaultCollapsed]))), A = (e) => k((t) => ({
208
+ }], [l, s]), M = w(() => {
209
+ if (d === void 0) return null;
210
+ let e = y(d);
211
+ return A.flatMap((e) => e.items.map((e) => y(e.href))).filter((t) => e === t || e.startsWith(`${t}/`)).sort((e, t) => t.length - e.length)[0] ?? null;
212
+ }, [d, A]), [N, P] = E(() => Object.fromEntries(A.map((e) => [e.id, !!e.defaultCollapsed]))), F = (e) => P((t) => ({
214
213
  ...t,
215
214
  [e]: !t[e]
216
- })), j = m && m.length > 0 ? m : c.rowCurrent;
217
- return /* @__PURE__ */ w("nav", {
218
- ref: v,
219
- "aria-label": g ?? y.navigationLabel,
220
- className: t("side-nav--component", f),
221
- ..._,
222
- children: /* @__PURE__ */ w(o, {
215
+ })), I = h && h.length > 0 ? h : c.rowCurrent;
216
+ return /* @__PURE__ */ O("nav", {
217
+ ref: S,
218
+ "aria-label": _ ?? C.navigationLabel,
219
+ className: t("side-nav--component", p),
220
+ ...x,
221
+ children: /* @__PURE__ */ O(o, {
223
222
  gap: "xl",
224
223
  className: "side-nav--groups",
225
- children: b.map((e) => {
226
- let s = e.collapsible !== !1 && O[e.id], l = !!e.label, d = !s;
227
- return /* @__PURE__ */ T(o, {
224
+ children: A.map((e) => {
225
+ let s = e.collapsible !== !1 && N[e.id], l = !!e.label, d = !s;
226
+ return /* @__PURE__ */ k(o, {
228
227
  gap: "2xs",
229
228
  className: "side-nav--group",
230
- children: [!!l && (e.collapsible === !1 ? L(e.label) ? /* @__PURE__ */ w(i, {
229
+ children: [!!l && (e.collapsible === !1 ? B(e.label) ? /* @__PURE__ */ O(i, {
231
230
  tag: "div",
232
231
  className: "px-row-x py-row-y",
233
232
  children: e.label
234
- }) : e.label : /* @__PURE__ */ T(n, {
233
+ }) : e.label : /* @__PURE__ */ k(n, {
235
234
  type: "button",
236
235
  tone: "secondary",
237
236
  buttonStyle: "ghost",
238
237
  size: "sm",
239
238
  fullWidth: !0,
240
- onClick: () => A(e.id),
239
+ onClick: () => F(e.id),
241
240
  className: t("h-auto min-h-action-sm justify-between px-row-x py-row-y", "text-muted-foreground", "hover:text-foreground transition-colors"),
242
241
  "aria-expanded": !s,
243
- children: [L(e.label) ? /* @__PURE__ */ w(i, {
242
+ children: [B(e.label) ? /* @__PURE__ */ O(i, {
244
243
  tag: "span",
245
244
  children: e.label
246
- }) : e.label, /* @__PURE__ */ w(D, {
245
+ }) : e.label, /* @__PURE__ */ O(j, {
247
246
  className: t("size-icon-md transition-transform", s && "-rotate-90"),
248
247
  "aria-hidden": "true"
249
248
  })]
250
- })), !!d && /* @__PURE__ */ w(o, {
249
+ })), !!d && /* @__PURE__ */ O(o, {
251
250
  gap: "2xs",
252
251
  className: "side-nav--items",
253
252
  children: e.items.map((e) => {
254
- let n = e.icon, i = I(e.href) === E;
255
- return /* @__PURE__ */ T("a", {
256
- href: e.disabled ? void 0 : e.href,
253
+ let n = e.icon, i = y(e.href) === M;
254
+ return /* @__PURE__ */ O(b, { children: T({
255
+ href: e.href,
256
+ active: i,
257
+ disabled: e.disabled,
257
258
  "aria-current": i ? "page" : void 0,
258
- "aria-disabled": e.disabled || void 0,
259
- className: t("group flex items-center gap-space-md rounded-radius px-row-x py-row-y", "text-sm transition-colors", `focus-visible:outline-none ${a.edge}`, c.rowHover, e.disabled && "pointer-events-none opacity-50", i && j, p),
260
- children: [
261
- !!n && /* @__PURE__ */ w(n, { className: t("size-icon shrink-0", i ? "text-accent-foreground" : "text-muted-foreground") }),
262
- L(e.label) ? /* @__PURE__ */ w(r, {
259
+ className: t("group flex items-center gap-space-md rounded-radius px-row-x py-row-y", "text-sm transition-colors", `focus-visible:outline-none ${a.edge}`, c.rowHover, e.disabled && "pointer-events-none opacity-50", i && I, m),
260
+ children: /* @__PURE__ */ k(D, { children: [
261
+ !!n && /* @__PURE__ */ O(n, { className: t("size-icon shrink-0", i ? "text-accent-foreground" : "text-muted-foreground") }),
262
+ B(e.label) ? /* @__PURE__ */ O(r, {
263
263
  tag: "span",
264
264
  size: "inherit",
265
265
  weight: "medium",
@@ -267,13 +267,13 @@ var R = v(function({ items: s, groups: l, currentPath: d, className: f, itemClas
267
267
  className: "min-w-0 flex-1 truncate text-inherit",
268
268
  children: e.label
269
269
  }) : e.label,
270
- !!e.badge && /* @__PURE__ */ w(u, {
270
+ !!e.badge && /* @__PURE__ */ O(u, {
271
271
  tone: "secondary",
272
272
  className: "shrink-0",
273
273
  children: e.badge
274
274
  })
275
- ]
276
- }, e.href);
275
+ ] })
276
+ }) }, e.href);
277
277
  })
278
278
  })]
279
279
  }, e.id);
@@ -281,8 +281,8 @@ var R = v(function({ items: s, groups: l, currentPath: d, className: f, itemClas
281
281
  })
282
282
  });
283
283
  });
284
- R.displayName = "SideNav";
284
+ V.displayName = "SideNav";
285
285
  //#endregion
286
- export { j as a, M as i, F as n, A as o, P as r, k as s, R as t };
286
+ export { F as a, I as i, z as n, P as o, R as r, N as s, V as t };
287
287
 
288
- //# sourceMappingURL=navigation-DaRjthVk.js.map
288
+ //# sourceMappingURL=navigation-BgtPJAhi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-BgtPJAhi.js","names":["_Fragment","Text","DisplayLabel","focusRecipes","Stack","toneRecipes","interactionRecipes","Percent","Badge","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","useLayoutLinkRenderer","normalizeLayoutPath","Fragment$1","defaultBreadcrumbProgressStrings","BreadcrumbProgress","stringsProp","strings","useStrings","cn","className","currentIndex","steps","isCompleted","idx","isCurrent","isClickable","onStepClick","Button","step","Check","CategoryNav","title","items","Icon","it","active","activeId","onSelect","ChevronRight","defaultSectionNavStrings","SCROLL_SETTLE_MS","SectionNav","forwardRef","ariaLabel","rootProps","setActive","useState","clickLock","useRef","settleTimer","sectionIds","scheduleSettle","useCallback","useEffect","onScroll","lock","ids","intersecting","obs","entries","entry","next","id","el","rootMargin","isActive","e","defaultSideNavStrings","isSimpleText","value","SideNav","groupsProp","linkRenderer","groups","useMemo","activeNormalized","currentPath","activePath","group","item","path","b","a","collapsed","setCollapsed","g","toggleGroup","prev","resolvedActive","activeItemClassName","isCollapsed","showLabel","shouldRenderItems","ChevronDown","Fragment","itemClassName"],"sources":["../src/components/layout/navigation/breadcrumb-progress/types.ts","../src/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.tsx","../src/components/layout/navigation/category-nav/category-nav.tsx","../src/components/layout/navigation/section-nav/section-nav.tsx","../src/components/layout/navigation/side-nav.tsx"],"sourcesContent":["import type { StringsProp } from '../../../../lib/strings';\n\nexport interface BreadcrumbProgressStep {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Short guidance shown beneath the control. */\n\thint?: string;\n}\n\nexport interface BreadcrumbProgressStrings {\n\tstepLabel: string;\n\tofLabel: string;\n}\n\nexport const defaultBreadcrumbProgressStrings: BreadcrumbProgressStrings = {\n\tstepLabel: 'Step',\n\tofLabel: 'of',\n};\n\nexport interface BreadcrumbProgressProps {\n\t/** Steps in the flow, in order. */\n\tsteps: BreadcrumbProgressStep[];\n\t/** Zero-based position of the active step. */\n\tcurrentIndex: number;\n\tonStepClick?: (id: string, index: number) => void;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<BreadcrumbProgressStrings>;\n}\n","/**\n * BreadcrumbProgress — wizard / multi-step navigation with completed,\n * current, and upcoming states. Click any completed step to jump back.\n */\nimport { Check } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultBreadcrumbProgressStrings,\n\ttype BreadcrumbProgressProps,\n} from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\nexport function BreadcrumbProgress({ steps, currentIndex, onStepClick, className, strings: stringsProp }: BreadcrumbProgressProps) {\n\tconst strings = useStrings(defaultBreadcrumbProgressStrings, stringsProp);\n\n\treturn (\n\t\t<div className={cn('breadcrumb-progress--component', 'w-full', className)}>\n\t\t\t<div className=\"flex items-center justify-between mb-space-md\">\n\t\t\t\t<DisplayLabel>\n\t\t\t\t\t{strings.stepLabel} {currentIndex + 1} {strings.ofLabel} {steps.length}\n\t\t\t\t</DisplayLabel>\n\t\t\t\t<Percent value={Math.round(((currentIndex + 1) / steps.length) * 100)} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t</div>\n\t\t\t<ol className=\"m-0 list-none p-0 font-sans flex items-center gap-space-md\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isCompleted = idx < currentIndex;\n\t\t\t\t\tconst isCurrent = idx === currentIndex;\n\t\t\t\t\tconst isClickable = onStepClick && (isCompleted || isCurrent);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={step.id} className=\"flex min-w-0 flex-1 items-center gap-space-md\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={`${strings.stepLabel} ${idx + 1}: ${step.label}`}\n\t\t\t\t\t\t\t\tonClick={() => isClickable && onStepClick?.(step.id, idx)}\n\t\t\t\t\t\t\t\tdisabled={!isClickable}\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'min-w-0 justify-start gap-space-md text-left transition-colors',\n\t\t\t\t\t\t\t\t\tisClickable && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t!isClickable && 'cursor-default',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex size-6 shrink-0 items-center justify-center rounded-full tabular-nums',\n\t\t\t\t\t\t\t\t\t\tisCompleted && 'bg-success text-success-foreground',\n\t\t\t\t\t\t\t\t\t\tisCurrent && `bg-primary text-primary-foreground ring-4 ${toneRecipes.primary.halo}`,\n\t\t\t\t\t\t\t\t\t\t!isCompleted && !isCurrent && 'bg-muted text-muted-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isCompleted ? <Check className=\"size-icon-md\" /> : idx + 1}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<div className=\"hidden min-w-0 lg:block\">\n\t\t\t\t\t\t\t\t\t<Text weight=\"semibold\" className={cn(!isCurrent && !isCompleted && 'text-muted-foreground')}>{step.label}</Text>\n\t\t\t\t\t\t\t\t\t{!!step.hint && <Text size=\"xs\" type=\"discrete\" className=\"truncate\">{step.hint}</Text>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{idx < steps.length - 1 && (\n\t\t\t\t\t\t\t\t<div className={cn('h-px flex-1', isCompleted ? 'bg-success' : 'bg-border')} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</div>\n\t);\n}\n\nBreadcrumbProgress.displayName = 'BreadcrumbProgress';\n","/**\n * CategoryNav — vertical icon + label list with optional count badge per row.\n * Use as a sidebar nav for filtering or category browsing.\n */\nimport { ChevronRight } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\n\nimport type { CategoryNavProps } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function CategoryNav({ title, items, activeId, onSelect, className }: CategoryNavProps) {\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"category-nav\"\n\t\t\tdata-slot=\"category-nav\"\n\t\t\taria-label={title}\n\t\t\tclassName={cn('category-nav--component min-w-0', className)}\n\t\t>\n\t\t\t<ItemGroup role=\"group\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\t\tconst Icon = it.icon;\n\t\t\t\t\tconst active = it.id === activeId;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t// Not `size=\"sm\"`. That maps to the primitive `xs` scale, which\n\t\t\t\t\t\t\t// shrinks media icons to 12px for a genuinely compact row — but\n\t\t\t\t\t\t\t// this row carries a title, a description and a badge and stands\n\t\t\t\t\t\t\t// 58px tall. The result was a 12px leading icon beside a 16px\n\t\t\t\t\t\t\t// chevron, because a `size-` class opts an icon out of that\n\t\t\t\t\t\t\t// scaling rule. The default scale matches `base/item`'s own\n\t\t\t\t\t\t\t// reference row at the same height.\n\t\t\t\t\t\t\trender={onSelect ? <button type=\"button\" /> : undefined}\n\t\t\t\t\t\t\tonClick={onSelect ? () => onSelect(it.id) : undefined}\n\t\t\t\t\t\t\taria-pressed={onSelect ? active : undefined}\n\t\t\t\t\t\t\taria-current={!onSelect && active ? true : undefined}\n\t\t\t\t\t\t\tdata-state={active ? 'active' : 'inactive'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// The selected tint spans the row, so the row needs horizontal\n\t\t\t\t\t\t\t\t// padding of its own or the icon sits 1px from the tint's edge.\n\t\t\t\t\t\t\t\t// `px-space-md` is what `SectionNav` uses for the same job.\n\t\t\t\t\t\t\t\t'rounded-radius px-space-md transition-colors',\n\t\t\t\t\t\t\t\tonSelect && 'cursor-pointer',\n\t\t\t\t\t\t\t\tactive ? interactionRecipes.rowCurrent : onSelect && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className={cn(active ? 'text-accent-foreground' : 'text-muted-foreground')}>\n\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t<ItemTitle bold={active}>{it.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!it.hint && <ItemDescription clamp={1}>{it.hint}</ItemDescription>}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t{typeof it.count === 'number' && (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{it.count}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\tclassName={cn('size-icon shrink-0 text-muted-foreground', active && 'text-accent-foreground')}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ItemGroup>\n\t\t</nav>\n\t);\n}\n\nCategoryNav.displayName = 'CategoryNav';\n","/**\n * SectionNav — sticky in-page anchor nav. Pass a list of section ids; the active one\n * is tracked via IntersectionObserver and the matching item is highlighted. Click to\n * scroll to that section. Pure JS — no router required.\n *\n * A click owns the current state: the clicked section stays current while the smooth\n * scroll it started passes other sections, after that scroll settles (including when\n * the last sections are too short to reach the top), and until the reader scrolls\n * again. Only then does the observer resume.\n */\nimport { forwardRef, useCallback, useEffect, useRef, useState, type ComponentPropsWithoutRef } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\n\nexport interface SectionNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSectionNavStrings: SectionNavStrings = {\n\tnavigationLabel: 'Section navigation',\n};\n\n/** Quiet time after the last scroll event before a click's smooth scroll counts as settled. */\nconst SCROLL_SETTLE_MS = 150;\n\nexport interface SectionNavItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface SectionNavProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children' | 'onSelect'> {\n\t/** Entries to render, in order. */\n\titems: SectionNavItem[];\n\trootMargin?: string;\n\tonSelect?: (id: string) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SectionNavStrings>;\n}\n\nexport const SectionNav = forwardRef<HTMLElement, SectionNavProps>(function SectionNav({\n\titems,\n\trootMargin = '-40% 0px -50% 0px',\n\tclassName,\n\tonSelect,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSectionNavStrings, stringsProp);\n\tconst [active, setActive] = useState<string | null>(items[0]?.id ?? null);\n\t// The section a click selected, and whether the scroll it started has settled.\n\tconst clickLock = useRef<{ id: string; settled: boolean } | null>(null);\n\tconst settleTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\t// Observe by identity, not array instance, so a re-render keeps the observer.\n\tconst sectionIds = items.map((it) => it.id).join('\\u0000');\n\n\tconst scheduleSettle = useCallback(() => {\n\t\tclearTimeout(settleTimer.current);\n\t\tsettleTimer.current = setTimeout(() => {\n\t\t\tif (clickLock.current) clickLock.current.settled = true;\n\t\t}, SCROLL_SETTLE_MS);\n\t}, []);\n\n\tuseEffect(() => {\n\t\t// Scroll events do not bubble, so listen in the capture phase to hear every\n\t\t// scrolling ancestor that scrollIntoView moves.\n\t\tconst onScroll = () => {\n\t\t\tconst lock = clickLock.current;\n\t\t\tif (!lock) return;\n\t\t\t// A scroll after the click's own scroll settled is the reader's: release.\n\t\t\tif (lock.settled) clickLock.current = null;\n\t\t\telse scheduleSettle();\n\t\t};\n\t\tdocument.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('scroll', onScroll, { capture: true });\n\t\t\tclearTimeout(settleTimer.current);\n\t\t};\n\t}, [scheduleSettle]);\n\n\tuseEffect(() => {\n\t\tconst ids = sectionIds ? sectionIds.split('\\u0000') : [];\n\t\tconst intersecting = new Map<string, boolean>();\n\t\tconst obs = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => intersecting.set(entry.target.id, entry.isIntersecting));\n\t\t\t\tif (clickLock.current) return;\n\t\t\t\t// The first section in reading order inside the observed band is current.\n\t\t\t\tconst next = ids.find((id) => intersecting.get(id));\n\t\t\t\tif (next) setActive(next);\n\t\t\t},\n\t\t\t{ rootMargin, threshold: 0 },\n\t\t);\n\t\tids.forEach((id) => {\n\t\t\tconst el = document.getElementById(id);\n\t\t\tif (el) obs.observe(el);\n\t\t});\n\t\treturn () => obs.disconnect();\n\t}, [sectionIds, rootMargin]);\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\tclassName={cn('section-nav--component', className)}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"2xs\" className=\"section-nav--items\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\tconst Icon = it.icon;\n\t\t\t\tconst isActive = active === it.id;\n\t\t\t\treturn (\n\t\t\t\t\t<a\n\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\thref={`#${it.id}`}\n\t\t\t\t\t\taria-current={isActive ? 'location' : undefined}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tclickLock.current = { id: it.id, settled: false };\n\t\t\t\t\t\t\t// Settles on its own when the target is already in place and nothing scrolls.\n\t\t\t\t\t\t\tscheduleSettle();\n\t\t\t\t\t\t\tdocument.getElementById(it.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t\t\t\t\tsetActive(it.id);\n\t\t\t\t\t\t\tonSelect?.(it.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`flex items-center gap-space-md rounded-radius px-space-md py-row-y transition-colors outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\tisActive ? interactionRecipes.rowCurrent : `text-muted-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-md shrink-0\" />}\n\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight={isActive ? 'semibold' : 'medium'}>{it.label}</Text>\n\t\t\t\t\t</a>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSectionNav.displayName = 'SectionNav';\n","/**\n * SideNav — collapsible vertical sidebar navigation. Items can be grouped\n * with a heading and optionally collapsed; each item supports an icon, badge,\n * and active-state highlight. The active item is matched by deepest path\n * prefix so nested routes still highlight their parent group.\n *\n * Pass `items` for the short flat-list default. Use `groups` only when the\n * navigation needs headings or collapsible sections.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport { Fragment, forwardRef, useMemo, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type { LayoutNavigationAdapter } from '../layout.types';\nimport { normalizeLayoutPath } from '../normalize-layout-path';\n\nexport interface SideNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSideNavStrings: SideNavStrings = {\n\tnavigationLabel: 'Side navigation',\n};\n\nexport interface SideNavItem {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n}\n\nexport interface SideNavGroup {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** Entries to render, in order. */\n\titems: SideNavItem[];\n\tdefaultCollapsed?: boolean;\n\tcollapsible?: boolean;\n}\n\ninterface SideNavSharedProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'>, LayoutNavigationAdapter {\n\t/** Path supplied by the app. Omit it to leave every entry unmarked. */\n\tcurrentPath?: string;\n\titemClassName?: string;\n\tactiveItemClassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SideNavStrings>;\n}\n\nexport type SideNavProps = SideNavSharedProps & (\n\t| {\n\t\t/** Short default for one flat navigation list. */\n\t\titems: SideNavItem[];\n\t\t/** Sections of the settings navigation. */\n\t\tgroups?: never;\n\t}\n\t| {\n\t\t/** Grouped navigation with optional headings and collapse behavior. */\n\t\tgroups: SideNavGroup[];\n\t\titems?: never;\n\t}\n);\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav({\n\titems,\n\tgroups: groupsProp,\n\tcurrentPath,\n\trenderLink,\n\tclassName,\n\titemClassName,\n\tactiveItemClassName,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSideNavStrings, stringsProp);\n\tconst linkRenderer = useLayoutLinkRenderer({ renderLink });\n\tconst groups = useMemo<SideNavGroup[]>(\n\t\t() => groupsProp ?? [\n\t\t\t{ id: 'side-nav-items', items: items ?? [], collapsible: false },\n\t\t],\n\t\t[groupsProp, items],\n\t);\n\tconst activeNormalized = useMemo(() => {\n\t\tif (currentPath === undefined) return null;\n\t\tconst activePath = normalizeLayoutPath(currentPath);\n\t\treturn groups\n\t\t\t.flatMap((group) => group.items.map((item) => normalizeLayoutPath(item.href)))\n\t\t\t.filter((path) => activePath === path || activePath.startsWith(`${path}/`))\n\t\t\t.sort((a, b) => b.length - a.length)[0] ?? null;\n\t}, [currentPath, groups]);\n\n\tconst [collapsed, setCollapsed] = useState<Record<string, boolean>>(() =>\n\t\tObject.fromEntries(groups.map((g) => [g.id, Boolean(g.defaultCollapsed)])),\n\t);\n\n\tconst toggleGroup = (id: string) =>\n\t\tsetCollapsed((prev) => ({ ...prev, [id]: !prev[id] }));\n\n\tconst resolvedActive =\n\t\tactiveItemClassName && activeItemClassName.length > 0\n\t\t\t? activeItemClassName\n\t\t\t: interactionRecipes.rowCurrent;\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tclassName={cn('side-nav--component', className)}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"side-nav--groups\">\n\t\t\t\t{groups.map((group) => {\n\t\t\t\tconst isCollapsed = group.collapsible !== false && collapsed[group.id];\n\t\t\t\tconst showLabel = !!group.label;\n\t\t\t\tconst shouldRenderItems = !isCollapsed;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack key={group.id} gap=\"2xs\" className=\"side-nav--group\">\n\t\t\t\t\t\t{!!showLabel && (\n\t\t\t\t\t\t\tgroup.collapsible !== false ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tonClick={() => toggleGroup(group.id)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-auto min-h-action-sm justify-between px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t'hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t) : group.label}\n\t\t\t\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'size-icon-md transition-transform',\n\t\t\t\t\t\t\t\t\t\t\tisCollapsed && '-rotate-90',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tisSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"px-row-x py-row-y\">\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t) : group.label\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!shouldRenderItems && (\n\t\t\t\t\t\t\t<Stack gap=\"2xs\" className=\"side-nav--items\">\n\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\tconst itemPath = normalizeLayoutPath(item.href);\n\t\t\t\t\t\t\t\t\tconst isActive = itemPath === activeNormalized;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Fragment key={item.href}>\n\t\t\t\t\t\t\t\t\t\t\t{linkRenderer({\n\t\t\t\t\t\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t'aria-current': isActive ? 'page' : undefined,\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'group flex items-center gap-space-md rounded-radius px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive && resolvedActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\titemClassName,\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\tchildren: <>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon className={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-icon shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive ? 'text-accent-foreground' : 'text-muted-foreground',\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\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isSimpleText(item.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\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) : item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && <Badge tone=\"secondary\" className=\"shrink-0\">{item.badge}</Badge>}\n\t\t\t\t\t\t\t\t\t\t\t\t</>,\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSideNav.displayName = 'SideNav';\n"],"mappings":"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"}
@@ -1,25 +1,37 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-B6kKb8jB.js";
4
- import { n } from "./buttons-BedGfygC.js";
5
- import { c as r, o as i, s as a } from "./typography-BQnine1k.js";
3
+ import { t } from "./utils-DhuoqFy4.js";
4
+ import { n } from "./buttons-DeW0bQeK.js";
5
+ import { c as r, o as i, s as a } from "./typography-C7-YMW1S.js";
6
6
  import { n as o, t as s } from "./text.styles-B64My8RZ.js";
7
7
  import { t as c } from "./focus-recipes-B653VaLq.js";
8
- import { t as l } from "./structure-DuxKl954.js";
9
- import { t as u } from "./interaction-recipes-XR9ZpVYL.js";
10
- import { t as d } from "./badge-xIiV_E7f.js";
11
- import { t as f } from "./separator-Ct_WSWTJ.js";
12
- import { a as p } from "./tabs-e7ko9S2o.js";
13
- import { n as m, t as h } from "./page-header-commands-7P3sfE9u.js";
8
+ import { t as l } from "./structure-DZJ2wbAU.js";
9
+ import { t as u } from "./interaction-recipes-4wZ2tvfb.js";
10
+ import { t as d } from "./badge-wWauMgAt.js";
11
+ import { t as f } from "./separator-DM6gs2vu.js";
12
+ import { a as p } from "./tabs-C4Kr_hCr.js";
13
+ import { n as m, t as h } from "./page-header-commands-DIKspJfx.js";
14
14
  import { Fragment as g, forwardRef as _, useCallback as v } from "react";
15
15
  import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
16
16
  import { Globe as S } from "lucide-react";
17
17
  //#region src/components/base/navigation/language-switcher.tsx
18
- function C({ locales: e, onRenderLabel: i, variant: a = "buttons", onSelect: o }) {
19
- let s = v((e, t) => {
20
- t || o?.(e);
21
- }, [o]);
22
- return e.length === 0 ? null : a === "inline" ? /* @__PURE__ */ x(l, {
18
+ function C({ locales: e, value: i, onValueChange: a, onRenderLabel: o, variant: s = "buttons", onSelect: d }) {
19
+ let f = a ?? d, p = v((e, t) => {
20
+ t || f?.(e);
21
+ }, [f]);
22
+ if (e.length === 0) return null;
23
+ let m = e.map((e) => {
24
+ let t = i === void 0 ? e.active ?? !1 : e.value === i, n = o ? o(e.active === t ? e : {
25
+ ...e,
26
+ active: t
27
+ }) : e.nativeLabel;
28
+ return {
29
+ value: e.value,
30
+ active: t,
31
+ label: n
32
+ };
33
+ });
34
+ return s === "inline" ? /* @__PURE__ */ x(l, {
23
35
  direction: "horizontal",
24
36
  align: "center",
25
37
  gap: "md",
@@ -34,25 +46,22 @@ function C({ locales: e, onRenderLabel: i, variant: a = "buttons", onSelect: o }
34
46
  gap: "md",
35
47
  wrap: !0,
36
48
  className: "min-w-0",
37
- children: e.map((n, a) => {
38
- let o = i ? i(n) : n.nativeLabel;
39
- return /* @__PURE__ */ x(g, { children: [/* @__PURE__ */ b("button", {
40
- type: "button",
41
- "aria-current": n.active ? "true" : void 0,
42
- onClick: () => s(n.value, n.active),
43
- className: t(`${u.nativeButtonReset} cursor-pointer rounded-radius text-pxs outline-none transition-colors ${c.text}`, n.active ? "text-primary-accent font-medium" : "text-muted-foreground hover:text-foreground"),
44
- children: /* @__PURE__ */ b(r, {
45
- tag: "span",
46
- size: "pxs",
47
- weight: n.active ? "medium" : "regular",
48
- className: "text-inherit",
49
- children: o
50
- })
51
- }), a < e.length - 1 && /* @__PURE__ */ b("span", {
52
- "aria-hidden": "true",
53
- className: "size-1 rounded-full bg-border"
54
- })] }, n.value);
55
- })
49
+ children: m.map((e, n) => /* @__PURE__ */ x(g, { children: [/* @__PURE__ */ b("button", {
50
+ type: "button",
51
+ "aria-current": e.active ? "true" : void 0,
52
+ onClick: () => p(e.value, e.active),
53
+ className: t(`${u.nativeButtonReset} cursor-pointer rounded-radius text-pxs outline-none transition-colors ${c.text}`, e.active ? "text-primary-accent font-medium" : "text-muted-foreground hover:text-foreground"),
54
+ children: /* @__PURE__ */ b(r, {
55
+ tag: "span",
56
+ size: "pxs",
57
+ weight: e.active ? "medium" : "regular",
58
+ className: "text-inherit",
59
+ children: e.label
60
+ })
61
+ }), n < m.length - 1 && /* @__PURE__ */ b("span", {
62
+ "aria-hidden": "true",
63
+ className: "size-1 rounded-full bg-border"
64
+ })] }, e.value))
56
65
  })]
57
66
  }) : /* @__PURE__ */ b(l, {
58
67
  direction: "horizontal",
@@ -60,18 +69,15 @@ function C({ locales: e, onRenderLabel: i, variant: a = "buttons", onSelect: o }
60
69
  wrap: !0,
61
70
  gap: "md",
62
71
  className: "language-switcher--component",
63
- children: e.map((e) => {
64
- let r = i ? i(e) : e.nativeLabel;
65
- return /* @__PURE__ */ b(n, {
66
- type: "button",
67
- tone: "secondary",
68
- buttonStyle: e.active ? "solid" : "ghost",
69
- "aria-current": e.active ? "true" : void 0,
70
- onClick: () => s(e.value, e.active),
71
- className: t("min-w-18 justify-center transition-colors", e.active ? "text-foreground" : "text-muted-foreground"),
72
- children: r
73
- }, e.value);
74
- })
72
+ children: m.map((e) => /* @__PURE__ */ b(n, {
73
+ type: "button",
74
+ tone: "secondary",
75
+ buttonStyle: e.active ? "solid" : "ghost",
76
+ "aria-current": e.active ? "true" : void 0,
77
+ onClick: () => p(e.value, e.active),
78
+ className: t("min-w-18 justify-center transition-colors", e.active ? "text-foreground" : "text-muted-foreground"),
79
+ children: e.label
80
+ }, e.value))
75
81
  });
76
82
  }
77
83
  C.displayName = "LanguageSwitcher";
@@ -252,4 +258,4 @@ O.displayName = "PageHeading";
252
258
  //#endregion
253
259
  export { C as i, E as n, w as r, O as t };
254
260
 
255
- //# sourceMappingURL=navigation-C90-oQFq.js.map
261
+ //# sourceMappingURL=navigation-Bt-v7rWP.js.map