themelia-react-ui 1.0.0 → 1.0.1

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 (257) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/README.md +39 -6
  3. package/dist/{accordion-BRWh3BM1.js → accordion-B-5Focs8.js} +2 -2
  4. package/dist/{accordion-BRWh3BM1.js.map → accordion-B-5Focs8.js.map} +1 -1
  5. package/dist/{affordance-geometry.generated-DXl-Zb3Z.js → affordance-geometry.generated-D8Jcfb0G.js} +10 -1
  6. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +1 -0
  7. package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-B5tPpXnS.js} +5 -5
  8. package/dist/{ai-artifact-DkOArd3-.js.map → ai-artifact-B5tPpXnS.js.map} +1 -1
  9. package/dist/{app-shell-BH_bGcE2.js → app-shell-at8Kt4l_.js} +3 -3
  10. package/dist/{app-shell-BH_bGcE2.js.map → app-shell-at8Kt4l_.js.map} +1 -1
  11. package/dist/{attachment-DsLgNHXt.js → attachment-BO2R47wn.js} +2 -2
  12. package/dist/{attachment-DsLgNHXt.js.map → attachment-BO2R47wn.js.map} +1 -1
  13. package/dist/{auth-BDB1V_2q.js → auth-OFwWSAap.js} +4 -4
  14. package/dist/{auth-BDB1V_2q.js.map → auth-OFwWSAap.js.map} +1 -1
  15. package/dist/{avatar-CsnWaYmt.js → avatar-Bpzty83c.js} +73 -68
  16. package/dist/avatar-Bpzty83c.js.map +1 -0
  17. package/dist/base/accordion.js +1 -1
  18. package/dist/base/attachment.js +1 -1
  19. package/dist/base/avatar.js +1 -1
  20. package/dist/base/cards.js +2 -2
  21. package/dist/base/cascader.js +6 -6
  22. package/dist/base/choice-inputs.js +3 -2
  23. package/dist/base/code-block.js +1 -1
  24. package/dist/base/combobox.js +1 -1
  25. package/dist/base/command.js +1 -1
  26. package/dist/base/date-pickers.js +2 -2
  27. package/dist/base/display.js +1 -1
  28. package/dist/base/feedback.js +4 -3
  29. package/dist/base/forms-numeric.js +1 -1
  30. package/dist/base/forms.js +2 -2
  31. package/dist/base/inline-edit.js +236 -0
  32. package/dist/base/inline-edit.js.map +1 -0
  33. package/dist/base/media-gallery.js +1 -1
  34. package/dist/base/navigation.js +3 -3
  35. package/dist/base/popover-menu.js +1 -1
  36. package/dist/base/popover.js +1 -1
  37. package/dist/base/repeaters.js +4 -4
  38. package/dist/base/sheet.js +1 -1
  39. package/dist/base/sidebar.js +1 -1
  40. package/dist/base/signature-pad.js +3 -3
  41. package/dist/base/skeleton.js +1 -1
  42. package/dist/base/spinner.js +1 -1
  43. package/dist/base/structure.js +1 -1
  44. package/dist/base/text-inputs.js +2 -2
  45. package/dist/base/tree.js +1 -1
  46. package/dist/base/upload-queue.js +1 -1
  47. package/dist/base/upload.js +3 -3
  48. package/dist/base/value-inputs.js +1 -1
  49. package/dist/blocks/admin.js +6 -6
  50. package/dist/blocks/ai.js +6 -6
  51. package/dist/blocks/analytics/usage-card.js +3 -0
  52. package/dist/blocks/analytics.js +361 -360
  53. package/dist/blocks/analytics.js.map +1 -1
  54. package/dist/blocks/collaboration.js +1 -1
  55. package/dist/blocks/commerce/receipt.js +1 -1
  56. package/dist/blocks/commerce.js +15 -15
  57. package/dist/blocks/data-display.js +1 -1
  58. package/dist/blocks/onboarding.js +3 -3
  59. package/dist/blocks/planning.js +311 -0
  60. package/dist/blocks/planning.js.map +1 -0
  61. package/dist/blocks/timelines.js +1 -1
  62. package/dist/{cards-BMB0laLG.js → cards-Cum56XOF.js} +3 -3
  63. package/dist/{cards-BMB0laLG.js.map → cards-Cum56XOF.js.map} +1 -1
  64. package/dist/checkbox-BavDRjF7.js +34 -0
  65. package/dist/checkbox-BavDRjF7.js.map +1 -0
  66. package/dist/{choice-inputs-CavA-SGV.js → choice-inputs-CC7XqPQO.js} +166 -191
  67. package/dist/choice-inputs-CC7XqPQO.js.map +1 -0
  68. package/dist/{code-block-DIlqzoiD.js → code-block-xHKbAJDj.js} +2 -2
  69. package/dist/{code-block-DIlqzoiD.js.map → code-block-xHKbAJDj.js.map} +1 -1
  70. package/dist/{combobox-HDftpzxt.js → combobox-DEbdr-3u.js} +2 -2
  71. package/dist/{combobox-HDftpzxt.js.map → combobox-DEbdr-3u.js.map} +1 -1
  72. package/dist/{combobox-CHD750do.js → combobox-xv3yJbzl.js} +7 -7
  73. package/dist/{combobox-CHD750do.js.map → combobox-xv3yJbzl.js.map} +1 -1
  74. package/dist/{command-D0kWBZfd.js → command-C0xe7u9B.js} +2 -2
  75. package/dist/{command-D0kWBZfd.js.map → command-C0xe7u9B.js.map} +1 -1
  76. package/dist/{comments-CvYeglMS.js → comments-DviPLnwy.js} +8 -8
  77. package/dist/{comments-CvYeglMS.js.map → comments-DviPLnwy.js.map} +1 -1
  78. package/dist/components/base/cards/smart-card.types.d.ts +2 -0
  79. package/dist/components/base/inline-edit/index.d.ts +2 -0
  80. package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
  81. package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
  82. package/dist/components/base/structure/structure.recipes.d.ts +6 -0
  83. package/dist/components/blocks/analytics/index.d.ts +1 -0
  84. package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
  85. package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
  86. package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
  87. package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
  88. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
  89. package/dist/components/blocks/planning/index.d.ts +3 -0
  90. package/dist/components/blocks/planning/task-card.d.ts +3 -0
  91. package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
  92. package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
  93. package/dist/{containers-CPNyNo1_.js → containers-6s-ucRQQ.js} +3 -2
  94. package/dist/containers-6s-ucRQQ.js.map +1 -0
  95. package/dist/{data-display-b3d1TfL4.js → data-display-cWIRdeaf.js} +8 -8
  96. package/dist/{data-display-b3d1TfL4.js.map → data-display-cWIRdeaf.js.map} +1 -1
  97. package/dist/{date-picker-DI6kPNof.js → date-picker-CA6ogMQB.js} +5 -5
  98. package/dist/{date-picker-DI6kPNof.js.map → date-picker-CA6ogMQB.js.map} +1 -1
  99. package/dist/{date-pickers-ByP6Cv2z.js → date-pickers-BPIKLdsD.js} +4 -4
  100. package/dist/{date-pickers-ByP6Cv2z.js.map → date-pickers-BPIKLdsD.js.map} +1 -1
  101. package/dist/{display-ByI5tkqy.js → display-CFM5myut.js} +3 -3
  102. package/dist/{display-ByI5tkqy.js.map → display-CFM5myut.js.map} +1 -1
  103. package/dist/features/activities.js +4 -4
  104. package/dist/features/ai-chat.js +4 -4
  105. package/dist/features/async-preview.js +4 -4
  106. package/dist/features/combobox.js +1 -1
  107. package/dist/features/comments.js +1 -1
  108. package/dist/features/data-view.js +5 -5
  109. package/dist/features/email-composer.js +11 -11
  110. package/dist/features/event-calendar.js +2 -2
  111. package/dist/features/event-calendar.js.map +1 -1
  112. package/dist/features/filters.js +1 -1
  113. package/dist/features/global-search.js +6 -6
  114. package/dist/features/map.js +3 -3
  115. package/dist/features/media-library.js +8 -8
  116. package/dist/features/mentions.js +1 -1
  117. package/dist/features/overlays.js +1 -1
  118. package/dist/features/products.js +43 -42
  119. package/dist/features/products.js.map +1 -1
  120. package/dist/features/questionnaire.js +107 -106
  121. package/dist/features/questionnaire.js.map +1 -1
  122. package/dist/features/resource-assignment.js +5 -5
  123. package/dist/features/resource.js +7 -7
  124. package/dist/features/rich-text-editor.js +1 -1
  125. package/dist/features/schema-form.js +11 -11
  126. package/dist/features/schema-form.js.map +1 -1
  127. package/dist/features/suggestions.js +2 -2
  128. package/dist/features/sync.js +2 -2
  129. package/dist/features/table.js +1 -1
  130. package/dist/features/theme-tweaker.js +11 -11
  131. package/dist/feedback-DWUkgEjR.js +233 -0
  132. package/dist/feedback-DWUkgEjR.js.map +1 -0
  133. package/dist/{field-affordance-recipes-CHdUtn2Z.js → field-affordance-recipes-IjzPrCTw.js} +2 -2
  134. package/dist/{field-affordance-recipes-CHdUtn2Z.js.map → field-affordance-recipes-IjzPrCTw.js.map} +1 -1
  135. package/dist/{filters-qtrcv1hf.js → filters-BhsUtsxW.js} +9 -9
  136. package/dist/{filters-qtrcv1hf.js.map → filters-BhsUtsxW.js.map} +1 -1
  137. package/dist/{form-field-C6W-y2hR.js → form-field-Bn7ZH1rA.js} +2 -2
  138. package/dist/{form-field-C6W-y2hR.js.map → form-field-Bn7ZH1rA.js.map} +1 -1
  139. package/dist/{form-sizing-39NohSqn.js → form-sizing-BWs70_a2.js} +4 -3
  140. package/dist/{form-sizing-39NohSqn.js.map → form-sizing-BWs70_a2.js.map} +1 -1
  141. package/dist/{forms-BF-HSbff.js → forms-B7pzS25o.js} +5 -5
  142. package/dist/{forms-BF-HSbff.js.map → forms-B7pzS25o.js.map} +1 -1
  143. package/dist/{forms-numeric-Y15Bg5Nr.js → forms-numeric-BUBxELBv.js} +18 -18
  144. package/dist/{forms-numeric-Y15Bg5Nr.js.map → forms-numeric-BUBxELBv.js.map} +1 -1
  145. package/dist/{header-B8ex54cY.js → header-C59QZyxV.js} +6 -6
  146. package/dist/{header-B8ex54cY.js.map → header-C59QZyxV.js.map} +1 -1
  147. package/dist/{hooks-D6UBVzf2.js → hooks-CM1Vp9Pe.js} +2 -2
  148. package/dist/{hooks-D6UBVzf2.js.map → hooks-CM1Vp9Pe.js.map} +1 -1
  149. package/dist/{input-DMorJiTI.js → input-WwYQZJzG.js} +3 -3
  150. package/dist/{input-DMorJiTI.js.map → input-WwYQZJzG.js.map} +1 -1
  151. package/dist/layout/app-shell.js +1 -1
  152. package/dist/layout/auth.js +1 -1
  153. package/dist/layout/containers.js +1 -1
  154. package/dist/layout/header.js +1 -1
  155. package/dist/layout/hooks.js +1 -1
  156. package/dist/layout/navigation.js +1 -1
  157. package/dist/layout/page.js +1 -1
  158. package/dist/layout/settings.js +1 -1
  159. package/dist/layout/sidebar.js +2 -2
  160. package/dist/layout/workspace.js +1 -1
  161. package/dist/layout.js +10 -10
  162. package/dist/lib/affordance-geometry.generated.d.ts +9 -0
  163. package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DhDRgnVZ.js} +2 -2
  164. package/dist/{media-gallery-Ca4YmvBi.js.map → media-gallery-DhDRgnVZ.js.map} +1 -1
  165. package/dist/{mentions-CRio8mTm.js → mentions-B8Ko-fhS.js} +4 -4
  166. package/dist/{mentions-CRio8mTm.js.map → mentions-B8Ko-fhS.js.map} +1 -1
  167. package/dist/{message-B5-6LeYl.js → message-COsdEvXT.js} +2 -2
  168. package/dist/{message-B5-6LeYl.js.map → message-COsdEvXT.js.map} +1 -1
  169. package/dist/{navigation-DqEITuD2.js → navigation-BUIn2Qxx.js} +2 -2
  170. package/dist/{navigation-DqEITuD2.js.map → navigation-BUIn2Qxx.js.map} +1 -1
  171. package/dist/{navigation-BTrEb5u4.js → navigation-DBEu4POU.js} +3 -3
  172. package/dist/{navigation-BTrEb5u4.js.map → navigation-DBEu4POU.js.map} +1 -1
  173. package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-GVh11KiT.js} +2 -2
  174. package/dist/{navigation-row-recipes-BFpvGPGE.js.map → navigation-row-recipes-GVh11KiT.js.map} +1 -1
  175. package/dist/{overlays-DBqV0J_V.js → overlays-B11wZka6.js} +4 -4
  176. package/dist/{overlays-DBqV0J_V.js.map → overlays-B11wZka6.js.map} +1 -1
  177. package/dist/{page-BMBGjJY8.js → page-BV6ioQg3.js} +5 -5
  178. package/dist/{page-BMBGjJY8.js.map → page-BV6ioQg3.js.map} +1 -1
  179. package/dist/{page-header-BH41wCyY.js → page-header-DQRa0jug.js} +2 -2
  180. package/dist/{page-header-BH41wCyY.js.map → page-header-DQRa0jug.js.map} +1 -1
  181. package/dist/{popover-TInGXsjg.js → popover-CoLDEg19.js} +2 -2
  182. package/dist/{popover-TInGXsjg.js.map → popover-CoLDEg19.js.map} +1 -1
  183. package/dist/{popover-menu-BzqXqE72.js → popover-menu-GLIQTJTx.js} +4 -4
  184. package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-GLIQTJTx.js.map} +1 -1
  185. package/dist/progress-BOe8l_FZ.js +168 -0
  186. package/dist/progress-BOe8l_FZ.js.map +1 -0
  187. package/dist/{receipt-DYWTQGEc.js → receipt-BM8xsGFy.js} +3 -3
  188. package/dist/{receipt-DYWTQGEc.js.map → receipt-BM8xsGFy.js.map} +1 -1
  189. package/dist/{rich-text-editor-BZSJchAF.js → rich-text-editor-CoVrTiSv.js} +2 -2
  190. package/dist/{rich-text-editor-BZSJchAF.js.map → rich-text-editor-CoVrTiSv.js.map} +1 -1
  191. package/dist/services/actions.js +1 -1
  192. package/dist/{settings-D9f_wdIC.js → settings-BnCyyPOJ.js} +3 -3
  193. package/dist/{settings-D9f_wdIC.js.map → settings-BnCyyPOJ.js.map} +1 -1
  194. package/dist/{sheet-vOUloJ4O.js → sheet-B-q914Ad.js} +2 -2
  195. package/dist/{sheet-vOUloJ4O.js.map → sheet-B-q914Ad.js.map} +1 -1
  196. package/dist/{sidebar-C3UKkbC5.js → sidebar-C_2p3Tfj.js} +6 -6
  197. package/dist/{sidebar-C3UKkbC5.js.map → sidebar-C_2p3Tfj.js.map} +1 -1
  198. package/dist/{sidebar-CNBKFDRW.js → sidebar-DPR7fmqN.js} +4 -4
  199. package/dist/{sidebar-CNBKFDRW.js.map → sidebar-DPR7fmqN.js.map} +1 -1
  200. package/dist/{skeleton-BvRhK8y-.js → skeleton-CmT1ppqb.js} +2 -2
  201. package/dist/{skeleton-BvRhK8y-.js.map → skeleton-CmT1ppqb.js.map} +1 -1
  202. package/dist/{smart-card-B5FcKODh.js → smart-card-CYLn46e6.js} +119 -118
  203. package/dist/smart-card-CYLn46e6.js.map +1 -0
  204. package/dist/{spinner-JtlFJ7Nc.js → spinner-BY9HbUEh.js} +2 -2
  205. package/dist/{spinner-JtlFJ7Nc.js.map → spinner-BY9HbUEh.js.map} +1 -1
  206. package/dist/{structure-BvW4vG4H.js → structure-MvKVq-oL.js} +13 -13
  207. package/dist/{structure-BvW4vG4H.js.map → structure-MvKVq-oL.js.map} +1 -1
  208. package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
  209. package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
  210. package/dist/style.css +1 -1
  211. package/dist/{table-ghtAQ-JJ.js → table-BS39xnlq.js} +6 -6
  212. package/dist/{table-ghtAQ-JJ.js.map → table-BS39xnlq.js.map} +1 -1
  213. package/dist/{tabs-DY09eoZg.js → tabs-B5cNMWiP.js} +2 -2
  214. package/dist/{tabs-DY09eoZg.js.map → tabs-B5cNMWiP.js.map} +1 -1
  215. package/dist/{text-inputs-BhOcedTo.js → text-inputs-Dh9XGyiS.js} +4 -4
  216. package/dist/{text-inputs-BhOcedTo.js.map → text-inputs-Dh9XGyiS.js.map} +1 -1
  217. package/dist/{timelines-CnZ2S_Gr.js → timelines-B9ICkQcV.js} +2 -2
  218. package/dist/{timelines-CnZ2S_Gr.js.map → timelines-B9ICkQcV.js.map} +1 -1
  219. package/dist/{tree-COD9BGdU.js → tree-BdWSaoFT.js} +2 -2
  220. package/dist/{tree-COD9BGdU.js.map → tree-BdWSaoFT.js.map} +1 -1
  221. package/dist/{upload-DIzw1dx1.js → upload-D8Za5x_c.js} +4 -4
  222. package/dist/{upload-DIzw1dx1.js.map → upload-D8Za5x_c.js.map} +1 -1
  223. package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-hIIYBLS7.js} +3 -3
  224. package/dist/{upload-queue-xRJ3qDmd.js.map → upload-queue-hIIYBLS7.js.map} +1 -1
  225. package/dist/usage-card-DnmnJ58D.js +458 -0
  226. package/dist/usage-card-DnmnJ58D.js.map +1 -0
  227. package/dist/{value-inputs-Co1fu-xv.js → value-inputs-DX2dbxjj.js} +7 -7
  228. package/dist/{value-inputs-Co1fu-xv.js.map → value-inputs-DX2dbxjj.js.map} +1 -1
  229. package/dist/{workspace-Cbqz4FzN.js → workspace-C1PZmk8L.js} +4 -4
  230. package/dist/{workspace-Cbqz4FzN.js.map → workspace-C1PZmk8L.js.map} +1 -1
  231. package/docs/consumer-skill/SKILL.md +120 -17
  232. package/docs/consumer-skill/examples/detail.tsx +7 -8
  233. package/docs/consumer-skill/examples/manifest.json +14 -0
  234. package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
  235. package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
  236. package/docs/consumer-skill/references/composition.md +103 -0
  237. package/docs/consumer-skill/references/design-contract.md +4 -3
  238. package/docs/consumer-skill/references/discovery.md +17 -0
  239. package/docs/consumer-skill/references/installation.md +20 -3
  240. package/docs/consumer-skill/references/integration.md +12 -0
  241. package/docs/consumer-skill/references/public-api.json +452 -229
  242. package/docs/consumer-skill/references/review.md +74 -0
  243. package/docs/consumer-skill/references/tokens.json +1 -1
  244. package/docs/consumer-skill/references/workflows.md +97 -1
  245. package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
  246. package/docs/consumer-skill/scripts/composition-policy.mjs +155 -0
  247. package/docs/consumer-skill/scripts/discovery.mjs +6 -1
  248. package/docs/consumer-skill/scripts/surface-policy.mjs +22 -0
  249. package/package.json +24 -3
  250. package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
  251. package/dist/avatar-CsnWaYmt.js.map +0 -1
  252. package/dist/choice-inputs-CavA-SGV.js.map +0 -1
  253. package/dist/containers-CPNyNo1_.js.map +0 -1
  254. package/dist/feedback-a9j9J-9A.js +0 -391
  255. package/dist/feedback-a9j9J-9A.js.map +0 -1
  256. package/dist/smart-card-B5FcKODh.js.map +0 -1
  257. package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
@@ -4,27 +4,27 @@ import { mergeStrings as t, useStrings as n } from "../lib/strings.js";
4
4
  import { t as r } from "../utils-C2EKeIw3.js";
5
5
  import { n as i } from "../buttons-Co6GavvM.js";
6
6
  import { a, i as o, r as s, t as c } from "../typography-Cv8MT-82.js";
7
- import { r as l, t as u } from "../structure-BvW4vG4H.js";
8
- import { t as d, u as f } from "../smart-card-B5FcKODh.js";
9
- import { r as p } from "../feedback-a9j9J-9A.js";
10
- import { n as m } from "../cards-BMB0laLG.js";
7
+ import { r as l, t as u } from "../structure-MvKVq-oL.js";
8
+ import { t as d, u as f } from "../smart-card-CYLn46e6.js";
9
+ import { t as p } from "../progress-BOe8l_FZ.js";
10
+ import { n as m } from "../cards-Cum56XOF.js";
11
11
  import { _ as h, c as g, g as _, m as v, u as y } from "../primitives-DKPOGVpj.js";
12
12
  import { n as b, r as x, t as S } from "../number-BNT_BIzJ.js";
13
13
  import { t as C } from "../icon-badge-Dv0RYQwj.js";
14
- import { i as w, n as T, s as E } from "../avatar-CsnWaYmt.js";
14
+ import { i as w, n as T, s as E } from "../avatar-Bpzty83c.js";
15
15
  import { t as D } from "../badge-BZXZT9wd.js";
16
16
  import { t as O } from "../separator-Gk_WXH-l.js";
17
- import { t as k } from "../input-DMorJiTI.js";
18
- import { i as A, n as j } from "../display-ByI5tkqy.js";
19
- import { t as M } from "../form-field-C6W-y2hR.js";
20
- import { a as N, l as ee, r as te } from "../choice-inputs-CavA-SGV.js";
21
- import { u as ne } from "../value-inputs-Co1fu-xv.js";
22
- import { d as P, n as re } from "../forms-numeric-Y15Bg5Nr.js";
17
+ import { t as k } from "../input-WwYQZJzG.js";
18
+ import { i as A, n as j } from "../display-CFM5myut.js";
19
+ import { t as M } from "../form-field-Bn7ZH1rA.js";
20
+ import { a as N, c as ee, r as te } from "../choice-inputs-CC7XqPQO.js";
21
+ import { u as ne } from "../value-inputs-DX2dbxjj.js";
22
+ import { d as P, n as re } from "../forms-numeric-BUBxELBv.js";
23
23
  import { a as ie, c as F, i as I, n as L, o as R, r as z, t as B, u as V } from "../item-pJ0GsOiJ.js";
24
- import { i as ae, n as oe, r as se, t as ce } from "../tabs-DY09eoZg.js";
25
- import { g as H, n as U } from "../data-display-b3d1TfL4.js";
26
- import { n as le, t as ue } from "../receipt-DYWTQGEc.js";
27
- import { s as de } from "../timelines-CnZ2S_Gr.js";
24
+ import { i as ae, n as oe, r as se, t as ce } from "../tabs-B5cNMWiP.js";
25
+ import { g as H, n as U } from "../data-display-cWIRdeaf.js";
26
+ import { n as le, t as ue } from "../receipt-BM8xsGFy.js";
27
+ import { s as de } from "../timelines-B9ICkQcV.js";
28
28
  import { forwardRef as fe, useEffect as pe, useId as me, useRef as he, useState as ge } from "react";
29
29
  import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
30
30
  import { ArrowRight as _e, Barcode as ve, Calendar as ye, CalendarClock as be, Check as q, CheckCircle2 as xe, ChevronRight as Se, Circle as Ce, CircleAlert as we, Copy as Te, CreditCard as Ee, Edit2 as De, ExternalLink as Oe, Eye as ke, Gauge as Ae, Gift as J, Loader2 as je, MapPin as Me, MessageSquare as Ne, Package as Pe, PackageCheck as Fe, Pencil as Ie, Receipt as Le, RefreshCw as Re, Repeat as ze, RotateCcw as Be, Search as Ve, ShoppingBag as He, Sparkles as Ue, Star as We, TicketPercent as Ge, Trash2 as Ke, TriangleAlert as qe, Trophy as Je, X as Ye } from "lucide-react";
@@ -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-b3d1TfL4.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-cWIRdeaf.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 };
@@ -2,9 +2,9 @@
2
2
  import { useStrings as e } from "../lib/strings.js";
3
3
  import { t } from "../utils-C2EKeIw3.js";
4
4
  import { a as n } from "../typography-Cv8MT-82.js";
5
- import { t as r } from "../structure-BvW4vG4H.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-BRWh3BM1.js";
7
- import { t as f } from "../spinner-JtlFJ7Nc.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";
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";
@@ -0,0 +1,311 @@
1
+ "use client";
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";
14
+ import { forwardRef as v, useId as y, useState as b } from "react";
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";
17
+ //#region src/components/blocks/planning/task-card.strings.ts
18
+ var O = {
19
+ expand: "Expand subtasks",
20
+ collapse: "Collapse subtasks",
21
+ subtasks: "Subtasks",
22
+ completion: "Subtask completion",
23
+ due: "Due",
24
+ open: "Open",
25
+ empty: "No subtasks yet.",
26
+ saving: "Saving…",
27
+ formatCompletionCount: (e, t) => `${e}/${t}`,
28
+ formatCompletion: (e, t) => `${e} of ${t} completed`,
29
+ formatAssignedTo: (e) => `Assigned to ${e}`
30
+ }, k = [
31
+ "button, a[href], input, select, textarea, summary, label, [tabindex]",
32
+ "[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]",
33
+ "[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]",
34
+ "[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]",
35
+ "[contenteditable]:not([contenteditable=\"false\"])"
36
+ ].join(", ");
37
+ function A({ completed: e, total: n, label: r, valueText: i }) {
38
+ let a = `task-completion-${y()}`;
39
+ return n === 0 ? /* @__PURE__ */ x(E, {
40
+ "aria-hidden": "true",
41
+ className: "text-muted-foreground"
42
+ }) : /* @__PURE__ */ x(s, {
43
+ value: e,
44
+ max: n,
45
+ "aria-label": r,
46
+ getAriaValueText: () => i,
47
+ headerSlot: null,
48
+ className: "task-card--completion block shrink-0",
49
+ trackSlot: /* @__PURE__ */ S("svg", {
50
+ viewBox: "0 0 24 24",
51
+ "aria-hidden": "true",
52
+ className: "-rotate-90",
53
+ children: [
54
+ /* @__PURE__ */ x("defs", { children: /* @__PURE__ */ x("mask", {
55
+ id: a,
56
+ maskUnits: "userSpaceOnUse",
57
+ x: "0",
58
+ y: "0",
59
+ width: "24",
60
+ height: "24",
61
+ style: { maskType: "alpha" },
62
+ children: /* @__PURE__ */ x("circle", {
63
+ cx: "12",
64
+ cy: "12",
65
+ r: "9",
66
+ pathLength: "100",
67
+ fill: "none",
68
+ stroke: "currentColor",
69
+ strokeWidth: "4",
70
+ strokeDasharray: "100",
71
+ strokeDashoffset: 100 - e / n * 100,
72
+ className: "task-card--completion-reveal transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none"
73
+ })
74
+ }) }),
75
+ /* @__PURE__ */ x("circle", {
76
+ cx: "12",
77
+ cy: "12",
78
+ r: "9",
79
+ pathLength: "100",
80
+ fill: "none",
81
+ strokeWidth: "3",
82
+ strokeLinecap: "round",
83
+ strokeDasharray: "5 7.5",
84
+ className: "stroke-muted"
85
+ }),
86
+ /* @__PURE__ */ x("circle", {
87
+ cx: "12",
88
+ cy: "12",
89
+ r: "9",
90
+ pathLength: "100",
91
+ fill: "none",
92
+ strokeWidth: "3",
93
+ strokeLinecap: "round",
94
+ strokeDasharray: "5 7.5",
95
+ mask: `url(#${a})`,
96
+ className: t("transition-[stroke] duration-300 ease-out motion-reduce:transition-none", e === n ? "stroke-success" : "stroke-primary")
97
+ })
98
+ ]
99
+ })
100
+ });
101
+ }
102
+ function j({ item: e, disabled: n, onChange: a, savingLabel: o }) {
103
+ let s = y(), l = y(), u = y();
104
+ return /* @__PURE__ */ S(_, {
105
+ role: "listitem",
106
+ density: "compact",
107
+ className: "task-card--item gap-space-md py-space-xs",
108
+ "data-completed": e.completed || void 0,
109
+ children: [
110
+ /* @__PURE__ */ x(m, { children: /* @__PURE__ */ x(p, {
111
+ id: l,
112
+ checked: e.completed,
113
+ disabled: n || e.disabled || e.busy || !a,
114
+ "aria-labelledby": s,
115
+ "aria-describedby": e.error ? u : void 0,
116
+ "aria-invalid": e.error ? !0 : void 0,
117
+ "aria-busy": e.busy || void 0,
118
+ onCheckedChange: (t) => a?.(e.id, t === !0)
119
+ }) }),
120
+ /* @__PURE__ */ S(g, { children: [
121
+ /* @__PURE__ */ x(i, {
122
+ htmlFor: l,
123
+ children: /* @__PURE__ */ x(r, {
124
+ id: s,
125
+ tag: "span",
126
+ type: e.completed ? "secondary" : "main",
127
+ className: t("task-card--item-title min-w-0 break-words", e.completed && "line-through"),
128
+ children: e.title
129
+ })
130
+ }),
131
+ e.error && /* @__PURE__ */ x(r, {
132
+ id: u,
133
+ role: "alert",
134
+ size: "xs",
135
+ type: "error",
136
+ children: e.error
137
+ }),
138
+ e.busy && /* @__PURE__ */ x(r, {
139
+ role: "status",
140
+ size: "xs",
141
+ type: "secondary",
142
+ children: o
143
+ })
144
+ ] }),
145
+ (e.assignee || e.busy) && /* @__PURE__ */ S(h, { children: [e.busy && /* @__PURE__ */ x(D, {
146
+ "aria-hidden": "true",
147
+ className: "size-icon animate-spin motion-reduce:animate-none text-muted-foreground"
148
+ }), e.assignee && /* @__PURE__ */ x(c, {
149
+ users: [e.assignee],
150
+ size: "sm"
151
+ })] })
152
+ ]
153
+ });
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));
159
+ }
160
+ function X(e) {
161
+ if (L?.(e), N || e.defaultPrevented || !(e.target instanceof Element)) return;
162
+ let t = e.target.closest(".card--header");
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 }));
166
+ }
167
+ return /* @__PURE__ */ x(f, {
168
+ ref: z,
169
+ open: U,
170
+ disabled: N,
171
+ onOpenChange: Y,
172
+ render: /* @__PURE__ */ x(o, {
173
+ ...R,
174
+ onClick: X,
175
+ title: i,
176
+ description: J ? /* @__PURE__ */ S(a, {
177
+ direction: "horizontal",
178
+ align: "center",
179
+ justify: "between",
180
+ gap: "sm",
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
+ })]
202
+ }), !!h?.length && /* @__PURE__ */ x(c, {
203
+ users: h,
204
+ size: "sm"
205
+ })]
206
+ }) : void 0,
207
+ surface: P,
208
+ textGap: "dense",
209
+ 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,
215
+ total: s.length,
216
+ label: B.completion,
217
+ valueText: G
218
+ }),
219
+ titleSuffix: /* @__PURE__ */ S(a, {
220
+ direction: "horizontal",
221
+ align: "center",
222
+ gap: "sm",
223
+ children: [p && /* @__PURE__ */ x(l, {
224
+ tone: p.tone ?? "neutral",
225
+ size: "sm",
226
+ children: p.label
227
+ }), /* @__PURE__ */ x(r, {
228
+ tag: "span",
229
+ size: "xs",
230
+ weight: "medium",
231
+ type: "secondary",
232
+ className: "task-card--count tabular-nums",
233
+ "aria-label": G,
234
+ children: K
235
+ })]
236
+ }),
237
+ headerAction: /* @__PURE__ */ x(d, {
238
+ render: /* @__PURE__ */ x(n, {
239
+ type: "button",
240
+ tone: "neutral",
241
+ buttonStyle: "ghost",
242
+ size: "sm",
243
+ iconOnly: !0
244
+ }),
245
+ "aria-label": U ? B.collapse : B.expand,
246
+ children: /* @__PURE__ */ x(T, {
247
+ "aria-hidden": "true",
248
+ className: t("size-icon", U && "rotate-180")
249
+ })
250
+ }),
251
+ footerDivider: U && !!q,
252
+ footerSlot: U && q ? /* @__PURE__ */ S(a, {
253
+ direction: "horizontal",
254
+ align: "center",
255
+ justify: "between",
256
+ gap: "md",
257
+ children: [g && /* @__PURE__ */ S(a, {
258
+ direction: "horizontal",
259
+ align: "center",
260
+ gap: "sm",
261
+ className: "min-w-0 flex-1",
262
+ children: [/* @__PURE__ */ x(c, {
263
+ users: [g],
264
+ size: "sm"
265
+ }), /* @__PURE__ */ x(r, {
266
+ tag: "span",
267
+ size: "xs",
268
+ type: "secondary",
269
+ className: "min-w-0 break-words",
270
+ children: B.formatAssignedTo(g.name)
271
+ })]
272
+ }), (M !== void 0 || D) && /* @__PURE__ */ S(n, {
273
+ type: "button",
274
+ href: M,
275
+ onClick: D,
276
+ disabled: N,
277
+ tone: "neutral",
278
+ buttonStyle: "outline",
279
+ size: "sm",
280
+ children: [B.open, /* @__PURE__ */ x(C, { "aria-hidden": "true" })]
281
+ })]
282
+ }) : void 0
283
+ }),
284
+ children: U && /* @__PURE__ */ x(a, {
285
+ gap: "md",
286
+ children: /* @__PURE__ */ x(u, {
287
+ role: "region",
288
+ "aria-label": B.subtasks,
289
+ children: s.length > 0 ? /* @__PURE__ */ x(a, {
290
+ role: "list",
291
+ gap: "none",
292
+ className: "task-card--items",
293
+ children: s.map((e) => /* @__PURE__ */ x(j, {
294
+ item: e,
295
+ disabled: N,
296
+ onChange: E,
297
+ savingLabel: B.saving
298
+ }, e.id))
299
+ }) : /* @__PURE__ */ x(r, {
300
+ type: "secondary",
301
+ children: B.empty
302
+ })
303
+ })
304
+ })
305
+ });
306
+ });
307
+ M.displayName = "TaskCard";
308
+ //#endregion
309
+ export { M as TaskCard, O as defaultTaskCardStrings };
310
+
311
+ //# sourceMappingURL=planning.js.map
@@ -0,0 +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,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-CnZ2S_Gr.js";
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";
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
2
  import { t as e } from "./utils-C2EKeIw3.js";
3
3
  import { n as t } from "./buttons-Co6GavvM.js";
4
- import { t as n } from "./structure-BvW4vG4H.js";
5
- import { c as r, d as i, i as a, l as o, s } from "./smart-card-B5FcKODh.js";
4
+ import { t as n } from "./structure-MvKVq-oL.js";
5
+ import { c as r, d as i, i as a, l as o, s } from "./smart-card-CYLn46e6.js";
6
6
  import { t as c } from "./action-menu-Cx3SdfbN.js";
7
7
  import { t as l } from "./separator-Gk_WXH-l.js";
8
8
  import { forwardRef as u } from "react";
@@ -63,4 +63,4 @@ m.displayName = "CardPrimaryAction", h.displayName = "CardActionStrip";
63
63
  //#endregion
64
64
  export { m as n, p as r, h as t };
65
65
 
66
- //# sourceMappingURL=cards-BMB0laLG.js.map
66
+ //# sourceMappingURL=cards-Cum56XOF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cards-BMB0laLG.js","names":["cn","Button","Stack","CardShell","SURFACE_CLASSES","CardContent","CardTitle","ActionButtons","Separator","SmartCardSkeleton","SkeletonBar","barClassName","className","CardHeader","title","lines","i","CardPrimaryAction","forwardRef","props","hidden","CardActionStrip","visible","actions","action","alignClassName","align","separator","compact","fullWidthPrimary","buttonClassName"],"sources":["../src/components/base/cards/partials/smart-card-skeleton.tsx","../src/components/base/cards/card-actions.tsx"],"sourcesContent":["/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { Stack } from '../../structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport { CardContent, CardHeader, CardShell, CardTitle } from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({ title, lines = 2, className }: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell\n\t\t\tclassName={cn('smart-card-skeleton--component', SURFACE_CLASSES.card, 'gap-space-xl py-surface', className)}\n\t\t>\n\t\t\t<CardHeader className=\"flex-col gap-normal px-surface pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"px-surface py-0\">\n\t\t\t\t<Stack gap=\"lg\">\n\t\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t\t<SkeletonBar key={`skel-${String(i)}`} barClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')} />\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * Card action recipes — package-owned chrome for body/footer card actions.\n *\n * Use these instead of hand-rolled footer button rows in resource cards.\n */\nimport { forwardRef, type ComponentProps, type ReactElement, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Button } from '../buttons';\nimport {\n\tActionButtons,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../action-menu';\nimport { Separator } from '../display/separator';\nimport { cn } from '../../../lib/utils';\n\nexport interface CardPrimaryActionProps\n\textends Omit<ComponentProps<typeof Button>, 'variant' | 'fullWidth' | 'children'> {\n\tchildren: ReactNode;\n\ticon?: LucideIcon;\n\t/** Renders the action as an anchor to this destination. */\n\thref?: string;\n\t/** Omits the action without changing the others' order. */\n\thidden?: boolean;\n\t/** Stretches the action to the row's width. */\n\tfullWidth?: boolean;\n}\n\nexport const CardPrimaryAction = forwardRef<HTMLButtonElement, CardPrimaryActionProps>(function CardPrimaryAction({\n\tchildren,\n\ticon,\n\thidden = false,\n\tfullWidth = true,\n\tclassName,\n\t...props\n}: CardPrimaryActionProps, ref) {\n\tif (hidden) return null;\n\n\treturn (\n\t\t<Button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\ttone=\"primary\"\n\t\t\tfullWidth={fullWidth}\n\t\t\ticon={icon}\n\t\t\tclassName={cn('card-primary-action--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nexport interface CardActionStripProps {\n\t/** Actions to render, in order. */\n\tactions: readonly ActionMenuAction[];\n\t/** Draws a rule above the action row. */\n\tseparator?: boolean;\n\t/** Horizontal alignment of the action row. */\n\talign?: 'start' | 'end' | 'between' | 'stretch';\n\t/** Tightens the row for dense cards. */\n\tcompact?: boolean;\n\t/** Stretches only the primary action. */\n\tfullWidthPrimary?: boolean;\n\tclassName?: string;\n\t/** Merged onto every button in the row. */\n\tbuttonClassName?: string;\n\t/** Renders actions carrying an `href` through the consumer's router. */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}\n\nexport function CardActionStrip({\n\tactions,\n\tseparator = false,\n\talign = 'start',\n\tcompact = false,\n\tfullWidthPrimary = false,\n\tclassName,\n\tbuttonClassName,\n\trenderLink,\n}: CardActionStripProps) {\n\tconst visible = actions.filter((action) => action.visible !== false);\n\tif (visible.length === 0) return null;\n\n\tconst alignClassName = {\n\t\tstart: 'justify-start',\n\t\tend: 'justify-end',\n\t\tbetween: 'justify-between',\n\t\tstretch: 'justify-stretch',\n\t}[align];\n\n\treturn (\n\t\t<div className={cn('card-action-strip--component', className)}>\n\t\t\t{!!separator && <Separator className={cn(compact ? 'mb-space-sm' : 'mb-space-md')} />}\n\t\t\t<ActionButtons\n\t\t\t\tactions={visible}\n\t\t\t\tsize={compact ? 'sm' : 'md'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex-wrap',\n\t\t\t\t\talignClassName,\n\t\t\t\t\talign === 'stretch' && '[&>.base-button--component]:flex-1',\n\t\t\t\t\tfullWidthPrimary && '[&>.base-button--component:first-child]:flex-1',\n\t\t\t\t)}\n\t\t\t\tbuttonClassName={cn(\n\t\t\t\t\tcompact ? 'min-w-0' : 'min-w-24',\n\t\t\t\t\tbuttonClassName,\n\t\t\t\t)}\n\t\t\t\trenderLink={renderLink}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nCardPrimaryAction.displayName = 'CardPrimaryAction';\nCardActionStrip.displayName = 'CardActionStrip';\n"],"mappings":";;;;;;;;;;AAqBA,SAAgBS,EAAkB,EAAE,UAAO,WAAQ,GAAG,gBAAqC;CAC1F,IAAMC,KAAe,EAAE,sBACtB,kBAAC,OAAD,EAAK,WAAWV,EAAG,kCAAkCW,CAAY,EAAI,CAAA;CAGtE,OACC,kBAACR,GAAD;EACC,WAAWH,EAAG,kCAAkCI,EAAgB,MAAM,2BAA2BQ,CAAS;EAD3G,UAAA,CAGC,kBAACC,GAAD;GAAY,WAAU;GACpB,UAAAC,IAAQ,kBAACR,GAAD,EAAA,UAAYQ,EAAiB,CAAA,IAAI,kBAACJ,GAAD,EAAa,cAAa,WAAY,CAAA;EACrE,CAAA,GACZ,kBAACL,GAAD;GAAa,WAAU;GACtB,UAAA,kBAACH,GAAD;IAAO,KAAI;IACT,UAAA,MAAM,KAAK,EAAE,QAAQa,EAAM,IAAI,GAAG,MAClC,kBAACL,GAAD,EAAuC,cAAcV,EAAG,OAAOgB,MAAM,IAAI,WAAW,OAAO,EAAI,GAA7E,QAAQ,OAAOA,CAAC,GAA6D,CAC/F;GACK,CAAA;EACK,CAAA,CACH;;AAEb;AAEA,EAAkB,cAAc;;;ACfhC,IAAaC,IAAoBC,EAAsD,SAA2B,EACjH,aACA,SACA,YAAS,IACT,eAAY,IACZ,cACA,GAAGC,KACuB,GAAK;CAG/B,OAFIC,IAAe,OAGlB,kBAACnB,GAAD;EACM;EACL,MAAK;EACL,MAAK;EACM;EACL;EACN,WAAWD,EAAG,kCAAkCY,CAAS;EACzD,GAAIO;EAEH;CACM,CAAA;AAEV,CAAC;AAoBD,SAAgBE,EAAgB,EAC/B,YACA,eAAY,IACZ,WAAQ,SACR,aAAU,IACV,sBAAmB,IACnB,cACA,oBACA,iBACwB;CACxB,IAAMC,IAAUC,EAAQ,QAAQ,MAAWC,EAAO,YAAY,EAAK;CACnE,IAAIF,EAAQ,WAAW,GAAG,OAAO;CAEjC,IAAMG,IAAiB;EACtB,OAAO;EACP,KAAK;EACL,SAAS;EACT,SAAS;CACV,EAAEC;CAEF,OACC,kBAAC,OAAD;EAAK,WAAW1B,EAAG,gCAAgCY,CAAS;EAA5D,UAAA,CACE,CAAC,CAACe,KAAa,kBAACnB,GAAD,EAAW,WAAWR,EAAG4B,IAAU,gBAAgB,aAAa,EAAI,CAAA,GACpF,kBAACrB,GAAD;GACC,SAASe;GACT,MAAMM,IAAU,OAAO;GACvB,WAAW5B,EACV,aACAyB,GACAC,MAAU,aAAa,sCACvBG,KAAoB,gDACrB;GACA,iBAAiB7B,EAChB4B,IAAU,YAAY,YACtBE,CACD;GACY;EACZ,CAAA,CACG;;AAEP;AAEA,EAAkB,cAAc,qBAChC,EAAgB,cAAc"}
1
+ {"version":3,"file":"cards-Cum56XOF.js","names":["cn","Button","Stack","CardShell","SURFACE_CLASSES","CardContent","CardTitle","ActionButtons","Separator","SmartCardSkeleton","SkeletonBar","barClassName","className","CardHeader","title","lines","i","CardPrimaryAction","forwardRef","props","hidden","CardActionStrip","visible","actions","action","alignClassName","align","separator","compact","fullWidthPrimary","buttonClassName"],"sources":["../src/components/base/cards/partials/smart-card-skeleton.tsx","../src/components/base/cards/card-actions.tsx"],"sourcesContent":["/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { Stack } from '../../structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport { CardContent, CardHeader, CardShell, CardTitle } from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({ title, lines = 2, className }: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell\n\t\t\tclassName={cn('smart-card-skeleton--component', SURFACE_CLASSES.card, 'gap-space-xl py-surface', className)}\n\t\t>\n\t\t\t<CardHeader className=\"flex-col gap-normal px-surface pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"px-surface py-0\">\n\t\t\t\t<Stack gap=\"lg\">\n\t\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t\t<SkeletonBar key={`skel-${String(i)}`} barClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')} />\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * Card action recipes — package-owned chrome for body/footer card actions.\n *\n * Use these instead of hand-rolled footer button rows in resource cards.\n */\nimport { forwardRef, type ComponentProps, type ReactElement, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Button } from '../buttons';\nimport {\n\tActionButtons,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../action-menu';\nimport { Separator } from '../display/separator';\nimport { cn } from '../../../lib/utils';\n\nexport interface CardPrimaryActionProps\n\textends Omit<ComponentProps<typeof Button>, 'variant' | 'fullWidth' | 'children'> {\n\tchildren: ReactNode;\n\ticon?: LucideIcon;\n\t/** Renders the action as an anchor to this destination. */\n\thref?: string;\n\t/** Omits the action without changing the others' order. */\n\thidden?: boolean;\n\t/** Stretches the action to the row's width. */\n\tfullWidth?: boolean;\n}\n\nexport const CardPrimaryAction = forwardRef<HTMLButtonElement, CardPrimaryActionProps>(function CardPrimaryAction({\n\tchildren,\n\ticon,\n\thidden = false,\n\tfullWidth = true,\n\tclassName,\n\t...props\n}: CardPrimaryActionProps, ref) {\n\tif (hidden) return null;\n\n\treturn (\n\t\t<Button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\ttone=\"primary\"\n\t\t\tfullWidth={fullWidth}\n\t\t\ticon={icon}\n\t\t\tclassName={cn('card-primary-action--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nexport interface CardActionStripProps {\n\t/** Actions to render, in order. */\n\tactions: readonly ActionMenuAction[];\n\t/** Draws a rule above the action row. */\n\tseparator?: boolean;\n\t/** Horizontal alignment of the action row. */\n\talign?: 'start' | 'end' | 'between' | 'stretch';\n\t/** Tightens the row for dense cards. */\n\tcompact?: boolean;\n\t/** Stretches only the primary action. */\n\tfullWidthPrimary?: boolean;\n\tclassName?: string;\n\t/** Merged onto every button in the row. */\n\tbuttonClassName?: string;\n\t/** Renders actions carrying an `href` through the consumer's router. */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}\n\nexport function CardActionStrip({\n\tactions,\n\tseparator = false,\n\talign = 'start',\n\tcompact = false,\n\tfullWidthPrimary = false,\n\tclassName,\n\tbuttonClassName,\n\trenderLink,\n}: CardActionStripProps) {\n\tconst visible = actions.filter((action) => action.visible !== false);\n\tif (visible.length === 0) return null;\n\n\tconst alignClassName = {\n\t\tstart: 'justify-start',\n\t\tend: 'justify-end',\n\t\tbetween: 'justify-between',\n\t\tstretch: 'justify-stretch',\n\t}[align];\n\n\treturn (\n\t\t<div className={cn('card-action-strip--component', className)}>\n\t\t\t{!!separator && <Separator className={cn(compact ? 'mb-space-sm' : 'mb-space-md')} />}\n\t\t\t<ActionButtons\n\t\t\t\tactions={visible}\n\t\t\t\tsize={compact ? 'sm' : 'md'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex-wrap',\n\t\t\t\t\talignClassName,\n\t\t\t\t\talign === 'stretch' && '[&>.base-button--component]:flex-1',\n\t\t\t\t\tfullWidthPrimary && '[&>.base-button--component:first-child]:flex-1',\n\t\t\t\t)}\n\t\t\t\tbuttonClassName={cn(\n\t\t\t\t\tcompact ? 'min-w-0' : 'min-w-24',\n\t\t\t\t\tbuttonClassName,\n\t\t\t\t)}\n\t\t\t\trenderLink={renderLink}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nCardPrimaryAction.displayName = 'CardPrimaryAction';\nCardActionStrip.displayName = 'CardActionStrip';\n"],"mappings":";;;;;;;;;;AAqBA,SAAgBS,EAAkB,EAAE,UAAO,WAAQ,GAAG,gBAAqC;CAC1F,IAAMC,KAAe,EAAE,sBACtB,kBAAC,OAAD,EAAK,WAAWV,EAAG,kCAAkCW,CAAY,EAAI,CAAA;CAGtE,OACC,kBAACR,GAAD;EACC,WAAWH,EAAG,kCAAkCI,EAAgB,MAAM,2BAA2BQ,CAAS;EAD3G,UAAA,CAGC,kBAACC,GAAD;GAAY,WAAU;GACpB,UAAAC,IAAQ,kBAACR,GAAD,EAAA,UAAYQ,EAAiB,CAAA,IAAI,kBAACJ,GAAD,EAAa,cAAa,WAAY,CAAA;EACrE,CAAA,GACZ,kBAACL,GAAD;GAAa,WAAU;GACtB,UAAA,kBAACH,GAAD;IAAO,KAAI;IACT,UAAA,MAAM,KAAK,EAAE,QAAQa,EAAM,IAAI,GAAG,MAClC,kBAACL,GAAD,EAAuC,cAAcV,EAAG,OAAOgB,MAAM,IAAI,WAAW,OAAO,EAAI,GAA7E,QAAQ,OAAOA,CAAC,GAA6D,CAC/F;GACK,CAAA;EACK,CAAA,CACH;;AAEb;AAEA,EAAkB,cAAc;;;ACfhC,IAAaC,IAAoBC,EAAsD,SAA2B,EACjH,aACA,SACA,YAAS,IACT,eAAY,IACZ,cACA,GAAGC,KACuB,GAAK;CAG/B,OAFIC,IAAe,OAGlB,kBAACnB,GAAD;EACM;EACL,MAAK;EACL,MAAK;EACM;EACL;EACN,WAAWD,EAAG,kCAAkCY,CAAS;EACzD,GAAIO;EAEH;CACM,CAAA;AAEV,CAAC;AAoBD,SAAgBE,EAAgB,EAC/B,YACA,eAAY,IACZ,WAAQ,SACR,aAAU,IACV,sBAAmB,IACnB,cACA,oBACA,iBACwB;CACxB,IAAMC,IAAUC,EAAQ,QAAQ,MAAWC,EAAO,YAAY,EAAK;CACnE,IAAIF,EAAQ,WAAW,GAAG,OAAO;CAEjC,IAAMG,IAAiB;EACtB,OAAO;EACP,KAAK;EACL,SAAS;EACT,SAAS;CACV,EAAEC;CAEF,OACC,kBAAC,OAAD;EAAK,WAAW1B,EAAG,gCAAgCY,CAAS;EAA5D,UAAA,CACE,CAAC,CAACe,KAAa,kBAACnB,GAAD,EAAW,WAAWR,EAAG4B,IAAU,gBAAgB,aAAa,EAAI,CAAA,GACpF,kBAACrB,GAAD;GACC,SAASe;GACT,MAAMM,IAAU,OAAO;GACvB,WAAW5B,EACV,aACAyB,GACAC,MAAU,aAAa,sCACvBG,KAAoB,gDACrB;GACA,iBAAiB7B,EAChB4B,IAAU,YAAY,YACtBE,CACD;GACY;EACZ,CAAA,CACG;;AAEP;AAEA,EAAkB,cAAc,qBAChC,EAAgB,cAAc"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { t as e } from "./utils-C2EKeIw3.js";
3
+ import { forwardRef as t } from "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ import { CheckIcon as r } from "lucide-react";
6
+ import { Checkbox as i } from "@base-ui/react/checkbox";
7
+ //#region src/components/ui/checkbox.tsx
8
+ function a({ className: t, onCheckedChange: a, ...o }) {
9
+ return /* @__PURE__ */ n(i.Root, {
10
+ "data-slot": "checkbox",
11
+ className: e("peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-[color,box-shadow] outline-none", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 aria-invalid:border-destructive", "data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground", "data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50", t),
12
+ onCheckedChange: a,
13
+ ...o,
14
+ children: /* @__PURE__ */ n(i.Indicator, {
15
+ "data-slot": "checkbox-indicator",
16
+ className: "flex items-center justify-center text-current",
17
+ children: /* @__PURE__ */ n(r, { className: "size-3.5" })
18
+ })
19
+ });
20
+ }
21
+ //#endregion
22
+ //#region src/components/base/choice-inputs/checkbox.tsx
23
+ var o = t(function({ className: t, ...r }, i) {
24
+ return /* @__PURE__ */ n(a, {
25
+ ref: i,
26
+ className: e("checkbox--component inline-flex items-center justify-center rounded-radius-xs border-muted-foreground", t),
27
+ ...r
28
+ });
29
+ });
30
+ o.displayName = "Checkbox";
31
+ //#endregion
32
+ export { o as t };
33
+
34
+ //# sourceMappingURL=checkbox-BavDRjF7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-BavDRjF7.js","names":["Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","cn","Checkbox$2","props","Checkbox","className","CheckIcon","Checkbox$1","forwardRef"],"sources":["../src/components/ui/checkbox.tsx","../src/components/base/choice-inputs/checkbox.tsx"],"sourcesContent":["\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface CheckboxProps extends Omit<CheckboxPrimitive.Root.Props, 'onChange'> {\n\tonCheckedChange?: (checked: boolean | 'indeterminate') => void\n}\n\nfunction Checkbox({\n\tclassName,\n\tonCheckedChange,\n\t...props\n}: CheckboxProps) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t\"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-[color,box-shadow] outline-none\",\n\t\t\t\t\"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\t\t\t\t\"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n\t\t\t\t\"data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground\",\n\t\t\t\t\"data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground\",\n\t\t\t\t\"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"flex items-center justify-center text-current\"\n\t\t\t>\n\t\t\t\t<CheckIcon className=\"size-3.5\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n\nexport { Checkbox }\n","import { forwardRef } from 'react';\n\nimport { Checkbox as CheckboxPrimitive, type CheckboxProps } from '../../ui/checkbox';\nimport { cn } from '../../../lib/utils';\n\n/**\n * Checkbox — base wrapper around the shadcn/Base UI checkbox primitive.\n *\n * Base UI renders the root as an inline span; the wrapper makes it an\n * inline-flex control so token size utilities render as a square box instead\n * of collapsing to the two border lines.\n *\n * The root ref accepts the actual HTMLElement, including custom button renders.\n * The muted foreground border keeps the unchecked boundary visible in both themes.\n *\n * The wrapper retains its compact corner recipe while deriving it from the\n * shared theme radius, so scoped consumer radius overrides still apply.\n */\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, ...props }, ref) {\n\treturn (\n\t\t<CheckboxPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'checkbox--component inline-flex items-center justify-center rounded-radius-xs border-muted-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n"],"mappings":";;;;;;;AAWA,SAASA,EAAS,EACjB,cACA,oBACA,GAAGM,KACc;CACjB,OACC,kBAACL,EAAkB,MAAnB;EACC,aAAU;EACV,WAAWG,EACV,+GACA,iFACA,oEACA,kGACA,oHACA,iEACAI,CACD;EACiB;EACjB,GAAIF;EAEJ,UAAA,kBAACL,EAAkB,WAAnB;GACC,aAAU;GACV,WAAU;GAEV,UAAA,kBAACQ,GAAD,EAAW,WAAU,WAAY,CAAA;EACL,CAAA;CACN,CAAA;AAE1B;;;ACrBA,IAAMP,IAAWS,EAAuC,SAAkB,EAAE,cAAW,GAAGL,KAAS,GAAK;CACvG,OACC,kBAACH,GAAD;EACM;EACL,WAAWC,EACV,yGACAI,CACD;EACA,GAAIF;CACJ,CAAA;AAEH,CAAC;AAED,EAAS,cAAc"}