themelia-react-ui 2.0.3 → 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 (648) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README.md +168 -36
  3. package/dist/{accordion-Cjb6sx0G.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/action-menu-Dr8K-ghE.js +284 -0
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-P-aVJisu.js} +42 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-C58tQcBy.js} +387 -350
  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-BxDfL2mw.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-BxDfL2mw.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-BGua8ouh.js → auth-DTkkshS8.js} +44 -47
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DAPlDvhJ.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-HpFqoqSY.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-HpFqoqSY.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 +3 -3
  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-DnUJ21NQ.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 +23 -23
  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 +326 -307
  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 +1247 -1169
  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-C-oqs1sQ.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DVzspB_G.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-DPZekJFu.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-AWIhNhmo.js → checkbox-fflqmODR.js} +9 -5
  98. package/dist/checkbox-fflqmODR.js.map +1 -0
  99. package/dist/choice-inputs-zUgBZfE4.js +777 -0
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-DeneBJR_.js → code-block-BzmM9Eig.js} +9 -9
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-C-_l4hpy.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-By56pLog.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-By56pLog.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-Dxo2fAYQ.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-C25VMRII.js → command-CrlPIL6m.js} +12 -12
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-DD0DUPwJ.js → comments-Dmpp0YIc.js} +380 -379
  114. package/dist/comments-Dmpp0YIc.js.map +1 -0
  115. package/dist/components/base/action-menu/action-menu.d.ts +9 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +16 -7
  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 +11 -7
  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/checkbox.d.ts +7 -2
  124. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  125. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  126. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  127. package/dist/components/base/combobox/index.d.ts +4 -2
  128. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  129. package/dist/components/base/feedback/alert.d.ts +1 -1
  130. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  131. package/dist/components/base/forms/form-field.d.ts +5 -3
  132. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  133. package/dist/components/base/forms/index.d.ts +1 -0
  134. package/dist/components/base/forms/server-errors.d.ts +16 -0
  135. package/dist/components/base/forms/workflow.d.ts +11 -2
  136. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  137. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  138. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  139. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  140. package/dist/components/base/navigation/page-header/page-header.d.ts +13 -4
  141. package/dist/components/base/popover/popover.d.ts +3 -3
  142. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  143. package/dist/components/base/sheet/sheet.d.ts +2 -0
  144. package/dist/components/base/sidebar/index.d.ts +1 -1
  145. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  146. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  147. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  148. package/dist/components/base/text-inputs/input.d.ts +4 -2
  149. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  150. package/dist/components/base/toaster/index.d.ts +1 -0
  151. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  152. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  153. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  154. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  155. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  156. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  157. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  158. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  159. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  160. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  161. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  162. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  163. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  164. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  165. package/dist/components/blocks/commerce/index.d.ts +7 -6
  166. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  167. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  168. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  169. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  170. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  171. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  172. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  173. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  174. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  175. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  176. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  177. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  178. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  180. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  181. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  182. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  183. package/dist/components/features/activities/activities.types.d.ts +8 -2
  184. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  185. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  186. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  187. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  188. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  189. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  190. package/dist/components/features/filters/filters.types.d.ts +3 -0
  191. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  192. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  193. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  194. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  195. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  196. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  197. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  198. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  199. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  200. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  201. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  202. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  203. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  204. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  205. package/dist/components/features/products/products.strings.d.ts +9 -1
  206. package/dist/components/features/products/products.types.d.ts +43 -6
  207. package/dist/components/features/resource/resource.d.ts +5 -1
  208. package/dist/components/features/resource/resource.types.d.ts +12 -1
  209. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  210. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  211. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  212. package/dist/components/features/table/table.types.d.ts +1 -1
  213. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  214. package/dist/components/layout/app-shell/index.d.ts +1 -1
  215. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  216. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  217. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  218. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  219. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  220. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  221. package/dist/components/layout/header/header.types.d.ts +6 -6
  222. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  223. package/dist/components/layout/page/index.d.ts +2 -1
  224. package/dist/components/layout/page/page.d.ts +1 -0
  225. package/dist/components/layout/page/page.strings.d.ts +11 -0
  226. package/dist/components/layout/page/page.types.d.ts +69 -17
  227. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  228. package/dist/components/layout/settings/settings.d.ts +9 -2
  229. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  230. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  231. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  232. package/dist/components/layout/sidebar/index.d.ts +2 -1
  233. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  234. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  235. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  236. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  237. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  238. package/dist/components/typography/text.styles.d.ts +26 -1
  239. package/dist/components/ui/alert-dialog.d.ts +2 -2
  240. package/dist/components/ui/combobox.d.ts +1 -1
  241. package/dist/components/ui/dialog.d.ts +2 -2
  242. package/dist/components/ui/overlay-layer.d.ts +18 -0
  243. package/dist/components/ui/sheet.d.ts +5 -1
  244. package/dist/components/ui/sidebar-state.d.ts +82 -0
  245. package/dist/components/ui/sidebar.d.ts +5 -17
  246. package/dist/composition.recipes-COdiFhxB.js +19 -0
  247. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  248. package/dist/containers-CIxwbZt5.js +112 -0
  249. package/dist/containers-CIxwbZt5.js.map +1 -0
  250. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  251. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  252. package/dist/{copyable-ClBuk_UK.js → copyable-DIznBqiT.js} +7 -7
  253. package/dist/{copyable-ClBuk_UK.js.map → copyable-DIznBqiT.js.map} +1 -1
  254. package/dist/{data-display-DT_khPl_.js → data-display-BdgCAw8T.js} +277 -285
  255. package/dist/data-display-BdgCAw8T.js.map +1 -0
  256. package/dist/{date-DCrsDTZc.js → date-Cq8ioE4o.js} +5 -5
  257. package/dist/{date-DCrsDTZc.js.map → date-Cq8ioE4o.js.map} +1 -1
  258. package/dist/{date-picker-B2K3ucWn.js → date-picker-RlIzKom_.js} +501 -480
  259. package/dist/date-picker-RlIzKom_.js.map +1 -0
  260. package/dist/date-pickers-DY-CpXS1.js +179 -0
  261. package/dist/date-pickers-DY-CpXS1.js.map +1 -0
  262. package/dist/{display-hAc1HjpI.js → display-KsZLw9Ov.js} +9 -9
  263. package/dist/{display-hAc1HjpI.js.map → display-KsZLw9Ov.js.map} +1 -1
  264. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  265. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  266. package/dist/features/activities.js +302 -253
  267. package/dist/features/activities.js.map +1 -1
  268. package/dist/features/ai-chat.js +15 -14
  269. package/dist/features/ai-chat.js.map +1 -1
  270. package/dist/features/appointment-calendar.js +222 -220
  271. package/dist/features/appointment-calendar.js.map +1 -1
  272. package/dist/features/async-preview.js +11 -10
  273. package/dist/features/async-preview.js.map +1 -1
  274. package/dist/features/combobox.js +1 -1
  275. package/dist/features/comments.js +1 -1
  276. package/dist/features/data-view.js +13 -13
  277. package/dist/features/data-view.js.map +1 -1
  278. package/dist/features/email-composer.js +249 -249
  279. package/dist/features/email-composer.js.map +1 -1
  280. package/dist/features/event-calendar.js +264 -269
  281. package/dist/features/event-calendar.js.map +1 -1
  282. package/dist/features/filters.js +1 -1
  283. package/dist/features/global-search.js +167 -138
  284. package/dist/features/global-search.js.map +1 -1
  285. package/dist/features/kanban.js +6 -7
  286. package/dist/features/kanban.js.map +1 -1
  287. package/dist/features/map.js +269 -260
  288. package/dist/features/map.js.map +1 -1
  289. package/dist/features/media-library.js +827 -777
  290. package/dist/features/media-library.js.map +1 -1
  291. package/dist/features/mentions.js +1 -1
  292. package/dist/features/overlays.js +1 -1
  293. package/dist/features/products.js +1246 -1169
  294. package/dist/features/products.js.map +1 -1
  295. package/dist/features/questionnaire.js +13 -13
  296. package/dist/features/questionnaire.js.map +1 -1
  297. package/dist/features/resource-assignment.js +8 -8
  298. package/dist/features/resource.js +127 -123
  299. package/dist/features/resource.js.map +1 -1
  300. package/dist/features/rich-text-editor.js +2 -2
  301. package/dist/features/schema-form.js +254 -253
  302. package/dist/features/schema-form.js.map +1 -1
  303. package/dist/features/suggestions.js +3 -3
  304. package/dist/features/sync.js +3 -3
  305. package/dist/features/table.js +1 -1
  306. package/dist/features/theme-tweaker.js +95 -96
  307. package/dist/features/theme-tweaker.js.map +1 -1
  308. package/dist/{feedback-BYIhtitP.js → feedback-Dm4izqFn.js} +81 -80
  309. package/dist/feedback-Dm4izqFn.js.map +1 -0
  310. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  311. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  312. package/dist/{filters-DJVAveHA.js → filters-DzgSJpMK.js} +693 -645
  313. package/dist/filters-DzgSJpMK.js.map +1 -0
  314. package/dist/{form-field-CwH9y77i.js → form-field-BriWAXyg.js} +14 -8
  315. package/dist/form-field-BriWAXyg.js.map +1 -0
  316. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-Bs2qFUeE.js} +4 -4
  317. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  318. package/dist/forms-C0RGnJTe.js +216 -0
  319. package/dist/forms-C0RGnJTe.js.map +1 -0
  320. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-DIhghX1Q.js} +295 -291
  321. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  322. package/dist/{header-BSfIEWbI.js → header-DMMxG__r.js} +67 -63
  323. package/dist/header-DMMxG__r.js.map +1 -0
  324. package/dist/header.recipes-BigdJjw1.js +6 -0
  325. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  326. package/dist/hooks/useFormErrors.d.ts +1 -1
  327. package/dist/{hooks-ClH9thn4.js → hooks-DB6CJ4MR.js} +26 -14
  328. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  329. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-DZF-YjQp.js} +4 -4
  330. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  331. package/dist/index.js +4 -5
  332. package/dist/input-CvyDQlY7.js +289 -0
  333. package/dist/input-CvyDQlY7.js.map +1 -0
  334. package/dist/input-DMBwAZmr.js +21 -0
  335. package/dist/input-DMBwAZmr.js.map +1 -0
  336. package/dist/item-DjCcM18E.js +277 -0
  337. package/dist/item-DjCcM18E.js.map +1 -0
  338. package/dist/layout/app-shell.js +1 -1
  339. package/dist/layout/auth.js +1 -1
  340. package/dist/layout/containers.js +1 -1
  341. package/dist/layout/header.js +1 -1
  342. package/dist/layout/hooks.js +1 -1
  343. package/dist/layout/navigation.js +1 -1
  344. package/dist/layout/page.js +2 -2
  345. package/dist/layout/settings.js +1 -1
  346. package/dist/layout/sidebar.js +3 -3
  347. package/dist/layout/workspace.js +1 -1
  348. package/dist/layout.js +11 -11
  349. package/dist/lib/affordance-geometry.generated.d.ts +41 -35
  350. package/dist/lib/control-group-recipes.d.ts +5 -5
  351. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  352. package/dist/lib/motion-recipes.d.ts +3 -0
  353. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  354. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  355. package/dist/lib/portal-recipes.d.ts +3 -0
  356. package/dist/lib/token-merge.generated.d.ts +13 -10
  357. package/dist/lib/ui-provider/types.d.ts +1 -1
  358. package/dist/lib/utils.js +1 -1
  359. package/dist/map-demo-tile.svg +1 -1
  360. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-C-vChPmE.js} +6 -6
  361. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  362. package/dist/{mentions-CGlEJ15c.js → mentions-0_4nWuI-.js} +10 -10
  363. package/dist/{mentions-CGlEJ15c.js.map → mentions-0_4nWuI-.js.map} +1 -1
  364. package/dist/{message-DZ_ruyUV.js → message-g8p7eVtN.js} +7 -7
  365. package/dist/message-g8p7eVtN.js.map +1 -0
  366. package/dist/metadata-list-C3MkU-Om.js +443 -0
  367. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  368. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  369. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  370. package/dist/navigation-C90-oQFq.js +255 -0
  371. package/dist/navigation-C90-oQFq.js.map +1 -0
  372. package/dist/{navigation-BzhHI3lo.js → navigation-DaRjthVk.js} +101 -82
  373. package/dist/navigation-DaRjthVk.js.map +1 -0
  374. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  375. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  376. package/dist/{number-DbV1Dija.js → number-CRU3kGuk.js} +5 -5
  377. package/dist/{number-DbV1Dija.js.map → number-CRU3kGuk.js.map} +1 -1
  378. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  379. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  380. package/dist/overlays-BSgCtM2v.js +1013 -0
  381. package/dist/overlays-BSgCtM2v.js.map +1 -0
  382. package/dist/page-DUUKDAjo.js +331 -0
  383. package/dist/page-DUUKDAjo.js.map +1 -0
  384. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  385. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  386. package/dist/{pagination-BL25hu2s.js → pagination-CgCjElfu.js} +7 -7
  387. package/dist/{pagination-BL25hu2s.js.map → pagination-CgCjElfu.js.map} +1 -1
  388. package/dist/popover-B85RenIl.js +201 -0
  389. package/dist/popover-B85RenIl.js.map +1 -0
  390. package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-DlnQ2zlR.js} +7 -7
  391. package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  392. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  393. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  394. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  395. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  396. package/dist/{primitives-BFK08r9M.js → primitives-ByWgGUgt.js} +6 -6
  397. package/dist/{primitives-BFK08r9M.js.map → primitives-ByWgGUgt.js.map} +1 -1
  398. package/dist/primitives.js +4 -4
  399. package/dist/{progress-B1VnCT0K.js → progress-BJhQP9WX.js} +9 -9
  400. package/dist/{progress-B1VnCT0K.js.map → progress-BJhQP9WX.js.map} +1 -1
  401. package/dist/{receipt-BVSOH3Xo.js → receipt-tOc7B3hw.js} +7 -7
  402. package/dist/receipt-tOc7B3hw.js.map +1 -0
  403. package/dist/{rich-text-GOUyKQ-s.js → rich-text-Dth5E882.js} +4 -4
  404. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-Dth5E882.js.map} +1 -1
  405. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-C1fOjBTd.js} +429 -430
  406. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  407. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-laT3tpBT.js} +33 -29
  408. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  409. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-B0dB2cBi.js} +2 -2
  410. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  411. package/dist/{separator-Bom7NsGO.js → separator-Bb17I4pu.js} +2 -2
  412. package/dist/{separator-Bom7NsGO.js.map → separator-Bb17I4pu.js.map} +1 -1
  413. package/dist/{separator-BDV-Y648.js → separator-Ct_WSWTJ.js} +3 -3
  414. package/dist/{separator-BDV-Y648.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  415. package/dist/services/actions.js +1 -1
  416. package/dist/settings-Bar5wiSo.js +167 -0
  417. package/dist/settings-Bar5wiSo.js.map +1 -0
  418. package/dist/sheet-BGPERY55.js +250 -0
  419. package/dist/sheet-BGPERY55.js.map +1 -0
  420. package/dist/sidebar-D-JYMMbY.js +686 -0
  421. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  422. package/dist/sidebar-f9gRWXIR.js +1001 -0
  423. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  424. package/dist/skeleton-BapcJd9C.js +265 -0
  425. package/dist/skeleton-BapcJd9C.js.map +1 -0
  426. package/dist/smart-card-CW0hjetE.js +617 -0
  427. package/dist/smart-card-CW0hjetE.js.map +1 -0
  428. package/dist/{structure-BmisBK-3.js → structure-DuxKl954.js} +3 -3
  429. package/dist/{structure-BmisBK-3.js.map → structure-DuxKl954.js.map} +1 -1
  430. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  431. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  432. package/dist/style.css +1 -1
  433. package/dist/{table-DsfzoUia.js → table-B4TE7iOV.js} +3 -3
  434. package/dist/{table-DsfzoUia.js.map → table-B4TE7iOV.js.map} +1 -1
  435. package/dist/{table-BweFy_P9.js → table-CFOWY9pQ.js} +394 -388
  436. package/dist/table-CFOWY9pQ.js.map +1 -0
  437. package/dist/{tabs-CDocW5D1.js → tabs-e7ko9S2o.js} +11 -11
  438. package/dist/tabs-e7ko9S2o.js.map +1 -0
  439. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-B1culiSK.js} +107 -104
  440. package/dist/text-inputs-B1culiSK.js.map +1 -0
  441. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  442. package/dist/text.styles-B64My8RZ.js.map +1 -0
  443. package/dist/theme.css +192 -149
  444. package/dist/{timelines-CwM_9IhD.js → timelines-D3Sl9ueq.js} +13 -12
  445. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  446. package/dist/tooltip-8wz5S_Zr.js +113 -0
  447. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  448. package/dist/{tree-WnKQzwbq.js → tree-CzUJHnFs.js} +9 -9
  449. package/dist/{tree-WnKQzwbq.js.map → tree-CzUJHnFs.js.map} +1 -1
  450. package/dist/typography/rich-text.js +1 -1
  451. package/dist/typography-BQnine1k.js +117 -0
  452. package/dist/typography-BQnine1k.js.map +1 -0
  453. package/dist/typography.js +1 -1
  454. package/dist/ui-provider-C-74NVLc.js +178 -0
  455. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  456. package/dist/ui-provider.js +2 -3
  457. package/dist/{upload-CXyxmQBP.js → upload-BOW6U2tI.js} +25 -24
  458. package/dist/upload-BOW6U2tI.js.map +1 -0
  459. package/dist/{upload-queue-Boscubn9.js → upload-queue-qUXn1ykN.js} +16 -14
  460. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  461. package/dist/{usage-card-BhO5eqkX.js → usage-card-BeSLY0i0.js} +145 -137
  462. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  463. package/dist/{utils-BRhFDwuU.js → utils-B6kKb8jB.js} +303 -144
  464. package/dist/utils-B6kKb8jB.js.map +1 -0
  465. package/dist/value-inputs-skdVB2zh.js +980 -0
  466. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  467. package/dist/{value-typography-BP8OG6h5.js → value-typography-uAmWUAL1.js} +2 -2
  468. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  469. package/dist/workspace-DHeHv0qw.js +411 -0
  470. package/dist/workspace-DHeHv0qw.js.map +1 -0
  471. package/docs/consumer-skill/SKILL.md +15 -129
  472. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  473. package/docs/consumer-skill/examples/app-layout.tsx +74 -13
  474. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  475. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  476. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  477. package/docs/consumer-skill/examples/detail.tsx +5 -4
  478. package/docs/consumer-skill/examples/edit.tsx +30 -38
  479. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  480. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  481. package/docs/consumer-skill/examples/manifest.json +88 -1
  482. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  483. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  484. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  485. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  486. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +105 -0
  487. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  488. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  489. package/docs/consumer-skill/references/agents-md.md +23 -11
  490. package/docs/consumer-skill/references/analytics.md +18 -1
  491. package/docs/consumer-skill/references/authentication.md +42 -0
  492. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  493. package/docs/consumer-skill/references/component-contracts.json +325201 -0
  494. package/docs/consumer-skill/references/composition-mapping.md +106 -0
  495. package/docs/consumer-skill/references/composition.md +198 -46
  496. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  497. package/docs/consumer-skill/references/custom-composition.md +261 -0
  498. package/docs/consumer-skill/references/data-reading.md +79 -0
  499. package/docs/consumer-skill/references/design-contract.md +43 -9
  500. package/docs/consumer-skill/references/discovery.md +109 -8
  501. package/docs/consumer-skill/references/domain-structures.md +124 -0
  502. package/docs/consumer-skill/references/installation.md +51 -36
  503. package/docs/consumer-skill/references/integration.md +41 -2
  504. package/docs/consumer-skill/references/product-composition.md +94 -0
  505. package/docs/consumer-skill/references/public-api.json +4390 -475
  506. package/docs/consumer-skill/references/review.md +47 -5
  507. package/docs/consumer-skill/references/rhf-workflows.md +93 -0
  508. package/docs/consumer-skill/references/screen-archetypes.md +34 -0
  509. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  510. package/docs/consumer-skill/references/theming.md +25 -27
  511. package/docs/consumer-skill/references/tokens.json +20 -11
  512. package/docs/consumer-skill/references/view-craft.md +153 -0
  513. package/docs/consumer-skill/references/view-spec.md +73 -0
  514. package/docs/consumer-skill/references/workflows.md +9 -2
  515. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  516. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  517. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  518. package/docs/consumer-skill/scripts/composition.mjs +254 -0
  519. package/docs/consumer-skill/scripts/discovery.mjs +96 -10
  520. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  521. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  522. package/docs/consumer-skill/scripts/inspection.mjs +193 -0
  523. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  524. package/docs/consumer-skill/scripts/setup-skills.mjs +111 -0
  525. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  526. package/docs/consumer-skills/themelia-components/SKILL.md +31 -0
  527. package/docs/consumer-skills/themelia-composition/SKILL.md +34 -0
  528. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  529. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  530. package/docs/consumer-skills/themelia-foundation/SKILL.md +15 -0
  531. package/docs/consumer-skills/themelia-tokenization/SKILL.md +42 -0
  532. package/package.json +4 -2
  533. package/templates/README.md +39 -0
  534. package/templates/admin-shell-template.tsx +382 -0
  535. package/templates/analytics-operations-template.tsx +376 -0
  536. package/templates/customers-template.tsx +509 -0
  537. package/templates/index.ts +29 -0
  538. package/templates/orders-template.tsx +1102 -0
  539. package/templates/products-template.tsx +834 -0
  540. package/templates/user-permissions-template.tsx +450 -0
  541. package/dist/accordion-Cjb6sx0G.js.map +0 -1
  542. package/dist/action-menu-CllU52Mm.js +0 -280
  543. package/dist/action-menu-CllU52Mm.js.map +0 -1
  544. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  545. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  546. package/dist/app-shell-C4FhvCqF.js +0 -236
  547. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  548. package/dist/auth-BGua8ouh.js.map +0 -1
  549. package/dist/avatar-DAPlDvhJ.js.map +0 -1
  550. package/dist/base/cascader.js.map +0 -1
  551. package/dist/batch-action-bar-DnUJ21NQ.js.map +0 -1
  552. package/dist/button-DVzspB_G.js.map +0 -1
  553. package/dist/buttons-DPZekJFu.js.map +0 -1
  554. package/dist/cards-BaBZR-AU.js +0 -68
  555. package/dist/cards-BaBZR-AU.js.map +0 -1
  556. package/dist/chart-ZOYyK2xG.js +0 -155
  557. package/dist/chart-ZOYyK2xG.js.map +0 -1
  558. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  559. package/dist/choice-inputs-CNHvARCJ.js +0 -770
  560. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  561. package/dist/code-block-DeneBJR_.js.map +0 -1
  562. package/dist/combobox-DaHESuiL.js +0 -355
  563. package/dist/combobox-DaHESuiL.js.map +0 -1
  564. package/dist/combobox-Dxo2fAYQ.js.map +0 -1
  565. package/dist/command-C25VMRII.js.map +0 -1
  566. package/dist/comments-DD0DUPwJ.js.map +0 -1
  567. package/dist/containers-Mu1LMGV1.js +0 -103
  568. package/dist/containers-Mu1LMGV1.js.map +0 -1
  569. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  570. package/dist/data-display-DT_khPl_.js.map +0 -1
  571. package/dist/date-picker-B2K3ucWn.js.map +0 -1
  572. package/dist/date-pickers-Ds8gLaoP.js +0 -175
  573. package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
  574. package/dist/dropdown-menu-Cl4X7L5S.js +0 -193
  575. package/dist/dropdown-menu-Cl4X7L5S.js.map +0 -1
  576. package/dist/feedback-BYIhtitP.js.map +0 -1
  577. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +0 -1
  578. package/dist/filters-DJVAveHA.js.map +0 -1
  579. package/dist/form-field-CwH9y77i.js.map +0 -1
  580. package/dist/form-sizing-BdP_Mf5p.js.map +0 -1
  581. package/dist/forms-B9G_xwzi.js +0 -194
  582. package/dist/forms-B9G_xwzi.js.map +0 -1
  583. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  584. package/dist/header-BSfIEWbI.js.map +0 -1
  585. package/dist/hooks-ClH9thn4.js.map +0 -1
  586. package/dist/input-CZw8iU99.js +0 -21
  587. package/dist/input-CZw8iU99.js.map +0 -1
  588. package/dist/input-DQdEd0YD.js +0 -263
  589. package/dist/input-DQdEd0YD.js.map +0 -1
  590. package/dist/item-K5_ghvze.js +0 -275
  591. package/dist/item-K5_ghvze.js.map +0 -1
  592. package/dist/message-DZ_ruyUV.js.map +0 -1
  593. package/dist/metadata-list-8N16ZMW_.js +0 -405
  594. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  595. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  596. package/dist/navigation-Bnotn4AQ.js +0 -145
  597. package/dist/navigation-Bnotn4AQ.js.map +0 -1
  598. package/dist/navigation-BzhHI3lo.js.map +0 -1
  599. package/dist/navigation-row-recipes-BFLCk_Aq.js.map +0 -1
  600. package/dist/overflow-tab-bar-CWY7Nogn.js +0 -282
  601. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  602. package/dist/overlays-tMkF-VAN.js +0 -1003
  603. package/dist/overlays-tMkF-VAN.js.map +0 -1
  604. package/dist/page-CL9YeH_V.js +0 -224
  605. package/dist/page-CL9YeH_V.js.map +0 -1
  606. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  607. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  608. package/dist/popover-gnTOhbFM.js +0 -198
  609. package/dist/popover-gnTOhbFM.js.map +0 -1
  610. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  611. package/dist/receipt-BVSOH3Xo.js.map +0 -1
  612. package/dist/rich-text-editor-cRLC-eBK.js.map +0 -1
  613. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +0 -1
  614. package/dist/settings-ybnjVwbd.js +0 -171
  615. package/dist/settings-ybnjVwbd.js.map +0 -1
  616. package/dist/sheet-ijlsjq-n.js +0 -213
  617. package/dist/sheet-ijlsjq-n.js.map +0 -1
  618. package/dist/sidebar-Db6gkh3U.js +0 -619
  619. package/dist/sidebar-Db6gkh3U.js.map +0 -1
  620. package/dist/sidebar-DkTO4VTO.js +0 -512
  621. package/dist/sidebar-DkTO4VTO.js.map +0 -1
  622. package/dist/skeleton-Byjnt7qr.js +0 -264
  623. package/dist/skeleton-Byjnt7qr.js.map +0 -1
  624. package/dist/smart-card-DiC5aac3.js +0 -604
  625. package/dist/smart-card-DiC5aac3.js.map +0 -1
  626. package/dist/table-BweFy_P9.js.map +0 -1
  627. package/dist/tabs-CDocW5D1.js.map +0 -1
  628. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  629. package/dist/text.styles-g4He6UIW.js.map +0 -1
  630. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  631. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  632. package/dist/timelines-CwM_9IhD.js.map +0 -1
  633. package/dist/tooltip-yiRJUFjp.js +0 -111
  634. package/dist/tooltip-yiRJUFjp.js.map +0 -1
  635. package/dist/typography-UTnveOEy.js +0 -117
  636. package/dist/typography-UTnveOEy.js.map +0 -1
  637. package/dist/ui-provider-C_U0Xma4.js +0 -136
  638. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  639. package/dist/upload-CXyxmQBP.js.map +0 -1
  640. package/dist/upload-queue-Boscubn9.js.map +0 -1
  641. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  642. package/dist/use-mobile-vaLKwgyf.js +0 -15
  643. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  644. package/dist/utils-BRhFDwuU.js.map +0 -1
  645. package/dist/value-inputs-TaX4OjNk.js +0 -963
  646. package/dist/value-inputs-TaX4OjNk.js.map +0 -1
  647. package/dist/workspace-B-OEm3Kf.js +0 -408
  648. package/dist/workspace-B-OEm3Kf.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-DMMxG__r.js","names":["React","_Fragment","React","_Fragment","Text","DisplayLabel","Stack","dotRecipes","popoverWidthRecipes","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuContent","DropdownMenuLinkItem","DropdownMenu","ActionMenu","formatInitials","AvatarFallback","Avatar","AvatarImage","Separator","PopoverTrigger","Popover","PopoverContent","Breadcrumbs","SidebarTrigger","useLayoutLinkRenderer","useCommandShortcut","headerInlineDividerAlignment","React$1","Fragment$1","HeaderBreadcrumbs","resolvedRenderLink","items","out","homeBreadcrumb","breadcrumbs","showCrumbs","cn","className","showSidebarTrigger","triggerSlot","Header","forwardRef","props","contentClassName","slots","showBreadcrumbs","breadcrumbsClassName","leftClassName","centerClassName","rightClassName","defaultHeaderNotificationsStrings","defaultHeaderSearchStrings","defaultHeaderUserMenuStrings","detectMac","ua","HeaderSearch","stringsProp","strings","useStrings","detectedMac","setDetectedMac","useState","shortcutModifier","isMetaShortcut","enableShortcut","onOpen","shortcutTitle","shortcut","shortcutSlot","Button","Search","iconClassName","HeaderGlobalSearchTrigger","onOpenChange","HeaderToolButton","Icon","label","active","badge","HeaderToolPopover","open","triggerClassName","HeaderUserMenu","initials","user","twoLineIdentity","showEmail","actions","onProfile","User","onSettings","Settings","onLogout","LogOut","trigger","renderTrigger","ChevronsUpDown","contentClasses","customContent","NOTIFICATION_TONE_CLASSNAMES","HeaderNotifications","badgeText","unreadCount","Bell","onMarkAllRead","notifications","NotificationRow","onNotificationClick","notification","onViewAll","viewAllHref","renderNotification","content","onClick","renderLink"],"sources":["../src/components/layout/header/partials/header-breadcrumbs.tsx","../src/components/layout/header/header.tsx","../src/components/layout/header/header.types.ts","../src/components/layout/header/partials/header-search.tsx","../src/components/layout/header/partials/header-global-search-trigger.tsx","../src/components/layout/header/partials/header-tool-button.tsx","../src/components/layout/header/partials/header-tool-popover.tsx","../src/components/layout/header/partials/header-user-menu.tsx","../src/components/layout/header/partials/header-notifications.tsx"],"sourcesContent":["/** HeaderBreadcrumbs — breadcrumbs trail with optional sidebar trigger. */\nimport * as React from 'react';\n\nimport { Separator } from '../../../base/display/separator';\nimport { Breadcrumbs } from '../../../base/navigation/breadcrumbs';\nimport { SidebarTrigger } from '../../../base/sidebar';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { BreadcrumbItem } from '../../layout.types';\nimport type { HeaderBreadcrumbsProps } from '../header.types';\n\nexport function HeaderBreadcrumbs({\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\ttriggerSlot,\n\trenderLink,\n\tclassName,\n}: HeaderBreadcrumbsProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst items = React.useMemo<BreadcrumbItem[]>(() => {\n\t\tconst out: BreadcrumbItem[] = [];\n\t\tif (homeBreadcrumb) out.push(homeBreadcrumb);\n\t\tout.push(...breadcrumbs);\n\t\treturn out;\n\t}, [homeBreadcrumb, breadcrumbs]);\n\n\tconst showCrumbs = items.length > 0;\n\n\treturn (\n\t\t<div className={cn('relative flex min-h-action min-w-0 items-center gap-space-lg', className)}>\n\t\t\t{!!showSidebarTrigger && (\n\t\t\t\t<div className=\"relative flex min-h-action shrink-0 items-center justify-center\">\n\t\t\t\t\t{triggerSlot ?? <SidebarTrigger />}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!showCrumbs && (\n\t\t\t\t<>\n\t\t\t\t\t{!!showSidebarTrigger && <Separator orientation=\"vertical\" className=\"h-icon shrink-0 data-[orientation=vertical]:self-center\" />}\n\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center overflow-hidden\">\n\t\t\t\t\t\t<Breadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={items}\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'min-w-0 overflow-hidden',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-list]]:flex-nowrap [&_[data-slot=breadcrumb-list]]:overflow-hidden [&_[data-slot=breadcrumb-list]]:break-normal',\n\t\t\t\t\t\t\t\t// The current page claims its width first and truncates last. Ancestors\n\t\t\t\t\t\t\t\t// share what remains, up to their own width, and give way first.\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-item]]:min-w-0',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-item]:not(:last-child)]:max-w-max [&_[data-slot=breadcrumb-item]:not(:last-child)]:grow [&_[data-slot=breadcrumb-item]:not(:last-child)]:basis-0',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-link]]:truncate [&_[data-slot=breadcrumb-page]]:truncate',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/** Header — sticky top bar with breadcrumbs and slot-driven content regions. */\nimport { forwardRef } from 'react';\n\nimport { Stack } from '../../base/structure';\nimport { cn } from '../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { HeaderBreadcrumbs } from './partials/header-breadcrumbs';\nimport type { HeaderProps } from './header.types';\nimport { headerInlineDividerAlignment } from './header.recipes';\n\nexport const Header = forwardRef<HTMLElement, HeaderProps>(function Header({\n\tshowBreadcrumbs = true,\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\tslots,\n\trenderLink,\n\tclassName,\n\tcontentClassName,\n\tleftClassName,\n\tcenterClassName,\n\trightClassName,\n\tbreadcrumbsClassName,\n\t...props\n}, ref) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\n\treturn (\n\t\t<header\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'header--component @container/app-header box-border sticky top-0 z-40 flex min-w-0 min-h-shell-header items-center border-b border-border bg-background px-surface-lg py-space-sm transition-[width,height] ease-linear',\n\t\t\t\theaderInlineDividerAlignment,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" gap=\"xl\" align=\"center\" wrap className={cn('min-w-0 min-h-action flex-1', contentClassName)}>\n\t\t\t\t{!!slots?.brand && (\n\t\t\t\t\t<div className=\"hidden min-w-0 shrink-0 items-center @2xl/app-header:flex\">\n\t\t\t\t\t\t{slots.brand}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!showBreadcrumbs && (\n\t\t\t\t\t<div className=\"min-w-0 flex-1 basis-32\">\n\t\t\t\t\t\t{slots?.breadcrumbs ?? (\n\t\t\t\t\t\t<HeaderBreadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={breadcrumbs}\n\t\t\t\t\t\t\thomeBreadcrumb={homeBreadcrumb}\n\t\t\t\t\t\t\tshowSidebarTrigger={showSidebarTrigger}\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={breadcrumbsClassName}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!slots?.left && (\n\t\t\t\t\t<div className={cn('flex min-w-0 items-center', leftClassName)}>\n\t\t\t\t\t\t{slots.left}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!slots?.center && (\n\t\t\t\t\t/* Search narrows within its region before navigation or account controls lose space. */\n\t\t\t\t\t<div className={cn('hidden min-w-0 flex-1 basis-64 items-center justify-center @3xl/app-header:flex [&>*]:min-w-0 [&>*]:max-w-full', centerClassName)}>\n\t\t\t\t\t\t{slots.center}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!slots?.right && (\n\t\t\t\t\t<div className={cn('ms-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-space-md [&>*]:max-w-full', rightClassName)}>\n\t\t\t\t\t\t{slots.right}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</header>\n\t);\n});\n\nHeader.displayName = 'Header';\n","/**\n * Header layout and partial types.\n *\n * This layer is intentionally framework-neutral: links and route state enter\n * through `renderLink`, and app-specific content enters through slots.\n */\nimport type { ComponentType, HTMLAttributes, ReactNode } from 'react';\n\nimport type { StringsProp } from '../../../lib/strings';\nimport type { SemanticTone } from '../../../lib/component-vocabulary';\n\nimport type {\n\tBreadcrumbItem,\n\tLayoutNavigationAdapter,\n\tLayoutUser,\n} from '../layout.types';\n\nexport interface HeaderBreadcrumbsProps extends LayoutNavigationAdapter {\n\t/** Trail entries, root first. */\n\tbreadcrumbs?: BreadcrumbItem[];\n\t/** Root entry prepended to the trail. */\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\t/** Renders the sidebar collapse control. */\n\tshowSidebarTrigger?: boolean;\n\ttriggerSlot?: ReactNode;\n\tclassName?: string;\n}\n\nexport type NotificationTone = Extract<\n\tSemanticTone,\n\t'info' | 'success' | 'warning' | 'destructive'\n>;\n\nexport interface HeaderNotification {\n\tid: string | number;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription?: ReactNode;\n\ttime?: ReactNode;\n\tread?: boolean;\n\ttone?: NotificationTone;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n}\n\nexport interface HeaderNotificationsStrings {\n\ttriggerLabel: string;\n\theading: string;\n\tmarkAllRead: string;\n\tempty: string;\n\tviewAll: string;\n}\n\nexport const defaultHeaderNotificationsStrings: HeaderNotificationsStrings = {\n\ttriggerLabel: 'Notifications',\n\theading: 'Notifications',\n\tmarkAllRead: 'Mark all as read',\n\tempty: 'No new notifications',\n\tviewAll: 'View all notifications',\n};\n\nexport interface HeaderNotificationsProps extends LayoutNavigationAdapter {\n\t/** Notifications to list, newest first. */\n\tnotifications?: HeaderNotification[];\n\t/** Unread total shown on the trigger. */\n\tunreadCount?: number;\n\tonNotificationClick?: (notification: HeaderNotification) => void;\n\tonMarkAllRead?: () => void;\n\tonViewAll?: () => void;\n\t/** Destination for the view-all link. */\n\tviewAllHref?: string;\n\t/** Alignment of the shell's content. */\n\talign?: 'start' | 'center' | 'end';\n\t/** Which side of the trigger the surface opens on. */\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<HeaderNotificationsStrings>;\n\tclassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\t/** Replaces the default notification row. */\n\trenderNotification?: (notification: HeaderNotification) => ReactNode;\n}\n\nexport interface HeaderSearchStrings {\n\tplaceholder: string;\n\tshortcutMac: string;\n\tshortcutPc: string;\n}\n\nexport const defaultHeaderSearchStrings: HeaderSearchStrings = {\n\tplaceholder: 'Search...',\n\tshortcutMac: '⌘K',\n\tshortcutPc: 'Ctrl+K',\n};\n\nexport interface HeaderSearchProps {\n\tonOpen?: () => void;\n\t/** Modifier shown in the shortcut hint. Auto-detected when omitted. */\n\tshortcutModifier?: 'meta' | 'control';\n\t/** Binds the keyboard shortcut that opens search. */\n\tenableShortcut?: boolean;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<HeaderSearchStrings>;\n\tclassName?: string;\n\t/** Merged onto the icon. */\n\ticonClassName?: string;\n\t/** Replaces the shortcut hint shown in the trigger. */\n\tshortcutSlot?: ReactNode;\n}\n\nexport interface HeaderGlobalSearchTriggerProps extends HeaderSearchProps {\n\t/** Whether the surface is showing. Controlled. */\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport interface HeaderToolButtonProps {\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon: ComponentType<{ className?: string }>;\n\t/** Marks the control as currently engaged. */\n\tactive?: boolean;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\tonClick?: () => void;\n\tclassName?: string;\n\t/** Merged onto the icon. */\n\ticonClassName?: string;\n}\n\nexport interface HeaderToolPopoverProps {\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon: ComponentType<{ className?: string }>;\n\t/** Whether the surface is showing. Controlled. */\n\topen?: boolean;\n\t/** Whether the surface starts open, for uncontrolled use. */\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\t/** Marks the control as currently engaged. */\n\tactive?: boolean;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\t/** Alignment of the shell's content. */\n\talign?: 'start' | 'center' | 'end';\n\t/** Which side of the trigger the surface opens on. */\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\tsideOffset?: number;\n\tclassName?: string;\n\t/** Merged onto the trigger. */\n\ttriggerClassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\tchildren?: ReactNode;\n}\n\nexport interface HeaderUserMenuProps {\n\t/** The signed-in user shown in the menu. */\n\tuser: LayoutUser;\n\t/** Shows the signed-in email under the name. */\n\tshowEmail?: boolean;\n\t/** Extra content appended inside the menu. */\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\t/** Alignment of the shell's content. */\n\talign?: 'start' | 'center' | 'end';\n\t/** Which side of the trigger the surface opens on. */\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<HeaderUserMenuStrings>;\n\t/** Merged onto the trigger. */\n\ttriggerClassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\t/** Replaces the default trigger element. */\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nexport interface HeaderUserMenuStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultHeaderUserMenuStrings: HeaderUserMenuStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface HeaderSlots {\n\t/** Leading brand/logo before breadcrumbs, visible from the 2xl/app-header container width (42rem by default). Use left for identity that must remain visible at narrow widths. */\n\tbrand?: ReactNode;\n\t/** Replaces the breadcrumb/sidebar-trigger region, rendered only while showBreadcrumbs is true. */\n\tbreadcrumbs?: ReactNode;\n\t/** Leading content after breadcrumbs; always rendered when supplied, including narrow container widths. The app owns compact content and overflow. */\n\tleft?: ReactNode;\n\t/** Optional center content, usually search, visible from the 3xl/app-header container width (48rem by default). Essential navigation needs a narrow-width alternative in left or right. */\n\tcenter?: ReactNode;\n\t/** Trailing content, usually tools/account actions; always rendered when supplied and wraps at narrow widths. Its children own their responsive behavior. */\n\tright?: ReactNode;\n}\n\nexport interface HeaderProps extends LayoutNavigationAdapter, HTMLAttributes<HTMLElement> {\n\t/** Renders the breadcrumb trail. */\n\tshowBreadcrumbs?: boolean;\n\t/** Trail entries, root first. */\n\tbreadcrumbs?: BreadcrumbItem[];\n\t/** Root entry prepended to the trail. */\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\t/** Renders the sidebar collapse control. */\n\tshowSidebarTrigger?: boolean;\n\t/** Composes shell regions by container width: brand appears from 2xl/app-header (42rem default), center from 3xl/app-header (48rem default); left and right are always rendered when supplied. Keep essential narrow-width identity/navigation in left or right and supply compact/overflow behavior. */\n\tslots?: HeaderSlots;\n\tclassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\t/** Merged onto the leading region. */\n\tleftClassName?: string;\n\t/** Merged onto the centre region. */\n\tcenterClassName?: string;\n\trightClassName?: string;\n\tbreadcrumbsClassName?: string;\n}\n","/** HeaderSearch — framework-neutral search trigger with optional Cmd/Ctrl+K. */\nimport { useEffect, useState } from 'react';\nimport { Search } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { kbdRecipe } from '../../../../lib/surface-recipes';\n\nimport { useCommandShortcut } from '../../hooks';\nimport {\n\tdefaultHeaderSearchStrings,\n\ttype HeaderSearchProps,\n} from '../header.types';\n\nfunction detectMac(): boolean {\n\tif (typeof navigator === 'undefined') return false;\n\tconst ua = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData;\n\tif (ua?.platform) return ua.platform === 'macOS';\n\treturn /Mac|iPhone|iPad/.test(navigator.platform);\n}\n\nexport function HeaderSearch({\n\tonOpen,\n\tshortcutModifier,\n\tenableShortcut = true,\n\tstrings: stringsProp,\n\tclassName,\n\ticonClassName,\n\tshortcutSlot,\n}: HeaderSearchProps) {\n\tconst strings = useStrings(defaultHeaderSearchStrings, stringsProp);\n\tconst [detectedMac, setDetectedMac] = useState(false);\n\tuseEffect(() => {\n\t\tif (shortcutModifier === undefined) setDetectedMac(detectMac());\n\t}, [shortcutModifier]);\n\tconst resolvedModifier = shortcutModifier ?? (detectedMac ? 'meta' : 'control');\n\tconst isMetaShortcut = resolvedModifier === 'meta';\n\tuseCommandShortcut({ key: 'k', enabled: enableShortcut, onTrigger: onOpen });\n\n\tconst shortcutTitle = isMetaShortcut ? strings.shortcutMac : strings.shortcutPc;\n\tconst shortcut = shortcutSlot ?? (\n\t\t// The shared key cap; it appears once the trigger is wide enough to show it.\n\t\t<kbd className={cn('header-search--shortcut', kbdRecipe, 'hidden lg:inline-flex')}>\n\t\t\t{isMetaShortcut ? strings.shortcutMac : strings.shortcutPc}\n\t\t</kbd>\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\tdata-component=\"header-search\"\n\t\t\tdata-slot=\"header-search-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-label={strings.placeholder}\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"outline\"\n\t\t\tsize=\"md\"\n\t\t\tonClick={onOpen}\n\t\t\tclassName={cn(\n\t\t\t\t'header-search--component header-search--trigger h-action w-full min-w-0 justify-start gap-space-md rounded-radius px-control-sm text-foreground shadow-none transition-[background-color,border-color,color,box-shadow]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={shortcutTitle}\n\t\t>\n\t\t\t<Search data-slot=\"header-search-icon\" className={cn('header-search--icon size-icon shrink-0 text-muted-foreground', iconClassName)} aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" data-slot=\"header-search-placeholder\" className=\"header-search--placeholder min-w-0 flex-1 truncate text-left\">\n\t\t\t\t{strings.placeholder}\n\t\t\t</Text>\n\t\t\t{shortcut}\n\t\t</Button>\n\t);\n}\n","/** HeaderGlobalSearchTrigger — header search trigger with controlled open callback. */\nimport { HeaderSearch } from './header-search';\nimport type { HeaderGlobalSearchTriggerProps } from '../header.types';\n\nexport function HeaderGlobalSearchTrigger({\n\tonOpen,\n\tonOpenChange,\n\t...props\n}: HeaderGlobalSearchTriggerProps) {\n\treturn (\n\t\t<HeaderSearch\n\t\t\t{...props}\n\t\t\tonOpen={() => {\n\t\t\t\tonOpen?.();\n\t\t\t\tonOpenChange?.(true);\n\t\t\t}}\n\t\t/>\n\t);\n}\n","/** HeaderToolButton — icon control for dense app headers. */\nimport * as React from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport { headerCountBadge } from '../header.recipes';\nimport type { HeaderToolButtonProps } from '../header.types';\n\nexport const HeaderToolButton = React.forwardRef<\n\tHTMLButtonElement,\n\tHeaderToolButtonProps\n>((\n\t{\n\t\tlabel,\n\t\ticon: Icon,\n\t\tactive = false,\n\t\tdisabled = false,\n\t\tbadge,\n\t\tonClick,\n\t\tclassName,\n\t\ticonClassName,\n\t},\n\tref,\n) => (\n\t<Button\n\t\tref={ref}\n\t\tdata-component=\"header-tool-button\"\n\t\tdata-slot=\"header-tool-button\"\n\t\ttype=\"button\"\n\t\ttone=\"secondary\"\n\t\tbuttonStyle=\"ghost\"\n\t\tsize=\"md\" iconOnly\n\t\taria-label={label}\n\t\taria-pressed={active || undefined}\n\t\ttitle={label}\n\t\tdisabled={disabled}\n\t\tonClick={onClick}\n\t\tclassName={cn(\n\t\t\t'header-tool-button--component header-tool-button--trigger relative rounded-radius text-foreground transition-[background-color,color,box-shadow] hover:bg-accent hover:text-accent-foreground',\n\t\t\tactive && 'bg-accent text-accent-foreground',\n\t\t\tclassName,\n\t\t)}\n\t>\n\t\t<Icon\n\t\t\tdata-slot=\"header-tool-icon\"\n\t\t\tclassName={cn('header-tool-button--icon size-icon', iconClassName)}\n\t\t\taria-hidden=\"true\"\n\t\t/>\n\t\t{!!badge && (\n\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"none\" data-slot=\"header-tool-badge\" className={cn('header-tool-button--badge', headerCountBadge)}>\n\t\t\t\t{badge}\n\t\t\t</Text>\n\t\t)}\n\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">{label}</Text>\n\t</Button>\n));\n\nHeaderToolButton.displayName = 'HeaderToolButton';\n","/** HeaderToolPopover — controlled header icon trigger plus popover content. */\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger,\n} from '../../../base/popover';\nimport { cn } from '../../../../lib/utils';\n\nimport type { HeaderToolPopoverProps } from '../header.types';\nimport { HeaderToolButton } from './header-tool-button';\nimport { popoverWidthRecipes } from '../../../base/popover/popover.recipes';\n\nexport function HeaderToolPopover({\n\tlabel,\n\ticon,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tactive,\n\tdisabled,\n\tbadge,\n\talign = 'end',\n\tside = 'bottom',\n\tsideOffset = 8,\n\tclassName,\n\ttriggerClassName,\n\tcontentClassName,\n\tchildren,\n}: HeaderToolPopoverProps) {\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<HeaderToolButton\n\t\t\t\t\tlabel={label}\n\t\t\t\t\ticon={icon}\n\t\t\t\t\tactive={active ?? open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tbadge={badge}\n\t\t\t\t\tclassName={triggerClassName}\n\t\t\t\t/>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent\n\t\t\t\tdata-component=\"header-tool-popover\"\n\t\t\t\tdata-slot=\"header-tool-popover-content\"\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'header-tool-popover--component',\n\t\t\t\t\tpopoverWidthRecipes.lg,\n\t\t\t\t\tclassName,\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n","/** HeaderUserMenu — avatar/name trigger with consumer-wired menu callbacks. */\nimport type { ReactElement } from 'react';\n\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\n\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../../base/avatar';\nimport { Button } from '../../../base/buttons';\nimport { formatInitials } from '../../../primitives/initials-format';\nimport { Text } from '../../../typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuTrigger,\n} from '../../../base/navigation/dropdown-menu';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultHeaderUserMenuStrings,\n\ttype HeaderUserMenuProps,\n} from '../header.types';\n\nexport function HeaderUserMenu({\n\tuser,\n\tshowEmail = true,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\ttriggerClassName,\n\tcontentClassName,\n\trenderTrigger,\n}: HeaderUserMenuProps) {\n\tconst strings = useStrings(defaultHeaderUserMenuStrings, stringsProp);\n\tconst initials = formatInitials(user.name, { strategy: 'first-words' });\n\tconst twoLineIdentity = showEmail && !!user.email;\n\n\t// Profile and settings sit together; sign-out is held apart by a rule with\n\t// no caption, which is what `group: true` is for.\n\tconst actions: ActionMenuAction[] = [\n\t\t...(onProfile ? [{ id: 'profile', label: strings.profile, icon: User, onClick: onProfile }] : []),\n\t\t...(onSettings ? [{ id: 'settings', label: strings.settings, icon: Settings, onClick: onSettings }] : []),\n\t\t...(onLogout\n\t\t\t? [{\n\t\t\t\tid: 'logout',\n\t\t\t\tlabel: strings.logout,\n\t\t\t\ticon: LogOut,\n\t\t\t\tonClick: onLogout,\n\t\t\t\t...(onProfile || onSettings ? { group: true as const } : null),\n\t\t\t}]\n\t\t\t: []),\n\t];\n\n\tconst trigger = renderTrigger?.(user) ?? (\n\t\t<Button\n\t\t\tdata-component=\"header-user-menu\"\n\t\t\tdata-slot=\"header-user-menu-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-label={user.name}\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\t// A one-line identity shares the header control height; name plus email needs the taller action.\n\t\t\tsize={twoLineIdentity ? 'lg' : 'md'}\n\t\t\tclassName={cn(\n\t\t\t\t'header-user-menu--component header-user-menu--trigger group min-w-0 max-w-56 justify-start gap-space-md text-foreground shadow-none hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent',\n\t\t\t\t!twoLineIdentity && 'h-action',\n\t\t\t\t// The identity follows the space its header row offers (the nearest container's\n\t\t\t\t// content box, with the viewport as the fallback): narrow rows keep the avatar control.\n\t\t\t\t'max-sm:size-action max-sm:justify-center max-sm:p-0 max-sm:[&_.header-user-menu--identity]:hidden max-sm:[&_.header-user-menu--chevron]:hidden',\n\t\t\t\t'@max-md:size-action @max-md:justify-center @max-md:p-0 @max-md:[&_.header-user-menu--identity]:hidden @max-md:[&_.header-user-menu--chevron]:hidden',\n\t\t\t\ttriggerClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Avatar data-slot=\"header-user-avatar\" className=\"header-user-menu--avatar size-avatar-sm overflow-hidden rounded-full ring-1 ring-border\">\n\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t<AvatarFallback className=\"rounded-full bg-muted text-xs font-semibold text-muted-foreground\">\n\t\t\t\t\t{initials}\n\t\t\t\t</AvatarFallback>\n\t\t\t</Avatar>\n\t\t\t<div data-slot=\"header-user-identity\" className=\"header-user-menu--identity grid min-w-0 flex-1 gap-dense text-start leading-none\">\n\t\t\t\t<Text type=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"truncate\">{user.name}</Text>\n\t\t\t\t{twoLineIdentity && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"tight\" className=\"truncate\">{user.email}</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<ChevronsUpDown className=\"header-user-menu--chevron size-icon-sm shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t</Button>\n\t);\n\n\tconst contentClasses = cn(\n\t\t'header-user-menu--content w-(--anchor-width) min-w-56 rounded-surface',\n\t\tcontentClassName,\n\t);\n\n\t// `customContent` replaces the menu body wholesale, which is a plain\n\t// dropdown rather than a list of commands — ActionMenu is deliberately not\n\t// that, so this path stays on the primitive it actually needs.\n\tif (customContent) {\n\t\treturn (\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger render={trigger as ReactElement} />\n\t\t\t\t<DropdownMenuContent\n\t\t\t\t\tdata-component=\"header-user-menu-content\"\n\t\t\t\t\tdata-slot=\"header-user-menu-content\"\n\t\t\t\t\tclassName={contentClasses}\n\t\t\t\t\talign={align}\n\t\t\t\t\tside={side}\n\t\t\t\t>\n\t\t\t\t\t{customContent}\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ActionMenu\n\t\t\tactions={actions}\n\t\t\talign={align}\n\t\t\tside={side}\n\t\t\tcontentClassName={contentClasses}\n\t\t\twidth=\"w-auto\"\n\t\t\tcloseOnSelect\n\t\t\trenderTrigger={trigger as ReactElement}\n\t\t/>\n\t);\n}\n","/** HeaderNotifications — bell dropdown for consumer-supplied notifications. */\nimport type { ReactElement } from 'react';\n\nimport { Bell } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuLinkItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '../../../base/navigation/dropdown-menu';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultHeaderNotificationsStrings,\n\ttype HeaderNotification,\n\ttype HeaderNotificationsProps,\n\ttype NotificationTone,\n} from '../header.types';\nimport { popoverWidthRecipes } from '../../../base/popover/popover.recipes';\nimport { headerCountBadge } from '../header.recipes';\nimport { dotRecipes } from '../../../../lib/tone-recipes';\n\nconst NOTIFICATION_TONE_CLASSNAMES: Record<NotificationTone, string> = {\n\tinfo: 'bg-info',\n\tsuccess: 'bg-success',\n\twarning: 'bg-warning',\n\tdestructive: 'bg-destructive',\n};\n\nexport function HeaderNotifications({\n\tnotifications = [],\n\tunreadCount = 0,\n\tonNotificationClick,\n\tonMarkAllRead,\n\tonViewAll,\n\tviewAllHref,\n\trenderLink,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\tclassName,\n\tcontentClassName,\n\trenderNotification,\n}: HeaderNotificationsProps) {\n\tconst strings = useStrings(defaultHeaderNotificationsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst badgeText = unreadCount > 99 ? '99+' : String(unreadCount);\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-component=\"header-notifications\"\n\t\t\t\t\t\tdata-slot=\"header-notifications-trigger\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"md\" iconOnly\n\t\t\t\t\t\taria-label={strings.triggerLabel}\n\t\t\t\t\t\tclassName={cn('header-notifications--component header-notifications--trigger relative', className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Bell className=\"size-icon\" aria-hidden=\"true\" />\n\t\t\t\t\t\t{unreadCount > 0 && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"none\" data-slot=\"header-notifications-badge\" className={cn('header-notifications--badge', headerCountBadge)}>\n\t\t\t\t\t\t\t\t{badgeText}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<DropdownMenuContent\n\t\t\t\tdata-component=\"header-notifications-content\"\n\t\t\t\tdata-slot=\"header-notifications-content\"\n\t\t\t\tclassName={cn('header-notifications--content', popoverWidthRecipes.lg, contentClassName)}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t>\n\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t<DropdownMenuLabel aria-hidden={false} className=\"header-notifications--label flex items-center justify-between gap-space-lg text-inherit\">\n\t\t\t\t\t\t<DisplayLabel className=\"text-inherit\">{strings.heading}</DisplayLabel>\n\t\t\t\t\t\t{unreadCount > 0 && !!onMarkAllRead && (\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\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tonClick={onMarkAllRead}\n\t\t\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.markAllRead}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuSeparator />\n\n\t\t\t\t\t{notifications.length === 0 ? (\n\t\t\t\t\t\t<div className=\"header-notifications--empty p-surface text-center\">\n\t\t\t\t\t\t\t<Text type=\"secondary\">{strings.empty}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Stack gap=\"xs\" className=\"header-notifications--list\">\n\t\t\t\t\t\t\t{notifications.map((notification) => (\n\t\t\t\t\t\t\t\t<NotificationRow\n\t\t\t\t\t\t\t\t\tkey={notification.id}\n\t\t\t\t\t\t\t\t\tnotification={notification}\n\t\t\t\t\t\t\t\t\tonClick={onNotificationClick}\n\t\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\t\trenderNotification={renderNotification}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</DropdownMenuGroup>\n\n\t\t\t\t{!!(onViewAll || viewAllHref) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t{viewAllHref ? (\n\t\t\t\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\t\t\t\thref={viewAllHref}\n\t\t\t\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\t\t\t\tresolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\t\t\t\thref: viewAllHref,\n\t\t\t\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\t\t\t}) as ReactElement\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{strings.viewAll}\n\t\t\t\t\t\t\t</DropdownMenuLinkItem>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownMenuItem onClick={onViewAll}>{strings.viewAll}</DropdownMenuItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n\nfunction NotificationRow({\n\tnotification,\n\tonClick,\n\trenderLink,\n\trenderNotification,\n}: {\n\tnotification: HeaderNotification;\n\tonClick?: (n: HeaderNotification) => void;\n\trenderLink: NonNullable<HeaderNotificationsProps['renderLink']>;\n\t/** Replaces the default notification row. */\n\trenderNotification?: HeaderNotificationsProps['renderNotification'];\n}) {\n\tif (renderNotification) return renderNotification(notification);\n\n\tconst content = (\n\t\t<Stack direction=\"horizontal\" align=\"start\" wrap={false} gap=\"sm\" className=\"header-notifications--item-content\">\n\t\t\t{!!notification.tone && (\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tdata-tone={notification.tone}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'header-notifications--tone mt-space-sm',\n\t\t\t\t\t\t\t\t\tdotRecipes.marker,\n\t\t\t\t\t\tNOTIFICATION_TONE_CLASSNAMES[notification.tone],\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Stack gap=\"dense\" className=\"min-w-0\">\n\t\t\t\t<Text type=\"inherit\" weight=\"medium\">{notification.title}</Text>\n\t\t\t\t{!!notification.description && <Text size=\"xs\" type=\"secondary\">{notification.description}</Text>}\n\t\t\t\t{!!notification.time && <Text size=\"xs\" type=\"secondary\">{notification.time}</Text>}\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n\n\tconst className = cn(\n\t\t'header-notifications--item items-start',\n\t\t!notification.read && 'bg-muted text-muted-foreground',\n\t);\n\n\tif (notification.href) {\n\t\treturn (\n\t\t\t<DropdownMenuLinkItem\n\t\t\t\thref={notification.href}\n\t\t\t\tclassName={className}\n\t\t\t\tonClick={() => onClick?.(notification)}\n\t\t\t\trender={(props) =>\n\t\t\t\t\trenderLink({\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\thref: notification.href,\n\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t}) as ReactElement\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuLinkItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DropdownMenuItem onClick={() => onClick?.(notification)} className={className}>\n\t\t\t{content}\n\t\t</DropdownMenuItem>\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ //#region src/components/layout/header/header.recipes.ts
2
+ var e = "[&_[data-slot=separator][data-orientation=vertical]]:self-center", t = "pointer-events-none absolute -end-1 -top-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full bg-foreground px-space-xs text-background tabular-nums";
3
+ //#endregion
4
+ export { e as n, t };
5
+
6
+ //# sourceMappingURL=header.recipes-BigdJjw1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.recipes-BigdJjw1.js","names":["headerInlineDividerAlignment","headerCountBadge"],"sources":["../src/components/layout/header/header.recipes.ts"],"sourcesContent":["/** Fixed-height inline rules align to header controls rather than stretching\n * from the top edge of a flex row. Separator keeps its general stretch default. */\nexport const headerInlineDividerAlignment = '[&_[data-slot=separator][data-orientation=vertical]]:self-center';\n\n/** One unread-count chip for header icon triggers. Counts state no status, so it\n * takes the neutral solid role; it floats over the icon, so it is opaque. */\nexport const headerCountBadge = 'pointer-events-none absolute -end-1 -top-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full bg-foreground px-space-xs text-background tabular-nums';\n"],"mappings":";AAEA,IAAaA,IAA+B,oEAI/BC,IAAmB"}
@@ -1,7 +1,7 @@
1
1
  type ErrorKey<T> = Extract<keyof T, string>;
2
2
  type ErrorBag<T> = Partial<Record<ErrorKey<T> | 'server' | 'general', string>>;
3
3
  export declare const useFormErrors: <T extends Record<string, unknown> = Record<string, unknown>>(errors?: ErrorBag<T>) => {
4
- getError: (error: ErrorKey<T>) => Partial<Record<"general" | "server" | Extract<keyof T, string>, string>>[Extract<keyof T, string>] | undefined;
4
+ getError: (error: ErrorKey<T>) => Partial<Record<"server" | "general" | Extract<keyof T, string>, string>>[Extract<keyof T, string>] | undefined;
5
5
  hasError: (error: ErrorKey<T>) => boolean;
6
6
  };
7
7
  export {};
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { p as e } from "./sidebar-Db6gkh3U.js";
2
+ import { p as e } from "./sidebar-f9gRWXIR.js";
3
3
  import { n as t } from "./layout.types-Cn7aUzJp.js";
4
4
  import { useCallback as n, useEffect as r, useMemo as i } from "react";
5
5
  import { jsx as a } from "react/jsx-runtime";
@@ -21,24 +21,36 @@ function c(e, t) {
21
21
  let n = s(e);
22
22
  return n === t || n.startsWith(t + "/") || n.startsWith(t + "?");
23
23
  }
24
- function l(e) {
24
+ function l(e, t) {
25
+ let n, r = -1, i = (t) => {
26
+ for (let a of t) {
27
+ if (a.href) {
28
+ let t = s(a.href);
29
+ t.length > r && c(e, t) && (n = a.href, r = t.length);
30
+ }
31
+ a.children?.length && i(a.children);
32
+ }
33
+ };
34
+ return i(t), n;
35
+ }
36
+ function u(e) {
25
37
  return e.label;
26
38
  }
27
- function u(e, t) {
28
- let n = l(e);
29
- return e.handle ?? e.href ?? (typeof n == "string" || typeof n == "number" ? n : `nav-${t ?? 0}`);
39
+ function d(e, t) {
40
+ let n = u(e);
41
+ return e.id ?? e.handle ?? e.href ?? (typeof n == "string" || typeof n == "number" ? n : `nav-${t ?? 0}`);
30
42
  }
31
- function d({ value: t, size: n = "md" }) {
43
+ function f({ value: t, size: n = "md" }) {
32
44
  return /* @__PURE__ */ a(e, {
33
45
  inline: !0,
34
46
  size: n,
35
47
  children: t
36
48
  });
37
49
  }
38
- function f(e, t, n) {
39
- return e && n && n[e] != null ? n[e] : t;
50
+ function p(e, t, n, r) {
51
+ return r && n?.[r] != null ? n[r] : e && n && n[e] != null ? n[e] : t;
40
52
  }
41
- function p({ icon: e, iconMap: t = {}, size: n = 20, className: r = "size-icon", ...i }) {
53
+ function m({ icon: e, iconMap: t = {}, size: n = 20, className: r = "size-icon", ...i }) {
42
54
  if (!e) return null;
43
55
  if (typeof e == "string") {
44
56
  let n = t[e];
@@ -51,7 +63,7 @@ function p({ icon: e, iconMap: t = {}, size: n = 20, className: r = "size-icon",
51
63
  ...i
52
64
  }) : null;
53
65
  }
54
- function m(e, t, n, r, i) {
66
+ function h(e, t, n, r, i) {
55
67
  return e({
56
68
  href: t.href,
57
69
  children: n,
@@ -63,12 +75,12 @@ function m(e, t, n, r, i) {
63
75
  }
64
76
  //#endregion
65
77
  //#region src/components/layout/hooks/use-active-path.ts
66
- function h(e = "/") {
78
+ function g(e = "/") {
67
79
  return n((t) => !!t && c(e, s(t)), [e]);
68
80
  }
69
81
  //#endregion
70
82
  //#region src/components/layout/hooks/use-command-shortcut.ts
71
- function g({ key: e, enabled: t = !0, onTrigger: n, preventDefault: i = !0 }) {
83
+ function _({ key: e, enabled: t = !0, onTrigger: n, preventDefault: i = !0 }) {
72
84
  r(() => {
73
85
  if (!t || !n || typeof document > "u") return;
74
86
  let r = (t) => {
@@ -83,6 +95,6 @@ function g({ key: e, enabled: t = !0, onTrigger: n, preventDefault: i = !0 }) {
83
95
  ]);
84
96
  }
85
97
  //#endregion
86
- export { u as a, m as c, o as d, d as i, f as l, h as n, l as o, p as r, c as s, g as t, s as u };
98
+ export { l as a, c, s as d, o as f, f as i, h as l, g as n, d as o, m as r, u as s, _ as t, p as u };
87
99
 
88
- //# sourceMappingURL=hooks-ClH9thn4.js.map
100
+ //# sourceMappingURL=hooks-DB6CJ4MR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-DB6CJ4MR.js","names":["IconComponent","SidebarMenuBadge","resolveLayoutLinkRenderer","useLayoutLinkRenderer","useMemo","renderLink","toPath","href","isPathMatch","currentPath","currentUrl","path","getCurrentNavigationHref","currentHref","currentPathLength","visit","item","nodes","items","getNavLabel","getNavKey","label","fallbackIndex","NavBadge","value","resolveNavBadge","id","liveBadges","handle","itemBadge","DynamicIcon","props","icon","IconComponent","iconMap","size","renderSidebarLink","useActivePath","useCallback","useCommandShortcut","enabled","onTrigger","handler","event","key","preventDefault"],"sources":["../src/components/layout/hooks/use-layout-link.tsx","../src/components/layout/sidebar/sidebar.utils.tsx","../src/components/layout/hooks/use-active-path.ts","../src/components/layout/hooks/use-command-shortcut.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport {\n\tresolveLayoutLinkRenderer,\n\ttype LayoutLinkRenderer,\n\ttype LayoutNavigationAdapter,\n} from '../layout.types';\n\nexport function useLayoutLinkRenderer({\n\trenderLink,\n}: LayoutNavigationAdapter = {}): LayoutLinkRenderer {\n\treturn useMemo(\n\t\t() => resolveLayoutLinkRenderer({ renderLink }),\n\t\t[renderLink],\n\t);\n}\n"," \n/** Sidebar utilities — pure path helpers, labels, icon rendering, badge pill. */\nimport * as React from 'react';\n\nimport { SidebarMenuBadge } from '../../base/sidebar';\n\nimport type { LayoutIconSource, LayoutLinkRenderer } from '../layout.types';\nimport type { SidebarNavItem } from './sidebar.types';\nimport type { ComponentScale } from '../../../lib/component-vocabulary';\n\nexport function toPath(href: string): string {\n\tif (href.startsWith('#/')) {\n\t\treturn href.slice(1).split('?')[0]?.split('#')[0] || '/';\n\t}\n\n\ttry {\n\t\treturn new URL(href, 'http://local.invalid').pathname;\n\t} catch {\n\t\treturn href;\n\t}\n}\n\nexport function isPathMatch(currentUrl: string, path: string): boolean {\n\tconst currentPath = toPath(currentUrl);\n\treturn currentPath === path || currentPath.startsWith(path + '/') || currentPath.startsWith(path + '?');\n}\n\n/** Choose one destination across the whole navigation tree. Prefix matches\n * still open ancestors, but a shorter sibling route is not also current. */\ninterface NavigationPathItem {\n\thref?: string;\n\tchildren?: readonly NavigationPathItem[];\n}\n\nexport function getCurrentNavigationHref(\n\tcurrentUrl: string,\n\titems: readonly NavigationPathItem[],\n): string | undefined {\n\tlet currentHref: string | undefined;\n\tlet currentPathLength = -1;\n\tconst visit = (nodes: readonly NavigationPathItem[]) => {\n\t\tfor (const item of nodes) {\n\t\t\tif (item.href) {\n\t\t\t\tconst path = toPath(item.href);\n\t\t\t\tif (path.length > currentPathLength && isPathMatch(currentUrl, path)) {\n\t\t\t\t\tcurrentHref = item.href;\n\t\t\t\t\tcurrentPathLength = path.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (item.children?.length) visit(item.children);\n\t\t}\n\t};\n\tvisit(items);\n\treturn currentHref;\n}\n\nexport function getNavLabel(item: Pick<SidebarNavItem, 'label'>): React.ReactNode {\n\treturn item.label;\n}\n\nexport function getNavKey(item: SidebarNavItem, fallbackIndex?: number): React.Key {\n\tconst label = getNavLabel(item);\n\treturn item.id ?? item.handle ?? item.href ?? (typeof label === 'string' || typeof label === 'number' ? label : `nav-${fallbackIndex ?? 0}`);\n}\n\nexport function NavBadge({\n\tvalue,\n\tsize = 'md',\n}: {\n\t/** Current value. Controlled. */\n\tvalue: string | number;\n\t/** Size preset. */\n\tsize?: ComponentScale;\n}) {\n\treturn (\n\t\t<SidebarMenuBadge inline size={size}>\n\t\t\t{value}\n\t\t</SidebarMenuBadge>\n\t);\n}\n\nexport function resolveNavBadge(\n\thandle: string | undefined,\n\titemBadge: string | number | undefined,\n\tliveBadges: Record<string, string | number> | undefined,\n\tid?: string,\n): string | number | undefined {\n\tif (id && liveBadges?.[id] != null) return liveBadges[id];\n\tif (handle && liveBadges && liveBadges[handle] != null) {\n\t\treturn liveBadges[handle];\n\t}\n\treturn itemBadge;\n}\n\nexport interface DynamicIconProps extends React.SVGProps<SVGSVGElement> {\n\t/** Leading glyph. */\n\ticon: LayoutIconSource;\n\t/** Resolves an item's icon name to a component, keeping navigation data serialisable. */\n\ticonMap?: Record<string, React.ComponentType<{ className?: string }>>;\n\t/** Size preset. */\n\tsize?: number;\n\tclassName?: string;\n}\n\nexport function DynamicIcon({\n\ticon,\n\ticonMap = {},\n\tsize = 20,\n\tclassName = 'size-icon',\n\t...props\n}: DynamicIconProps) {\n\tif (!icon) return null;\n\n\tif (typeof icon === 'string') {\n\t\tconst IconComponent = iconMap[icon];\n\t\treturn IconComponent ? <IconComponent className={className} /> : null;\n\t}\n\n\tif (\n\t\ttypeof icon === 'function'\n\t\t|| (typeof icon === 'object' && icon !== null && '$$typeof' in icon)\n\t) {\n\t\tconst IconComponent = icon as React.ElementType<React.SVGProps<SVGSVGElement>>;\n\t\treturn <IconComponent className={className} width={size} height={size} {...props} />;\n\t}\n\n\treturn null;\n}\n\nexport function renderSidebarLink(\n\trenderLink: LayoutLinkRenderer,\n\titem: SidebarNavItem,\n\tchildren: React.ReactNode,\n\tclassName?: string,\n\tactive?: boolean,\n) {\n\treturn renderLink({\n\t\thref: item.href,\n\t\tchildren,\n\t\tclassName,\n\t\tactive,\n\t\tdisabled: item.disabled || !item.href,\n\t\texternal: item.external,\n\t});\n}\n","import { useCallback } from 'react';\n\nimport { isPathMatch, toPath } from '../sidebar/sidebar.utils';\n\nexport function useActivePath(currentUrl = '/') {\n\treturn useCallback(\n\t\t(href?: string) => !!href && isPathMatch(currentUrl, toPath(href)),\n\t\t[currentUrl],\n\t);\n}\n","import { useEffect } from 'react';\n\nexport interface UseCommandShortcutOptions {\n\tkey: string;\n\tenabled?: boolean;\n\tonTrigger?: () => void;\n\tpreventDefault?: boolean;\n}\n\nexport function useCommandShortcut({\n\tkey,\n\tenabled = true,\n\tonTrigger,\n\tpreventDefault = true,\n}: UseCommandShortcutOptions) {\n\tuseEffect(() => {\n\t\tif (!enabled || !onTrigger || typeof document === 'undefined') return;\n\n\t\tconst handler = (event: KeyboardEvent) => {\n\t\t\tif (!(event.metaKey || event.ctrlKey)) return;\n\t\t\tif (event.key.toLowerCase() !== key.toLowerCase()) return;\n\t\t\tif (preventDefault) event.preventDefault();\n\t\t\tonTrigger();\n\t\t};\n\n\t\tdocument.addEventListener('keydown', handler);\n\t\treturn () => document.removeEventListener('keydown', handler);\n\t}, [enabled, key, onTrigger, preventDefault]);\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { s as e, v as t } from "./ui-provider-C_U0Xma4.js";
3
- import { t as n } from "./utils-BRhFDwuU.js";
2
+ import { S as e, d as t } from "./ui-provider-C-74NVLc.js";
3
+ import { t as n } from "./utils-B6kKb8jB.js";
4
4
  import { n as r } from "./icon-size-B6PVwjbC.js";
5
5
  import { i } from "./tone-recipes-BPsRAvhu.js";
6
6
  import { createElement as a } from "react";
@@ -37,7 +37,7 @@ var s = {
37
37
  info: "bg-info text-info-foreground"
38
38
  };
39
39
  function u({ icon: i, children: u, size: d, shape: f = "circle", tone: p = "primary", solid: m = !1, bordered: h = !1, className: g, role: _, "aria-hidden": v, "aria-label": y, "aria-labelledby": b, ...x }) {
40
- let { defaultScale: S } = e(), C = t(d, S), w = s[C], T = m ? l[p] : c[p], E = !!(y || b);
40
+ let { defaultScale: S } = t(), C = e(d, S), w = s[C], T = m ? l[p] : c[p], E = !!(y || b);
41
41
  return /* @__PURE__ */ o("span", {
42
42
  role: _ ?? (E ? "img" : void 0),
43
43
  "aria-hidden": v ?? (!E || void 0),
@@ -52,4 +52,4 @@ u.displayName = "IconBadge";
52
52
  //#endregion
53
53
  export { u as t };
54
54
 
55
- //# sourceMappingURL=icon-badge-DYKIwvOV.js.map
55
+ //# sourceMappingURL=icon-badge-DZF-YjQp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-badge-DYKIwvOV.js","names":["useDensityConfig","resolveComponentScale","cn","ICON_DESCENDANT_SIZE_CLASSNAMES","SIZE_MAP","TONE_TINT","toneRecipes","TONE_SOLID","IconBadge","Icon","sizeProp","ariaHidden","ariaLabel","ariaLabelledBy","props","size","defaultScale","sizes","tones","solid","tone","hasAccessibleName","role","shape","bordered","className","createElement","children"],"sources":["../src/components/base/display/icon-badge/icon-badge.tsx"],"sourcesContent":["/**\n * IconBadge — circular or square icon container with a tinted background.\n * Workhorse for \"row leading icon\" and \"feature illustration\" patterns —\n * coupon checks, conversation initials, search-result tones, AI-bot avatars.\n *\n * Tones reuse the shadcn semantic tokens, with the foreground colour picked\n * to read against its tone's shared tint (`toneRecipes`, contrast-tested).\n * For a fully-saturated mark (primary fill, inverse foreground), use\n * `tone=\"primary\"` and pass `solid`.\n *\n * Warning takes `--warning-accent` rather than `--warning-foreground`: the\n * latter is the colour for text on a SOLID warning fill and stays near-black\n * in both themes, so on a 20% tint it vanished in dark (1.87 contrast). Amber\n * is intrinsically light, so — as with `--primary-accent` — the tone needs a\n * separate foreground token that darkens in light and brightens in dark.\n */\nimport type { ComponentProps, ElementType, ReactNode } from 'react';\nimport { createElement } from 'react';\n\nimport { useDensityConfig, type ComponentScale } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\nimport { cn } from '../../../../lib/utils';\nimport type { SemanticTone } from '../../../../lib/component-vocabulary';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../icon-size';\n\nexport type IconBadgeSize = ComponentScale;\nexport type IconBadgeShape = 'circle' | 'square';\nexport type IconBadgeTone = SemanticTone;\n\nexport interface IconBadgeProps extends Omit<ComponentProps<'span'>, 'children'> {\n\t/** Leading glyph. */\n\ticon?: ElementType;\n\tchildren?: ReactNode;\n\t/** Size preset. */\n\tsize?: IconBadgeSize;\n\tshape?: IconBadgeShape;\n\t/** Semantic tone driving the entry's colour. */\n\ttone?: IconBadgeTone;\n\t/** When true, fills the badge with the tone color and inverts the icon. */\n\tsolid?: boolean;\n\t/**\n\t * When true, renders a hairline `border-border/60` around the badge.\n\t * Useful for compact \"secret list\" / \"key list\" rows where the icon\n\t * needs a subtle outline against the surrounding card surface\n\t * (see `blocks/admin/api-key-list`).\n\t */\n\tbordered?: boolean;\n}\n\nconst SIZE_MAP: Record<IconBadgeSize, { box: string; icon: string }> = {\n\tsm: { box: 'size-avatar-sm', icon: 'size-icon-sm' },\n\tmd: { box: 'size-avatar', icon: 'size-icon' },\n\tlg: { box: 'size-avatar-lg', icon: 'size-icon-lg' },\n};\n\nconst TONE_TINT: Record<IconBadgeTone, string> = {\n\tneutral: 'bg-muted text-muted-foreground',\n\tprimary: `${toneRecipes.primary.tint} ${toneRecipes.primary.ink}`,\n\tsecondary: 'bg-foreground/8 text-muted-foreground',\n\tsuccess: `${toneRecipes.success.tint} ${toneRecipes.success.ink}`,\n\twarning: `${toneRecipes.warning.tint} ${toneRecipes.warning.ink}`,\n\tdestructive: `${toneRecipes.destructive.tint} ${toneRecipes.destructive.ink}`,\n\tinfo: `${toneRecipes.info.tint} ${toneRecipes.info.ink}`,\n};\n\nconst TONE_SOLID: Record<IconBadgeTone, string> = {\n\tneutral: 'bg-foreground text-background',\n\tprimary: 'bg-primary text-primary-foreground',\n\tsecondary: 'bg-secondary text-secondary-foreground',\n\tsuccess: 'bg-success text-success-foreground',\n\twarning: 'bg-warning text-warning-foreground',\n\tdestructive: 'bg-destructive text-destructive-foreground',\n\tinfo: 'bg-info text-info-foreground',\n};\n\nexport function IconBadge({\n\ticon: Icon,\n\tchildren,\n\tsize: sizeProp,\n\tshape = 'circle',\n\ttone = 'primary',\n\tsolid = false,\n\tbordered = false,\n\tclassName,\n\trole,\n\t'aria-hidden': ariaHidden,\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledBy,\n\t...props\n}: IconBadgeProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst sizes = SIZE_MAP[size];\n\tconst tones = solid ? TONE_SOLID[tone] : TONE_TINT[tone];\n\tconst hasAccessibleName = Boolean(ariaLabel || ariaLabelledBy);\n\n\treturn (\n\t\t<span\n\t\t\trole={role ?? (hasAccessibleName ? 'img' : undefined)}\n\t\t\taria-hidden={ariaHidden ?? (hasAccessibleName ? undefined : true)}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\tclassName={cn('icon-badge--component', \n\t\t\t\t'box-border inline-flex shrink-0 items-center justify-center',\n\t\t\t\tshape === 'circle' ? 'rounded-full' : 'rounded-radius',\n\t\t\t\tsizes.box,\n\t\t\t\t// A glyph passed as children takes the size's icon role, like `icon`,\n\t\t\t\t// unless it brings its own size class.\n\t\t\t\tICON_DESCENDANT_SIZE_CLASSNAMES[size],\n\t\t\t\ttones,\n\t\t\t\tbordered && 'border border-border/60',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{Icon ? createElement(Icon, { className: sizes.icon }) : children}\n\t\t</span>\n\t);\n}\n\nIconBadge.displayName = 'IconBadge';\n"],"mappings":";;;;;;;;AAkDA,IAAMI,IAAiE;CACtE,IAAI;EAAE,KAAK;EAAkB,MAAM;CAAe;CAClD,IAAI;EAAE,KAAK;EAAe,MAAM;CAAY;CAC5C,IAAI;EAAE,KAAK;EAAkB,MAAM;CAAe;AACnD,GAEMC,IAA2C;CAChD,SAAS;CACT,SAAS,GAAGC,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,WAAW;CACX,SAAS,GAAGA,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,SAAS,GAAGA,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,aAAa,GAAGA,EAAY,YAAY,KAAK,GAAGA,EAAY,YAAY;CACxE,MAAM,GAAGA,EAAY,KAAK,KAAK,GAAGA,EAAY,KAAK;AACpD,GAEMC,IAA4C;CACjD,SAAS;CACT,SAAS;CACT,WAAW;CACX,SAAS;CACT,SAAS;CACT,aAAa;CACb,MAAM;AACP;AAEA,SAAgBC,EAAU,EACzB,MAAMC,GACN,aACA,MAAMC,GACN,WAAQ,UACR,UAAO,WACP,WAAQ,IACR,cAAW,IACX,cACA,SACA,eAAeC,GACf,cAAcC,GACd,mBAAmBC,GACnB,GAAGC,KACe;CAClB,IAAM,EAAE,oBAAiBd,EAAiB,GACpCe,IAAOd,EAAsBS,GAAUM,CAAY,GACnDC,IAAQb,EAASW,IACjBG,IAAQC,IAAQZ,EAAWa,KAAQf,EAAUe,IAC7CC,IAAoB,GAAQT,KAAaC;CAE/C,OACC,kBAAC,QAAD;EACC,MAAMS,MAASD,IAAoB,QAAQ,KAAA;EAC3C,eAAaV,MAAe,MAAoB,KAAA;EAChD,cAAYC;EACZ,mBAAiBC;EACjB,WAAWX,EAAG,yBACb,+DACAqB,MAAU,WAAW,iBAAiB,kBACtCN,EAAM,KAGNd,EAAgCY,IAChCG,GACAM,KAAY,2BACZC,CACD;EACA,GAAIX;EAEH,UAAAL,IAAOiB,EAAcjB,GAAM,EAAE,WAAWQ,EAAM,KAAK,CAAC,IAAIU;CACpD,CAAA;AAER;AAEA,EAAU,cAAc"}
1
+ {"version":3,"file":"icon-badge-DZF-YjQp.js","names":["resolveComponentScale","useDensityConfig","cn","ICON_DESCENDANT_SIZE_CLASSNAMES","SIZE_MAP","TONE_TINT","toneRecipes","TONE_SOLID","IconBadge","Icon","sizeProp","ariaHidden","ariaLabel","ariaLabelledBy","props","size","defaultScale","sizes","tones","solid","tone","hasAccessibleName","role","shape","bordered","className","createElement","children"],"sources":["../src/components/base/display/icon-badge/icon-badge.tsx"],"sourcesContent":["/**\n * IconBadge — circular or square icon container with a tinted background.\n * Workhorse for \"row leading icon\" and \"feature illustration\" patterns —\n * coupon checks, conversation initials, search-result tones, AI-bot avatars.\n *\n * Tones reuse the shadcn semantic tokens, with the foreground colour picked\n * to read against its tone's shared tint (`toneRecipes`, contrast-tested).\n * For a fully-saturated mark (primary fill, inverse foreground), use\n * `tone=\"primary\"` and pass `solid`.\n *\n * Warning takes `--warning-accent` rather than `--warning-foreground`: the\n * latter is the colour for text on a SOLID warning fill and stays near-black\n * in both themes, so on a 20% tint it vanished in dark (1.87 contrast). Amber\n * is intrinsically light, so — as with `--primary-accent` — the tone needs a\n * separate foreground token that darkens in light and brightens in dark.\n */\nimport type { ComponentProps, ElementType, ReactNode } from 'react';\nimport { createElement } from 'react';\n\nimport { useDensityConfig, type ComponentScale } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\nimport { cn } from '../../../../lib/utils';\nimport type { SemanticTone } from '../../../../lib/component-vocabulary';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../icon-size';\n\nexport type IconBadgeSize = ComponentScale;\nexport type IconBadgeShape = 'circle' | 'square';\nexport type IconBadgeTone = SemanticTone;\n\nexport interface IconBadgeProps extends Omit<ComponentProps<'span'>, 'children'> {\n\t/** Leading glyph. */\n\ticon?: ElementType;\n\tchildren?: ReactNode;\n\t/** Size preset. */\n\tsize?: IconBadgeSize;\n\tshape?: IconBadgeShape;\n\t/** Semantic tone driving the entry's colour. */\n\ttone?: IconBadgeTone;\n\t/** When true, fills the badge with the tone color and inverts the icon. */\n\tsolid?: boolean;\n\t/**\n\t * When true, renders a hairline `border-border/60` around the badge.\n\t * Useful for compact \"secret list\" / \"key list\" rows where the icon\n\t * needs a subtle outline against the surrounding card surface\n\t * (see `blocks/admin/api-key-list`).\n\t */\n\tbordered?: boolean;\n}\n\nconst SIZE_MAP: Record<IconBadgeSize, { box: string; icon: string }> = {\n\tsm: { box: 'size-avatar-sm', icon: 'size-icon-sm' },\n\tmd: { box: 'size-avatar', icon: 'size-icon' },\n\tlg: { box: 'size-avatar-lg', icon: 'size-icon-lg' },\n};\n\nconst TONE_TINT: Record<IconBadgeTone, string> = {\n\tneutral: 'bg-muted text-muted-foreground',\n\tprimary: `${toneRecipes.primary.tint} ${toneRecipes.primary.ink}`,\n\tsecondary: 'bg-foreground/8 text-muted-foreground',\n\tsuccess: `${toneRecipes.success.tint} ${toneRecipes.success.ink}`,\n\twarning: `${toneRecipes.warning.tint} ${toneRecipes.warning.ink}`,\n\tdestructive: `${toneRecipes.destructive.tint} ${toneRecipes.destructive.ink}`,\n\tinfo: `${toneRecipes.info.tint} ${toneRecipes.info.ink}`,\n};\n\nconst TONE_SOLID: Record<IconBadgeTone, string> = {\n\tneutral: 'bg-foreground text-background',\n\tprimary: 'bg-primary text-primary-foreground',\n\tsecondary: 'bg-secondary text-secondary-foreground',\n\tsuccess: 'bg-success text-success-foreground',\n\twarning: 'bg-warning text-warning-foreground',\n\tdestructive: 'bg-destructive text-destructive-foreground',\n\tinfo: 'bg-info text-info-foreground',\n};\n\nexport function IconBadge({\n\ticon: Icon,\n\tchildren,\n\tsize: sizeProp,\n\tshape = 'circle',\n\ttone = 'primary',\n\tsolid = false,\n\tbordered = false,\n\tclassName,\n\trole,\n\t'aria-hidden': ariaHidden,\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledBy,\n\t...props\n}: IconBadgeProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst sizes = SIZE_MAP[size];\n\tconst tones = solid ? TONE_SOLID[tone] : TONE_TINT[tone];\n\tconst hasAccessibleName = Boolean(ariaLabel || ariaLabelledBy);\n\n\treturn (\n\t\t<span\n\t\t\trole={role ?? (hasAccessibleName ? 'img' : undefined)}\n\t\t\taria-hidden={ariaHidden ?? (hasAccessibleName ? undefined : true)}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\tclassName={cn('icon-badge--component', \n\t\t\t\t'box-border inline-flex shrink-0 items-center justify-center',\n\t\t\t\tshape === 'circle' ? 'rounded-full' : 'rounded-radius',\n\t\t\t\tsizes.box,\n\t\t\t\t// A glyph passed as children takes the size's icon role, like `icon`,\n\t\t\t\t// unless it brings its own size class.\n\t\t\t\tICON_DESCENDANT_SIZE_CLASSNAMES[size],\n\t\t\t\ttones,\n\t\t\t\tbordered && 'border border-border/60',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{Icon ? createElement(Icon, { className: sizes.icon }) : children}\n\t\t</span>\n\t);\n}\n\nIconBadge.displayName = 'IconBadge';\n"],"mappings":";;;;;;;;AAkDA,IAAMI,IAAiE;CACtE,IAAI;EAAE,KAAK;EAAkB,MAAM;CAAe;CAClD,IAAI;EAAE,KAAK;EAAe,MAAM;CAAY;CAC5C,IAAI;EAAE,KAAK;EAAkB,MAAM;CAAe;AACnD,GAEMC,IAA2C;CAChD,SAAS;CACT,SAAS,GAAGC,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,WAAW;CACX,SAAS,GAAGA,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,SAAS,GAAGA,EAAY,QAAQ,KAAK,GAAGA,EAAY,QAAQ;CAC5D,aAAa,GAAGA,EAAY,YAAY,KAAK,GAAGA,EAAY,YAAY;CACxE,MAAM,GAAGA,EAAY,KAAK,KAAK,GAAGA,EAAY,KAAK;AACpD,GAEMC,IAA4C;CACjD,SAAS;CACT,SAAS;CACT,WAAW;CACX,SAAS;CACT,SAAS;CACT,aAAa;CACb,MAAM;AACP;AAEA,SAAgBC,EAAU,EACzB,MAAMC,GACN,aACA,MAAMC,GACN,WAAQ,UACR,UAAO,WACP,WAAQ,IACR,cAAW,IACX,cACA,SACA,eAAeC,GACf,cAAcC,GACd,mBAAmBC,GACnB,GAAGC,KACe;CAClB,IAAM,EAAE,oBAAiBb,EAAiB,GACpCc,IAAOf,EAAsBU,GAAUM,CAAY,GACnDC,IAAQb,EAASW,IACjBG,IAAQC,IAAQZ,EAAWa,KAAQf,EAAUe,IAC7CC,IAAoB,GAAQT,KAAaC;CAE/C,OACC,kBAAC,QAAD;EACC,MAAMS,MAASD,IAAoB,QAAQ,KAAA;EAC3C,eAAaV,MAAe,MAAoB,KAAA;EAChD,cAAYC;EACZ,mBAAiBC;EACjB,WAAWX,EAAG,yBACb,+DACAqB,MAAU,WAAW,iBAAiB,kBACtCN,EAAM,KAGNd,EAAgCY,IAChCG,GACAM,KAAY,2BACZC,CACD;EACA,GAAIX;EAEH,UAAAL,IAAOiB,EAAcjB,GAAM,EAAE,WAAWQ,EAAM,KAAK,CAAC,IAAIU;CACpD,CAAA;AAER;AAEA,EAAU,cAAc"}
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
- import { _ as e, a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h, v as g, y as _ } from "./ui-provider-C_U0Xma4.js";
2
- import { CARD_SURFACES as v, COMPONENT_SCALES as y, DISCLOSURE_SURFACES as b, SEMANTIC_TONES as x } from "./component-vocabulary.js";
3
- import { t as S } from "./theme-scope-BJ6eE2xt.js";
1
+ import { C as e, S as t, _ as n, c as r, d as i, f as a, g as o, h as s, l as c, m as l, n as u, o as d, p as f, s as p, t as m, u as h, v as g, x as _, y as v } from "./ui-provider-C-74NVLc.js";
2
+ import { CARD_SURFACES as y, COMPONENT_SCALES as b, DISCLOSURE_SURFACES as x, SEMANTIC_TONES as S } from "./component-vocabulary.js";
4
3
  import { ACTION_BUTTON_STYLES as C } from "./action-presentation.js";
5
4
  import { interpolateString as w, mergeStrings as T, useStrings as E } from "./lib/strings.js";
6
- import { t as D } from "./utils-BRhFDwuU.js";
7
- export { C as ACTION_BUTTON_STYLES, v as CARD_SURFACES, y as COMPONENT_SCALES, _ as DEFAULT_UI_CONFIG, b as DISCLOSURE_SURFACES, m as DirectionProvider, x as SEMANTIC_TONES, S as ThemeScope, a as UIProvider, D as cn, w as interpolateString, e as isComponentScale, T as mergeStrings, g as resolveComponentScale, l as useBadgeConfig, f as useButtonConfig, o as useCardConfig, t as useCommentsConfig, u as useDatesConfig, p as useDensityConfig, n as useFormattingConfig, s as useItemConfig, h as useMoneyConfig, r as useOverlayConfig, i as useSpinnerConfig, E as useStrings, d as useToastConfig, c as useTypographyConfig };
5
+ import { t as D } from "./utils-B6kKb8jB.js";
6
+ export { C as ACTION_BUTTON_STYLES, y as CARD_SURFACES, b as COMPONENT_SCALES, e as DEFAULT_UI_CONFIG, x as DISCLOSURE_SURFACES, m as DirectionProvider, S as SEMANTIC_TONES, u as ThemeScope, v as UIProvider, D as cn, w as interpolateString, _ as isComponentScale, T as mergeStrings, t as resolveComponentScale, d as useBadgeConfig, p as useButtonConfig, r as useCardConfig, c as useCommentsConfig, h as useDatesConfig, i as useDensityConfig, a as useFormattingConfig, f as useItemConfig, l as useMoneyConfig, s as useOverlayConfig, o as useSpinnerConfig, E as useStrings, n as useToastConfig, g as useTypographyConfig };
@@ -0,0 +1,289 @@
1
+ "use client";
2
+ import { d as e } from "./ui-provider-C-74NVLc.js";
3
+ import { useStrings as t } from "./lib/strings.js";
4
+ import { t as n } from "./utils-B6kKb8jB.js";
5
+ import { t as r } from "./affordance-geometry.generated-P-aVJisu.js";
6
+ import { c as i } from "./typography-BQnine1k.js";
7
+ import { n as a, t as o } from "./field-affordance-recipes-DWcNcOjh.js";
8
+ import { c as s, f as c, i as l, n as u, r as d, s as f, t as p, y as m } from "./form-sizing-Bs2qFUeE.js";
9
+ import * as h from "react";
10
+ import { createContext as g, forwardRef as _, memo as v, useCallback as y, useId as b, useLayoutEffect as x, useMemo as ee, useRef as S, useState as C } from "react";
11
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
12
+ import { Loader2Icon as E } from "lucide-react";
13
+ //#region src/components/base/text-inputs/hooks/use-form-field-state.ts
14
+ function D({ controlledValue: e, hasControlledValue: t, nativeRef: n, defaultValue: r, maxLength: i, showCharacterCount: a, providedId: o, idPrefix: s = "field", hasOnChange: c }) {
15
+ let l = b(), u = o || `${s}${l}`, [d, f] = C(r || ""), p = t ?? e !== void 0;
16
+ x(() => {
17
+ let e = n?.current;
18
+ if (p || !e) return;
19
+ let t = () => f(e.value);
20
+ t();
21
+ let r = Object.getOwnPropertyDescriptor(e, "value"), i = r ?? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e), "value");
22
+ if (!i?.get || !i.set || r?.configurable === !1) return;
23
+ let { get: a, set: o } = i, s = function(e) {
24
+ o.call(this, e), t();
25
+ };
26
+ Object.defineProperty(e, "value", {
27
+ configurable: !0,
28
+ enumerable: i.enumerable,
29
+ get: a,
30
+ set: s
31
+ });
32
+ let c = e.form, l = () => queueMicrotask(t);
33
+ return c?.addEventListener("reset", l), () => {
34
+ c?.removeEventListener("reset", l), Object.getOwnPropertyDescriptor(e, "value")?.set === s && (r ? Object.defineProperty(e, "value", r) : Reflect.deleteProperty(e, "value"));
35
+ };
36
+ }, [p, n]);
37
+ let m = (p ? e : d) ?? "", h = !(!c || p || r), g = m.length, _ = i !== void 0, v = a !== !1 && !!(a || _), S = m !== "", w = y((e) => _ && e.length > i, [_, i]), T = y((e) => !w(e) && (p || f(e), !0), [p, w]), E = y(() => {
38
+ p || f("");
39
+ }, [p]);
40
+ return ee(() => ({
41
+ id: u,
42
+ value: m,
43
+ isControlled: p,
44
+ isReactHookForm: h,
45
+ characterCount: g,
46
+ hasCharacterLimit: _,
47
+ showCount: v,
48
+ hasValue: S,
49
+ updateValue: T,
50
+ clearValue: E,
51
+ wouldExceedLimit: w
52
+ }), [
53
+ u,
54
+ m,
55
+ p,
56
+ h,
57
+ g,
58
+ _,
59
+ v,
60
+ S,
61
+ T,
62
+ E,
63
+ w
64
+ ]);
65
+ }
66
+ //#endregion
67
+ //#region src/components/base/text-inputs/clear-native-field.ts
68
+ function te(e) {
69
+ let t = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e), "value")?.set;
70
+ e.type === "file" ? e.value = "" : t?.call(e, ""), e.dispatchEvent(new Event("change", { bubbles: !0 }));
71
+ }
72
+ //#endregion
73
+ //#region src/components/base/text-inputs/input-trailing-action.ts
74
+ var ne = g(null), O = _(function({ className: e, type: t = "button", ...r }, i) {
75
+ return /* @__PURE__ */ w("button", {
76
+ ref: i,
77
+ type: t,
78
+ className: n(a.target, a.focus, a.clear, e),
79
+ ...r,
80
+ children: /* @__PURE__ */ w(o, {
81
+ className: a.icon,
82
+ "aria-hidden": "true"
83
+ })
84
+ });
85
+ });
86
+ O.displayName = "FieldClearButton";
87
+ //#endregion
88
+ //#region src/components/base/text-inputs/input.tsx
89
+ var k = { clear: "Clear input" }, re = (e, t, n) => {
90
+ let r = e || "";
91
+ return t && r && (r = t + r), n && r && (r += n), r;
92
+ };
93
+ function A(o, g) {
94
+ let { className: _, type: v = "text", startIcon: b, endIcon: x, startAddon: C, endAddon: A, maxLength: j, showCharacterCount: ie, clearable: ae, onClear: oe, loading: M = !1, returnValueWithAddons: se, invalid: ce, size: le, onChange: N, onValueChange: P, value: ue, defaultValue: F, id: de, strings: fe, ...I } = o, L = S(null), R = h.useContext(ne), z = S(null), B = S(null), [V, H] = h.useState(), [U, pe] = h.useState(), me = t(k, fe), { defaultScale: he } = e(), W = m(le, he), ge = y((e) => {
95
+ typeof g == "function" ? g(e) : g && (g.current = e), L.current = e;
96
+ }, [g]), { id: _e, value: ve, isControlled: ye, characterCount: be, hasCharacterLimit: xe, showCount: G, hasValue: Se, updateValue: Ce, clearValue: K, wouldExceedLimit: we } = D({
97
+ controlledValue: ue,
98
+ hasControlledValue: "value" in o,
99
+ nativeRef: L,
100
+ defaultValue: F,
101
+ maxLength: j,
102
+ showCharacterCount: ie,
103
+ providedId: de,
104
+ idPrefix: "input",
105
+ hasOnChange: N !== void 0
106
+ }), Te = !!ae, q = M, Ee = !!x, De = !!A, J = v === "file", Y = !!ce, X = Te && Se && !G && !q, Z = q && !G, Q = Ee && !X && !G && !q, $ = De && !X && !G && !q;
107
+ h.useLayoutEffect(() => {
108
+ let e = z.current, t = B.current, n = () => {
109
+ if (e) {
110
+ let t = e.getBoundingClientRect().width;
111
+ t > 0 && H(t);
112
+ } else H(void 0);
113
+ if (t) {
114
+ let e = t.getBoundingClientRect().width;
115
+ e > 0 && pe(e);
116
+ } else pe(void 0);
117
+ };
118
+ if (n(), !e && !t) return;
119
+ let r = typeof ResizeObserver > "u" ? void 0 : new ResizeObserver(n);
120
+ return e && r?.observe(e), t && r?.observe(t), window.addEventListener("resize", n), () => {
121
+ r?.disconnect(), window.removeEventListener("resize", n);
122
+ };
123
+ }, [
124
+ W,
125
+ be,
126
+ j,
127
+ C,
128
+ A,
129
+ Q,
130
+ $,
131
+ X,
132
+ G,
133
+ Z,
134
+ R
135
+ ]);
136
+ let Oe = ee(() => {
137
+ let e = W === "sm" ? "ps-control-sm" : "ps-control", t = W === "sm" ? "pe-control-sm" : "pe-control";
138
+ return b && (e = s[W]), C && (e = p[W]), C && U !== void 0 && (e = a.measuredStartPadding[W]), Q && (t = l[W]), $ && (t = d[W]), q && (t = l[W]), X && (t = a.clearPadding[W]), G && (t = u[W]), R && (t = G ? a.pairedCountPadding[W] : X ? a.pairedClearPadding[W] : $ ? a.pairedAddonPadding[W] : Q || Z ? a.pairedIconPadding[W] : a.clearPadding[W]), V !== void 0 && (t = a.measuredPadding[W]), `${e} ${t}`;
139
+ }, [
140
+ b,
141
+ C,
142
+ Q,
143
+ $,
144
+ X,
145
+ Z,
146
+ q,
147
+ G,
148
+ R,
149
+ V,
150
+ U,
151
+ W
152
+ ]), ke = y((e) => {
153
+ let t = e.target.value;
154
+ if (!we(t) && (Ce(t), P?.(t), N)) {
155
+ if (se && t) {
156
+ let n = re(t, C, A), r = {
157
+ ...e,
158
+ target: {
159
+ ...e.target,
160
+ value: n
161
+ },
162
+ currentTarget: {
163
+ ...e.currentTarget,
164
+ value: n
165
+ }
166
+ };
167
+ N(r);
168
+ } else N(e);
169
+ }
170
+ }, [
171
+ N,
172
+ P,
173
+ se,
174
+ C,
175
+ A,
176
+ Ce,
177
+ we
178
+ ]), Ae = y(() => {
179
+ if (I.disabled || I.readOnly || M) return;
180
+ let e = L.current;
181
+ if (e?.type === "color" || e?.type === "range") {
182
+ K(), P?.("");
183
+ let t = {
184
+ value: "",
185
+ name: e.name,
186
+ id: e.id,
187
+ type: e.type
188
+ };
189
+ N?.({
190
+ target: t,
191
+ currentTarget: t
192
+ });
193
+ } else e && te(e);
194
+ oe?.(), L.current?.focus();
195
+ }, [
196
+ I.disabled,
197
+ I.readOnly,
198
+ M,
199
+ K,
200
+ N,
201
+ P,
202
+ oe
203
+ ]);
204
+ return /* @__PURE__ */ T("div", {
205
+ className: n("input--component", "relative h-fit w-full min-w-0"),
206
+ style: V === void 0 && U === void 0 ? void 0 : {
207
+ "--field-trailing-width": V === void 0 ? void 0 : `${V}px`,
208
+ "--field-leading-width": U === void 0 ? void 0 : `${U}px`
209
+ },
210
+ children: [
211
+ /* @__PURE__ */ w("input", {
212
+ ref: ge,
213
+ id: _e,
214
+ type: v,
215
+ ...!J && (ye ? { value: ve } : { defaultValue: F }),
216
+ onChange: ke,
217
+ maxLength: j,
218
+ "aria-invalid": Y || void 0,
219
+ className: n("flex w-full min-w-0", c(W), "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground", "file:box-border file:inline-flex file:h-control-file file:border file:bg-transparent file:px-control file:py-0 file:font-medium", "file:text-pxs", J && r.fileField.minHeight, J && r.fileField.blockPadding[W], r.fileField.buttonMinHeight, J ? "cursor-pointer bg-background text-foreground file:cursor-pointer file:rounded-radius file:border-input file:bg-background file:text-foreground" : "bg-transparent", J ? "read-only:bg-background" : "[&:read-only:not(:disabled)]:bg-muted", Oe, _),
220
+ ...I,
221
+ disabled: I.disabled || M
222
+ }),
223
+ !!b && /* @__PURE__ */ w("div", {
224
+ className: n("pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center", W === "sm" ? "ps-control-sm" : "ps-control", I.disabled && "opacity-50", Y ? "text-destructive" : "text-muted-foreground"),
225
+ children: /* @__PURE__ */ w(b, {
226
+ className: f[W],
227
+ "aria-hidden": "true"
228
+ })
229
+ }),
230
+ !!C && /* @__PURE__ */ w("span", {
231
+ className: n("pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center", W === "sm" ? "ps-control-sm" : "ps-control", I.disabled && "opacity-50"),
232
+ children: /* @__PURE__ */ w(i, {
233
+ ref: B,
234
+ tag: "span",
235
+ size: W === "sm" ? "pxs" : "sm",
236
+ type: Y ? "error" : "secondary",
237
+ lineHeight: "tight",
238
+ className: "input--start-addon",
239
+ children: C
240
+ })
241
+ }),
242
+ (Q || $ || G || Z || X || R) && /* @__PURE__ */ T("div", {
243
+ ref: z,
244
+ className: n("input--trailing absolute inset-y-0 flex items-center gap-space-sm whitespace-nowrap", a.clearEnd[W], I.disabled && "opacity-50"),
245
+ children: [
246
+ Q && x && /* @__PURE__ */ w(x, {
247
+ className: n("pointer-events-none", f[W], Y ? "text-destructive" : "text-muted-foreground"),
248
+ "aria-hidden": "true"
249
+ }),
250
+ $ && /* @__PURE__ */ w(i, {
251
+ tag: "span",
252
+ size: W === "sm" ? "pxs" : "sm",
253
+ type: Y ? "error" : "secondary",
254
+ lineHeight: "tight",
255
+ className: "input--end-addon pointer-events-none",
256
+ children: A
257
+ }),
258
+ G && /* @__PURE__ */ w("div", {
259
+ role: "status",
260
+ "aria-live": "polite",
261
+ className: "pointer-events-none tabular-nums",
262
+ children: /* @__PURE__ */ T(i, {
263
+ tag: "span",
264
+ size: W === "sm" ? "xxs" : "xs",
265
+ type: Y ? "error" : "secondary",
266
+ children: [be, xe ? `/${j}` : ""]
267
+ })
268
+ }),
269
+ Z && /* @__PURE__ */ w(E, {
270
+ className: n(f[W], "pointer-events-none animate-spin", Y ? "text-destructive" : "text-muted-foreground"),
271
+ "aria-hidden": "true"
272
+ }),
273
+ X && /* @__PURE__ */ w(O, {
274
+ "aria-label": me.clear,
275
+ onClick: Ae,
276
+ disabled: I.disabled || I.readOnly || M
277
+ }),
278
+ R
279
+ ]
280
+ })
281
+ ]
282
+ });
283
+ }
284
+ var j = v(h.forwardRef(A));
285
+ j.displayName = "Input";
286
+ //#endregion
287
+ export { te as a, ne as i, k as n, D as o, O as r, j as t };
288
+
289
+ //# sourceMappingURL=input-CvyDQlY7.js.map