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":"choice-inputs-CavA-SGV.js","names":["isScalar","baseui.SelectContent","baseui.SelectGroup","baseui.SelectItem","baseui.SelectLabel","baseui.SelectSeparator","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","Switch","SwitchPrimitive","Switch","SwitchPrimitive","React","Switch","isSimpleText","Switch","Checkbox","isSimpleText","GRID_COLS","isSimpleText","RadioGroupPrimitive","RadioPrimitive","React","RadioGroupPrimitive","RadioPrimitive","React","resolveComponentScale","useTypographyConfig","useDensityConfig","cn","textSizes","Text","Label","Stack","collectionRowClasses","popoverRecipes","collectionRecipes","CollectionLabel","CollectionContent","formFieldTriggerClasses","formControlIconClasses","resolveFormControlSize","SelectLabel","SelectValue","SelectItem","SelectContent","SelectSeparator","SelectGroup","SelectTrigger","Select$1","React$1","SELECT_POPUP_BEM","selectPopupItemSizeClasses","isScalar$1","value","SelectPopupContent","props","className","SelectPopupGroup","SelectPopupItem","density","size","defaultTextSize","children","SelectPopupLabel","SelectPopupSeparator","defaultSelectStrings","CLEAR_VALUE","OPTION_VALUE_PREFIX","toInternalOptionValue","toInternalSelectedValue","toExternalValue","isScalar","typographyNode","DefaultOptionContent","option","Select","memo","forwardRef","isControlled","stringsProp","sizeProp","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaInvalid","triggerProps","strings","useStrings","defaultScale","resolvedPlaceholder","placeholder","internalOptions","useMemo","mapped","options","allowClear","internalValue","optionsByInternalValue","entry","normalizedValue","normalizedDefaultValue","defaultValue","handleValueChange","useCallback","externalValue","nextValue","onValueChange","serializeValue","invalid","selectedOption","currentValue","renderValue","contentClassName","rendered","renderOption","Checkbox$2","Checkbox","CheckIcon","Checkbox$1","Switch$2","Switch","Switch$1","rest","resolvedAriaInvalid","resolvedInvalid","checked","SwitchCard","Icon","internal","setInternal","useState","generatedId","useId","id","name","hasDescription","description","describedById","handleToggle","disabled","newChecked","handleCardClick","label","hint","isSimpleText$3","ToggleField","inputId","labelId","descriptionId","set","next","onRowClick","Control","kind","v","TextBlock","controlPosition","choiceCardSizeTokens","choicePillSizeTokens","choiceListSizeTokens","choiceCardMarkerClasses","choiceCardMarkerClearance","isSimpleText$2","GRID_COLS$1","CardCheckboxGroup","selected","tokens","toggle","o","val","columns","optionLabel","isSelected","isDisabled","shouldIncludeHidden","nameAttr","CircleCheck","isSimpleText$1","GRID_COLS","CardRadioGroupImpl","gridClassName","RadioGroup","Radio","CardRadioGroup","isSimpleText","ListRadioGroup","rowPadding","Circle","PillRadioGroup","handleClick","optionValue","fullWidth","index"],"sources":["../src/components/base/choice-inputs/select-popup.tsx","../src/components/base/choice-inputs/select.tsx","../src/components/ui/checkbox.tsx","../src/components/base/choice-inputs/checkbox.tsx","../src/components/ui/switch.tsx","../src/components/base/choice-inputs/switch.tsx","../src/components/base/choice-inputs/switch-card.tsx","../src/components/base/choice-inputs/toggle-field.tsx","../src/components/base/choice-inputs/choice-types.ts","../src/components/base/choice-inputs/card-checkbox-group.tsx","../src/components/base/choice-inputs/card-radio-group.tsx","../src/components/base/choice-inputs/list-radio-group.tsx","../src/components/base/choice-inputs/pill-radio-group.tsx"],"sourcesContent":["import { CollectionLabel } from '../popover/collection-content';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\n\nimport * as baseui from '../../ui/select';\nimport { Text } from '../../typography';\nimport { textSizes } from '../../typography/text.styles';\nimport { useTypographyConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { collectionRecipes, collectionRowClasses, popoverRecipes, type CollectionDensity } from '../popover/popover.recipes';\n\nconst SELECT_POPUP_BEM = {\n\tcontent: 'select-popup--component',\n\tgroup: 'select-popup--group',\n\titem: 'select-popup--item',\n\tlabel: 'select-popup--label',\n\tseparator: 'select-popup--separator',\n} as const;\n\nconst selectPopupItemSizeClasses: Record<FormControlSize, string> = {\n\tsm: \"[&_svg:not([class*='size-'])]:size-icon-sm\",\n\tmd: \"[&_svg:not([class*='size-'])]:size-icon\",\n\tlg: \"[&_svg:not([class*='size-'])]:size-icon-lg\",\n};\n\nfunction isScalar(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/**\n * Private presentation layer for every Select-based form popup.\n *\n * It deliberately leaves Root/Trigger/Value state and form semantics with the\n * owning control, while centralizing the collection popup's compact surface inset, row\n * rhythm, option indicator clearance, icon sizing, and group anatomy.\n */\nexport function SelectPopupContent({\n\tclassName,\n\talign = 'start',\n\talignItemWithTrigger = false,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectContent>) {\n\treturn (\n\t\t<baseui.SelectContent\n\t\t\talign={align}\n\t\t\talignItemWithTrigger={alignItemWithTrigger}\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.content,\n\t\t\t\tpopoverRecipes.surface,\n\t\t\t\tpopoverRecipes.menu,\n\t\t\t\t'w-max min-w-(--anchor-width) max-w-(--available-width)',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function SelectPopupGroup({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectGroup>) {\n\treturn (\n\t\t<baseui.SelectGroup\n\t\t\tclassName={cn(SELECT_POPUP_BEM.group, 'p-0', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport interface SelectPopupItemProps\n\textends ComponentPropsWithoutRef<typeof baseui.SelectItem> {\n\t/** Match option typography, gap, icon, and indicator clearance to its trigger. */\n\tsize?: FormControlSize;\n\t/** Vertical option rhythm, independent from trigger/icon size. */\n\tdensity?: CollectionDensity;\n}\n\nexport function SelectPopupItem({\n\tchildren,\n\tclassName,\n\tsize = 'md',\n\tdensity = 'default',\n\t...props\n}: SelectPopupItemProps) {\n\tconst { defaultTextSize } = useTypographyConfig();\n\treturn (\n\t\t<baseui.SelectItem\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.item,\n\t\t\t\tcollectionRowClasses(density),\n\t\t\t\tcollectionRecipes.highlighted,\n\t\t\t\tcollectionRecipes.disabled,\n\t\t\t\tselectPopupItemSizeClasses[size],\n\t\t\t\ttextSizes[defaultTextSize ?? 'sm'],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalar(children) ? <CollectionLabel>{children}</CollectionLabel> : children}\n\t\t</baseui.SelectItem>\n\t);\n}\n\nexport interface SelectPopupLabelProps\n\textends ComponentPropsWithoutRef<typeof baseui.SelectLabel> {\n\t/** Match the group label to the owning form control's text scale. */\n\tsize?: FormControlSize;\n}\n\nexport function SelectPopupLabel({\n\tchildren,\n\tclassName,\n\tsize = 'md',\n\t...props\n}: SelectPopupLabelProps) {\n\treturn (\n\t\t<baseui.SelectLabel\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.label,\n\t\t\t\t'px-row-x py-row-y',\n\t\t\t\tsize === 'sm' ? 'text-pxs' : size === 'lg' ? 'text-base' : 'text-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalar(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</baseui.SelectLabel>\n\t);\n}\n\nexport function SelectPopupSeparator({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<typeof baseui.SelectSeparator>) {\n\treturn (\n\t\t<baseui.SelectSeparator\n\t\t\tclassName={cn(\n\t\t\t\tSELECT_POPUP_BEM.separator,\n\t\t\t\tpopoverRecipes.separator,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { CollectionContent } from '../popover/collection-content';\nimport {\n\tforwardRef,\n\tmemo,\n\tuseCallback,\n\tuseMemo,\n\ttype ComponentPropsWithoutRef,\n\ttype FocusEventHandler,\n\ttype ReactNode,\n\ttype Ref,\n} from 'react';\n\nimport * as baseui from '../../ui/select';\nimport { Text } from '../../typography';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport type { CollectionDensity } from '../popover/popover.recipes';\n\nimport {\n\tformControlIconClasses,\n\tformControlInlineGapClasses,\n\tformFieldTriggerClasses,\n\tresolveFormControlSize,\n} from '../forms/form-sizing';\nimport {\n\tSelectPopupContent,\n\tSelectPopupGroup,\n\tSelectPopupItem,\n} from './select-popup';\n\nexport interface SelectStrings {\n\tplaceholder: string;\n}\n\nexport const defaultSelectStrings: SelectStrings = {\n\tplaceholder: 'Select an option',\n};\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdescription?: string;\n\ticon?: ReactNode;\n\tdisabled?: boolean;\n}\n\ntype BaseSelectTriggerProps = ComponentPropsWithoutRef<typeof baseui.SelectTrigger>;\n\ntype SelectTriggerProps = Omit<\n\tBaseSelectTriggerProps,\n\t| 'aria-describedby'\n\t| 'aria-invalid'\n\t| 'aria-label'\n\t| 'aria-labelledby'\n\t| 'children'\n\t| 'className'\n\t| 'defaultValue'\n\t| 'disabled'\n\t| 'form'\n\t| 'id'\n\t| 'name'\n\t| 'onBlur'\n\t| 'onChange'\n\t| 'onFocus'\n\t| 'required'\n\t| 'size'\n\t| 'value'\n>;\n\nexport interface SelectProps extends SelectTriggerProps {\n\t/** Popup option rhythm, independent from the trigger size. Defaults to default. */\n\tdensity?: CollectionDensity;\n\t/** Available options. An empty-string option clears the selection. */\n\toptions: SelectOption[];\n\n\t/** Placeholder text — overrides `strings.placeholder` when provided. */\n\tplaceholder?: string;\n\n\t/** String overrides (e.g. placeholder). */\n\tstrings?: StringsProp<SelectStrings>;\n\n\t/** Add a placeholder option that clears the current selection. */\n\tallowClear?: boolean;\n\n\t/** Error state for styling (passed from FormField). */\n\tinvalid?: boolean;\n\n\t/** Visual size. */\n\tsize?: FormControlSize;\n\n\t/** Additional class names for the trigger. */\n\tclassName?: string;\n\n\t/** Additional class names for the popup surface. */\n\tcontentClassName?: string;\n\n\t/** Canonical value callback. Returns `undefined` when the selection is cleared. */\n\tonValueChange?: (value: string | undefined) => void;\n\n\t/** Current value. Passing `value={undefined}` explicitly keeps the control controlled and clear. */\n\tvalue?: string | null;\n\n\t/** Initial value for an uncontrolled select. */\n\tdefaultValue?: string | null;\n\n\t/** Disabled state. */\n\tdisabled?: boolean;\n\n\t/** Read-only state. */\n\treadOnly?: boolean;\n\n\t/** Field name used by the hidden native input. */\n\tname?: string;\n\n\t/** The owning form id when the select is rendered outside that form. */\n\tform?: string;\n\n\t/** Native autocomplete hint forwarded to the hidden input. */\n\tautoComplete?: string;\n\n\t/** Ref to the hidden native input used for form submission. */\n\tinputRef?: Ref<HTMLInputElement>;\n\n\t/** Root id; Base UI applies it to the trigger/field contract. */\n\tid?: string;\n\n\t/** Required state. */\n\trequired?: boolean;\n\n\t/** Accessible label for externally-labelled or compact trigger contexts. */\n\t'aria-label'?: string;\n\n\t/** Ids of elements that label the trigger. */\n\t'aria-labelledby'?: string;\n\n\t/** Ids of elements that describe the trigger. */\n\t'aria-describedby'?: string;\n\n\t/** Native invalid state forwarded to the trigger. `invalid` takes precedence. */\n\t'aria-invalid'?: BaseSelectTriggerProps['aria-invalid'];\n\n\t/** Native focus callback forwarded to the trigger. */\n\tonFocus?: FocusEventHandler<HTMLButtonElement>;\n\n\t/** Native blur callback forwarded to the trigger. */\n\tonBlur?: FocusEventHandler<HTMLButtonElement>;\n\n\t/** Open state (controlled). */\n\topen?: boolean;\n\n\t/** Default open state. */\n\tdefaultOpen?: boolean;\n\n\t/** Open change handler. */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** Called after the popup's opening or closing animation completes. */\n\tonOpenChangeComplete?: (open: boolean) => void;\n\n\t/** Whether the open popup should isolate interaction from the rest of the page. */\n\tmodal?: boolean;\n\n\t/** Whether pointer movement should highlight popup options. */\n\thighlightItemOnHover?: boolean;\n\n\t/** Replace the default icon/label/description option presentation. */\n\trenderOption?: (option: SelectOption) => ReactNode;\n\n\t/** Replace the trigger value presentation. Receives `undefined` for the placeholder state. */\n\trenderValue?: (option: SelectOption | undefined) => ReactNode;\n}\n\ninterface InternalSelectOption {\n\tinternalValue: string;\n\toption: SelectOption;\n}\n\n// Base UI reserves the empty string for an empty native form value. Encoding every\n// real option keeps consumer values collision-free, including values that happen to\n// equal this component's clear sentinel.\nconst CLEAR_VALUE = '__admin_ui_select_clear__';\nconst OPTION_VALUE_PREFIX = '__admin_ui_select_option__:';\n\nfunction toInternalOptionValue(value: string): string {\n\treturn value === '' ? CLEAR_VALUE : `${OPTION_VALUE_PREFIX}${value}`;\n}\n\nfunction toInternalSelectedValue(value: string | null | undefined): string | null {\n\tif (value === '' || value === null || value === undefined) return null;\n\treturn `${OPTION_VALUE_PREFIX}${value}`;\n}\n\nfunction toExternalValue(value: string | null): string | undefined {\n\tif (value === null || value === CLEAR_VALUE) return undefined;\n\tif (value.startsWith(OPTION_VALUE_PREFIX)) return value.slice(OPTION_VALUE_PREFIX.length);\n\treturn undefined;\n}\n\nfunction isScalar(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction typographyNode(value: ReactNode, className?: string): ReactNode {\n\tif (!isScalar(value)) return value;\n\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className={cn('text-inherit', className)}>\n\t\t\t{value}\n\t\t</Text>\n\t);\n}\n\nfunction DefaultOptionContent({ option, size }: { option: SelectOption; size: FormControlSize }) {\n return <CollectionContent label={option.label} description={option.description} leading={option.icon} leadingDecorative wrap\n className=\"select--option-content\" leadingClassName={cn('select--option-icon',formControlIconClasses[size])}\n bodyClassName=\"select--option-text text-start\" labelClassName=\"select--option-label block\"\n descriptionClassName=\"select--option-description line-clamp-2\"/>;\n}\n\n/**\n * Canonical finite-option form control. `Select` owns the single Base UI state\n * engine used by both standard and descriptive option presentations.\n */\nexport const Select = memo(\n\tforwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n\t\tconst isControlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\t\tconst {\n\t\t\toptions,\n\t\t\tdensity,\n\t\t\tplaceholder,\n\t\t\tstrings: stringsProp,\n\t\t\tallowClear = false,\n\t\t\tinvalid,\n\t\t\tsize: sizeProp,\n\t\t\tclassName,\n\t\t\tcontentClassName,\n\t\t\tonValueChange,\n\t\t\tdisabled,\n\t\t\treadOnly,\n\t\t\tdefaultOpen,\n\t\t\topen,\n\t\t\tonOpenChange,\n\t\t\tonOpenChangeComplete,\n\t\t\tmodal,\n\t\t\thighlightItemOnHover,\n\t\t\tname,\n\t\t\tform,\n\t\t\tautoComplete,\n\t\t\tinputRef,\n\t\t\tid,\n\t\t\trequired,\n\t\t\t'aria-label': ariaLabel,\n\t\t\t'aria-labelledby': ariaLabelledBy,\n\t\t\t'aria-describedby': ariaDescribedBy,\n\t\t\t'aria-invalid': ariaInvalid,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\trenderOption,\n\t\t\trenderValue,\n\t\t\t...triggerProps\n\t\t} = props;\n\t\tconst strings = useStrings(defaultSelectStrings, stringsProp);\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst resolvedPlaceholder = placeholder ?? strings.placeholder;\n\n\t\tconst internalOptions = useMemo<InternalSelectOption[]>(() => {\n\t\t\tconst mapped = options.map((option) => ({\n\t\t\t\toption,\n\t\t\t\tinternalValue: toInternalOptionValue(option.value),\n\t\t\t}));\n\n\t\t\tif (allowClear && !mapped.some(({ internalValue }) => internalValue === CLEAR_VALUE)) {\n\t\t\t\tmapped.unshift({\n\t\t\t\t\tinternalValue: CLEAR_VALUE,\n\t\t\t\t\toption: { value: '', label: resolvedPlaceholder },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn mapped;\n\t\t}, [allowClear, options, resolvedPlaceholder]);\n\n\t\tconst optionsByInternalValue = useMemo(\n\t\t\t() => new Map(internalOptions.map((entry) => [entry.internalValue, entry.option])),\n\t\t\t[internalOptions],\n\t\t);\n\t\tconst normalizedValue = toInternalSelectedValue(value);\n\t\tconst normalizedDefaultValue = toInternalSelectedValue(defaultValue);\n\n\t\tconst handleValueChange = useCallback(\n\t\t\t(nextValue: string | null) => {\n\t\t\t\tconst externalValue = toExternalValue(nextValue);\n\t\t\t\tonValueChange?.(externalValue);\n\t\t\t},\n\t\t\t[onValueChange],\n\t\t);\n\n\t\tconst serializeValue = useCallback((internalValue: string) => {\n\t\t\treturn toExternalValue(internalValue) ?? '';\n\t\t}, []);\n\n\t\tconst controlledValueProps = isControlled ? { value: normalizedValue } : {};\n\n\t\treturn (\n\t\t\t<baseui.Select\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tonOpenChangeComplete={onOpenChangeComplete}\n\t\t\t\tmodal={modal}\n\t\t\t\thighlightItemOnHover={highlightItemOnHover}\n\t\t\t\tname={name}\n\t\t\t\tform={form}\n\t\t\t\tautoComplete={autoComplete}\n\t\t\t\tinputRef={inputRef}\n\t\t\t\tid={id}\n\t\t\t\trequired={required}\n\t\t\t\tdefaultValue={normalizedDefaultValue}\n\t\t\t\titemToStringValue={serializeValue}\n\t\t\t\t{...controlledValueProps}\n\t\t\t>\n\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'select--component select--trigger',\n\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t'data-[placeholder]:text-muted-foreground',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...triggerProps}\n\t\t\t\t>\n\t\t\t\t\t<baseui.SelectValue className=\"select--value min-w-0\">\n\t\t\t\t\t\t{(currentValue: string | null) => {\n\t\t\t\t\t\t\tconst selectedOption = currentValue && currentValue !== CLEAR_VALUE\n\t\t\t\t\t\t\t\t? optionsByInternalValue.get(currentValue)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tconst rendered = renderValue\n\t\t\t\t\t\t\t\t? renderValue(selectedOption)\n\t\t\t\t\t\t\t\t: selectedOption?.label ?? resolvedPlaceholder;\n\n\t\t\t\t\t\t\treturn typographyNode(rendered, 'min-w-0 truncate');\n\t\t\t\t\t\t}}\n\t\t\t\t\t</baseui.SelectValue>\n\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t<SelectPopupContent className={cn('select--content', contentClassName)}>\n\t\t\t\t\t<SelectPopupGroup className=\"select--group\">\n\t\t\t\t\t\t{internalOptions.map(({ internalValue, option }) => {\n\t\t\t\t\t\t\tconst rendered = renderOption?.(option);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<SelectPopupItem\n\t\t\t\t\t\t\t\t\tkey={internalValue}\n\t\t\t\t\t\t\t\t\tvalue={internalValue}\n\t\t\t\t\t\t\t\t\tlabel={option.label}\n\t\t\t\t\t\t\t\t\taria-label={option.label}\n\t\t\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\t\t\t\tclassName=\"select--item\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{renderOption\n\t\t\t\t\t\t\t\t\t\t? typographyNode(rendered, 'select--option-custom')\n\t\t\t\t\t\t\t\t\t\t: <DefaultOptionContent option={option} size={size} />}\n\t\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t</SelectPopupContent>\n\t\t\t</baseui.Select>\n\t\t);\n\t}),\n);\n\nSelect.displayName = 'Select';\n","\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface CheckboxProps extends Omit<CheckboxPrimitive.Root.Props, 'onChange'> {\n\tonCheckedChange?: (checked: boolean | 'indeterminate') => void\n}\n\nfunction Checkbox({\n\tclassName,\n\tonCheckedChange,\n\t...props\n}: CheckboxProps) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t\"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-[color,box-shadow] outline-none\",\n\t\t\t\t\"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\t\t\t\t\"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n\t\t\t\t\"data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground\",\n\t\t\t\t\"data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground\",\n\t\t\t\t\"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"flex items-center justify-center text-current\"\n\t\t\t>\n\t\t\t\t<CheckIcon className=\"size-3.5\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n\nexport { Checkbox }\n","import { forwardRef } from 'react';\n\nimport { Checkbox as CheckboxPrimitive, type CheckboxProps } from '../../ui/checkbox';\nimport { cn } from '../../../lib/utils';\n\n/**\n * Checkbox — base wrapper around the shadcn/Base UI checkbox primitive.\n *\n * Base UI renders the root as an inline span; the wrapper makes it an\n * inline-flex control so token size utilities render as a square box instead\n * of collapsing to the two border lines.\n *\n * The root ref accepts the actual HTMLElement, including custom button renders.\n * The muted foreground border keeps the unchecked boundary visible in both themes.\n *\n * The wrapper retains its compact corner recipe while deriving it from the\n * shared theme radius, so scoped consumer radius overrides still apply.\n */\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, ...props }, ref) {\n\treturn (\n\t\t<CheckboxPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'checkbox--component inline-flex items-center justify-center rounded-radius-xs border-muted-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n","import { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive shrink-0 rounded-full border border-transparent focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-5 data-[size=default]:w-9 data-[size=sm]:h-4 data-[size=sm]:w-7 peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-background rounded-full shadow-sm group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[16px] group-data-[size=sm]/switch:data-checked:translate-x-[12px] group-data-[size=default]/switch:data-unchecked:translate-x-0.5 group-data-[size=sm]/switch:data-unchecked:translate-x-0.5 pointer-events-none block ring-0 transition-transform\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","/**\n * Switch — canonical boolean switch wrapper around the internal shadcn primitive.\n *\n * `onValueChange` is the package-wide value callback.\n */\nimport { forwardRef, type ComponentProps } from 'react';\n\nimport { Switch as SwitchPrimitive } from '../../ui/switch';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\n\ntype BaseSwitchProps = ComponentProps<typeof SwitchPrimitive>;\ntype SwitchElement = React.ElementRef<typeof SwitchPrimitive>;\n\nexport interface SwitchProps extends Omit<BaseSwitchProps, 'onCheckedChange' | 'size'> {\n\t/** Component scale. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: ComponentScale;\n\t/** Controlled checked state. */\n\tchecked?: boolean;\n\t/** Initial checked state for uncontrolled usage. */\n\tdefaultChecked?: boolean;\n\t/** Disable interaction and native form participation changes. */\n\tdisabled?: boolean;\n\t/** Prevent changes while retaining the current submitted value. */\n\treadOnly?: boolean;\n\t/** Require the switch to be checked for native form validation. */\n\trequired?: boolean;\n\t/** Hidden input name used during native form submission. */\n\tname?: string;\n\t/** Hidden input value submitted while checked. */\n\tvalue?: string;\n\t/** Optional value submitted while unchecked. */\n\tuncheckedValue?: string;\n\t/** Associate the hidden input with a form by id. */\n\tform?: string;\n\t/** Canonical boolean value callback. */\n\tonValueChange?: (checked: boolean) => void;\n\n\t/** Error state for styling (passed from FormField). */\n\tinvalid?: boolean;\n}\n\n/** Canonical boolean control with native form state and value-first callbacks. */\nexport const Switch = forwardRef<SwitchElement, SwitchProps>(function Switch(\n\t{\n\t\tonValueChange,\n\t\tsize: sizeProp,\n\t\tinvalid,\n\t\tclassName,\n\t\tid,\n\t\tname,\n\t\t'aria-invalid': ariaInvalid,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst resolvedAriaInvalid = invalid ? true : ariaInvalid;\n\tconst resolvedInvalid = resolvedAriaInvalid !== undefined && resolvedAriaInvalid !== false && resolvedAriaInvalid !== 'false';\n\n\treturn (\n\t\t<SwitchPrimitive\n\t\t\tref={ref}\n\t\t\t{...rest}\n\t\t\tid={id}\n\t\t\tname={name}\n\t\t\tonCheckedChange={(checked) => onValueChange?.(checked)}\n\t\t\tsize={size === 'sm' ? 'sm' : 'default'}\n\t\t\taria-invalid={resolvedAriaInvalid}\n\t\t\tclassName={cn(\n\t\t\t\t'switch--component',\n\t\t\t\tsize === 'lg' && 'h-6! w-11! [&_[data-slot=switch-thumb]]:size-5! [&[data-checked]_[data-slot=switch-thumb]]:translate-x-[20px]!',\n\t\t\t\tresolvedInvalid && 'data-unchecked:border-destructive',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nSwitch.displayName = 'Switch';\n","/**\n * SwitchCard — bordered settings card with an icon, title, optional\n * description, optional hint, and a trailing switch. The whole card is\n * clickable and toggles the switch; clicking inside the actual switch only\n * toggles once. Active state lifts the border and tints the surface.\n *\n * Use for top-of-list \"feature\" toggles where the switch needs more visual\n * weight than a `ToggleField`. For dense rows, prefer `ToggleField`.\n */\nimport { type LucideIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useCallback, useId, useMemo, useState } from 'react';\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { Switch } from './switch';\n\nexport interface SwitchCardProps {\n\t/** Additional supporting/error descriptions associated with the editable control. */\n\t'aria-describedby'?: string;\n\t/** Card title, also the switch's accessible name. */\n\tlabel: string;\n\t/** Supporting sentence under the label. */\n\tdescription?: string;\n\t/** Short guidance below the description. */\n\thint?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Form field name, forwarded for native submits. */\n\tname?: string;\n\t/** Whether the switch is on. Controlled. */\n\tvalue?: boolean;\n\t/** Initial switch state for uncontrolled use. */\n\tdefaultValue?: boolean;\n\tonValueChange?: (checked: boolean) => void;\n\t/** Disables the switch and mutes the card. */\n\tdisabled?: boolean;\n\t/** Applies the invalid styling. */\n\tinvalid?: boolean;\n\tclassName?: string;\n}\n\nexport const SwitchCard = React.forwardRef<HTMLDivElement, SwitchCardProps>(function SwitchCard({\n\t'aria-describedby': ariaDescribedBy,\n\tlabel,\n\tdescription,\n\thint,\n\ticon: Icon,\n\tname,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tdisabled = false,\n\tinvalid,\n\tclassName,\n}: SwitchCardProps, ref) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst generatedId = useId();\n\tconst id = useMemo(() => name ?? generatedId, [name, generatedId]);\n\n\tconst hasDescription = typeof description === 'string' && description.trim() !== '';\n\tconst describedById = hasDescription ? `${id}-description` : undefined;\n\n\tconst handleToggle = useCallback(\n\t\t(newChecked: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(newChecked);\n\t\t\tonValueChange?.(newChecked);\n\t\t},\n\t\t[disabled, isControlled, onValueChange],\n\t);\n\n\tconst handleCardClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif ((e.target as HTMLElement).closest('[role=\"switch\"]')) return;\n\t\t\thandleToggle(!checked);\n\t\t},\n\t\t[checked, handleToggle],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tonClick={handleCardClick}\n\t\t\tclassName={cn('switch-card--component', \n\t\t\t\t'group relative flex items-start gap-space-lg rounded-radius border bg-card p-surface transition-[background,border-color,box-shadow] duration-150',\n\t\t\t\t'border-border',\n\t\t\t\tchecked && 'border-primary bg-primary/[0.04]',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\t!disabled && 'cursor-pointer hover:border-foreground/20 hover:bg-muted/30',\n\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!name && (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={checked ? '1' : '0'}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!Icon && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'mt-0.5 inline-flex size-9 shrink-0 items-center justify-center rounded-radius-md transition-colors',\n\t\t\t\t\t\tchecked\n\t\t\t\t\t\t\t? 'bg-primary/10 text-primary-accent'\n\t\t\t\t\t\t\t: 'bg-muted/50 text-muted-foreground group-hover:bg-muted group-hover:text-foreground',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Icon className=\"size-icon\" />\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t\t<Stack gap=\"2xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t<Label\n\t\t\t\t\thtmlFor={id}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'block font-semibold tracking-tight',\n\t\t\t\t\t\tdisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<Text id={describedById} type=\"secondary\" className=\"leading-snug\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!hint && (\n\t\t\t\t\t<Text size=\"xs\" type=\"discrete\" className=\"leading-snug\">\n\t\t\t\t\t\t{hint}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t<div className=\"mt-1 flex shrink-0 items-center\">\n\t\t\t\t<Switch\n\t\t\t\t\tid={id}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tonValueChange={handleToggle}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\taria-label={label}\n\t\t\t\t\taria-describedby={[ariaDescribedBy, describedById].filter(Boolean).join(' ') || undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nSwitchCard.displayName = 'SwitchCard';\n","/**\n * ToggleField — inline label-and-control row for switches and checkboxes.\n *\n * Pattern: a left-aligned descriptive label/description block with the\n * control sitting on the trailing edge. Use for settings rows (e.g. \"Email\n * notifications\" + switch) where a full SwitchCard is too heavy and a bare\n * `Switch` + `<label>` is too brittle. The whole row is clickable and\n * keyboard-accessible.\n *\n * Two control kinds: `'switch'` (default) and `'checkbox'`. Both honour\n * controlled `value` / `defaultValue` / `onValueChange`. Strings are passed via\n * standard React props rather than a `strings` object — there are no\n * defaults to override.\n */\nimport type { ReactNode } from 'react';\nimport { forwardRef, useCallback, useId, useState } from 'react';\n\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { Checkbox } from './checkbox';\nimport { Switch } from './switch';\n\nexport type ToggleFieldKind = 'switch' | 'checkbox';\n\nexport interface ToggleFieldProps {\n\t/** Additional supporting/error descriptions associated with the editable control. */\n\t'aria-describedby'?: string;\n\t/** Control label. */\n\tlabel: ReactNode;\n\t/** Supporting sentence under the label. */\n\tdescription?: ReactNode;\n\t/** Which control renders — a switch or a checkbox. */\n\tkind?: ToggleFieldKind;\n\t/** Whether the control is on. Controlled. */\n\tvalue?: boolean;\n\t/** Initial state for uncontrolled use. */\n\tdefaultValue?: boolean;\n\tonValueChange?: (checked: boolean) => void;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n\t/** Applies the invalid styling. */\n\tinvalid?: boolean;\n\t/** Form field name, forwarded for native submits. */\n\tname?: string;\n\tclassName?: string;\n\t/** Place the control on the leading edge instead of trailing (default). */\n\tcontrolPosition?: 'leading' | 'trailing';\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const ToggleField = forwardRef<HTMLDivElement, ToggleFieldProps>(function ToggleField({\n\t'aria-describedby': ariaDescribedBy,\n\tlabel,\n\tdescription,\n\tkind = 'switch',\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tdisabled = false,\n\tinvalid = false,\n\tname,\n\tclassName,\n\tcontrolPosition = 'trailing',\n}: ToggleFieldProps, ref) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst inputId = useId();\n\tconst labelId = `${inputId}-label`;\n\tconst hasDescription = description !== null && description !== undefined && description !== false;\n\tconst descriptionId = hasDescription ? `${inputId}-description` : undefined;\n\n\tconst set = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(next);\n\t\t\tonValueChange?.(next);\n\t\t},\n\t\t[disabled, isControlled, onValueChange],\n\t);\n\n\tconst onRowClick = (e: React.MouseEvent) => {\n\t\t// Avoid double-toggle when clicking the control itself.\n\t\tconst target = e.target as HTMLElement;\n\t\tif (target.closest('[role=\"switch\"], [role=\"checkbox\"], input[type=\"checkbox\"]')) return;\n\t\tset(!checked);\n\t};\n\n\tconst Control =\n\t\tkind === 'switch' ? (\n\t\t\t<Switch\n\t\t\t\t// The row already expands the hit area; a horizontal switch hit\n\t\t\t\t// extension would overflow when this field sits at a surface edge.\n\t\t\t\tclassName=\"after:inset-x-0\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonValueChange={set}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tinvalid={invalid}\n\t\t\t\taria-labelledby={labelId}\n\t\t\t\taria-describedby={[ariaDescribedBy, descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t\t/>\n\t\t) : (\n\t\t\t<Checkbox\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={(v) => set(v === true)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\taria-labelledby={labelId}\n\t\t\t\taria-describedby={[ariaDescribedBy, descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t\t/>\n\t\t);\n\n\tconst TextBlock = (\n\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t<div id={labelId}>\n\t\t\t\t{isSimpleText(label) ? (\n\t\t\t\t\t<Label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Leading is left to `Label` so this sits on the same\n\t\t\t\t\t\t\t// baseline rhythm as the switch, checkbox, and switch-card\n\t\t\t\t\t\t\t// labels; `leading-snug` here made it the only inline\n\t\t\t\t\t\t\t// control label in the package at 19.25px.\n\t\t\t\t\t\t\t'block',\n\t\t\t\t\t\t\tdisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Label>\n\t\t\t\t) : label}\n\t\t\t</div>\n\t\t\t{hasDescription && (\n\t\t\t\t<div id={descriptionId}>\n\t\t\t\t\t{isSimpleText(description) ? (\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"leading-snug\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : description}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tref={ref}\n\t\t\tdirection=\"horizontal\"\n\t\t\talign=\"start\"\n\t\t\twrap={false}\n\t\t\tgap=\"md\"\n\t\t\trole=\"group\"\n\t\t\tonClick={onRowClick}\n\t\t\tclassName={cn('toggle-field--component rounded-radius-md py-row-y',\n\t\t\t\tdisabled && 'pointer-events-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{controlPosition === 'leading' && <div className=\"mt-0.5 flex shrink-0\">{Control}</div>}\n\t\t\t{TextBlock}\n\t\t\t{controlPosition === 'trailing' && <div className=\"mt-0.5 flex shrink-0\">{Control}</div>}\n\t\t</Stack>\n\t);\n});\n\nToggleField.displayName = 'ToggleField';\n","/**\n * Shared types for choice-style form fields (CardRadio, CardCheckbox,\n * ListRadio, PillRadio). Each variant exports its own `Option` type that\n * extends `ChoiceOptionBase`, so consumers see one consistent option shape\n * across the family.\n *\n * Sizes follow the package component scale (`sm | md | lg`). CardRadio and\n * CardCheckbox additionally accept `size` to drive padding, icon size, and type\n * scale through shared form/display variables.\n */\nimport type { ComponentType, ReactNode } from 'react';\nimport type { ComponentScale } from '../../../lib/ui-provider';\n\nexport type ChoiceSize = ComponentScale;\n\nexport interface ChoiceOptionBase<TValue extends string = string> {\n\tvalue: TValue;\n\tlabel: ReactNode;\n\tdescription?: ReactNode;\n\ticon?: ComponentType<{ className?: string }>;\n\tdisabled?: boolean;\n}\n\nexport interface ChoiceGroupBaseProps {\n\t/** Supporting/error descriptions associated with the group. */\n\t'aria-describedby'?: string;\n\t/** Form field name (also used for hidden inputs and aria grouping). */\n\tname?: string;\n\t/** Disable the entire group. */\n\tdisabled?: boolean;\n\t/** Show error styling. */\n\tinvalid?: boolean;\n\t/** Density / control size. Defaults from `useDensityConfig().defaultScale`. */\n\tsize?: ChoiceSize;\n\tclassName?: string;\n}\n\n/**\n * Padding / icon-size token map shared across CardRadio + CardCheckbox so the\n * two variants line up visually when placed side-by-side.\n */\nexport const choiceCardSizeTokens: Record<\n\tChoiceSize,\n\t{ padding: string; iconBox: string; iconSize: string; gap: string }\n> = {\n\tsm: { padding: 'p-surface-xs', iconBox: 'size-avatar-sm', iconSize: 'size-icon-sm', gap: 'gap-space-sm' },\n\tmd: { padding: 'p-surface', iconBox: 'size-avatar', iconSize: 'size-icon', gap: 'gap-space-md' },\n\tlg: { padding: 'p-surface-lg', iconBox: 'size-avatar-lg', iconSize: 'size-icon-lg', gap: 'gap-space-lg' },\n};\n\n/**\n * Pill height / horizontal padding tokens. Shared across PillRadioGroup\n * and any future toggle-bar variant so they stack cleanly.\n */\nexport const choicePillSizeTokens: Record<ChoiceSize, string> = {\n\tsm: 'h-control-sm px-control-sm text-pxs',\n\tmd: 'h-control px-control text-sm',\n\tlg: 'h-control-lg px-control text-sm',\n};\n\n/**\n * Row padding tokens for ListRadio and any future inline list variant.\n */\nexport const choiceListSizeTokens: Record<ChoiceSize, string> = {\n\tsm: 'px-row-x py-row-y-sm',\n\tmd: 'px-row-x py-row-y',\n\tlg: 'px-row-x py-row-y-lg',\n};\n\n/** Shared selected-card marker and content clearance; derives from action/icon geometry. */\nexport const choiceCardMarkerClasses = 'absolute top-space-sm end-space-sm size-action-sm text-primary-foreground fill-primary stroke-primary-foreground';\nexport const choiceCardMarkerClearance = '[&>*:not(svg)]:max-w-[calc(100%_-_var(--spacing-action-sm))]';\n","/**\n * CardCheckboxGroup — multi-select group rendered as a grid of card-shaped\n * options with title, optional description, and optional leading icon.\n * Use for a small set of feature flags / preferences where each option\n * benefits from extra context that a flat checkbox list can't carry.\n *\n * Pairs with `CardRadioGroup` (single-select). Both share spacing tokens\n * from `./choice-types` so they line up when used side-by-side.\n */\nimport { CircleCheck, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useState, useCallback, useMemo, type ReactNode } from 'react';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceCardSizeTokens,\n\tchoiceCardMarkerClasses,\n\tchoiceCardMarkerClearance,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface CardCheckboxOption extends ChoiceOptionBase {\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface CardCheckboxGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: CardCheckboxOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string[];\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string[];\n\tonValueChange?: (values: string[]) => void;\n\t/** How many columns the grid uses. */\n\tcolumns?: 1 | 2 | 3 | 4;\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/*\n * Container widths, not viewport widths — a choice-card group is as likely to\n * sit in a settings rail or a drawer as at page width, and keyed to the screen\n * it laid three cards across a 300px column.\n *\n * 384/576/672 puts every tier clear of the widths this actually renders at: the\n * shipped three-up group is 672px wide, so the three-column step sits 96px\n * below it rather than exactly on it, and 384 keeps the two-column step above\n * every mobile mount (316px).\n */\nconst GRID_COLS: Record<NonNullable<CardCheckboxGroupProps['columns']>, string> = {\n\t1: 'grid grid-cols-1 gap-space-md',\n\t2: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2',\n\t3: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @xl/card-checkbox-group:grid-cols-3',\n\t4: 'grid grid-cols-1 gap-space-md @sm/card-checkbox-group:grid-cols-2 @2xl/card-checkbox-group:grid-cols-4',\n};\n\nexport const CardCheckboxGroup = forwardRef<HTMLDivElement, CardCheckboxGroupProps>(function CardCheckboxGroup({\n\t'aria-describedby': ariaDescribedBy,\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tcolumns = 3,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: CardCheckboxGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<string[]>(defaultValue ?? []);\n\tconst selected = useMemo(\n\t\t() => (isControlled ? value ?? [] : internal),\n\t\t[internal, isControlled, value],\n\t);\n\tconst tokens = choiceCardSizeTokens[size];\n\n\tconst toggle = useCallback(\n\t\t(val: string) => {\n\t\t\tif (disabled) return;\n\t\t\tif (options.find((o) => o.value === val)?.disabled) return;\n\t\t\tconst exists = selected.includes(val);\n\t\t\tconst next = exists ? selected.filter((v) => v !== val) : [...selected, val];\n\t\t\tif (!isControlled) setInternal(next);\n\t\t\tonValueChange?.(next);\n\t\t},\n\t\t[disabled, options, selected, isControlled, onValueChange],\n\t);\n\n\treturn (\n\t\t/*\n\t\t * The root exists to be the query container: an element cannot match its\n\t\t * own container query, so the grid whose columns react sits inside the\n\t\t * element being measured.\n\t\t */\n\t\t<div ref={ref} className={cn('card-checkbox-group--component @container/card-checkbox-group', className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn('card-checkbox-group--grid', GRID_COLS[columns])}\n\t\t\t\trole=\"group\"\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t>\n\t\t\t\t{options.map((option) => {\n\t\t\t\t\tconst Icon = option.icon;\n\t\t\t\t\tconst optionLabel = option.label;\n\t\t\t\t\tconst isSelected = selected.includes(option.value);\n\t\t\t\t\tconst isDisabled = disabled || option.disabled;\n\t\t\t\t\tconst shouldIncludeHidden = Boolean(name) && isSelected;\n\t\t\t\t\tconst nameAttr = name ? `${name}[]` : undefined;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={option.value} className=\"relative\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\t\t\tname={nameAttr}\n\t\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\thidden\n\t\t\t\t\t\t\t\tdisabled={!shouldIncludeHidden}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={isSelected}\n\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\tonClick={() => toggle(option.value)}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tdata-selected={isSelected}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'group relative flex w-full flex-col items-start text-start outline-none cursor-pointer',\n\t\t\t\t\t\t\t\t\t'rounded-radius border bg-card transition-[color,box-shadow,background,border-color] duration-150',\n\t\t\t\t\t\t\t\t\t'border-border hover:border-foreground/20 hover:bg-muted/30',\n\t\t\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\t\t\t'data-[selected=true]:border-primary data-[selected=true]:bg-primary/[0.04]',\n\t\t\t\t\t\t\t\t\ttokens.padding,\n\t\t\t\t\t\t\t\t\ttokens.gap,\n\t\t\t\t\t\t\t\tchoiceCardMarkerClearance,\n\t\t\t\t\t\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CircleCheck\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tchoiceCardMarkerClasses,\n\t\t\t\t\t\t\t\t\t\t!isSelected && 'hidden',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'inline-flex items-center justify-center rounded-radius-md bg-muted/50 text-muted-foreground group-hover:bg-muted',\n\t\t\t\t\t\t\t\t\t\t\t'group-data-[selected=true]:bg-primary/10 group-data-[selected=true]:text-primary-accent',\n\t\t\t\t\t\t\t\t\t\t\ttokens.iconBox,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon className={tokens.iconSize} />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isSimpleText(optionLabel) ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t{optionLabel}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : optionLabel}\n\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nCardCheckboxGroup.displayName = 'CardCheckboxGroup';\n","/**\n * CardRadioGroup — single-select radio group rendered as a grid of card-shaped\n * options with title, optional description, and optional leading icon. Built\n * on `@base-ui/react/radio` for accessibility (keyboard navigation, focus\n * management, native form participation).\n *\n * Pairs with `CardCheckboxGroup` (multi-select). Shares spacing tokens from\n * `./choice-types`.\n */\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { CircleCheck, type LucideIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { memo, useMemo, type ReactNode } from 'react';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceCardSizeTokens,\n\tchoiceCardMarkerClasses,\n\tchoiceCardMarkerClearance,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface CardRadioOption extends ChoiceOptionBase {\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface CardRadioGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: CardRadioOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string;\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\t/** How many columns the grid uses. */\n\tcolumns?: 1 | 2 | 3 | 4;\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/*\n * Container widths, not viewport widths — a choice-card group is as likely to\n * sit in a settings rail or a drawer as at page width, and keyed to the screen\n * it laid three cards across a 300px column.\n *\n * 384/576/672 puts every tier clear of the widths this actually renders at: the\n * shipped three-up group is 672px wide, so the three-column step sits 96px\n * below it rather than exactly on it, and 384 keeps the two-column step above\n * every mobile mount (316px).\n */\nconst GRID_COLS: Record<NonNullable<CardRadioGroupProps['columns']>, string> = {\n\t1: 'grid grid-cols-1 gap-space-md',\n\t2: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2',\n\t3: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2 @xl/card-radio-group:grid-cols-3',\n\t4: 'grid grid-cols-1 gap-space-md @sm/card-radio-group:grid-cols-2 @2xl/card-radio-group:grid-cols-4',\n};\n\nfunction CardRadioGroupImpl({\n\t'aria-describedby': ariaDescribedBy,\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tcolumns = 3,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: CardRadioGroupProps, ref: React.ForwardedRef<HTMLDivElement>) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\tconst tokens = choiceCardSizeTokens[size];\n\tconst gridClassName = useMemo(() => cn('card-radio-group--grid', GRID_COLS[columns]), [columns]);\n\n\treturn (\n\t\t/*\n\t\t * The root exists to be the query container: an element cannot match its\n\t\t * own container query, so the grid whose columns react sits inside the\n\t\t * element being measured.\n\t\t */\n\t\t<div ref={ref} className={cn('card-radio-group--component @container/card-radio-group', className)}>\n\t\t\t<RadioGroupPrimitive\n\t\t\t\tvalue={value}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tonValueChange={(val) => val && onValueChange?.(val)}\n\t\t\t\tname={name}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\tclassName={gridClassName}\n\t\t\t>\n\t\t\t\t{options.map((option) => {\n\t\t\t\t\tconst Icon = option.icon;\n\t\t\t\t\tconst optionLabel = option.label;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<RadioPrimitive.Root\n\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'relative group flex flex-col text-start outline-none cursor-pointer',\n\t\t\t\t\t\t\t\t'rounded-radius border bg-card transition-[color,box-shadow,background,border-color] duration-150',\n\t\t\t\t\t\t\t\t'border-border hover:border-foreground/20 hover:bg-muted/30',\n\t\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\t\t'data-[checked]:border-primary data-[checked]:bg-primary/[0.04]',\n\t\t\t\t\t\t\t\ttokens.padding,\n\t\t\t\t\t\t\t\ttokens.gap,\n\t\t\t\t\t\t\t\tchoiceCardMarkerClearance,\n\t\t\t\t\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadioPrimitive.Indicator\n\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t<CircleCheck className={choiceCardMarkerClasses} />\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'inline-flex items-center justify-center rounded-radius-md bg-muted/50 text-muted-foreground group-hover:bg-muted',\n\t\t\t\t\t\t\t\t\t\t'group-data-[checked]:bg-primary/10 group-data-[checked]:text-primary-accent',\n\t\t\t\t\t\t\t\t\t\ttokens.iconBox,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon className={tokens.iconSize} />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{isSimpleText(optionLabel) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t\t{optionLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : optionLabel}\n\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</RadioPrimitive.Root>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RadioGroupPrimitive>\n\t\t</div>\n\t);\n}\n\nexport const CardRadioGroup = memo(React.forwardRef<HTMLDivElement, CardRadioGroupProps>(CardRadioGroupImpl));\nCardRadioGroup.displayName = 'CardRadioGroup';\n","/**\n * ListRadioGroup — single-select radio group rendered as a vertical list with\n * dividers between rows. Use when options have descriptive secondary text and\n * read better as a stack than a grid (e.g. plan tiers, role definitions).\n *\n * Pairs with `CardRadioGroup` for grid-style choices and `PillRadioGroup` for\n * inline compact toggles.\n */\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Circle } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoiceListSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface ListRadioOption extends ChoiceOptionBase {}\n\nexport interface ListRadioGroupProps extends ChoiceGroupBaseProps {\n\t/** Choices offered. */\n\toptions: ListRadioOption[];\n\t/** Current value. Controlled. */\n\tvalue?: string;\n\t/** Initial value for uncontrolled use. */\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n}\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const ListRadioGroup = forwardRef<HTMLDivElement, ListRadioGroupProps>(function ListRadioGroup({\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: ListRadioGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\tconst rowPadding = choiceListSizeTokens[size];\n\treturn (\n\t\t<RadioGroupPrimitive\n\t\t\tref={ref}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tonValueChange={(val) => val && onValueChange?.(val)}\n\t\t\tname={name}\n\t\t\tdisabled={disabled}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tclassName={cn('list-radio-group--component', \n\t\t\t\t'overflow-hidden rounded-radius-md border border-border [&>[role=radio]~[role=radio]]:border-t [&>[role=radio]~[role=radio]]:border-border',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option) => (\n\t\t\t\t<RadioPrimitive.Root\n\t\t\t\t\tkey={option.value}\n\t\t\t\t\tvalue={option.value}\n\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'group flex w-full items-start gap-space-lg text-start outline-none cursor-pointer',\n\t\t\t\t\t\t'transition-colors hover:bg-muted/40 focus-visible:bg-muted/40',\n\t\t\t\t\t\t'data-[checked]:bg-primary/10',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\trowPadding,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-primary-accent group-data-[checked]:border-primary-accent group-not-data-[checked]:border-muted-foreground/50\">\n\t\t\t\t\t\t<RadioPrimitive.Indicator\n\t\t\t\t\t\t\trender={<Circle className=\"h-2.5 w-2.5 fill-primary-accent text-primary-accent\" />}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t{isSimpleText(option.label) ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\" lineHeight=\"tight\" className=\"block\">\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : option.label}\n\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\tisSimpleText(option.description) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"block mt-0.5\">\n\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : option.description\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</RadioPrimitive.Root>\n\t\t\t))}\n\t\t</RadioGroupPrimitive>\n\t);\n});\n\nListRadioGroup.displayName = 'ListRadioGroup';\n","/**\n * PillRadioGroup — compact, inline single-select rendered as connected pill\n * buttons. Best for 2–4 options where a full `<Select>` is too heavy and\n * cards are too tall (e.g. timeframe toggles, view-mode switchers).\n *\n * Custom-styled buttons rather than the shadcn ToggleGroup primitive: the\n * primitive strips inner rounding when spacing=0, which doesn't match this\n * design system's pill connector style.\n */\nimport * as React from 'react';\n\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tchoicePillSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface PillRadioGroupOption extends ChoiceOptionBase {}\n\nexport interface PillRadioGroupProps\n\textends Omit<ChoiceGroupBaseProps, 'name'> {\n\t/** Form field name, forwarded for native submits. */\n\tname: string;\n\t/** Current value. Controlled. */\n\tvalue: string | null | undefined;\n\t/** Choices offered. */\n\toptions: PillRadioGroupOption[];\n\tonValueChange: (value: string | null) => void;\n\t/** Allow deselecting (click active pill to clear). Default false. */\n\tallowClear?: boolean;\n\t/** Stretch pills to fill the container. */\n\tfullWidth?: boolean;\n}\n\nexport const PillRadioGroup = React.forwardRef<HTMLDivElement, PillRadioGroupProps>(function PillRadioGroup({\n\tname,\n\tvalue,\n\toptions,\n\tonValueChange,\n\tallowClear = false,\n\tsize: sizeProp,\n\tfullWidth = false,\n\tdisabled = false,\n\tinvalid = false,\n\tclassName,\n}: PillRadioGroupProps, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\tconst handleClick = React.useCallback(\n\t\t(optionValue: string) => {\n\t\t\tif (optionValue === value) {\n\t\t\t\tif (allowClear) onValueChange(null);\n\t\t\t} else {\n\t\t\t\tonValueChange(optionValue);\n\t\t\t}\n\t\t},\n\t\t[allowClear, onValueChange, value],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-name={name}\n\t\t\trole=\"radiogroup\"\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tclassName={cn('pill-radio-group--component', \n\t\t\t\t'border-input inline-flex items-center overflow-hidden rounded-radius border',\n\t\t\t\tfullWidth && 'w-full',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option, index) => {\n\t\t\t\tconst isSelected = option.value === value;\n\t\t\t\tconst Icon = option.icon;\n\t\t\t\tconst optionLabel =\n\t\t\t\t\ttypeof option.label === 'string' ? option.label : undefined;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\taria-checked={isSelected}\n\t\t\t\t\t\taria-label={optionLabel || option.value}\n\t\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\t\tonClick={() => handleClick(option.value)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex select-none items-center justify-center font-medium transition-colors',\n\t\t\t\t\t\t\t'focus-visible:ring-ring/50 outline-none focus-visible:z-10 focus-visible:ring-2',\n\t\t\t\t\t\t\t'disabled:pointer-events-none disabled:opacity-50',\n\t\t\t\t\t\t\tchoicePillSizeTokens[size],\n\t\t\t\t\t\t\tfullWidth && 'flex-1',\n\t\t\t\t\t\t\tindex > 0 && 'border-input border-l',\n\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t? 'bg-primary text-primary-foreground'\n\t\t\t\t\t\t\t\t: 'bg-background text-foreground hover:bg-muted',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className={cn(size === 'sm' ? 'size-icon-sm' : 'size-icon', option.label && 'mr-space-sm')} />}\n\t\t\t\t\t\t{typeof option.label === 'string' || typeof option.label === 'number' || typeof option.label === 'bigint' ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : option.label}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\nPillRadioGroup.displayName = 'PillRadioGroup';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"containers-CPNyNo1_.js","names":["_Fragment","cn","stackRecipe","Fragment$1","maxWidthClasses","gutterClasses","containerRecipe","maxWidth","gutter","Container","forwardRef","props","useRender","className","PageViewport","Section","gap","TwoColumnLayout","headerClassName","headerProps","slotProps","mainClassName","mainProps","asideClassName","asideProps","footerClassName","footerProps","adaptTo","header","main","stickyAside","aside","footer"],"sources":["../src/components/layout/containers/container.recipes.ts","../src/components/layout/containers/content-container.tsx","../src/components/layout/containers/page-viewport.tsx","../src/components/layout/containers/section.tsx","../src/components/layout/containers/two-column-layout.tsx"],"sourcesContent":["import type { ContainerGutter, ContainerMaxWidth } from './containers.types';\n\nconst maxWidthClasses: Record<ContainerMaxWidth, string> = {\n\tsm: 'max-w-content-sm',\n\tmd: 'max-w-content-md',\n\tlg: 'max-w-content-lg',\n\txl: 'max-w-content-xl',\n\t'2xl': 'max-w-content-2xl',\n\tfull: 'max-w-none',\n};\n\nconst gutterClasses: Record<ContainerGutter, string> = {\n\tnone: 'px-0',\n\tsm: 'px-surface-xs',\n\tmd: 'px-surface',\n\tlg: 'px-surface-lg',\n};\n\nexport function containerRecipe({\n\tmaxWidth = 'xl',\n\tgutter = 'md',\n}: {\n\tmaxWidth?: ContainerMaxWidth;\n\tgutter?: ContainerGutter;\n}): string[] {\n\treturn ['mx-auto', 'w-full', maxWidthClasses[maxWidth], gutterClasses[gutter]];\n}\n","import { useRender } from '@base-ui/react/use-render';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nimport { containerRecipe } from './container.recipes';\nimport type { ContainerProps } from './containers.types';\n\n/** Container — one centered content-width and inline-gutter owner. */\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(function Container(\n\t{ className, maxWidth, gutter, render, ...props },\n\tref,\n) {\n\treturn useRender({\n\t\tdefaultTagName: 'div',\n\t\tref,\n\t\trender,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tclassName: cn('container--component @container/content', containerRecipe({ maxWidth, gutter }), className),\n\t\t},\n\t\tstate: {},\n\t});\n});\n\nContainer.displayName = 'Container';\n","import { useRender } from '@base-ui/react/use-render';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nimport type { PageViewportProps } from './containers.types';\n\n/** PageViewport — the single page-scroll and page-container-query owner. */\nexport const PageViewport = forwardRef<HTMLDivElement, PageViewportProps>(function PageViewport(\n\t{ className, render, tabIndex = 0, ...props },\n\tref,\n) {\n\treturn useRender({\n\t\tdefaultTagName: 'div',\n\t\tref,\n\t\trender,\n\t\tprops: {\n\t\t\t...props,\n\t\t\ttabIndex,\n\t\t\tclassName: cn(\n\t\t\t\t'page-viewport--component min-h-0 min-w-0 flex-1 overflow-auto overscroll-contain [scrollbar-gutter:stable] @container/page focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/70 focus-visible:ring-inset',\n\t\t\t\tclassName,\n\t\t\t),\n\t\t},\n\t\tstate: {},\n\t});\n});\n\nPageViewport.displayName = 'PageViewport';\n","import { useRender } from '@base-ui/react/use-render';\nimport { forwardRef } from 'react';\n\nimport { stackRecipe } from '../../base/structure/structure.recipes';\nimport { cn } from '../../../lib/utils';\n\nimport type { SectionProps } from './containers.types';\n\n/** Section — a semantic vertical-rhythm owner for page content groups. */\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n\t{ className, gap, render, ...props },\n\tref,\n) {\n\treturn useRender({\n\t\tdefaultTagName: 'section',\n\t\tref,\n\t\trender,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tclassName: cn('section--component', stackRecipe({ gap: gap ?? 'xl' }), className),\n\t\t},\n\t\tstate: {},\n\t});\n});\n\nSection.displayName = 'Section';\n","import { useRender } from '@base-ui/react/use-render';\nimport { forwardRef } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport type { LayoutSlotAttributes } from '../layout.types';\n\nexport interface TwoColumnLayoutSlotProps {\n\theader?: LayoutSlotAttributes<HTMLDivElement>;\n\tmain?: LayoutSlotAttributes<HTMLDivElement>;\n\taside?: LayoutSlotAttributes<HTMLElement>;\n\tfooter?: LayoutSlotAttributes<HTMLDivElement>;\n}\n\nexport interface TwoColumnLayoutProps extends useRender.ComponentProps<'div'> {\n\t/** Optional content spanning both columns before the work regions. */\n\theader?: ReactNode;\n\t/** Primary detail, form, or index content. */\n\tmain: ReactNode;\n\t/** Secondary summary, support, or action rail. */\n\taside: ReactNode;\n\t/** Optional content spanning both columns after the work regions. */\n\tfooter?: ReactNode;\n\t/** Keep the aside visible while the nearest page viewport scrolls. */\n\tstickyAside?: boolean;\n\t/** Preserve viewport breakpoints by default, or adapt inside Container/PageViewport. */\n\tadaptTo?: 'viewport' | 'container';\n\t/** Native attributes for each stable region. */\n\tslotProps?: TwoColumnLayoutSlotProps;\n}\n\n/** TwoColumnLayout — one truthful, stable-order main/aside grid. */\nexport const TwoColumnLayout = forwardRef<HTMLDivElement, TwoColumnLayoutProps>(\n\tfunction TwoColumnLayout(\n\t\t{\n\t\t\theader,\n\t\t\tmain,\n\t\t\taside,\n\t\t\tfooter,\n\t\t\tstickyAside = false,\n\t\t\tadaptTo = 'viewport',\n\t\t\tslotProps,\n\t\t\tclassName,\n\t\t\trender,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst { className: headerClassName, ...headerProps } = slotProps?.header ?? {};\n\t\tconst { className: mainClassName, ...mainProps } = slotProps?.main ?? {};\n\t\tconst { className: asideClassName, ...asideProps } = slotProps?.aside ?? {};\n\t\tconst { className: footerClassName, ...footerProps } = slotProps?.footer ?? {};\n\n\t\treturn useRender({\n\t\t\tdefaultTagName: 'div',\n\t\t\tref,\n\t\t\trender,\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\t'data-slot': 'two-column-layout',\n\t\t\t\tclassName: cn(\n\t\t\t\t\t'two-column-layout--component grid min-w-0 grid-cols-1 gap-space-2xl',\n\t\t\t\t\tadaptTo === 'container' ? '@3xl:grid-cols-[minmax(0,2fr)_minmax(18rem,1fr)]' : 'lg:grid-cols-[minmax(0,2fr)_minmax(18rem,1fr)]',\n\t\t\t\t\tclassName,\n\t\t\t\t),\n\t\t\t\tchildren: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{header !== undefined && header !== null ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t{...headerProps}\n\t\t\t\t\t\t\t\tdata-slot=\"two-column-layout-header\"\n\t\t\t\t\t\t\t\tclassName={cn('two-column-layout--header col-span-full min-w-0', headerClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t{...mainProps}\n\t\t\t\t\t\t\tdata-slot=\"two-column-layout-main\"\n\t\t\t\t\t\t\tclassName={cn('two-column-layout--main min-h-0 min-w-0', mainClassName)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{main}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<aside\n\t\t\t\t\t\t\t{...asideProps}\n\t\t\t\t\t\t\tdata-slot=\"two-column-layout-aside\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'two-column-layout--aside min-h-0 min-w-0',\n\t\t\t\t\t\t\t\tstickyAside && (adaptTo === 'container' ? '@3xl:sticky @3xl:top-space-2xl @3xl:self-start' : 'lg:sticky lg:top-space-2xl lg:self-start'),\n\t\t\t\t\t\t\t\tasideClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{aside}\n\t\t\t\t\t\t</aside>\n\t\t\t\t\t\t{footer !== undefined && footer !== null ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t{...footerProps}\n\t\t\t\t\t\t\t\tdata-slot=\"two-column-layout-footer\"\n\t\t\t\t\t\t\t\tclassName={cn('two-column-layout--footer col-span-full min-w-0', footerClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{footer}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t},\n\t\t\tstate: {},\n\t\t});\n\t},\n);\n\nTwoColumnLayout.displayName = 'TwoColumnLayout';\n"],"mappings":";;;;;;;AAEA,IAAMI,IAAqD;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,MAAM;AACP,GAEMC,IAAiD;CACtD,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;AACL;AAEA,SAAgBC,EAAgB,EAC/B,cAAW,MACX,YAAS,QAIG;CACZ,OAAO;EAAC;EAAW;EAAUF,EAAgBG;EAAWF,EAAcG;CAAO;AAC9E;;;ACjBA,IAAaC,IAAYC,EAA2C,SACnE,EAAE,cAAW,aAAU,WAAQ,WAAQ,GAAGC,KAC1C,GACC;CACD,OAAOC,EAAU;EAChB,gBAAgB;EAChB;EACA;EACA,OAAO;GACN,GAAGD;GACH,WAAWV,EAAG,2CAA2CK,EAAgB;IAAE;IAAU;GAAO,CAAC,GAAGO,CAAS;EAC1G;EACA,OAAO,CAAC;CACT,CAAC;AACF,CAAC;AAED,EAAU,cAAc;;;ACjBxB,IAAaC,IAAeJ,EAA8C,SACzE,EAAE,cAAW,WAAQ,cAAW,GAAG,GAAGC,KACtC,GACC;CACD,OAAOC,EAAU;EAChB,gBAAgB;EAChB;EACA;EACA,OAAO;GACN,GAAGD;GACH;GACA,WAAWV,EACV,kOACAY,CACD;EACD;EACA,OAAO,CAAC;CACT,CAAC;AACF,CAAC;AAED,EAAa,cAAc;;;ACnB3B,IAAaE,IAAUL,EAAsC,SAC5D,EAAE,cAAW,QAAK,WAAQ,GAAGC,KAC7B,GACC;CACD,OAAOC,EAAU;EAChB,gBAAgB;EAChB;EACA;EACA,OAAO;GACN,GAAGD;GACH,WAAWV,EAAG,sBAAsBC,EAAY,EAAE,KAAKc,KAAO,KAAK,CAAC,GAAGH,CAAS;EACjF;EACA,OAAO,CAAC;CACT,CAAC;AACF,CAAC;AAED,EAAQ,cAAc;;;ACOtB,IAAaI,IAAkBP,EAC9B,SACC,EACC,WACA,SACA,UACA,WACA,iBAAc,IACd,aAAU,YACV,cACA,cACA,WACA,GAAGC,KAEJ,GACC;CACD,IAAM,EAAE,WAAWO,GAAiB,GAAGC,MAAgBC,GAAW,UAAU,CAAC,GACvE,EAAE,WAAWC,GAAe,GAAGC,MAAcF,GAAW,QAAQ,CAAC,GACjE,EAAE,WAAWG,GAAgB,GAAGC,MAAeJ,GAAW,SAAS,CAAC,GACpE,EAAE,WAAWK,GAAiB,GAAGC,MAAgBN,GAAW,UAAU,CAAC;CAE7E,OAAOR,EAAU;EAChB,gBAAgB;EAChB;EACA;EACA,OAAO;GACN,GAAGD;GACH,aAAa;GACb,WAAWV,EACV,uEACA0B,MAAY,cAAc,qDAAqD,kDAC/Ed,CACD;GACA,UACC,kBAAAb,GAAA,EAAA,UAAA;IACE4B,KAAmC,OAQhC,OAPH,kBAAC,OAAD;KACC,GAAIT;KACJ,aAAU;KACV,WAAWlB,EAAG,mDAAmDiB,CAAe;KAE/E,UAAAU;IACG,CAAA;IAEN,kBAAC,OAAD;KACC,GAAIN;KACJ,aAAU;KACV,WAAWrB,EAAG,2CAA2CoB,CAAa;KAErE,UAAAQ;IACG,CAAA;IACL,kBAAC,SAAD;KACC,GAAIL;KACJ,aAAU;KACV,WAAWvB,EACV,4CACA6B,MAAgBH,MAAY,cAAc,mDAAmD,6CAC7FJ,CACD;KAEC,UAAAQ;IACK,CAAA;IACNC,KAAmC,OAQhC,OAPH,kBAAC,OAAD;KACC,GAAIN;KACJ,aAAU;KACV,WAAWzB,EAAG,mDAAmDwB,CAAe;KAE/E,UAAAO;IACG,CAAA;GAEL,EAAA,CAAA;EAEJ;EACA,OAAO,CAAC;CACT,CAAC;AACF,CACD;AAEA,EAAgB,cAAc"}
|
|
@@ -1,391 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { _ as e, c as t, s as n } from "./ui-provider-CftIB6TY.js";
|
|
3
|
-
import { useStrings as r } from "./lib/strings.js";
|
|
4
|
-
import { t as i } from "./utils-C2EKeIw3.js";
|
|
5
|
-
import { n as a } from "./buttons-Co6GavvM.js";
|
|
6
|
-
import { a as o } from "./typography-Cv8MT-82.js";
|
|
7
|
-
import { t as s } from "./structure-BvW4vG4H.js";
|
|
8
|
-
import { n as c } from "./track-recipes-LLPNVwFg.js";
|
|
9
|
-
import { t as l } from "./skeleton-BvRhK8y-.js";
|
|
10
|
-
import { createContext as u, forwardRef as d, useContext as f, useId as p, useMemo as m } from "react";
|
|
11
|
-
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
12
|
-
import { AlertCircle as v, Loader2 as y } from "lucide-react";
|
|
13
|
-
import { cva as b } from "class-variance-authority";
|
|
14
|
-
import { Progress as x } from "@base-ui/react/progress";
|
|
15
|
-
//#region src/components/ui/empty.tsx
|
|
16
|
-
function S({ className: e, ...t }) {
|
|
17
|
-
return /* @__PURE__ */ g("div", {
|
|
18
|
-
"data-slot": "empty",
|
|
19
|
-
className: i("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", e),
|
|
20
|
-
...t
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
function C({ className: e, ...t }) {
|
|
24
|
-
return /* @__PURE__ */ g("div", {
|
|
25
|
-
"data-slot": "empty-header",
|
|
26
|
-
className: i("gap-2 flex max-w-sm flex-col items-center", e),
|
|
27
|
-
...t
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
var w = b("mb-space-md flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
31
|
-
variants: { variant: {
|
|
32
|
-
default: "bg-transparent",
|
|
33
|
-
icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6"
|
|
34
|
-
} },
|
|
35
|
-
defaultVariants: { variant: "default" }
|
|
36
|
-
});
|
|
37
|
-
function ee({ className: e, variant: t = "default", ...n }) {
|
|
38
|
-
return /* @__PURE__ */ g("div", {
|
|
39
|
-
"data-slot": "empty-icon",
|
|
40
|
-
"data-variant": t,
|
|
41
|
-
className: i(w({
|
|
42
|
-
variant: t,
|
|
43
|
-
className: e
|
|
44
|
-
})),
|
|
45
|
-
...n
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
function T({ className: e, ...t }) {
|
|
49
|
-
return /* @__PURE__ */ g("div", {
|
|
50
|
-
"data-slot": "empty-title",
|
|
51
|
-
className: i("text-lg font-medium tracking-tight", e),
|
|
52
|
-
...t
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
function E({ className: e, ...t }) {
|
|
56
|
-
return /* @__PURE__ */ g("div", {
|
|
57
|
-
"data-slot": "empty-description",
|
|
58
|
-
className: i("text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", e),
|
|
59
|
-
...t
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function D({ className: e, ...t }) {
|
|
63
|
-
return /* @__PURE__ */ g("div", {
|
|
64
|
-
"data-slot": "empty-content",
|
|
65
|
-
className: i("gap-4 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance", e),
|
|
66
|
-
...t
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
//#endregion
|
|
70
|
-
//#region src/components/base/feedback/empty.tsx
|
|
71
|
-
function O(e) {
|
|
72
|
-
return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
|
|
73
|
-
}
|
|
74
|
-
function k({ className: e, ...t }) {
|
|
75
|
-
return /* @__PURE__ */ g(S, {
|
|
76
|
-
className: i("empty--component gap-space-lg rounded-radius-lg p-surface", e),
|
|
77
|
-
...t
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
function A({ className: e, ...t }) {
|
|
81
|
-
return /* @__PURE__ */ g(C, {
|
|
82
|
-
className: i("empty-header--component gap-normal", e),
|
|
83
|
-
...t
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
function j({ className: e, ...t }) {
|
|
87
|
-
return /* @__PURE__ */ g(ee, {
|
|
88
|
-
className: i("empty-media--component mb-space-sm", e),
|
|
89
|
-
...t
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
function M({ className: e, headingLevel: t = 3, role: n, "aria-level": r, children: a, ...s }) {
|
|
93
|
-
let c = n ?? "heading";
|
|
94
|
-
return /* @__PURE__ */ g(T, {
|
|
95
|
-
role: c,
|
|
96
|
-
"aria-level": r ?? (c === "heading" ? t : void 0),
|
|
97
|
-
className: i("empty-title--component tracking-normal", e),
|
|
98
|
-
...s,
|
|
99
|
-
children: O(a) ? /* @__PURE__ */ g(o, {
|
|
100
|
-
tag: "span",
|
|
101
|
-
size: "base",
|
|
102
|
-
weight: "semibold",
|
|
103
|
-
lineHeight: "tight",
|
|
104
|
-
children: a
|
|
105
|
-
}) : a
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
function N({ className: e, children: t, ...n }) {
|
|
109
|
-
return /* @__PURE__ */ g(E, {
|
|
110
|
-
className: i("empty-description--component", e),
|
|
111
|
-
...n,
|
|
112
|
-
children: O(t) ? /* @__PURE__ */ g(o, {
|
|
113
|
-
tag: "span",
|
|
114
|
-
type: "secondary",
|
|
115
|
-
lineHeight: "relaxed",
|
|
116
|
-
children: t
|
|
117
|
-
}) : t
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function P({ className: e, children: t, ...n }) {
|
|
121
|
-
return /* @__PURE__ */ g(D, {
|
|
122
|
-
className: i("empty-content--component gap-space-md", e),
|
|
123
|
-
...n,
|
|
124
|
-
children: O(t) ? /* @__PURE__ */ g(o, { children: t }) : t
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
k.displayName = "Empty", A.displayName = "EmptyHeader", j.displayName = "EmptyMedia", M.displayName = "EmptyTitle", N.displayName = "EmptyDescription", P.displayName = "EmptyContent";
|
|
128
|
-
//#endregion
|
|
129
|
-
//#region src/components/base/feedback/progress.strings.ts
|
|
130
|
-
var F = { indeterminateValue: "In progress" }, I = u(null);
|
|
131
|
-
function L(e) {
|
|
132
|
-
return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
|
|
133
|
-
}
|
|
134
|
-
var R = {
|
|
135
|
-
neutral: "bg-muted-foreground",
|
|
136
|
-
primary: "bg-primary",
|
|
137
|
-
secondary: "bg-secondary-foreground",
|
|
138
|
-
success: "bg-success",
|
|
139
|
-
info: "bg-info",
|
|
140
|
-
warning: "bg-warning",
|
|
141
|
-
destructive: "bg-destructive"
|
|
142
|
-
};
|
|
143
|
-
function z(e, t) {
|
|
144
|
-
return typeof t == "function" ? (n) => i(e, t(n)) : i(e, t);
|
|
145
|
-
}
|
|
146
|
-
function te(e, t) {
|
|
147
|
-
let n = Number.isFinite(e) ? e : 0, r = Number.isFinite(t) ? t : 100;
|
|
148
|
-
return {
|
|
149
|
-
min: n,
|
|
150
|
-
max: r > n ? r : n + 100
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
function ne(e, t, n) {
|
|
154
|
-
return e === null || !Number.isFinite(e) ? null : Math.min(n, Math.max(t, e));
|
|
155
|
-
}
|
|
156
|
-
function B(e, t, n, r, i) {
|
|
157
|
-
if (e === null) return null;
|
|
158
|
-
if (i) return new Intl.NumberFormat(r, i).format(e);
|
|
159
|
-
let a = n === t ? 0 : (e - t) / (n - t);
|
|
160
|
-
return new Intl.NumberFormat(r, {
|
|
161
|
-
style: "percent",
|
|
162
|
-
maximumFractionDigits: 0
|
|
163
|
-
}).format(a);
|
|
164
|
-
}
|
|
165
|
-
var V = d(function({ value: i, min: a, max: c, format: l, locale: u, getAriaValueText: d, children: f, label: v, description: y, metadata: b, showValue: S, valueSlot: C, headerSlot: w, trackSlot: ee, size: T, tone: E = "primary", trackProps: D, indicatorProps: O, strings: k, className: A, "aria-describedby": j, ...M }, N) {
|
|
166
|
-
let P = r(F, k), R = t(), { defaultScale: V } = n(), K = e(T, V), q = u ?? R.locale, J = p(), { min: Y, max: X } = te(a, c), Z = ne(i, Y, X), Q = B(Z, Y, X, q, l), re = w === void 0 && f === void 0, $ = S ?? v !== void 0, ie = v !== void 0 || y !== void 0 || b !== void 0 || C !== void 0 || $, ae = [j, re && y !== void 0 ? J : void 0].filter(Boolean).join(" ") || void 0, oe = (e, t) => {
|
|
167
|
-
let n = B(t, Y, X, q, l);
|
|
168
|
-
return d ? d(n, t) : n ?? P.indeterminateValue;
|
|
169
|
-
}, se = m(() => ({
|
|
170
|
-
formattedValue: Q,
|
|
171
|
-
value: Z
|
|
172
|
-
}), [Q, Z]), ce = w ?? f ?? (ie ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ _("div", {
|
|
173
|
-
className: "progress--summary min-w-0",
|
|
174
|
-
children: [v !== void 0 && /* @__PURE__ */ g(W, { children: v }), y !== void 0 && (L(y) ? /* @__PURE__ */ g(o, {
|
|
175
|
-
id: J,
|
|
176
|
-
tag: "span",
|
|
177
|
-
size: "xs",
|
|
178
|
-
type: "secondary",
|
|
179
|
-
className: "progress--description mt-space-2xs block",
|
|
180
|
-
children: y
|
|
181
|
-
}) : /* @__PURE__ */ g("div", {
|
|
182
|
-
id: J,
|
|
183
|
-
className: "progress--description mt-space-2xs",
|
|
184
|
-
children: y
|
|
185
|
-
}))]
|
|
186
|
-
}), ($ || C !== void 0 || b !== void 0) && /* @__PURE__ */ _(s, {
|
|
187
|
-
gap: "2xs",
|
|
188
|
-
align: "end",
|
|
189
|
-
className: "progress--details text-right",
|
|
190
|
-
children: [C ?? ($ ? /* @__PURE__ */ g(G, {}) : null), b !== void 0 && (L(b) ? /* @__PURE__ */ g(o, {
|
|
191
|
-
tag: "span",
|
|
192
|
-
size: "xs",
|
|
193
|
-
type: "secondary",
|
|
194
|
-
className: "progress--metadata tabular-nums",
|
|
195
|
-
children: b
|
|
196
|
-
}) : b)]
|
|
197
|
-
})] }) : null), le = ee ?? /* @__PURE__ */ g(H, {
|
|
198
|
-
...D,
|
|
199
|
-
size: D?.size ?? K,
|
|
200
|
-
children: D?.children ?? /* @__PURE__ */ g(U, {
|
|
201
|
-
...O,
|
|
202
|
-
tone: O?.tone ?? E
|
|
203
|
-
})
|
|
204
|
-
});
|
|
205
|
-
return /* @__PURE__ */ g(I.Provider, {
|
|
206
|
-
value: se,
|
|
207
|
-
children: /* @__PURE__ */ _(x.Root, {
|
|
208
|
-
ref: N,
|
|
209
|
-
value: Z,
|
|
210
|
-
min: Y,
|
|
211
|
-
max: X,
|
|
212
|
-
format: l,
|
|
213
|
-
locale: q,
|
|
214
|
-
getAriaValueText: oe,
|
|
215
|
-
"aria-describedby": ae,
|
|
216
|
-
"data-slot": "progress",
|
|
217
|
-
"data-size": K,
|
|
218
|
-
"data-tone": E,
|
|
219
|
-
className: z("progress--component grid min-w-0 w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-space-lg gap-y-space-sm", A),
|
|
220
|
-
...M,
|
|
221
|
-
children: [ce, le]
|
|
222
|
-
})
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
V.displayName = "Progress";
|
|
226
|
-
var H = d(function({ className: t, size: r, ...a }, o) {
|
|
227
|
-
let { defaultScale: s } = n(), l = e(r, s);
|
|
228
|
-
return /* @__PURE__ */ g(x.Track, {
|
|
229
|
-
ref: o,
|
|
230
|
-
"data-slot": "progress-track",
|
|
231
|
-
"data-size": l,
|
|
232
|
-
className: z(i("progress-track--component progress--track relative col-span-full flex w-full items-center overflow-hidden rounded-full bg-muted", c[l]), t),
|
|
233
|
-
...a
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
H.displayName = "ProgressTrack";
|
|
237
|
-
var U = d(function({ className: e, tone: t = "primary", ...n }, r) {
|
|
238
|
-
return /* @__PURE__ */ g(x.Indicator, {
|
|
239
|
-
ref: r,
|
|
240
|
-
"data-slot": "progress-indicator",
|
|
241
|
-
"data-tone": t,
|
|
242
|
-
className: z(i("progress-indicator--component progress--indicator h-full rounded-full transition-[width] duration-300 ease-out motion-reduce:transition-none", "data-[indeterminate]:w-full motion-safe:data-[indeterminate]:animate-pulse", R[t]), e),
|
|
243
|
-
...n
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
U.displayName = "ProgressIndicator";
|
|
247
|
-
var W = d(function({ className: e, children: t, ...n }, r) {
|
|
248
|
-
return /* @__PURE__ */ g(x.Label, {
|
|
249
|
-
ref: r,
|
|
250
|
-
"data-slot": "progress-label",
|
|
251
|
-
className: z("progress-label--component progress--label min-w-0", e),
|
|
252
|
-
...n,
|
|
253
|
-
children: L(t) ? /* @__PURE__ */ g(o, {
|
|
254
|
-
tag: "span",
|
|
255
|
-
weight: "medium",
|
|
256
|
-
lineHeight: "tight",
|
|
257
|
-
className: "block",
|
|
258
|
-
children: t
|
|
259
|
-
}) : t
|
|
260
|
-
});
|
|
261
|
-
});
|
|
262
|
-
W.displayName = "ProgressLabel";
|
|
263
|
-
var G = d(function({ className: e, children: t, ...n }, r) {
|
|
264
|
-
let i = f(I);
|
|
265
|
-
return /* @__PURE__ */ g(x.Value, {
|
|
266
|
-
ref: r,
|
|
267
|
-
"data-slot": "progress-value",
|
|
268
|
-
className: z("progress-value--component progress--value whitespace-nowrap", e),
|
|
269
|
-
...n,
|
|
270
|
-
children: (e, n) => {
|
|
271
|
-
let r = i?.value ?? n, a = i?.formattedValue ?? e, s = t ? t(a, r) : a;
|
|
272
|
-
return s == null ? null : L(s) ? /* @__PURE__ */ g(o, {
|
|
273
|
-
tag: "span",
|
|
274
|
-
weight: "medium",
|
|
275
|
-
lineHeight: "tight",
|
|
276
|
-
className: "block tabular-nums",
|
|
277
|
-
children: s
|
|
278
|
-
}) : s;
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
G.displayName = "ProgressValue";
|
|
283
|
-
//#endregion
|
|
284
|
-
//#region src/components/base/feedback/state-display.tsx
|
|
285
|
-
var K = {
|
|
286
|
-
inline: "w-full max-w-full py-row-y",
|
|
287
|
-
panel: "w-full rounded-radius-lg border p-surface"
|
|
288
|
-
}, q = {
|
|
289
|
-
neutral: "border-border bg-card",
|
|
290
|
-
destructive: "border-destructive/30 bg-destructive/5"
|
|
291
|
-
};
|
|
292
|
-
function J(e) {
|
|
293
|
-
return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
|
|
294
|
-
}
|
|
295
|
-
var Y = d(function({ componentClassName: e, variant: t, tone: n, icon: r, title: a, description: c, action: l, details: u, className: d, ...f }, p) {
|
|
296
|
-
let m = e.replace("--component", "");
|
|
297
|
-
return /* @__PURE__ */ _("div", {
|
|
298
|
-
ref: p,
|
|
299
|
-
"data-variant": t,
|
|
300
|
-
"data-tone": n,
|
|
301
|
-
className: i(e, "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-x-space-sm", "sm:grid-cols-[auto_minmax(0,1fr)_auto]", K[t], t === "panel" && q[n], d),
|
|
302
|
-
...f,
|
|
303
|
-
children: [
|
|
304
|
-
/* @__PURE__ */ g("span", {
|
|
305
|
-
"aria-hidden": "true",
|
|
306
|
-
className: i(`${m}--icon`, "mt-space-2xs inline-flex size-icon shrink-0 items-center justify-center"),
|
|
307
|
-
children: r
|
|
308
|
-
}),
|
|
309
|
-
(a !== void 0 || c !== void 0) && /* @__PURE__ */ _("div", {
|
|
310
|
-
className: i(`${m}--message`, "grid min-w-0", t === "inline" ? "gap-dense" : "gap-normal"),
|
|
311
|
-
children: [a !== void 0 && (J(a) ? /* @__PURE__ */ g(o, {
|
|
312
|
-
tag: "span",
|
|
313
|
-
weight: "semibold",
|
|
314
|
-
className: i(`${m}--title`, "block min-w-0"),
|
|
315
|
-
children: a
|
|
316
|
-
}) : /* @__PURE__ */ g("div", {
|
|
317
|
-
className: i(`${m}--title`, "min-w-0"),
|
|
318
|
-
children: a
|
|
319
|
-
})), c !== void 0 && (J(c) ? /* @__PURE__ */ g(o, {
|
|
320
|
-
tag: "span",
|
|
321
|
-
size: t === "inline" ? "xs" : void 0,
|
|
322
|
-
type: "secondary",
|
|
323
|
-
className: i(`${m}--description`, "block min-w-0"),
|
|
324
|
-
children: c
|
|
325
|
-
}) : /* @__PURE__ */ g("div", {
|
|
326
|
-
className: i(`${m}--description`, "min-w-0"),
|
|
327
|
-
children: c
|
|
328
|
-
}))]
|
|
329
|
-
}),
|
|
330
|
-
l !== void 0 && /* @__PURE__ */ g("div", {
|
|
331
|
-
className: i(`${m}--action`, "col-start-2 row-start-2 mt-space-sm justify-self-start", "sm:col-start-3 sm:row-start-1 sm:mt-0 sm:justify-self-end sm:self-start"),
|
|
332
|
-
children: l
|
|
333
|
-
}),
|
|
334
|
-
u !== void 0 && /* @__PURE__ */ g(s, {
|
|
335
|
-
gap: "md",
|
|
336
|
-
className: i(`${m}--details`, "col-start-2 col-end-[-1] mt-space-md"),
|
|
337
|
-
children: u
|
|
338
|
-
})
|
|
339
|
-
]
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
Y.displayName = "StateDisplayFrame";
|
|
343
|
-
var X = d(function({ label: e, description: t, progress: n, variant: r = "inline", skeleton: i = !1, lines: a = 3, icon: o, className: s, ...c }, u) {
|
|
344
|
-
let d = typeof n == "number" ? Math.min(100, Math.max(0, n)) : void 0;
|
|
345
|
-
return /* @__PURE__ */ g(Y, {
|
|
346
|
-
ref: u,
|
|
347
|
-
role: "status",
|
|
348
|
-
"aria-live": "polite",
|
|
349
|
-
componentClassName: "loading-state--component",
|
|
350
|
-
variant: r,
|
|
351
|
-
tone: "neutral",
|
|
352
|
-
icon: o ?? /* @__PURE__ */ g(y, { className: "size-icon animate-spin text-muted-foreground" }),
|
|
353
|
-
title: e,
|
|
354
|
-
description: t,
|
|
355
|
-
details: d !== void 0 || i ? /* @__PURE__ */ _(h, { children: [d !== void 0 && /* @__PURE__ */ g(V, {
|
|
356
|
-
value: d,
|
|
357
|
-
size: "sm",
|
|
358
|
-
showValue: !1,
|
|
359
|
-
"aria-label": typeof e == "string" ? e : void 0
|
|
360
|
-
}), i === !0 ? /* @__PURE__ */ g(l, { lines: a }) : i] }) : void 0,
|
|
361
|
-
className: s,
|
|
362
|
-
...c
|
|
363
|
-
});
|
|
364
|
-
});
|
|
365
|
-
X.displayName = "LoadingState";
|
|
366
|
-
var Z = d(function({ title: e, description: t, action: n, onRetry: r, retryLabel: i, variant: o = "panel", icon: s, className: c, ...l }, u) {
|
|
367
|
-
return /* @__PURE__ */ g(Y, {
|
|
368
|
-
ref: u,
|
|
369
|
-
role: "alert",
|
|
370
|
-
componentClassName: "error-state--component",
|
|
371
|
-
variant: o,
|
|
372
|
-
tone: "destructive",
|
|
373
|
-
icon: s ?? /* @__PURE__ */ g(v, { className: "size-icon text-destructive" }),
|
|
374
|
-
title: e,
|
|
375
|
-
description: t,
|
|
376
|
-
action: n ?? (r && i ? /* @__PURE__ */ g(a, {
|
|
377
|
-
type: "button",
|
|
378
|
-
tone: "destructive",
|
|
379
|
-
buttonStyle: "ghost",
|
|
380
|
-
onClick: r,
|
|
381
|
-
children: i
|
|
382
|
-
}) : void 0),
|
|
383
|
-
className: c,
|
|
384
|
-
...l
|
|
385
|
-
});
|
|
386
|
-
});
|
|
387
|
-
Z.displayName = "ErrorState";
|
|
388
|
-
//#endregion
|
|
389
|
-
export { W as a, F as c, N as d, A as f, U as i, k as l, M as m, X as n, H as o, j as p, V as r, G as s, Z as t, P as u };
|
|
390
|
-
|
|
391
|
-
//# sourceMappingURL=feedback-a9j9J-9A.js.map
|