themelia-react-ui 2.0.4 → 2.0.5

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 (588) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +113 -18
  3. package/dist/{accordion-96o0pN62.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/{action-menu-CHgs8vmj.js → action-menu-Dr8K-ghE.js} +48 -45
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-C58tQcBy.js} +210 -174
  10. package/dist/ai-artifact-C58tQcBy.js.map +1 -0
  11. package/dist/app-shell-B_IuNWOo.js +321 -0
  12. package/dist/app-shell-B_IuNWOo.js.map +1 -0
  13. package/dist/{attachment-DkoqHPPl.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-DkoqHPPl.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-D2FVZ1MH.js → auth-DTkkshS8.js} +43 -46
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DWO_HHhB.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-DErMA7ul.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-DErMA7ul.js.map → badge-xIiV_E7f.js.map} +1 -1
  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/batch-action-bar.js +1 -1
  27. package/dist/base/buttons.js +1 -1
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +3 -3
  30. package/dist/base/cascader.js +2 -372
  31. package/dist/base/chart.js +1 -1
  32. package/dist/base/choice-inputs.js +2 -2
  33. package/dist/base/code-block.js +1 -1
  34. package/dist/base/combobox.js +2 -2
  35. package/dist/base/command.js +1 -1
  36. package/dist/base/copyable.js +1 -1
  37. package/dist/base/date-pickers.js +2 -2
  38. package/dist/base/display.js +6 -6
  39. package/dist/base/feedback.js +3 -3
  40. package/dist/base/forms-numeric.js +1 -1
  41. package/dist/base/forms.js +2 -2
  42. package/dist/base/inline-edit.js +10 -10
  43. package/dist/base/item.js +1 -1
  44. package/dist/base/media-gallery.js +1 -1
  45. package/dist/base/metadata-list.js +1 -1
  46. package/dist/base/navigation.js +7 -7
  47. package/dist/base/popover-menu.js +1 -1
  48. package/dist/base/popover.js +1 -1
  49. package/dist/base/qr-code.js +1 -1
  50. package/dist/base/repeaters.js +12 -12
  51. package/dist/base/repeaters.js.map +1 -1
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +2 -2
  54. package/dist/base/signature-pad.js +7 -7
  55. package/dist/base/signature-pad.js.map +1 -1
  56. package/dist/base/skeleton.js +1 -1
  57. package/dist/base/spinner.js +4 -4
  58. package/dist/base/structure.js +1 -1
  59. package/dist/base/table.js +1 -1
  60. package/dist/base/text-inputs.js +2 -2
  61. package/dist/base/toaster.js +36 -36
  62. package/dist/base/toaster.js.map +1 -1
  63. package/dist/base/tree.js +1 -1
  64. package/dist/base/upload-queue.js +1 -1
  65. package/dist/base/upload.js +3 -3
  66. package/dist/base/value-inputs.js +1 -1
  67. package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-Cb8cuvyy.js} +6 -6
  68. package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
  69. package/dist/blocks/admin.js +21 -21
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +230 -216
  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 +325 -306
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +1 -1
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1259 -1184
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +2 -2
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +11 -11
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-B-WFKecD.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DkmK-z8E.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-BbfzgczK.js → buttons-BedGfygC.js} +16 -16
  90. package/dist/buttons-BedGfygC.js.map +1 -0
  91. package/dist/cards-rNX1M4Xn.js +69 -0
  92. package/dist/cards-rNX1M4Xn.js.map +1 -0
  93. package/dist/cascader-B1MiqkBq.js +439 -0
  94. package/dist/cascader-B1MiqkBq.js.map +1 -0
  95. package/dist/chart-Darg_0Kv.js +162 -0
  96. package/dist/chart-Darg_0Kv.js.map +1 -0
  97. package/dist/{checkbox-CzYUTPeJ.js → checkbox-fflqmODR.js} +2 -2
  98. package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-fflqmODR.js.map} +1 -1
  99. package/dist/{choice-inputs-JLtij2y4.js → choice-inputs-zUgBZfE4.js} +258 -257
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-CGNaUtAE.js → code-block-BzmM9Eig.js} +8 -8
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-Do4G0zcC.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-C0e8SsTm.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-C0e8SsTm.js.map → collection-content-gDh1v6O4.js.map} +1 -1
  107. package/dist/combobox-BEx0vJgF.js +362 -0
  108. package/dist/combobox-BEx0vJgF.js.map +1 -0
  109. package/dist/{combobox-CBJDs6w_.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-D8NrBj-b.js → command-CrlPIL6m.js} +11 -11
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-Di4w0H_S.js → comments-Dmpp0YIc.js} +29 -29
  114. package/dist/{comments-Di4w0H_S.js.map → comments-Dmpp0YIc.js.map} +1 -1
  115. package/dist/components/base/action-menu/action-menu.d.ts +7 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +6 -4
  118. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  119. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  120. package/dist/components/base/cards/smart-card.types.d.ts +3 -4
  121. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  122. package/dist/components/base/chart/chart.d.ts +6 -1
  123. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  124. package/dist/components/base/combobox/index.d.ts +4 -2
  125. package/dist/components/base/feedback/alert.d.ts +1 -1
  126. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  127. package/dist/components/base/forms/workflow.d.ts +7 -1
  128. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  129. package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
  130. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  131. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  132. package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
  133. package/dist/components/base/popover/popover.d.ts +3 -3
  134. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  135. package/dist/components/base/sheet/sheet.d.ts +2 -0
  136. package/dist/components/base/sidebar/index.d.ts +1 -1
  137. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  138. package/dist/components/base/toaster/index.d.ts +1 -0
  139. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  140. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  141. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  142. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  143. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  144. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  145. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  146. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  147. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  148. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  149. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  150. package/dist/components/blocks/commerce/index.d.ts +7 -6
  151. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  152. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  153. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  154. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  155. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  156. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  157. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  158. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  159. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  160. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  161. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  162. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  163. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  164. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  165. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  166. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  167. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  168. package/dist/components/features/activities/activities.types.d.ts +8 -2
  169. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  170. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  171. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  172. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  173. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  174. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  175. package/dist/components/features/filters/filters.types.d.ts +3 -0
  176. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  177. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  178. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  179. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  180. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  181. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  182. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  183. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  184. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  185. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  186. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  187. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  188. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  189. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  190. package/dist/components/features/products/products.strings.d.ts +9 -1
  191. package/dist/components/features/products/products.types.d.ts +43 -6
  192. package/dist/components/features/resource/resource.d.ts +5 -1
  193. package/dist/components/features/resource/resource.types.d.ts +12 -1
  194. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  195. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  196. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  197. package/dist/components/features/table/table.types.d.ts +1 -1
  198. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  199. package/dist/components/layout/app-shell/index.d.ts +1 -1
  200. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  201. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  202. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  203. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  204. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  205. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  206. package/dist/components/layout/header/header.types.d.ts +6 -6
  207. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  208. package/dist/components/layout/page/index.d.ts +2 -1
  209. package/dist/components/layout/page/page.d.ts +1 -0
  210. package/dist/components/layout/page/page.strings.d.ts +11 -0
  211. package/dist/components/layout/page/page.types.d.ts +69 -17
  212. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  213. package/dist/components/layout/settings/settings.d.ts +9 -2
  214. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  215. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  216. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  217. package/dist/components/layout/sidebar/index.d.ts +2 -1
  218. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  219. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  220. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  221. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  222. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  223. package/dist/components/ui/alert-dialog.d.ts +2 -2
  224. package/dist/components/ui/combobox.d.ts +1 -1
  225. package/dist/components/ui/dialog.d.ts +2 -2
  226. package/dist/components/ui/overlay-layer.d.ts +18 -0
  227. package/dist/components/ui/sheet.d.ts +5 -1
  228. package/dist/components/ui/sidebar-state.d.ts +82 -0
  229. package/dist/components/ui/sidebar.d.ts +5 -17
  230. package/dist/{containers-CRmHf7GP.js → containers-CIxwbZt5.js} +26 -18
  231. package/dist/containers-CIxwbZt5.js.map +1 -0
  232. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  233. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  234. package/dist/{copyable-CnGCZdX4.js → copyable-DIznBqiT.js} +7 -7
  235. package/dist/{copyable-CnGCZdX4.js.map → copyable-DIznBqiT.js.map} +1 -1
  236. package/dist/{data-display-D4oujtx0.js → data-display-BdgCAw8T.js} +268 -277
  237. package/dist/data-display-BdgCAw8T.js.map +1 -0
  238. package/dist/{date-Q7jnXxpk.js → date-Cq8ioE4o.js} +5 -5
  239. package/dist/{date-Q7jnXxpk.js.map → date-Cq8ioE4o.js.map} +1 -1
  240. package/dist/{date-picker-zOt1oNss.js → date-picker-RlIzKom_.js} +446 -437
  241. package/dist/date-picker-RlIzKom_.js.map +1 -0
  242. package/dist/{date-pickers-cj8IXbDC.js → date-pickers-DY-CpXS1.js} +12 -12
  243. package/dist/{date-pickers-cj8IXbDC.js.map → date-pickers-DY-CpXS1.js.map} +1 -1
  244. package/dist/{display-BB4BL_-K.js → display-KsZLw9Ov.js} +9 -9
  245. package/dist/{display-BB4BL_-K.js.map → display-KsZLw9Ov.js.map} +1 -1
  246. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  247. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  248. package/dist/features/activities.js +302 -253
  249. package/dist/features/activities.js.map +1 -1
  250. package/dist/features/ai-chat.js +15 -14
  251. package/dist/features/ai-chat.js.map +1 -1
  252. package/dist/features/appointment-calendar.js +22 -22
  253. package/dist/features/appointment-calendar.js.map +1 -1
  254. package/dist/features/async-preview.js +11 -10
  255. package/dist/features/async-preview.js.map +1 -1
  256. package/dist/features/combobox.js +1 -1
  257. package/dist/features/comments.js +1 -1
  258. package/dist/features/data-view.js +13 -13
  259. package/dist/features/data-view.js.map +1 -1
  260. package/dist/features/email-composer.js +237 -238
  261. package/dist/features/email-composer.js.map +1 -1
  262. package/dist/features/event-calendar.js +140 -146
  263. package/dist/features/event-calendar.js.map +1 -1
  264. package/dist/features/filters.js +1 -1
  265. package/dist/features/global-search.js +167 -138
  266. package/dist/features/global-search.js.map +1 -1
  267. package/dist/features/kanban.js +6 -7
  268. package/dist/features/kanban.js.map +1 -1
  269. package/dist/features/map.js +269 -260
  270. package/dist/features/map.js.map +1 -1
  271. package/dist/features/media-library.js +375 -326
  272. package/dist/features/media-library.js.map +1 -1
  273. package/dist/features/mentions.js +1 -1
  274. package/dist/features/overlays.js +1 -1
  275. package/dist/features/products.js +1266 -1193
  276. package/dist/features/products.js.map +1 -1
  277. package/dist/features/questionnaire.js +13 -13
  278. package/dist/features/questionnaire.js.map +1 -1
  279. package/dist/features/resource-assignment.js +8 -8
  280. package/dist/features/resource.js +69 -66
  281. package/dist/features/resource.js.map +1 -1
  282. package/dist/features/rich-text-editor.js +2 -2
  283. package/dist/features/schema-form.js +13 -13
  284. package/dist/features/suggestions.js +3 -3
  285. package/dist/features/sync.js +3 -3
  286. package/dist/features/table.js +1 -1
  287. package/dist/features/theme-tweaker.js +94 -95
  288. package/dist/features/theme-tweaker.js.map +1 -1
  289. package/dist/{feedback-DZNL5Lg1.js → feedback-Dm4izqFn.js} +80 -79
  290. package/dist/feedback-Dm4izqFn.js.map +1 -0
  291. package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  292. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  293. package/dist/{filters-BcT-uoFy.js → filters-DzgSJpMK.js} +693 -645
  294. package/dist/filters-DzgSJpMK.js.map +1 -0
  295. package/dist/{form-field-CsgRmdit.js → form-field-BriWAXyg.js} +6 -6
  296. package/dist/{form-field-CsgRmdit.js.map → form-field-BriWAXyg.js.map} +1 -1
  297. package/dist/{form-sizing-NXgjkmBG.js → form-sizing-Bs2qFUeE.js} +4 -4
  298. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  299. package/dist/{forms-BV5m5aQF.js → forms-C0RGnJTe.js} +17 -13
  300. package/dist/forms-C0RGnJTe.js.map +1 -0
  301. package/dist/{forms-numeric-Cd33AKbD.js → forms-numeric-DIhghX1Q.js} +86 -82
  302. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  303. package/dist/{header-BA697l4a.js → header-DMMxG__r.js} +67 -63
  304. package/dist/header-DMMxG__r.js.map +1 -0
  305. package/dist/header.recipes-BigdJjw1.js +6 -0
  306. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  307. package/dist/{hooks-BQ-L7Uu2.js → hooks-DB6CJ4MR.js} +26 -14
  308. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  309. package/dist/{icon-badge-COWbCCWu.js → icon-badge-DZF-YjQp.js} +4 -4
  310. package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  311. package/dist/index.js +4 -5
  312. package/dist/{input-Cdw4k0fb.js → input-CvyDQlY7.js} +8 -8
  313. package/dist/{input-Cdw4k0fb.js.map → input-CvyDQlY7.js.map} +1 -1
  314. package/dist/input-DMBwAZmr.js +21 -0
  315. package/dist/input-DMBwAZmr.js.map +1 -0
  316. package/dist/{item-BvZ2DR_x.js → item-DjCcM18E.js} +16 -16
  317. package/dist/item-DjCcM18E.js.map +1 -0
  318. package/dist/layout/app-shell.js +1 -1
  319. package/dist/layout/auth.js +1 -1
  320. package/dist/layout/containers.js +1 -1
  321. package/dist/layout/header.js +1 -1
  322. package/dist/layout/hooks.js +1 -1
  323. package/dist/layout/navigation.js +1 -1
  324. package/dist/layout/page.js +2 -2
  325. package/dist/layout/settings.js +1 -1
  326. package/dist/layout/sidebar.js +3 -3
  327. package/dist/layout/workspace.js +1 -1
  328. package/dist/layout.js +11 -11
  329. package/dist/lib/affordance-geometry.generated.d.ts +35 -35
  330. package/dist/lib/control-group-recipes.d.ts +5 -5
  331. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  332. package/dist/lib/motion-recipes.d.ts +3 -0
  333. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  334. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  335. package/dist/lib/portal-recipes.d.ts +3 -0
  336. package/dist/lib/token-merge.generated.d.ts +13 -10
  337. package/dist/lib/utils.js +1 -1
  338. package/dist/map-demo-tile.svg +1 -1
  339. package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C-vChPmE.js} +6 -6
  340. package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  341. package/dist/{mentions-RKOQaaIB.js → mentions-0_4nWuI-.js} +10 -10
  342. package/dist/{mentions-RKOQaaIB.js.map → mentions-0_4nWuI-.js.map} +1 -1
  343. package/dist/{message-INU2xsxu.js → message-g8p7eVtN.js} +7 -7
  344. package/dist/message-g8p7eVtN.js.map +1 -0
  345. package/dist/{metadata-list-qVV7AVxa.js → metadata-list-C3MkU-Om.js} +64 -64
  346. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  347. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  348. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  349. package/dist/navigation-C90-oQFq.js +255 -0
  350. package/dist/navigation-C90-oQFq.js.map +1 -0
  351. package/dist/{navigation-BQNcg1jT.js → navigation-DaRjthVk.js} +101 -82
  352. package/dist/navigation-DaRjthVk.js.map +1 -0
  353. package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  354. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  355. package/dist/{number-E_OiIfJz.js → number-CRU3kGuk.js} +5 -5
  356. package/dist/{number-E_OiIfJz.js.map → number-CRU3kGuk.js.map} +1 -1
  357. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  358. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  359. package/dist/overlays-BSgCtM2v.js +1013 -0
  360. package/dist/overlays-BSgCtM2v.js.map +1 -0
  361. package/dist/page-DUUKDAjo.js +331 -0
  362. package/dist/page-DUUKDAjo.js.map +1 -0
  363. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  364. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  365. package/dist/{pagination-Ch8X_47u.js → pagination-CgCjElfu.js} +7 -7
  366. package/dist/{pagination-Ch8X_47u.js.map → pagination-CgCjElfu.js.map} +1 -1
  367. package/dist/popover-B85RenIl.js +201 -0
  368. package/dist/popover-B85RenIl.js.map +1 -0
  369. package/dist/{popover-menu-BYaCdFhf.js → popover-menu-DlnQ2zlR.js} +7 -7
  370. package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  371. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  372. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  373. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  374. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  375. package/dist/{primitives-Du64iDbb.js → primitives-ByWgGUgt.js} +5 -5
  376. package/dist/{primitives-Du64iDbb.js.map → primitives-ByWgGUgt.js.map} +1 -1
  377. package/dist/primitives.js +4 -4
  378. package/dist/{progress-BvF2oCdV.js → progress-BJhQP9WX.js} +9 -9
  379. package/dist/{progress-BvF2oCdV.js.map → progress-BJhQP9WX.js.map} +1 -1
  380. package/dist/{receipt-D789Jwyy.js → receipt-tOc7B3hw.js} +7 -7
  381. package/dist/receipt-tOc7B3hw.js.map +1 -0
  382. package/dist/{rich-text-CLJEf76s.js → rich-text-Dth5E882.js} +3 -3
  383. package/dist/{rich-text-CLJEf76s.js.map → rich-text-Dth5E882.js.map} +1 -1
  384. package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-C1fOjBTd.js} +429 -430
  385. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  386. package/dist/{rich-text-editor-toolbar-L__e4x47.js → rich-text-editor-toolbar-laT3tpBT.js} +32 -28
  387. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  388. package/dist/{scroll-area-La5RXsEk.js → scroll-area-B0dB2cBi.js} +2 -2
  389. package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  390. package/dist/{separator-DAEV0w65.js → separator-Bb17I4pu.js} +2 -2
  391. package/dist/{separator-DAEV0w65.js.map → separator-Bb17I4pu.js.map} +1 -1
  392. package/dist/{separator-GNfPG-90.js → separator-Ct_WSWTJ.js} +3 -3
  393. package/dist/{separator-GNfPG-90.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  394. package/dist/services/actions.js +1 -1
  395. package/dist/{settings-BA2iboic.js → settings-Bar5wiSo.js} +31 -38
  396. package/dist/settings-Bar5wiSo.js.map +1 -0
  397. package/dist/sheet-BGPERY55.js +250 -0
  398. package/dist/sheet-BGPERY55.js.map +1 -0
  399. package/dist/sidebar-D-JYMMbY.js +686 -0
  400. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  401. package/dist/sidebar-f9gRWXIR.js +1001 -0
  402. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  403. package/dist/skeleton-BapcJd9C.js +265 -0
  404. package/dist/skeleton-BapcJd9C.js.map +1 -0
  405. package/dist/smart-card-CW0hjetE.js +617 -0
  406. package/dist/smart-card-CW0hjetE.js.map +1 -0
  407. package/dist/{structure-C0V0_Fyf.js → structure-DuxKl954.js} +2 -2
  408. package/dist/{structure-C0V0_Fyf.js.map → structure-DuxKl954.js.map} +1 -1
  409. package/dist/style.css +1 -1
  410. package/dist/{table-CpvnzJn9.js → table-B4TE7iOV.js} +3 -3
  411. package/dist/{table-CpvnzJn9.js.map → table-B4TE7iOV.js.map} +1 -1
  412. package/dist/{table-DH7rozUv.js → table-CFOWY9pQ.js} +394 -388
  413. package/dist/table-CFOWY9pQ.js.map +1 -0
  414. package/dist/{tabs-eqVsJZWO.js → tabs-e7ko9S2o.js} +11 -11
  415. package/dist/tabs-e7ko9S2o.js.map +1 -0
  416. package/dist/{text-inputs-DXItiR0O.js → text-inputs-B1culiSK.js} +17 -17
  417. package/dist/text-inputs-B1culiSK.js.map +1 -0
  418. package/dist/theme.css +40 -37
  419. package/dist/{timelines-DmtztAY_.js → timelines-D3Sl9ueq.js} +13 -12
  420. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  421. package/dist/tooltip-8wz5S_Zr.js +113 -0
  422. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  423. package/dist/{tree-CV11PURP.js → tree-CzUJHnFs.js} +8 -8
  424. package/dist/{tree-CV11PURP.js.map → tree-CzUJHnFs.js.map} +1 -1
  425. package/dist/typography/rich-text.js +1 -1
  426. package/dist/{typography-CSyJrh28.js → typography-BQnine1k.js} +12 -12
  427. package/dist/{typography-CSyJrh28.js.map → typography-BQnine1k.js.map} +1 -1
  428. package/dist/typography.js +1 -1
  429. package/dist/ui-provider-C-74NVLc.js +178 -0
  430. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  431. package/dist/ui-provider.js +2 -3
  432. package/dist/{upload-C9SA0X-8.js → upload-BOW6U2tI.js} +25 -24
  433. package/dist/upload-BOW6U2tI.js.map +1 -0
  434. package/dist/{upload-queue-DhQJiSRc.js → upload-queue-qUXn1ykN.js} +16 -14
  435. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  436. package/dist/{usage-card-DVTRDmGz.js → usage-card-BeSLY0i0.js} +24 -17
  437. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  438. package/dist/{utils-CF3c95Io.js → utils-B6kKb8jB.js} +237 -141
  439. package/dist/utils-B6kKb8jB.js.map +1 -0
  440. package/dist/value-inputs-skdVB2zh.js +980 -0
  441. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  442. package/dist/{value-typography-ClupF0Gz.js → value-typography-uAmWUAL1.js} +2 -2
  443. package/dist/{value-typography-ClupF0Gz.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  444. package/dist/{workspace-9EFVXUyk.js → workspace-DHeHv0qw.js} +50 -49
  445. package/dist/workspace-DHeHv0qw.js.map +1 -0
  446. package/docs/consumer-skill/SKILL.md +4 -3
  447. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  448. package/docs/consumer-skill/examples/app-layout.tsx +52 -1
  449. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  450. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  451. package/docs/consumer-skill/examples/detail.tsx +5 -4
  452. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  453. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  454. package/docs/consumer-skill/examples/manifest.json +38 -1
  455. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  456. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  457. package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
  458. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
  459. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  460. package/docs/consumer-skill/references/agents-md.md +19 -17
  461. package/docs/consumer-skill/references/analytics.md +18 -1
  462. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  463. package/docs/consumer-skill/references/component-contracts.json +7131 -1754
  464. package/docs/consumer-skill/references/composition-mapping.md +17 -3
  465. package/docs/consumer-skill/references/composition.md +159 -31
  466. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  467. package/docs/consumer-skill/references/custom-composition.md +261 -0
  468. package/docs/consumer-skill/references/data-reading.md +79 -0
  469. package/docs/consumer-skill/references/design-contract.md +11 -9
  470. package/docs/consumer-skill/references/discovery.md +27 -3
  471. package/docs/consumer-skill/references/domain-structures.md +124 -0
  472. package/docs/consumer-skill/references/installation.md +15 -4
  473. package/docs/consumer-skill/references/integration.md +35 -0
  474. package/docs/consumer-skill/references/product-composition.md +94 -0
  475. package/docs/consumer-skill/references/public-api.json +2881 -420
  476. package/docs/consumer-skill/references/review.md +39 -2
  477. package/docs/consumer-skill/references/rhf-workflows.md +7 -0
  478. package/docs/consumer-skill/references/screen-archetypes.md +19 -7
  479. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  480. package/docs/consumer-skill/references/theming.md +17 -18
  481. package/docs/consumer-skill/references/tokens.json +9 -9
  482. package/docs/consumer-skill/references/view-craft.md +153 -0
  483. package/docs/consumer-skill/references/view-spec.md +73 -0
  484. package/docs/consumer-skill/references/workflows.md +7 -1
  485. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  486. package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
  487. package/docs/consumer-skill/scripts/composition.mjs +61 -5
  488. package/docs/consumer-skill/scripts/discovery.mjs +54 -0
  489. package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
  490. package/docs/consumer-skill/scripts/inspection.mjs +73 -18
  491. package/docs/consumer-skill/scripts/setup-skills.mjs +41 -6
  492. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  493. package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
  494. package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
  495. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  496. package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
  497. package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
  498. package/package.json +1 -1
  499. package/dist/accordion-96o0pN62.js.map +0 -1
  500. package/dist/action-menu-CHgs8vmj.js.map +0 -1
  501. package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
  502. package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
  503. package/dist/app-shell-D63ATkIK.js +0 -237
  504. package/dist/app-shell-D63ATkIK.js.map +0 -1
  505. package/dist/auth-D2FVZ1MH.js.map +0 -1
  506. package/dist/avatar-DWO_HHhB.js.map +0 -1
  507. package/dist/base/cascader.js.map +0 -1
  508. package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
  509. package/dist/button-DkmK-z8E.js.map +0 -1
  510. package/dist/buttons-BbfzgczK.js.map +0 -1
  511. package/dist/cards-4JTWqvVe.js +0 -68
  512. package/dist/cards-4JTWqvVe.js.map +0 -1
  513. package/dist/chart-C19flDQb.js +0 -155
  514. package/dist/chart-C19flDQb.js.map +0 -1
  515. package/dist/choice-inputs-JLtij2y4.js.map +0 -1
  516. package/dist/code-block-CGNaUtAE.js.map +0 -1
  517. package/dist/combobox-CBJDs6w_.js.map +0 -1
  518. package/dist/combobox-hbhSS18O.js +0 -355
  519. package/dist/combobox-hbhSS18O.js.map +0 -1
  520. package/dist/command-D8NrBj-b.js.map +0 -1
  521. package/dist/containers-CRmHf7GP.js.map +0 -1
  522. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  523. package/dist/data-display-D4oujtx0.js.map +0 -1
  524. package/dist/date-picker-zOt1oNss.js.map +0 -1
  525. package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
  526. package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
  527. package/dist/feedback-DZNL5Lg1.js.map +0 -1
  528. package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
  529. package/dist/filters-BcT-uoFy.js.map +0 -1
  530. package/dist/form-sizing-NXgjkmBG.js.map +0 -1
  531. package/dist/forms-BV5m5aQF.js.map +0 -1
  532. package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
  533. package/dist/header-BA697l4a.js.map +0 -1
  534. package/dist/hooks-BQ-L7Uu2.js.map +0 -1
  535. package/dist/input-DOPL5_QE.js +0 -21
  536. package/dist/input-DOPL5_QE.js.map +0 -1
  537. package/dist/item-BvZ2DR_x.js.map +0 -1
  538. package/dist/message-INU2xsxu.js.map +0 -1
  539. package/dist/metadata-list-qVV7AVxa.js.map +0 -1
  540. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  541. package/dist/navigation-BQNcg1jT.js.map +0 -1
  542. package/dist/navigation-DLF3E1IC.js +0 -145
  543. package/dist/navigation-DLF3E1IC.js.map +0 -1
  544. package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
  545. package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
  546. package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
  547. package/dist/overlays-BlKynmde.js +0 -1004
  548. package/dist/overlays-BlKynmde.js.map +0 -1
  549. package/dist/page-CIwNUtGr.js +0 -227
  550. package/dist/page-CIwNUtGr.js.map +0 -1
  551. package/dist/page-header-commands-DFMlNYzN.js +0 -128
  552. package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
  553. package/dist/popover-uwzX2vo7.js +0 -198
  554. package/dist/popover-uwzX2vo7.js.map +0 -1
  555. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  556. package/dist/receipt-D789Jwyy.js.map +0 -1
  557. package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
  558. package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
  559. package/dist/settings-BA2iboic.js.map +0 -1
  560. package/dist/sheet-DoAxTb2J.js +0 -213
  561. package/dist/sheet-DoAxTb2J.js.map +0 -1
  562. package/dist/sidebar-ByqKR_W5.js +0 -512
  563. package/dist/sidebar-ByqKR_W5.js.map +0 -1
  564. package/dist/sidebar-D2iSnGJ7.js +0 -619
  565. package/dist/sidebar-D2iSnGJ7.js.map +0 -1
  566. package/dist/skeleton-CUj8O5Bd.js +0 -264
  567. package/dist/skeleton-CUj8O5Bd.js.map +0 -1
  568. package/dist/smart-card-CqkzQsK-.js +0 -614
  569. package/dist/smart-card-CqkzQsK-.js.map +0 -1
  570. package/dist/table-DH7rozUv.js.map +0 -1
  571. package/dist/tabs-eqVsJZWO.js.map +0 -1
  572. package/dist/text-inputs-DXItiR0O.js.map +0 -1
  573. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  574. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  575. package/dist/timelines-DmtztAY_.js.map +0 -1
  576. package/dist/tooltip-B4hjKtoV.js +0 -111
  577. package/dist/tooltip-B4hjKtoV.js.map +0 -1
  578. package/dist/ui-provider-CQCuCBcy.js +0 -136
  579. package/dist/ui-provider-CQCuCBcy.js.map +0 -1
  580. package/dist/upload-C9SA0X-8.js.map +0 -1
  581. package/dist/upload-queue-DhQJiSRc.js.map +0 -1
  582. package/dist/usage-card-DVTRDmGz.js.map +0 -1
  583. package/dist/use-mobile-vaLKwgyf.js +0 -15
  584. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  585. package/dist/utils-CF3c95Io.js.map +0 -1
  586. package/dist/value-inputs-C0o70p-U.js +0 -980
  587. package/dist/value-inputs-C0o70p-U.js.map +0 -1
  588. package/dist/workspace-9EFVXUyk.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-INU2xsxu.js","names":["Text","Stack","surfaceDividerRecipes","defaultMessageStrings","hasMessageMedia","media","messageColumns","messageContentColumn","MessageContent","forwardRef","props","cn","className","MessageHeader","MessageActions","MessageBubble","scalar","children","tone","MessageStatus","Message","stringsProp","strings","useStrings","hasAvatar","avatar","align","loading","typing","author","timestamp","status","actions"],"sources":["../src/components/blocks/collaboration/message/message.types.ts","../src/components/blocks/collaboration/message/message.recipes.ts","../src/components/blocks/collaboration/message/message.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\nexport interface MessageStrings { typing: string; loading: string }\nexport const defaultMessageStrings: MessageStrings = { typing: 'Typing…', loading: 'Loading message…' };\nexport interface MessageProps extends ComponentPropsWithoutRef<'div'> {\n /** Message direction, independent of author or service role. */\n align?: 'start' | 'end';\n /** Bubble treatment. @default muted */\n tone?: 'muted' | 'primary' | 'plain' | 'surface';\n avatar?: ReactNode;\n author?: ReactNode;\n /** Caller-formatted time; datetime supplies machine-readable time when available. */\n timestamp?: ReactNode;\n dateTime?: string;\n actions?: ReactNode;\n status?: ReactNode;\n loading?: boolean;\n typing?: boolean;\n strings?: StringsProp<MessageStrings>;\n}\nexport interface MessagePartProps extends ComponentPropsWithoutRef<'div'> {}\nexport interface MessageBubbleProps extends MessagePartProps { tone?: 'muted' | 'primary' | 'plain' | 'surface' }\nexport interface MessageStatusProps extends ComponentPropsWithoutRef<'span'> {}\n","import type { ReactNode } from 'react';\n\n/** Obvious empty slot values have no media track; rich React nodes remain untouched. */\nexport function hasMessageMedia(media: ReactNode): boolean {\n\tif (Array.isArray(media)) return media.some(hasMessageMedia);\n\treturn media !== null && media !== undefined && typeof media !== 'boolean' && media !== '';\n}\n\n/** Transcript rows and their continuation regions share the actual media track. */\nexport const messageColumns = {\n\tstart: 'grid-cols-[auto_minmax(0,1fr)]',\n\tend: 'grid-cols-[minmax(0,1fr)_auto]',\n} as const;\n\nexport const messageContentColumn = {\n\tstart: 'col-start-2',\n\tend: 'col-start-1',\n} as const;\n","import { forwardRef } from 'react';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { surfaceDividerRecipes } from '../../../../lib/surface-recipes';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\nimport { defaultMessageStrings, type MessageProps, type MessagePartProps, type MessageBubbleProps, type MessageStatusProps } from './message.types';\nimport { hasMessageMedia, messageColumns, messageContentColumn } from './message.recipes';\nexport const MessageContent = forwardRef<HTMLDivElement, MessagePartProps>(function MessageContent({ className, ...props }, ref) { return <Stack {...props} ref={ref} gap=\"dense\" className={cn('message--content min-w-0 max-w-full flex-1', className)} />; });\nexport const MessageHeader = forwardRef<HTMLDivElement, MessagePartProps>(function MessageHeader({ className, ...props }, ref) { return <Stack {...props} ref={ref} direction=\"horizontal\" align=\"baseline\" gap=\"sm\" wrap className={cn('message--header', className)} />; });\nexport const MessageActions = forwardRef<HTMLDivElement, MessagePartProps>(function MessageActions({ className, ...props }, ref) { return <Stack {...props} ref={ref} direction=\"horizontal\" align=\"center\" gap=\"xs\" wrap className={cn('message--actions', className)} />; });\nexport const MessageBubble = forwardRef<HTMLDivElement, MessageBubbleProps>(function MessageBubble({ tone = 'muted', className, children, ...props }, ref) {\n const scalar = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n return <div {...props} ref={ref} data-tone={tone} className={cn('message--bubble min-w-0 max-w-full rounded-radius p-surface-xs break-words', tone === 'primary' ? 'bg-primary text-primary-foreground' : tone === 'muted' ? 'bg-muted text-muted-foreground' : tone === 'surface' ? cn('bg-card text-card-foreground', surfaceDividerRecipes.frame.shell) : 'text-inherit', className)}>{scalar ? <Text className=\"text-inherit whitespace-pre-wrap\" lineHeight=\"relaxed\">{children}</Text> : children}</div>;\n});\nexport const MessageStatus = forwardRef<HTMLSpanElement, MessageStatusProps>(function MessageStatus({ children, className, ...props }, ref) { return <span {...props} ref={ref} role=\"status\" className={cn('message--status', className)}><Text tag=\"span\" size=\"xs\" type=\"secondary\">{children}</Text></span>; });\n/** Callback-free transcript presentation. Consumers own rich text, requests and delivery state. */\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(function Message({ align = 'start', tone = 'muted', avatar, author, timestamp, dateTime, actions, status, loading = false, typing = false, strings: stringsProp, children, className, ...props }, ref) {\n const strings = useStrings(defaultMessageStrings, stringsProp);\n const hasAvatar = hasMessageMedia(avatar);\n return <Stack {...props} ref={ref} direction=\"horizontal\" align=\"start\" gap=\"md\" data-align={align} aria-busy={loading || typing || undefined} className={cn('message--component grid w-full min-w-0', hasAvatar ? messageColumns[align] : 'grid-cols-1', className)}>\n {hasAvatar && <Stack direction=\"horizontal\" align=\"start\" gap=\"md\" wrap={false} className=\"message--avatar shrink-0\">{avatar}</Stack>}\n <MessageContent className={cn('row-start-1', hasAvatar && messageContentColumn[align], align === 'end' && 'items-end')}>\n {(author !== undefined || timestamp !== undefined) && <MessageHeader>\n {author !== undefined && <Text type=\"inherit\" tag=\"span\" weight=\"medium\">{author}</Text>}\n {timestamp !== undefined && <time dateTime={dateTime}><Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"tabular-nums\">{timestamp}</Text></time>}\n </MessageHeader>}\n <MessageBubble tone={tone}>{children}</MessageBubble>\n {(typing || loading || status !== undefined) && <MessageStatus>{typing ? strings.typing : loading ? strings.loading : status}</MessageStatus>}\n {actions !== undefined && <MessageActions>{actions}</MessageActions>}\n </MessageContent>\n </Stack>;\n});\nMessage.displayName = 'Message';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata-list-qVV7AVxa.js","names":["_Fragment","Link","DateValue","_Fragment","affordanceGeometry","Text","DisplayLabel","textVariants","TooltipTrigger","TooltipContent","Tooltip","resolveResponsiveEntries","compileResponsiveClasses","Grid","Stack","Value","Phone","Url","MonoValue","Email","EmptyValue","Link$1","Money","Time","DateTime","DatePrimitive","Badge","Separator","fieldAffordanceRecipes","React","Fragment$1","defaultMetadataListStrings","label","isEmpty","value","renderEmptyValue","cn","className","emptyLabel","assertNever","MetadataValue","props","metadataColumnRecipes","metadataContainerColumns","resolveMetadataColumns","columns","MetadataLabel","resolveKey","item","index","isPrimitiveMetadataValue","isMetadataValueDescriptor","renderMetadataValue","valueBase","isEmptyValue","renderItemValue","Tag","renderedClassName","MetadataInfoTrigger","triggerProps","ariaLabel","Info","MetadataItemInfo","strings","MetadataItemIcon","Icon","isCompact","MetadataList","stringsProp","useStrings","list","items","density","hasTitle","title","shouldShowSeparator","titleSeparator","rootClassName","head","layout","itemSeparatorText","itemSeparator","showItemSeparator","separator","rowPaddingY","isEndAligned","valueAlign","rowTrack","valueAlignClassName","adaptTo"],"sources":["../src/components/base/metadata-list/metadata-list.strings.ts","../src/components/base/metadata-list/metadata-value.tsx","../src/components/base/metadata-list/metadata-list.tsx"],"sourcesContent":["/**\n * Default user-facing strings for `<MetadataList>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <MetadataList strings={{ infoFallback: t('metadata.info') }} … />\n */\n\nexport interface MetadataListStrings {\n\t/**\n\t * Suffix appended to the label when generating the tooltip-trigger\n\t * `aria-label` (\"<label> info\"). Receives the label as the first arg\n\t * so consumers can localise the full template.\n\t */\n\tformatInfoAriaLabel: (label: string) => string;\n\t/** Fallback `aria-label` used when the field label is not a plain string. */\n\tinfoFallback: string;\n}\n\nexport const defaultMetadataListStrings: MetadataListStrings = {\n\tformatInfoAriaLabel: (label) => `${label} info`,\n\tinfoFallback: 'Info',\n};\n","/**\n * MetadataValue — primitive-backed adapter for typed label/value facts.\n *\n * Each descriptor kind exposes only the fields its primitive consumes. Custom\n * `node` values remain untouched so app-owned composition keeps its identity.\n */\nimport type { ReactNode } from 'react';\nimport type { Locale } from 'date-fns';\n\nimport { Badge, type BadgeProps } from '../badge';\nimport {\n\tDate as DateValue,\n\tDateTime,\n\tEmail,\n\tEmptyValue,\n\tLink,\n\tMoney,\n\tMonoValue,\n\tPhone,\n\tTime,\n\tUrl,\n\tValue,\n\ttype DateInput,\n\ttype DatePreset,\n\ttype MoneyProps,\n\ttype TimeProps,\n} from '../../primitives';\nimport { EMPTY } from '../../../lib/format';\nimport { cn } from '../../../lib/utils';\n\nexport type MetadataValueKind =\n\t| 'text'\n\t| 'mono'\n\t| 'email'\n\t| 'phone'\n\t| 'url'\n\t| 'link'\n\t| 'date'\n\t| 'time'\n\t| 'datetime'\n\t| 'money'\n\t| 'badge'\n\t| 'node'\n\t| 'empty';\n\ntype MetadataDisplayValue = Exclude<ReactNode, null | undefined>;\ntype MetadataDateInput = Exclude<DateInput, null | undefined>;\n/** Styling hook shared by every descriptor. */\ntype MetadataDescriptorBase = {\n\t/** Merged onto the rendered value. */\n\tclassName?: string;\n};\n/** Empty handling shared by every descriptor that can receive a blank value. */\ntype MetadataValueFallback = {\n\t/** Copy shown when the value is empty. Defaults to an em dash. */\n\temptyLabel?: ReactNode;\n};\n/** Escape hatch for descriptors whose value can be rendered by the caller. */\ntype MetadataDisplayOverride = {\n\t/** Pre-rendered content used verbatim, bypassing this descriptor's formatting. */\n\tdisplay?: ReactNode;\n};\n\nexport type MetadataTextValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & MetadataDisplayOverride & {\n\t/** Plain text. The default when `kind` is omitted. */\n\tkind?: 'text';\n\t/** The value to show. */\n\tvalue: MetadataDisplayValue;\n};\n\nexport type MetadataMonoValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & MetadataDisplayOverride & {\n\t/** Monospace, for ids, hashes, and codes. */\n\tkind: 'mono';\n\t/** The value to show. */\n\tvalue: MetadataDisplayValue;\n};\n\nexport type MetadataContactValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & MetadataDisplayOverride & {\n\t/** Contact value, rendered as the matching `mailto:`, `tel:`, or external link. */\n\tkind: 'email' | 'phone' | 'url';\n\t/** The address, number, or URL. */\n\tvalue: string;\n};\n\nexport type MetadataLinkValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & MetadataDisplayOverride & {\n\t/** An arbitrary link, where text and destination differ. */\n\tkind: 'link';\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\t/** Link text. Falls back to `href` when omitted. */\n\tvalue?: MetadataDisplayValue;\n};\n\nexport type MetadataDateValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & {\n\t/** A calendar date. */\n\tkind: 'date';\n\t/** The date to format. */\n\tvalue: MetadataDateInput;\n\t/** date-fns `Locale` for formatting. */\n\tdateLocale?: Locale;\n\t/** date-fns pattern, overriding `datePreset`. */\n\tdateFormat?: string;\n\t/** Named date length. */\n\tdatePreset?: DatePreset;\n};\n\nexport type MetadataTimeValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & {\n\t/** A time of day. */\n\tkind: 'time';\n\t/** The time to format. */\n\tvalue: MetadataDateInput;\n\t/** date-fns `Locale` for formatting. */\n\tdateLocale?: Locale;\n\t/** date-fns pattern, overriding `timePreset`. */\n\ttimeFormat?: string;\n\t/** Named time length. */\n\ttimePreset?: TimeProps['preset'];\n};\n\nexport type MetadataDateTimeValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & {\n\tkind: 'datetime';\n\t/** The instant to format. */\n\tvalue: MetadataDateInput;\n\t/** date-fns `Locale` for formatting. */\n\tdateLocale?: Locale;\n\t/** date-fns pattern for the date portion. */\n\tdateFormat?: string;\n\t/** date-fns pattern for the time portion. */\n\ttimeFormat?: string;\n\t/** Named date length, used when `dateFormat` is omitted. */\n\tdatePreset?: DatePreset;\n};\n\nexport type MetadataMoneyValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & {\n\t/** A monetary amount. */\n\tkind: 'money';\n\t/** The amount, in major units unless `minorUnitScale` says otherwise. */\n\tvalue: number | string;\n\t/** ISO currency code. */\n\tcurrency?: MoneyProps['currency'];\n\t/** Unit label shown after the amount. */\n\tunit?: MoneyProps['unit'];\n\t/** Divisor applied when the value arrives in minor units, e.g. `100` for cents. */\n\tminorUnitScale?: MoneyProps['minorUnitScale'];\n\t/** Explicit currency symbol, overriding the one derived from `currency`. */\n\tsymbol?: MoneyProps['symbol'];\n\t/** Whether the currency shows as a symbol, code, or name. */\n\tcurrencyDisplay?: MoneyProps['currencyDisplay'];\n\t/** Selects the compact or full presentation. */\n\tformatMode?: MoneyProps['formatMode'];\n\t/** Smallest number of decimals to show. */\n\tminimumFractionDigits?: MoneyProps['minimumFractionDigits'];\n\t/** Largest number of decimals to show. */\n\tmaximumFractionDigits?: MoneyProps['maximumFractionDigits'];\n\t/** BCP 47 locale for the amount. */\n\tlocale?: MoneyProps['locale'];\n};\n\nexport type MetadataBadgeValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & MetadataDisplayOverride & {\n\t/** A status chip. */\n\tkind: 'badge';\n\t/** Badge text. */\n\tvalue: MetadataDisplayValue;\n\t/** Badge tone. */\n\tbadgeTone?: BadgeProps['tone'];\n\t/** Badge size. */\n\tbadgeSize?: BadgeProps['size'];\n};\n\nexport type MetadataNodeValueDescriptor = {\n\t/** Arbitrary content, bypassing every formatting path. */\n\tkind: 'node';\n\t/** The content to render. */\n\tnode: ReactNode;\n};\n\nexport type MetadataEmptyValueDescriptor = MetadataDescriptorBase & MetadataValueFallback & {\n\t/** A known-absent value, rendered as the empty label rather than omitted. */\n\tkind: 'empty';\n};\n\nexport type MetadataValueDescriptor =\n\t| MetadataTextValueDescriptor\n\t| MetadataMonoValueDescriptor\n\t| MetadataContactValueDescriptor\n\t| MetadataLinkValueDescriptor\n\t| MetadataDateValueDescriptor\n\t| MetadataTimeValueDescriptor\n\t| MetadataDateTimeValueDescriptor\n\t| MetadataMoneyValueDescriptor\n\t| MetadataBadgeValueDescriptor\n\t| MetadataNodeValueDescriptor\n\t| MetadataEmptyValueDescriptor;\n\nexport type MetadataValueProps = MetadataValueDescriptor;\n\nfunction isEmpty(value: unknown) {\n\treturn value === null || value === undefined || value === '';\n}\n\nfunction renderEmptyValue(className: string | undefined, emptyLabel: ReactNode = EMPTY) {\n\treturn (\n\t\t<EmptyValue className={cn('metadata-value--component', className)}>\n\t\t\t{emptyLabel}\n\t\t</EmptyValue>\n\t);\n}\n\nfunction assertNever(_value: never): never {\n\tthrow new Error('Unsupported metadata value descriptor.');\n}\n\nexport function MetadataValue(props: MetadataValueProps) {\n\tif (props.kind === 'node') return <>{props.node}</>;\n\tif (props.kind === 'empty') return renderEmptyValue(props.className, props.emptyLabel);\n\n\tif (props.kind !== 'link' && isEmpty(props.value)) {\n\t\treturn renderEmptyValue(props.className, props.emptyLabel);\n\t}\n\n\tswitch (props.kind) {\n\t\tcase undefined:\n\t\tcase 'text':\n\t\t\treturn (\n\t\t\t\t<Value type=\"inherit\" className={cn('metadata-value--component', props.className)}>\n\t\t\t\t\t{props.display ?? props.value}\n\t\t\t\t</Value>\n\t\t\t);\n\t\tcase 'mono':\n\t\t\treturn (\n\t\t\t\t<MonoValue type=\"inherit\" className={cn('metadata-value--component', props.className)}>\n\t\t\t\t\t{props.display ?? props.value}\n\t\t\t\t</MonoValue>\n\t\t\t);\n\t\tcase 'email':\n\t\t\treturn <Email value={props.value} display={props.display} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'phone':\n\t\t\treturn <Phone value={props.value} display={props.display} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'url':\n\t\t\treturn <Url value={props.value} display={props.display} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'link':\n\t\t\treturn (\n\t\t\t\t<Link href={props.href} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)}>\n\t\t\t\t\t{props.display ?? props.value ?? props.href}\n\t\t\t\t</Link>\n\t\t\t);\n\t\tcase 'date':\n\t\t\treturn <DateValue type=\"inherit\" value={props.value} format={props.dateFormat} preset={props.datePreset} locale={props.dateLocale} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'time':\n\t\t\treturn <Time type=\"inherit\" value={props.value} format={props.timeFormat} preset={props.timePreset} locale={props.dateLocale} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'datetime':\n\t\t\treturn <DateTime type=\"inherit\" value={props.value} format={props.dateFormat} timeFormat={props.timeFormat} preset={props.datePreset} locale={props.dateLocale} emptyLabel={props.emptyLabel} className={cn('metadata-value--component', props.className)} />;\n\t\tcase 'money':\n\t\t\treturn (\n\t\t\t\t<Money\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tamount={props.value}\n\t\t\t\t\tcurrency={props.currency}\n\t\t\t\t\tunit={props.unit}\n\t\t\t\t\tminorUnitScale={props.minorUnitScale}\n\t\t\t\t\tsymbol={props.symbol}\n\t\t\t\t\tcurrencyDisplay={props.currencyDisplay}\n\t\t\t\t\tformatMode={props.formatMode}\n\t\t\t\t\tminimumFractionDigits={props.minimumFractionDigits}\n\t\t\t\t\tmaximumFractionDigits={props.maximumFractionDigits}\n\t\t\t\t\tlocale={props.locale}\n\t\t\t\t\temptyLabel={props.emptyLabel}\n\t\t\t\t\tclassName={cn('metadata-value--component', props.className)}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'badge':\n\t\t\treturn (\n\t\t\t\t<Badge\n\t\t\t\t\ttone={props.badgeTone ?? 'secondary'}\n\t\t\t\t\tsize={props.badgeSize}\n\t\t\t\t\tinline\n\t\t\t\t\tclassName={cn('metadata-value--component self-start justify-self-start', props.className)}\n\t\t\t\t>\n\t\t\t\t\t{props.display ?? props.value}\n\t\t\t\t</Badge>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn assertNever(props);\n\t}\n}\n\nMetadataValue.displayName = 'MetadataValue';\n","/**\n * MetadataList — flexible label/value list for entity metadata.\n *\n * Three layouts:\n * - `grid` (default): label-on-top, value-below cells for entity details.\n * - `rows`: a two-column definition list (`<dl>`) on proportional tracks.\n * Rules between rows are opt-in through `itemSeparator`.\n * - `inline`: label/separator/value pairs that wrap, suitable for\n * pill-style summaries (e.g. \"Created Jan 4 · By Alice · v3.2\").\n *\n * Each item supports an optional icon, tooltip, React-node value, custom\n * `render`, and per-item `emptyLabel`. Falls back to the shared `EMPTY` when\n * both are missing. Returns `null` when the list is empty so callers can render\n * unconditionally.\n */\nimport { Info } from 'lucide-react';\nimport React from 'react';\n\nimport { Separator } from '../display/separator';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../display/tooltip';\nimport { Grid, Stack, type ResponsiveValue } from '../structure';\nimport { compileResponsiveClasses, resolveResponsiveEntries } from '../structure/structure.responsive';\nimport { DisplayLabel } from '../../typography/display-label';\nimport { Text } from '../../typography/text';\nimport { textVariants } from '../../typography/text.styles';\nimport { EMPTY } from '../../../lib/format';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { fieldAffordanceRecipes } from '../../../lib/field-affordance-recipes';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tdefaultMetadataListStrings,\n\ttype MetadataListStrings,\n} from './metadata-list.strings';\nimport {\n\tMetadataValue,\n\ttype MetadataValueDescriptor,\n} from './metadata-value';\n\nexport type { MetadataListStrings };\nexport { defaultMetadataListStrings };\n\nexport type MetadataListItem = {\n\t/** Stable identity for this entry. Without one the label and index stand in. */\n\tid?: string;\n\t/** Display label. */\n\tlabel: React.ReactNode;\n\t/** A node, or a descriptor that names the fact's kind. */\n\tvalue?: React.ReactNode | MetadataValueDescriptor | null;\n\t/** Supporting copy shown under the value. */\n\tdescription?: React.ReactNode | null;\n\t/** Shown from an info trigger beside the label, named after the label through `strings.formatInfoAriaLabel`. */\n\ttooltip?: React.ReactNode;\n\t/** Leading glyph. Any component that accepts `className`, including Lucide icons. */\n\ticon?: React.ComponentType<{ className?: string }>;\n\t/** Shown when this item's value is absent, in place of the list's `emptyLabel`. */\n\temptyLabel?: React.ReactNode;\n\t/** Takes over the value. The output sits in the value box, so it inherits the value's type role. */\n\trender?: (item: MetadataListItem) => React.ReactNode;\n};\n\nexport type MetadataInlineListItem = Omit<MetadataListItem, 'description'> & {\n\tdescription?: never;\n};\n\nexport type MetadataLayout = 'grid' | 'rows' | 'inline';\nexport type MetadataDensity = 'default' | 'compact';\n\ntype MetadataListSharedProps = {\n\t/** How many columns the grid layout uses. Accepts a per-breakpoint value. */\n\tcolumns?: ResponsiveValue<1 | 2 | 3 | 4>;\n\t/** Measure responsive grid columns against the viewport (default) or this list's own width. */\n\tadaptTo?: 'viewport' | 'container';\n\t/** Row spacing. `compact` tightens the list for dense panels. */\n\tdensity?: MetadataDensity;\n\t/** Copy shown for an item whose value is empty. Defaults to an em dash. */\n\temptyLabel?: React.ReactNode;\n\t/** Surface title. */\n\ttitle?: React.ReactNode;\n\t/** Draws a rule between the title and the first item. */\n\ttitleSeparator?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Character placed between a label and its value. Defaults to a colon. */\n\tseparator?: string;\n\t/**\n\t * Divider between items, off by default. In `rows`, any truthy value draws a\n\t * rule between rows (never at the ends). In `inline`, `true` places a middle\n\t * dot (`·`) and a string places that character.\n\t */\n\titemSeparator?: boolean | string;\n\t/** Per-instance string overrides (deep-merged over `defaultMetadataListStrings`). */\n\tstrings?: StringsProp<MetadataListStrings>;\n};\n\ntype MetadataGridRowsProps = MetadataListSharedProps & {\n\t/** Label/value pairs to render. */\n\titems: MetadataListItem[];\n\t/** `grid` flows items into `columns`; `rows` stacks them one per line. Default: `grid`. */\n\tlayout?: 'grid' | 'rows';\n\t/**\n\t * Rows layout only. `start` (default) places values and descriptions at the\n\t * start of proportional label/value tracks; `end` pins them to the row's end\n\t * edge, for figures that read down a column.\n\t */\n\tvalueAlign?: 'start' | 'end';\n};\n\ntype MetadataInlineProps = MetadataListSharedProps & {\n\t/** Label/value pairs run together on wrapping lines. Inline items take no description. */\n\titems: MetadataInlineListItem[];\n\t/** Runs the label/value pairs together on one line, separated by `itemSeparator`. */\n\tlayout: 'inline';\n\t/** Not used by the inline layout. */\n\tvalueAlign?: never;\n};\n\nexport type MetadataListProps =\n\t| MetadataGridRowsProps\n\t| MetadataInlineProps;\n\nconst metadataColumnRecipes: Record<1 | 2 | 3 | 4, ResponsiveValue<1 | 2 | 3 | 4>> = {\n\t1: 1,\n\t2: { base: 1, md: 2 },\n\t3: { base: 1, sm: 2, lg: 3 },\n\t4: { base: 1, sm: 2, lg: 3, xl: 4 },\n};\n\n// Match the viewport breakpoint widths exactly; only the measured boundary\n// changes. The local name prevents an unrelated outer container from driving\n// a list embedded in a narrow desktop rail.\nconst metadataContainerColumns = {\n\tbase: { 1: 'grid-cols-1', 2: 'grid-cols-2', 3: 'grid-cols-3', 4: 'grid-cols-4' },\n\tsm: { 1: '@min-[40rem]/metadata-list:grid-cols-1', 2: '@min-[40rem]/metadata-list:grid-cols-2', 3: '@min-[40rem]/metadata-list:grid-cols-3', 4: '@min-[40rem]/metadata-list:grid-cols-4' },\n\tmd: { 1: '@min-[48rem]/metadata-list:grid-cols-1', 2: '@min-[48rem]/metadata-list:grid-cols-2', 3: '@min-[48rem]/metadata-list:grid-cols-3', 4: '@min-[48rem]/metadata-list:grid-cols-4' },\n\tlg: { 1: '@min-[64rem]/metadata-list:grid-cols-1', 2: '@min-[64rem]/metadata-list:grid-cols-2', 3: '@min-[64rem]/metadata-list:grid-cols-3', 4: '@min-[64rem]/metadata-list:grid-cols-4' },\n\txl: { 1: '@min-[80rem]/metadata-list:grid-cols-1', 2: '@min-[80rem]/metadata-list:grid-cols-2', 3: '@min-[80rem]/metadata-list:grid-cols-3', 4: '@min-[80rem]/metadata-list:grid-cols-4' },\n\t'2xl': { 1: '@min-[96rem]/metadata-list:grid-cols-1', 2: '@min-[96rem]/metadata-list:grid-cols-2', 3: '@min-[96rem]/metadata-list:grid-cols-3', 4: '@min-[96rem]/metadata-list:grid-cols-4' },\n} as const;\n\nfunction resolveMetadataColumns(\n\tcolumns: ResponsiveValue<1 | 2 | 3 | 4>,\n): ResponsiveValue<1 | 2 | 3 | 4> {\n\treturn typeof columns === 'object' ? columns : metadataColumnRecipes[columns];\n}\n\n/**\n * Item labels keep the display-label role (default size, tight leading,\n * inherited foreground) at semibold: medium weight does not separate a label from its\n * value on every font, and the label is what a reader scans for. Labels wrap in\n * every layout, breaking long unspaced words rather than overflowing.\n */\nfunction MetadataLabel({ children }: { children: React.ReactNode }) {\n\treturn (\n\t\t<Text type=\"inherit\" tag=\"span\" size=\"sm\" weight=\"semibold\" lineHeight=\"tight\" className=\"metadata-list--label metadata--field min-w-0 text-left [overflow-wrap:anywhere]\">\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nconst resolveKey = (item: MetadataListItem, index: number): string => {\n\tif (item.id) {\n\t\treturn item.id;\n\t}\n\n\tconst rawLabel = typeof item.label === 'string' ? item.label : `${index}`;\n\treturn `metadata-${rawLabel}-${index}`;\n};\n\nfunction isPrimitiveMetadataValue(value: React.ReactNode): value is string | number {\n\treturn typeof value === 'string' || typeof value === 'number';\n}\n\nfunction isMetadataValueDescriptor(value: unknown): value is MetadataValueDescriptor {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t!React.isValidElement(value) &&\n\t\t!Array.isArray(value) &&\n\t\t('kind' in value || 'node' in value || 'value' in value)\n\t);\n}\n\nfunction renderMetadataValue({\n\tvalue,\n\tisEmptyValue,\n\temptyLabel,\n\tvalueBase,\n}: {\n\tvalue: React.ReactNode | MetadataValueDescriptor;\n\tisEmptyValue: boolean;\n\temptyLabel: React.ReactNode;\n\tvalueBase: string;\n}) {\n\tif (isMetadataValueDescriptor(value)) {\n\t\tif (value.kind === 'node') return <MetadataValue {...value} />;\n\t\treturn (\n\t\t\t<MetadataValue\n\t\t\t\t{...value}\n\t\t\t\temptyLabel={value.emptyLabel ?? emptyLabel}\n\t\t\t\tclassName={cn(valueBase, value.className)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isPrimitiveMetadataValue(value)) {\n\t\treturn (\n\t\t\t<MetadataValue\n\t\t\t\tvalue={value}\n\t\t\t\tkind={isEmptyValue ? 'empty' : 'text'}\n\t\t\t\temptyLabel={emptyLabel}\n\t\t\t\tclassName={valueBase}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn value;\n}\n\n/**\n * Generated values go through `MetadataValue`. A custom renderer's output sits\n * in the value box, so it takes the value's type role (size, leading,\n * foreground) like a generated value.\n */\nfunction renderItemValue({\n\titem,\n\tvalueBase,\n\trenderedClassName,\n\ttag: Tag = 'div',\n\temptyLabel,\n}: {\n\titem: MetadataListItem;\n\tvalueBase: string;\n\trenderedClassName: string;\n\ttag?: 'div' | 'span';\n\temptyLabel: React.ReactNode;\n}) {\n\tif (typeof item.render === 'function') {\n\t\treturn <Tag className={renderedClassName}>{item.render(item)}</Tag>;\n\t}\n\treturn renderMetadataValue({\n\t\tvalue: item.value ?? emptyLabel,\n\t\tisEmptyValue: item.value === null || item.value === undefined,\n\t\temptyLabel,\n\t\tvalueBase,\n\t});\n}\n\n/**\n * The trigger keeps the shared clear-target size for pointer comfort, while\n * negative block margins pull its box back to the glyph, so a tooltip never\n * makes its label line taller than its neighbours'.\n */\nfunction MetadataInfoTrigger({\n\ttriggerProps,\n\tariaLabel,\n}: {\n\ttriggerProps: React.ComponentProps<'button'>;\n\tariaLabel: string;\n}) {\n\tconst { className, ...props } = triggerProps;\n\treturn (\n\t\t<button\n\t\t\t{...props}\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\t'metadata-list--info-trigger',\n\t\t\t\tfieldAffordanceRecipes.target,\n\t\t\t\tfieldAffordanceRecipes.focus,\n\t\t\t\tfieldAffordanceRecipes.clear,\n\t\t\t\taffordanceGeometry.clearTargetBleed,\n\t\t\t\t'cursor-help self-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<Info className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t</button>\n\t);\n}\n\nfunction MetadataItemInfo({\n\titem,\n\tstrings,\n}: {\n\titem: MetadataListItem;\n\tstrings: MetadataListStrings;\n}) {\n\tif (item.tooltip === null || item.tooltip === undefined) return null;\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger\n\t\t\t\trender={(triggerProps) => (\n\t\t\t\t\t<MetadataInfoTrigger\n\t\t\t\t\t\ttriggerProps={triggerProps}\n\t\t\t\t\t\tariaLabel={typeof item.label === 'string' ? strings.formatInfoAriaLabel(item.label) : strings.infoFallback}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<TooltipContent side=\"top\" align=\"start\" className=\"max-w-80\">\n\t\t\t\t<Text type=\"inverse\" size=\"xs\">{item.tooltip}</Text>\n\t\t\t</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n\nfunction MetadataItemIcon({ item, isCompact }: { item: MetadataListItem; isCompact: boolean }) {\n\tconst Icon = item.icon;\n\tif (!Icon) return null;\n\treturn (\n\t\t<Icon\n\t\t\tclassName={cn(\n\t\t\t\t'flex-shrink-0 self-center text-muted-foreground',\n\t\t\t\tisCompact ? 'size-icon-sm' : 'size-icon',\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nexport function MetadataList({\n\titems,\n\tcolumns = 2,\n\tadaptTo = 'viewport',\n\tdensity = 'default',\n\temptyLabel = EMPTY,\n\ttitle,\n\ttitleSeparator = false,\n\tclassName,\n\tlayout = 'grid',\n\tseparator = ': ',\n\titemSeparator = false,\n\tvalueAlign = 'start',\n\tstrings: stringsProp,\n}: MetadataListProps) {\n\tconst strings = useStrings(defaultMetadataListStrings, stringsProp);\n\tconst list = React.useMemo(() => (items as MetadataListItem[]).filter(Boolean), [items]);\n\n\tif (list.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst isCompact = density === 'compact';\n\tconst valueBase = 'metadata-list--value text-sm';\n\tconst hasTitle = title !== null && title !== undefined;\n\tconst shouldShowSeparator = hasTitle && titleSeparator;\n\tconst rootClassName = cn('metadata-list--component', 'metadata-list-container @container/metadata-list', className);\n\tconst head = (\n\t\t<>\n\t\t\t{!!hasTitle && (\n\t\t\t\t<DisplayLabel tag=\"div\" className=\"metadata-list--title block text-inherit\">\n\t\t\t\t\t{title}\n\t\t\t\t</DisplayLabel>\n\t\t\t)}\n\t\t\t{!!shouldShowSeparator && <Separator className=\"metadata-list--title-separator\" />}\n\t\t</>\n\t);\n\n\tif (layout === 'inline') {\n\t\tconst itemSeparatorText =\n\t\t\ttypeof itemSeparator === 'string'\n\t\t\t\t? itemSeparator\n\t\t\t\t: itemSeparator\n\t\t\t\t\t? '·'\n\t\t\t\t\t: '';\n\n\t\treturn (\n\t\t\t<Stack gap=\"sm\" data-metadata-density={density} className={rootClassName}>\n\t\t\t\t{head}\n\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\talign=\"baseline\"\n\t\t\t\t\tgap={isCompact ? 'sm' : 'md'}\n\t\t\t\t\tclassName=\"metadata-list--inline\"\n\t\t\t\t>\n\t\t\t\t\t{list.map((item, index) => {\n\t\t\t\t\t\tconst showItemSeparator = itemSeparatorText && index < list.length - 1;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<React.Fragment key={resolveKey(item, index)}>\n\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"baseline\" gap=\"xs\" className=\"metadata-list--item min-w-0 [&>*]:max-w-full [&>*]:min-w-0 [&>.badge--component]:self-center\">\n\t\t\t\t\t\t\t\t\t<MetadataItemIcon item={item} isCompact={isCompact} />\n\n\t\t\t\t\t\t\t\t\t{/* Label, optional info trigger, and the separator are one\n\t\t\t\t\t\t\t\t\t unit that never wraps apart: the item Stack's gap would\n\t\t\t\t\t\t\t\t\t otherwise fall between the label and the colon and render\n\t\t\t\t\t\t\t\t\t \"SKU : value\" — French spacing — instead of \"SKU: value\".\n\t\t\t\t\t\t\t\t\t The label itself still wraps inside the unit. */}\n\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" align=\"baseline\" wrap={false} className=\"max-w-full shrink-0\">\n\t\t\t\t\t\t\t\t\t\t<MetadataLabel>\n\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t</MetadataLabel>\n\n\t\t\t\t\t\t\t\t\t\t<MetadataItemInfo item={item} strings={strings} />\n\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{separator}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t{renderItemValue({\n\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\ttag: 'span',\n\t\t\t\t\t\t\t\t\t\temptyLabel: item.emptyLabel ?? emptyLabel,\n\t\t\t\t\t\t\t\t\t\tvalueBase: cn(valueBase, 'leading-tight'),\n\t\t\t\t\t\t\t\t\t\trenderedClassName: cn(valueBase, textVariants({ type: 'inherit', size: 'sm', lineHeight: 'tight' })),\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{!!showItemSeparator && (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"metadata-list--item-separator select-none\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{itemSeparatorText}\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</React.Fragment>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\tif (layout === 'rows') {\n\t\tconst rowPaddingY = isCompact ? 'py-row-y-sm' : 'py-row-y';\n\t\tconst isEndAligned = valueAlign === 'end';\n\t\t// `start` uses proportional tracks, so values line up down the list\n\t\t// without a label min-width that would crowd phones. `end` keeps the\n\t\t// label track flexible and pins a content-sized value to the row end.\n\t\tconst rowTrack = isEndAligned\n\t\t\t? 'grid-cols-[minmax(0,1fr)_fit-content(60%)] gap-x-space-md'\n\t\t\t: cn('grid-cols-[minmax(0,2fr)_minmax(0,3fr)]', isCompact ? 'gap-x-space-lg' : 'gap-x-space-xl');\n\t\tconst valueAlignClassName = isEndAligned ? 'text-end' : 'text-start';\n\t\treturn (\n\t\t\t<Stack gap=\"sm\" data-metadata-density={density} className={rootClassName}>\n\t\t\t\t{head}\n\t\t\t\t<Stack\n\t\t\t\t\trender={<dl />}\n\t\t\t\t\tgap=\"none\"\n\t\t\t\t\tdata-value-align={valueAlign}\n\t\t\t\t\tclassName={cn('metadata-list--rows m-0', !!itemSeparator && 'divide-y divide-border/60')}\n\t\t\t\t>\n\t\t\t\t\t{list.map((item, index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={resolveKey(item, index)}\n\t\t\t\t\t\t\tclassName={cn('metadata-list--item grid items-baseline', rowTrack, rowPaddingY)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<dt className=\"flex min-w-0 items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t<MetadataItemIcon item={item} isCompact={isCompact} />\n\t\t\t\t\t\t\t\t<MetadataLabel>\n\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t</MetadataLabel>\n\t\t\t\t\t\t\t\t<MetadataItemInfo item={item} strings={strings} />\n\t\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t\t<dd\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'm-0 grid min-w-0 gap-dense break-words [overflow-wrap:anywhere] [&>*]:max-w-full [&>*]:min-w-0',\n\t\t\t\t\t\t\t\t\tvalueAlignClassName,\n\t\t\t\t\t\t\t\t\tisEndAligned\n\t\t\t\t\t\t\t\t\t\t? 'justify-items-end [&>.badge--component]:justify-self-end'\n\t\t\t\t\t\t\t\t\t\t: 'justify-items-start [&>.badge--component]:justify-self-start',\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{renderItemValue({\n\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\temptyLabel: item.emptyLabel ?? emptyLabel,\n\t\t\t\t\t\t\t\t\tvalueBase: cn(valueBase, valueAlignClassName, 'break-words leading-tight'),\n\t\t\t\t\t\t\t\t\trenderedClassName: cn(valueBase, 'break-words', textVariants({ type: 'inherit', size: 'sm', lineHeight: 'tight', align: isEndAligned ? 'right' : 'left' })),\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" align={isEndAligned ? 'right' : 'left'} lineHeight=\"snug\" className=\"metadata-list--description\">\n\t\t\t\t\t\t\t\t\t\t{item.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</dd>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Stack gap=\"sm\" data-metadata-density={density} className={rootClassName}>\n\t\t\t{head}\n\n\t\t\t<Grid\n\t\t\t\tcolumns={adaptTo === 'container' ? 1 : resolveMetadataColumns(columns)}\n\t\t\t\tgap={isCompact ? 'md' : 'xl'}\n\t\t\t\talign=\"start\"\n\t\t\t\tclassName={cn('metadata-list--grid', adaptTo === 'container' && compileResponsiveClasses(resolveResponsiveEntries(resolveMetadataColumns(columns), 1), metadataContainerColumns))}\n\t\t\t>\n\t\t\t\t{list.map((item, index) => (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tkey={resolveKey(item, index)}\n\t\t\t\t\t\tgap={isCompact ? 'dense' : 'normal'}\n\t\t\t\t\t\tclassName=\"metadata-list--item min-w-0 items-start [&>*]:max-w-full [&>*]:min-w-0 [&>.badge--component]:self-start\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex min-w-0 items-center gap-space-sm\">\n\t\t\t\t\t\t\t<MetadataItemIcon item={item} isCompact={isCompact} />\n\n\t\t\t\t\t\t\t<MetadataLabel>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</MetadataLabel>\n\n\t\t\t\t\t\t\t<MetadataItemInfo item={item} strings={strings} />\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{renderItemValue({\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\temptyLabel: item.emptyLabel ?? emptyLabel,\n\t\t\t\t\t\t\tvalueBase: cn(valueBase, 'leading-tight'),\n\t\t\t\t\t\t\trenderedClassName: cn(valueBase, textVariants({ type: 'inherit', size: 'sm', lineHeight: 'tight' })),\n\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\tlineHeight=\"snug\"\n\t\t\t\t\t\t\t\tclassName=\"metadata-list--description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n}\n\nMetadataList.displayName = 'MetadataList';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"motion-recipes-ChBg4HBq.js","names":["reducedMotion","fadeStates","scaleStates","popupOffset","motionRecipes"],"sources":["../src/lib/motion-recipes.ts"],"sourcesContent":["/** Private CSS motion recipes. Base UI owns measurement, presence and focus. */\nconst reducedMotion = 'motion-reduce:transition-none motion-reduce:duration-0 motion-reduce:data-ending-style:duration-0';\nconst fadeStates = 'data-starting-style:opacity-0 data-ending-style:opacity-0';\nconst scaleStates = 'data-starting-style:scale-95 data-ending-style:scale-95';\nconst popupOffset = [\n '[&:not([data-align-trigger=true])]:data-[side=bottom]:data-starting-style:-translate-y-1 [&:not([data-align-trigger=true])]:data-[side=bottom]:data-ending-style:-translate-y-1',\n '[&:not([data-align-trigger=true])]:data-[side=top]:data-starting-style:translate-y-1 [&:not([data-align-trigger=true])]:data-[side=top]:data-ending-style:translate-y-1',\n '[&:not([data-align-trigger=true])]:data-[side=left]:data-starting-style:translate-x-1 [&:not([data-align-trigger=true])]:data-[side=left]:data-ending-style:translate-x-1',\n '[&:not([data-align-trigger=true])]:data-[side=right]:data-starting-style:-translate-x-1 [&:not([data-align-trigger=true])]:data-[side=right]:data-ending-style:-translate-x-1',\n '[&:not([data-align-trigger=true])]:data-[side=inline-start]:data-starting-style:translate-x-1 [&:not([data-align-trigger=true])]:data-[side=inline-start]:data-ending-style:translate-x-1',\n '[&:not([data-align-trigger=true])]:data-[side=inline-end]:data-starting-style:-translate-x-1 [&:not([data-align-trigger=true])]:data-[side=inline-end]:data-ending-style:-translate-x-1',\n].join(' ');\n\nexport const motionRecipes = {\n backdrop: `transition-opacity duration-200 ease-out data-ending-style:duration-100 ${fadeStates} ${reducedMotion}`,\n dialog: `transition-[opacity,scale] duration-200 ease-out data-ending-style:duration-150 ${fadeStates} ${scaleStates} ${reducedMotion}`,\n drawer: [\n 'transition-[translate] duration-250 ease-out data-ending-style:duration-200',\n 'data-[side=right]:data-starting-style:translate-x-full data-[side=right]:data-ending-style:translate-x-full',\n 'data-[side=left]:data-starting-style:-translate-x-full data-[side=left]:data-ending-style:-translate-x-full',\n 'data-[side=bottom]:data-starting-style:translate-y-full data-[side=bottom]:data-ending-style:translate-y-full',\n 'data-[side=top]:data-starting-style:-translate-y-full data-[side=top]:data-ending-style:-translate-y-full',\n reducedMotion,\n ].join(' '),\n popup: `transition-[opacity,scale,translate] duration-150 ease-out data-ending-style:duration-100 ${fadeStates} ${scaleStates} ${popupOffset} ${reducedMotion}`,\n disclosure: `overflow-hidden transition-[height,padding-block] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0 data-starting-style:py-0! data-ending-style:py-0! ${reducedMotion}`,\n chevron: `transition-transform duration-200 ease-out ${reducedMotion}`,\n // A surface that mounts docked (BatchActionBar) rises in once through\n // `@starting-style`, which also runs in a background tab where a frame-toggled\n // class would not. It unmounts without an exit.\n dock: `transition-[opacity,translate] duration-150 ease-out starting:opacity-0 starting:translate-y-space-lg ${reducedMotion}`,\n} as const;\n"],"mappings":";AACA,IAAMA,IAAgB,qGAChBC,IAAa,6DACbC,IAAc,2DACdC,IAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,CAAC,CAAC,KAAK,GAAG,GAEGC,IAAgB;CAC5B,UAAU,2EAA2EH,EAAW,GAAGD;CACnG,QAAQ,mFAAmFC,EAAW,GAAGC,EAAY,GAAGF;CACxH,QAAQ;EACP;EACA;EACA;EACA;EACA;EACAA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,OAAO,6FAA6FC,EAAW,GAAGC,EAAY,GAAGC,EAAY,GAAGH;CAChJ,YAAY,2KAA2KA;CACvL,SAAS,8CAA8CA;CAIvD,MAAM,yGAAyGA;AAChH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-BQNcg1jT.js","names":["Text","DisplayLabel","focusRecipes","Stack","toneRecipes","interactionRecipes","Percent","Badge","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","defaultBreadcrumbProgressStrings","BreadcrumbProgress","stringsProp","strings","useStrings","cn","className","currentIndex","steps","isCompleted","idx","isCurrent","isClickable","onStepClick","Button","step","Check","CategoryNav","title","items","Icon","it","active","activeId","onSelect","ChevronRight","defaultSectionNavStrings","SectionNav","forwardRef","ariaLabel","rootProps","setActive","useState","useEffect","obs","visible","entries","el","rootMargin","isActive","e","defaultSideNavStrings","normalizePath","rawUrl","baseOrigin","trimmed","isSimpleText","value","SideNav","groupsProp","groups","useMemo","activePath","currentPath","activeNormalized","g","item","normalizedPath","b","a","collapsed","setCollapsed","toggleGroup","prev","id","resolvedActive","activeItemClassName","isCollapsed","group","showLabel","shouldRenderItems","ChevronDown","itemClassName"],"sources":["../src/components/layout/navigation/breadcrumb-progress/types.ts","../src/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.tsx","../src/components/layout/navigation/category-nav/category-nav.tsx","../src/components/layout/navigation/section-nav/section-nav.tsx","../src/components/layout/navigation/side-nav.tsx"],"sourcesContent":["import type { StringsProp } from '../../../../lib/strings';\n\nexport interface BreadcrumbProgressStep {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Short guidance shown beneath the control. */\n\thint?: string;\n}\n\nexport interface BreadcrumbProgressStrings {\n\tstepLabel: string;\n\tofLabel: string;\n}\n\nexport const defaultBreadcrumbProgressStrings: BreadcrumbProgressStrings = {\n\tstepLabel: 'Step',\n\tofLabel: 'of',\n};\n\nexport interface BreadcrumbProgressProps {\n\t/** Steps in the flow, in order. */\n\tsteps: BreadcrumbProgressStep[];\n\t/** Zero-based position of the active step. */\n\tcurrentIndex: number;\n\tonStepClick?: (id: string, index: number) => void;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<BreadcrumbProgressStrings>;\n}\n","/**\n * BreadcrumbProgress — wizard / multi-step navigation with completed,\n * current, and upcoming states. Click any completed step to jump back.\n */\nimport { Check } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultBreadcrumbProgressStrings,\n\ttype BreadcrumbProgressProps,\n} from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\nexport function BreadcrumbProgress({ steps, currentIndex, onStepClick, className, strings: stringsProp }: BreadcrumbProgressProps) {\n\tconst strings = useStrings(defaultBreadcrumbProgressStrings, stringsProp);\n\n\treturn (\n\t\t<div className={cn('breadcrumb-progress--component', 'w-full', className)}>\n\t\t\t<div className=\"flex items-center justify-between mb-space-md\">\n\t\t\t\t<DisplayLabel>\n\t\t\t\t\t{strings.stepLabel} {currentIndex + 1} {strings.ofLabel} {steps.length}\n\t\t\t\t</DisplayLabel>\n\t\t\t\t<Percent value={Math.round(((currentIndex + 1) / steps.length) * 100)} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t</div>\n\t\t\t<ol className=\"m-0 list-none p-0 font-sans flex items-center gap-space-md\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isCompleted = idx < currentIndex;\n\t\t\t\t\tconst isCurrent = idx === currentIndex;\n\t\t\t\t\tconst isClickable = onStepClick && (isCompleted || isCurrent);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={step.id} className=\"flex min-w-0 flex-1 items-center gap-space-md\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={`${strings.stepLabel} ${idx + 1}: ${step.label}`}\n\t\t\t\t\t\t\t\tonClick={() => isClickable && onStepClick?.(step.id, idx)}\n\t\t\t\t\t\t\t\tdisabled={!isClickable}\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'min-w-0 justify-start gap-space-md text-left transition-colors',\n\t\t\t\t\t\t\t\t\tisClickable && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t!isClickable && 'cursor-default',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex size-6 shrink-0 items-center justify-center rounded-full tabular-nums',\n\t\t\t\t\t\t\t\t\t\tisCompleted && 'bg-success text-success-foreground',\n\t\t\t\t\t\t\t\t\t\tisCurrent && `bg-primary text-primary-foreground ring-4 ${toneRecipes.primary.halo}`,\n\t\t\t\t\t\t\t\t\t\t!isCompleted && !isCurrent && 'bg-muted text-muted-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isCompleted ? <Check className=\"size-icon-md\" /> : idx + 1}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<div className=\"hidden min-w-0 lg:block\">\n\t\t\t\t\t\t\t\t\t<Text weight=\"semibold\" className={cn(!isCurrent && !isCompleted && 'text-muted-foreground')}>{step.label}</Text>\n\t\t\t\t\t\t\t\t\t{!!step.hint && <Text size=\"xs\" type=\"discrete\" className=\"truncate\">{step.hint}</Text>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{idx < steps.length - 1 && (\n\t\t\t\t\t\t\t\t<div className={cn('h-px flex-1', isCompleted ? 'bg-success' : 'bg-border')} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</div>\n\t);\n}\n\nBreadcrumbProgress.displayName = 'BreadcrumbProgress';\n","/**\n * CategoryNav — vertical icon + label list with optional count badge per row.\n * Use as a sidebar nav for filtering or category browsing.\n */\nimport { ChevronRight } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\n\nimport type { CategoryNavProps } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function CategoryNav({ title, items, activeId, onSelect, className }: CategoryNavProps) {\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"category-nav\"\n\t\t\tdata-slot=\"category-nav\"\n\t\t\taria-label={title}\n\t\t\tclassName={cn('category-nav--component min-w-0', className)}\n\t\t>\n\t\t\t<ItemGroup>\n\t\t\t\t{items.map((it) => {\n\t\t\t\t\tconst Icon = it.icon;\n\t\t\t\t\tconst active = it.id === activeId;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t// Not `size=\"sm\"`. That maps to the primitive `xs` scale, which\n\t\t\t\t\t\t\t// shrinks media icons to 12px for a genuinely compact row — but\n\t\t\t\t\t\t\t// this row carries a title, a description and a badge and stands\n\t\t\t\t\t\t\t// 58px tall. The result was a 12px leading icon beside a 16px\n\t\t\t\t\t\t\t// chevron, because a `size-` class opts an icon out of that\n\t\t\t\t\t\t\t// scaling rule. The default scale matches `base/item`'s own\n\t\t\t\t\t\t\t// reference row at the same height.\n\t\t\t\t\t\t\tonClick={() => onSelect?.(it.id)}\n\t\t\t\t\t\t\tdata-state={active ? 'active' : 'inactive'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// The selected tint spans the row, so the row needs horizontal\n\t\t\t\t\t\t\t\t// padding of its own or the icon sits 1px from the tint's edge.\n\t\t\t\t\t\t\t\t// `px-space-md` is what `SectionNav` uses for the same job.\n\t\t\t\t\t\t\t\t'cursor-pointer rounded-inner px-space-md transition-colors',\n\t\t\t\t\t\t\t\tactive ? interactionRecipes.rowCurrent : interactionRecipes.rowHover,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className={cn(active ? 'text-accent-foreground' : 'text-muted-foreground')}>\n\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t<ItemTitle bold={active}>{it.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!it.hint && <ItemDescription clamp={1}>{it.hint}</ItemDescription>}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t{typeof it.count === 'number' && (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{it.count}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\tclassName={cn('size-icon shrink-0 text-muted-foreground', active && 'text-accent-foreground')}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ItemGroup>\n\t\t</nav>\n\t);\n}\n\nCategoryNav.displayName = 'CategoryNav';\n","/**\n * SectionNav — sticky in-page anchor nav. Pass a list of section ids; the active one\n * is tracked via IntersectionObserver and the matching item is highlighted. Click to\n * scroll to that section. Pure JS — no router required.\n */\nimport { forwardRef, useEffect, useState, type ComponentPropsWithoutRef } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\n\nexport interface SectionNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSectionNavStrings: SectionNavStrings = {\n\tnavigationLabel: 'Section navigation',\n};\n\nexport interface SectionNavItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface SectionNavProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children' | 'onSelect'> {\n\t/** Entries to render, in order. */\n\titems: SectionNavItem[];\n\trootMargin?: string;\n\tonSelect?: (id: string) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SectionNavStrings>;\n}\n\nexport const SectionNav = forwardRef<HTMLElement, SectionNavProps>(function SectionNav({\n\titems,\n\trootMargin = '-40% 0px -50% 0px',\n\tclassName,\n\tonSelect,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSectionNavStrings, stringsProp);\n\tconst [active, setActive] = useState<string | null>(items[0]?.id ?? null);\n\n\tuseEffect(() => {\n\t\tconst obs = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst visible = entries.find((e) => e.isIntersecting);\n\t\t\t\tif (visible?.target.id) setActive(visible.target.id);\n\t\t\t},\n\t\t\t{ rootMargin, threshold: 0 },\n\t\t);\n\t\titems.forEach((it) => {\n\t\t\tconst el = document.getElementById(it.id);\n\t\t\tif (el) obs.observe(el);\n\t\t});\n\t\treturn () => obs.disconnect();\n\t}, [items, rootMargin]);\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\tclassName={cn('section-nav--component', className)}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"2xs\" className=\"section-nav--items\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\tconst Icon = it.icon;\n\t\t\t\tconst isActive = active === it.id;\n\t\t\t\treturn (\n\t\t\t\t\t<a\n\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\thref={`#${it.id}`}\n\t\t\t\t\t\taria-current={isActive ? 'location' : undefined}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tdocument.getElementById(it.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t\t\t\t\tsetActive(it.id);\n\t\t\t\t\t\t\tonSelect?.(it.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`flex items-center gap-space-md rounded-inner px-space-md py-row-y transition-colors outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\tisActive ? interactionRecipes.rowCurrent : `text-muted-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-md shrink-0\" />}\n\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight={isActive ? 'semibold' : 'medium'}>{it.label}</Text>\n\t\t\t\t\t</a>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSectionNav.displayName = 'SectionNav';\n","/**\n * SideNav — collapsible vertical sidebar navigation. Items can be grouped\n * with a heading and optionally collapsed; each item supports an icon, badge,\n * and active-state highlight. The active item is matched by deepest path\n * prefix so nested routes still highlight their parent group.\n *\n * Pass `items` for the short flat-list default. Use `groups` only when the\n * navigation needs headings or collapsible sections.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useMemo, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface SideNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSideNavStrings: SideNavStrings = {\n\tnavigationLabel: 'Side navigation',\n};\n\nexport interface SideNavItem {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n}\n\nexport interface SideNavGroup {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** Entries to render, in order. */\n\titems: SideNavItem[];\n\tdefaultCollapsed?: boolean;\n\tcollapsible?: boolean;\n}\n\ninterface SideNavSharedProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'> {\n\t/** Path of the active route, used to mark the current entry. */\n\tcurrentPath?: string;\n\titemClassName?: string;\n\tactiveItemClassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SideNavStrings>;\n}\n\nexport type SideNavProps = SideNavSharedProps & (\n\t| {\n\t\t/** Short default for one flat navigation list. */\n\t\titems: SideNavItem[];\n\t\t/** Sections of the settings navigation. */\n\t\tgroups?: never;\n\t}\n\t| {\n\t\t/** Grouped navigation with optional headings and collapse behavior. */\n\t\tgroups: SideNavGroup[];\n\t\titems?: never;\n\t}\n);\n\nfunction normalizePath(rawUrl: string): string {\n\tif (rawUrl.length === 0) return '/';\n\ttry {\n\t\tconst baseOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, baseOrigin);\n\t\tconst trimmed = parsed.pathname.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t} catch {\n\t\tconst clean = rawUrl.split('?')[0] ?? rawUrl;\n\t\tconst trimmed = clean.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t}\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav({\n\titems,\n\tgroups: groupsProp,\n\tcurrentPath,\n\tclassName,\n\titemClassName,\n\tactiveItemClassName,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSideNavStrings, stringsProp);\n\tconst groups = useMemo<SideNavGroup[]>(\n\t\t() => groupsProp ?? [\n\t\t\t{ id: 'side-nav-items', items: items ?? [], collapsible: false },\n\t\t],\n\t\t[groupsProp, items],\n\t);\n\tconst rawActivePath = currentPath ?? (typeof window !== 'undefined' ? window.location.pathname : '');\n\tconst activePath = normalizePath(rawActivePath);\n\n\tconst allNormalized = useMemo(() => {\n\t\treturn groups.flatMap((g) =>\n\t\t\tg.items.map((item) => ({ groupId: g.id, normalizedPath: normalizePath(item.href) })),\n\t\t);\n\t}, [groups]);\n\n\tconst activeNormalized =\n\t\tallNormalized\n\t\t\t.filter(\n\t\t\t\t({ normalizedPath }) =>\n\t\t\t\t\tactivePath === normalizedPath || activePath.startsWith(`${normalizedPath}/`),\n\t\t\t)\n\t\t\t.sort((a, b) => b.normalizedPath.length - a.normalizedPath.length)[0]?.normalizedPath ??\n\t\tnull;\n\n\tconst [collapsed, setCollapsed] = useState<Record<string, boolean>>(() =>\n\t\tObject.fromEntries(groups.map((g) => [g.id, Boolean(g.defaultCollapsed)])),\n\t);\n\n\tconst toggleGroup = (id: string) =>\n\t\tsetCollapsed((prev) => ({ ...prev, [id]: !prev[id] }));\n\n\tconst resolvedActive =\n\t\tactiveItemClassName && activeItemClassName.length > 0\n\t\t\t? activeItemClassName\n\t\t\t: interactionRecipes.rowCurrent;\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tclassName={cn('side-nav--component', className)}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"side-nav--groups\">\n\t\t\t\t{groups.map((group) => {\n\t\t\t\tconst isCollapsed = group.collapsible !== false && collapsed[group.id];\n\t\t\t\tconst showLabel = !!group.label;\n\t\t\t\tconst shouldRenderItems = !isCollapsed;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack key={group.id} gap=\"2xs\" className=\"side-nav--group\">\n\t\t\t\t\t\t{!!showLabel && (\n\t\t\t\t\t\t\tgroup.collapsible !== false ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tonClick={() => toggleGroup(group.id)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-auto min-h-action-sm justify-between px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t'hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t) : group.label}\n\t\t\t\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'size-icon-md transition-transform',\n\t\t\t\t\t\t\t\t\t\t\tisCollapsed && '-rotate-90',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tisSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"px-row-x py-row-y\">\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t) : group.label\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!shouldRenderItems && (\n\t\t\t\t\t\t\t<Stack gap=\"2xs\" className=\"side-nav--items\">\n\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\tconst itemPath = normalizePath(item.href);\n\t\t\t\t\t\t\t\t\tconst isActive = itemPath === activeNormalized;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\tkey={item.href}\n\t\t\t\t\t\t\t\t\t\t\thref={item.disabled ? undefined : item.href}\n\t\t\t\t\t\t\t\t\t\t\taria-current={isActive ? 'page' : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-disabled={item.disabled || undefined}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'group flex items-center gap-space-md rounded-inner px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t\t\t'text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\tisActive && resolvedActive,\n\t\t\t\t\t\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-icon shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive ? 'text-accent-foreground' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{isSimpleText(item.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : item.label}\n\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSideNav.displayName = 'SideNav';\n"],"mappings":"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"}
@@ -1,145 +0,0 @@
1
- "use client";
2
- import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-CF3c95Io.js";
4
- import { n } from "./buttons-BbfzgczK.js";
5
- import { c as r } from "./typography-CSyJrh28.js";
6
- import { t as i } from "./focus-recipes-B653VaLq.js";
7
- import { t as a } from "./structure-C0V0_Fyf.js";
8
- import { t as o } from "./interaction-recipes-XR9ZpVYL.js";
9
- import { t as s } from "./badge-DErMA7ul.js";
10
- import { a as c } from "./tabs-eqVsJZWO.js";
11
- import { Fragment as l, forwardRef as u, useCallback as d } from "react";
12
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
13
- import { Globe as m } from "lucide-react";
14
- //#region src/components/base/navigation/language-switcher.tsx
15
- function h({ locales: e, onRenderLabel: s, variant: c = "buttons", onSelect: u }) {
16
- let h = d((e, t) => {
17
- t || u?.(e);
18
- }, [u]);
19
- return e.length === 0 ? null : c === "inline" ? /* @__PURE__ */ p(a, {
20
- direction: "horizontal",
21
- align: "center",
22
- justify: "center",
23
- gap: "md",
24
- wrap: !1,
25
- className: "language-switcher--component",
26
- children: [/* @__PURE__ */ f(m, {
27
- className: "size-icon shrink-0 text-muted-foreground",
28
- "aria-hidden": "true"
29
- }), /* @__PURE__ */ f(a, {
30
- direction: "horizontal",
31
- align: "center",
32
- justify: "center",
33
- gap: "md",
34
- wrap: !0,
35
- className: "min-w-0",
36
- children: e.map((n, a) => {
37
- let c = s ? s(n) : n.nativeLabel;
38
- return /* @__PURE__ */ p(l, { children: [/* @__PURE__ */ f("button", {
39
- type: "button",
40
- "aria-current": n.active ? "true" : void 0,
41
- onClick: () => h(n.value, n.active),
42
- className: t(`${o.nativeButtonReset} cursor-pointer rounded-inner text-pxs outline-none transition-colors ${i.text}`, n.active ? "text-primary-accent font-medium" : "text-muted-foreground hover:text-foreground"),
43
- children: /* @__PURE__ */ f(r, {
44
- tag: "span",
45
- size: "pxs",
46
- weight: n.active ? "medium" : "regular",
47
- className: "text-inherit",
48
- children: c
49
- })
50
- }), a < e.length - 1 && /* @__PURE__ */ f("span", {
51
- "aria-hidden": "true",
52
- className: "size-1 rounded-full bg-border"
53
- })] }, n.value);
54
- })
55
- })]
56
- }) : /* @__PURE__ */ f(a, {
57
- direction: "horizontal",
58
- align: "center",
59
- justify: "center",
60
- wrap: !0,
61
- gap: "md",
62
- children: e.map((e) => {
63
- let r = s ? s(e) : e.nativeLabel;
64
- return /* @__PURE__ */ f(n, {
65
- type: "button",
66
- tone: "secondary",
67
- buttonStyle: e.active ? "solid" : "ghost",
68
- "aria-current": e.active ? "true" : void 0,
69
- onClick: () => h(e.value, e.active),
70
- className: t("min-w-18 justify-center transition-colors", e.active ? "text-foreground" : "text-muted-foreground"),
71
- children: r
72
- }, e.value);
73
- })
74
- });
75
- }
76
- h.displayName = "LanguageSwitcher";
77
- //#endregion
78
- //#region src/components/base/navigation/navigation-tabs.tsx
79
- var g = { tabsAria: "Tab navigation" };
80
- function _(e) {
81
- let t = e.indexOf("#/");
82
- if (t >= 0) return e.slice(t).split("?")[0]?.replace(/\/+$/, "") || "#/";
83
- try {
84
- let t = typeof window < "u" ? window.location.origin : "http://localhost";
85
- return new URL(e, t).pathname.replace(/\/+$/, "") || "/";
86
- } catch {
87
- return e.split("?")[0]?.replace(/\/+$/, "") || "/";
88
- }
89
- }
90
- var v = u(function({ items: i, currentPath: l, variant: u = "default", scrollable: d = !0, scrollStrings: m, strings: h, className: v }, y) {
91
- let b = e(g, h), x = _(l ?? (typeof window < "u" ? window.location.pathname : "/")), S = u === "prominent", C = /* @__PURE__ */ f(a, {
92
- render: /* @__PURE__ */ f("nav", { "aria-label": b.tabsAria }),
93
- direction: "horizontal",
94
- gap: "2xs",
95
- wrap: !1,
96
- className: t("navigation-tabs--list w-max rounded-inner bg-muted p-space-2xs", S && "rounded-inner bg-muted"),
97
- children: i.map((e) => {
98
- let i = e.active ?? x === _(e.href), a = typeof e.icon == "string" ? void 0 : e.icon;
99
- return /* @__PURE__ */ p(n, {
100
- href: e.href,
101
- disabled: e.disabled,
102
- size: "sm",
103
- tone: i && S ? "primary" : "secondary",
104
- buttonStyle: i && S ? "solid" : "ghost",
105
- icon: a,
106
- "aria-current": i ? "page" : void 0,
107
- className: t("navigation-tabs--item shrink-0", "rounded-inner", !S && i && o.segmentActiveButton, !S && !i && o.segmentInactiveButton, S && i && o.currentButtonHold),
108
- children: [
109
- typeof e.icon == "string" && /* @__PURE__ */ f("span", {
110
- className: "navigation-tabs--icon text-inherit",
111
- "aria-hidden": "true",
112
- children: e.icon
113
- }),
114
- /* @__PURE__ */ f(r, {
115
- tag: "span",
116
- size: "inherit",
117
- weight: "medium",
118
- lineHeight: "none",
119
- className: "navigation-tabs--title text-inherit",
120
- children: e.title
121
- }),
122
- e.badge !== void 0 && e.badge !== null && /* @__PURE__ */ f(s, {
123
- size: "sm",
124
- tone: "secondary",
125
- className: "navigation-tabs--badge",
126
- children: e.badge
127
- })
128
- ]
129
- }, e.href);
130
- })
131
- });
132
- return /* @__PURE__ */ f("div", {
133
- ref: y,
134
- className: t("navigation-tabs--component", "w-full min-w-0", !d && "overflow-x-auto", v),
135
- children: d ? /* @__PURE__ */ f(c, {
136
- strings: m,
137
- children: C
138
- }) : C
139
- });
140
- });
141
- v.displayName = "NavigationTabs";
142
- //#endregion
143
- export { g as n, h as r, v as t };
144
-
145
- //# sourceMappingURL=navigation-DLF3E1IC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-DLF3E1IC.js","names":["Text","focusRecipes","Stack","interactionRecipes","Badge","TabScrollViewport","LanguageSwitcher","handleSelect","useCallback","isActive","onSelect","value","locales","variant","Globe","label","onRenderLabel","locale","Fragment","cn","index","Button","defaultNavigationTabsStrings","normalizePath","hashRouteIndex","rawUrl","origin","NavigationTabs","forwardRef","stringsProp","strings","useStrings","activePath","currentPath","prominent","list","items","item","Icon","scrollable","className","scrollStrings"],"sources":["../src/components/base/navigation/language-switcher.tsx","../src/components/base/navigation/navigation-tabs.tsx"],"sourcesContent":["/**\n * LanguageSwitcher — locale picker with two layouts: `buttons` (chunky\n * primary buttons) and `inline` (small text links separated by dots, prefixed\n * with a globe icon). Defaults to `buttons`.\n *\n * The library never navigates on its own. The consumer wires routing /\n * locale switching by passing `onSelect` (e.g. a Tanstack Router\n * `navigate(...)` or Inertia `router.visit(...)`). When `onSelect` is\n * absent the click is a no-op.\n */\nimport { Globe } from 'lucide-react';\nimport { Fragment, useCallback } from 'react';\n\nimport { Button } from '../buttons';\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport type { LocaleOption } from '../../../types/locale.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface LanguageSwitcherProps {\n\t/** Locales to offer, in order. The entry with `active: true` is marked as current. */\n\tlocales: LocaleOption[];\n\t/** Custom label for each locale. Defaults to `nativeLabel`. */\n\tonRenderLabel?: (options: LocaleOption) => string;\n\t/** Layout: `buttons` (default) for a row of buttons, `inline` for compact dot-separated text links. */\n\tvariant?: 'buttons' | 'inline';\n\t/** Called with the chosen locale's value. Not called for the current locale. */\n\tonSelect?: (value: string) => void;\n}\n\nexport function LanguageSwitcher({\n\tlocales,\n\tonRenderLabel,\n\tvariant = 'buttons',\n\tonSelect,\n}: LanguageSwitcherProps) {\n\tconst handleSelect = useCallback((value: string, isActive: boolean) => {\n\t\tif (isActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tonSelect?.(value);\n\t}, [onSelect]);\n\n\tif (locales.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (variant === 'inline') {\n\t\treturn (\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"center\" gap=\"md\" wrap={false} className=\"language-switcher--component\">\n\t\t\t\t<Globe className=\"size-icon shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"center\" gap=\"md\" wrap className=\"min-w-0\">\n\t\t\t\t\t{locales.map((locale, index) => {\n\t\t\t\t\t\tconst label = onRenderLabel\n\t\t\t\t\t\t\t? onRenderLabel(locale)\n\t\t\t\t\t\t\t: locale.nativeLabel;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Fragment key={locale.value}>\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\taria-current={locale.active ? 'true' : undefined}\n\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\thandleSelect(locale.value, locale.active)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t`${interactionRecipes.nativeButtonReset} cursor-pointer rounded-inner text-pxs outline-none transition-colors ${focusRecipes.text}`,\n\t\t\t\t\t\t\t\t\t\tlocale.active\n\t\t\t\t\t\t\t\t\t\t\t? 'text-primary-accent font-medium'\n\t\t\t\t\t\t\t\t\t\t\t: 'text-muted-foreground hover:text-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<Text tag=\"span\" size=\"pxs\" weight={locale.active ? 'medium' : 'regular'} className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{index < locales.length - 1 && (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"size-1 rounded-full bg-border\"\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</Fragment>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"center\" wrap gap=\"md\">\n\t\t\t{locales.map((locale) => {\n\t\t\t\tconst label = onRenderLabel ? onRenderLabel(locale) : locale.nativeLabel;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={locale.value}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle={locale.active ? 'solid' : 'ghost'}\n\t\t\t\t\t\taria-current={locale.active ? 'true' : undefined}\n\t\t\t\t\t\tonClick={() => handleSelect(locale.value, locale.active)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'min-w-18 justify-center transition-colors',\n\t\t\t\t\t\t\tlocale.active ? 'text-foreground' : 'text-muted-foreground',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Stack>\n\t);\n}\n\nLanguageSwitcher.displayName = 'LanguageSwitcher';\n","/**\n * NavigationTabs — canonical route-tab navigation.\n *\n * The default compact treatment works for ordinary application navigation;\n * `variant=\"prominent\"` provides the stronger filled treatment without\n * introducing a second component or item vocabulary.\n */\nimport { forwardRef, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Badge } from '../badge';\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { TabScrollViewport, type TabsScrollStrings } from './tab-scroll-viewport';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface NavigationTabItem {\n\ttitle: string;\n\thref: string;\n\ticon?: LucideIcon | string;\n\tbadge?: ReactNode;\n\tactive?: boolean;\n\tdisabled?: boolean;\n}\n\nexport interface NavigationTabsStrings {\n\ttabsAria: string;\n}\n\nexport const defaultNavigationTabsStrings: NavigationTabsStrings = {\n\ttabsAria: 'Tab navigation',\n};\n\nexport type NavigationTabsVariant = 'default' | 'prominent';\n\nexport interface NavigationTabsProps {\n\t/** Tabs to render, in order. */\n\titems: readonly NavigationTabItem[];\n\t/** Path of the active route, used to mark the current tab. */\n\tcurrentPath?: string;\n\t/** Visual treatment of the tab row. */\n\tvariant?: NavigationTabsVariant;\n\t/** Show previous/next controls when route tabs overflow. Defaults to true. */\n\tscrollable?: boolean;\n\t/** Accessible labels for the previous/next scroll controls. */\n\tscrollStrings?: StringsProp<TabsScrollStrings>;\n\t/** Overrides the tab row's own copy. */\n\tstrings?: StringsProp<NavigationTabsStrings>;\n\tclassName?: string;\n}\n\nfunction normalizePath(rawUrl: string): string {\n\tconst hashRouteIndex = rawUrl.indexOf('#/');\n\tif (hashRouteIndex >= 0) {\n\t\treturn rawUrl.slice(hashRouteIndex).split('?')[0]?.replace(/\\/+$/, '') || '#/';\n\t}\n\n\ttry {\n\t\tconst origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, origin);\n\t\treturn parsed.pathname.replace(/\\/+$/, '') || '/';\n\t} catch {\n\t\treturn rawUrl.split('?')[0]?.replace(/\\/+$/, '') || '/';\n\t}\n}\n\nexport const NavigationTabs = forwardRef<HTMLDivElement, NavigationTabsProps>(function NavigationTabs({\n\titems,\n\tcurrentPath,\n\tvariant = 'default',\n\tscrollable = true,\n\tscrollStrings,\n\tstrings: stringsProp,\n\tclassName,\n}: NavigationTabsProps, ref) {\n\tconst strings = useStrings(defaultNavigationTabsStrings, stringsProp);\n\tconst activePath = normalizePath(\n\t\tcurrentPath ?? (typeof window !== 'undefined' ? window.location.pathname : '/'),\n\t);\n\tconst prominent = variant === 'prominent';\n\n\tconst list = <Stack\n\t\t\t\trender={<nav aria-label={strings.tabsAria} />}\n\t\t\t\tdirection=\"horizontal\"\n\t\t\t\tgap=\"2xs\"\n\t\t\t\twrap={false}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'navigation-tabs--list w-max rounded-inner bg-muted p-space-2xs',\n\t\t\t\t\tprominent && 'rounded-inner bg-muted',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst isActive = item.active ?? activePath === normalizePath(item.href);\n\t\t\t\t\tconst Icon = typeof item.icon === 'string' ? undefined : item.icon;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={item.href}\n\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\ttone={isActive && prominent ? 'primary' : 'secondary'}\n\t\t\t\t\t\t\tbuttonStyle={isActive && prominent ? 'solid' : 'ghost'}\n\t\t\t\t\t\t\ticon={Icon}\n\t\t\t\t\t\t\taria-current={isActive ? 'page' : undefined}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'navigation-tabs--item shrink-0',\n\t\t\t\t\t\t\t\t'rounded-inner',\n\t\t\t\t\t\t\t\t// Shared segmented recipe (Tabs, OverflowTabBar): a lifted card-coloured\n\t\t\t\t\t\t\t\t// active tab on the muted track, in light and dark alike. The current tab\n\t\t\t\t\t\t\t\t// holds its state under hover and press; the others change colour only.\n\t\t\t\t\t\t\t\t!prominent && isActive && interactionRecipes.segmentActiveButton,\n\t\t\t\t\t\t\t\t!prominent && !isActive && interactionRecipes.segmentInactiveButton,\n\t\t\t\t\t\t\t\tprominent && isActive && interactionRecipes.currentButtonHold,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{typeof item.icon === 'string' && (\n\t\t\t\t\t\t\t\t<span className=\"navigation-tabs--icon text-inherit\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\tlineHeight=\"none\"\n\t\t\t\t\t\t\t\tclassName=\"navigation-tabs--title text-inherit\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{item.badge !== undefined && item.badge !== null && (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tclassName=\"navigation-tabs--badge\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\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\treturn <div ref={ref} className={cn('navigation-tabs--component', 'w-full min-w-0', !scrollable && 'overflow-x-auto', className)}>\n\t\t{scrollable ? <TabScrollViewport strings={scrollStrings}>{list}</TabScrollViewport> : list}\n\t</div>;\n});\n\nNavigationTabs.displayName = 'NavigationTabs';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-row-recipes-WZEs-hYo.js","names":["affordanceGeometry","navigationRowInlineClasses","navigationChildInsetClasses","navigationRowDensityRecipes"],"sources":["../src/lib/navigation-row-recipes.ts"],"sourcesContent":["import type { RowDensity } from './row-recipes';\nimport { affordanceGeometry } from './affordance-geometry.generated';\n\n/** Shared navigation geometry and primary-copy fallback. Density changes height,\n * never primary text size; owners may retain an explicit typography override. */\nexport const navigationRowInlineClasses = 'box-border min-w-0 gap-space-md rounded-inner px-control-sm text-sm';\n// Start the guide at the small-control inset plus half of the small caret glyph.\n// Derive both terms from their existing roots; a guide is not another theme knob.\nexport const navigationChildInsetClasses = `mx-0 ${affordanceGeometry.navigationGuideStart} translate-x-0 px-space-sm`;\nexport const navigationRowDensityRecipes = {\n compact: { size: 'sm', gap: 'gap-0', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n default: { size: 'sm', gap: 'gap-space-2xs', childGap: 'gap-0 py-0', height: 'h-action-sm', childHeight: 'h-action-xs' },\n comfortable: { size: 'md', gap: 'gap-space-2xs', childGap: 'gap-space-2xs py-space-2xs', height: 'h-action', childHeight: 'h-action-sm' },\n} as const satisfies Record<RowDensity, { size: 'sm' | 'md'; gap: string; childGap: string; height: string; childHeight: string }>;\n"],"mappings":";;AAKA,IAAaC,IAA6B,uEAG7BC,IAA8B,QAAQF,EAAmB,qBAAqB,6BAC9EG,IAA8B;CAC1C,SAAS;EAAE,MAAM;EAAM,KAAK;EAAS,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CAC/G,SAAS;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAAc,QAAQ;EAAe,aAAa;CAAc;CACvH,aAAa;EAAE,MAAM;EAAM,KAAK;EAAiB,UAAU;EAA8B,QAAQ;EAAY,aAAa;CAAc;AACzI"}