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.
- package/CHANGELOG.md +53 -1
- package/README.md +39 -6
- package/dist/{accordion-BRWh3BM1.js → accordion-B-5Focs8.js} +2 -2
- package/dist/{accordion-BRWh3BM1.js.map → accordion-B-5Focs8.js.map} +1 -1
- package/dist/{affordance-geometry.generated-DXl-Zb3Z.js → affordance-geometry.generated-D8Jcfb0G.js} +10 -1
- package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +1 -0
- package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-B5tPpXnS.js} +5 -5
- package/dist/{ai-artifact-DkOArd3-.js.map → ai-artifact-B5tPpXnS.js.map} +1 -1
- package/dist/{app-shell-BH_bGcE2.js → app-shell-at8Kt4l_.js} +3 -3
- package/dist/{app-shell-BH_bGcE2.js.map → app-shell-at8Kt4l_.js.map} +1 -1
- package/dist/{attachment-DsLgNHXt.js → attachment-BO2R47wn.js} +2 -2
- package/dist/{attachment-DsLgNHXt.js.map → attachment-BO2R47wn.js.map} +1 -1
- package/dist/{auth-BDB1V_2q.js → auth-OFwWSAap.js} +4 -4
- package/dist/{auth-BDB1V_2q.js.map → auth-OFwWSAap.js.map} +1 -1
- package/dist/{avatar-CsnWaYmt.js → avatar-Bpzty83c.js} +73 -68
- package/dist/avatar-Bpzty83c.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/cascader.js +6 -6
- package/dist/base/choice-inputs.js +3 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +1 -1
- package/dist/base/feedback.js +4 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +236 -0
- package/dist/base/inline-edit.js.map +1 -0
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/navigation.js +3 -3
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/repeaters.js +4 -4
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +3 -3
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/blocks/admin.js +6 -6
- package/dist/blocks/ai.js +6 -6
- package/dist/blocks/analytics/usage-card.js +3 -0
- package/dist/blocks/analytics.js +361 -360
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +15 -15
- package/dist/blocks/data-display.js +1 -1
- package/dist/blocks/onboarding.js +3 -3
- package/dist/blocks/planning.js +311 -0
- package/dist/blocks/planning.js.map +1 -0
- package/dist/blocks/timelines.js +1 -1
- package/dist/{cards-BMB0laLG.js → cards-Cum56XOF.js} +3 -3
- package/dist/{cards-BMB0laLG.js.map → cards-Cum56XOF.js.map} +1 -1
- package/dist/checkbox-BavDRjF7.js +34 -0
- package/dist/checkbox-BavDRjF7.js.map +1 -0
- package/dist/{choice-inputs-CavA-SGV.js → choice-inputs-CC7XqPQO.js} +166 -191
- package/dist/choice-inputs-CC7XqPQO.js.map +1 -0
- package/dist/{code-block-DIlqzoiD.js → code-block-xHKbAJDj.js} +2 -2
- package/dist/{code-block-DIlqzoiD.js.map → code-block-xHKbAJDj.js.map} +1 -1
- package/dist/{combobox-HDftpzxt.js → combobox-DEbdr-3u.js} +2 -2
- package/dist/{combobox-HDftpzxt.js.map → combobox-DEbdr-3u.js.map} +1 -1
- package/dist/{combobox-CHD750do.js → combobox-xv3yJbzl.js} +7 -7
- package/dist/{combobox-CHD750do.js.map → combobox-xv3yJbzl.js.map} +1 -1
- package/dist/{command-D0kWBZfd.js → command-C0xe7u9B.js} +2 -2
- package/dist/{command-D0kWBZfd.js.map → command-C0xe7u9B.js.map} +1 -1
- package/dist/{comments-CvYeglMS.js → comments-DviPLnwy.js} +8 -8
- package/dist/{comments-CvYeglMS.js.map → comments-DviPLnwy.js.map} +1 -1
- package/dist/components/base/cards/smart-card.types.d.ts +2 -0
- package/dist/components/base/inline-edit/index.d.ts +2 -0
- package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
- package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
- package/dist/components/base/structure/structure.recipes.d.ts +6 -0
- package/dist/components/blocks/analytics/index.d.ts +1 -0
- package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
- package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
- package/dist/components/blocks/planning/index.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
- package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
- package/dist/{containers-CPNyNo1_.js → containers-6s-ucRQQ.js} +3 -2
- package/dist/containers-6s-ucRQQ.js.map +1 -0
- package/dist/{data-display-b3d1TfL4.js → data-display-cWIRdeaf.js} +8 -8
- package/dist/{data-display-b3d1TfL4.js.map → data-display-cWIRdeaf.js.map} +1 -1
- package/dist/{date-picker-DI6kPNof.js → date-picker-CA6ogMQB.js} +5 -5
- package/dist/{date-picker-DI6kPNof.js.map → date-picker-CA6ogMQB.js.map} +1 -1
- package/dist/{date-pickers-ByP6Cv2z.js → date-pickers-BPIKLdsD.js} +4 -4
- package/dist/{date-pickers-ByP6Cv2z.js.map → date-pickers-BPIKLdsD.js.map} +1 -1
- package/dist/{display-ByI5tkqy.js → display-CFM5myut.js} +3 -3
- package/dist/{display-ByI5tkqy.js.map → display-CFM5myut.js.map} +1 -1
- package/dist/features/activities.js +4 -4
- package/dist/features/ai-chat.js +4 -4
- package/dist/features/async-preview.js +4 -4
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +5 -5
- package/dist/features/email-composer.js +11 -11
- package/dist/features/event-calendar.js +2 -2
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +6 -6
- package/dist/features/map.js +3 -3
- package/dist/features/media-library.js +8 -8
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +43 -42
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +107 -106
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +5 -5
- package/dist/features/resource.js +7 -7
- package/dist/features/rich-text-editor.js +1 -1
- package/dist/features/schema-form.js +11 -11
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +2 -2
- package/dist/features/sync.js +2 -2
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +11 -11
- package/dist/feedback-DWUkgEjR.js +233 -0
- package/dist/feedback-DWUkgEjR.js.map +1 -0
- package/dist/{field-affordance-recipes-CHdUtn2Z.js → field-affordance-recipes-IjzPrCTw.js} +2 -2
- package/dist/{field-affordance-recipes-CHdUtn2Z.js.map → field-affordance-recipes-IjzPrCTw.js.map} +1 -1
- package/dist/{filters-qtrcv1hf.js → filters-BhsUtsxW.js} +9 -9
- package/dist/{filters-qtrcv1hf.js.map → filters-BhsUtsxW.js.map} +1 -1
- package/dist/{form-field-C6W-y2hR.js → form-field-Bn7ZH1rA.js} +2 -2
- package/dist/{form-field-C6W-y2hR.js.map → form-field-Bn7ZH1rA.js.map} +1 -1
- package/dist/{form-sizing-39NohSqn.js → form-sizing-BWs70_a2.js} +4 -3
- package/dist/{form-sizing-39NohSqn.js.map → form-sizing-BWs70_a2.js.map} +1 -1
- package/dist/{forms-BF-HSbff.js → forms-B7pzS25o.js} +5 -5
- package/dist/{forms-BF-HSbff.js.map → forms-B7pzS25o.js.map} +1 -1
- package/dist/{forms-numeric-Y15Bg5Nr.js → forms-numeric-BUBxELBv.js} +18 -18
- package/dist/{forms-numeric-Y15Bg5Nr.js.map → forms-numeric-BUBxELBv.js.map} +1 -1
- package/dist/{header-B8ex54cY.js → header-C59QZyxV.js} +6 -6
- package/dist/{header-B8ex54cY.js.map → header-C59QZyxV.js.map} +1 -1
- package/dist/{hooks-D6UBVzf2.js → hooks-CM1Vp9Pe.js} +2 -2
- package/dist/{hooks-D6UBVzf2.js.map → hooks-CM1Vp9Pe.js.map} +1 -1
- package/dist/{input-DMorJiTI.js → input-WwYQZJzG.js} +3 -3
- package/dist/{input-DMorJiTI.js.map → input-WwYQZJzG.js.map} +1 -1
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +9 -0
- package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DhDRgnVZ.js} +2 -2
- package/dist/{media-gallery-Ca4YmvBi.js.map → media-gallery-DhDRgnVZ.js.map} +1 -1
- package/dist/{mentions-CRio8mTm.js → mentions-B8Ko-fhS.js} +4 -4
- package/dist/{mentions-CRio8mTm.js.map → mentions-B8Ko-fhS.js.map} +1 -1
- package/dist/{message-B5-6LeYl.js → message-COsdEvXT.js} +2 -2
- package/dist/{message-B5-6LeYl.js.map → message-COsdEvXT.js.map} +1 -1
- package/dist/{navigation-DqEITuD2.js → navigation-BUIn2Qxx.js} +2 -2
- package/dist/{navigation-DqEITuD2.js.map → navigation-BUIn2Qxx.js.map} +1 -1
- package/dist/{navigation-BTrEb5u4.js → navigation-DBEu4POU.js} +3 -3
- package/dist/{navigation-BTrEb5u4.js.map → navigation-DBEu4POU.js.map} +1 -1
- package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-GVh11KiT.js} +2 -2
- package/dist/{navigation-row-recipes-BFpvGPGE.js.map → navigation-row-recipes-GVh11KiT.js.map} +1 -1
- package/dist/{overlays-DBqV0J_V.js → overlays-B11wZka6.js} +4 -4
- package/dist/{overlays-DBqV0J_V.js.map → overlays-B11wZka6.js.map} +1 -1
- package/dist/{page-BMBGjJY8.js → page-BV6ioQg3.js} +5 -5
- package/dist/{page-BMBGjJY8.js.map → page-BV6ioQg3.js.map} +1 -1
- package/dist/{page-header-BH41wCyY.js → page-header-DQRa0jug.js} +2 -2
- package/dist/{page-header-BH41wCyY.js.map → page-header-DQRa0jug.js.map} +1 -1
- package/dist/{popover-TInGXsjg.js → popover-CoLDEg19.js} +2 -2
- package/dist/{popover-TInGXsjg.js.map → popover-CoLDEg19.js.map} +1 -1
- package/dist/{popover-menu-BzqXqE72.js → popover-menu-GLIQTJTx.js} +4 -4
- package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-GLIQTJTx.js.map} +1 -1
- package/dist/progress-BOe8l_FZ.js +168 -0
- package/dist/progress-BOe8l_FZ.js.map +1 -0
- package/dist/{receipt-DYWTQGEc.js → receipt-BM8xsGFy.js} +3 -3
- package/dist/{receipt-DYWTQGEc.js.map → receipt-BM8xsGFy.js.map} +1 -1
- package/dist/{rich-text-editor-BZSJchAF.js → rich-text-editor-CoVrTiSv.js} +2 -2
- package/dist/{rich-text-editor-BZSJchAF.js.map → rich-text-editor-CoVrTiSv.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-D9f_wdIC.js → settings-BnCyyPOJ.js} +3 -3
- package/dist/{settings-D9f_wdIC.js.map → settings-BnCyyPOJ.js.map} +1 -1
- package/dist/{sheet-vOUloJ4O.js → sheet-B-q914Ad.js} +2 -2
- package/dist/{sheet-vOUloJ4O.js.map → sheet-B-q914Ad.js.map} +1 -1
- package/dist/{sidebar-C3UKkbC5.js → sidebar-C_2p3Tfj.js} +6 -6
- package/dist/{sidebar-C3UKkbC5.js.map → sidebar-C_2p3Tfj.js.map} +1 -1
- package/dist/{sidebar-CNBKFDRW.js → sidebar-DPR7fmqN.js} +4 -4
- package/dist/{sidebar-CNBKFDRW.js.map → sidebar-DPR7fmqN.js.map} +1 -1
- package/dist/{skeleton-BvRhK8y-.js → skeleton-CmT1ppqb.js} +2 -2
- package/dist/{skeleton-BvRhK8y-.js.map → skeleton-CmT1ppqb.js.map} +1 -1
- package/dist/{smart-card-B5FcKODh.js → smart-card-CYLn46e6.js} +119 -118
- package/dist/smart-card-CYLn46e6.js.map +1 -0
- package/dist/{spinner-JtlFJ7Nc.js → spinner-BY9HbUEh.js} +2 -2
- package/dist/{spinner-JtlFJ7Nc.js.map → spinner-BY9HbUEh.js.map} +1 -1
- package/dist/{structure-BvW4vG4H.js → structure-MvKVq-oL.js} +13 -13
- package/dist/{structure-BvW4vG4H.js.map → structure-MvKVq-oL.js.map} +1 -1
- package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
- package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/{table-ghtAQ-JJ.js → table-BS39xnlq.js} +6 -6
- package/dist/{table-ghtAQ-JJ.js.map → table-BS39xnlq.js.map} +1 -1
- package/dist/{tabs-DY09eoZg.js → tabs-B5cNMWiP.js} +2 -2
- package/dist/{tabs-DY09eoZg.js.map → tabs-B5cNMWiP.js.map} +1 -1
- package/dist/{text-inputs-BhOcedTo.js → text-inputs-Dh9XGyiS.js} +4 -4
- package/dist/{text-inputs-BhOcedTo.js.map → text-inputs-Dh9XGyiS.js.map} +1 -1
- package/dist/{timelines-CnZ2S_Gr.js → timelines-B9ICkQcV.js} +2 -2
- package/dist/{timelines-CnZ2S_Gr.js.map → timelines-B9ICkQcV.js.map} +1 -1
- package/dist/{tree-COD9BGdU.js → tree-BdWSaoFT.js} +2 -2
- package/dist/{tree-COD9BGdU.js.map → tree-BdWSaoFT.js.map} +1 -1
- package/dist/{upload-DIzw1dx1.js → upload-D8Za5x_c.js} +4 -4
- package/dist/{upload-DIzw1dx1.js.map → upload-D8Za5x_c.js.map} +1 -1
- package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-hIIYBLS7.js} +3 -3
- package/dist/{upload-queue-xRJ3qDmd.js.map → upload-queue-hIIYBLS7.js.map} +1 -1
- package/dist/usage-card-DnmnJ58D.js +458 -0
- package/dist/usage-card-DnmnJ58D.js.map +1 -0
- package/dist/{value-inputs-Co1fu-xv.js → value-inputs-DX2dbxjj.js} +7 -7
- package/dist/{value-inputs-Co1fu-xv.js.map → value-inputs-DX2dbxjj.js.map} +1 -1
- package/dist/{workspace-Cbqz4FzN.js → workspace-C1PZmk8L.js} +4 -4
- package/dist/{workspace-Cbqz4FzN.js.map → workspace-C1PZmk8L.js.map} +1 -1
- package/docs/consumer-skill/SKILL.md +120 -17
- package/docs/consumer-skill/examples/detail.tsx +7 -8
- package/docs/consumer-skill/examples/manifest.json +14 -0
- package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
- package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
- package/docs/consumer-skill/references/composition.md +103 -0
- package/docs/consumer-skill/references/design-contract.md +4 -3
- package/docs/consumer-skill/references/discovery.md +17 -0
- package/docs/consumer-skill/references/installation.md +20 -3
- package/docs/consumer-skill/references/integration.md +12 -0
- package/docs/consumer-skill/references/public-api.json +452 -229
- package/docs/consumer-skill/references/review.md +74 -0
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +97 -1
- package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +155 -0
- package/docs/consumer-skill/scripts/discovery.mjs +6 -1
- package/docs/consumer-skill/scripts/surface-policy.mjs +22 -0
- package/package.json +24 -3
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
- package/dist/avatar-CsnWaYmt.js.map +0 -1
- package/dist/choice-inputs-CavA-SGV.js.map +0 -1
- package/dist/containers-CPNyNo1_.js.map +0 -1
- package/dist/feedback-a9j9J-9A.js +0 -391
- package/dist/feedback-a9j9J-9A.js.map +0 -1
- package/dist/smart-card-B5FcKODh.js.map +0 -1
- package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-a9j9J-9A.js","names":["Empty","EmptyHeader","EmptyMedia","EmptyTitle","EmptyDescription","EmptyContent","isSimpleText","EmptyPrimitive","EmptyHeaderPrimitive","EmptyMediaPrimitive","EmptyTitlePrimitive","EmptyDescriptionPrimitive","EmptyContentPrimitive","isSimpleText","Progress","_Fragment","ProgressPrimitive","_Fragment","Progress","resolveComponentScale","useFormattingConfig","useDensityConfig","cn","Button","Text","Stack","trackHeightClasses","ContentSkeleton","Fragment$1","Empty$1","props","className","EmptyHeader$1","emptyMediaVariants","cva","EmptyMedia$1","variant","EmptyTitle$1","EmptyDescription$1","EmptyContent$1","isSimpleText$2","value","Empty","EmptyHeader","EmptyMedia","EmptyTitle","ariaLevel","resolvedRole","role","headingLevel","children","EmptyDescription","EmptyContent","defaultProgressStrings","ProgressContext","createContext","isSimpleText$1","INDICATOR_TONE_CLASSNAMES","mergeStateClassName","baseClassName","state","normalizeRange","min","minProp","maxCandidate","maxProp","normalizeValue","max","formatProgressValue","format","locale","normalized","Progress$1","forwardRef","valueProp","showValueProp","sizeProp","stringsProp","ariaDescribedBy","strings","useStrings","formatting","size","defaultScale","resolvedLocale","descriptionId","useId","formattedValue","usesGeneratedHeader","headerSlot","showValue","label","hasSummary","description","metadata","valueSlot","descriptionIds","resolvedGetAriaValueText","normalizedFormattedValue","currentValue","getAriaValueText","contextValue","useMemo","resolvedHeader","ProgressLabel","ProgressValue","resolvedTrack","trackSlot","ProgressTrack","trackProps","ProgressIndicator","indicatorProps","tone","Progress","context","useContext","primitiveValue","_primitiveFormattedValue","content","frameVariantClass","frameToneClass","isSimpleText","StateDisplayFrame","regionPrefix","componentClassName","icon","title","action","details","LoadingState","resolvedProgress","progress","Loader2","skeleton","ErrorState","AlertCircle","onRetry","retryLabel"],"sources":["../src/components/ui/empty.tsx","../src/components/base/feedback/empty.tsx","../src/components/base/feedback/progress.strings.ts","../src/components/base/feedback/progress.tsx","../src/components/base/feedback/state-display.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"gap-4 rounded-lg border-dashed p-12 flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"gap-2 flex max-w-sm flex-col items-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-space-md flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"text-lg font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"gap-4 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","/**\n * Tokenized low-level empty-state parts.\n *\n * Use the blocks `EmptyState` for an opinionated ready-made state. These\n * parts are for consumers that need to assemble their own media/content/action\n * anatomy without importing the internal shadcn primitive.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tEmpty as EmptyPrimitive,\n\tEmptyContent as EmptyContentPrimitive,\n\tEmptyDescription as EmptyDescriptionPrimitive,\n\tEmptyHeader as EmptyHeaderPrimitive,\n\tEmptyMedia as EmptyMediaPrimitive,\n\tEmptyTitle as EmptyTitlePrimitive,\n} from '../../ui/empty';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport type EmptyProps = ComponentProps<typeof EmptyPrimitive>;\nexport type EmptyContentProps = ComponentProps<typeof EmptyContentPrimitive>;\nexport type EmptyDescriptionProps = ComponentProps<typeof EmptyDescriptionPrimitive>;\nexport type EmptyHeaderProps = ComponentProps<typeof EmptyHeaderPrimitive>;\nexport type EmptyMediaProps = ComponentProps<typeof EmptyMediaPrimitive>;\nexport interface EmptyTitleProps extends ComponentProps<typeof EmptyTitlePrimitive> {\n\t/** Accessible heading level used by the default `role=\"heading\"` output. */\n\theadingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/** Root layout for a consumer-blocks empty state. */\nexport function Empty({ className, ...props }: EmptyProps) {\n\treturn (\n\t\t<EmptyPrimitive\n\t\t\tclassName={cn('empty--component gap-space-lg rounded-radius-lg p-surface', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Centered title and description stack. */\nexport function EmptyHeader({ className, ...props }: EmptyHeaderProps) {\n\treturn <EmptyHeaderPrimitive className={cn('empty-header--component gap-normal', className)} {...props} />;\n}\n\n/** Optional icon or illustration region. */\nexport function EmptyMedia({ className, ...props }: EmptyMediaProps) {\n\treturn <EmptyMediaPrimitive className={cn('empty-media--component mb-space-sm', className)} {...props} />;\n}\n\n/** Empty-state heading calibrated to the admin typography scale. */\nexport function EmptyTitle({ className, headingLevel = 3, role, 'aria-level': ariaLevel, children, ...props }: EmptyTitleProps) {\n\tconst resolvedRole = role ?? 'heading';\n\treturn (\n\t\t<EmptyTitlePrimitive\n\t\t\trole={resolvedRole}\n\t\t\taria-level={ariaLevel ?? (resolvedRole === 'heading' ? headingLevel : undefined)}\n\t\t\tclassName={cn('empty-title--component tracking-normal', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"base\" weight=\"semibold\" lineHeight=\"tight\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</EmptyTitlePrimitive>\n\t);\n}\n\n/** Supporting explanation for the absence of content. */\nexport function EmptyDescription({ className, children, ...props }: EmptyDescriptionProps) {\n\treturn (\n\t\t<EmptyDescriptionPrimitive className={cn('empty-description--component', className)} {...props}>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"relaxed\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</EmptyDescriptionPrimitive>\n\t);\n}\n\n/** Actions or next-step content rendered below the explanation. */\nexport function EmptyContent({ className, children, ...props }: EmptyContentProps) {\n\treturn (\n\t\t<EmptyContentPrimitive className={cn('empty-content--component gap-space-md', className)} {...props}>\n\t\t\t{isSimpleText(children) ? <Text>{children}</Text> : children}\n\t\t</EmptyContentPrimitive>\n\t);\n}\n\nEmpty.displayName = 'Empty';\nEmptyHeader.displayName = 'EmptyHeader';\nEmptyMedia.displayName = 'EmptyMedia';\nEmptyTitle.displayName = 'EmptyTitle';\nEmptyDescription.displayName = 'EmptyDescription';\nEmptyContent.displayName = 'EmptyContent';\n","export interface ProgressStrings {\n\t/** Screen-reader value announced while progress is indeterminate. */\n\tindeterminateValue: string;\n}\n\nexport const defaultProgressStrings: ProgressStrings = {\n\tindeterminateValue: 'In progress',\n};\n","import { trackHeightClasses } from '../../../lib/track-recipes';\n/**\n * Progress — token-driven Base UI progress wrapper for completion, quota,\n * and long-running task states.\n *\n * The root keeps the Base UI accessibility contract while adding a concise\n * admin summary API (`label`, `description`, `metadata`, `showValue`),\n * semantic tones, structural sizes, stable DOM hooks, and composition slots.\n * Consumers can still assemble `ProgressLabel`, `ProgressValue`,\n * `ProgressTrack`, and `ProgressIndicator` directly.\n */\nimport { Progress as ProgressPrimitive } from '@base-ui/react/progress';\nimport { createContext, forwardRef, useContext, useId, useMemo, type ReactNode } from 'react';\n\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useDensityConfig, useFormattingConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport type { SemanticTone } from '../../../lib/component-vocabulary';\n\nimport { defaultProgressStrings, type ProgressStrings } from './progress.strings';\n\nexport type ProgressSize = ComponentScale;\nexport type ProgressTone = SemanticTone;\n\ntype ProgressRootState = ProgressPrimitive.Root.State;\ntype ProgressTrackState = ProgressPrimitive.Track.State;\ntype ProgressIndicatorState = ProgressPrimitive.Indicator.State;\ntype ProgressLabelState = ProgressPrimitive.Label.State;\ntype ProgressValueState = ProgressPrimitive.Value.State;\n\ntype StatefulClassName<TState> = string | ((state: TState) => string | undefined) | undefined;\n\nexport interface ProgressProps extends Omit<\n\tProgressPrimitive.Root.Props,\n\t'children' | 'format' | 'getAriaValueText' | 'locale' | 'max' | 'min' | 'value'\n> {\n\t/** Current value. `null` renders an indeterminate state. */\n\tvalue: number | null;\n\t/** Minimum value used to normalize the visual percentage. @default 0 */\n\tmin?: number;\n\t/** Maximum value used to normalize the visual percentage. @default 100 */\n\tmax?: number;\n\t/** Intl options for formatting the raw value instead of the default normalized percentage. */\n\tformat?: Intl.NumberFormatOptions;\n\t/** Locale forwarded to `Intl.NumberFormat`. */\n\tlocale?: Intl.LocalesArgument;\n\t/** Human-readable text for the current value. Receives the wrapper's normalized display value. */\n\tgetAriaValueText?: (formattedValue: string | null, value: number | null) => string;\n\t/** Low-level compound content. `headerSlot` takes precedence when both are supplied. */\n\tchildren?: ReactNode;\n\t/** Accessible visual label. Supplying it also enables `showValue` by default. */\n\tlabel?: ReactNode;\n\t/** Supporting text automatically connected with `aria-describedby`. */\n\tdescription?: ReactNode;\n\t/** Optional right-aligned task metadata, such as \"18,400 of 25,000 rows\". */\n\tmetadata?: ReactNode;\n\t/** Show the formatted value beside the label. Defaults to `true` when `label` is supplied. */\n\tshowValue?: boolean;\n\t/** Replaces the formatted value while retaining the default summary layout. */\n\tvalueSlot?: ReactNode;\n\t/** Replaces the entire content above the track. */\n\theaderSlot?: ReactNode;\n\t/** Replaces the default track and indicator composition. */\n\ttrackSlot?: ReactNode;\n\t/** Track thickness. @default \"default\" */\n\tsize?: ProgressSize;\n\t/** Semantic indicator color. @default \"primary\" */\n\ttone?: ProgressTone;\n\t/** Props forwarded to the default track. Ignored when `trackSlot` is supplied. */\n\ttrackProps?: ProgressTrackProps;\n\t/** Props forwarded to the default indicator. Ignored when `trackSlot` is supplied. */\n\tindicatorProps?: ProgressIndicatorProps;\n\t/** Override the indeterminate screen-reader copy. */\n\tstrings?: StringsProp<ProgressStrings>;\n}\n\nexport interface ProgressTrackProps extends ProgressPrimitive.Track.Props {\n\t/** Track thickness. @default \"default\" */\n\tsize?: ProgressSize;\n}\n\nexport interface ProgressIndicatorProps extends ProgressPrimitive.Indicator.Props {\n\t/** Semantic fill color. @default \"primary\" */\n\ttone?: ProgressTone;\n}\n\nexport interface ProgressLabelProps extends ProgressPrimitive.Label.Props {\n\t/** Accessible label content. */\n\tchildren?: ReactNode;\n}\n\nexport interface ProgressValueProps extends Omit<ProgressPrimitive.Value.Props, 'children'> {\n\t/** Customize the formatted display while preserving the value semantics. */\n\tchildren?: (formattedValue: string | null, value: number | null) => ReactNode;\n}\n\ninterface ProgressContextValue {\n\tformattedValue: string | null;\n\tvalue: number | null;\n}\n\nconst ProgressContext = createContext<ProgressContextValue | null>(null);\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n\n\nconst INDICATOR_TONE_CLASSNAMES: Record<ProgressTone, string> = {\n\tneutral: 'bg-muted-foreground',\n\tprimary: 'bg-primary',\n\tsecondary: 'bg-secondary-foreground',\n\tsuccess: 'bg-success',\n\tinfo: 'bg-info',\n\twarning: 'bg-warning',\n\tdestructive: 'bg-destructive',\n};\n\nfunction mergeStateClassName<TState>(\n\tbaseClassName: string,\n\tclassName: StatefulClassName<TState>,\n): string | ((state: TState) => string) {\n\tif (typeof className === 'function') {\n\t\treturn (state) => cn(baseClassName, className(state));\n\t}\n\n\treturn cn(baseClassName, className);\n}\n\nfunction normalizeRange(minProp: number | undefined, maxProp: number | undefined) {\n\tconst min = Number.isFinite(minProp) ? (minProp as number) : 0;\n\tconst maxCandidate = Number.isFinite(maxProp) ? (maxProp as number) : 100;\n\tconst max = maxCandidate > min ? maxCandidate : min + 100;\n\n\treturn { min, max };\n}\n\nfunction normalizeValue(value: number | null, min: number, max: number): number | null {\n\tif (value === null || !Number.isFinite(value)) return null;\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction formatProgressValue(\n\tvalue: number | null,\n\tmin: number,\n\tmax: number,\n\tlocale: Intl.LocalesArgument | undefined,\n\tformat: Intl.NumberFormatOptions | undefined,\n): string | null {\n\tif (value === null) return null;\n\n\tif (format) {\n\t\treturn new Intl.NumberFormat(locale, format).format(value);\n\t}\n\n\tconst normalized = max === min ? 0 : (value - min) / (max - min);\n\treturn new Intl.NumberFormat(locale, {\n\t\tstyle: 'percent',\n\t\tmaximumFractionDigits: 0,\n\t}).format(normalized);\n}\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n\t{\n\t\tvalue: valueProp,\n\t\tmin: minProp,\n\t\tmax: maxProp,\n\t\tformat,\n\t\tlocale,\n\t\tgetAriaValueText,\n\t\tchildren,\n\t\tlabel,\n\t\tdescription,\n\t\tmetadata,\n\t\tshowValue: showValueProp,\n\t\tvalueSlot,\n\t\theaderSlot,\n\t\ttrackSlot,\n\t\tsize: sizeProp,\n\t\ttone = 'primary',\n\t\ttrackProps,\n\t\tindicatorProps,\n\t\tstrings: stringsProp,\n\t\tclassName,\n\t\t'aria-describedby': ariaDescribedBy,\n\t\t...props\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultProgressStrings, stringsProp);\n\tconst formatting = useFormattingConfig();\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst resolvedLocale = locale ?? formatting.locale;\n\tconst descriptionId = useId();\n\tconst { min, max } = normalizeRange(minProp, maxProp);\n\tconst value = normalizeValue(valueProp, min, max);\n\tconst formattedValue = formatProgressValue(value, min, max, resolvedLocale, format);\n\tconst usesGeneratedHeader = headerSlot === undefined && children === undefined;\n\tconst showValue = showValueProp ?? label !== undefined;\n\tconst hasSummary =\n\t\tlabel !== undefined || description !== undefined || metadata !== undefined || valueSlot !== undefined || showValue;\n\tconst descriptionIds =\n\t\t[ariaDescribedBy, usesGeneratedHeader && description !== undefined ? descriptionId : undefined]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ') || undefined;\n\tconst resolvedGetAriaValueText = (_formattedValue: string | null, currentValue: number | null) => {\n\t\tconst normalizedFormattedValue = formatProgressValue(currentValue, min, max, resolvedLocale, format);\n\t\tif (getAriaValueText) {\n\t\t\treturn getAriaValueText(normalizedFormattedValue, currentValue);\n\t\t}\n\t\treturn normalizedFormattedValue ?? strings.indeterminateValue;\n\t};\n\tconst contextValue = useMemo(() => ({ formattedValue, value }), [formattedValue, value]);\n\tconst resolvedHeader =\n\t\theaderSlot ??\n\t\tchildren ??\n\t\t(hasSummary ? (\n\t\t\t<>\n\t\t\t\t<div className=\"progress--summary min-w-0\">\n\t\t\t\t\t{label !== undefined && <ProgressLabel>{label}</ProgressLabel>}\n\t\t\t\t\t{description !== undefined &&\n\t\t\t\t\t\t(isSimpleText(description) ? (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tid={descriptionId}\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\tclassName=\"progress--description mt-space-2xs block\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div id={descriptionId} className=\"progress--description mt-space-2xs\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t{(showValue || valueSlot !== undefined || metadata !== undefined) && (\n\t\t\t\t\t<Stack gap=\"2xs\" align=\"end\" className=\"progress--details text-right\">\n\t\t\t\t\t\t{valueSlot ?? (showValue ? <ProgressValue /> : null)}\n\t\t\t\t\t\t{metadata !== undefined &&\n\t\t\t\t\t\t\t(isSimpleText(metadata) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"progress--metadata tabular-nums\">\n\t\t\t\t\t\t\t\t\t{metadata}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tmetadata\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</>\n\t\t) : null);\n\tconst resolvedTrack = trackSlot ?? (\n\t\t<ProgressTrack {...trackProps} size={trackProps?.size ?? size}>\n\t\t\t{trackProps?.children ?? <ProgressIndicator {...indicatorProps} tone={indicatorProps?.tone ?? tone} />}\n\t\t</ProgressTrack>\n\t);\n\n\treturn (\n\t\t<ProgressContext.Provider value={contextValue}>\n\t\t\t<ProgressPrimitive.Root\n\t\t\t\tref={ref}\n\t\t\t\tvalue={value}\n\t\t\t\tmin={min}\n\t\t\t\tmax={max}\n\t\t\t\tformat={format}\n\t\t\t\tlocale={resolvedLocale}\n\t\t\t\tgetAriaValueText={resolvedGetAriaValueText}\n\t\t\t\taria-describedby={descriptionIds}\n\t\t\t\tdata-slot=\"progress\"\n\t\t\t\tdata-size={size}\n\t\t\t\tdata-tone={tone}\n\t\t\t\tclassName={mergeStateClassName<ProgressRootState>(\n\t\t\t\t\t'progress--component grid min-w-0 w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-space-lg gap-y-space-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{resolvedHeader}\n\t\t\t\t{resolvedTrack}\n\t\t\t</ProgressPrimitive.Root>\n\t\t</ProgressContext.Provider>\n\t);\n});\nProgress.displayName = 'Progress';\n\nconst ProgressTrack = forwardRef<HTMLDivElement, ProgressTrackProps>(function ProgressTrack(\n\t{ className, size: sizeProp, ...props },\n\tref,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\treturn (\n\t\t<ProgressPrimitive.Track\n\t\t\tref={ref}\n\t\t\tdata-slot=\"progress-track\"\n\t\t\tdata-size={size}\n\t\t\tclassName={mergeStateClassName<ProgressTrackState>(\n\t\t\t\tcn(\n\t\t\t\t\t'progress-track--component progress--track relative col-span-full flex w-full items-center overflow-hidden rounded-full bg-muted',\n\t\t\t\t\ttrackHeightClasses[size],\n\t\t\t\t),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nProgressTrack.displayName = 'ProgressTrack';\n\nconst ProgressIndicator = forwardRef<HTMLDivElement, ProgressIndicatorProps>(function ProgressIndicator(\n\t{ className, tone = 'primary', ...props },\n\tref,\n) {\n\treturn (\n\t\t<ProgressPrimitive.Indicator\n\t\t\tref={ref}\n\t\t\tdata-slot=\"progress-indicator\"\n\t\t\tdata-tone={tone}\n\t\t\tclassName={mergeStateClassName<ProgressIndicatorState>(\n\t\t\t\tcn(\n\t\t\t\t\t'progress-indicator--component progress--indicator h-full rounded-full transition-[width] duration-300 ease-out motion-reduce:transition-none',\n\t\t\t\t\t'data-[indeterminate]:w-full motion-safe:data-[indeterminate]:animate-pulse',\n\t\t\t\t\tINDICATOR_TONE_CLASSNAMES[tone],\n\t\t\t\t),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nProgressIndicator.displayName = 'ProgressIndicator';\n\nconst ProgressLabel = forwardRef<HTMLSpanElement, ProgressLabelProps>(function ProgressLabel(\n\t{ className, children, ...props },\n\tref,\n) {\n\treturn (\n\t\t<ProgressPrimitive.Label\n\t\t\tref={ref}\n\t\t\tdata-slot=\"progress-label\"\n\t\t\tclassName={mergeStateClassName<ProgressLabelState>(\n\t\t\t\t'progress-label--component progress--label min-w-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" lineHeight=\"tight\" className=\"block\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</ProgressPrimitive.Label>\n\t);\n});\nProgressLabel.displayName = 'ProgressLabel';\n\nconst ProgressValue = forwardRef<HTMLSpanElement, ProgressValueProps>(function ProgressValue(\n\t{ className, children, ...props },\n\tref,\n) {\n\tconst context = useContext(ProgressContext);\n\n\treturn (\n\t\t<ProgressPrimitive.Value\n\t\t\tref={ref}\n\t\t\tdata-slot=\"progress-value\"\n\t\t\tclassName={mergeStateClassName<ProgressValueState>(\n\t\t\t\t'progress-value--component progress--value whitespace-nowrap',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{(_primitiveFormattedValue, primitiveValue) => {\n\t\t\t\tconst value = context?.value ?? primitiveValue;\n\t\t\t\tconst formattedValue = context?.formattedValue ?? _primitiveFormattedValue;\n\t\t\t\tconst content = children ? children(formattedValue, value) : formattedValue;\n\n\t\t\t\tif (content === null || content === undefined) return null;\n\t\t\t\treturn isSimpleText(content) ? (\n\t\t\t\t\t// The percentage is the bar's primary value, so it mirrors\n\t\t\t\t\t// ProgressLabel: provider-default size and medium weight. Pinning\n\t\t\t\t\t// it to `xs`/secondary demoted the headline number below its own\n\t\t\t\t\t// caption and left the two off a shared baseline.\n\t\t\t\t\t<Text tag=\"span\" weight=\"medium\" lineHeight=\"tight\" className=\"block tabular-nums\">\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\tcontent\n\t\t\t\t);\n\t\t\t}}\n\t\t</ProgressPrimitive.Value>\n\t);\n});\nProgressValue.displayName = 'ProgressValue';\n\nexport { Progress, ProgressTrack, ProgressIndicator, ProgressLabel, ProgressValue, defaultProgressStrings };\nexport type { ProgressStrings };\n","/**\n * Shared async-state presentations for bounded admin surfaces.\n *\n * `inline` is a compact, chrome-free status for menus, table regions, and\n * existing panels. `panel` owns one deliberate frame so consumers do not\n * have to recreate card padding around loading and error states. Loading and\n * error use the same icon/message/action grid, which keeps transitions between\n * states visually stable.\n */\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport {\n\tforwardRef,\n\ttype ComponentPropsWithoutRef,\n\ttype ReactNode,\n} from 'react';\n\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { Progress } from './progress';\nimport { ContentSkeleton } from '../skeleton/skeleton';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\ntype StateDisplayVariant = 'inline' | 'panel';\ntype StateDisplayTone = 'neutral' | 'destructive';\n\ninterface StateDisplayFrameProps extends Omit<DivProps, 'title'> {\n\tcomponentClassName: string;\n\t/** Which state is shown — loading, empty, or error. */\n\tvariant: StateDisplayVariant;\n\ttone: StateDisplayTone;\n\t/** Glyph shown above the message. */\n\ticon: ReactNode;\n\t/** Heading above the description. */\n\ttitle?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tdetails?: ReactNode;\n}\n\nconst frameVariantClass: Record<StateDisplayVariant, string> = {\n\tinline: 'w-full max-w-full py-row-y',\n\tpanel: 'w-full rounded-radius-lg border p-surface',\n};\n\nconst frameToneClass: Record<StateDisplayTone, string> = {\n\tneutral: 'border-border bg-card',\n\tdestructive: 'border-destructive/30 bg-destructive/5',\n};\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nconst StateDisplayFrame = forwardRef<HTMLDivElement, StateDisplayFrameProps>(\n\tfunction StateDisplayFrame({\n\t\tcomponentClassName,\n\t\tvariant,\n\t\ttone,\n\t\ticon,\n\t\ttitle,\n\t\tdescription,\n\t\taction,\n\t\tdetails,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\tconst regionPrefix = componentClassName.replace('--component', '');\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-variant={variant}\n\t\t\t\tdata-tone={tone}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tcomponentClassName,\n\t\t\t\t\t'grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-x-space-sm',\n\t\t\t\t\t'sm:grid-cols-[auto_minmax(0,1fr)_auto]',\n\t\t\t\t\tframeVariantClass[variant],\n\t\t\t\t\tvariant === 'panel' && frameToneClass[tone],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t`${regionPrefix}--icon`,\n\t\t\t\t\t\t'mt-space-2xs inline-flex size-icon shrink-0 items-center justify-center',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t{(title !== undefined || description !== undefined) && (\n\t\t\t\t\t<div className={cn(`${regionPrefix}--message`, 'grid min-w-0', variant === 'inline' ? 'gap-dense' : 'gap-normal')}>\n\t\t\t\t\t\t{title !== undefined && (\n\t\t\t\t\t\t\tisSimpleText(title) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\" className={cn(`${regionPrefix}--title`, 'block min-w-0')}>\n\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : <div className={cn(`${regionPrefix}--title`, 'min-w-0')}>{title}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description !== undefined && (\n\t\t\t\t\t\t\tisSimpleText(description) ? (\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize={variant === 'inline' ? 'xs' : undefined}\n\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\tclassName={cn(`${regionPrefix}--description`, 'block min-w-0')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className={cn(`${regionPrefix}--description`, 'min-w-0')}>\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{action !== undefined && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`${regionPrefix}--action`,\n\t\t\t\t\t\t\t'col-start-2 row-start-2 mt-space-sm justify-self-start',\n\t\t\t\t\t\t\t'sm:col-start-3 sm:row-start-1 sm:mt-0 sm:justify-self-end sm:self-start',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{action}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{details !== undefined && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`${regionPrefix}--details`,\n\t\t\t\t\t\t\t'col-start-2 col-end-[-1] mt-space-md',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{details}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nStateDisplayFrame.displayName = 'StateDisplayFrame';\n\nexport type LoadingStateVariant = StateDisplayVariant;\n\nexport interface LoadingStateProps extends DivProps {\n\t/** Primary line of the state message. */\n\tlabel?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Completion percentage, 0-100, for determinate loading. */\n\tprogress?: number;\n\t/** Which state is shown — loading, empty, or error. */\n\tvariant?: LoadingStateVariant;\n\t/** Renders placeholder bars instead of a message. */\n\tskeleton?: boolean | ReactNode;\n\t/** How many skeleton bars to draw. */\n\tlines?: number;\n\t/** Glyph shown above the message. */\n\ticon?: ReactNode;\n}\n\nexport const LoadingState = forwardRef<HTMLDivElement, LoadingStateProps>(\n\tfunction LoadingState({\n\t\tlabel,\n\t\tdescription,\n\t\tprogress,\n\t\tvariant = 'inline',\n\t\tskeleton = false,\n\t\tlines = 3,\n\t\ticon,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\tconst resolvedProgress = typeof progress === 'number'\n\t\t\t? Math.min(100, Math.max(0, progress))\n\t\t\t: undefined;\n\t\tconst details = resolvedProgress !== undefined || skeleton\n\t\t\t? (\n\t\t\t\t<>\n\t\t\t\t\t{resolvedProgress !== undefined && (\n\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\tvalue={resolvedProgress}\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tshowValue={false}\n\t\t\t\t\t\t\taria-label={typeof label === 'string' ? label : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{skeleton === true ? <ContentSkeleton lines={lines} /> : skeleton}\n\t\t\t\t</>\n\t\t\t)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<StateDisplayFrame\n\t\t\t\tref={ref}\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tcomponentClassName=\"loading-state--component\"\n\t\t\t\tvariant={variant}\n\t\t\t\ttone=\"neutral\"\n\t\t\t\ticon={icon ?? (\n\t\t\t\t\t<Loader2 className=\"size-icon animate-spin text-muted-foreground\" />\n\t\t\t\t)}\n\t\t\t\ttitle={label}\n\t\t\t\tdescription={description}\n\t\t\t\tdetails={details}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nLoadingState.displayName = 'LoadingState';\n\nexport type ErrorStateVariant = StateDisplayVariant;\n\nexport interface ErrorStateProps extends Omit<DivProps, 'title'> {\n\t/** Heading above the description. */\n\ttitle?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tonRetry?: () => void;\n\t/** Copy for the retry action in the error state. */\n\tretryLabel?: ReactNode;\n\t/** Which state is shown — loading, empty, or error. */\n\tvariant?: ErrorStateVariant;\n\t/** Glyph shown above the message. */\n\ticon?: ReactNode;\n}\n\nexport const ErrorState = forwardRef<HTMLDivElement, ErrorStateProps>(\n\tfunction ErrorState({\n\t\ttitle,\n\t\tdescription,\n\t\taction,\n\t\tonRetry,\n\t\tretryLabel,\n\t\tvariant = 'panel',\n\t\ticon,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\tconst retryAction = action ?? (onRetry && retryLabel ? (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"destructive\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tonClick={onRetry}\n\t\t\t>\n\t\t\t\t{retryLabel}\n\t\t\t</Button>\n\t\t) : undefined);\n\n\t\treturn (\n\t\t\t<StateDisplayFrame\n\t\t\t\tref={ref}\n\t\t\t\trole=\"alert\"\n\t\t\t\tcomponentClassName=\"error-state--component\"\n\t\t\t\tvariant={variant}\n\t\t\t\ttone=\"destructive\"\n\t\t\t\ticon={icon ?? <AlertCircle className=\"size-icon text-destructive\" />}\n\t\t\t\ttitle={title}\n\t\t\t\tdescription={description}\n\t\t\t\taction={retryAction}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nErrorState.displayName = 'ErrorState';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-card-B5FcKODh.js","names":["Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","styles","styles","CardPrimitive","CardHeaderPrimitive","CardTitlePrimitive","CardDescriptionPrimitive","CardContentPrimitive","CardFooterPrimitive","resolveComponentScale","useCardConfig","useDensityConfig","cn","TooltipTrigger","Button","Tooltip","TooltipContent","Text","Stack","ICON_CHILD_SIZE_CLASSNAMES","surfaceDividerRecipes","ActionMenu","alertVariants","cva","isSimpleText","value","Alert","forwardRef","props","tone","variant","className","AlertTitle","children","AlertDescription","AlertMetadata","AlertMetadataItem","icon","label","AlertAction","Card$1","size","CardHeader$1","CardTitle$1","CardDescription$1","CardContent$1","CardFooter$1","cardRecipes","CARD_BEM","CARD_INSET","SURFACE_CLASSES","hasRenderableContent","content","isValidElement","Fragment","CARD_TITLE_SIZE_CLASSES","CARD_TITLE_TEXT_SIZE","CardShell","CardHeader","textGap","CardTitle","sizeProp","defaultScale","CardDescription","CardContent","CardFooter","SmartCardAlert","hasHeader","alertTone","alert","SurfaceTitle","title","dataSlot","suffix","suffixClassName","ActionsMenu","actionDefinitions","actions","action","index","MoreHorizontal","actionsLabel","TooltipTrigger_Info","passthrough","triggerProps","tooltipLabel","Info","SmartCardHeaderRow","cardActions","hasActions","hasIcon","hasTitle","hasTitleSuffix","titleSuffix","hasDescription","description","hasTooltip","tooltip","hasHeaderStart","headerStart","hasHeaderEnd","headerEnd","hasHeaderAction","headerAction","showTitleRow","showTrailing","titleSize","defaultSmartCardStrings","Card","expandedProp","stringsProp","rootProps","resolvedTitleSize","inset","padding","vertical","tokens","framedHeader","headerPlacement","strings","useStrings","resolvedActionsLabel","isExpandable","expandable","collapsedMaxHeightRaw","collapsedMaxHeight","isExpandedControlled","internalExpanded","setInternalExpanded","useState","defaultExpanded","expanded","handleToggle","useCallback","next","onExpandedChange","hasAlert","hasFooterText","footerText","hasFooterSlot","footerSlot","hasContentTop","contentTop","hasContentBottom","contentBottom","hasBody","headerFooterOnly","tooltipAriaLabel","collapseStyle","resolvedSurface","surface","defaultSurface","resolvedHeaderDivider","headerDivider","defaultHeaderDivider","sharedHeaderFooterDivider","footerDivider","headerClassName","contentClassName","contentGap","footerClassName","ChevronDown","SmartCard"],"sources":["../src/components/base/feedback/alert.tsx","../src/components/ui/card.tsx","../src/components/base/cards/card.recipes.ts","../src/components/base/cards/smart-card.tokens.ts","../src/components/base/cards/partials/has-renderable-content.ts","../src/components/base/cards/partials/card-primitives.tsx","../src/components/base/cards/partials/smart-card-alert.tsx","../src/components/base/display/surface-title.tsx","../src/components/base/cards/partials/smart-card-actions-menu.tsx","../src/components/base/cards/partials/smart-card-header-row.tsx","../src/components/base/cards/smart-card.strings.ts","../src/components/base/cards/smart-card.tsx"],"sourcesContent":["/**\n * Alert — base notice primitive with semantic variants and responsive actions.\n *\n * Package-owned notice inspired by ReUI's alert layout. Consumers import this\n * base alert for the library's typography, token, and DOM-hook contract.\n */\nimport {\n\tforwardRef,\n\ttype ComponentPropsWithoutRef,\n\ttype ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport { ICON_CHILD_SIZE_CLASSNAMES } from '../display/icon-size';\nimport type { SemanticTone } from '../../../lib/component-vocabulary';\n\nconst alertVariants = cva(\n\t[\n\t\t'alert--component relative grid w-full grid-cols-[0_1fr] items-start gap-y-normal rounded-radius border p-surface text-left',\n\t\t'has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-space-sm',\n\t\t'has-[>[data-slot=alert-action]]:sm:grid-cols-[0_minmax(0,1fr)_auto] has-[>svg]:has-[>[data-slot=alert-action]]:sm:grid-cols-[auto_minmax(0,1fr)_auto] has-[>[data-slot=alert-action]]:gap-x-space-sm',\n\t\t'[&>svg]:row-span-2 [&>svg]:mt-[calc((1em*1.375-var(--spacing-icon))/2)] [&>svg]:shrink-0',\n\t\tICON_CHILD_SIZE_CLASSNAMES.md,\n\t],\n\t{\n\t\tvariants: {\n\t\t\ttone: {\n\t\t\t\tneutral: 'border-border bg-card text-card-foreground',\n\t\t\t\tprimary: 'border-primary/30 bg-primary/5 text-card-foreground [&>svg]:text-primary-accent',\n\t\t\t\tsecondary: 'border-border bg-secondary/40 text-card-foreground [&>svg]:text-secondary-foreground',\n\t\t\t\tinfo: 'border-info/30 bg-info/5 text-card-foreground [&>svg]:text-info',\n\t\t\t\tsuccess: 'border-success/30 bg-success/10 text-card-foreground [&>svg]:text-success',\n\t\t\t\twarning: 'border-warning/40 bg-warning/10 text-card-foreground [&>svg]:text-warning',\n\t\t\t\tdestructive: 'border-destructive/30 bg-destructive/5 text-card-foreground [&>svg]:text-destructive',\n\t\t\t},\n\t\t\tvariant: {\n\t\t\t\tdefault: '',\n\t\t\t\tinverse: [\n\t\t\t\t\t'border-foreground bg-foreground text-background',\n\t\t\t\t\t'[&>svg]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-title]_[data-typography=text]]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-description]_[data-typography=text]]:text-background/75',\n\t\t\t\t\t'[&_[data-slot=alert-metadata-item]]:bg-background/10',\n\t\t\t\t\t'[&_[data-slot=alert-metadata-item]>svg]:text-background/70',\n\t\t\t\t\t'[&_[data-slot=alert-metadata-label]_[data-typography=text]]:text-background/70',\n\t\t\t\t\t'[&_[data-slot=alert-metadata-value]_[data-typography=text]]:text-background',\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\ttone: 'neutral',\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nexport type AlertVariant = NonNullable<VariantProps<typeof alertVariants>['variant']>;\nexport type AlertTone = SemanticTone;\n\nexport interface AlertProps\n\textends ComponentPropsWithoutRef<'div'>,\n\t\tVariantProps<typeof alertVariants> {}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n\t{ className, tone, variant, role = 'alert', ...props },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-slot=\"alert\"\n\t\t\tdata-tone={tone ?? 'neutral'}\n\t\t\tdata-variant={variant ?? 'default'}\n\t\t\trole={role}\n\t\t\tclassName={cn(alertVariants({ tone, variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nAlert.displayName = 'Alert';\n\nconst AlertTitle = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertTitle({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-title\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--title col-start-2 min-h-icon leading-snug [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{isSimpleText(children) ? (\n\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\" lineHeight=\"snug\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Text>\n\t\t\t\t) : children}\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertDescription({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<Stack\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-description\"\n\t\t\t\tgap=\"xs\"\n\t\t\t\talign=\"start\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--description col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80 [&_p]:leading-relaxed',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{isSimpleText(children) ? (\n\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Text>\n\t\t\t\t) : children}\n\t\t\t</Stack>\n\t\t);\n\t},\n);\nAlertDescription.displayName = 'AlertDescription';\n\nexport interface AlertMetadataProps extends ComponentPropsWithoutRef<'dl'> {\n\t/** Metadata items or consumer-owned definition-list content. */\n\tchildren?: ReactNode;\n\t/** Accessible name for the fact group when the alert title is not sufficient. */\n\t'aria-label'?: string;\n\t/** Consumer styling hook merged with the tokenized defaults. */\n\tclassName?: string;\n}\n\n/**\n * Compact semantic facts associated with an alert. Use `aria-label` when the\n * surrounding title does not already describe the metadata group.\n */\nconst AlertMetadata = forwardRef<HTMLDListElement, AlertMetadataProps>(\n\tfunction AlertMetadata({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<dl\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-metadata\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert-metadata--component alert--metadata col-start-2 mt-space-xs flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAlertMetadata.displayName = 'AlertMetadata';\n\nexport interface AlertMetadataItemProps\n\textends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n\t/** Consumer styling hook merged with the tokenized defaults. */\n\tclassName?: string;\n\t/** Decorative or semantic leading media. Decorative icons should be aria-hidden. */\n\ticon?: ReactNode;\n\t/** User-provided metadata key; the Alert component owns no copy. */\n\tlabel: ReactNode;\n\t/** User-provided metadata value. May contain a package value primitive. */\n\tvalue: ReactNode;\n\t/** Applies tabular monospace figures to simple numeric values. */\n\tnumeric?: boolean;\n}\n\n/** A label/value pair rendered with native `dt` and `dd` semantics. */\nconst AlertMetadataItem = forwardRef<HTMLDivElement, AlertMetadataItemProps>(\n\tfunction AlertMetadataItem(\n\t\t{ className, icon, label, value, numeric = false, ...props },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-metadata-item\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert-metadata-item--component alert--metadata-item inline-flex max-w-full min-w-0 items-center gap-space-sm rounded-radius-sm bg-muted/60 px-control-xs py-space-xs',\n\t\t\t\t\t'[&>svg]:size-icon-sm [&>svg]:shrink-0 [&>svg]:text-muted-foreground',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t\t<dt data-slot=\"alert-metadata-label\" className=\"alert--metadata-label shrink-0\">\n\t\t\t\t\t{isSimpleText(label) ? (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"leading-none\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : label}\n\t\t\t\t</dt>\n\t\t\t\t<dd data-slot=\"alert-metadata-value\" className=\"alert--metadata-value m-0 min-w-0\">\n\t\t\t\t\t{isSimpleText(value) ? (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\tnumeric={numeric}\n\t\t\t\t\t\t\tclassName=\"break-words leading-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : value}\n\t\t\t\t</dd>\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertMetadataItem.displayName = 'AlertMetadataItem';\n\nconst AlertAction = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertAction({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t// Direction/alignment come from Stack; the remaining classes are grid\n\t\t\t// placement inside the alert's own template, which is the parent's\n\t\t\t// concern rather than this row's.\n\t\t\t<Stack\n\t\t\t\tref={ref}\n\t\t\t\tdirection=\"horizontal\"\n\t\t\t\talign=\"center\"\n\t\t\t\tjustify={{ base: 'start', sm: 'end' }}\n\t\t\t\twrap\n\t\t\t\tgap=\"sm\"\n\t\t\t\tdata-slot=\"alert-action\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--action max-sm:col-start-2 max-sm:mt-space-md sm:col-start-3 sm:row-start-1 sm:row-span-2 sm:self-start',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAlertAction.displayName = 'AlertAction';\n\nexport {\n\tAlert,\n\tAlertTitle,\n\tAlertDescription,\n\tAlertMetadata,\n\tAlertMetadataItem,\n\tAlertAction,\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"card--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"card-header--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"card-title--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"card-description--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\"card-action--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"card-content--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"card-footer--primitive\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { surfaceDividerRecipes } from '../../../lib/surface-recipes';\n/** Private Tailwind recipes; public props and DOM hooks remain owned by the component. */\nexport const cardRecipes = {\n\troot: \"flex flex-col w-full rounded-radius box-border overflow-hidden py-surface gap-space-xl transition-[background-color,border-color,box-shadow] duration-150\",\n\tshell: \"@container/card flex flex-col w-full rounded-radius box-border overflow-hidden py-surface gap-space-xl transition-[background-color,border-color,box-shadow] duration-150\",\n\tsurfaceCard: `bg-card ${surfaceDividerRecipes.frame.shell} shadow-sm text-card-foreground`,\n\tsurfaceDefault: `bg-card ${surfaceDividerRecipes.frame.shell} shadow-sm text-card-foreground`,\n\tsurfaceFlat: \"bg-transparent border-0 shadow-none text-foreground\",\n\tsurfaceFramed: `bg-card ${surfaceDividerRecipes.frame.shell} shadow-sm ring-4 ring-border/30 text-card-foreground`,\n\tsurfaceRaised: `bg-card ${surfaceDividerRecipes.frame.shell} shadow-md text-card-foreground`,\n\tsurfaceSunken: `bg-muted ${surfaceDividerRecipes.frame.shell} text-foreground`,\n\theader: \"flex flex-col gap-normal px-surface box-border\",\n\theaderRow: \"flex-col @sm/card:flex-row items-start justify-between gap-space-lg pb-0\",\n\theaderRowSingle: \"@sm/card:items-center\",\n\theaderLeading: \"min-w-0 w-full @sm/card:w-auto flex-1\",\n\theaderTrailing: \"flex max-w-full flex-wrap shrink-0 items-center gap-space-md\",\n\theaderDivider: `${surfaceDividerRecipes.frame.header} [&.border-b]:!pb-surface`,\n\ttitle: \"min-w-0 leading-tight text-card-foreground\",\n\ttitleSm: \"text-sm\",\n\ttitleMd: \"text-base\",\n\ttitleLg: \"text-lg\",\n\tdescription: \"text-sm text-muted-foreground leading-normal\",\n\tcontent: \"px-surface box-border min-w-0\",\n\tfooter: \"flex items-center px-surface box-border\",\n\tfooterDivider: `${surfaceDividerRecipes.frame.footer} [&.border-t]:!pt-surface`,\n\talert: \"px-surface\",\n\talertWithHeader: \"-mt-space-xs\",\n\texpandToggle: \"flex justify-center pb-surface -mt-space-md\",\n} as const satisfies Record<string, string>;\n","import type { SmartCardSurface } from './smart-card.types';\nimport { cardRecipes as styles } from './card.recipes';\n\n/**\n * BEM-style hooks applied to every SmartCard subregion. Library\n * consumers can target them in CSS / tests / analytics without\n * relying on shadcn's data-slot attributes (which are framework\n * internals). Keep these names consistent — they are part of the\n * public DOM contract.\n */\nexport const CARD_BEM = {\n\troot: 'card--component',\n\theader: 'card--header',\n\ttitle: 'card--title',\n\tdescription: 'card--description',\n\tcontent: 'card--content',\n\tfooter: 'card--footer',\n\talert: 'card--alert',\n\tcollapseFade: 'card--collapse-fade',\n\texpandToggle: 'card--expand-toggle',\n\texpandToggleButton: 'card--expand-toggle-button',\n} as const;\n\ninterface PaddingTokens {\n\tshell: string;\n\theaderX: string;\n\t/** Tokenized divider inset that overrides the shadcn primitive's fixed 24px rule. */\n\theaderDividerY: string;\n\tcontentX: string;\n\tcontentY: string;\n\tfooterX: string;\n\t/** Tokenized divider inset that overrides the shadcn primitive's fixed 24px rule. */\n\tfooterDividerY: string;\n\talertX: string;\n\t/** Bottom clearance for the half-inset expandable control. */\n\texpandableBottom: string;\n\t/** Vertical offset applied when alert sits BELOW the header (pulls it up). */\n\talertOffsetWithHeader: string;\n\t/** Vertical spacing applied when alert is the first content (no header). */\n\talertOffsetStandalone: string;\n}\n\nexport const CARD_INSET: PaddingTokens = {\n\tshell: styles.shell,\n\theaderX: 'px-surface',\n\theaderDividerY: styles.headerDivider,\n\tcontentX: styles.content,\n\tcontentY: '',\n\tfooterX: styles.footer,\n\tfooterDividerY: styles.footerDivider,\n\talertX: styles.alert,\n\texpandableBottom: 'pb-surface',\n\talertOffsetWithHeader: styles.alertWithHeader,\n\talertOffsetStandalone: '',\n};\n\n/**\n * Surface-specific shell classes.\n */\nexport const SURFACE_CLASSES: Record<SmartCardSurface, string> = {\n\tcard: styles.surfaceCard,\n\tflat: styles.surfaceFlat,\n\tframed: styles.surfaceFramed,\n};\n","import { Fragment, isValidElement, type ReactNode } from 'react';\n\n/**\n * Predicate used by SmartCard subregions to decide whether each slot\n * warrants rendering its wrapper. Numbers (incl. `0`) and JSX always\n * render; falsy / empty-string content is treated as absent. Fragments\n * recurse into their children.\n */\nexport function hasRenderableContent(content?: ReactNode): boolean {\n\tif (content === null || content === undefined) return false;\n\tif (typeof content === 'boolean') return false;\n\tif (typeof content === 'string') return content.trim().length > 0;\n\tif (typeof content === 'number' || typeof content === 'bigint') return true;\n\tif (Array.isArray(content)) return content.some(hasRenderableContent);\n\tif (isValidElement<{ children?: ReactNode }>(content)) {\n\t\tif (content.type === Fragment) return hasRenderableContent(content.props.children);\n\t\treturn true;\n\t}\n\treturn true;\n}\n","import type { TextGap } from '../../structure';\n/**\n * Internal layout primitives — re-exported from `smart-card.tsx` for\n * advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each primitive is intentionally thin:\n * a single responsibility, a single set of default classes, no business\n * logic. The BEM hooks (`card--component`, `card--header`, etc.) are\n * applied here so the public DOM contract lives in one place.\n */\nimport {\n\ttype ComponentPropsWithRef,\n\ttype ComponentPropsWithoutRef,\n} from 'react';\n\nimport {\n\tCard as CardPrimitive,\n\tCardContent as CardContentPrimitive,\n\tCardDescription as CardDescriptionPrimitive,\n\tCardFooter as CardFooterPrimitive,\n\tCardHeader as CardHeaderPrimitive,\n\tCardTitle as CardTitlePrimitive,\n} from '../../../ui/card';\nimport { Text } from '../../../typography/text';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\nimport { cn } from '../../../../lib/utils';\n\nimport { CARD_BEM } from '../smart-card.tokens';\nimport type { CardTitleSize } from '../smart-card.types';\nimport { cardRecipes as styles } from '../card.recipes';\n\nimport { hasRenderableContent } from './has-renderable-content';\n\nconst CARD_TITLE_SIZE_CLASSES: Record<CardTitleSize, string> = {\n\tsm: styles.titleSm,\n\tmd: styles.titleMd,\n\tlg: styles.titleLg,\n};\n\nconst CARD_TITLE_TEXT_SIZE: Record<CardTitleSize, 'sm' | 'base' | 'lg'> = {\n\tsm: 'sm',\n\tmd: 'base',\n\tlg: 'lg',\n};\n\nexport function CardShell({ className, ...props }: ComponentPropsWithRef<'div'>) {\n\treturn (\n\t\t<CardPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.root,\n\t\t\t\tstyles.shell,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardHeader({\n\tclassName,\n\ttextGap = 'normal',\n\t...props\n}: ComponentPropsWithoutRef<'div'> & { textGap?: TextGap }) {\n\treturn (\n\t\t<CardHeaderPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.header,\n\t\t\t\tstyles.header,\n\t\t\t\ttextGap === 'dense' ? 'gap-dense' : 'gap-normal',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardTitle({\n\tclassName,\n\tchildren,\n\tsize: sizeProp,\n\t...props\n}: ComponentPropsWithoutRef<'div'> & { size?: CardTitleSize }) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardTitlePrimitive\n\t\t\t\tclassName={cn(CARD_BEM.title, styles.title, 'font-medium', CARD_TITLE_SIZE_CLASSES[size], className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardTitlePrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-title\"\n\t\t\ttag=\"div\"\n\t\t\tsize={CARD_TITLE_TEXT_SIZE[size]}\n\t\t\tweight=\"semibold\"\n\t\t\tlineHeight=\"tight\"\n\t\t\tclassName={cn(CARD_BEM.title, styles.title, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardDescription({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardDescriptionPrimitive\n\t\t\t\tclassName={cn(\n\t\t\t\t\tCARD_BEM.description,\n\t\t\t\t\tstyles.description,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardDescriptionPrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-description\"\n\t\t\ttag=\"div\"\n\t\t\ttype=\"secondary\"\n\t\t\tclassName={cn(CARD_BEM.description, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardContent({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardContentPrimitive\n\t\t\tclassName={cn(CARD_BEM.content, styles.content, className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardFooter({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardFooterPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.footer,\n\t\t\t\tstyles.footer,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","/**\n * Inline alert banner rendered between the header and the card body.\n * Pulls itself up under the header (`alertOffsetWithHeader`) when one\n * exists so the visual gap between header bottom and alert top stays\n * tight; otherwise pushes itself down (`alertOffsetStandalone`) so it\n * doesn't kiss the card top edge.\n */\nimport type { ReactNode } from 'react';\n\nimport { Alert, AlertDescription } from '../../feedback/alert';\nimport { cn } from '../../../../lib/utils';\n\nimport { CARD_BEM, CARD_INSET } from '../smart-card.tokens';\nimport type { CardAlertTone } from '../smart-card.types';\n\ninterface AlertSlotProps {\n\t/** Banner content. A plain string is wrapped for you. */\n\talert: ReactNode | string;\n\t/** Tone of the banner. */\n\talertTone: CardAlertTone;\n\t/** Whether a header sits above, deciding the banner's top spacing. */\n\thasHeader: boolean;\n\tclassName?: string;\n}\n\nexport function SmartCardAlert({\n\talert,\n\talertTone,\n\thasHeader,\n\tclassName,\n}: AlertSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.alert,\n\t\t\t\tCARD_INSET.alertX,\n\t\t\t\tclassName,\n\t\t\t\thasHeader ? CARD_INSET.alertOffsetWithHeader : CARD_INSET.alertOffsetStandalone,\n\t\t\t)}\n\t\t>\n\t\t\t<Alert tone={alertTone}>\n\t\t\t\t<AlertDescription>{alert}</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from 'react';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\n/** One wrapping title/suffix composition shared by cards and content structures. */\nexport function SurfaceTitle({title, suffix, size = 'base', className, suffixClassName, dataSlot}: {\n title?: ReactNode; suffix?: ReactNode; size?: 'sm' | 'base' | 'lg';\n className?: string; suffixClassName?: string; dataSlot?: string;\n}) {\n return <Text tag=\"div\" size={size} weight={typeof title === 'string' || typeof title === 'number' || typeof title === 'bigint' ? 'semibold' : 'medium'} lineHeight=\"tight\" data-slot={dataSlot} className={cn('surface-title--component flex min-w-0 flex-wrap items-center gap-space-md break-words leading-tight', className)}>\n {title != null && <span className=\"min-w-0 max-w-full\">{title}</span>}\n {suffix != null && <div className={cn('surface-title--suffix inline-flex max-w-full flex-wrap items-center gap-space-md', suffixClassName)}>{suffix}</div>}\n </Text>;\n}\n","/**\n * SmartCard actions menu — `⋮` trigger + dropdown of consumer-supplied\n * `SmartCardAction` items. Always renders a 28×28 square trigger so it\n * reads cleanly as a circle (consumer overrides to `rounded-full`) or\n * a rectangle (default `rounded-radius-md`).\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tActionMenu,\n\ttype ActionMenuAction,\n} from '../../action-menu';\n\nimport type { SmartCardAction } from '../smart-card.types';\n\ninterface ActionsMenuProps {\n\t/** Controls offered on the surface. */\n\tactions: readonly SmartCardAction[];\n\tactionsLabel: string;\n}\n\nexport function ActionsMenu({ actions, actionsLabel }: ActionsMenuProps) {\n\tconst actionDefinitions: ActionMenuAction[] = actions.map((action, index) => ({ ...action, id: action.id ?? `card-action-${index}` }));\n\n\treturn (\n\t\t<ActionMenu\n\t\t\tactions={actionDefinitions}\n\t\t\ticon={MoreHorizontal}\n\t\t\tsrText={actionsLabel}\n\t\t\talign=\"end\"\n\t\t\tcloseOnSelect\n\t\t\tbuttonProps={{\n\t\t\t\tsize: 'sm',\n\t\t\t\ttone: 'secondary',\n\t\t\t\tbuttonStyle: 'ghost',\n\t\t\t\ticonOnly: true,\n\t\t\t\tclassName: 'card--actions-trigger size-action-sm text-muted-foreground',\n\t\t\t}}\n\t\t/>\n\t);\n}\n","/**\n * SmartCardHeaderRow — the chrome above the card body. Combines icon /\n * title / description / tooltip / suffix on the leading side with the\n * trailing `headerEnd` / `headerAction` slots and the actions menu.\n *\n * `TooltipTrigger_Info` is colocated here because it's only used by the\n * header — keeping it private avoids polluting the public partial\n * surface.\n */\nimport { Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { SurfaceTitle } from '../../display/surface-title';\nimport { Button } from '../../buttons';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '../../display/tooltip';\nimport { Stack, type TextGap } from '../../structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { CARD_INSET } from '../smart-card.tokens';\nimport { cardRecipes } from '../card.recipes';\nimport type { CardTitleSize, SmartCardAction } from '../smart-card.types';\n\nimport { CardHeader, CardDescription } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport { ActionsMenu } from './smart-card-actions-menu';\n\nfunction TooltipTrigger_Info({ tooltipLabel }: { tooltipLabel: string }) {\n\treturn (\n\t\t<TooltipTrigger\n\t\t\trender={(triggerProps) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tconst passthrough = triggerProps as Record<string, any>;\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...passthrough}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'card--tooltip-trigger',\n\t\t\t\t\t\t\t'h-5 w-5 text-muted-foreground',\n\t\t\t\t\t\t\tpassthrough.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={tooltipLabel}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Info className=\"size-icon-md\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface HeaderProps {\n\t/** Leading glyph on the title line. */\n\ticon?: ReactNode;\n\t/** Card title. */\n\ttitle?: ReactNode;\n\t/** Content immediately after the title. */\n\ttitleSuffix?: ReactNode;\n\t/** Supporting sentence under the title. */\n\tdescription?: ReactNode;\n\ttextGap?: TextGap;\n\t/** Explanatory copy behind an info affordance on the title line. */\n\ttooltip?: ReactNode;\n\t/** Accessible name for the tooltip trigger. */\n\ttooltipLabel: string;\n\t/** Full-width row above the title. */\n\theaderStart?: ReactNode;\n\t/** Content at the end of the header. */\n\theaderEnd?: ReactNode;\n\t/** Single control before the overflow menu. */\n\theaderAction?: ReactNode;\n\t/** Overflow menu at the far end of the header. */\n\tactions?: readonly SmartCardAction[];\n\t/** Accessible name for the overflow trigger. */\n\tactionsLabel: string;\n\t/** Card title typography. */\n\ttitleSize: CardTitleSize;\n\tclassName?: string;\n}\n\nexport function SmartCardHeaderRow({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttextGap = 'normal',\n\ttooltip,\n\ttooltipLabel,\n\theaderStart,\n\theaderEnd,\n\theaderAction,\n\tactions,\n\tactionsLabel,\n\ttitleSize,\n\tclassName,\n}: HeaderProps) {\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst hasActions = cardActions.length > 0;\n\n\tconst hasIcon = hasRenderableContent(icon);\n\tconst hasTitle = hasRenderableContent(title);\n\tconst hasTitleSuffix = hasRenderableContent(titleSuffix);\n\tconst hasDescription = hasRenderableContent(description);\n\tconst hasTooltip = hasRenderableContent(tooltip);\n\tconst hasHeaderStart = hasRenderableContent(headerStart);\n\tconst hasHeaderEnd = hasRenderableContent(headerEnd);\n\tconst hasHeaderAction = hasRenderableContent(headerAction);\n\n\tconst showTitleRow = hasIcon || hasTitle || hasTitleSuffix || hasTooltip;\n\tconst showTrailing = hasHeaderEnd || hasHeaderAction || hasActions;\n\n\treturn (\n\t\t<CardHeader\n\t\t\tclassName={cn(\n\t\t\t\tcardRecipes.headerRow,\n\t\t\t\t!hasDescription && !hasHeaderStart && cardRecipes.headerRowSingle,\n\t\t\t\tCARD_INSET.headerX,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack gap={textGap} className={cn(\"card--header-start\", cardRecipes.headerLeading)}>\n\t\t\t\t{!!hasHeaderStart && headerStart}\n\n\t\t\t\t{!!showTitleRow && (\n\t\t\t\t\t<div className=\"card--title-row flex min-w-0 items-start gap-space-sm\">\n\t\t\t\t\t\t{!!hasIcon && (\n\t\t\t\t\t\t\t<span className=\"card--icon flex shrink-0 items-center pt-space-2xs text-muted-foreground [&_svg]:size-icon\">\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<SurfaceTitle dataSlot=\"card-title\" title={title} suffix={hasTitleSuffix ? titleSuffix : undefined} size={titleSize === 'md' ? 'base' : titleSize === 'lg' ? 'lg' : 'sm'} className=\"card--title flex-1\" suffixClassName=\"card--title-suffix\" />\n\t\t\t\t\t\t{!!hasTooltip && (\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger_Info tooltipLabel={tooltipLabel} />\n\t\t\t\t\t\t\t\t<TooltipContent>{tooltip}</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<CardDescription className=\"text-left\">{description}</CardDescription>\n\t\t\t\t)}\n\t\t\t</Stack>\n\n\t\t\t{!!showTrailing && (\n\t\t\t\t<div className={cn(\"card--header-end\", cardRecipes.headerTrailing)}>\n\t\t\t\t\t{!!hasHeaderEnd && headerEnd}\n\t\t\t\t\t{!!hasHeaderAction && headerAction}\n\t\t\t\t\t{!!hasActions && (\n\t\t\t\t\t\t<ActionsMenu actions={cardActions} actionsLabel={actionsLabel} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardHeader>\n\t);\n}\n","/**\n * SmartCard strings — i18n surface for the chrome the consumer doesn't\n * pass directly. Most copy (title, description, action labels, alert\n * body) flows in via props; the strings here cover the implicit\n * affordances (header actions, tooltip, and expand toggle).\n */\n\nexport interface SmartCardStrings {\n\tactionsLabel: string;\n\ttooltipLabel: string;\n\texpandLabel: string;\n\tcollapseLabel: string;\n}\n\nexport const defaultSmartCardStrings = {\n\tactionsLabel: 'Card actions',\n\ttooltipLabel: 'Card info',\n\texpandLabel: 'Expand card',\n\tcollapseLabel: 'Collapse card',\n} satisfies SmartCardStrings;\n","import { surfaceDividerRecipes } from '../../../lib/surface-recipes';\n/**\n * SmartCard — blocks card with header (icon, title, suffix, description,\n * tooltip), actions menu, alert banner, header / content / footer slots,\n * surface variants (card / flat / framed), and an opt-in expandable body.\n *\n * The single card primitive everything else builds on — never reach past it\n * to shadcn `Card` directly. The CardShell / CardHeader / CardTitle /\n * CardDescription / CardContent / CardFooter primitives are re-exported\n * for advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each subregion paints a BEM-style hook\n * (`card--component`, `card--header`, `card--title`, …) for CSS / test /\n * analytics targeting independent of shadcn's data-slot internals.\n *\n * The file is a thin orchestrator. The actual chrome lives in:\n * - `./smart-card.types.ts` — public prop / variant types\n * - `./smart-card.strings.ts` — i18n (expand toggle copy)\n * - `./smart-card.tokens.ts` — CARD_INSET + SURFACE_CLASSES + CARD_BEM\n * - `./partials/card-primitives.tsx` — CardShell + CardHeader / Title /\n * Description / Content / Footer\n * - `./partials/smart-card-header-row.tsx` — header layout + actions menu\n * - `./partials/smart-card-alert.tsx` — inline alert banner\n * - `./partials/smart-card-actions-menu.tsx` — `⋮` dropdown\n * - `./partials/smart-card-skeleton.tsx` — loading placeholder\n * - `./partials/has-renderable-content.ts` — slot-empty predicate\n */\nimport { ChevronDown } from 'lucide-react';\nimport {\n\ttype CSSProperties,\n\tforwardRef,\n\tuseCallback,\n\tuseState,\n} from 'react';\n\nimport { Button } from '../buttons';\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings } from '../../../lib/strings';\nimport { useCardConfig, useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tCardContent,\n\tCardFooter,\n\tCardShell,\n} from './partials/card-primitives';\nimport { hasRenderableContent } from './partials/has-renderable-content';\nimport { SmartCardAlert } from './partials/smart-card-alert';\nimport { SmartCardHeaderRow } from './partials/smart-card-header-row';\nimport {\n\tdefaultSmartCardStrings,\n} from './smart-card.strings';\nimport {\n\tCARD_BEM,\n\tCARD_INSET,\n\tSURFACE_CLASSES,\n} from './smart-card.tokens';\nimport type {\n\tSmartCardProps,\n\tSmartCardSurface,\n} from './smart-card.types';\n\nexport const Card = forwardRef<HTMLDivElement, SmartCardProps>(function Card({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttextGap = 'normal',\n\ttooltip,\n\ttooltipAriaLabel,\n\tfooterText,\n\talert,\n\talertTone = 'neutral',\n\tsurface,\n\tpadding = 'md',\n\theaderPlacement = 'inside',\n\tcontentGap,\n\ttitleSize,\n\tactions,\n\tactionsLabel,\n\theaderAction,\n\theaderStart,\n\theaderEnd,\n\tcontentTop,\n\tcontentBottom,\n\tfooterSlot,\n\theaderDivider,\n\tfooterDivider = false,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n\t...rootProps\n}, ref) {\n\tconst {\n\t\tdefaultSurface,\n\t\tdefaultHeaderDivider,\n\t} = useCardConfig();\n\tconst { defaultScale } = useDensityConfig();\n\tconst resolvedTitleSize = resolveComponentScale(titleSize, defaultScale);\n\tconst inset = { none: 'px-0', sm: 'px-surface-xs', md: 'px-surface', lg: 'px-surface-lg' }[padding];\n\tconst vertical = { none: 'py-0', sm: 'py-surface-xs', md: 'py-surface', lg: 'py-surface-lg' }[padding];\n\tconst tokens = { ...CARD_INSET, headerX: inset, contentX: inset, footerX: inset, headerDividerY: { none: '!pb-0', sm: '!pb-surface-xs', md: '!pb-surface', lg: '!pb-surface-lg' }[padding], footerDividerY: { none: '!pt-0', sm: '!pt-surface-xs', md: '!pt-surface', lg: '!pt-surface-lg' }[padding] };\n\tconst framedHeader = headerPlacement === 'frame';\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst strings = useStrings(defaultSmartCardStrings, stringsProp);\n\tconst resolvedActionsLabel =\n\t\tactionsLabel ?? strings.actionsLabel;\n\n\tconst isExpandable = expandable !== false && expandable !== undefined;\n\tconst collapsedMaxHeightRaw =\n\t\ttypeof expandable === 'object' && expandable?.collapsedMaxHeight !== undefined\n\t\t\t? expandable.collapsedMaxHeight\n\t\t\t: '12rem';\n\tconst collapsedMaxHeight =\n\t\ttypeof collapsedMaxHeightRaw === 'number'\n\t\t\t? `${collapsedMaxHeightRaw}px`\n\t\t\t: collapsedMaxHeightRaw;\n\n\tconst isExpandedControlled = expandedProp !== undefined;\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = isExpandedControlled ? expandedProp : internalExpanded;\n\tconst handleToggle = useCallback(() => {\n\t\tconst next = !expanded;\n\t\tif (!isExpandedControlled) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}, [expanded, isExpandedControlled, onExpandedChange]);\n\n\tconst hasHeader =\n\t\thasRenderableContent(icon) ||\n\t\thasRenderableContent(title) ||\n\t\thasRenderableContent(description) ||\n\t\tcardActions.length > 0 ||\n\t\thasRenderableContent(headerAction) ||\n\t\thasRenderableContent(headerStart) ||\n\t\thasRenderableContent(headerEnd);\n\n\tconst hasAlert = hasRenderableContent(alert);\n\tconst hasFooterText = hasRenderableContent(footerText);\n\tconst hasFooterSlot = hasRenderableContent(footerSlot);\n\tconst hasContentTop = hasRenderableContent(contentTop);\n\tconst hasContentBottom = hasRenderableContent(contentBottom);\n\t// Expandable cards retain their explicitly requested collapse region.\n\tconst hasBody = hasContentTop || hasContentBottom || hasRenderableContent(children) || isExpandable;\n\tconst headerFooterOnly = hasHeader && (hasFooterText || hasFooterSlot) && !hasAlert && !hasBody && !framedHeader;\n\n\tconst tooltipLabel =\n\t\ttooltipAriaLabel && tooltipAriaLabel.trim().length > 0\n\t\t\t? tooltipAriaLabel\n\t\t\t: strings.tooltipLabel;\n\n\tconst collapseStyle: CSSProperties | undefined = isExpandable\n\t\t? {\n\t\t\t\tmaxHeight: expanded ? '' : collapsedMaxHeight,\n\t\t\t}\n\t\t: undefined;\n\n\t// Resolve surface from the instance, then the provider default.\n\tconst resolvedSurface: SmartCardSurface =\n\t\tsurface ?? defaultSurface ?? 'framed';\n\tconst resolvedHeaderDivider = headerDivider ?? defaultHeaderDivider ?? false;\n\t// Adjacent header/footer regions share one boundary, owned by the footer.\n\tconst sharedHeaderFooterDivider = headerFooterOnly && (resolvedHeaderDivider || footerDivider);\n\n\treturn (\n\t\t<CardShell\n\t\t\t{...rootProps}\n\t\t\tdata-header-placement={headerPlacement}\n\t\t\tref={ref}\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn(\n\t\t\t\tSURFACE_CLASSES[resolvedSurface],\n\t\t\t\ttokens.shell,\n\t\t\t\tvertical,\n\t\t\t\tpadding === 'none' && 'gap-space-md',\n\t\t\t\tsharedHeaderFooterDivider && 'gap-0',\n\t\t\t\tframedHeader && 'rounded-radius bg-muted p-surface-xs pt-0 gap-0 ring-0',\n\t\t\t\t// Flat subject structure has no surface edge to clip against.\n\t\t\t\t// With no inset, rounded clipping otherwise cuts into its heading.\n\t\t\t\tresolvedSurface === 'flat' && !framedHeader && 'overflow-visible',\n\t\t\t\t// The toggle straddles the card edge. Keep tokenized clearance\n\t\t\t\t// inside the card and reserve its outside half in document flow.\n\t\t\t\t// `overflow-visible` counters the shadcn primitive's clipping.\n\t\t\t\tisExpandable && cn(\n\t\t\t\t\t'relative mb-space-xl !overflow-visible',\n\t\t\t\t\ttokens.expandableBottom,\n\t\t\t\t),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!hasHeader && (\n\t\t\t\t<SmartCardHeaderRow\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleSuffix={titleSuffix}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\ttextGap={textGap}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\ttooltipLabel={tooltipLabel}\n\t\t\t\t\theaderStart={headerStart}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\theaderAction={headerAction}\n\t\t\t\t\tactions={cardActions}\n\t\t\t\t\tactionsLabel={resolvedActionsLabel}\n\t\t\t\t\ttitleSize={resolvedTitleSize}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tresolvedHeaderDivider && !sharedHeaderFooterDivider && cn(\n\t\t\t\t\t\t\tsurfaceDividerRecipes.frame.header,\n\t\t\t\t\t\t\ttokens.headerDividerY,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tsharedHeaderFooterDivider && tokens.headerDividerY,\n\t\t\t\t\t\ttokens.headerX,\n\t\t\t\t\t\tframedHeader && 'flex-row items-center min-h-action px-surface-xs py-space-2xs [&_.card--title-row]:items-center [&_.card--icon]:pt-0',\n\t\t\t\t\t\theaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={framedHeader ? cn('card--body-surface flex min-w-0 flex-col gap-space-xl rounded-inner bg-card text-card-foreground', surfaceDividerRecipes.frame.shell, vertical) : 'contents'}>\n\t\t\t{!!hasAlert && (\n\t\t\t\t<SmartCardAlert\n\t\t\t\t\talert={alert}\n\t\t\t\t\talertTone={alertTone}\n\t\t\t\t\thasHeader={hasHeader}\n\t\t\t\t\tclassName={inset}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!hasBody && <CardContent\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttokens.contentX,\n\t\t\t\t\ttokens.contentY,\n\t\t\t\t\tisExpandable &&\n\t\t\t\t\t\t'relative overflow-hidden transition-[max-height] duration-500 ease-in-out',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={collapseStyle}\n\t\t\t>\n\t\t\t\t{!!hasContentTop && contentTop}\n\t\t\t\t{contentGap ? <Stack gap={contentGap}>{children}</Stack> : children}\n\t\t\t\t{!!hasContentBottom && contentBottom}\n\n\t\t\t\t{!!isExpandable && !expanded && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tCARD_BEM.collapseFade,\n\t\t\t\t\t\t\t'pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-radius bg-linear-to-t to-transparent',\n\t\t\t\t\t\t\tresolvedSurface === 'flat' ? 'from-background' : 'from-card',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</CardContent>}\n\n\t\t\t{(hasFooterText || hasFooterSlot) && (\n\t\t\t\t<CardFooter className={cn(\n\t\t\t\t\ttokens.footerX,\n\t\t\t\t\thasFooterSlot ? 'flex-col items-stretch gap-space-md' : 'justify-end',\n\t\t\t\t\t(footerDivider || sharedHeaderFooterDivider) && cn(surfaceDividerRecipes.frame.footer, tokens.footerDividerY),\n\t\t\t\t\tfooterClassName,\n\t\t\t\t)}>\n\t\t\t\t\t{hasFooterText && (typeof footerText === 'string' || typeof footerText === 'number' || typeof footerText === 'bigint'\n\t\t\t\t\t\t? <Text tag=\"span\" size=\"xs\" type=\"secondary\">{footerText}</Text>\n\t\t\t\t\t\t: footerText)}\n\t\t\t\t\t{hasFooterSlot && footerSlot}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t</div>\n\n\t\t\t{!!isExpandable && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tCARD_BEM.expandToggle,\n\t\t\t\t\t\t'absolute bottom-0 left-1/2 z-10 -translate-x-1/2 translate-y-1/2',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tCARD_BEM.expandToggleButton,\n\t\t\t\t\t\t\t'rounded-full',\n\t\t\t\t\t\t\tcn(surfaceDividerRecipes.frame.shell, 'bg-background text-foreground shadow-sm'),\n\t\t\t\t\t\t\t'hover:bg-muted/40 transition-colors',\n\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'size-icon transition-transform duration-300',\n\t\t\t\t\t\t\t\texpanded && 'rotate-180',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n});\n\nCard.displayName = 'Card';\n\n/** @deprecated Use Card. */\nexport const SmartCard = Card;\n\n// ──────────────────────────────────────────────────────────────────────────\n// Re-exports — public surface lives here so `import { ... } from\n// '.'` keeps working through the file split.\n// ──────────────────────────────────────────────────────────────────────────\n\nexport {\n\tdefaultSmartCardStrings,\n\ttype SmartCardStrings,\n} from './smart-card.strings';\nexport type {\n\tCardAlertTone,\n\tSmartCardAction,\n\tSmartCardProps,\n\tSmartCardSkeletonProps,\n\tSmartCardSurface,\n} from './smart-card.types';\nexport {\n\tCardContent,\n\tCardDescription,\n\tCardFooter,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './partials/card-primitives';\nexport { hasRenderableContent } from './partials/has-renderable-content';\nexport { SmartCardSkeleton } from './partials/smart-card-skeleton';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"structure.recipes-DjqnBpwz.js","names":["STRUCTURE_BREAKPOINTS","resolveResponsiveEntries","value","fallback","resolveOptionalResponsiveEntries","compileResponsiveClasses","classes","emitted","breakpoint","entries","classMap","gapClasses","rowGapClasses","columnGapClasses","alignClasses","justifyClasses","directionClasses","wrapClasses","columnClasses","spanClasses","adaptiveColumnClasses","gapRecipe","gaps","gap","rows","rowGap","columns","columnGap","result","currentGap","currentRow","currentColumn","nextGap","sharedChanged","stackRecipe","directions","direction","aligns","align","wraps","wrap","justify","currentDirection","explicitAlign","explicitWrap","directionAtBreakpoint","alignAtBreakpoint","wrapAtBreakpoint","directionChanged","resolveGridColumns","gridRecipe","adaptiveGridRecipe","minColumnWidth","spanRecipe","span","requested","currentSpan","currentColumns","resolved"],"sources":["../src/components/base/structure/structure.responsive.ts","../src/components/base/structure/structure.recipes.ts"],"sourcesContent":["import type {\n\tResponsiveValue,\n\tStructureBreakpoint,\n} from './structure.types';\n\nexport const STRUCTURE_BREAKPOINTS: readonly StructureBreakpoint[] = [\n\t'base',\n\t'sm',\n\t'md',\n\t'lg',\n\t'xl',\n\t'2xl',\n];\n\nexport function resolveResponsiveEntries<T>(\n\tvalue: ResponsiveValue<T> | undefined,\n\tfallback: T,\n): Partial<Record<StructureBreakpoint, T>> {\n\tif (value === undefined) return { base: fallback };\n\tif (typeof value !== 'object' || value === null) return { base: value };\n\treturn { base: fallback, ...value };\n}\n\nexport function resolveOptionalResponsiveEntries<T>(\n\tvalue: ResponsiveValue<T> | undefined,\n): Partial<Record<StructureBreakpoint, T>> {\n\tif (value === undefined) return {};\n\tif (typeof value !== 'object' || value === null) return { base: value };\n\treturn value;\n}\n\nexport function compileResponsiveClasses<T extends string | number>(\n\tentries: Partial<Record<StructureBreakpoint, T>>,\n\tclassMap: Record<StructureBreakpoint, Record<T, string>>,\n): string[] {\n\tconst classes: string[] = [];\n\tlet emitted: T | undefined;\n\n\tfor (const breakpoint of STRUCTURE_BREAKPOINTS) {\n\t\tconst value = entries[breakpoint];\n\t\tif (value === undefined || value === emitted) continue;\n\t\temitted = value;\n\t\tclasses.push(classMap[breakpoint][value]);\n\t}\n\n\treturn classes;\n}\n","import {\n\tcompileResponsiveClasses,\n\tresolveOptionalResponsiveEntries,\n\tresolveResponsiveEntries,\n\tSTRUCTURE_BREAKPOINTS,\n} from './structure.responsive';\nimport type {\n\tAdaptiveGridMinimum,\n\tGridColumnLadder,\n\tResponsiveValue,\n\tStructureAlign,\n\tStructureGap,\n\tStructureJustify,\n} from './structure.types';\n\nconst gapClasses = {\n\tbase: { none: 'gap-0', normal: 'gap-normal', dense: 'gap-dense', '2xs': 'gap-space-2xs', xs: 'gap-space-xs', sm: 'gap-space-sm', md: 'gap-space-md', lg: 'gap-space-lg', xl: 'gap-space-xl', '2xl': 'gap-space-2xl' },\n\tsm: { none: 'sm:gap-0', normal: 'sm:gap-normal', dense: 'sm:gap-dense', '2xs': 'sm:gap-space-2xs', xs: 'sm:gap-space-xs', sm: 'sm:gap-space-sm', md: 'sm:gap-space-md', lg: 'sm:gap-space-lg', xl: 'sm:gap-space-xl', '2xl': 'sm:gap-space-2xl' },\n\tmd: { none: 'md:gap-0', normal: 'md:gap-normal', dense: 'md:gap-dense', '2xs': 'md:gap-space-2xs', xs: 'md:gap-space-xs', sm: 'md:gap-space-sm', md: 'md:gap-space-md', lg: 'md:gap-space-lg', xl: 'md:gap-space-xl', '2xl': 'md:gap-space-2xl' },\n\tlg: { none: 'lg:gap-0', normal: 'lg:gap-normal', dense: 'lg:gap-dense', '2xs': 'lg:gap-space-2xs', xs: 'lg:gap-space-xs', sm: 'lg:gap-space-sm', md: 'lg:gap-space-md', lg: 'lg:gap-space-lg', xl: 'lg:gap-space-xl', '2xl': 'lg:gap-space-2xl' },\n\txl: { none: 'xl:gap-0', normal: 'xl:gap-normal', dense: 'xl:gap-dense', '2xs': 'xl:gap-space-2xs', xs: 'xl:gap-space-xs', sm: 'xl:gap-space-sm', md: 'xl:gap-space-md', lg: 'xl:gap-space-lg', xl: 'xl:gap-space-xl', '2xl': 'xl:gap-space-2xl' },\n\t'2xl': { none: '2xl:gap-0', normal: '2xl:gap-normal', dense: '2xl:gap-dense', '2xs': '2xl:gap-space-2xs', xs: '2xl:gap-space-xs', sm: '2xl:gap-space-sm', md: '2xl:gap-space-md', lg: '2xl:gap-space-lg', xl: '2xl:gap-space-xl', '2xl': '2xl:gap-space-2xl' },\n} as const;\n\nconst rowGapClasses = {\n\tbase: { none: 'gap-y-0', normal: 'gap-y-normal', dense: 'gap-y-dense', '2xs': 'gap-y-space-2xs', xs: 'gap-y-space-xs', sm: 'gap-y-space-sm', md: 'gap-y-space-md', lg: 'gap-y-space-lg', xl: 'gap-y-space-xl', '2xl': 'gap-y-space-2xl' },\n\tsm: { none: 'sm:gap-y-0', normal: 'sm:gap-y-normal', dense: 'sm:gap-y-dense', '2xs': 'sm:gap-y-space-2xs', xs: 'sm:gap-y-space-xs', sm: 'sm:gap-y-space-sm', md: 'sm:gap-y-space-md', lg: 'sm:gap-y-space-lg', xl: 'sm:gap-y-space-xl', '2xl': 'sm:gap-y-space-2xl' },\n\tmd: { none: 'md:gap-y-0', normal: 'md:gap-y-normal', dense: 'md:gap-y-dense', '2xs': 'md:gap-y-space-2xs', xs: 'md:gap-y-space-xs', sm: 'md:gap-y-space-sm', md: 'md:gap-y-space-md', lg: 'md:gap-y-space-lg', xl: 'md:gap-y-space-xl', '2xl': 'md:gap-y-space-2xl' },\n\tlg: { none: 'lg:gap-y-0', normal: 'lg:gap-y-normal', dense: 'lg:gap-y-dense', '2xs': 'lg:gap-y-space-2xs', xs: 'lg:gap-y-space-xs', sm: 'lg:gap-y-space-sm', md: 'lg:gap-y-space-md', lg: 'lg:gap-y-space-lg', xl: 'lg:gap-y-space-xl', '2xl': 'lg:gap-y-space-2xl' },\n\txl: { none: 'xl:gap-y-0', normal: 'xl:gap-y-normal', dense: 'xl:gap-y-dense', '2xs': 'xl:gap-y-space-2xs', xs: 'xl:gap-y-space-xs', sm: 'xl:gap-y-space-sm', md: 'xl:gap-y-space-md', lg: 'xl:gap-y-space-lg', xl: 'xl:gap-y-space-xl', '2xl': 'xl:gap-y-space-2xl' },\n\t'2xl': { none: '2xl:gap-y-0', normal: '2xl:gap-y-normal', dense: '2xl:gap-y-dense', '2xs': '2xl:gap-y-space-2xs', xs: '2xl:gap-y-space-xs', sm: '2xl:gap-y-space-sm', md: '2xl:gap-y-space-md', lg: '2xl:gap-y-space-lg', xl: '2xl:gap-y-space-xl', '2xl': '2xl:gap-y-space-2xl' },\n} as const;\n\nconst columnGapClasses = {\n\tbase: { none: 'gap-x-0', normal: 'gap-x-normal', dense: 'gap-x-dense', '2xs': 'gap-x-space-2xs', xs: 'gap-x-space-xs', sm: 'gap-x-space-sm', md: 'gap-x-space-md', lg: 'gap-x-space-lg', xl: 'gap-x-space-xl', '2xl': 'gap-x-space-2xl' },\n\tsm: { none: 'sm:gap-x-0', normal: 'sm:gap-x-normal', dense: 'sm:gap-x-dense', '2xs': 'sm:gap-x-space-2xs', xs: 'sm:gap-x-space-xs', sm: 'sm:gap-x-space-sm', md: 'sm:gap-x-space-md', lg: 'sm:gap-x-space-lg', xl: 'sm:gap-x-space-xl', '2xl': 'sm:gap-x-space-2xl' },\n\tmd: { none: 'md:gap-x-0', normal: 'md:gap-x-normal', dense: 'md:gap-x-dense', '2xs': 'md:gap-x-space-2xs', xs: 'md:gap-x-space-xs', sm: 'md:gap-x-space-sm', md: 'md:gap-x-space-md', lg: 'md:gap-x-space-lg', xl: 'md:gap-x-space-xl', '2xl': 'md:gap-x-space-2xl' },\n\tlg: { none: 'lg:gap-x-0', normal: 'lg:gap-x-normal', dense: 'lg:gap-x-dense', '2xs': 'lg:gap-x-space-2xs', xs: 'lg:gap-x-space-xs', sm: 'lg:gap-x-space-sm', md: 'lg:gap-x-space-md', lg: 'lg:gap-x-space-lg', xl: 'lg:gap-x-space-xl', '2xl': 'lg:gap-x-space-2xl' },\n\txl: { none: 'xl:gap-x-0', normal: 'xl:gap-x-normal', dense: 'xl:gap-x-dense', '2xs': 'xl:gap-x-space-2xs', xs: 'xl:gap-x-space-xs', sm: 'xl:gap-x-space-sm', md: 'xl:gap-x-space-md', lg: 'xl:gap-x-space-lg', xl: 'xl:gap-x-space-xl', '2xl': 'xl:gap-x-space-2xl' },\n\t'2xl': { none: '2xl:gap-x-0', normal: '2xl:gap-x-normal', dense: '2xl:gap-x-dense', '2xs': '2xl:gap-x-space-2xs', xs: '2xl:gap-x-space-xs', sm: '2xl:gap-x-space-sm', md: '2xl:gap-x-space-md', lg: '2xl:gap-x-space-lg', xl: '2xl:gap-x-space-xl', '2xl': '2xl:gap-x-space-2xl' },\n} as const;\n\nconst alignClasses = {\n\tbase: { start: 'items-start', center: 'items-center', end: 'items-end', stretch: 'items-stretch', baseline: 'items-baseline' },\n\tsm: { start: 'sm:items-start', center: 'sm:items-center', end: 'sm:items-end', stretch: 'sm:items-stretch', baseline: 'sm:items-baseline' },\n\tmd: { start: 'md:items-start', center: 'md:items-center', end: 'md:items-end', stretch: 'md:items-stretch', baseline: 'md:items-baseline' },\n\tlg: { start: 'lg:items-start', center: 'lg:items-center', end: 'lg:items-end', stretch: 'lg:items-stretch', baseline: 'lg:items-baseline' },\n\txl: { start: 'xl:items-start', center: 'xl:items-center', end: 'xl:items-end', stretch: 'xl:items-stretch', baseline: 'xl:items-baseline' },\n\t'2xl': { start: '2xl:items-start', center: '2xl:items-center', end: '2xl:items-end', stretch: '2xl:items-stretch', baseline: '2xl:items-baseline' },\n} as const;\n\nconst justifyClasses = {\n\tbase: { start: 'justify-start', center: 'justify-center', end: 'justify-end', between: 'justify-between', around: 'justify-around', evenly: 'justify-evenly' },\n\tsm: { start: 'sm:justify-start', center: 'sm:justify-center', end: 'sm:justify-end', between: 'sm:justify-between', around: 'sm:justify-around', evenly: 'sm:justify-evenly' },\n\tmd: { start: 'md:justify-start', center: 'md:justify-center', end: 'md:justify-end', between: 'md:justify-between', around: 'md:justify-around', evenly: 'md:justify-evenly' },\n\tlg: { start: 'lg:justify-start', center: 'lg:justify-center', end: 'lg:justify-end', between: 'lg:justify-between', around: 'lg:justify-around', evenly: 'lg:justify-evenly' },\n\txl: { start: 'xl:justify-start', center: 'xl:justify-center', end: 'xl:justify-end', between: 'xl:justify-between', around: 'xl:justify-around', evenly: 'xl:justify-evenly' },\n\t'2xl': { start: '2xl:justify-start', center: '2xl:justify-center', end: '2xl:justify-end', between: '2xl:justify-between', around: '2xl:justify-around', evenly: '2xl:justify-evenly' },\n} as const;\n\nconst directionClasses = {\n\tbase: { vertical: 'flex-col', horizontal: 'flex-row' },\n\tsm: { vertical: 'sm:flex-col', horizontal: 'sm:flex-row' },\n\tmd: { vertical: 'md:flex-col', horizontal: 'md:flex-row' },\n\tlg: { vertical: 'lg:flex-col', horizontal: 'lg:flex-row' },\n\txl: { vertical: 'xl:flex-col', horizontal: 'xl:flex-row' },\n\t'2xl': { vertical: '2xl:flex-col', horizontal: '2xl:flex-row' },\n} as const;\n\nconst wrapClasses = {\n\tbase: { true: 'flex-wrap', false: 'flex-nowrap' },\n\tsm: { true: 'sm:flex-wrap', false: 'sm:flex-nowrap' },\n\tmd: { true: 'md:flex-wrap', false: 'md:flex-nowrap' },\n\tlg: { true: 'lg:flex-wrap', false: 'lg:flex-nowrap' },\n\txl: { true: 'xl:flex-wrap', false: 'xl:flex-nowrap' },\n\t'2xl': { true: '2xl:flex-wrap', false: '2xl:flex-nowrap' },\n} as const;\n\nconst columnClasses = {\n\tbase: { 1: 'grid-cols-1', 2: 'grid-cols-2', 3: 'grid-cols-3', 4: 'grid-cols-4' },\n\tsm: { 1: 'sm:grid-cols-1', 2: 'sm:grid-cols-2', 3: 'sm:grid-cols-3', 4: 'sm:grid-cols-4' },\n\tmd: { 1: 'md:grid-cols-1', 2: 'md:grid-cols-2', 3: 'md:grid-cols-3', 4: 'md:grid-cols-4' },\n\tlg: { 1: 'lg:grid-cols-1', 2: 'lg:grid-cols-2', 3: 'lg:grid-cols-3', 4: 'lg:grid-cols-4' },\n\txl: { 1: 'xl:grid-cols-1', 2: 'xl:grid-cols-2', 3: 'xl:grid-cols-3', 4: 'xl:grid-cols-4' },\n\t'2xl': { 1: '2xl:grid-cols-1', 2: '2xl:grid-cols-2', 3: '2xl:grid-cols-3', 4: '2xl:grid-cols-4' },\n} as const;\n\nconst spanClasses = {\n\tbase: { 1: 'col-span-1', 2: 'col-span-2', 3: 'col-span-3', 4: 'col-span-4', full: 'col-span-full' },\n\tsm: { 1: 'sm:col-span-1', 2: 'sm:col-span-2', 3: 'sm:col-span-3', 4: 'sm:col-span-4', full: 'sm:col-span-full' },\n\tmd: { 1: 'md:col-span-1', 2: 'md:col-span-2', 3: 'md:col-span-3', 4: 'md:col-span-4', full: 'md:col-span-full' },\n\tlg: { 1: 'lg:col-span-1', 2: 'lg:col-span-2', 3: 'lg:col-span-3', 4: 'lg:col-span-4', full: 'lg:col-span-full' },\n\txl: { 1: 'xl:col-span-1', 2: 'xl:col-span-2', 3: 'xl:col-span-3', 4: 'xl:col-span-4', full: 'xl:col-span-full' },\n\t'2xl': { 1: '2xl:col-span-1', 2: '2xl:col-span-2', 3: '2xl:col-span-3', 4: '2xl:col-span-4', full: '2xl:col-span-full' },\n} as const;\n\nconst adaptiveColumnClasses: Record<AdaptiveGridMinimum, string> = {\n\tsm: 'grid-cols-[repeat(auto-fit,minmax(min(100%,var(--adaptive-grid-min-sm)),1fr))]',\n\tmd: 'grid-cols-[repeat(auto-fit,minmax(min(100%,var(--adaptive-grid-min-md)),1fr))]',\n\tlg: 'grid-cols-[repeat(auto-fit,minmax(min(100%,var(--adaptive-grid-min-lg)),1fr))]',\n};\n\nfunction gapRecipe({\n\tgap,\n\trowGap,\n\tcolumnGap,\n}: {\n\tgap?: ResponsiveValue<StructureGap>;\n\trowGap?: ResponsiveValue<StructureGap>;\n\tcolumnGap?: ResponsiveValue<StructureGap>;\n}): string[] {\n const gaps = resolveResponsiveEntries<StructureGap>(gap, 'xl');\n const rows = resolveOptionalResponsiveEntries(rowGap);\n const columns = resolveOptionalResponsiveEntries(columnGap);\n const result: string[] = [];\n let currentGap: StructureGap | undefined;\n let currentRow: StructureGap | undefined;\n let currentColumn: StructureGap | undefined;\n\n for (const breakpoint of STRUCTURE_BREAKPOINTS) {\n const nextGap = gaps[breakpoint];\n const sharedChanged = nextGap !== undefined && nextGap !== currentGap;\n if (nextGap !== undefined) currentGap = nextGap;\n if (rows[breakpoint] !== undefined) currentRow = rows[breakpoint];\n if (columns[breakpoint] !== undefined) currentColumn = columns[breakpoint];\n if (sharedChanged) result.push(gapClasses[breakpoint][currentGap!]);\n // A later gap shorthand resets both axes; reassert persistent overrides there.\n if (currentRow !== undefined && (sharedChanged || rows[breakpoint] !== undefined)) result.push(rowGapClasses[breakpoint][currentRow]);\n if (currentColumn !== undefined && (sharedChanged || columns[breakpoint] !== undefined)) result.push(columnGapClasses[breakpoint][currentColumn]);\n }\n return result;\n}\n\nexport function stackRecipe({\n\tdirection,\n\tgap,\n\talign,\n\tjustify,\n\twrap,\n}: {\n\tdirection?: ResponsiveValue<'vertical' | 'horizontal'>;\n\tgap?: ResponsiveValue<StructureGap>;\n\talign?: ResponsiveValue<StructureAlign>;\n\tjustify?: ResponsiveValue<StructureJustify>;\n\twrap?: ResponsiveValue<boolean>;\n}): string[] {\n\tconst directions = resolveResponsiveEntries<'vertical' | 'horizontal'>(direction, 'vertical');\n\tconst aligns = resolveOptionalResponsiveEntries<StructureAlign>(align);\n\tconst wraps = resolveOptionalResponsiveEntries<boolean>(wrap);\n\tconst result = [\n\t\t'flex',\n\t\t'min-w-0',\n\t\t...compileResponsiveClasses(resolveResponsiveEntries(gap, 'md'), gapClasses),\n\t\t...compileResponsiveClasses(resolveResponsiveEntries(justify, 'start'), justifyClasses),\n\t];\n\tlet currentDirection: 'vertical' | 'horizontal' = 'vertical';\n\tlet explicitAlign: StructureAlign | undefined;\n\tlet explicitWrap: boolean | undefined;\n\n\tfor (const breakpoint of STRUCTURE_BREAKPOINTS) {\n\t\tconst directionAtBreakpoint = directions[breakpoint];\n\t\tconst alignAtBreakpoint = aligns[breakpoint];\n\t\tconst wrapAtBreakpoint = wraps[breakpoint];\n\t\tconst directionChanged = directionAtBreakpoint !== undefined;\n\n\t\tif (directionAtBreakpoint !== undefined) currentDirection = directionAtBreakpoint;\n\t\tif (alignAtBreakpoint !== undefined) explicitAlign = alignAtBreakpoint;\n\t\tif (wrapAtBreakpoint !== undefined) explicitWrap = wrapAtBreakpoint;\n\n\t\tif (directionChanged) {\n\t\t\tresult.push(directionClasses[breakpoint][currentDirection]);\n\t\t\tresult.push(alignClasses[breakpoint][explicitAlign ?? (currentDirection === 'horizontal' ? 'center' : 'stretch')]);\n\t\t\tresult.push(wrapClasses[breakpoint][String(explicitWrap ?? currentDirection === 'horizontal') as 'true' | 'false']);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (alignAtBreakpoint !== undefined) result.push(alignClasses[breakpoint][alignAtBreakpoint]);\n\t\tif (wrapAtBreakpoint !== undefined) result.push(wrapClasses[breakpoint][String(wrapAtBreakpoint) as 'true' | 'false']);\n\t}\n\n\treturn result;\n}\n\nexport function resolveGridColumns(\n\tcolumns?: ResponsiveValue<1 | 2 | 3 | 4>,\n): GridColumnLadder {\n\tif (columns === undefined) return { base: 1, md: 2 };\n\tif (typeof columns !== 'object' || columns === null) return { base: columns };\n\treturn { base: 1, ...columns };\n}\n\nexport function gridRecipe({\n\tcolumns,\n\tgap,\n\trowGap,\n\tcolumnGap,\n\talign,\n}: {\n\tcolumns?: ResponsiveValue<1 | 2 | 3 | 4>;\n\tgap?: ResponsiveValue<StructureGap>;\n\trowGap?: ResponsiveValue<StructureGap>;\n\tcolumnGap?: ResponsiveValue<StructureGap>;\n\talign?: ResponsiveValue<StructureAlign>;\n}): string[] {\n\treturn [\n\t\t'grid',\n\t\t'min-w-0',\n\t\t...gapRecipe({ gap, rowGap, columnGap }),\n\t\t...compileResponsiveClasses(resolveResponsiveEntries(align, 'stretch'), alignClasses),\n\t\t...compileResponsiveClasses(resolveGridColumns(columns), columnClasses),\n\t];\n}\n\nexport function adaptiveGridRecipe({\n\tminColumnWidth = 'md',\n\tgap,\n\trowGap,\n\tcolumnGap,\n\talign,\n}: {\n\tminColumnWidth?: AdaptiveGridMinimum;\n\tgap?: ResponsiveValue<StructureGap>;\n\trowGap?: ResponsiveValue<StructureGap>;\n\tcolumnGap?: ResponsiveValue<StructureGap>;\n\talign?: ResponsiveValue<StructureAlign>;\n}): string[] {\n\treturn [\n\t\t'grid',\n\t\t'min-w-0',\n\t\t...gapRecipe({ gap, rowGap, columnGap }),\n\t\t...compileResponsiveClasses(resolveResponsiveEntries(align, 'stretch'), alignClasses),\n\t\tadaptiveColumnClasses[minColumnWidth],\n\t];\n}\n\nexport function spanRecipe({\n\tspan,\n\tcolumns,\n}: {\n\tspan?: ResponsiveValue<1 | 2 | 3 | 4 | 'full'>;\n\tcolumns?: GridColumnLadder;\n}): string[] {\n\tif (span === undefined) return [];\n\tconst requested = typeof span === 'object' && span !== null ? span : { base: span };\n\tconst result: string[] = [];\n\tlet currentSpan: 1 | 2 | 3 | 4 | 'full' | undefined;\n\tlet currentColumns: 1 | 2 | 3 | 4 | undefined;\n\tlet emitted: 1 | 2 | 3 | 4 | 'full' | undefined;\n\n\tfor (const breakpoint of STRUCTURE_BREAKPOINTS) {\n\t\tcurrentSpan = requested[breakpoint] ?? currentSpan;\n\t\tcurrentColumns = columns?.[breakpoint] ?? currentColumns;\n\t\tif (currentSpan === undefined) continue;\n\t\tconst resolved = currentSpan === 'full' || currentColumns === undefined\n\t\t\t? currentSpan\n\t\t\t: Math.min(currentSpan, currentColumns) as 1 | 2 | 3 | 4;\n\t\tif (resolved === emitted) continue;\n\t\temitted = resolved;\n\t\tresult.push(spanClasses[breakpoint][resolved]);\n\t}\n\n\treturn result;\n}\n"],"mappings":"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"}
|