themelia-react-ui 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. package/CHANGELOG.md +281 -1
  2. package/README.md +10 -5
  3. package/dist/{accordion-BRTcsp8J.js → accordion-CQXVcd7Q.js} +13 -13
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-CCIXb2A1.js} +7 -2
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-2PQ2fItc.js} +171 -176
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-C_fKpljx.js → app-shell-BE_j8-AT.js} +4 -4
  12. package/dist/{app-shell-C_fKpljx.js.map → app-shell-BE_j8-AT.js.map} +1 -1
  13. package/dist/{attachment-DbjUWsP0.js → attachment-q69dlt5Y.js} +9 -9
  14. package/dist/{attachment-DbjUWsP0.js.map → attachment-q69dlt5Y.js.map} +1 -1
  15. package/dist/{auth-CAQcasMV.js → auth-M3vGMgDR.js} +42 -42
  16. package/dist/{auth-CAQcasMV.js.map → auth-M3vGMgDR.js.map} +1 -1
  17. package/dist/{avatar-Bu2HhitA.js → avatar-djdaaQ_s.js} +14 -12
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-CzId1Wlm.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +2 -2
  27. package/dist/base/cards.js +2 -2
  28. package/dist/base/carousel.js +11 -11
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +244 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +2 -2
  39. package/dist/base/display.js +6 -6
  40. package/dist/base/feedback.js +3 -3
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +81 -76
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +42 -42
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +9 -9
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +4 -4
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +229 -220
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +147 -180
  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 +530 -523
  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 +1390 -1516
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +5 -5
  82. package/dist/blocks/planning.js +82 -91
  83. package/dist/blocks/planning.js.map +1 -1
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-BuYz5SDU.js → breadcrumbs-BG_FfMK4.js} +5 -5
  86. package/dist/{breadcrumbs-BuYz5SDU.js.map → breadcrumbs-BG_FfMK4.js.map} +1 -1
  87. package/dist/{button-BZDasD04.js → button-BS3KDg00.js} +185 -162
  88. package/dist/button-BS3KDg00.js.map +1 -0
  89. package/dist/{button-BZyfTvwm.js → button-R9CCoH7A.js} +2 -2
  90. package/dist/{button-BZyfTvwm.js.map → button-R9CCoH7A.js.map} +1 -1
  91. package/dist/{buttons-D_6KJvEE.js → buttons-DS0ZIwJ_.js} +11 -11
  92. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  93. package/dist/{cards-qGSErLw_.js → cards-QoJ4syG9.js} +7 -7
  94. package/dist/{cards-qGSErLw_.js.map → cards-QoJ4syG9.js.map} +1 -1
  95. package/dist/{chart-Bsc5BICK.js → chart-DwYRKKc-.js} +17 -15
  96. package/dist/chart-DwYRKKc-.js.map +1 -0
  97. package/dist/checkbox-B7ygNTYp.js +35 -0
  98. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  99. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  100. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  101. package/dist/{code-block-DzHKRybS.js → code-block-CD0B7M93.js} +19 -19
  102. package/dist/{code-block-DzHKRybS.js.map → code-block-CD0B7M93.js.map} +1 -1
  103. package/dist/{collapsible-ClvC7Bj3.js → collapsible-oMUGM4tr.js} +3 -3
  104. package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  105. package/dist/{collection-content-D6S8cv_n.js → collection-content-Ys-OZOkY.js} +3 -3
  106. package/dist/{collection-content-D6S8cv_n.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  107. package/dist/{combobox-BFnbJJp3.js → combobox-6dvVny2q.js} +96 -97
  108. package/dist/combobox-6dvVny2q.js.map +1 -0
  109. package/dist/{combobox-hozNwUcc.js → combobox-CB7039j7.js} +326 -308
  110. package/dist/combobox-CB7039j7.js.map +1 -0
  111. package/dist/{command-BnmSchli.js → command-kPMPjIxJ.js} +34 -30
  112. package/dist/command-kPMPjIxJ.js.map +1 -0
  113. package/dist/{comments-u5L0OGip.js → comments-You0Bzbr.js} +349 -348
  114. package/dist/comments-You0Bzbr.js.map +1 -0
  115. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  116. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  117. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  118. package/dist/components/base/badge/badge.d.ts +1 -1
  119. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  120. package/dist/components/base/buttons/base-button.d.ts +7 -0
  121. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  122. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  123. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  124. package/dist/components/base/buttons/text-button.d.ts +2 -2
  125. package/dist/components/base/carousel/carousel.d.ts +3 -1
  126. package/dist/components/base/chart/chart.d.ts +7 -7
  127. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  128. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  129. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  130. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  131. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  132. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  133. package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
  134. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  135. package/dist/components/base/display/content-block.d.ts +4 -2
  136. package/dist/components/base/display/date-block.d.ts +1 -1
  137. package/dist/components/base/display/dialog.d.ts +12 -5
  138. package/dist/components/base/display/surface-title.d.ts +6 -1
  139. package/dist/components/base/feedback/alert.d.ts +1 -1
  140. package/dist/components/base/feedback/state-display.d.ts +5 -4
  141. package/dist/components/base/forms/form-sizing.d.ts +32 -0
  142. package/dist/components/base/forms/workflow.d.ts +2 -0
  143. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  144. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  145. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  146. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  147. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  148. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  149. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  150. package/dist/components/base/sheet/index.d.ts +29 -1
  151. package/dist/components/base/sheet/sheet.d.ts +14 -5
  152. package/dist/components/base/spinner/spinner.d.ts +3 -2
  153. package/dist/components/base/structure/structure.types.d.ts +1 -1
  154. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  155. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  156. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  157. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  158. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  159. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  160. package/dist/components/blocks/analytics/index.d.ts +1 -1
  161. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  162. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  163. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  164. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  165. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  166. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  167. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  168. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  169. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  170. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  171. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  172. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  173. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  174. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  175. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  176. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  177. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  178. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  179. package/dist/components/features/overlays/drawer.d.ts +1 -1
  180. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  181. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  182. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  183. package/dist/components/features/overlays/overlays.types.d.ts +42 -19
  184. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  185. package/dist/components/features/products/partials/index.d.ts +1 -1
  186. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  187. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  188. package/dist/components/features/products/products.types.d.ts +2 -1
  189. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  190. package/dist/components/layout/page/index.d.ts +1 -1
  191. package/dist/components/layout/page/page.types.d.ts +53 -3
  192. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  193. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  194. package/dist/components/primitives/date.d.ts +16 -3
  195. package/dist/components/primitives/dimensions.d.ts +6 -0
  196. package/dist/components/primitives/duration.d.ts +6 -0
  197. package/dist/components/primitives/file-size.d.ts +6 -0
  198. package/dist/components/primitives/index.d.ts +1 -1
  199. package/dist/components/primitives/initials.d.ts +11 -2
  200. package/dist/components/primitives/link.d.ts +7 -0
  201. package/dist/components/primitives/money.d.ts +29 -7
  202. package/dist/components/primitives/number.d.ts +17 -0
  203. package/dist/components/primitives/value-typography.d.ts +54 -0
  204. package/dist/components/primitives/value.d.ts +31 -6
  205. package/dist/components/typography/heading.d.ts +9 -1
  206. package/dist/components/typography/label.d.ts +3 -0
  207. package/dist/components/typography/running-text.d.ts +12 -0
  208. package/dist/components/typography/text-link.d.ts +23 -1
  209. package/dist/components/typography/text.d.ts +12 -0
  210. package/dist/components/typography/text.styles.d.ts +35 -13
  211. package/dist/components/ui/button.d.ts +1 -1
  212. package/dist/components/ui/checkbox.d.ts +5 -0
  213. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  214. package/dist/components/ui/select.d.ts +3 -1
  215. package/dist/components/ui/switch.d.ts +5 -0
  216. package/dist/{containers-DqB-bSYE.js → containers-D_L4mTVb.js} +3 -3
  217. package/dist/{containers-DqB-bSYE.js.map → containers-D_L4mTVb.js.map} +1 -1
  218. package/dist/{copyable-BTSByfmq.js → copyable-DDjTeW_j.js} +4 -4
  219. package/dist/{copyable-BTSByfmq.js.map → copyable-DDjTeW_j.js.map} +1 -1
  220. package/dist/{data-display-Bihs9Ven.js → data-display-3xWQUnMA.js} +471 -478
  221. package/dist/data-display-3xWQUnMA.js.map +1 -0
  222. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  223. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  224. package/dist/date-pickers-CnFCb0n2.js +174 -0
  225. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  226. package/dist/date-uf3z37Nm.js +144 -0
  227. package/dist/date-uf3z37Nm.js.map +1 -0
  228. package/dist/{display-CS6Hbk18.js → display-DrdvPwF0.js} +25 -25
  229. package/dist/display-DrdvPwF0.js.map +1 -0
  230. package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-CURh59jb.js} +22 -15
  231. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  232. package/dist/features/activities.js +38 -35
  233. package/dist/features/activities.js.map +1 -1
  234. package/dist/features/ai-chat.js +36 -35
  235. package/dist/features/ai-chat.js.map +1 -1
  236. package/dist/features/async-preview.js +8 -8
  237. package/dist/features/combobox.js +1 -1
  238. package/dist/features/comments.js +1 -1
  239. package/dist/features/data-view.js +10 -10
  240. package/dist/features/email-composer.js +325 -326
  241. package/dist/features/email-composer.js.map +1 -1
  242. package/dist/features/event-calendar.js +190 -200
  243. package/dist/features/event-calendar.js.map +1 -1
  244. package/dist/features/filters.js +1 -1
  245. package/dist/features/global-search.js +77 -77
  246. package/dist/features/global-search.js.map +1 -1
  247. package/dist/features/kanban.js +4 -4
  248. package/dist/features/map.js +8 -8
  249. package/dist/features/media-library.js +499 -502
  250. package/dist/features/media-library.js.map +1 -1
  251. package/dist/features/mentions.js +1 -1
  252. package/dist/features/overlays.js +1 -1
  253. package/dist/features/products.js +1216 -1248
  254. package/dist/features/products.js.map +1 -1
  255. package/dist/features/questionnaire.js +46 -44
  256. package/dist/features/questionnaire.js.map +1 -1
  257. package/dist/features/resource-assignment.js +96 -88
  258. package/dist/features/resource-assignment.js.map +1 -1
  259. package/dist/features/resource.js +11 -11
  260. package/dist/features/rich-text-editor.js +2 -2
  261. package/dist/features/schema-form.js +188 -184
  262. package/dist/features/schema-form.js.map +1 -1
  263. package/dist/features/suggestions.js +3 -3
  264. package/dist/features/sync.js +7 -7
  265. package/dist/features/sync.js.map +1 -1
  266. package/dist/features/table.js +1 -1
  267. package/dist/features/theme-tweaker.js +469 -470
  268. package/dist/features/theme-tweaker.js.map +1 -1
  269. package/dist/{feedback-CJkUAapr.js → feedback-C7nR0UtT.js} +9 -10
  270. package/dist/feedback-C7nR0UtT.js.map +1 -0
  271. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  272. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  273. package/dist/{field-state-recipes-DQQpiLWC.js → field-state-recipes-C-MFBX_8.js} +3 -3
  274. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  275. package/dist/{filters-D6FF8L6s.js → filters-Da-gNPsE.js} +467 -467
  276. package/dist/filters-Da-gNPsE.js.map +1 -0
  277. package/dist/{form-field-CZwrkP7m.js → form-field-VZRULhUK.js} +7 -7
  278. package/dist/{form-field-CZwrkP7m.js.map → form-field-VZRULhUK.js.map} +1 -1
  279. package/dist/form-sizing-uWP4lzVh.js +126 -0
  280. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  281. package/dist/{forms-B5NCbkSC.js → forms-DDeEnXSY.js} +11 -11
  282. package/dist/forms-DDeEnXSY.js.map +1 -0
  283. package/dist/forms-numeric-D3CO60IF.js +905 -0
  284. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  285. package/dist/{header-kxruN3RM.js → header-2ycNqGOR.js} +43 -42
  286. package/dist/header-2ycNqGOR.js.map +1 -0
  287. package/dist/{hooks-BrlnCwQd.js → hooks-DQ5SPwZw.js} +2 -2
  288. package/dist/{hooks-BrlnCwQd.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  289. package/dist/{icon-badge-Btc6pQrp.js → icon-badge-DKlaKXoo.js} +3 -3
  290. package/dist/{icon-badge-Btc6pQrp.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  291. package/dist/index.js +2 -2
  292. package/dist/{input-vxcaNCYC.js → input-BoLm9Hks.js} +3 -3
  293. package/dist/{input-vxcaNCYC.js.map → input-BoLm9Hks.js.map} +1 -1
  294. package/dist/input-DhQdBnV3.js +255 -0
  295. package/dist/{input-SX9V0AL3.js.map → input-DhQdBnV3.js.map} +1 -1
  296. package/dist/item-xzh8Df65.js +264 -0
  297. package/dist/item-xzh8Df65.js.map +1 -0
  298. package/dist/layout/app-shell.js +1 -1
  299. package/dist/layout/auth.js +1 -1
  300. package/dist/layout/containers.js +1 -1
  301. package/dist/layout/header.js +1 -1
  302. package/dist/layout/hooks.js +1 -1
  303. package/dist/layout/navigation.js +1 -1
  304. package/dist/layout/page.js +1 -1
  305. package/dist/layout/settings.js +1 -1
  306. package/dist/layout/sidebar.js +2 -2
  307. package/dist/layout/workspace.js +1 -1
  308. package/dist/layout.js +10 -10
  309. package/dist/lib/affordance-geometry.generated.d.ts +6 -1
  310. package/dist/lib/field-affordance-recipes.d.ts +35 -0
  311. package/dist/lib/field-state-recipes.d.ts +4 -2
  312. package/dist/lib/format.d.ts +9 -0
  313. package/dist/lib/money-format.d.ts +30 -0
  314. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  315. package/dist/lib/surface-recipes.d.ts +8 -6
  316. package/dist/lib/token-merge.generated.d.ts +11 -11
  317. package/dist/lib/track-recipes.d.ts +1 -1
  318. package/dist/lib/ui-provider/provider.d.ts +7 -2
  319. package/dist/lib/ui-provider/store.d.ts +6 -2
  320. package/dist/lib/ui-provider/types.d.ts +5 -2
  321. package/dist/lib/utils.js +1 -1
  322. package/dist/{media-gallery-DLp3HAz0.js → media-gallery-DQUQ0m3O.js} +8 -8
  323. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  324. package/dist/{mentions-Cl0Kt_Pd.js → mentions-DwnO1hh4.js} +34 -35
  325. package/dist/{mentions-Cl0Kt_Pd.js.map → mentions-DwnO1hh4.js.map} +1 -1
  326. package/dist/{message-SZUNB1eX.js → message-YfFmbXNP.js} +5 -5
  327. package/dist/{message-SZUNB1eX.js.map → message-YfFmbXNP.js.map} +1 -1
  328. package/dist/{navigation-DyytsLRB.js → navigation-Cbp5V8gG.js} +33 -34
  329. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  330. package/dist/{navigation-DnQSNMT0.js → navigation-Cs1npsPm.js} +111 -87
  331. package/dist/navigation-Cs1npsPm.js.map +1 -0
  332. package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-DlU-4QYO.js} +2 -2
  333. package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-DlU-4QYO.js.map} +1 -1
  334. package/dist/number-CKRBYmZK.js +352 -0
  335. package/dist/number-CKRBYmZK.js.map +1 -0
  336. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  337. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  338. package/dist/overlays-DhZO7N-I.js +994 -0
  339. package/dist/overlays-DhZO7N-I.js.map +1 -0
  340. package/dist/page-C6R_8jFt.js +325 -0
  341. package/dist/page-C6R_8jFt.js.map +1 -0
  342. package/dist/{page-header-D8nERkn5.js → page-header-hUTzcRZX.js} +9 -9
  343. package/dist/page-header-hUTzcRZX.js.map +1 -0
  344. package/dist/{pagination-NLGqRirf.js → pagination-Cm0jqa3I.js} +8 -8
  345. package/dist/{pagination-NLGqRirf.js.map → pagination-Cm0jqa3I.js.map} +1 -1
  346. package/dist/{popover-CghIYdQf.js → popover-Dcv_9jxr.js} +6 -6
  347. package/dist/{popover-CghIYdQf.js.map → popover-Dcv_9jxr.js.map} +1 -1
  348. package/dist/{popover-menu-B4PoWhRl.js → popover-menu-DnRFKnHP.js} +6 -6
  349. package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  350. package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-wmbvL8Ah.js} +2 -2
  351. package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-wmbvL8Ah.js.map} +1 -1
  352. package/dist/primitives-BHrwQXFC.js +379 -0
  353. package/dist/primitives-BHrwQXFC.js.map +1 -0
  354. package/dist/primitives.js +5 -5
  355. package/dist/{progress-BroqrAyV.js → progress-Br9WTFya.js} +7 -7
  356. package/dist/progress-Br9WTFya.js.map +1 -0
  357. package/dist/{receipt-BuJynLgf.js → receipt-CV89q1fs.js} +6 -6
  358. package/dist/{receipt-BuJynLgf.js.map → receipt-CV89q1fs.js.map} +1 -1
  359. package/dist/{rich-text-editor-BKyG7rWz.js → rich-text-editor-CF8QYt5p.js} +6 -6
  360. package/dist/{rich-text-editor-BKyG7rWz.js.map → rich-text-editor-CF8QYt5p.js.map} +1 -1
  361. package/dist/{rich-text-editor.recipes-B72Nfuze.js → rich-text-editor.recipes-CnrbmTS1.js} +4 -4
  362. package/dist/{rich-text-editor.recipes-B72Nfuze.js.map → rich-text-editor.recipes-CnrbmTS1.js.map} +1 -1
  363. package/dist/{rich-text-DlxDOtf4.js → rich-text-j-FGAeZW.js} +4 -4
  364. package/dist/{rich-text-DlxDOtf4.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  365. package/dist/{scroll-area-D-pIhEKl.js → scroll-area-DRdr16Pt.js} +3 -3
  366. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  367. package/dist/{separator-BhtFyo4x.js → separator-BMEvwnSX.js} +2 -2
  368. package/dist/{separator-BhtFyo4x.js.map → separator-BMEvwnSX.js.map} +1 -1
  369. package/dist/{separator-BNIgG3au.js → separator-Do5GWDYi.js} +4 -4
  370. package/dist/separator-Do5GWDYi.js.map +1 -0
  371. package/dist/services/actions/action-adapters.d.ts +4 -0
  372. package/dist/services/actions.js +8 -3
  373. package/dist/services/actions.js.map +1 -1
  374. package/dist/{settings-DOTOzeZ2.js → settings-DHk0L2MF.js} +17 -17
  375. package/dist/settings-DHk0L2MF.js.map +1 -0
  376. package/dist/sheet-DRFNY1_D.js +207 -0
  377. package/dist/sheet-DRFNY1_D.js.map +1 -0
  378. package/dist/sidebar-Cb8WzOvE.js +511 -0
  379. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  380. package/dist/{sidebar-CyR4XKwR.js → sidebar-Crc9M9JV.js} +18 -18
  381. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  382. package/dist/{skeleton-3F0uhYn3.js → skeleton-DVMXr15h.js} +4 -4
  383. package/dist/{skeleton-3F0uhYn3.js.map → skeleton-DVMXr15h.js.map} +1 -1
  384. package/dist/{smart-card-DjGVV2xr.js → smart-card-Bek-TwUp.js} +222 -207
  385. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  386. package/dist/{spinner-Cpf7oRkF.js → spinner-CmTAbEp0.js} +8 -6
  387. package/dist/spinner-CmTAbEp0.js.map +1 -0
  388. package/dist/{structure-CRdqVawd.js → structure-hzCW-XsV.js} +3 -3
  389. package/dist/{structure-CRdqVawd.js.map → structure-hzCW-XsV.js.map} +1 -1
  390. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  391. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  392. package/dist/style.css +1 -1
  393. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  394. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  395. package/dist/table-D6zKeYQX.js +162 -0
  396. package/dist/table-D6zKeYQX.js.map +1 -0
  397. package/dist/{table-CcRDZiLP.js → table-Dn4XSrSB.js} +348 -348
  398. package/dist/table-Dn4XSrSB.js.map +1 -0
  399. package/dist/{tabs-BNgu7g0u.js → tabs-Dk8E_knt.js} +14 -13
  400. package/dist/tabs-Dk8E_knt.js.map +1 -0
  401. package/dist/{text-inputs-DsR56TR-.js → text-inputs-BFpku0Qd.js} +150 -149
  402. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  403. package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
  404. package/dist/text.styles-g4He6UIW.js.map +1 -0
  405. package/dist/theme.css +16 -12
  406. package/dist/themes/green.css +24 -0
  407. package/dist/{timelines-D1pkt3se.js → timelines-CxuAFIc2.js} +25 -38
  408. package/dist/timelines-CxuAFIc2.js.map +1 -0
  409. package/dist/track-recipes-CDcKmndW.js +10 -0
  410. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  411. package/dist/{tree-BtmYyMZV.js → tree-BotPlyiD.js} +13 -13
  412. package/dist/{tree-BtmYyMZV.js.map → tree-BotPlyiD.js.map} +1 -1
  413. package/dist/typography/rich-text.js +1 -1
  414. package/dist/typography-CAr3dQhX.js +116 -0
  415. package/dist/typography-CAr3dQhX.js.map +1 -0
  416. package/dist/typography.js +2 -2
  417. package/dist/{ui-provider-DRPn3qNl.js → ui-provider-D2_TeLqw.js} +20 -21
  418. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  419. package/dist/ui-provider.js +1 -1
  420. package/dist/{upload-CDbYw1WN.js → upload-B0WHW7ak.js} +221 -220
  421. package/dist/upload-B0WHW7ak.js.map +1 -0
  422. package/dist/{upload-queue-CNd_hH_a.js → upload-queue-BHZ_wBfd.js} +59 -62
  423. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  424. package/dist/{usage-card-VyJLUwRr.js → usage-card-U0YBLTNT.js} +42 -43
  425. package/dist/{usage-card-VyJLUwRr.js.map → usage-card-U0YBLTNT.js.map} +1 -1
  426. package/dist/{utils-BvH9PSmq.js → utils-Cospvlj1.js} +221 -51
  427. package/dist/utils-Cospvlj1.js.map +1 -0
  428. package/dist/value-inputs-CjfzGMsN.js +854 -0
  429. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  430. package/dist/value-typography-Deb3yQZg.js +116 -0
  431. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  432. package/dist/{workspace-CcR8r-Nt.js → workspace-YoFjXi6i.js} +44 -45
  433. package/dist/workspace-YoFjXi6i.js.map +1 -0
  434. package/docs/consumer-skill/SKILL.md +51 -38
  435. package/docs/consumer-skill/examples/app-layout.tsx +2 -4
  436. package/docs/consumer-skill/examples/detail.tsx +3 -4
  437. package/docs/consumer-skill/examples/edit.tsx +1 -1
  438. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  439. package/docs/consumer-skill/examples/manifest.json +28 -6
  440. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  441. package/docs/consumer-skill/references/composition.md +89 -17
  442. package/docs/consumer-skill/references/discovery.md +4 -0
  443. package/docs/consumer-skill/references/installation.md +22 -0
  444. package/docs/consumer-skill/references/integration.md +32 -1
  445. package/docs/consumer-skill/references/public-api.json +111 -70
  446. package/docs/consumer-skill/references/review.md +20 -4
  447. package/docs/consumer-skill/references/theming.md +7 -1
  448. package/docs/consumer-skill/references/tokens.json +5 -2
  449. package/docs/consumer-skill/references/workflows.md +4 -2
  450. package/docs/consumer-skill/scripts/composition-policy.mjs +93 -2
  451. package/docs/consumer-skill/scripts/discovery.mjs +11 -3
  452. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  453. package/package.json +5 -3
  454. package/dist/accordion-BRTcsp8J.js.map +0 -1
  455. package/dist/action-menu-Drxw_vJk.js +0 -265
  456. package/dist/action-menu-Drxw_vJk.js.map +0 -1
  457. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
  458. package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
  459. package/dist/avatar-Bu2HhitA.js.map +0 -1
  460. package/dist/badge-CzId1Wlm.js.map +0 -1
  461. package/dist/button-BZDasD04.js.map +0 -1
  462. package/dist/buttons-D_6KJvEE.js.map +0 -1
  463. package/dist/chart-Bsc5BICK.js.map +0 -1
  464. package/dist/checkbox-BQNDjUCh.js +0 -34
  465. package/dist/checkbox-BQNDjUCh.js.map +0 -1
  466. package/dist/choice-inputs-Mk3iWbhr.js +0 -725
  467. package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
  468. package/dist/combobox-BFnbJJp3.js.map +0 -1
  469. package/dist/combobox-hozNwUcc.js.map +0 -1
  470. package/dist/command-BnmSchli.js.map +0 -1
  471. package/dist/comments-u5L0OGip.js.map +0 -1
  472. package/dist/data-display-Bihs9Ven.js.map +0 -1
  473. package/dist/date-DOKhJPu7.js +0 -140
  474. package/dist/date-DOKhJPu7.js.map +0 -1
  475. package/dist/date-picker-DzP5HQq7.js +0 -1541
  476. package/dist/date-picker-DzP5HQq7.js.map +0 -1
  477. package/dist/date-pickers-BpgGz7S-.js +0 -196
  478. package/dist/date-pickers-BpgGz7S-.js.map +0 -1
  479. package/dist/display-CS6Hbk18.js.map +0 -1
  480. package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
  481. package/dist/feedback-CJkUAapr.js.map +0 -1
  482. package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
  483. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
  484. package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
  485. package/dist/filters-D6FF8L6s.js.map +0 -1
  486. package/dist/form-sizing-QP8aIRaW.js +0 -103
  487. package/dist/form-sizing-QP8aIRaW.js.map +0 -1
  488. package/dist/format-iamDSqs2.js +0 -110
  489. package/dist/format-iamDSqs2.js.map +0 -1
  490. package/dist/forms-B5NCbkSC.js.map +0 -1
  491. package/dist/forms-numeric-Crrm80Lm.js +0 -867
  492. package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
  493. package/dist/header-kxruN3RM.js.map +0 -1
  494. package/dist/input-SX9V0AL3.js +0 -255
  495. package/dist/item-DE4YnuJx.js +0 -258
  496. package/dist/item-DE4YnuJx.js.map +0 -1
  497. package/dist/media-gallery-DLp3HAz0.js.map +0 -1
  498. package/dist/navigation-DnQSNMT0.js.map +0 -1
  499. package/dist/navigation-DyytsLRB.js.map +0 -1
  500. package/dist/number-DasMFWEG.js +0 -269
  501. package/dist/number-DasMFWEG.js.map +0 -1
  502. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  503. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  504. package/dist/overlays-DUbs1KEi.js +0 -1011
  505. package/dist/overlays-DUbs1KEi.js.map +0 -1
  506. package/dist/page-hGmT4nWK.js +0 -213
  507. package/dist/page-hGmT4nWK.js.map +0 -1
  508. package/dist/page-header-D8nERkn5.js.map +0 -1
  509. package/dist/primitives-C7ff0QaI.js +0 -337
  510. package/dist/primitives-C7ff0QaI.js.map +0 -1
  511. package/dist/progress-BroqrAyV.js.map +0 -1
  512. package/dist/scroll-area-D-pIhEKl.js.map +0 -1
  513. package/dist/separator-BNIgG3au.js.map +0 -1
  514. package/dist/settings-DOTOzeZ2.js.map +0 -1
  515. package/dist/sheet-BFhrNehm.js +0 -205
  516. package/dist/sheet-BFhrNehm.js.map +0 -1
  517. package/dist/sidebar-CyR4XKwR.js.map +0 -1
  518. package/dist/sidebar-SvGJ0Zwi.js +0 -506
  519. package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
  520. package/dist/smart-card-DjGVV2xr.js.map +0 -1
  521. package/dist/spinner-Cpf7oRkF.js.map +0 -1
  522. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  523. package/dist/surface-recipes-Dd__PD-w.js +0 -28
  524. package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
  525. package/dist/table-CLtJTxoR.js +0 -147
  526. package/dist/table-CLtJTxoR.js.map +0 -1
  527. package/dist/table-CcRDZiLP.js.map +0 -1
  528. package/dist/tabs-BNgu7g0u.js.map +0 -1
  529. package/dist/text-inputs-DsR56TR-.js.map +0 -1
  530. package/dist/text.styles-Q4sGAIgA.js.map +0 -1
  531. package/dist/timelines-D1pkt3se.js.map +0 -1
  532. package/dist/track-recipes-LLPNVwFg.js +0 -10
  533. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  534. package/dist/typography-BxQgiZyw.js +0 -96
  535. package/dist/typography-BxQgiZyw.js.map +0 -1
  536. package/dist/ui-provider-DRPn3qNl.js.map +0 -1
  537. package/dist/upload-CDbYw1WN.js.map +0 -1
  538. package/dist/upload-queue-CNd_hH_a.js.map +0 -1
  539. package/dist/utils-BvH9PSmq.js.map +0 -1
  540. package/dist/value-inputs-D0KCrfVC.js +0 -840
  541. package/dist/value-inputs-D0KCrfVC.js.map +0 -1
  542. package/dist/workspace-CcR8r-Nt.js.map +0 -1
@@ -7,7 +7,8 @@ var t = {
7
7
  discrete: "text-muted-foreground",
8
8
  error: "text-destructive",
9
9
  success: "text-success",
10
- primary: "text-primary-accent"
10
+ primary: "text-primary-accent",
11
+ inherit: "text-inherit"
11
12
  }, n = {
12
13
  inherit: "[font-size:inherit]",
13
14
  xxs: "text-xxs",
@@ -18,30 +19,32 @@ var t = {
18
19
  lg: "text-lg",
19
20
  xl: "text-xl"
20
21
  }, r = {
21
- sm: "text-sm",
22
- base: "text-base",
23
- lg: "text-lg",
24
- xl: "text-xl",
25
- "2xl": "text-2xl",
26
- "3xl": "text-3xl",
27
- "4xl": "text-4xl"
22
+ sm: "text-sm leading-snug",
23
+ base: "text-base leading-snug",
24
+ lg: "text-lg leading-snug",
25
+ xl: "text-xl leading-snug tracking-tight",
26
+ "2xl": "text-2xl leading-tight tracking-tight",
27
+ "3xl": "text-3xl leading-tight tracking-tight",
28
+ "4xl": "text-4xl leading-tight tracking-tight"
28
29
  }, i = {
29
30
  normal: "font-normal",
30
31
  regular: "font-normal",
31
32
  medium: "font-medium",
32
33
  semibold: "font-semibold",
33
- bold: "font-bold"
34
+ bold: "font-bold",
35
+ inherit: ""
34
36
  }, a = {
35
- left: "text-left",
37
+ left: "text-start",
36
38
  center: "text-center",
37
- right: "text-right"
39
+ right: "text-end"
38
40
  }, o = {
39
41
  normal: "leading-normal",
40
42
  relaxed: "leading-relaxed",
41
43
  loose: "leading-loose",
42
44
  tight: "leading-tight",
43
45
  snug: "leading-snug",
44
- none: "leading-none"
46
+ none: "leading-none",
47
+ inherit: ""
45
48
  }, s = e("m-0 font-sans", {
46
49
  variants: {
47
50
  type: t,
@@ -67,6 +70,6 @@ function c(e) {
67
70
  return s(e);
68
71
  }
69
72
  //#endregion
70
- export { n as a, o as i, c as n, s as o, a as r, r as t };
73
+ export { n as a, o as i, c as n, s as o, a as r, i as s, r as t };
71
74
 
72
- //# sourceMappingURL=text.styles-Q4sGAIgA.js.map
75
+ //# sourceMappingURL=text.styles-g4He6UIW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.styles-g4He6UIW.js","names":["textTypes","textSizes","headingSizes","textWeights","textAlignments","textLineHeights","textVariants","cva","resolveTextClassNames","options"],"sources":["../src/components/typography/text.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n/**\n * Text roles. `inherit` keeps the surrounding text's role: an inline span inside\n * a sentence takes its colour, weight or leading instead of resetting them. Colour\n * uses an explicit inherit utility because anchors otherwise fall back to the\n * browser link colour without preflight; weight and leading emit no class.\n */\nexport const textTypes = {\n main: 'text-foreground', inverse: 'text-inverse-foreground',\n secondary: 'text-muted-foreground', discrete: 'text-muted-foreground',\n error: 'text-destructive', success: 'text-success', primary: 'text-primary-accent',\n inherit: 'text-inherit',\n} as const;\nexport const textSizes = {\n inherit: '[font-size:inherit]', xxs: 'text-xxs', xs: 'text-xs', pxs: 'text-pxs',\n sm: 'text-sm', base: 'text-base', lg: 'text-lg', xl: 'text-xl',\n} as const;\n/**\n * Semantic heading level is independent of visual emphasis. No additional theme\n * roots: compact admin sizes keep snug leading; display sizes (xl and up) tighten\n * tracking and 2xl and up tighten leading so multi-line titles stay one block.\n */\nexport const headingSizes = {\n sm: 'text-sm leading-snug', base: 'text-base leading-snug', lg: 'text-lg leading-snug',\n xl: 'text-xl leading-snug tracking-tight', '2xl': 'text-2xl leading-tight tracking-tight',\n '3xl': 'text-3xl leading-tight tracking-tight', '4xl': 'text-4xl leading-tight tracking-tight',\n} as const;\nexport const textWeights = {normal: 'font-normal', regular: 'font-normal', medium: 'font-medium', semibold: 'font-semibold', bold: 'font-bold', inherit: ''} as const;\n/**\n * `left` and `right` follow the reading direction (start and end), so default\n * text and right-aligned figures mirror correctly under `dir=\"rtl\"`.\n */\nexport const textAlignments = {left: 'text-start', center: 'text-center', right: 'text-end'} as const;\nexport const textLineHeights = {normal: 'leading-normal', relaxed: 'leading-relaxed', loose: 'leading-loose', tight: 'leading-tight', snug: 'leading-snug', none: 'leading-none', inherit: ''} as const;\n\n/**\n * `numeric` is the monospace treatment for identifiers and code-like values\n * (`font-mono tabular-nums`). Numbers, amounts, dates and durations use the\n * number primitives, which keep the sans UI font with tabular figures.\n */\nexport const textVariants = cva('m-0 font-sans', {\n variants: {type: textTypes, size: textSizes, weight: textWeights, align: textAlignments, lineHeight: textLineHeights, numeric: {true: 'font-mono tabular-nums', false: ''}},\n defaultVariants: {type: 'main', size: 'sm', weight: 'regular', align: 'left', lineHeight: 'normal', numeric: false},\n});\n\nexport function resolveTextClassNames(options: Parameters<typeof textVariants>[0] & {className?: string}): string {\n return textVariants(options);\n}\n"],"mappings":";;AAQA,IAAaA,IAAY;CACvB,MAAM;CAAmB,SAAS;CAClC,WAAW;CAAyB,UAAU;CAC9C,OAAO;CAAoB,SAAS;CAAgB,SAAS;CAC7D,SAAS;AACX,GACaC,IAAY;CACvB,SAAS;CAAuB,KAAK;CAAY,IAAI;CAAW,KAAK;CACrE,IAAI;CAAW,MAAM;CAAa,IAAI;CAAW,IAAI;AACvD,GAMaC,IAAe;CAC1B,IAAI;CAAwB,MAAM;CAA0B,IAAI;CAChE,IAAI;CAAuC,OAAO;CAClD,OAAO;CAAyC,OAAO;AACzD,GACaC,IAAc;CAAC,QAAQ;CAAe,SAAS;CAAe,QAAQ;CAAe,UAAU;CAAiB,MAAM;CAAa,SAAS;AAAE,GAK9IC,IAAiB;CAAC,MAAM;CAAc,QAAQ;CAAe,OAAO;AAAU,GAC9EC,IAAkB;CAAC,QAAQ;CAAkB,SAAS;CAAmB,OAAO;CAAiB,OAAO;CAAiB,MAAM;CAAgB,MAAM;CAAgB,SAAS;AAAE,GAOhLC,IAAeC,EAAI,iBAAiB;CAC/C,UAAU;EAAC,MAAMP;EAAW,MAAMC;EAAW,QAAQE;EAAa,OAAOC;EAAgB,YAAYC;EAAiB,SAAS;GAAC,MAAM;GAA0B,OAAO;EAAE;CAAC;CAC1K,iBAAiB;EAAC,MAAM;EAAQ,MAAM;EAAM,QAAQ;EAAW,OAAO;EAAQ,YAAY;EAAU,SAAS;CAAK;AACpH,CAAC;AAED,SAAgBG,EAAsB,GAA4E;CAChH,OAAOF,EAAaG,CAAO;AAC7B"}
package/dist/theme.css CHANGED
@@ -57,18 +57,19 @@
57
57
 
58
58
  :root {
59
59
  /* Radius is shared geometry, not a light-palette reset. Mode scopes inherit it. */
60
- --radius: 0.75rem; /* Shared 8px corners keep short controls rectangular; nested corners derive from this root. */
60
+ --radius: 0.75rem; /* Shared 12px outer corners; inner control/row corners derive from this root and stay rectangular. */
61
61
  }
62
62
 
63
63
  :root,
64
64
  .light {
65
+ color-scheme: light; /* Native scrollbars, form controls and pickers follow the active mode. */
65
66
  --background: oklch(0.985 0 0); /* Application canvas and default page background. */
66
67
  --foreground: oklch(0.28 0 0); /* Primary text and icon color on the application canvas. */
67
68
  --card: oklch(1 0 0); /* Card and framed content-surface background. */
68
69
  --card-foreground: oklch(0.28 0 0); /* Primary text and icons on card surfaces. */
69
70
  --popover: var(--card); /* Popover, menu, select, and transient-surface background. */
70
71
  --popover-foreground: var(--foreground); /* Primary text and icons on popover surfaces. */
71
- --primary: oklch(0.45 0.09 167.35); /* Brand and primary-action color. */
72
+ --primary: oklch(0.205 0 0); /* Primary-action color: near-black by default so status colors never compete with it; a brand stylesheet such as themes/green.css replaces it. */
72
73
  --primary-foreground: oklch(0.985 0 0); /* Text and icons on solid primary fills. */
73
74
  --secondary: oklch(0.94 0 0); /* Neutral secondary-control and supporting-surface fill. */
74
75
  --secondary-foreground: oklch(0.205 0 0); /* Text and icons on secondary fills. */
@@ -79,15 +80,16 @@
79
80
  --destructive: oklch(0.50 0.2039 27.325); /* Destructive action, error, and invalid-state color. */
80
81
  --destructive-foreground: oklch(0.99 0 0); /* Text and icons on solid destructive fills. */
81
82
  --border: oklch(0.922 0 0); /* Default divider, outline, and surface-border color. */
82
- --input: oklch(0.922 0 0); /* Default form-control border color. */
83
+ --input: oklch(0.62 0 0); /* Form-control boundary: inputs, selects, checkbox, radio and switch tracks. Keeps 3:1 against every surface (WCAG 1.4.11); dividers use --border. */
83
84
  --ring: oklch(0.60 0 0); /* Focus-visible ring and outline color. */
84
85
  /*
85
86
  * Categorical chart series. Hues are held identical in light and dark so a
86
87
  * series keeps its identity when the theme flips; only lightness moves, to
87
- * suit the surface it is drawn on. Hues sit clear of the status hues
88
- * (destructive 27, warning 90, success 145) so a series never reads as a
89
- * state. Chroma is kept inside sRGB, so the authored value is what renders
90
- * rather than something the browser clamps.
88
+ * suit the surface it is drawn on. Hues are offset from the status hues
89
+ * (destructive 27, warning 75, success 145); series 1 and 5 sit nearest
90
+ * (22° from success, 15° from warning), so charts that encode state use the
91
+ * status tokens, never series colors. Chroma is kept inside sRGB, so the
92
+ * authored value is what renders rather than something the browser clamps.
91
93
  */
92
94
  --chart-1: oklch(0.56 0.11 167); /* First categorical chart-series color; never a status color. */
93
95
  --chart-2: oklch(0.56 0.11 230); /* Second categorical chart-series color; never a status color. */
@@ -113,14 +115,15 @@
113
115
  }
114
116
 
115
117
  .dark {
118
+ color-scheme: dark;
116
119
  --background: oklch(0.145 0 0);
117
120
  --foreground: oklch(0.985 0 0);
118
121
  --card: oklch(0.205 0 0);
119
122
  --card-foreground: oklch(0.985 0 0);
120
123
  --popover: oklch(0.235 0 0);
121
124
  --popover-foreground: var(--foreground);
122
- --primary: oklch(0.70 0.13 167.35); /* Lightened for readable brand text and controls on dark surfaces. */
123
- --primary-foreground: oklch(0.18 0.03 167.35); /* Dark ink on the lightened dark-theme primary fill. */
125
+ --primary: oklch(0.922 0 0); /* Near-white primary fill and ink on dark surfaces. */
126
+ --primary-foreground: oklch(0.205 0 0); /* Dark ink on the near-white dark-theme primary fill. */
124
127
  --secondary: oklch(0.269 0 0);
125
128
  --secondary-foreground: oklch(0.985 0 0);
126
129
  --muted: oklch(0.175 0 0);
@@ -130,7 +133,7 @@
130
133
  --destructive: oklch(0.704 0.1876 22.216);
131
134
  --destructive-foreground: oklch(0.18 0.05 22);
132
135
  --border: oklch(1 0 0 / 10%);
133
- --input: oklch(1 0 0 / 15%);
136
+ --input: oklch(1 0 0 / 40%);
134
137
  --ring: oklch(0.65 0 0);
135
138
  --chart-1: oklch(0.74 0.13 167);
136
139
  --chart-2: oklch(0.72 0.14 230);
@@ -212,6 +215,7 @@
212
215
  --spacing-space-lg: calc(0.75rem * var(--space-scale));
213
216
  --spacing-space-xl: calc(1rem * var(--space-scale));
214
217
  --spacing-space-2xl: calc(1.5rem * var(--space-scale));
218
+ --spacing-space-3xl: calc(2rem * var(--space-scale)); /* Page-level rhythm between a page header and its body or between major sections. */
215
219
  }
216
220
 
217
221
  :root {
@@ -313,7 +317,7 @@
313
317
  --info: oklch(0.45 0.214 276.966); /* Semantic informational fill, border, and foreground accent. */
314
318
  --info-foreground: oklch(0.99 0 0); /* Text and icons on solid informational fills. */
315
319
  --link-color: oklch(0.462 0.1776 259.13); /* Inline links and link-like copyable values. */
316
- --primary-accent: oklch(0.45 0.09 167.35); /* Brand color drawn AS foreground — icons, spinners, active marks — on the app surface. Matches --primary in light and provides a dedicated foreground accent in dark. Primary fills and their paired foreground remain owned by the shadcn theme. Distinct from --accent, the muted hover surface. */
320
+ --primary-accent: var(--primary); /* Brand color drawn AS foreground — icons, spinners, active marks — on the app surface. Follows --primary, so a rebrand needs one root; a brand theme may set a dedicated dark foreground accent. Primary fills and their paired foreground remain owned by the shadcn theme. Distinct from --accent, the muted hover surface. */
317
321
  --warning: oklch(0.78 0.13 75); /* Semantic warning fill and decorative highlight; use warning-accent for ink on ordinary surfaces. */
318
322
  --warning-foreground: oklch(0.28 0.035 60); /* Text and icons on solid warning fills. */
319
323
  --warning-accent: oklch(0.53 0.11 65); /* Warning colour drawn AS foreground — icons and marks — on a tinted warning surface. Darkens here and brightens in dark, where --warning stays a light fill so solid warning chips keep the amber. */
@@ -334,7 +338,7 @@
334
338
  --info: oklch(0.72 0.14 250);
335
339
  --info-foreground: oklch(0.18 0.05 250);
336
340
  --link-color: oklch(0.72 0.12 259.13);
337
- --primary-accent: oklch(0.72 0.124 167.35);
341
+ --primary-accent: var(--primary);
338
342
  --warning: oklch(0.81 0.12 75);
339
343
  --warning-foreground: oklch(0.28 0.035 60);
340
344
  --warning-accent: oklch(0.81 0.12 75);
@@ -0,0 +1,24 @@
1
+ /*
2
+ * Themelia green — an opt-in brand theme.
3
+ *
4
+ * Import after the package stylesheet:
5
+ * import 'themelia-react-ui/style.css';
6
+ * import 'themelia-react-ui/themes/green.css';
7
+ *
8
+ * It replaces only the brand roles. The green sits about 22° of hue from the
9
+ * success color, so pair it with labels or icons wherever state matters.
10
+ * Both blocks are needed: a later :root rule alone would also win in dark mode.
11
+ */
12
+ :root,
13
+ .light {
14
+ --primary: oklch(0.45 0.09 167.35); /* Green primary-action fill and brand ink. */
15
+ --primary-foreground: oklch(0.985 0 0); /* Text and icons on the green fill. */
16
+ --chart-1: oklch(0.56 0.11 167); /* The first chart series follows the brand. */
17
+ }
18
+
19
+ .dark {
20
+ --primary: oklch(0.70 0.13 167.35); /* Lightened for readable brand text and controls on dark surfaces. */
21
+ --primary-foreground: oklch(0.18 0.03 167.35); /* Dark ink on the lightened primary fill. */
22
+ --primary-accent: oklch(0.72 0.124 167.35); /* Brand foreground accent on dark surfaces. */
23
+ --chart-1: oklch(0.74 0.13 167);
24
+ }
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-BvH9PSmq.js";
4
- import { a as n } from "./typography-BxQgiZyw.js";
5
- import { t as r } from "./structure-CRdqVawd.js";
6
- import { g as i, m as a } from "./primitives-C7ff0QaI.js";
7
- import { n as o } from "./number-DasMFWEG.js";
8
- import { t as s } from "./badge-CzId1Wlm.js";
9
- import { n as c } from "./display-CS6Hbk18.js";
3
+ import { t } from "./utils-Cospvlj1.js";
4
+ import { s as n } from "./typography-CAr3dQhX.js";
5
+ import { t as r } from "./structure-hzCW-XsV.js";
6
+ import { g as i, m as a } from "./primitives-BHrwQXFC.js";
7
+ import { n as o } from "./number-CKRBYmZK.js";
8
+ import { t as s } from "./badge-0tATj-tW.js";
9
+ import { n as c } from "./display-DrdvPwF0.js";
10
10
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
11
11
  import { Check as d, Circle as f, Clock as p, GitCommit as m, Loader2 as h, Minus as g, Plus as _, Wrench as v, X as y } from "lucide-react";
12
12
  //#region src/components/blocks/timelines/shared/timeline.tsx
@@ -297,22 +297,12 @@ var O = {
297
297
  modified: "Modified",
298
298
  fixed: "Fixed"
299
299
  }, k = {
300
- added: "success",
301
- removed: "error",
302
- modified: "warning",
303
- fixed: "current"
304
- }, A = {
305
- added: "success",
306
- removed: "destructive",
307
- modified: "warning",
308
- fixed: "info"
309
- }, j = {
310
300
  added: _,
311
301
  removed: g,
312
302
  modified: v,
313
303
  fixed: m
314
304
  };
315
- function M({ entries: i, className: o, strings: c }) {
305
+ function A({ entries: i, className: o, strings: c }) {
316
306
  let d = e(O, c), f = {
317
307
  added: d.added,
318
308
  removed: d.removed,
@@ -323,10 +313,7 @@ function M({ entries: i, className: o, strings: c }) {
323
313
  title: /* @__PURE__ */ u("span", {
324
314
  className: "inline-flex flex-wrap items-center gap-space-sm",
325
315
  children: [
326
- /* @__PURE__ */ l(s, {
327
- tone: A[e.kind],
328
- children: f[e.kind]
329
- }),
316
+ /* @__PURE__ */ l(s, { children: f[e.kind] }),
330
317
  /* @__PURE__ */ l(n, {
331
318
  tag: "span",
332
319
  size: "inherit",
@@ -354,8 +341,8 @@ function M({ entries: i, className: o, strings: c }) {
354
341
  })]
355
342
  }) : e.description,
356
343
  timestamp: e.timestamp,
357
- icon: j[e.kind],
358
- status: k[e.kind]
344
+ icon: k[e.kind],
345
+ status: "neutral"
359
346
  }));
360
347
  return /* @__PURE__ */ l("div", {
361
348
  "data-component": "changelog-timeline",
@@ -367,34 +354,34 @@ function M({ entries: i, className: o, strings: c }) {
367
354
  })
368
355
  });
369
356
  }
370
- M.displayName = "ChangelogTimeline";
357
+ A.displayName = "ChangelogTimeline";
371
358
  //#endregion
372
359
  //#region src/components/blocks/timelines/milestones/types.ts
373
- var N = {
360
+ var j = {
374
361
  title: "Milestones",
375
362
  completed: "Completed",
376
363
  in_progress: "In progress",
377
364
  upcoming: "Upcoming",
378
365
  blocked: "Blocked",
379
366
  dueOn: "Due"
380
- }, P = {
367
+ }, M = {
381
368
  completed: "completed",
382
369
  in_progress: "current",
383
370
  upcoming: "pending",
384
371
  blocked: "error"
385
- }, F = {
372
+ }, N = {
386
373
  completed: d,
387
374
  in_progress: p,
388
375
  upcoming: f,
389
376
  blocked: y
390
- }, I = {
377
+ }, P = {
391
378
  completed: "success",
392
- in_progress: "primary",
379
+ in_progress: "info",
393
380
  upcoming: "secondary",
394
381
  blocked: "destructive"
395
382
  };
396
- function L({ milestones: r, className: i, strings: a }) {
397
- let c = e(N, a), d = {
383
+ function F({ milestones: r, className: i, strings: a }) {
384
+ let c = e(j, a), d = {
398
385
  completed: c.completed,
399
386
  in_progress: c.in_progress,
400
387
  upcoming: c.upcoming,
@@ -410,14 +397,14 @@ function L({ milestones: r, className: i, strings: a }) {
410
397
  lineHeight: "tight",
411
398
  children: e.title
412
399
  }), /* @__PURE__ */ l(s, {
413
- tone: I[e.status],
400
+ tone: P[e.status],
414
401
  children: d[e.status]
415
402
  })]
416
403
  }),
417
404
  description: e.description,
418
405
  timestamp: e.dueDate ? `${c.dueOn} ${e.dueDate}` : void 0,
419
- icon: F[e.status],
420
- status: P[e.status],
406
+ icon: N[e.status],
407
+ status: M[e.status],
421
408
  children: e.status === "in_progress" && typeof e.progress == "number" ? /* @__PURE__ */ u("div", {
422
409
  className: "space-y-space-xs",
423
410
  children: [/* @__PURE__ */ l("div", {
@@ -445,8 +432,8 @@ function L({ milestones: r, className: i, strings: a }) {
445
432
  })
446
433
  });
447
434
  }
448
- L.displayName = "MilestonesTimeline";
435
+ F.displayName = "MilestonesTimeline";
449
436
  //#endregion
450
- export { T as a, O as i, N as n, D as o, M as r, C as s, L as t };
437
+ export { T as a, O as i, j as n, D as o, A as r, C as s, F as t };
451
438
 
452
- //# sourceMappingURL=timelines-D1pkt3se.js.map
439
+ //# sourceMappingURL=timelines-CxuAFIc2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelines-CxuAFIc2.js","names":["Text","Stack","SecondaryValue","MonoValue","Percent","Badge","ContentBlock","DOT_PX","ICON_PX","STATUS_TONE","Timeline","cn","className","items","tone","item","Icon","isLast","i","dotSize","statusStyles","Check","Loader2","Circle","StepsCard","steps","titleColor","step","HorizontalDot","status","stepNumber","StepsHorizontal","title","description","idx","lineColor","footerText","defaultChangelogTimelineStrings","KIND_ICON","Plus","Minus","Wrench","GitCommit","ChangelogTimeline","stringsProp","strings","useStrings","labelByKind","entries","entry","defaultMilestonesTimelineStrings","STATUS_TO_TIMELINE","STATUS_ICON","Clock","X","STATUS_BADGE","MilestonesTimeline","labelByStatus","milestones","m"],"sources":["../src/components/blocks/timelines/shared/timeline.tsx","../src/components/blocks/timelines/steps-card/steps-card.tsx","../src/components/blocks/timelines/changelog/types.ts","../src/components/blocks/timelines/changelog/changelog-timeline.tsx","../src/components/blocks/timelines/milestones/types.ts","../src/components/blocks/timelines/milestones/milestones-timeline.tsx"],"sourcesContent":["/**\n * Timeline — shared base primitive for the blocks timeline family.\n *\n * Renders a vertical, dot-and-line list of events. Each item supports an\n * icon (Lucide component), a status that maps to dot tone, a title row, an\n * optional description block, an optional timestamp, and free-form content\n * via `children`. Use this primitive directly for new timeline variants\n * instead of reinventing the dot/line geometry — see `ChangeLogTimeline`,\n * `MilestonesTimeline`, and the existing OrderTimeline / PaymentTimeline /\n * ActivityStream consumers for examples.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport type { ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\n\nexport type TimelineStatus =\n\t| 'completed'\n\t| 'current'\n\t| 'pending'\n\t| 'success'\n\t| 'warning'\n\t| 'error'\n\t| 'neutral';\n\nexport type TimelineDotSize = ComponentScale;\n\nexport interface TimelineItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Formatted time for the entry. */\n\ttimestamp?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\tstatus?: TimelineStatus;\n\tchildren?: ReactNode;\n}\n\nexport interface TimelineProps {\n\titems: TimelineItem[];\n\tdotSize?: TimelineDotSize;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nconst DOT_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2.5',\n\tmd: 'size-icon-md',\n\tlg: 'size-icon-lg',\n};\n\nconst ICON_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2',\n\tmd: 'size-2.5',\n\tlg: 'size-icon-sm',\n};\n\nconst STATUS_TONE: Record<TimelineStatus, { bg: string; text: string; ring: string; line: string }> = {\n\tcompleted: { bg: 'bg-success', text: 'text-success-foreground', ring: 'ring-success/20', line: 'bg-success/40' },\n\tcurrent: { bg: 'bg-primary', text: 'text-primary-foreground', ring: 'ring-primary/30', line: 'bg-primary/40' },\n\tpending: { bg: 'bg-muted', text: 'text-muted-foreground', ring: 'ring-border', line: 'bg-border' },\n\tsuccess: { bg: 'bg-success', text: 'text-success-foreground', ring: 'ring-success/20', line: 'bg-success/40' },\n\twarning: { bg: 'bg-warning', text: 'text-warning-foreground', ring: 'ring-warning/30', line: 'bg-warning/40' },\n\terror: { bg: 'bg-destructive', text: 'text-destructive-foreground', ring: 'ring-destructive/30', line: 'bg-destructive/40' },\n\tneutral: { bg: 'bg-card', text: 'text-foreground', ring: 'ring-border', line: 'bg-border' },\n};\n\nexport function Timeline({ items, dotSize = 'md', className }: TimelineProps) {\n\treturn (\n\t\t<ol className={cn('timeline--component', 'relative m-0 p-0 list-none space-y-space-xl', className)}>\n\t\t\t{items.map((item, i) => {\n\t\t\t\tconst status = item.status ?? 'neutral';\n\t\t\t\tconst tone = STATUS_TONE[status];\n\t\t\t\tconst Icon = item.icon;\n\t\t\t\tconst isLast = i === items.length - 1;\n\n\t\t\t\treturn (\n\t\t\t\t\t<li key={item.id} className=\"relative flex gap-space-lg\">\n\t\t\t\t\t\t{/* Connector line — fills available space below dot until last */}\n\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute left-[7px] top-4 bottom-[-1rem] w-px',\n\t\t\t\t\t\t\t\t\ttone.line,\n\t\t\t\t\t\t\t\t\tdotSize === 'lg' && 'left-[10px]',\n\t\t\t\t\t\t\t\t\tdotSize === 'sm' && 'left-[5px]',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div className=\"relative z-[1] mt-0.5 flex shrink-0 items-start\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'inline-flex items-center justify-center rounded-full ring-2',\n\t\t\t\t\t\t\t\t\ttone.bg,\n\t\t\t\t\t\t\t\t\ttone.text,\n\t\t\t\t\t\t\t\t\ttone.ring,\n\t\t\t\t\t\t\t\t\tDOT_PX[dotSize],\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{!!Icon && <Icon className={ICON_PX[dotSize]} />}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1 pb-space-md\">\n\t\t\t\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t\t\t\t<div className=\"flex items-baseline justify-between gap-space-md\">\n\t\t\t\t\t\t\t\t<Text weight=\"medium\" className=\"leading-tight\">\n\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!item.timestamp && (\n\t\t\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"shrink-0 tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.timestamp}\n\t\t\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t{!!item.children && <div className=\"mt-space-md\">{item.children}</div>}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ol>\n\t);\n}\n\nTimeline.displayName = 'Timeline';\n","import { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography/text';\nimport { Badge } from '../../../base/badge';\nimport { ContentBlock } from '../../../base/display';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Circle, Loader2 } from 'lucide-react';\nimport { Timeline, type TimelineItem } from '../shared';\nimport { type StepStatus, type StepsCardProps, type StepsHorizontalProps } from './types';\n\nconst statusStyles: Record<StepStatus, {\n\tdot: string;\n\tline: string;\n\ttitle: string;\n\tIcon: typeof Check;\n}> = {\n\tcompleted: {\n\t\tdot: 'bg-success text-success-foreground',\n\t\tline: 'bg-success',\n\t\ttitle: 'text-foreground',\n\t\tIcon: Check,\n\t},\n\tcurrent: {\n\t\tdot: 'bg-primary text-primary-foreground ring-4 ring-primary/20',\n\t\tline: 'bg-border',\n\t\ttitle: 'text-foreground',\n\t\tIcon: Loader2,\n\t},\n\tupcoming: {\n\t\tdot: 'bg-muted text-muted-foreground',\n\t\tline: 'bg-border',\n\t\ttitle: 'text-muted-foreground',\n\t\tIcon: Circle,\n\t},\n};\n\n/* ─── Vertical StepsCard (original) ────────────────────────────────────────── */\n\nexport function StepsCard({ title, description, steps, footerText, className }: StepsCardProps) {\n\tconst items: TimelineItem[] = steps.map((step) => {\n\t\tconst { Icon, title: titleColor } = statusStyles[step.status];\n\t\treturn {\n\t\t\tid: step.id,\n\t\t\ttitle: (\n\t\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"semibold\" className={titleColor}>\n\t\t\t\t\t\t{step.title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{step.badge ? (\n\t\t\t\t\t\t<Badge tone={step.badgeTone ?? 'secondary'}>{step.badge}</Badge>\n\t\t\t\t\t) : null}\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tdescription: step.description,\n\t\t\ttimestamp: step.timestamp,\n\t\t\ticon: Icon,\n\t\t\tstatus: step.status === 'upcoming' ? 'pending' : step.status,\n\t\t\tchildren: step.content,\n\t\t};\n\t});\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"steps-card\"\n\t\t\tdata-slot=\"steps-card\"\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tfooterText={footerText}\n\t\t\tclassName={cn('steps-card--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"lg\" />\n\t\t</ContentBlock>\n\t);\n}\n\nStepsCard.displayName = 'StepsCard';\n\n/*──────────────────────────────────────────────────────────────────────────────\n * STEPS HORIZONTAL — Horizontal step bar with connecting lines\n *────────────────────────────────────────────────────────────────────────────*/\n\nfunction HorizontalDot({ status, stepNumber }: { status: StepStatus; stepNumber: number }) {\n\tif (status === 'completed') {\n\t\treturn (\n\t\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius bg-success text-success-foreground\">\n\t\t\t\t<Check className=\"h-4 w-4\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (status === 'current') {\n\t\treturn (\n\t\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius bg-primary text-primary-foreground\">\n\t\t\t\t<Text weight=\"bold\" className=\"text-primary-foreground\">\n\t\t\t\t\t{stepNumber}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-radius border-2 border-muted text-muted-foreground\">\n\t\t\t<Text weight=\"medium\" className=\"text-muted-foreground\">\n\t\t\t\t{stepNumber}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function StepsHorizontal({ title, description, steps, footerText, className }: StepsHorizontalProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"steps-horizontal\"\n\t\t\tdata-slot=\"steps-horizontal\"\n\t\t\tclassName={cn('steps-horizontal--component @container/steps-horizontal grid min-w-0 gap-space-md', className)}\n\t\t>\n\t\t\t{!!(title || description) && (\n\t\t\t\t<div className=\"steps-horizontal--header grid min-w-0 gap-normal\">\n\t\t\t\t\t{!!title && <Text weight=\"semibold\">{title}</Text>}\n\t\t\t\t\t{!!description && <Text type=\"secondary\">{description}</Text>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"space-y-space-lg @xl/steps-horizontal:hidden\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={step.id} className=\"flex gap-space-lg\">\n\t\t\t\t\t\t\t<div className=\"flex flex-col items-center\">\n\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\t\t\t\t\t\t\t\t{!isLast && <div className={cn('mt-1 w-0.5 flex-1 min-h-5', lineColor)} />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Stack gap=\"dense\" className={cn('min-w-0 flex-1 pb-space-md', isLast && 'pb-0')}>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'leading-snug',\n\t\t\t\t\t\t\t\t\t\tstep.status === 'upcoming' ? 'text-muted-foreground' : 'text-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t{step.description}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* Horizontal scroll wrapper — when total step width exceeds the\n\t\t\t\tcard, this lets users scroll instead of clipping labels. */}\n\t\t\t<div className=\"hidden overflow-x-auto @xl/steps-horizontal:block\">\n\t\t\t\t<div className=\"flex min-w-fit items-start\">\n\t\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={step.id} className=\"flex min-w-28 flex-1 items-start\">\n\t\t\t\t\t\t\t\t<div className=\"flex w-full flex-col items-center\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center\">\n\t\t\t\t\t\t\t\t\t\t{idx > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'h-0.5 flex-1',\n\t\t\t\t\t\t\t\t\t\t\t\tsteps[idx - 1].status === 'completed' ? 'bg-success' : 'bg-border',\n\t\t\t\t\t\t\t\t\t\t\t)} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{idx === 0 && <div className=\"flex-1\" />}\n\n\t\t\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\n\t\t\t\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('h-0.5 flex-1', lineColor)} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!isLast && <div className=\"flex-1\" />}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Labels below dot — clamped to 2 lines so long step\n\t\t\t\t\t\t\t\t\t\tnames break gracefully instead of pushing the\n\t\t\t\t\t\t\t\t\t\trow taller. */}\n\t\t\t\t\t\t\t\t\t<Stack gap=\"dense\" className=\"mt-space-md flex w-full flex-col items-center px-space-xs text-center\">\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'leading-snug line-clamp-2',\n\t\t\t\t\t\t\t\t\t\t\t\tstep.status === 'upcoming' ? 'text-muted-foreground' : 'text-foreground',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"leading-snug line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{step.description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{!!footerText && <Text size=\"xs\" type=\"secondary\">{footerText}</Text>}\n\t\t</div>\n\t);\n}\n\nStepsHorizontal.displayName = 'StepsHorizontal';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type ChangelogEntryKind = 'added' | 'removed' | 'modified' | 'fixed';\n\nexport interface ChangelogEntry {\n\t/** Stable identity for this entry. */\n\tid: string;\n\tkind: ChangelogEntryKind;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tversion?: string;\n\t/** Formatted time for the entry. */\n\ttimestamp?: string;\n\t/** Who produced the entry. */\n\tauthor?: string;\n}\n\nexport interface ChangelogTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tadded: string;\n\tremoved: string;\n\tmodified: string;\n\tfixed: string;\n}\n\nexport const defaultChangelogTimelineStrings: ChangelogTimelineStrings = {\n\ttitle: 'Changelog',\n\tadded: 'Added',\n\tremoved: 'Removed',\n\tmodified: 'Modified',\n\tfixed: 'Fixed',\n};\n\nexport interface ChangelogTimelineProps {\n\tentries: ChangelogEntry[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ChangelogTimelineStrings>;\n}\n","/**\n * ChangelogTimeline — code/release changelog rendered through the shared\n * `Timeline` primitive. Each entry's kind (added / removed / modified /\n * fixed) is a neutral chip plus the marker glyph: a kind is a category, not a\n * status, so it carries no colour. An optional version label and timestamp\n * follow. Strings overridable for i18n.\n */\nimport { GitCommit, Minus, Plus, Wrench } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n} from '../shared';\nimport {\n\tdefaultChangelogTimelineStrings,\n\ttype ChangelogEntry,\n\ttype ChangelogEntryKind,\n\ttype ChangelogTimelineProps,\n} from './types';\n\nimport { cn } from '../../../../lib/utils';\nconst KIND_ICON = {\n\tadded: Plus,\n\tremoved: Minus,\n\tmodified: Wrench,\n\tfixed: GitCommit,\n} as const;\n\nexport function ChangelogTimeline({\n\tentries,\n\tclassName,\n\tstrings: stringsProp,\n}: ChangelogTimelineProps) {\n\tconst strings = useStrings(defaultChangelogTimelineStrings, stringsProp);\n\tconst labelByKind: Record<ChangelogEntryKind, string> = {\n\t\tadded: strings.added,\n\t\tremoved: strings.removed,\n\t\tmodified: strings.modified,\n\t\tfixed: strings.fixed,\n\t};\n\n\tconst items: TimelineItem[] = entries.map((entry: ChangelogEntry) => ({\n\t\tid: entry.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Badge>\n\t\t\t\t\t{labelByKind[entry.kind]}\n\t\t\t\t</Badge>\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{entry.title}\n\t\t\t\t</Text>\n\t\t\t\t{!!entry.version && (\n\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{entry.version}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t),\n\t\tdescription: entry.author ? (\n\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"md\" className=\"inline-flex\">\n\t\t\t\t{entry.description}\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"discrete\">\n\t\t\t\t\t— {entry.author}\n\t\t\t\t</Text>\n\t\t\t</Stack>\n\t\t) : (\n\t\t\tentry.description\n\t\t),\n\t\ttimestamp: entry.timestamp,\n\t\ticon: KIND_ICON[entry.kind],\n\t\tstatus: 'neutral',\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"changelog-timeline\"\n\t\t\tdata-slot=\"changelog-timeline\"\n\t\t\tclassName={cn('changelog-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nChangelogTimeline.displayName = 'ChangelogTimeline';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type MilestoneStatus = 'completed' | 'in_progress' | 'upcoming' | 'blocked';\n\nexport interface MilestoneItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tdueDate?: string;\n\tstatus: MilestoneStatus;\n\t/** 0–100; only used when status is `in_progress`. */\n\tprogress?: number;\n}\n\nexport interface MilestonesTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tcompleted: string;\n\tin_progress: string;\n\tupcoming: string;\n\tblocked: string;\n\tdueOn: string;\n}\n\nexport const defaultMilestonesTimelineStrings: MilestonesTimelineStrings = {\n\ttitle: 'Milestones',\n\tcompleted: 'Completed',\n\tin_progress: 'In progress',\n\tupcoming: 'Upcoming',\n\tblocked: 'Blocked',\n\tdueOn: 'Due',\n};\n\nexport interface MilestonesTimelineProps {\n\tmilestones: MilestoneItem[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<MilestonesTimelineStrings>;\n}\n","/**\n * MilestonesTimeline — project / goal milestones rendered through the\n * shared `Timeline` primitive. Each milestone has a status (completed /\n * in-progress / upcoming / blocked) that drives the dot tone, and an\n * optional `progress` percent that renders an inline progress bar when the\n * milestone is in flight. Strings overridable for i18n.\n */\nimport { Check, Circle, Clock, X } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n\ttype TimelineStatus,\n} from '../shared';\nimport {\n\tdefaultMilestonesTimelineStrings,\n\ttype MilestoneItem,\n\ttype MilestoneStatus,\n\ttype MilestonesTimelineProps,\n} from './types';\n\nconst STATUS_TO_TIMELINE: Record<MilestoneStatus, TimelineStatus> = {\n\tcompleted: 'completed',\n\tin_progress: 'current',\n\tupcoming: 'pending',\n\tblocked: 'error',\n};\n\nconst STATUS_ICON = {\n\tcompleted: Check,\n\tin_progress: Clock,\n\tupcoming: Circle,\n\tblocked: X,\n} as const;\n\n// In progress is a status (info); primary is reserved for the main command.\nconst STATUS_BADGE: Record<MilestoneStatus, 'success' | 'info' | 'secondary' | 'destructive'> = {\n\tcompleted: 'success',\n\tin_progress: 'info',\n\tupcoming: 'secondary',\n\tblocked: 'destructive',\n};\n\nexport function MilestonesTimeline({\n\tmilestones,\n\tclassName,\n\tstrings: stringsProp,\n}: MilestonesTimelineProps) {\n\tconst strings = useStrings(defaultMilestonesTimelineStrings, stringsProp);\n\tconst labelByStatus: Record<MilestoneStatus, string> = {\n\t\tcompleted: strings.completed,\n\t\tin_progress: strings.in_progress,\n\t\tupcoming: strings.upcoming,\n\t\tblocked: strings.blocked,\n\t};\n\n\tconst items: TimelineItem[] = milestones.map((m: MilestoneItem) => ({\n\t\tid: m.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{m.title}\n\t\t\t\t</Text>\n\t\t\t\t<Badge tone={STATUS_BADGE[m.status]}>\n\t\t\t\t\t{labelByStatus[m.status]}\n\t\t\t\t</Badge>\n\t\t\t</span>\n\t\t),\n\t\tdescription: m.description,\n\t\ttimestamp: m.dueDate ? `${strings.dueOn} ${m.dueDate}` : undefined,\n\t\ticon: STATUS_ICON[m.status],\n\t\tstatus: STATUS_TO_TIMELINE[m.status],\n\t\tchildren:\n\t\t\tm.status === 'in_progress' && typeof m.progress === 'number' ? (\n\t\t\t\t<div className=\"space-y-space-xs\">\n\t\t\t\t\t<div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn('h-full rounded-full bg-primary transition-[width] duration-300')}\n\t\t\t\t\t\t\tstyle={{ width: `${Math.max(0, Math.min(100, m.progress))}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Percent value={Math.round(m.progress)} scaled size=\"xs\" type=\"secondary\" align=\"left\" />\n\t\t\t\t</div>\n\t\t\t) : undefined,\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"milestones-timeline\"\n\t\t\tdata-slot=\"milestones-timeline\"\n\t\t\tclassName={cn('milestones-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nMilestonesTimeline.displayName = 'MilestonesTimeline';\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ //#region src/lib/track-recipes.ts
2
+ var e = {
3
+ sm: "h-[calc(0.25rem*var(--space-scale)+2px)]",
4
+ md: "h-[calc(0.375rem*var(--space-scale)+2px)]",
5
+ lg: "h-[calc(0.5rem*var(--space-scale)+2px)]"
6
+ }, t = "data-[orientation=horizontal]:h-[calc(0.375rem*var(--space-scale)+2px)] data-[orientation=vertical]:w-[calc(0.375rem*var(--space-scale)+2px)]";
7
+ //#endregion
8
+ export { e as n, t };
9
+
10
+ //# sourceMappingURL=track-recipes-CDcKmndW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-recipes-CDcKmndW.js","names":["trackHeightClasses","sliderTrackThickness"],"sources":["../src/lib/track-recipes.ts"],"sourcesContent":["import type { ComponentScale } from './component-vocabulary';\n\n/** Shared progress/slider track thickness, derived from spacing; no public knobs. */\nexport const trackHeightClasses: Record<ComponentScale, string> = {\n sm: 'h-[calc(0.25rem*var(--space-scale)+2px)]',\n md: 'h-[calc(0.375rem*var(--space-scale)+2px)]',\n lg: 'h-[calc(0.5rem*var(--space-scale)+2px)]',\n};\nexport const sliderTrackThickness = 'data-[orientation=horizontal]:h-[calc(0.375rem*var(--space-scale)+2px)] data-[orientation=vertical]:w-[calc(0.375rem*var(--space-scale)+2px)]';\n"],"mappings":";AAGA,IAAaA,IAAqD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GACaC,IAAuB"}
@@ -1,13 +1,13 @@
1
1
  "use client";
2
- import { p as e } from "./ui-provider-DRPn3qNl.js";
3
- import { t } from "./utils-BvH9PSmq.js";
4
- import { a as n } from "./text.styles-Q4sGAIgA.js";
5
- import { a as r } from "./typography-BxQgiZyw.js";
6
- import { t as i } from "./button-BZyfTvwm.js";
2
+ import { p as e } from "./ui-provider-D2_TeLqw.js";
3
+ import { t } from "./utils-Cospvlj1.js";
4
+ import { s as n } from "./typography-CAr3dQhX.js";
5
+ import { a as r } from "./text.styles-g4He6UIW.js";
6
+ import { t as i } from "./button-R9CCoH7A.js";
7
7
  import { n as a } from "./icon-size-B6PVwjbC.js";
8
8
  import { t as ee } from "./row-recipes-DL8n7t_b.js";
9
- import { t as o } from "./collection-content-D6S8cv_n.js";
10
- import { n as s, r as te, t as c } from "./navigation-row-recipes-DQEXQcqY.js";
9
+ import { t as o } from "./collection-content-Ys-OZOkY.js";
10
+ import { n as s, r as te, t as c } from "./navigation-row-recipes-DlU-4QYO.js";
11
11
  import { useLayoutEffect as l, useMemo as u, useRef as d, useState as f } from "react";
12
12
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
13
13
  import { Check as h, ChevronDown as g, ChevronRight as _ } from "lucide-react";
@@ -87,7 +87,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
87
87
  } else return;
88
88
  e.preventDefault();
89
89
  }
90
- function $(e, r) {
90
+ function $(e, n) {
91
91
  return e.map((s, l) => {
92
92
  let u = D || !!z.get(s.value)?.disabled, d = y(s), f = L.includes(s.value), v = R.includes(s.value);
93
93
  return /* @__PURE__ */ m("div", {
@@ -98,7 +98,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
98
98
  },
99
99
  role: "treeitem",
100
100
  "aria-label": s.label,
101
- "aria-level": r,
101
+ "aria-level": n,
102
102
  "aria-posinset": l + 1,
103
103
  "aria-setsize": e.length,
104
104
  title: !Y && typeof s.description == "string" ? s.description : void 0,
@@ -116,7 +116,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
116
116
  children: [/* @__PURE__ */ m("div", {
117
117
  "data-selected": v || void 0,
118
118
  "data-disabled": u || void 0,
119
- className: t("tree--item flex w-full items-center cursor-default outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring data-selected:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50", te, Y ? ee[O] : r === 1 ? J.height : J.childHeight, n[de ?? "sm"]),
119
+ className: t("tree--item flex w-full items-center cursor-default outline-none hover:bg-accent/50 hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring data-selected:bg-accent data-selected:hover:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50", te, Y ? ee[O] : n === 1 ? J.height : J.childHeight, r[de ?? "sm"]),
120
120
  children: [/* @__PURE__ */ p("span", {
121
121
  className: "tree--caret relative size-icon-sm shrink-0",
122
122
  children: d && /* @__PURE__ */ p(i, {
@@ -160,7 +160,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
160
160
  marginInlineStart: Math.max(0, A) / 2,
161
161
  paddingInlineStart: Math.max(0, A) / 2
162
162
  },
163
- children: $(s.children, r + 1)
163
+ children: $(s.children, n + 1)
164
164
  })]
165
165
  }, s.value);
166
166
  });
@@ -173,7 +173,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
173
173
  "aria-disabled": D || void 0,
174
174
  onKeyDown: fe,
175
175
  className: t("tree--component flex min-w-0 flex-col", J.gap, ae),
176
- children: b.length ? $(b, 1) : /* @__PURE__ */ p(r, {
176
+ children: b.length ? $(b, 1) : /* @__PURE__ */ p(n, {
177
177
  type: "secondary",
178
178
  children: M
179
179
  })
@@ -182,4 +182,4 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: re = [], onExpa
182
182
  //#endregion
183
183
  export { v as n, y as r, b as t };
184
184
 
185
- //# sourceMappingURL=tree-BtmYyMZV.js.map
185
+ //# sourceMappingURL=tree-BotPlyiD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-BtmYyMZV.js","names":["DisclosureButton","useTypographyConfig","textSizes","Text","Button","ICON_DESCENDANT_SIZE_CLASSNAMES","rowBlockPaddingClasses","CollectionContent","navigationRowDensityRecipes","navigationRowInlineClasses","navigationChildInsetClasses","indexHierarchy","index","visit","node","nodes","entry","path","disabled","items","visibleHierarchy","open","expanded","isBranch","Tree","props","localExpanded","setLocalExpanded","useState","defaultExpandedValues","localSelected","setLocalSelected","defaultSelectedValues","expandedValues","selected","selectedValues","useMemo","visible","focused","setFocused","visibleValues","visibleAncestor","focusValue","refs","useRef","focusedElement","search","recipe","density","rich","rowLayout","previous","focus","value","toggle","next","onExpandedValuesChange","select","branchActivation","selectionMode","onSelectedValuesChange","keyboard","onKeyDown","event","position","rtl","forward","backward","item","now","term","letter","rows","blocked","branch","checked","element","level","cn","defaultTextSize","strings","ChevronDown","ChevronRight","renderLabel","Check","showGuides","indent","className","empty"],"sources":["../src/components/base/tree/hierarchy.ts","../src/components/base/tree/tree.tsx"],"sourcesContent":["import type { TreeNode } from './tree.types';\nexport interface HierarchyEntry<T> { node: TreeNode<T>; parent: string | null; path: TreeNode<T>[]; disabled: boolean }\n/** One canonical traversal for tree focus, cascader paths and local search. */\nexport function indexHierarchy<T>(items: readonly TreeNode<T>[]): Map<string, HierarchyEntry<T>> {\n const index = new Map<string, HierarchyEntry<T>>();\n function visit(nodes: readonly TreeNode<T>[], path: TreeNode<T>[], disabled: boolean) {\n for (const node of nodes) {\n if (index.has(node.value)) throw new Error(`Hierarchy values must be unique: ${node.value}`);\n const entry = { node, parent: path.at(-1)?.value ?? null, path: [...path, node], disabled: disabled || !!node.disabled };\n index.set(node.value, entry);\n visit(node.children ?? [], entry.path, entry.disabled);\n }\n }\n visit(items, [], false);\n return index;\n}\nexport function visibleHierarchy<T>(index: Map<string, HierarchyEntry<T>>, expanded: readonly string[]) {\n const open = new Set(expanded);\n return [...index.values()].filter(entry => entry.path.slice(0, -1).every(node => open.has(node.value)));\n}\nexport function isBranch(node: TreeNode) { return !!(node.hasChildren || node.children?.length); }\n","import { useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { Check, ChevronDown, ChevronRight } from 'lucide-react';\nimport { Button as DisclosureButton } from '../../ui/button';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useTypographyConfig } from '../../../lib/ui-provider';\nimport { textSizes } from '../../typography/text.styles';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../display/icon-size';\nimport { navigationChildInsetClasses, navigationRowDensityRecipes, navigationRowInlineClasses } from '../../../lib/navigation-row-recipes';\nimport { rowBlockPaddingClasses } from '../../../lib/row-recipes';\nimport { indexHierarchy, isBranch, visibleHierarchy } from './hierarchy';\nimport type { TreeNode, TreeProps } from './tree.types';\n\n/** Accessible data-driven hierarchy. Focus moves independently from selection. */\nexport function Tree<T = unknown>({items, expandedValues, defaultExpandedValues = [], onExpandedValuesChange, selectedValues, defaultSelectedValues = [], onSelectedValuesChange, selectionMode = 'single', branchActivation = 'select', disabled = false, density = 'compact', rowLayout = 'line', indent, showGuides = true, empty = 'No items', strings, renderLabel, className, onKeyDown, ...props}: TreeProps<T>) {\n const [localExpanded, setLocalExpanded] = useState<readonly string[]>(defaultExpandedValues);\n const [localSelected, setLocalSelected] = useState<readonly string[]>(defaultSelectedValues);\n const expanded = expandedValues ?? localExpanded;\n const selected = selectedValues ?? localSelected;\n const index = useMemo(() => indexHierarchy(items), [items]);\n const visible = visibleHierarchy(index, expanded).filter(entry => !entry.disabled);\n const [focused, setFocused] = useState<string | null>(null);\n const visibleValues = new Set(visible.map(entry => entry.node.value));\n const visibleAncestor = focused === null ? undefined : index.get(focused)?.path.slice(0, -1).reverse().find(node => visibleValues.has(node.value))?.value;\n const focusValue = focused !== null && visibleValues.has(focused) ? focused : visibleAncestor ?? visible.find(entry => selected.includes(entry.node.value))?.node.value ?? visible[0]?.node.value;\n const refs = useRef(new Map<string, HTMLDivElement>());\n const focusedElement = useRef<HTMLDivElement | null>(null);\n const search = useRef({ text: '', time: 0 });\n const { defaultTextSize } = useTypographyConfig();\n const recipe = navigationRowDensityRecipes[density];\n const rich = rowLayout === 'rich';\n useLayoutEffect(() => {\n const previous = focusedElement.current;\n if (disabled || focusValue === undefined || !previous) return;\n // Keep focus inside a changing hierarchy, but do not reclaim it from another control.\n if (previous === document.activeElement || (!previous.isConnected && document.activeElement === document.body)) refs.current.get(focusValue)?.focus();\n }, [focusValue, disabled]);\n function focus(value: string | undefined) { if (value !== undefined) { setFocused(value); refs.current.get(value)?.focus(); } }\n function toggle(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n const next = expanded.includes(node.value) ? expanded.filter(value => value !== node.value) : [...expanded, node.value];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, node);\n }\n function select(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n if (branchActivation === 'toggle' && isBranch(node)) { toggle(node); return; }\n if (selectionMode === 'none') return;\n const next = selectionMode === 'multiple' ? selected.includes(node.value) ? selected.filter(value => value !== node.value) : [...selected, node.value] : [node.value];\n if (selectedValues === undefined) setLocalSelected(next);\n onSelectedValuesChange?.(next, node);\n }\n function keyboard(event: KeyboardEvent<HTMLDivElement>) {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled || (event.target as HTMLElement).closest('button') || (event.target as HTMLElement).closest('[role=tree]') !== event.currentTarget) return;\n const position = visible.findIndex(entry => entry.node.value === focused);\n const entry = index.get(focused ?? focusValue ?? '');\n if (!entry) return;\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === 'ArrowDown') focus(visible[Math.min(position + 1, visible.length - 1)]?.node.value);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(position - 1, 0)]?.node.value);\n else if (event.key === 'Home') focus(visible[0]?.node.value);\n else if (event.key === 'End') focus(visible.at(-1)?.node.value);\n else if (event.key === forward && isBranch(entry.node)) {\n if (!expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.node.children?.find(node => !index.get(node.value)?.disabled)?.value);\n } else if (event.key === backward) {\n if (isBranch(entry.node) && expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.parent ?? undefined);\n } else if (event.key === 'Enter' || event.key === ' ') select(entry.node);\n else if (event.key === '*') {\n const next = [...new Set([...expanded, ...[...index.values()].filter(item => item.parent === entry.parent && !item.disabled && isBranch(item.node)).map(item => item.node.value)])];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, entry.node);\n } else if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const now = Date.now();\n search.current.text = (now - search.current.time < 500 ? search.current.text : '') + event.key.toLocaleLowerCase();\n search.current.time = now;\n const term = [...search.current.text].every(letter => letter === event.key.toLocaleLowerCase()) ? event.key.toLocaleLowerCase() : search.current.text;\n const rotated = [...visible.slice(position + 1), ...visible.slice(0, position + 1)];\n focus(rotated.find(item => item.node.label.toLocaleLowerCase().startsWith(term))?.node.value);\n } else return;\n event.preventDefault();\n }\n function rows(nodes: readonly TreeNode<T>[], level: number) { return nodes.map((node, position) => {\n const blocked = disabled || !!index.get(node.value)?.disabled;\n const branch = isBranch(node);\n const open = expanded.includes(node.value);\n const checked = selected.includes(node.value);\n return <div key={node.value} data-tree-value={node.value} className=\"tree--branch min-w-0 outline-none [&:focus-visible>.tree--item]:ring-2 [&:focus-visible>.tree--item]:ring-ring\" ref={element => { if (element) refs.current.set(node.value, element); else refs.current.delete(node.value); }}\n role=\"treeitem\" aria-label={node.label} aria-level={level} aria-posinset={position + 1} aria-setsize={nodes.length}\n title={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-description={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-expanded={branch ? open : undefined} aria-selected={selectionMode !== 'none' && !(branch && branchActivation === 'toggle') ? checked : undefined} aria-disabled={blocked || undefined}\n tabIndex={!blocked && focusValue === node.value ? 0 : -1}\n onFocus={event => { if (event.target === event.currentTarget) { focusedElement.current = event.currentTarget; setFocused(node.value); } }}\n onClick={event => { if (!blocked && (event.target as HTMLElement).closest('[role=treeitem]') === event.currentTarget) { focus(node.value); select(node); } }}>\n <div data-selected={checked || undefined} data-disabled={blocked || undefined}\n className={cn('tree--item flex w-full items-center cursor-default outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring data-selected:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50', navigationRowInlineClasses, rich ? rowBlockPaddingClasses[density] : level === 1 ? recipe.height : recipe.childHeight, textSizes[defaultTextSize ?? 'sm'])}\n >\n <span className=\"tree--caret relative size-icon-sm shrink-0\">\n {branch && <DisclosureButton variant=\"ghost\" size=\"icon-xs\" className=\"tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2\" tabIndex={-1} disabled={blocked} aria-label={open ? strings?.collapse?.(node.label) ?? `Collapse ${node.label}` : strings?.expand?.(node.label) ?? `Expand ${node.label}`} onClick={event => {event.stopPropagation(); focus(node.value); toggle(node);}}>\n {open ? <ChevronDown aria-hidden=\"true\" className=\"size-icon-sm\" /> : <ChevronRight aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" />}\n </DisclosureButton>}\n </span>\n <CollectionContent label={renderLabel?.(node) ?? node.label} description={rich ? node.description : undefined} leading={node.icon} leadingClassName={ICON_DESCENDANT_SIZE_CLASSNAMES.md} leadingDecorative wrap={rich}\n bodyClassName={rich ? undefined : 'overflow-hidden'}\n trailing={node.trailing != null || (checked && selectionMode === 'multiple') ? <span className=\"inline-flex shrink-0 items-center gap-space-sm\">{node.trailing}{checked && selectionMode === 'multiple' && <Check aria-hidden=\"true\" className=\"size-icon shrink-0\" />}</span> : undefined} />\n </div>\n {branch && open && !!node.children?.length && <div role=\"group\" className={cn('tree--group flex flex-col border-s', navigationChildInsetClasses, recipe.childGap, showGuides ? 'border-border' : 'border-transparent')}\n style={indent === undefined ? undefined : { marginInlineStart: Math.max(0, indent) / 2, paddingInlineStart: Math.max(0, indent) / 2 }}>{rows(node.children, level + 1)}</div>}\n </div>;\n }); }\n return <div {...props} role=\"tree\" data-row-layout={rowLayout} aria-multiselectable={selectionMode === 'multiple' || undefined} aria-disabled={disabled || undefined} onKeyDown={keyboard} className={cn('tree--component flex min-w-0 flex-col', recipe.gap, className)}>\n {items.length ? rows(items, 1) : <Text type=\"secondary\">{empty}</Text>}\n </div>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree-BotPlyiD.js","names":["DisclosureButton","useTypographyConfig","Text","textSizes","Button","ICON_DESCENDANT_SIZE_CLASSNAMES","rowBlockPaddingClasses","CollectionContent","navigationRowDensityRecipes","navigationRowInlineClasses","navigationChildInsetClasses","indexHierarchy","index","visit","node","nodes","entry","path","disabled","items","visibleHierarchy","open","expanded","isBranch","Tree","props","localExpanded","setLocalExpanded","useState","defaultExpandedValues","localSelected","setLocalSelected","defaultSelectedValues","expandedValues","selected","selectedValues","useMemo","visible","focused","setFocused","visibleValues","visibleAncestor","focusValue","refs","useRef","focusedElement","search","recipe","density","rich","rowLayout","previous","focus","value","toggle","next","onExpandedValuesChange","select","branchActivation","selectionMode","onSelectedValuesChange","keyboard","onKeyDown","event","position","rtl","forward","backward","item","now","term","letter","rows","blocked","branch","checked","element","level","cn","defaultTextSize","strings","ChevronDown","ChevronRight","renderLabel","Check","showGuides","indent","className","empty"],"sources":["../src/components/base/tree/hierarchy.ts","../src/components/base/tree/tree.tsx"],"sourcesContent":["import type { TreeNode } from './tree.types';\nexport interface HierarchyEntry<T> { node: TreeNode<T>; parent: string | null; path: TreeNode<T>[]; disabled: boolean }\n/** One canonical traversal for tree focus, cascader paths and local search. */\nexport function indexHierarchy<T>(items: readonly TreeNode<T>[]): Map<string, HierarchyEntry<T>> {\n const index = new Map<string, HierarchyEntry<T>>();\n function visit(nodes: readonly TreeNode<T>[], path: TreeNode<T>[], disabled: boolean) {\n for (const node of nodes) {\n if (index.has(node.value)) throw new Error(`Hierarchy values must be unique: ${node.value}`);\n const entry = { node, parent: path.at(-1)?.value ?? null, path: [...path, node], disabled: disabled || !!node.disabled };\n index.set(node.value, entry);\n visit(node.children ?? [], entry.path, entry.disabled);\n }\n }\n visit(items, [], false);\n return index;\n}\nexport function visibleHierarchy<T>(index: Map<string, HierarchyEntry<T>>, expanded: readonly string[]) {\n const open = new Set(expanded);\n return [...index.values()].filter(entry => entry.path.slice(0, -1).every(node => open.has(node.value)));\n}\nexport function isBranch(node: TreeNode) { return !!(node.hasChildren || node.children?.length); }\n","import { useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { Check, ChevronDown, ChevronRight } from 'lucide-react';\nimport { Button as DisclosureButton } from '../../ui/button';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useTypographyConfig } from '../../../lib/ui-provider';\nimport { textSizes } from '../../typography/text.styles';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../display/icon-size';\nimport { navigationChildInsetClasses, navigationRowDensityRecipes, navigationRowInlineClasses } from '../../../lib/navigation-row-recipes';\nimport { rowBlockPaddingClasses } from '../../../lib/row-recipes';\nimport { indexHierarchy, isBranch, visibleHierarchy } from './hierarchy';\nimport type { TreeNode, TreeProps } from './tree.types';\n\n/** Accessible data-driven hierarchy. Focus moves independently from selection. */\nexport function Tree<T = unknown>({items, expandedValues, defaultExpandedValues = [], onExpandedValuesChange, selectedValues, defaultSelectedValues = [], onSelectedValuesChange, selectionMode = 'single', branchActivation = 'select', disabled = false, density = 'compact', rowLayout = 'line', indent, showGuides = true, empty = 'No items', strings, renderLabel, className, onKeyDown, ...props}: TreeProps<T>) {\n const [localExpanded, setLocalExpanded] = useState<readonly string[]>(defaultExpandedValues);\n const [localSelected, setLocalSelected] = useState<readonly string[]>(defaultSelectedValues);\n const expanded = expandedValues ?? localExpanded;\n const selected = selectedValues ?? localSelected;\n const index = useMemo(() => indexHierarchy(items), [items]);\n const visible = visibleHierarchy(index, expanded).filter(entry => !entry.disabled);\n const [focused, setFocused] = useState<string | null>(null);\n const visibleValues = new Set(visible.map(entry => entry.node.value));\n const visibleAncestor = focused === null ? undefined : index.get(focused)?.path.slice(0, -1).reverse().find(node => visibleValues.has(node.value))?.value;\n const focusValue = focused !== null && visibleValues.has(focused) ? focused : visibleAncestor ?? visible.find(entry => selected.includes(entry.node.value))?.node.value ?? visible[0]?.node.value;\n const refs = useRef(new Map<string, HTMLDivElement>());\n const focusedElement = useRef<HTMLDivElement | null>(null);\n const search = useRef({ text: '', time: 0 });\n const { defaultTextSize } = useTypographyConfig();\n const recipe = navigationRowDensityRecipes[density];\n const rich = rowLayout === 'rich';\n useLayoutEffect(() => {\n const previous = focusedElement.current;\n if (disabled || focusValue === undefined || !previous) return;\n // Keep focus inside a changing hierarchy, but do not reclaim it from another control.\n if (previous === document.activeElement || (!previous.isConnected && document.activeElement === document.body)) refs.current.get(focusValue)?.focus();\n }, [focusValue, disabled]);\n function focus(value: string | undefined) { if (value !== undefined) { setFocused(value); refs.current.get(value)?.focus(); } }\n function toggle(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n const next = expanded.includes(node.value) ? expanded.filter(value => value !== node.value) : [...expanded, node.value];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, node);\n }\n function select(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n if (branchActivation === 'toggle' && isBranch(node)) { toggle(node); return; }\n if (selectionMode === 'none') return;\n const next = selectionMode === 'multiple' ? selected.includes(node.value) ? selected.filter(value => value !== node.value) : [...selected, node.value] : [node.value];\n if (selectedValues === undefined) setLocalSelected(next);\n onSelectedValuesChange?.(next, node);\n }\n function keyboard(event: KeyboardEvent<HTMLDivElement>) {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled || (event.target as HTMLElement).closest('button') || (event.target as HTMLElement).closest('[role=tree]') !== event.currentTarget) return;\n const position = visible.findIndex(entry => entry.node.value === focused);\n const entry = index.get(focused ?? focusValue ?? '');\n if (!entry) return;\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === 'ArrowDown') focus(visible[Math.min(position + 1, visible.length - 1)]?.node.value);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(position - 1, 0)]?.node.value);\n else if (event.key === 'Home') focus(visible[0]?.node.value);\n else if (event.key === 'End') focus(visible.at(-1)?.node.value);\n else if (event.key === forward && isBranch(entry.node)) {\n if (!expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.node.children?.find(node => !index.get(node.value)?.disabled)?.value);\n } else if (event.key === backward) {\n if (isBranch(entry.node) && expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.parent ?? undefined);\n } else if (event.key === 'Enter' || event.key === ' ') select(entry.node);\n else if (event.key === '*') {\n const next = [...new Set([...expanded, ...[...index.values()].filter(item => item.parent === entry.parent && !item.disabled && isBranch(item.node)).map(item => item.node.value)])];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, entry.node);\n } else if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const now = Date.now();\n search.current.text = (now - search.current.time < 500 ? search.current.text : '') + event.key.toLocaleLowerCase();\n search.current.time = now;\n const term = [...search.current.text].every(letter => letter === event.key.toLocaleLowerCase()) ? event.key.toLocaleLowerCase() : search.current.text;\n const rotated = [...visible.slice(position + 1), ...visible.slice(0, position + 1)];\n focus(rotated.find(item => item.node.label.toLocaleLowerCase().startsWith(term))?.node.value);\n } else return;\n event.preventDefault();\n }\n function rows(nodes: readonly TreeNode<T>[], level: number) { return nodes.map((node, position) => {\n const blocked = disabled || !!index.get(node.value)?.disabled;\n const branch = isBranch(node);\n const open = expanded.includes(node.value);\n const checked = selected.includes(node.value);\n return <div key={node.value} data-tree-value={node.value} className=\"tree--branch min-w-0 outline-none [&:focus-visible>.tree--item]:ring-2 [&:focus-visible>.tree--item]:ring-ring\" ref={element => { if (element) refs.current.set(node.value, element); else refs.current.delete(node.value); }}\n role=\"treeitem\" aria-label={node.label} aria-level={level} aria-posinset={position + 1} aria-setsize={nodes.length}\n title={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-description={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-expanded={branch ? open : undefined} aria-selected={selectionMode !== 'none' && !(branch && branchActivation === 'toggle') ? checked : undefined} aria-disabled={blocked || undefined}\n tabIndex={!blocked && focusValue === node.value ? 0 : -1}\n onFocus={event => { if (event.target === event.currentTarget) { focusedElement.current = event.currentTarget; setFocused(node.value); } }}\n onClick={event => { if (!blocked && (event.target as HTMLElement).closest('[role=treeitem]') === event.currentTarget) { focus(node.value); select(node); } }}>\n <div data-selected={checked || undefined} data-disabled={blocked || undefined}\n className={cn('tree--item flex w-full items-center cursor-default outline-none hover:bg-accent/50 hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring data-selected:bg-accent data-selected:hover:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50', navigationRowInlineClasses, rich ? rowBlockPaddingClasses[density] : level === 1 ? recipe.height : recipe.childHeight, textSizes[defaultTextSize ?? 'sm'])}\n >\n <span className=\"tree--caret relative size-icon-sm shrink-0\">\n {branch && <DisclosureButton variant=\"ghost\" size=\"icon-xs\" className=\"tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2\" tabIndex={-1} disabled={blocked} aria-label={open ? strings?.collapse?.(node.label) ?? `Collapse ${node.label}` : strings?.expand?.(node.label) ?? `Expand ${node.label}`} onClick={event => {event.stopPropagation(); focus(node.value); toggle(node);}}>\n {open ? <ChevronDown aria-hidden=\"true\" className=\"size-icon-sm\" /> : <ChevronRight aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" />}\n </DisclosureButton>}\n </span>\n <CollectionContent label={renderLabel?.(node) ?? node.label} description={rich ? node.description : undefined} leading={node.icon} leadingClassName={ICON_DESCENDANT_SIZE_CLASSNAMES.md} leadingDecorative wrap={rich}\n bodyClassName={rich ? undefined : 'overflow-hidden'}\n trailing={node.trailing != null || (checked && selectionMode === 'multiple') ? <span className=\"inline-flex shrink-0 items-center gap-space-sm\">{node.trailing}{checked && selectionMode === 'multiple' && <Check aria-hidden=\"true\" className=\"size-icon shrink-0\" />}</span> : undefined} />\n </div>\n {branch && open && !!node.children?.length && <div role=\"group\" className={cn('tree--group flex flex-col border-s', navigationChildInsetClasses, recipe.childGap, showGuides ? 'border-border' : 'border-transparent')}\n style={indent === undefined ? undefined : { marginInlineStart: Math.max(0, indent) / 2, paddingInlineStart: Math.max(0, indent) / 2 }}>{rows(node.children, level + 1)}</div>}\n </div>;\n }); }\n return <div {...props} role=\"tree\" data-row-layout={rowLayout} aria-multiselectable={selectionMode === 'multiple' || undefined} aria-disabled={disabled || undefined} onKeyDown={keyboard} className={cn('tree--component flex min-w-0 flex-col', recipe.gap, className)}>\n {items.length ? rows(items, 1) : <Text type=\"secondary\">{empty}</Text>}\n </div>;\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { t as e } from "../rich-text-DlxDOtf4.js";
2
+ import { t as e } from "../rich-text-j-FGAeZW.js";
3
3
  export { e as RichText };