themelia-react-ui 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (640) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/README.md +67 -16
  3. package/dist/{accordion-B-5Focs8.js → accordion-CQXVcd7Q.js} +15 -15
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CCIXb2A1.js +68 -0
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-2PQ2fItc.js} +206 -215
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-BE_j8-AT.js} +11 -10
  12. package/dist/app-shell-BE_j8-AT.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-q69dlt5Y.js} +14 -14
  14. package/dist/attachment-q69dlt5Y.js.map +1 -0
  15. package/dist/auth-M3vGMgDR.js +723 -0
  16. package/dist/auth-M3vGMgDR.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-djdaaQ_s.js} +15 -13
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +33 -35
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +246 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +94 -92
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +53 -53
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +84 -82
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +7 -7
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +228 -219
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +182 -212
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +665 -620
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +2 -2
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1439 -1553
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +88 -97
  84. package/dist/blocks/planning.js.map +1 -1
  85. package/dist/blocks/timelines.js +1 -1
  86. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BG_FfMK4.js} +10 -9
  87. package/dist/breadcrumbs-BG_FfMK4.js.map +1 -0
  88. package/dist/button-BS3KDg00.js +674 -0
  89. package/dist/button-BS3KDg00.js.map +1 -0
  90. package/dist/{button-BS6l5JUw.js → button-R9CCoH7A.js} +3 -3
  91. package/dist/button-R9CCoH7A.js.map +1 -0
  92. package/dist/buttons-DS0ZIwJ_.js +99 -0
  93. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  94. package/dist/{cards-Cum56XOF.js → cards-QoJ4syG9.js} +12 -12
  95. package/dist/{cards-Cum56XOF.js.map → cards-QoJ4syG9.js.map} +1 -1
  96. package/dist/chart-DwYRKKc-.js +152 -0
  97. package/dist/chart-DwYRKKc-.js.map +1 -0
  98. package/dist/checkbox-B7ygNTYp.js +35 -0
  99. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  100. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  101. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  102. package/dist/{code-block-xHKbAJDj.js → code-block-CD0B7M93.js} +27 -27
  103. package/dist/code-block-CD0B7M93.js.map +1 -0
  104. package/dist/{collapsible-DsnktFNv.js → collapsible-oMUGM4tr.js} +3 -3
  105. package/dist/{collapsible-DsnktFNv.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  106. package/dist/{collection-content-C4fthJV_.js → collection-content-Ys-OZOkY.js} +3 -3
  107. package/dist/{collection-content-C4fthJV_.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  108. package/dist/combobox-6dvVny2q.js +272 -0
  109. package/dist/combobox-6dvVny2q.js.map +1 -0
  110. package/dist/combobox-CB7039j7.js +865 -0
  111. package/dist/combobox-CB7039j7.js.map +1 -0
  112. package/dist/{command-C0xe7u9B.js → command-kPMPjIxJ.js} +35 -31
  113. package/dist/command-kPMPjIxJ.js.map +1 -0
  114. package/dist/{comments-DviPLnwy.js → comments-You0Bzbr.js} +434 -409
  115. package/dist/comments-You0Bzbr.js.map +1 -0
  116. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  118. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  119. package/dist/components/base/badge/badge.d.ts +1 -1
  120. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  121. package/dist/components/base/buttons/base-button.d.ts +7 -0
  122. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  123. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  124. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  125. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  126. package/dist/components/base/buttons/text-button.d.ts +2 -2
  127. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  128. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  129. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  130. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  131. package/dist/components/base/carousel/carousel.d.ts +3 -1
  132. package/dist/components/base/chart/chart.d.ts +7 -7
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  135. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  136. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  137. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  138. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  139. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  140. package/dist/components/base/date-pickers/datepicker.types.d.ts +16 -3
  141. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  142. package/dist/components/base/display/content-block.d.ts +4 -2
  143. package/dist/components/base/display/date-block.d.ts +1 -1
  144. package/dist/components/base/display/dialog.d.ts +12 -5
  145. package/dist/components/base/display/surface-title.d.ts +6 -1
  146. package/dist/components/base/feedback/alert.d.ts +1 -1
  147. package/dist/components/base/feedback/state-display.d.ts +5 -4
  148. package/dist/components/base/forms/form-field.d.ts +1 -0
  149. package/dist/components/base/forms/form-sizing.d.ts +35 -3
  150. package/dist/components/base/forms/workflow.d.ts +2 -0
  151. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  152. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  153. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  154. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  155. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  156. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  157. package/dist/components/base/navigation/tabs.d.ts +3 -5
  158. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  159. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  160. package/dist/components/base/sheet/index.d.ts +29 -1
  161. package/dist/components/base/sheet/sheet.d.ts +14 -5
  162. package/dist/components/base/spinner/spinner.d.ts +3 -2
  163. package/dist/components/base/structure/structure.types.d.ts +1 -1
  164. package/dist/components/base/table/index.d.ts +1 -1
  165. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  166. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  167. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  168. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  169. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  170. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  171. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  172. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  173. package/dist/components/blocks/analytics/index.d.ts +1 -1
  174. package/dist/components/blocks/analytics/types.d.ts +1 -1
  175. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  176. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  177. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  178. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  180. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  181. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  182. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  183. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  184. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  185. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  186. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  187. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  188. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  190. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  191. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  192. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  193. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  194. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  195. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  196. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  197. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  198. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  199. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  200. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  201. package/dist/components/features/media-library/media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  203. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  204. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  205. package/dist/components/features/overlays/drawer.d.ts +1 -1
  206. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  207. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  208. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  209. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  210. package/dist/components/features/overlays/overlays.types.d.ts +46 -22
  211. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  212. package/dist/components/features/products/partials/index.d.ts +1 -1
  213. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  214. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  215. package/dist/components/features/products/products.types.d.ts +2 -1
  216. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  217. package/dist/components/features/table/data-table.d.ts +1 -1
  218. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  219. package/dist/components/features/table/table.types.d.ts +1 -1
  220. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  221. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  222. package/dist/components/layout/page/index.d.ts +1 -1
  223. package/dist/components/layout/page/page.d.ts +0 -1
  224. package/dist/components/layout/page/page.types.d.ts +62 -6
  225. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  226. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  227. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  228. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  229. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  230. package/dist/components/primitives/date.d.ts +16 -3
  231. package/dist/components/primitives/dimensions.d.ts +6 -0
  232. package/dist/components/primitives/duration.d.ts +6 -0
  233. package/dist/components/primitives/file-size.d.ts +6 -0
  234. package/dist/components/primitives/index.d.ts +1 -1
  235. package/dist/components/primitives/initials.d.ts +11 -2
  236. package/dist/components/primitives/link.d.ts +7 -0
  237. package/dist/components/primitives/money.d.ts +29 -7
  238. package/dist/components/primitives/number.d.ts +17 -0
  239. package/dist/components/primitives/value-typography.d.ts +54 -0
  240. package/dist/components/primitives/value.d.ts +31 -6
  241. package/dist/components/typography/heading.d.ts +13 -2
  242. package/dist/components/typography/index.d.ts +1 -1
  243. package/dist/components/typography/label.d.ts +3 -0
  244. package/dist/components/typography/running-text.d.ts +12 -0
  245. package/dist/components/typography/text-link.d.ts +23 -1
  246. package/dist/components/typography/text.d.ts +12 -0
  247. package/dist/components/typography/text.styles.d.ts +37 -5
  248. package/dist/components/ui/button.d.ts +1 -1
  249. package/dist/components/ui/checkbox.d.ts +5 -0
  250. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  251. package/dist/components/ui/popover.d.ts +1 -1
  252. package/dist/components/ui/select.d.ts +3 -1
  253. package/dist/components/ui/sidebar.d.ts +1 -1
  254. package/dist/components/ui/switch.d.ts +5 -0
  255. package/dist/components/ui/table.d.ts +2 -1
  256. package/dist/container.recipes-D9t8MHR3.js +27 -0
  257. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  258. package/dist/{containers-6s-ucRQQ.js → containers-D_L4mTVb.js} +34 -57
  259. package/dist/containers-D_L4mTVb.js.map +1 -0
  260. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  261. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  262. package/dist/{copyable-B7SBXJMr.js → copyable-DDjTeW_j.js} +6 -6
  263. package/dist/{copyable-B7SBXJMr.js.map → copyable-DDjTeW_j.js.map} +1 -1
  264. package/dist/data-display-3xWQUnMA.js +1335 -0
  265. package/dist/data-display-3xWQUnMA.js.map +1 -0
  266. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  267. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  268. package/dist/date-pickers-CnFCb0n2.js +174 -0
  269. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  270. package/dist/date-uf3z37Nm.js +144 -0
  271. package/dist/date-uf3z37Nm.js.map +1 -0
  272. package/dist/{display-CFM5myut.js → display-DrdvPwF0.js} +25 -25
  273. package/dist/display-DrdvPwF0.js.map +1 -0
  274. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-CURh59jb.js} +22 -15
  275. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  276. package/dist/features/activities.js +177 -163
  277. package/dist/features/activities.js.map +1 -1
  278. package/dist/features/ai-chat.js +187 -183
  279. package/dist/features/ai-chat.js.map +1 -1
  280. package/dist/features/async-preview.js +9 -9
  281. package/dist/features/async-preview.js.map +1 -1
  282. package/dist/features/combobox.js +1 -1
  283. package/dist/features/comments.js +1 -1
  284. package/dist/features/data-view.js +25 -23
  285. package/dist/features/data-view.js.map +1 -1
  286. package/dist/features/email-composer/engine.js +1 -1
  287. package/dist/features/email-composer.js +353 -355
  288. package/dist/features/email-composer.js.map +1 -1
  289. package/dist/features/event-calendar.js +346 -354
  290. package/dist/features/event-calendar.js.map +1 -1
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +225 -227
  293. package/dist/features/global-search.js.map +1 -1
  294. package/dist/features/kanban.js +29 -29
  295. package/dist/features/kanban.js.map +1 -1
  296. package/dist/features/map.js +59 -58
  297. package/dist/features/map.js.map +1 -1
  298. package/dist/features/media-library.js +898 -900
  299. package/dist/features/media-library.js.map +1 -1
  300. package/dist/features/mentions.js +1 -1
  301. package/dist/features/overlays.js +1 -1
  302. package/dist/features/products.js +1412 -1444
  303. package/dist/features/products.js.map +1 -1
  304. package/dist/features/questionnaire.js +51 -49
  305. package/dist/features/questionnaire.js.map +1 -1
  306. package/dist/features/resource-assignment.js +103 -97
  307. package/dist/features/resource-assignment.js.map +1 -1
  308. package/dist/features/resource.js +13 -13
  309. package/dist/features/resource.js.map +1 -1
  310. package/dist/features/rich-text-editor.js +2 -2
  311. package/dist/features/schema-form.js +187 -183
  312. package/dist/features/schema-form.js.map +1 -1
  313. package/dist/features/suggestions.js +3 -3
  314. package/dist/features/sync.js +7 -7
  315. package/dist/features/sync.js.map +1 -1
  316. package/dist/features/table.js +1 -1
  317. package/dist/features/theme-tweaker.js +508 -503
  318. package/dist/features/theme-tweaker.js.map +1 -1
  319. package/dist/{feedback-DWUkgEjR.js → feedback-C7nR0UtT.js} +30 -31
  320. package/dist/feedback-C7nR0UtT.js.map +1 -0
  321. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  322. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  323. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-C-MFBX_8.js} +5 -5
  324. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  325. package/dist/{filters-BhsUtsxW.js → filters-Da-gNPsE.js} +760 -765
  326. package/dist/filters-Da-gNPsE.js.map +1 -0
  327. package/dist/{form-field-Bn7ZH1rA.js → form-field-VZRULhUK.js} +20 -12
  328. package/dist/form-field-VZRULhUK.js.map +1 -0
  329. package/dist/form-sizing-uWP4lzVh.js +126 -0
  330. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  331. package/dist/{forms-B7pzS25o.js → forms-DDeEnXSY.js} +38 -38
  332. package/dist/forms-DDeEnXSY.js.map +1 -0
  333. package/dist/forms-numeric-D3CO60IF.js +905 -0
  334. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  335. package/dist/{header-C59QZyxV.js → header-2ycNqGOR.js} +42 -37
  336. package/dist/header-2ycNqGOR.js.map +1 -0
  337. package/dist/{hooks-CM1Vp9Pe.js → hooks-DQ5SPwZw.js} +2 -2
  338. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  339. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  340. package/dist/http-CdEIHyQf.js.map +1 -0
  341. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-DKlaKXoo.js} +4 -4
  342. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  343. package/dist/index.js +2 -2
  344. package/dist/input-BoLm9Hks.js +20 -0
  345. package/dist/input-BoLm9Hks.js.map +1 -0
  346. package/dist/input-DhQdBnV3.js +255 -0
  347. package/dist/input-DhQdBnV3.js.map +1 -0
  348. package/dist/item-xzh8Df65.js +264 -0
  349. package/dist/item-xzh8Df65.js.map +1 -0
  350. package/dist/layout/app-shell.js +1 -1
  351. package/dist/layout/auth.js +1 -1
  352. package/dist/layout/containers.js +1 -1
  353. package/dist/layout/header.js +1 -1
  354. package/dist/layout/hooks.js +1 -1
  355. package/dist/layout/navigation.js +1 -1
  356. package/dist/layout/page.js +1 -1
  357. package/dist/layout/settings.js +1 -1
  358. package/dist/layout/sidebar.js +2 -2
  359. package/dist/layout/workspace.js +1 -1
  360. package/dist/layout.js +10 -10
  361. package/dist/lib/affordance-geometry.generated.d.ts +46 -10
  362. package/dist/lib/control-group-recipes.d.ts +22 -0
  363. package/dist/lib/field-affordance-recipes.d.ts +70 -2
  364. package/dist/lib/field-state-recipes.d.ts +6 -4
  365. package/dist/lib/format.d.ts +9 -0
  366. package/dist/lib/money-format.d.ts +30 -0
  367. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  368. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -2
  369. package/dist/lib/surface-recipes.d.ts +13 -8
  370. package/dist/lib/token-merge.generated.d.ts +144 -2
  371. package/dist/lib/track-recipes.d.ts +1 -1
  372. package/dist/lib/ui-provider/provider.d.ts +7 -2
  373. package/dist/lib/ui-provider/store.d.ts +6 -2
  374. package/dist/lib/ui-provider/types.d.ts +9 -4
  375. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  376. package/dist/lib/utils.js +1 -1
  377. package/dist/media-gallery-DQUQ0m3O.js +201 -0
  378. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  379. package/dist/{mentions-B8Ko-fhS.js → mentions-DwnO1hh4.js} +40 -39
  380. package/dist/{mentions-B8Ko-fhS.js.map → mentions-DwnO1hh4.js.map} +1 -1
  381. package/dist/message-YfFmbXNP.js +127 -0
  382. package/dist/message-YfFmbXNP.js.map +1 -0
  383. package/dist/{navigation-BUIn2Qxx.js → navigation-Cbp5V8gG.js} +27 -28
  384. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  385. package/dist/navigation-Cs1npsPm.js +300 -0
  386. package/dist/navigation-Cs1npsPm.js.map +1 -0
  387. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DlU-4QYO.js} +3 -3
  388. package/dist/navigation-row-recipes-DlU-4QYO.js.map +1 -0
  389. package/dist/number-CKRBYmZK.js +352 -0
  390. package/dist/number-CKRBYmZK.js.map +1 -0
  391. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  392. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  393. package/dist/overlays-DhZO7N-I.js +994 -0
  394. package/dist/overlays-DhZO7N-I.js.map +1 -0
  395. package/dist/page-C6R_8jFt.js +325 -0
  396. package/dist/page-C6R_8jFt.js.map +1 -0
  397. package/dist/{page-header-DQRa0jug.js → page-header-hUTzcRZX.js} +12 -12
  398. package/dist/page-header-hUTzcRZX.js.map +1 -0
  399. package/dist/{pagination-C29vvt3I.js → pagination-Cm0jqa3I.js} +21 -21
  400. package/dist/pagination-Cm0jqa3I.js.map +1 -0
  401. package/dist/{popover-CoLDEg19.js → popover-Dcv_9jxr.js} +23 -22
  402. package/dist/popover-Dcv_9jxr.js.map +1 -0
  403. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-DnRFKnHP.js} +6 -6
  404. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  405. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-wmbvL8Ah.js} +5 -5
  406. package/dist/popover.recipes-wmbvL8Ah.js.map +1 -0
  407. package/dist/primitives-BHrwQXFC.js +379 -0
  408. package/dist/primitives-BHrwQXFC.js.map +1 -0
  409. package/dist/primitives.js +5 -5
  410. package/dist/{progress-BOe8l_FZ.js → progress-Br9WTFya.js} +12 -11
  411. package/dist/progress-Br9WTFya.js.map +1 -0
  412. package/dist/{receipt-BM8xsGFy.js → receipt-CV89q1fs.js} +8 -8
  413. package/dist/{receipt-BM8xsGFy.js.map → receipt-CV89q1fs.js.map} +1 -1
  414. package/dist/rich-text-editor-CF8QYt5p.js +574 -0
  415. package/dist/rich-text-editor-CF8QYt5p.js.map +1 -0
  416. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-CnrbmTS1.js} +35 -26
  417. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +1 -0
  418. package/dist/{rich-text-B7sBAdDG.js → rich-text-j-FGAeZW.js} +4 -4
  419. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  420. package/dist/{scroll-area-BheMQ270.js → scroll-area-DRdr16Pt.js} +3 -3
  421. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  422. package/dist/{separator-DO0EbCEm.js → separator-BMEvwnSX.js} +2 -2
  423. package/dist/{separator-DO0EbCEm.js.map → separator-BMEvwnSX.js.map} +1 -1
  424. package/dist/{separator-Gk_WXH-l.js → separator-Do5GWDYi.js} +4 -4
  425. package/dist/separator-Do5GWDYi.js.map +1 -0
  426. package/dist/services/actions/action-adapters.d.ts +4 -0
  427. package/dist/services/actions.js +8 -3
  428. package/dist/services/actions.js.map +1 -1
  429. package/dist/{settings-BnCyyPOJ.js → settings-DHk0L2MF.js} +20 -19
  430. package/dist/settings-DHk0L2MF.js.map +1 -0
  431. package/dist/sheet-DRFNY1_D.js +207 -0
  432. package/dist/sheet-DRFNY1_D.js.map +1 -0
  433. package/dist/sidebar-Cb8WzOvE.js +511 -0
  434. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  435. package/dist/{sidebar-DPR7fmqN.js → sidebar-Crc9M9JV.js} +220 -201
  436. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  437. package/dist/{skeleton-CmT1ppqb.js → skeleton-DVMXr15h.js} +5 -5
  438. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-DVMXr15h.js.map} +1 -1
  439. package/dist/smart-card-Bek-TwUp.js +599 -0
  440. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  441. package/dist/{spinner-BY9HbUEh.js → spinner-CmTAbEp0.js} +8 -6
  442. package/dist/spinner-CmTAbEp0.js.map +1 -0
  443. package/dist/{structure-MvKVq-oL.js → structure-hzCW-XsV.js} +3 -3
  444. package/dist/{structure-MvKVq-oL.js.map → structure-hzCW-XsV.js.map} +1 -1
  445. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  446. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  447. package/dist/style.css +1 -1
  448. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  449. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  450. package/dist/table-D6zKeYQX.js +162 -0
  451. package/dist/table-D6zKeYQX.js.map +1 -0
  452. package/dist/table-Dn4XSrSB.js +1444 -0
  453. package/dist/table-Dn4XSrSB.js.map +1 -0
  454. package/dist/tabs-Dk8E_knt.js +189 -0
  455. package/dist/tabs-Dk8E_knt.js.map +1 -0
  456. package/dist/text-inputs-BFpku0Qd.js +331 -0
  457. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  458. package/dist/{text.styles-BwB7vAF2.js → text.styles-g4He6UIW.js} +26 -15
  459. package/dist/text.styles-g4He6UIW.js.map +1 -0
  460. package/dist/theme.css +90 -124
  461. package/dist/themes/green.css +24 -0
  462. package/dist/{timelines-B9ICkQcV.js → timelines-CxuAFIc2.js} +97 -104
  463. package/dist/timelines-CxuAFIc2.js.map +1 -0
  464. package/dist/track-recipes-CDcKmndW.js +10 -0
  465. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  466. package/dist/{tree-BdWSaoFT.js → tree-BotPlyiD.js} +13 -13
  467. package/dist/{tree-BdWSaoFT.js.map → tree-BotPlyiD.js.map} +1 -1
  468. package/dist/typography/rich-text.js +1 -1
  469. package/dist/typography-CAr3dQhX.js +116 -0
  470. package/dist/typography-CAr3dQhX.js.map +1 -0
  471. package/dist/typography.js +2 -2
  472. package/dist/{ui-provider-CftIB6TY.js → ui-provider-D2_TeLqw.js} +22 -22
  473. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  474. package/dist/ui-provider.js +1 -1
  475. package/dist/{upload-D8Za5x_c.js → upload-B0WHW7ak.js} +278 -274
  476. package/dist/upload-B0WHW7ak.js.map +1 -0
  477. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-BHZ_wBfd.js} +72 -75
  478. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  479. package/dist/{usage-card-DnmnJ58D.js → usage-card-U0YBLTNT.js} +31 -33
  480. package/dist/usage-card-U0YBLTNT.js.map +1 -0
  481. package/dist/utils-Cospvlj1.js +4445 -0
  482. package/dist/utils-Cospvlj1.js.map +1 -0
  483. package/dist/value-inputs-CjfzGMsN.js +854 -0
  484. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  485. package/dist/value-typography-Deb3yQZg.js +116 -0
  486. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  487. package/dist/{workspace-C1PZmk8L.js → workspace-YoFjXi6i.js} +97 -105
  488. package/dist/workspace-YoFjXi6i.js.map +1 -0
  489. package/docs/consumer-skill/SKILL.md +123 -119
  490. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  491. package/docs/consumer-skill/examples/app-layout.tsx +42 -14
  492. package/docs/consumer-skill/examples/detail.tsx +20 -5
  493. package/docs/consumer-skill/examples/edit.tsx +1 -1
  494. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  495. package/docs/consumer-skill/examples/manifest.json +37 -3
  496. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  497. package/docs/consumer-skill/examples/website.tsx +56 -0
  498. package/docs/consumer-skill/references/analytics.md +70 -0
  499. package/docs/consumer-skill/references/composition.md +195 -9
  500. package/docs/consumer-skill/references/design-contract.md +33 -7
  501. package/docs/consumer-skill/references/discovery.md +80 -5
  502. package/docs/consumer-skill/references/installation.md +22 -0
  503. package/docs/consumer-skill/references/integration.md +46 -1
  504. package/docs/consumer-skill/references/public-api.json +2083 -237
  505. package/docs/consumer-skill/references/review.md +74 -6
  506. package/docs/consumer-skill/references/theming.md +59 -8
  507. package/docs/consumer-skill/references/tokens.json +180 -9
  508. package/docs/consumer-skill/references/workflows.md +34 -0
  509. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  510. package/docs/consumer-skill/scripts/composition-policy.mjs +271 -18
  511. package/docs/consumer-skill/scripts/discovery.mjs +69 -9
  512. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  513. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  514. package/package.json +11 -6
  515. package/dist/accordion-B-5Focs8.js.map +0 -1
  516. package/dist/action-menu-Cx3SdfbN.js +0 -265
  517. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  518. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  519. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  520. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  521. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  522. package/dist/attachment-BO2R47wn.js.map +0 -1
  523. package/dist/auth-OFwWSAap.js +0 -704
  524. package/dist/auth-OFwWSAap.js.map +0 -1
  525. package/dist/avatar-Bpzty83c.js.map +0 -1
  526. package/dist/badge-BZXZT9wd.js.map +0 -1
  527. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  528. package/dist/button-BS6l5JUw.js.map +0 -1
  529. package/dist/buttons-Co6GavvM.js +0 -674
  530. package/dist/buttons-Co6GavvM.js.map +0 -1
  531. package/dist/chart-DVfcwQu6.js +0 -149
  532. package/dist/chart-DVfcwQu6.js.map +0 -1
  533. package/dist/checkbox-BavDRjF7.js +0 -34
  534. package/dist/checkbox-BavDRjF7.js.map +0 -1
  535. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  536. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  537. package/dist/code-block-xHKbAJDj.js.map +0 -1
  538. package/dist/combobox-DEbdr-3u.js +0 -273
  539. package/dist/combobox-DEbdr-3u.js.map +0 -1
  540. package/dist/combobox-xv3yJbzl.js +0 -850
  541. package/dist/combobox-xv3yJbzl.js.map +0 -1
  542. package/dist/command-C0xe7u9B.js.map +0 -1
  543. package/dist/comments-DviPLnwy.js.map +0 -1
  544. package/dist/containers-6s-ucRQQ.js.map +0 -1
  545. package/dist/data-display-cWIRdeaf.js +0 -1129
  546. package/dist/data-display-cWIRdeaf.js.map +0 -1
  547. package/dist/date-BFNMnrS5.js +0 -140
  548. package/dist/date-BFNMnrS5.js.map +0 -1
  549. package/dist/date-picker-CA6ogMQB.js +0 -1521
  550. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  551. package/dist/date-pickers-BPIKLdsD.js +0 -224
  552. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  553. package/dist/display-CFM5myut.js.map +0 -1
  554. package/dist/dropdown-menu-BlnyHr-9.js.map +0 -1
  555. package/dist/feedback-DWUkgEjR.js.map +0 -1
  556. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  557. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  558. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  559. package/dist/filters-BhsUtsxW.js.map +0 -1
  560. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  561. package/dist/form-sizing-BWs70_a2.js +0 -100
  562. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  563. package/dist/format-iamDSqs2.js +0 -110
  564. package/dist/format-iamDSqs2.js.map +0 -1
  565. package/dist/forms-B7pzS25o.js.map +0 -1
  566. package/dist/forms-numeric-BUBxELBv.js +0 -867
  567. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  568. package/dist/header-C59QZyxV.js.map +0 -1
  569. package/dist/http-CLTVJc5I.js.map +0 -1
  570. package/dist/input-WwYQZJzG.js +0 -202
  571. package/dist/input-WwYQZJzG.js.map +0 -1
  572. package/dist/input-ci9fIgFH.js +0 -20
  573. package/dist/input-ci9fIgFH.js.map +0 -1
  574. package/dist/item-pJ0GsOiJ.js +0 -257
  575. package/dist/item-pJ0GsOiJ.js.map +0 -1
  576. package/dist/media-gallery-DhDRgnVZ.js +0 -200
  577. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  578. package/dist/message-COsdEvXT.js +0 -108
  579. package/dist/message-COsdEvXT.js.map +0 -1
  580. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  581. package/dist/navigation-DBEu4POU.js +0 -267
  582. package/dist/navigation-DBEu4POU.js.map +0 -1
  583. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  584. package/dist/number-BNT_BIzJ.js +0 -269
  585. package/dist/number-BNT_BIzJ.js.map +0 -1
  586. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  587. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  588. package/dist/overlays-B11wZka6.js +0 -982
  589. package/dist/overlays-B11wZka6.js.map +0 -1
  590. package/dist/page-BV6ioQg3.js +0 -202
  591. package/dist/page-BV6ioQg3.js.map +0 -1
  592. package/dist/page-header-DQRa0jug.js.map +0 -1
  593. package/dist/pagination-C29vvt3I.js.map +0 -1
  594. package/dist/popover-CoLDEg19.js.map +0 -1
  595. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  596. package/dist/primitives-DKPOGVpj.js +0 -330
  597. package/dist/primitives-DKPOGVpj.js.map +0 -1
  598. package/dist/progress-BOe8l_FZ.js.map +0 -1
  599. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  600. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  601. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  602. package/dist/scroll-area-BheMQ270.js.map +0 -1
  603. package/dist/select-B2mb-qN2.js +0 -108
  604. package/dist/select-B2mb-qN2.js.map +0 -1
  605. package/dist/separator-Gk_WXH-l.js.map +0 -1
  606. package/dist/settings-BnCyyPOJ.js.map +0 -1
  607. package/dist/sheet-B-q914Ad.js +0 -205
  608. package/dist/sheet-B-q914Ad.js.map +0 -1
  609. package/dist/sidebar-C_2p3Tfj.js +0 -501
  610. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  611. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  612. package/dist/smart-card-CYLn46e6.js +0 -578
  613. package/dist/smart-card-CYLn46e6.js.map +0 -1
  614. package/dist/spinner-BY9HbUEh.js.map +0 -1
  615. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  616. package/dist/surface-recipes-CQfRr-VL.js +0 -27
  617. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  618. package/dist/table-BS39xnlq.js +0 -1424
  619. package/dist/table-BS39xnlq.js.map +0 -1
  620. package/dist/table-DnlAJ-xR.js +0 -146
  621. package/dist/table-DnlAJ-xR.js.map +0 -1
  622. package/dist/tabs-B5cNMWiP.js +0 -187
  623. package/dist/tabs-B5cNMWiP.js.map +0 -1
  624. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  625. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  626. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  627. package/dist/timelines-B9ICkQcV.js.map +0 -1
  628. package/dist/track-recipes-LLPNVwFg.js +0 -10
  629. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  630. package/dist/typography-Cv8MT-82.js +0 -96
  631. package/dist/typography-Cv8MT-82.js.map +0 -1
  632. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  633. package/dist/upload-D8Za5x_c.js.map +0 -1
  634. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  635. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  636. package/dist/utils-C2EKeIw3.js +0 -72
  637. package/dist/utils-C2EKeIw3.js.map +0 -1
  638. package/dist/value-inputs-DX2dbxjj.js +0 -824
  639. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  640. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../data-display-cWIRdeaf.js";
2
+ import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../data-display-3xWQUnMA.js";
3
3
  export { l as DenseInfoClassification, e as DenseInfoDashboard, f as DenseInfoFinancial, i as DenseInfoProjectCard, r as DenseInfoScoreCard, n as DocumentStackIllustration, c as EmptyState, m as InboxCleanIllustration, a as InlineStat, u as MetadataList, p as MetadataValue, h as RelationshipCardFrame, d as SearchGlassIllustration, t as StackedCardsIllustration, s as UsersCircleIllustration, o as defaultDenseInfoStrings, g as defaultEmptyStateStrings };
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "../lib/strings.js";
3
- import { t } from "../utils-C2EKeIw3.js";
4
- import { a as n } from "../typography-Cv8MT-82.js";
5
- import { t as r } from "../structure-MvKVq-oL.js";
6
- import { a as i, c as a, i as o, l as s, o as c, r as l, s as u, u as d } from "../accordion-B-5Focs8.js";
7
- import { t as f } from "../spinner-BY9HbUEh.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 { a as i, c as a, i as o, l as s, o as c, r as l, s as u, u as d } from "../accordion-CQXVcd7Q.js";
7
+ import { t as f } from "../spinner-CmTAbEp0.js";
8
8
  import { forwardRef as p, useCallback as m, useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
9
9
  import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
10
  import { CheckCircle2 as x } from "lucide-react";
@@ -91,7 +91,7 @@ var D = p(function({ steps: f, defaultExpanded: p, multiple: x = !1, expanded: D
91
91
  direction: "horizontal",
92
92
  align: "center",
93
93
  gap: "lg",
94
- className: "w-full min-w-0 pr-2",
94
+ className: "w-full min-w-0",
95
95
  children: [
96
96
  /* @__PURE__ */ y(C, {
97
97
  status: e.status,
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","names":["Text","Stack","ACCORDION_ROOT_VARIANT_CLASS","AccordionContent","ACCORDION_ITEM_VARIANT_CLASS","AccordionItem","ACCORDION_TRIGGER_BASE","ACCORDION_CONTENT_PADDING","Accordion","AccordionTrigger","Spinner","defaultOnboardingChecklistStrings","StepStatusIndicator","status","ariaLabel","cn","className","CheckCircle2","TITLE_TONE_CLASS","pickStatusAria","strings","defaultExpandedFor","next","steps","s","OnboardingChecklist","forwardRef","expandedProp","stringsProp","useStrings","isControlled","computedDefault","useMemo","defaultExpanded","internalValue","setInternalValue","useState","userInteractedRef","useRef","expanded","previouslyExpanded","handleValueChange","useCallback","nextArr","onExpandedChange","useEffect","onStepOpen","prev","id","variant","step","stepClassName"],"sources":["../../src/components/blocks/onboarding/checklist/checklist.strings.ts","../../src/components/blocks/onboarding/checklist/partials/step-status-indicator.tsx","../../src/components/blocks/onboarding/checklist/checklist.tsx"],"sourcesContent":["/**\n * Strings for `<OnboardingChecklist>`. Indicator labels are screen-reader\n * announcements for the status icons; consumers wire their i18n into them.\n *\n * The `regionAriaLabel` is intentionally optional — the consumer typically\n * already has a heading above the checklist that names it (\"Set up your\n * workspace\"), so adding an aria-label here would be redundant.\n */\nexport interface OnboardingChecklistStrings {\n\tregionAriaLabel?: string;\n\tstatusCompletedAria: string;\n\tstatusInProgressAria: string;\n\tstatusPendingAria: string;\n}\n\nexport const defaultOnboardingChecklistStrings: OnboardingChecklistStrings = {\n\tregionAriaLabel: undefined,\n\tstatusCompletedAria: 'Completed',\n\tstatusInProgressAria: 'In progress',\n\tstatusPendingAria: 'Pending',\n};\n","/**\n * StepStatusIndicator — the small leading icon that signals each step's\n * status in an OnboardingChecklist.\n *\n * - `completed` → filled success check\n * - `in-progress` → soft warning-tinted disc with a small pulsing dot\n * - `pending` → muted spinner ring\n *\n * Token-driven: success / warning / muted-foreground tokens only. No\n * raw palette colors so consumer rebrand flows through.\n */\nimport { CheckCircle2 } from 'lucide-react';\n\nimport { Spinner } from '../../../../base/spinner';\nimport { cn } from '../../../../../lib/utils';\n\nimport type { OnboardingStepStatus } from '../checklist.types';\n\nexport interface StepStatusIndicatorProps {\n\tstatus: OnboardingStepStatus;\n\t/** Accessible name for the region. */\n\tariaLabel: string;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function StepStatusIndicator({\n\tstatus,\n\tariaLabel,\n\tclassName,\n}: StepStatusIndicatorProps) {\n\tif (status === 'completed') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full bg-success/15 text-success ring-1 ring-success/20', className)}\n\t\t\t>\n\t\t\t\t<CheckCircle2 className=\"size-icon\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (status === 'in-progress') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'step-status-indicator--component',\n\t\t\t\t\t'flex size-8 items-center justify-center rounded-full bg-warning/15 ring-1 ring-warning/30',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"size-2 rounded-full bg-warning\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\trole=\"img\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full bg-muted text-muted-foreground/70 ring-1 ring-border/70', className)}\n\t\t>\n\t\t\t<Spinner className=\"size-icon opacity-60\" />\n\t\t</span>\n\t);\n}\n\nStepStatusIndicator.displayName = 'StepStatusIndicator';\n","/**\n * OnboardingChecklist — the canonical step-list accordion for SaaS\n * onboarding flows. Each step has a status (completed / in-progress /\n * pending), a title, an optional badge, and an optional expanded body\n * for forms / actions / instructions.\n *\n * Composes `base/accordion`'s primitives directly (rule 2). Builds on\n * the shadcn accordion via the wrapped pass-through.\n *\n * Status indicators come from `partials/step-status-indicator.tsx` —\n * token-driven (success / warning / muted-foreground only).\n *\n * Strings — every accessibility label flows through the strings prop\n * (rule 8). Per-step copy lives in the data passed to `steps` (titles,\n * badges, descriptions are consumer-controlled).\n */\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n\tAccordion,\n\tAccordionContent,\n\tAccordionItem,\n\tAccordionTrigger,\n} from '../../../base/accordion';\nimport {\n\tACCORDION_CONTENT_PADDING,\n\tACCORDION_ITEM_VARIANT_CLASS,\n\tACCORDION_ROOT_VARIANT_CLASS,\n\tACCORDION_TRIGGER_BASE,\n} from '../../../base/accordion/accordion-variants';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultOnboardingChecklistStrings,\n\ttype OnboardingChecklistStrings,\n} from './checklist.strings';\nimport type {\n\tOnboardingChecklistProps,\n\tOnboardingStepStatus,\n} from './checklist.types';\nimport { StepStatusIndicator } from './partials/step-status-indicator';\n\nconst TITLE_TONE_CLASS: Record<OnboardingStepStatus, string> = {\n\tcompleted: 'text-foreground',\n\t'in-progress': 'text-foreground',\n\tpending: 'text-muted-foreground',\n};\n\nfunction pickStatusAria(\n\tstatus: OnboardingStepStatus,\n\tstrings: OnboardingChecklistStrings,\n): string {\n\tif (status === 'completed') return strings.statusCompletedAria;\n\tif (status === 'in-progress') return strings.statusInProgressAria;\n\treturn strings.statusPendingAria;\n}\n\nfunction defaultExpandedFor(steps: OnboardingChecklistProps['steps']): string[] {\n\tconst next = steps.find((s) => s.status !== 'completed' && !s.disabled);\n\treturn next ? [next.id] : [];\n}\n\nexport const OnboardingChecklist = forwardRef<HTMLDivElement, OnboardingChecklistProps>(function OnboardingChecklist({\n\tsteps,\n\tdefaultExpanded,\n\tmultiple = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tonStepOpen,\n\tvariant = 'bordered',\n\tclassName,\n\tstepClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultOnboardingChecklistStrings, stringsProp);\n\tconst isControlled = expandedProp !== undefined;\n\tconst computedDefault = useMemo(\n\t\t() => defaultExpanded ?? defaultExpandedFor(steps),\n\t\t// First-mount default. Re-resolution when `steps` arrives async is\n\t\t// handled by the effect below — that effect picks the next pending\n\t\t// step and opens it, but only if the user hasn't already toggled\n\t\t// anything.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n\tconst [internalValue, setInternalValue] = useState<string[]>(computedDefault);\n\tconst userInteractedRef = useRef(false);\n\tconst expanded = isControlled ? expandedProp : internalValue;\n\tconst previouslyExpanded = useRef<Set<string>>(new Set(computedDefault));\n\n\t// When `steps` is loaded asynchronously (consumer passes [] then\n\t// populates), promote the next-pending step the first time real\n\t// steps arrive — but never overwrite an explicit user toggle.\n\tuseEffect(() => {\n\t\tif (isControlled || userInteractedRef.current) return;\n\t\tif (defaultExpanded !== undefined) return;\n\t\tif (steps.length === 0) return;\n\t\tif (internalValue.length > 0) return;\n\t\tconst next = defaultExpandedFor(steps);\n\t\tif (next.length > 0) setInternalValue(next);\n\t}, [steps, isControlled, defaultExpanded, internalValue.length]);\n\n\tconst handleValueChange = useCallback(\n\t\t(next: unknown) => {\n\t\t\tconst nextArr = (next as string[]) ?? [];\n\t\t\tuserInteractedRef.current = true;\n\t\t\tif (!isControlled) setInternalValue(nextArr);\n\t\t\tonExpandedChange?.(nextArr);\n\t\t},\n\t\t[isControlled, onExpandedChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!onStepOpen) {\n\t\t\tpreviouslyExpanded.current = new Set(expanded);\n\t\t\treturn;\n\t\t}\n\t\tconst prev = previouslyExpanded.current;\n\t\tfor (const id of expanded) {\n\t\t\tif (!prev.has(id)) onStepOpen(id);\n\t\t}\n\t\tpreviouslyExpanded.current = new Set(expanded);\n\t}, [expanded, onStepOpen]);\n\n\treturn (\n\t\t<Accordion\n\t\t\tref={ref}\n\t\t\tmultiple={multiple}\n\t\t\tvalue={expanded}\n\t\t\tonValueChange={handleValueChange}\n\t\t\taria-label={strings.regionAriaLabel}\n\t\t\tclassName={cn('checklist--component', ACCORDION_ROOT_VARIANT_CLASS[variant], className)}\n\t\t>\n\t\t\t{steps.map((step) => (\n\t\t\t\t<AccordionItem\n\t\t\t\t\tkey={step.id}\n\t\t\t\t\tvalue={step.id}\n\t\t\t\t\tclassName={cn(ACCORDION_ITEM_VARIANT_CLASS[variant], stepClassName)}\n\t\t\t\t>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\tdisabled={step.disabled}\n\t\t\t\t\t\tclassName={cn(ACCORDION_TRIGGER_BASE, 'min-h-16 items-center')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\" className=\"w-full min-w-0 pr-2\">\n\t\t\t\t\t\t\t<StepStatusIndicator\n\t\t\t\t\t\t\t\tstatus={step.status}\n\t\t\t\t\t\t\t\tariaLabel={pickStatusAria(step.status, strings)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\tclassName={cn(TITLE_TONE_CLASS[step.status])}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!step.badge && (\n\t\t\t\t\t\t\t\t<span className=\"ml-auto inline-flex shrink-0\">{step.badge}</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t{!!step.content && (\n\t\t\t\t\t\t<AccordionContent className={ACCORDION_CONTENT_PADDING.withMedallion}>\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"leading-relaxed\" tag=\"div\">\n\t\t\t\t\t\t\t\t{step.content}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</AccordionContent>\n\t\t\t\t\t)}\n\t\t\t\t</AccordionItem>\n\t\t\t))}\n\t\t</Accordion>\n\t);\n});\n\nOnboardingChecklist.displayName = 'OnboardingChecklist';\n"],"mappings":"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"}
1
+ {"version":3,"file":"onboarding.js","names":["Text","Stack","ACCORDION_ROOT_VARIANT_CLASS","AccordionContent","ACCORDION_ITEM_VARIANT_CLASS","AccordionItem","ACCORDION_TRIGGER_BASE","ACCORDION_CONTENT_PADDING","Accordion","AccordionTrigger","Spinner","defaultOnboardingChecklistStrings","StepStatusIndicator","status","ariaLabel","cn","className","CheckCircle2","TITLE_TONE_CLASS","pickStatusAria","strings","defaultExpandedFor","next","steps","s","OnboardingChecklist","forwardRef","expandedProp","stringsProp","useStrings","isControlled","computedDefault","useMemo","defaultExpanded","internalValue","setInternalValue","useState","userInteractedRef","useRef","expanded","previouslyExpanded","handleValueChange","useCallback","nextArr","onExpandedChange","useEffect","onStepOpen","prev","id","variant","step","stepClassName"],"sources":["../../src/components/blocks/onboarding/checklist/checklist.strings.ts","../../src/components/blocks/onboarding/checklist/partials/step-status-indicator.tsx","../../src/components/blocks/onboarding/checklist/checklist.tsx"],"sourcesContent":["/**\n * Strings for `<OnboardingChecklist>`. Indicator labels are screen-reader\n * announcements for the status icons; consumers wire their i18n into them.\n *\n * The `regionAriaLabel` is intentionally optional — the consumer typically\n * already has a heading above the checklist that names it (\"Set up your\n * workspace\"), so adding an aria-label here would be redundant.\n */\nexport interface OnboardingChecklistStrings {\n\tregionAriaLabel?: string;\n\tstatusCompletedAria: string;\n\tstatusInProgressAria: string;\n\tstatusPendingAria: string;\n}\n\nexport const defaultOnboardingChecklistStrings: OnboardingChecklistStrings = {\n\tregionAriaLabel: undefined,\n\tstatusCompletedAria: 'Completed',\n\tstatusInProgressAria: 'In progress',\n\tstatusPendingAria: 'Pending',\n};\n","/**\n * StepStatusIndicator — the small leading icon that signals each step's\n * status in an OnboardingChecklist.\n *\n * - `completed` → filled success check\n * - `in-progress` → soft warning-tinted disc with a small pulsing dot\n * - `pending` → muted spinner ring\n *\n * Token-driven: success / warning / muted-foreground tokens only. No\n * raw palette colors so consumer rebrand flows through.\n */\nimport { CheckCircle2 } from 'lucide-react';\n\nimport { Spinner } from '../../../../base/spinner';\nimport { cn } from '../../../../../lib/utils';\n\nimport type { OnboardingStepStatus } from '../checklist.types';\n\nexport interface StepStatusIndicatorProps {\n\tstatus: OnboardingStepStatus;\n\t/** Accessible name for the region. */\n\tariaLabel: string;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function StepStatusIndicator({\n\tstatus,\n\tariaLabel,\n\tclassName,\n}: StepStatusIndicatorProps) {\n\tif (status === 'completed') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full bg-success/15 text-success ring-1 ring-success/20', className)}\n\t\t\t>\n\t\t\t\t<CheckCircle2 className=\"size-icon\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (status === 'in-progress') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'step-status-indicator--component',\n\t\t\t\t\t'flex size-8 items-center justify-center rounded-full bg-warning/15 ring-1 ring-warning/30',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"size-2 rounded-full bg-warning\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\trole=\"img\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full bg-muted text-muted-foreground/70 ring-1 ring-border/70', className)}\n\t\t>\n\t\t\t<Spinner className=\"size-icon opacity-60\" />\n\t\t</span>\n\t);\n}\n\nStepStatusIndicator.displayName = 'StepStatusIndicator';\n","/**\n * OnboardingChecklist — the canonical step-list accordion for SaaS\n * onboarding flows. Each step has a status (completed / in-progress /\n * pending), a title, an optional badge, and an optional expanded body\n * for forms / actions / instructions.\n *\n * Composes `base/accordion`'s primitives directly (rule 2). Builds on\n * the shadcn accordion via the wrapped pass-through.\n *\n * Status indicators come from `partials/step-status-indicator.tsx` —\n * token-driven (success / warning / muted-foreground only).\n *\n * Strings — every accessibility label flows through the strings prop\n * (rule 8). Per-step copy lives in the data passed to `steps` (titles,\n * badges, descriptions are consumer-controlled).\n */\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n\tAccordion,\n\tAccordionContent,\n\tAccordionItem,\n\tAccordionTrigger,\n} from '../../../base/accordion';\nimport {\n\tACCORDION_CONTENT_PADDING,\n\tACCORDION_ITEM_VARIANT_CLASS,\n\tACCORDION_ROOT_VARIANT_CLASS,\n\tACCORDION_TRIGGER_BASE,\n} from '../../../base/accordion/accordion-variants';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultOnboardingChecklistStrings,\n\ttype OnboardingChecklistStrings,\n} from './checklist.strings';\nimport type {\n\tOnboardingChecklistProps,\n\tOnboardingStepStatus,\n} from './checklist.types';\nimport { StepStatusIndicator } from './partials/step-status-indicator';\n\nconst TITLE_TONE_CLASS: Record<OnboardingStepStatus, string> = {\n\tcompleted: 'text-foreground',\n\t'in-progress': 'text-foreground',\n\tpending: 'text-muted-foreground',\n};\n\nfunction pickStatusAria(\n\tstatus: OnboardingStepStatus,\n\tstrings: OnboardingChecklistStrings,\n): string {\n\tif (status === 'completed') return strings.statusCompletedAria;\n\tif (status === 'in-progress') return strings.statusInProgressAria;\n\treturn strings.statusPendingAria;\n}\n\nfunction defaultExpandedFor(steps: OnboardingChecklistProps['steps']): string[] {\n\tconst next = steps.find((s) => s.status !== 'completed' && !s.disabled);\n\treturn next ? [next.id] : [];\n}\n\nexport const OnboardingChecklist = forwardRef<HTMLDivElement, OnboardingChecklistProps>(function OnboardingChecklist({\n\tsteps,\n\tdefaultExpanded,\n\tmultiple = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tonStepOpen,\n\tvariant = 'bordered',\n\tclassName,\n\tstepClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultOnboardingChecklistStrings, stringsProp);\n\tconst isControlled = expandedProp !== undefined;\n\tconst computedDefault = useMemo(\n\t\t() => defaultExpanded ?? defaultExpandedFor(steps),\n\t\t// First-mount default. Re-resolution when `steps` arrives async is\n\t\t// handled by the effect below — that effect picks the next pending\n\t\t// step and opens it, but only if the user hasn't already toggled\n\t\t// anything.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n\tconst [internalValue, setInternalValue] = useState<string[]>(computedDefault);\n\tconst userInteractedRef = useRef(false);\n\tconst expanded = isControlled ? expandedProp : internalValue;\n\tconst previouslyExpanded = useRef<Set<string>>(new Set(computedDefault));\n\n\t// When `steps` is loaded asynchronously (consumer passes [] then\n\t// populates), promote the next-pending step the first time real\n\t// steps arrive — but never overwrite an explicit user toggle.\n\tuseEffect(() => {\n\t\tif (isControlled || userInteractedRef.current) return;\n\t\tif (defaultExpanded !== undefined) return;\n\t\tif (steps.length === 0) return;\n\t\tif (internalValue.length > 0) return;\n\t\tconst next = defaultExpandedFor(steps);\n\t\tif (next.length > 0) setInternalValue(next);\n\t}, [steps, isControlled, defaultExpanded, internalValue.length]);\n\n\tconst handleValueChange = useCallback(\n\t\t(next: unknown) => {\n\t\t\tconst nextArr = (next as string[]) ?? [];\n\t\t\tuserInteractedRef.current = true;\n\t\t\tif (!isControlled) setInternalValue(nextArr);\n\t\t\tonExpandedChange?.(nextArr);\n\t\t},\n\t\t[isControlled, onExpandedChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!onStepOpen) {\n\t\t\tpreviouslyExpanded.current = new Set(expanded);\n\t\t\treturn;\n\t\t}\n\t\tconst prev = previouslyExpanded.current;\n\t\tfor (const id of expanded) {\n\t\t\tif (!prev.has(id)) onStepOpen(id);\n\t\t}\n\t\tpreviouslyExpanded.current = new Set(expanded);\n\t}, [expanded, onStepOpen]);\n\n\treturn (\n\t\t<Accordion\n\t\t\tref={ref}\n\t\t\tmultiple={multiple}\n\t\t\tvalue={expanded}\n\t\t\tonValueChange={handleValueChange}\n\t\t\taria-label={strings.regionAriaLabel}\n\t\t\tclassName={cn('checklist--component', ACCORDION_ROOT_VARIANT_CLASS[variant], className)}\n\t\t>\n\t\t\t{steps.map((step) => (\n\t\t\t\t<AccordionItem\n\t\t\t\t\tkey={step.id}\n\t\t\t\t\tvalue={step.id}\n\t\t\t\t\tclassName={cn(ACCORDION_ITEM_VARIANT_CLASS[variant], stepClassName)}\n\t\t\t\t>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\tdisabled={step.disabled}\n\t\t\t\t\t\tclassName={cn(ACCORDION_TRIGGER_BASE, 'min-h-16 items-center')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\" className=\"w-full min-w-0\">\n\t\t\t\t\t\t\t<StepStatusIndicator\n\t\t\t\t\t\t\t\tstatus={step.status}\n\t\t\t\t\t\t\t\tariaLabel={pickStatusAria(step.status, strings)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\tclassName={cn(TITLE_TONE_CLASS[step.status])}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!step.badge && (\n\t\t\t\t\t\t\t\t<span className=\"ml-auto inline-flex shrink-0\">{step.badge}</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t{!!step.content && (\n\t\t\t\t\t\t<AccordionContent className={ACCORDION_CONTENT_PADDING.withMedallion}>\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"leading-relaxed\" tag=\"div\">\n\t\t\t\t\t\t\t\t{step.content}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</AccordionContent>\n\t\t\t\t\t)}\n\t\t\t\t</AccordionItem>\n\t\t\t))}\n\t\t</Accordion>\n\t);\n});\n\nOnboardingChecklist.displayName = 'OnboardingChecklist';\n"],"mappings":"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"}
@@ -1,21 +1,21 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "../lib/strings.js";
3
- import { t } from "../utils-C2EKeIw3.js";
4
- import { n } from "../buttons-Co6GavvM.js";
5
- import { a as r, n as i } from "../typography-Cv8MT-82.js";
6
- import { t as a } from "../structure-MvKVq-oL.js";
7
- import { t as o } from "../smart-card-CYLn46e6.js";
8
- import { t as s } from "../progress-BOe8l_FZ.js";
9
- import { t as c } from "../avatar-Bpzty83c.js";
10
- import { t as l } from "../badge-BZXZT9wd.js";
11
- import { n as u, r as d, t as f } from "../collapsible-DsnktFNv.js";
12
- import { t as p } from "../checkbox-BavDRjF7.js";
13
- import { c as m, n as h, r as g, t as _ } from "../item-pJ0GsOiJ.js";
3
+ import { t } from "../utils-Cospvlj1.js";
4
+ import { i as n, s as r } from "../typography-CAr3dQhX.js";
5
+ import { t as i } from "../button-BS3KDg00.js";
6
+ import { t as a } from "../structure-hzCW-XsV.js";
7
+ import { t as o } from "../smart-card-Bek-TwUp.js";
8
+ import { t as s } from "../progress-Br9WTFya.js";
9
+ import { t as c } from "../avatar-djdaaQ_s.js";
10
+ import { t as l } from "../badge-0tATj-tW.js";
11
+ import { t as u } from "../checkbox-B7ygNTYp.js";
12
+ import { n as d, r as f, t as p } from "../collapsible-oMUGM4tr.js";
13
+ import { c as m, n as h, r as g, t as _ } from "../item-xzh8Df65.js";
14
14
  import { forwardRef as v, useId as y, useState as b } from "react";
15
15
  import { jsx as x, jsxs as S } from "react/jsx-runtime";
16
- import { ArrowUpRight as C, CalendarDays as w, ChevronDown as T, CircleDashed as E, LoaderCircle as D } from "lucide-react";
16
+ import { ArrowUpRight as C, ChevronDown as w, CircleDashed as T, LoaderCircle as E } from "lucide-react";
17
17
  //#region src/components/blocks/planning/task-card.strings.ts
18
- var O = {
18
+ var D = {
19
19
  expand: "Expand subtasks",
20
20
  collapse: "Collapse subtasks",
21
21
  subtasks: "Subtasks",
@@ -27,16 +27,16 @@ var O = {
27
27
  formatCompletionCount: (e, t) => `${e}/${t}`,
28
28
  formatCompletion: (e, t) => `${e} of ${t} completed`,
29
29
  formatAssignedTo: (e) => `Assigned to ${e}`
30
- }, k = [
30
+ }, O = [
31
31
  "button, a[href], input, select, textarea, summary, label, [tabindex]",
32
32
  "[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]",
33
33
  "[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]",
34
34
  "[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]",
35
35
  "[contenteditable]:not([contenteditable=\"false\"])"
36
36
  ].join(", ");
37
- function A({ completed: e, total: n, label: r, valueText: i }) {
37
+ function k({ completed: e, total: n, label: r, valueText: i }) {
38
38
  let a = `task-completion-${y()}`;
39
- return n === 0 ? /* @__PURE__ */ x(E, {
39
+ return n === 0 ? /* @__PURE__ */ x(T, {
40
40
  "aria-hidden": "true",
41
41
  className: "text-muted-foreground"
42
42
  }) : /* @__PURE__ */ x(s, {
@@ -99,26 +99,26 @@ function A({ completed: e, total: n, label: r, valueText: i }) {
99
99
  })
100
100
  });
101
101
  }
102
- function j({ item: e, disabled: n, onChange: a, savingLabel: o }) {
103
- let s = y(), l = y(), u = y();
102
+ function A({ item: e, disabled: i, onChange: a, savingLabel: o }) {
103
+ let s = y(), l = y(), d = y();
104
104
  return /* @__PURE__ */ S(_, {
105
105
  role: "listitem",
106
106
  density: "compact",
107
107
  className: "task-card--item gap-space-md py-space-xs",
108
108
  "data-completed": e.completed || void 0,
109
109
  children: [
110
- /* @__PURE__ */ x(m, { children: /* @__PURE__ */ x(p, {
110
+ /* @__PURE__ */ x(m, { children: /* @__PURE__ */ x(u, {
111
111
  id: l,
112
112
  checked: e.completed,
113
- disabled: n || e.disabled || e.busy || !a,
113
+ disabled: i || e.disabled || e.busy || !a,
114
114
  "aria-labelledby": s,
115
- "aria-describedby": e.error ? u : void 0,
115
+ "aria-describedby": e.error ? d : void 0,
116
116
  "aria-invalid": e.error ? !0 : void 0,
117
117
  "aria-busy": e.busy || void 0,
118
118
  onCheckedChange: (t) => a?.(e.id, t === !0)
119
119
  }) }),
120
120
  /* @__PURE__ */ S(g, { children: [
121
- /* @__PURE__ */ x(i, {
121
+ /* @__PURE__ */ x(n, {
122
122
  htmlFor: l,
123
123
  children: /* @__PURE__ */ x(r, {
124
124
  id: s,
@@ -129,7 +129,7 @@ function j({ item: e, disabled: n, onChange: a, savingLabel: o }) {
129
129
  })
130
130
  }),
131
131
  e.error && /* @__PURE__ */ x(r, {
132
- id: u,
132
+ id: d,
133
133
  role: "alert",
134
134
  size: "xs",
135
135
  type: "error",
@@ -142,7 +142,7 @@ function j({ item: e, disabled: n, onChange: a, savingLabel: o }) {
142
142
  children: o
143
143
  })
144
144
  ] }),
145
- (e.assignee || e.busy) && /* @__PURE__ */ S(h, { children: [e.busy && /* @__PURE__ */ x(D, {
145
+ (e.assignee || e.busy) && /* @__PURE__ */ S(h, { children: [e.busy && /* @__PURE__ */ x(E, {
146
146
  "aria-hidden": "true",
147
147
  className: "size-icon animate-spin motion-reduce:animate-none text-muted-foreground"
148
148
  }), e.assignee && /* @__PURE__ */ x(c, {
@@ -152,104 +152,95 @@ function j({ item: e, disabled: n, onChange: a, savingLabel: o }) {
152
152
  ]
153
153
  });
154
154
  }
155
- var M = v(function({ title: i, items: s, status: p, dueDate: m, assignees: h, assignedTo: g, expanded: _, defaultExpanded: v = !1, onExpandedChange: y, onItemCompletedChange: E, onOpen: D, href: M, disabled: N = !1, surface: P, strings: F, className: I, onClick: L, ...R }, z) {
156
- let B = e(O, F), [V, H] = b(v), U = _ ?? V, W = s.filter((e) => e.completed).length, G = B.formatCompletion(W, s.length), K = B.formatCompletionCount(W, s.length), q = g || M !== void 0 || D, J = !!(m || h?.length);
157
- function Y(e) {
158
- N || (_ === void 0 && H(e), y?.(e));
155
+ var j = v(function({ title: n, items: s, status: u, dueDate: m, assignees: h, assignedTo: g, expanded: _, defaultExpanded: v = !1, onExpandedChange: y, onItemCompletedChange: T, onOpen: E, href: j, disabled: M = !1, surface: N, strings: P, className: F, onClick: I, ...L }, R) {
156
+ let z = e(D, P), [B, V] = b(v), H = _ ?? B, U = s.filter((e) => e.completed).length, W = z.formatCompletion(U, s.length), G = z.formatCompletionCount(U, s.length), K = g || j !== void 0 || E, q = !!(m || h?.length);
157
+ function J(e) {
158
+ M || (_ === void 0 && V(e), y?.(e));
159
159
  }
160
- function X(e) {
161
- if (L?.(e), N || e.defaultPrevented || !(e.target instanceof Element)) return;
160
+ function Y(e) {
161
+ if (I?.(e), M || e.defaultPrevented || !(e.target instanceof Element)) return;
162
162
  let t = e.target.closest(".card--header");
163
163
  if (!t || t.closest(".card--component") !== e.currentTarget) return;
164
- let n = e.target.closest(k);
165
- n && t.contains(n) || (Y(!U), e.currentTarget.querySelector(".collapsible-trigger--component")?.focus({ preventScroll: !0 }));
164
+ let n = e.target.closest(O);
165
+ n && t.contains(n) || (J(!H), e.currentTarget.querySelector(".collapsible-trigger--component")?.focus({ preventScroll: !0 }));
166
166
  }
167
- return /* @__PURE__ */ x(f, {
168
- ref: z,
169
- open: U,
170
- disabled: N,
171
- onOpenChange: Y,
167
+ return /* @__PURE__ */ x(p, {
168
+ ref: R,
169
+ open: H,
170
+ disabled: M,
171
+ onOpenChange: J,
172
172
  render: /* @__PURE__ */ x(o, {
173
- ...R,
174
- onClick: X,
175
- title: i,
176
- description: J ? /* @__PURE__ */ S(a, {
173
+ ...L,
174
+ onClick: Y,
175
+ title: n,
176
+ description: q ? /* @__PURE__ */ S(a, {
177
177
  direction: "horizontal",
178
178
  align: "center",
179
179
  justify: "between",
180
180
  gap: "sm",
181
181
  className: "task-card--metadata",
182
- children: [m && /* @__PURE__ */ S(a, {
183
- direction: "horizontal",
184
- align: "center",
185
- gap: "xs",
186
- children: [/* @__PURE__ */ x(w, {
187
- "aria-hidden": "true",
188
- className: "size-icon-sm text-muted-foreground"
189
- }), /* @__PURE__ */ S(r, {
190
- tag: "span",
191
- size: "xs",
192
- type: "secondary",
193
- children: [
194
- B.due,
195
- " ",
196
- /* @__PURE__ */ x("time", {
197
- dateTime: m.dateTime,
198
- children: m.label
199
- })
200
- ]
201
- })]
182
+ children: [m && /* @__PURE__ */ S(r, {
183
+ tag: "span",
184
+ size: "xs",
185
+ type: "secondary",
186
+ children: [
187
+ z.due,
188
+ " ",
189
+ /* @__PURE__ */ x("time", {
190
+ dateTime: m.dateTime,
191
+ children: m.label
192
+ })
193
+ ]
202
194
  }), !!h?.length && /* @__PURE__ */ x(c, {
203
195
  users: h,
204
196
  size: "sm"
205
197
  })]
206
198
  }) : void 0,
207
- surface: P,
199
+ surface: N,
208
200
  textGap: "dense",
209
201
  gap: "md",
210
- headerClassName: t("flex-row items-center", !N && "cursor-pointer"),
211
- "data-expanded": U,
212
- className: t("task-card--component min-w-0", I),
213
- icon: /* @__PURE__ */ x(A, {
214
- completed: W,
202
+ headerClassName: t("flex-row flex-nowrap items-center", !M && "cursor-pointer"),
203
+ "data-expanded": H,
204
+ className: t("task-card--component min-w-0", F),
205
+ icon: /* @__PURE__ */ x(k, {
206
+ completed: U,
215
207
  total: s.length,
216
- label: B.completion,
217
- valueText: G
208
+ label: z.completion,
209
+ valueText: W
218
210
  }),
219
211
  titleSuffix: /* @__PURE__ */ S(a, {
220
212
  direction: "horizontal",
221
213
  align: "center",
222
214
  gap: "sm",
223
- children: [p && /* @__PURE__ */ x(l, {
224
- tone: p.tone ?? "neutral",
215
+ children: [u && /* @__PURE__ */ x(l, {
216
+ tone: u.tone ?? "neutral",
225
217
  size: "sm",
226
- children: p.label
218
+ children: u.label
227
219
  }), /* @__PURE__ */ x(r, {
228
220
  tag: "span",
229
221
  size: "xs",
230
222
  weight: "medium",
231
223
  type: "secondary",
232
224
  className: "task-card--count tabular-nums",
233
- "aria-label": G,
234
- children: K
225
+ "aria-label": W,
226
+ children: G
235
227
  })]
236
228
  }),
237
- headerAction: /* @__PURE__ */ x(d, {
238
- render: /* @__PURE__ */ x(n, {
229
+ headerAction: /* @__PURE__ */ x(f, {
230
+ render: /* @__PURE__ */ x(i, {
239
231
  type: "button",
240
232
  tone: "neutral",
241
233
  buttonStyle: "ghost",
242
234
  size: "sm",
243
235
  iconOnly: !0
244
236
  }),
245
- "aria-label": U ? B.collapse : B.expand,
246
- children: /* @__PURE__ */ x(T, {
237
+ "aria-label": H ? z.collapse : z.expand,
238
+ children: /* @__PURE__ */ x(w, {
247
239
  "aria-hidden": "true",
248
- className: t("size-icon", U && "rotate-180")
240
+ className: t("size-icon", H && "rotate-180")
249
241
  })
250
242
  }),
251
- footerDivider: U && !!q,
252
- footerSlot: U && q ? /* @__PURE__ */ S(a, {
243
+ footerSlot: H && K ? /* @__PURE__ */ S(a, {
253
244
  direction: "horizontal",
254
245
  align: "center",
255
246
  justify: "between",
@@ -267,45 +258,45 @@ var M = v(function({ title: i, items: s, status: p, dueDate: m, assignees: h, as
267
258
  size: "xs",
268
259
  type: "secondary",
269
260
  className: "min-w-0 break-words",
270
- children: B.formatAssignedTo(g.name)
261
+ children: z.formatAssignedTo(g.name)
271
262
  })]
272
- }), (M !== void 0 || D) && /* @__PURE__ */ S(n, {
263
+ }), (j !== void 0 || E) && /* @__PURE__ */ S(i, {
273
264
  type: "button",
274
- href: M,
275
- onClick: D,
276
- disabled: N,
265
+ href: j,
266
+ onClick: E,
267
+ disabled: M,
277
268
  tone: "neutral",
278
269
  buttonStyle: "outline",
279
270
  size: "sm",
280
- children: [B.open, /* @__PURE__ */ x(C, { "aria-hidden": "true" })]
271
+ children: [z.open, /* @__PURE__ */ x(C, { "aria-hidden": "true" })]
281
272
  })]
282
273
  }) : void 0
283
274
  }),
284
- children: U && /* @__PURE__ */ x(a, {
275
+ children: H && /* @__PURE__ */ x(a, {
285
276
  gap: "md",
286
- children: /* @__PURE__ */ x(u, {
277
+ children: /* @__PURE__ */ x(d, {
287
278
  role: "region",
288
- "aria-label": B.subtasks,
279
+ "aria-label": z.subtasks,
289
280
  children: s.length > 0 ? /* @__PURE__ */ x(a, {
290
281
  role: "list",
291
282
  gap: "none",
292
283
  className: "task-card--items",
293
- children: s.map((e) => /* @__PURE__ */ x(j, {
284
+ children: s.map((e) => /* @__PURE__ */ x(A, {
294
285
  item: e,
295
- disabled: N,
296
- onChange: E,
297
- savingLabel: B.saving
286
+ disabled: M,
287
+ onChange: T,
288
+ savingLabel: z.saving
298
289
  }, e.id))
299
290
  }) : /* @__PURE__ */ x(r, {
300
291
  type: "secondary",
301
- children: B.empty
292
+ children: z.empty
302
293
  })
303
294
  })
304
295
  })
305
296
  });
306
297
  });
307
- M.displayName = "TaskCard";
298
+ j.displayName = "TaskCard";
308
299
  //#endregion
309
- export { M as TaskCard, O as defaultTaskCardStrings };
300
+ export { j as TaskCard, D as defaultTaskCardStrings };
310
301
 
311
302
  //# sourceMappingURL=planning.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"planning.js","names":["Text","Label","Stack","Card","Progress","StackedAvatars","Badge","CollapsibleContent","CollapsibleTrigger","Collapsible","Checkbox","ItemMedia","ItemActions","ItemContent","Item","defaultTaskCardStrings","completed","total","name","headerControlSelector","CompletionIndicator","maskId","useId","CircleDashed","label","valueText","cn","SubtaskRow","titleId","checkboxId","errorId","item","disabled","onChange","checked","savingLabel","LoaderCircle","TaskCard","forwardRef","expandedProp","stringsProp","props","strings","useStrings","internalExpanded","setInternalExpanded","useState","defaultExpanded","expanded","items","completion","completionCount","hasFooter","assignedTo","href","onOpen","hasMetadata","dueDate","assignees","requestExpanded","next","onExpandedChange","handleClick","onClick","event","header","control","CalendarDays","className","status","Button","ChevronDown","ArrowUpRight","onItemCompletedChange"],"sources":["../../src/components/blocks/planning/task-card.strings.ts","../../src/components/blocks/planning/task-card.tsx"],"sourcesContent":["export interface TaskCardStrings {\n\texpand: string;\n\tcollapse: string;\n\tsubtasks: string;\n\tcompletion: string;\n\tdue: string;\n\topen: string;\n\tempty: string;\n\tsaving: string;\n\t/** Compact visible count; the full completion formatter remains the accessible value. */\n\tformatCompletionCount: (completed: number, total: number) => string;\n\tformatCompletion: (completed: number, total: number) => string;\n\tformatAssignedTo: (name: string) => string;\n}\n\nexport const defaultTaskCardStrings: TaskCardStrings = {\n\texpand: 'Expand subtasks',\n\tcollapse: 'Collapse subtasks',\n\tsubtasks: 'Subtasks',\n\tcompletion: 'Subtask completion',\n\tdue: 'Due',\n\topen: 'Open',\n\tempty: 'No subtasks yet.',\n\tsaving: 'Saving…',\n\tformatCompletionCount: (completed, total) => `${completed}/${total}`,\n\tformatCompletion: (completed, total) => `${completed} of ${total} completed`,\n\tformatAssignedTo: (name) => `Assigned to ${name}`,\n};\n","import { ArrowUpRight, CalendarDays, ChevronDown, CircleDashed, LoaderCircle } from 'lucide-react';\nimport { forwardRef, useId, useState, type MouseEvent } from 'react';\n\nimport { StackedAvatars } from '../../base/avatar';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { Checkbox } from '../../base/choice-inputs/checkbox';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../base/display/collapsible';\nimport { Progress } from '../../base/feedback/progress';\nimport { Item, ItemActions, ItemContent, ItemMedia } from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultTaskCardStrings } from './task-card.strings';\nimport type { TaskCardItem, TaskCardProps } from './task-card.types';\n\nconst headerControlSelector = [\n\t'button, a[href], input, select, textarea, summary, label, [tabindex]',\n\t'[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]',\n\t'[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]',\n\t'[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]',\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n].join(', ');\n\n/** Private drawing geometry; Progress retains the shared value and accessibility contract. */\nfunction CompletionIndicator({ completed, total, label, valueText }: { completed: number; total: number; label: string; valueText: string }) {\n\tconst maskId = `task-completion-${useId()}`;\n\tif (total === 0) return <CircleDashed aria-hidden=\"true\" className=\"text-muted-foreground\" />;\n\treturn (\n\t\t<Progress\n\t\t\tvalue={completed}\n\t\t\tmax={total}\n\t\t\taria-label={label}\n\t\t\tgetAriaValueText={() => valueText}\n\t\t\theaderSlot={null}\n\t\t\tclassName=\"task-card--completion block shrink-0\"\n\t\t\ttrackSlot={(\n\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" className=\"-rotate-90\">\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" style={{ maskType: 'alpha' }}>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"100\" strokeDashoffset={100 - completed / total * 100}\n\t\t\t\t\t\t\t\tclassName=\"task-card--completion-reveal transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none\" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" className=\"stroke-muted\" />\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" mask={`url(#${maskId})`}\n\t\t\t\t\t\tclassName={cn('transition-[stroke] duration-300 ease-out motion-reduce:transition-none', completed === total ? 'stroke-success' : 'stroke-primary')} />\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction SubtaskRow({ item, disabled, onChange, savingLabel }: { item: TaskCardItem; disabled: boolean; onChange?: TaskCardProps['onItemCompletedChange']; savingLabel: string }) {\n\tconst titleId = useId();\n\tconst checkboxId = useId();\n\tconst errorId = useId();\n\treturn (\n\t\t<Item role=\"listitem\" density=\"compact\" className=\"task-card--item gap-space-md py-space-xs\" data-completed={item.completed || undefined}>\n\t\t\t<ItemMedia>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={checkboxId}\n\t\t\t\t\tchecked={item.completed}\n\t\t\t\t\tdisabled={disabled || item.disabled || item.busy || !onChange}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={item.error ? errorId : undefined}\n\t\t\t\t\taria-invalid={item.error ? true : undefined}\n\t\t\t\t\taria-busy={item.busy || undefined}\n\t\t\t\t\tonCheckedChange={(checked) => onChange?.(item.id, checked === true)}\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<Label htmlFor={checkboxId}>\n\t\t\t\t\t<Text id={titleId} tag=\"span\" type={item.completed ? 'secondary' : 'main'} className={cn('task-card--item-title min-w-0 break-words', item.completed && 'line-through')}>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</Text>\n\t\t\t\t</Label>\n\t\t\t\t{item.error && <Text id={errorId} role=\"alert\" size=\"xs\" type=\"error\">{item.error}</Text>}\n\t\t\t\t{item.busy && <Text role=\"status\" size=\"xs\" type=\"secondary\">{savingLabel}</Text>}\n\t\t\t</ItemContent>\n\t\t\t{(item.assignee || item.busy) && <ItemActions>\n\t\t\t\t{item.busy && <LoaderCircle aria-hidden=\"true\" className=\"size-icon animate-spin motion-reduce:animate-none text-muted-foreground\" />}\n\t\t\t\t{item.assignee && <StackedAvatars users={[item.assignee]} size=\"sm\" />}\n\t\t\t</ItemActions>}\n\t\t</Item>\n\t);\n}\n\n/** Compact task summary with explicit keyboard disclosure and controlled subtasks. */\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(function TaskCard({\n\ttitle,\n\titems,\n\tstatus,\n\tdueDate,\n\tassignees,\n\tassignedTo,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tonItemCompletedChange,\n\tonOpen,\n\thref,\n\tdisabled = false,\n\tsurface,\n\tstrings: stringsProp,\n\tclassName,\n\tonClick,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultTaskCardStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst completed = items.filter((item) => item.completed).length;\n\tconst completion = strings.formatCompletion(completed, items.length);\n\tconst completionCount = strings.formatCompletionCount(completed, items.length);\n\tconst hasFooter = assignedTo || href !== undefined || onOpen;\n\tconst hasMetadata = Boolean(dueDate || assignees?.length);\n\tfunction requestExpanded(next: boolean) {\n\t\tif (disabled) return;\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}\n\tfunction handleClick(event: MouseEvent<HTMLDivElement>) {\n\t\tonClick?.(event);\n\t\tif (disabled || event.defaultPrevented || !(event.target instanceof Element)) return;\n\t\tconst header = event.target.closest('.card--header');\n\t\tif (!header || header.closest('.card--component') !== event.currentTarget) return;\n\t\t// The native disclosure button and any nested controls own their clicks.\n\t\tconst control = event.target.closest(headerControlSelector);\n\t\tif (control && header.contains(control)) return;\n\t\trequestExpanded(!expanded);\n\t\tevent.currentTarget.querySelector<HTMLButtonElement>('.collapsible-trigger--component')?.focus({ preventScroll: true });\n\t}\n\n\treturn (\n\t\t<Collapsible\n\t\t\tref={ref}\n\t\t\topen={expanded}\n\t\t\tdisabled={disabled}\n\t\t\tonOpenChange={requestExpanded}\n\t\t\trender={(\n\t\t\t\t<Card\n\t\t\t\t\t{...props}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={hasMetadata ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"sm\" className=\"task-card--metadata\">\n\t\t\t\t\t\t\t{dueDate && <Stack direction=\"horizontal\" align=\"center\" gap=\"xs\">\n\t\t\t\t\t\t\t\t<CalendarDays aria-hidden=\"true\" className=\"size-icon-sm text-muted-foreground\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.due} <time dateTime={dueDate.dateTime}>{dueDate.label}</time></Text>\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{Boolean(assignees?.length) && <StackedAvatars users={assignees!} size=\"sm\" />}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t\tsurface={surface}\n\t\t\t\t\ttextGap=\"dense\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\theaderClassName={cn('flex-row items-center', !disabled && 'cursor-pointer')}\n\t\t\t\t\tdata-expanded={expanded}\n\t\t\t\t\tclassName={cn('task-card--component min-w-0', className)}\n\t\t\t\t\ticon={<CompletionIndicator completed={completed} total={items.length} label={strings.completion} valueText={completion} />}\n\t\t\t\t\ttitleSuffix={(\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t\t{status && <Badge tone={status.tone ?? 'neutral'} size=\"sm\">{status.label}</Badge>}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" type=\"secondary\" className=\"task-card--count tabular-nums\" aria-label={completion}>{completionCount}</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\theaderAction={(\n\t\t\t\t\t\t<CollapsibleTrigger render={<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" size=\"sm\" iconOnly />} aria-label={expanded ? strings.collapse : strings.expand}>\n\t\t\t\t\t\t\t<ChevronDown aria-hidden=\"true\" className={cn('size-icon', expanded && 'rotate-180')} />\n\t\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t)}\n\t\t\t\t\tfooterDivider={expanded && Boolean(hasFooter)}\n\t\t\t\t\tfooterSlot={expanded && hasFooter ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t\t{assignedTo && <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<StackedAvatars users={[assignedTo]} size=\"sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 break-words\">{strings.formatAssignedTo(assignedTo.name)}</Text>\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(href !== undefined || onOpen) && <Button type=\"button\" href={href} onClick={onOpen} disabled={disabled} tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\">\n\t\t\t\t\t\t\t\t{strings.open}<ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t>\n\t\t\t{expanded && <Stack gap=\"md\">\n\t\t\t\t<CollapsibleContent role=\"region\" aria-label={strings.subtasks}>\n\t\t\t\t\t{items.length > 0 ? <Stack role=\"list\" gap=\"none\" className=\"task-card--items\">\n\t\t\t\t\t\t{items.map((item) => <SubtaskRow key={item.id} item={item} disabled={disabled} onChange={onItemCompletedChange} savingLabel={strings.saving} />)}\n\t\t\t\t\t</Stack> : <Text type=\"secondary\">{strings.empty}</Text>}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>}\n\t\t</Collapsible>\n\t);\n});\n\nTaskCard.displayName = 'TaskCard';\n"],"mappings":"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"}
1
+ {"version":3,"file":"planning.js","names":["Label","Text","Button","Stack","Card","Progress","StackedAvatars","Badge","Checkbox","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemContent","Item","defaultTaskCardStrings","completed","total","name","headerControlSelector","CompletionIndicator","maskId","useId","CircleDashed","label","valueText","cn","SubtaskRow","titleId","checkboxId","errorId","item","disabled","onChange","checked","savingLabel","LoaderCircle","TaskCard","forwardRef","expandedProp","stringsProp","props","strings","useStrings","internalExpanded","setInternalExpanded","useState","defaultExpanded","expanded","items","completion","completionCount","hasFooter","assignedTo","href","onOpen","hasMetadata","dueDate","assignees","requestExpanded","next","onExpandedChange","handleClick","onClick","event","header","control","className","status","ChevronDown","ArrowUpRight","onItemCompletedChange"],"sources":["../../src/components/blocks/planning/task-card.strings.ts","../../src/components/blocks/planning/task-card.tsx"],"sourcesContent":["export interface TaskCardStrings {\n\texpand: string;\n\tcollapse: string;\n\tsubtasks: string;\n\tcompletion: string;\n\tdue: string;\n\topen: string;\n\tempty: string;\n\tsaving: string;\n\t/** Compact visible count; the full completion formatter remains the accessible value. */\n\tformatCompletionCount: (completed: number, total: number) => string;\n\tformatCompletion: (completed: number, total: number) => string;\n\tformatAssignedTo: (name: string) => string;\n}\n\nexport const defaultTaskCardStrings: TaskCardStrings = {\n\texpand: 'Expand subtasks',\n\tcollapse: 'Collapse subtasks',\n\tsubtasks: 'Subtasks',\n\tcompletion: 'Subtask completion',\n\tdue: 'Due',\n\topen: 'Open',\n\tempty: 'No subtasks yet.',\n\tsaving: 'Saving…',\n\tformatCompletionCount: (completed, total) => `${completed}/${total}`,\n\tformatCompletion: (completed, total) => `${completed} of ${total} completed`,\n\tformatAssignedTo: (name) => `Assigned to ${name}`,\n};\n","import { ArrowUpRight, ChevronDown, CircleDashed, LoaderCircle } from 'lucide-react';\nimport { forwardRef, useId, useState, type MouseEvent } from 'react';\n\nimport { StackedAvatars } from '../../base/avatar';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { Checkbox } from '../../base/choice-inputs/checkbox';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../base/display/collapsible';\nimport { Progress } from '../../base/feedback/progress';\nimport { Item, ItemActions, ItemContent, ItemMedia } from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultTaskCardStrings } from './task-card.strings';\nimport type { TaskCardItem, TaskCardProps } from './task-card.types';\n\nconst headerControlSelector = [\n\t'button, a[href], input, select, textarea, summary, label, [tabindex]',\n\t'[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]',\n\t'[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]',\n\t'[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]',\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n].join(', ');\n\n/** Private drawing geometry; Progress retains the shared value and accessibility contract. */\nfunction CompletionIndicator({ completed, total, label, valueText }: { completed: number; total: number; label: string; valueText: string }) {\n\tconst maskId = `task-completion-${useId()}`;\n\tif (total === 0) return <CircleDashed aria-hidden=\"true\" className=\"text-muted-foreground\" />;\n\treturn (\n\t\t<Progress\n\t\t\tvalue={completed}\n\t\t\tmax={total}\n\t\t\taria-label={label}\n\t\t\tgetAriaValueText={() => valueText}\n\t\t\theaderSlot={null}\n\t\t\tclassName=\"task-card--completion block shrink-0\"\n\t\t\ttrackSlot={(\n\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" className=\"-rotate-90\">\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" style={{ maskType: 'alpha' }}>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"100\" strokeDashoffset={100 - completed / total * 100}\n\t\t\t\t\t\t\t\tclassName=\"task-card--completion-reveal transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none\" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" className=\"stroke-muted\" />\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" mask={`url(#${maskId})`}\n\t\t\t\t\t\tclassName={cn('transition-[stroke] duration-300 ease-out motion-reduce:transition-none', completed === total ? 'stroke-success' : 'stroke-primary')} />\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction SubtaskRow({ item, disabled, onChange, savingLabel }: { item: TaskCardItem; disabled: boolean; onChange?: TaskCardProps['onItemCompletedChange']; savingLabel: string }) {\n\tconst titleId = useId();\n\tconst checkboxId = useId();\n\tconst errorId = useId();\n\treturn (\n\t\t<Item role=\"listitem\" density=\"compact\" className=\"task-card--item gap-space-md py-space-xs\" data-completed={item.completed || undefined}>\n\t\t\t<ItemMedia>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={checkboxId}\n\t\t\t\t\tchecked={item.completed}\n\t\t\t\t\tdisabled={disabled || item.disabled || item.busy || !onChange}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={item.error ? errorId : undefined}\n\t\t\t\t\taria-invalid={item.error ? true : undefined}\n\t\t\t\t\taria-busy={item.busy || undefined}\n\t\t\t\t\tonCheckedChange={(checked) => onChange?.(item.id, checked === true)}\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<Label htmlFor={checkboxId}>\n\t\t\t\t\t<Text id={titleId} tag=\"span\" type={item.completed ? 'secondary' : 'main'} className={cn('task-card--item-title min-w-0 break-words', item.completed && 'line-through')}>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</Text>\n\t\t\t\t</Label>\n\t\t\t\t{item.error && <Text id={errorId} role=\"alert\" size=\"xs\" type=\"error\">{item.error}</Text>}\n\t\t\t\t{item.busy && <Text role=\"status\" size=\"xs\" type=\"secondary\">{savingLabel}</Text>}\n\t\t\t</ItemContent>\n\t\t\t{(item.assignee || item.busy) && <ItemActions>\n\t\t\t\t{item.busy && <LoaderCircle aria-hidden=\"true\" className=\"size-icon animate-spin motion-reduce:animate-none text-muted-foreground\" />}\n\t\t\t\t{item.assignee && <StackedAvatars users={[item.assignee]} size=\"sm\" />}\n\t\t\t</ItemActions>}\n\t\t</Item>\n\t);\n}\n\n/** Compact task summary with explicit keyboard disclosure and controlled subtasks. */\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(function TaskCard({\n\ttitle,\n\titems,\n\tstatus,\n\tdueDate,\n\tassignees,\n\tassignedTo,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tonItemCompletedChange,\n\tonOpen,\n\thref,\n\tdisabled = false,\n\tsurface,\n\tstrings: stringsProp,\n\tclassName,\n\tonClick,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultTaskCardStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst completed = items.filter((item) => item.completed).length;\n\tconst completion = strings.formatCompletion(completed, items.length);\n\tconst completionCount = strings.formatCompletionCount(completed, items.length);\n\tconst hasFooter = assignedTo || href !== undefined || onOpen;\n\tconst hasMetadata = Boolean(dueDate || assignees?.length);\n\tfunction requestExpanded(next: boolean) {\n\t\tif (disabled) return;\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}\n\tfunction handleClick(event: MouseEvent<HTMLDivElement>) {\n\t\tonClick?.(event);\n\t\tif (disabled || event.defaultPrevented || !(event.target instanceof Element)) return;\n\t\tconst header = event.target.closest('.card--header');\n\t\tif (!header || header.closest('.card--component') !== event.currentTarget) return;\n\t\t// The native disclosure button and any nested controls own their clicks.\n\t\tconst control = event.target.closest(headerControlSelector);\n\t\tif (control && header.contains(control)) return;\n\t\trequestExpanded(!expanded);\n\t\tevent.currentTarget.querySelector<HTMLButtonElement>('.collapsible-trigger--component')?.focus({ preventScroll: true });\n\t}\n\n\treturn (\n\t\t<Collapsible\n\t\t\tref={ref}\n\t\t\topen={expanded}\n\t\t\tdisabled={disabled}\n\t\t\tonOpenChange={requestExpanded}\n\t\t\trender={(\n\t\t\t\t<Card\n\t\t\t\t\t{...props}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={hasMetadata ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"sm\" className=\"task-card--metadata\">\n\t\t\t\t\t\t\t{/* \"Due\" already labels the date; no calendar glyph. */}\n\t\t\t\t\t\t\t{dueDate && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.due} <time dateTime={dueDate.dateTime}>{dueDate.label}</time></Text>}\n\t\t\t\t\t\t\t{Boolean(assignees?.length) && <StackedAvatars users={assignees!} size=\"sm\" />}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t\tsurface={surface}\n\t\t\t\t\ttextGap=\"dense\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\theaderClassName={cn('flex-row flex-nowrap items-center', !disabled && 'cursor-pointer')}\n\t\t\t\t\tdata-expanded={expanded}\n\t\t\t\t\tclassName={cn('task-card--component min-w-0', className)}\n\t\t\t\t\ticon={<CompletionIndicator completed={completed} total={items.length} label={strings.completion} valueText={completion} />}\n\t\t\t\t\ttitleSuffix={(\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t\t{status && <Badge tone={status.tone ?? 'neutral'} size=\"sm\">{status.label}</Badge>}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" type=\"secondary\" className=\"task-card--count tabular-nums\" aria-label={completion}>{completionCount}</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\theaderAction={(\n\t\t\t\t\t\t<CollapsibleTrigger render={<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" size=\"sm\" iconOnly />} aria-label={expanded ? strings.collapse : strings.expand}>\n\t\t\t\t\t\t\t<ChevronDown aria-hidden=\"true\" className={cn('size-icon', expanded && 'rotate-180')} />\n\t\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t)}\n\t\t\t\t\tfooterSlot={expanded && hasFooter ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t\t{assignedTo && <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<StackedAvatars users={[assignedTo]} size=\"sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 break-words\">{strings.formatAssignedTo(assignedTo.name)}</Text>\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(href !== undefined || onOpen) && <Button type=\"button\" href={href} onClick={onOpen} disabled={disabled} tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\">\n\t\t\t\t\t\t\t\t{strings.open}<ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t>\n\t\t\t{expanded && <Stack gap=\"md\">\n\t\t\t\t<CollapsibleContent role=\"region\" aria-label={strings.subtasks}>\n\t\t\t\t\t{items.length > 0 ? <Stack role=\"list\" gap=\"none\" className=\"task-card--items\">\n\t\t\t\t\t\t{items.map((item) => <SubtaskRow key={item.id} item={item} disabled={disabled} onChange={onItemCompletedChange} savingLabel={strings.saving} />)}\n\t\t\t\t\t</Stack> : <Text type=\"secondary\">{strings.empty}</Text>}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>}\n\t\t</Collapsible>\n\t);\n});\n\nTaskCard.displayName = 'TaskCard';\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../timelines-B9ICkQcV.js";
2
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../timelines-CxuAFIc2.js";
3
3
  export { i as ChangelogTimeline, o as MilestonesTimeline, e as StepsCard, r as StepsHorizontal, a as Timeline, t as defaultChangelogTimelineStrings, n as defaultMilestonesTimelineStrings };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { _ as e, s as t } from "./ui-provider-CftIB6TY.js";
2
+ import { _ as e, s as t } from "./ui-provider-D2_TeLqw.js";
3
3
  import { useStrings as n } from "./lib/strings.js";
4
- import { t as r } from "./utils-C2EKeIw3.js";
5
- import { a as i } from "./typography-Cv8MT-82.js";
4
+ import { t as r } from "./utils-Cospvlj1.js";
5
+ import { s as i } from "./typography-CAr3dQhX.js";
6
6
  import { t as a } from "./slot-CLF9kLrS.js";
7
7
  import { Fragment as o, forwardRef as s } from "react";
8
8
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
@@ -11,14 +11,14 @@ import { ChevronRight as u } from "lucide-react";
11
11
  function d({ className: e, ...t }) {
12
12
  return /* @__PURE__ */ c("ol", {
13
13
  "data-slot": "breadcrumb-list",
14
- className: r("text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5", e),
14
+ className: r("text-muted-foreground flex flex-wrap items-center text-sm break-words", e),
15
15
  ...t
16
16
  });
17
17
  }
18
18
  function f({ className: e, ...t }) {
19
19
  return /* @__PURE__ */ c("li", {
20
20
  "data-slot": "breadcrumb-item",
21
- className: r("inline-flex items-center gap-1.5", e),
21
+ className: r("inline-flex items-center", e),
22
22
  ...t
23
23
  });
24
24
  }
@@ -74,7 +74,7 @@ var x = {
74
74
  item: "text-pxs",
75
75
  list: "!gap-space-sm",
76
76
  separator: "!mx-space-2xs",
77
- color: "text-muted-foreground/70"
77
+ color: "text-muted-foreground"
78
78
  },
79
79
  md: {
80
80
  item: "text-sm",
@@ -96,16 +96,17 @@ var x = {
96
96
  ref: T,
97
97
  "aria-label": C ?? O.navigationLabel,
98
98
  "data-slot": "breadcrumb",
99
- className: r("breadcrumbs--component", M, s),
99
+ className: r("breadcrumbs--component font-sans", M, s),
100
100
  ...w,
101
101
  children: /* @__PURE__ */ c(d, {
102
- className: r("flex flex-wrap items-center break-words", A),
102
+ className: r("m-0 p-0 list-none flex flex-wrap items-center break-words", A),
103
103
  children: i.map((e, t) => {
104
104
  let n = t === i.length - 1, a = e.handle ?? e.href ?? `crumb-${_(v(e.label))}-${t}`, s = /* @__PURE__ */ c(b, { children: e.label });
105
105
  return /* @__PURE__ */ l(o, { children: [/* @__PURE__ */ c(f, {
106
106
  className: r(k, "font-medium"),
107
107
  children: n || !e.href ? /* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(b, { children: e.label }) }) : /* @__PURE__ */ c(p, {
108
108
  asChild: !0,
109
+ className: "text-inherit no-underline rounded-inner focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
109
110
  children: u({
110
111
  href: e.href,
111
112
  children: s
@@ -124,4 +125,4 @@ S.displayName = "Breadcrumbs";
124
125
  //#endregion
125
126
  export { g as n, S as t };
126
127
 
127
- //# sourceMappingURL=breadcrumbs-DdQ_I5ra.js.map
128
+ //# sourceMappingURL=breadcrumbs-BG_FfMK4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs-BG_FfMK4.js","names":["resolveComponentScale","useDensityConfig","cn","Text","Slot","BreadcrumbList","props","className","BreadcrumbItem","BreadcrumbLink","asChild","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","defaultBreadcrumbsStrings","hashString","hash","i","value","labelToKey","label","defaultRenderLink","BreadcrumbLabel","sizeConfig","Breadcrumbs","forwardRef","sizeProp","stringsProp","ariaLabel","size","defaultScale","strings","useStrings","breadcrumbs","itemSizeClass","listSpacingClass","separatorSpacingClass","baseColorClass","isLast","index","itemKey","item","renderedLabel","Fragment","renderLink"],"sources":["../src/components/ui/breadcrumb.tsx","../src/components/base/navigation/breadcrumbs.tsx"],"sourcesContent":["import { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Slot } from './slot';\nimport { cn } from '../../lib/utils';\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n\treturn (\n\t\t<nav\n\t\t\taria-label=\"breadcrumb\"\n\t\t\tdata-slot=\"breadcrumb\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n\treturn (\n\t\t<ol\n\t\t\tdata-slot=\"breadcrumb-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-muted-foreground flex flex-wrap items-center text-sm break-words',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-item\"\n\t\t\tclassName={cn('inline-flex items-center', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbLink({\n\tasChild,\n\tclassName,\n\t...props\n}: React.ComponentProps<'a'> & {\n\tasChild?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'a';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"breadcrumb-link\"\n\t\t\tclassName={cn('hover:text-foreground transition-colors', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-page\"\n\t\t\trole=\"link\"\n\t\t\taria-disabled=\"true\"\n\t\t\taria-current=\"page\"\n\t\t\tclassName={cn('text-foreground font-normal', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbSeparator({\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-separator\"\n\t\t\trole=\"presentation\"\n\t\t\tclassName={cn('[&>svg]:size-3.5', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <ChevronRight />}\n\t\t</li>\n\t);\n}\n\nfunction BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-ellipsis\"\n\t\t\trole=\"presentation\"\n\t\t\tclassName={cn('flex size-9 items-center justify-center', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t<span className=\"sr-only\">More</span>\n\t\t</span>\n\t);\n}\n\nexport {\n\tBreadcrumb,\n\tBreadcrumbList,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n\tBreadcrumbEllipsis,\n};\n\n","/**\n * Breadcrumbs — page hierarchy trail. Last item is rendered as the current\n * page (non-link); preceding items become links when an `href` is provided.\n * The public scale follows the shared component scale; CSS variables control\n * display spacing and typography across the library.\n */\nimport { forwardRef, Fragment, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport {\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from '../../ui/breadcrumb';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nexport interface BreadcrumbItemType {\n\tlabel: ReactNode;\n\thref?: string;\n\thandle?: string;\n}\n\nexport type BreadcrumbSize = ComponentScale;\n\nexport interface BreadcrumbsStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultBreadcrumbsStrings: BreadcrumbsStrings = {\n\tnavigationLabel: 'Breadcrumb',\n};\n\ntype BreadcrumbLinkRenderer = (props: {\n\thref?: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\t'aria-label'?: string;\n}) => ReactNode;\n\nexport interface BreadcrumbsProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'> {\n\t/** Trail entries, root first. */\n\tbreadcrumbs: BreadcrumbItemType[];\n\t/** Typography scale for the trail. */\n\tsize?: BreadcrumbSize;\n\t/** Renders entries carrying an `href` through the consumer's router. */\n\trenderLink?: BreadcrumbLinkRenderer;\n\t/** Overrides the trail's own copy. */\n\tstrings?: StringsProp<BreadcrumbsStrings>;\n}\n\nconst hashString = (value: string): string => {\n\tlet hash = 0;\n\tfor (let i = 0; i < value.length; i += 1) {\n\t\thash = (hash << 5) - hash + value.charCodeAt(i);\n\t\thash |= 0;\n\t}\n\n\treturn Math.abs(hash).toString(36);\n};\n\nconst labelToKey = (label: ReactNode): string => {\n\tif (typeof label === 'string' || typeof label === 'number') return String(label);\n\treturn 'breadcrumb';\n};\n\nconst defaultRenderLink: BreadcrumbLinkRenderer = ({ href, children, ...props }) => (\n\t<a href={href} {...props}>{children}</a>\n);\n\nfunction BreadcrumbLabel({ children }: { children: ReactNode }) {\n\tif (\n\t\ttypeof children !== 'string' &&\n\t\ttypeof children !== 'number' &&\n\t\ttypeof children !== 'bigint'\n\t) {\n\t\treturn children;\n\t}\n\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nconst sizeConfig: Record<BreadcrumbSize, { item: string; list: string; separator: string; color: string }> = {\n\tsm: {\n\t\titem: 'text-pxs',\n\t\tlist: '!gap-space-sm',\n\t\tseparator: '!mx-space-2xs',\n\t\t// Full-strength secondary ink at every size; a translucent ancestor link fails text contrast.\n\t\tcolor: 'text-muted-foreground',\n\t},\n\tmd: {\n\t\titem: 'text-sm',\n\t\tlist: '!gap-space-md',\n\t\tseparator: '!mx-space-sm',\n\t\tcolor: 'text-muted-foreground',\n\t},\n\tlg: {\n\t\titem: 'text-base',\n\t\tlist: '!gap-space-lg',\n\t\tseparator: '!mx-space-md',\n\t\tcolor: 'text-muted-foreground',\n\t},\n};\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs({\n\tbreadcrumbs,\n\tsize: sizeProp,\n\tclassName,\n\trenderLink = defaultRenderLink,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...props\n}, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultBreadcrumbsStrings, stringsProp);\n\tif (breadcrumbs.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst { item: itemSizeClass, list: listSpacingClass, separator: separatorSpacingClass, color: baseColorClass } =\n\t\tsizeConfig[size];\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tdata-slot=\"breadcrumb\"\n\t\t\tclassName={cn('breadcrumbs--component font-sans', baseColorClass, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<BreadcrumbList className={cn('m-0 p-0 list-none flex flex-wrap items-center break-words', listSpacingClass)}>\n\t\t\t\t{breadcrumbs.map((item, index) => {\n\t\t\t\t\tconst isLast = index === breadcrumbs.length - 1;\n\t\t\t\t\tconst itemKey = item.handle ?? item.href ?? `crumb-${hashString(labelToKey(item.label))}-${index}`;\n\t\t\t\t\tconst renderedLabel = <BreadcrumbLabel>{item.label}</BreadcrumbLabel>;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={itemKey}>\n\t\t\t\t\t\t\t<BreadcrumbItem className={cn(itemSizeClass, 'font-medium')}>\n\t\t\t\t\t\t\t\t{isLast || !item.href ? (\n\t\t\t\t\t\t\t\t\t<BreadcrumbPage>\n\t\t\t\t\t\t\t\t\t\t<BreadcrumbLabel>{item.label}</BreadcrumbLabel>\n\t\t\t\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<BreadcrumbLink asChild className=\"text-inherit no-underline rounded-inner focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\">\n\t\t\t\t\t\t\t\t\t\t{renderLink({ href: item.href, children: renderedLabel })}\n\t\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t<BreadcrumbSeparator\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName={cn(separatorSpacingClass)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</BreadcrumbList>\n\t\t</nav>\n\t);\n});\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n"],"mappings":"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"}