@psnext/design-system 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +493 -8
- package/README.md +3 -3
- package/SKILL.md +84 -6
- package/bin/install-agent-skill.mjs +39 -7
- package/dist/Header.cjs +152 -21
- package/dist/Header.cjs.map +1 -1
- package/dist/Header.js +152 -21
- package/dist/Header.js.map +1 -1
- package/dist/Icon.cjs +40 -8
- package/dist/Icon.cjs.map +1 -1
- package/dist/Icon.js +40 -8
- package/dist/Icon.js.map +1 -1
- package/dist/Mosaic.cjs +472 -0
- package/dist/Mosaic.cjs.map +1 -0
- package/dist/Mosaic.js +459 -0
- package/dist/Mosaic.js.map +1 -0
- package/dist/MultiColumn.cjs +354 -0
- package/dist/MultiColumn.cjs.map +1 -0
- package/dist/MultiColumn.js +335 -0
- package/dist/MultiColumn.js.map +1 -0
- package/dist/Sidebar.cjs +4 -3
- package/dist/Sidebar.cjs.map +1 -1
- package/dist/Sidebar.js +4 -3
- package/dist/Sidebar.js.map +1 -1
- package/dist/index.cjs +18 -3
- package/dist/index.d.cts +5 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index10.d.cts +6 -6
- package/dist/index10.d.cts.map +1 -1
- package/dist/index10.d.ts +6 -6
- package/dist/index11.d.cts +3 -3
- package/dist/index11.d.cts.map +1 -1
- package/dist/index11.d.ts +3 -3
- package/dist/index11.d.ts.map +1 -1
- package/dist/index12.d.cts +12 -12
- package/dist/index12.d.ts +12 -12
- package/dist/index13.d.cts +6 -6
- package/dist/index13.d.cts.map +1 -1
- package/dist/index13.d.ts +6 -6
- package/dist/index13.d.ts.map +1 -1
- package/dist/index14.d.cts +5 -5
- package/dist/index14.d.ts +5 -5
- package/dist/index15.d.cts +58 -23
- package/dist/index15.d.cts.map +1 -1
- package/dist/index15.d.ts +58 -23
- package/dist/index15.d.ts.map +1 -1
- package/dist/index16.d.cts +23 -32
- package/dist/index16.d.cts.map +1 -1
- package/dist/index16.d.ts +23 -32
- package/dist/index16.d.ts.map +1 -1
- package/dist/index17.d.cts +34 -15
- package/dist/index17.d.cts.map +1 -1
- package/dist/index17.d.ts +34 -15
- package/dist/index17.d.ts.map +1 -1
- package/dist/index18.d.cts +13 -67
- package/dist/index18.d.cts.map +1 -1
- package/dist/index18.d.ts +13 -67
- package/dist/index18.d.ts.map +1 -1
- package/dist/index19.d.cts +55 -48
- package/dist/index19.d.cts.map +1 -1
- package/dist/index19.d.ts +55 -48
- package/dist/index19.d.ts.map +1 -1
- package/dist/index2.d.cts +8 -8
- package/dist/index2.d.ts +9 -9
- package/dist/index20.d.cts +45 -75
- package/dist/index20.d.cts.map +1 -1
- package/dist/index20.d.ts +45 -75
- package/dist/index20.d.ts.map +1 -1
- package/dist/index21.d.cts +90 -28
- package/dist/index21.d.cts.map +1 -1
- package/dist/index21.d.ts +90 -28
- package/dist/index21.d.ts.map +1 -1
- package/dist/index22.d.cts +28 -56
- package/dist/index22.d.cts.map +1 -1
- package/dist/index22.d.ts +28 -56
- package/dist/index22.d.ts.map +1 -1
- package/dist/index23.d.cts +53 -78
- package/dist/index23.d.cts.map +1 -1
- package/dist/index23.d.ts +53 -78
- package/dist/index23.d.ts.map +1 -1
- package/dist/index24.d.cts +83 -33
- package/dist/index24.d.cts.map +1 -1
- package/dist/index24.d.ts +83 -33
- package/dist/index24.d.ts.map +1 -1
- package/dist/index25.d.cts +43 -11
- package/dist/index25.d.cts.map +1 -1
- package/dist/index25.d.ts +43 -11
- package/dist/index25.d.ts.map +1 -1
- package/dist/index26.d.cts +11 -74
- package/dist/index26.d.cts.map +1 -1
- package/dist/index26.d.ts +11 -74
- package/dist/index26.d.ts.map +1 -1
- package/dist/index27.d.cts +68 -59
- package/dist/index27.d.cts.map +1 -1
- package/dist/index27.d.ts +68 -59
- package/dist/index27.d.ts.map +1 -1
- package/dist/index28.d.cts +47 -30
- package/dist/index28.d.cts.map +1 -1
- package/dist/index28.d.ts +47 -30
- package/dist/index28.d.ts.map +1 -1
- package/dist/index29.d.cts +63 -17
- package/dist/index29.d.cts.map +1 -1
- package/dist/index29.d.ts +63 -17
- package/dist/index29.d.ts.map +1 -1
- package/dist/index3.d.cts +13 -13
- package/dist/index3.d.ts +13 -13
- package/dist/index30.d.cts +29 -51
- package/dist/index30.d.cts.map +1 -1
- package/dist/index30.d.ts +30 -52
- package/dist/index30.d.ts.map +1 -1
- package/dist/index31.d.cts +19 -34
- package/dist/index31.d.cts.map +1 -1
- package/dist/index31.d.ts +19 -34
- package/dist/index31.d.ts.map +1 -1
- package/dist/index32.d.cts +80 -18
- package/dist/index32.d.cts.map +1 -1
- package/dist/index32.d.ts +79 -17
- package/dist/index32.d.ts.map +1 -1
- package/dist/index33.d.cts +32 -51
- package/dist/index33.d.cts.map +1 -1
- package/dist/index33.d.ts +33 -52
- package/dist/index33.d.ts.map +1 -1
- package/dist/index34.d.cts +19 -36
- package/dist/index34.d.cts.map +1 -1
- package/dist/index34.d.ts +19 -36
- package/dist/index34.d.ts.map +1 -1
- package/dist/index35.d.cts +43 -61
- package/dist/index35.d.cts.map +1 -1
- package/dist/index35.d.ts +44 -62
- package/dist/index35.d.ts.map +1 -1
- package/dist/index36.d.cts +35 -11
- package/dist/index36.d.cts.map +1 -1
- package/dist/index36.d.ts +35 -11
- package/dist/index36.d.ts.map +1 -1
- package/dist/index37.d.cts +68 -20
- package/dist/index37.d.cts.map +1 -1
- package/dist/index37.d.ts +69 -21
- package/dist/index37.d.ts.map +1 -1
- package/dist/index38.d.cts +14 -15
- package/dist/index38.d.cts.map +1 -1
- package/dist/index38.d.ts +14 -15
- package/dist/index38.d.ts.map +1 -1
- package/dist/index39.d.cts +22 -98
- package/dist/index39.d.cts.map +1 -1
- package/dist/index39.d.ts +22 -98
- package/dist/index39.d.ts.map +1 -1
- package/dist/index4.d.cts +2 -2
- package/dist/index4.d.cts.map +1 -1
- package/dist/index4.d.ts +2 -2
- package/dist/index40.d.cts +15 -17
- package/dist/index40.d.cts.map +1 -1
- package/dist/index40.d.ts +15 -17
- package/dist/index40.d.ts.map +1 -1
- package/dist/index41.d.cts +84 -35
- package/dist/index41.d.cts.map +1 -1
- package/dist/index41.d.ts +84 -35
- package/dist/index41.d.ts.map +1 -1
- package/dist/index42.d.cts +118 -38
- package/dist/index42.d.cts.map +1 -1
- package/dist/index42.d.ts +118 -38
- package/dist/index42.d.ts.map +1 -1
- package/dist/index43.d.cts +15 -89
- package/dist/index43.d.cts.map +1 -1
- package/dist/index43.d.ts +15 -89
- package/dist/index43.d.ts.map +1 -1
- package/dist/index44.d.cts +56 -1
- package/dist/index44.d.cts.map +1 -0
- package/dist/index44.d.ts +56 -1
- package/dist/index44.d.ts.map +1 -0
- package/dist/index45.d.cts +31 -34
- package/dist/index45.d.cts.map +1 -1
- package/dist/index45.d.ts +31 -34
- package/dist/index45.d.ts.map +1 -1
- package/dist/index46.d.cts +89 -21
- package/dist/index46.d.cts.map +1 -1
- package/dist/index46.d.ts +89 -21
- package/dist/index46.d.ts.map +1 -1
- package/dist/index47.d.cts +1 -41
- package/dist/index47.d.ts +1 -41
- package/dist/index48.d.cts +122 -20
- package/dist/index48.d.cts.map +1 -1
- package/dist/index48.d.ts +122 -20
- package/dist/index48.d.ts.map +1 -1
- package/dist/index49.d.cts +40 -13
- package/dist/index49.d.cts.map +1 -1
- package/dist/index49.d.ts +40 -13
- package/dist/index49.d.ts.map +1 -1
- package/dist/index5.d.cts +7 -7
- package/dist/index5.d.cts.map +1 -1
- package/dist/index5.d.ts +7 -7
- package/dist/index50.d.cts +22 -63
- package/dist/index50.d.cts.map +1 -1
- package/dist/index50.d.ts +22 -63
- package/dist/index50.d.ts.map +1 -1
- package/dist/index51.d.cts +33 -55
- package/dist/index51.d.cts.map +1 -1
- package/dist/index51.d.ts +33 -55
- package/dist/index51.d.ts.map +1 -1
- package/dist/index52.d.cts +18 -24
- package/dist/index52.d.cts.map +1 -1
- package/dist/index52.d.ts +18 -24
- package/dist/index52.d.ts.map +1 -1
- package/dist/index53.d.cts +12 -200
- package/dist/index53.d.cts.map +1 -1
- package/dist/index53.d.ts +12 -200
- package/dist/index53.d.ts.map +1 -1
- package/dist/index54.d.cts +58 -15
- package/dist/index54.d.cts.map +1 -1
- package/dist/index54.d.ts +58 -15
- package/dist/index54.d.ts.map +1 -1
- package/dist/index55.d.cts +93 -23
- package/dist/index55.d.cts.map +1 -1
- package/dist/index55.d.ts +93 -23
- package/dist/index55.d.ts.map +1 -1
- package/dist/index56.d.cts +27 -21
- package/dist/index56.d.cts.map +1 -1
- package/dist/index56.d.ts +27 -21
- package/dist/index56.d.ts.map +1 -1
- package/dist/index57.d.cts +203 -6
- package/dist/index57.d.cts.map +1 -1
- package/dist/index57.d.ts +203 -6
- package/dist/index57.d.ts.map +1 -1
- package/dist/index58.d.cts +17 -41
- package/dist/index58.d.cts.map +1 -1
- package/dist/index58.d.ts +17 -41
- package/dist/index58.d.ts.map +1 -1
- package/dist/index59.d.cts +24 -47
- package/dist/index59.d.cts.map +1 -1
- package/dist/index59.d.ts +24 -47
- package/dist/index59.d.ts.map +1 -1
- package/dist/index6.d.cts +5 -5
- package/dist/index6.d.cts.map +1 -1
- package/dist/index6.d.ts +6 -6
- package/dist/index60.d.cts +19 -57
- package/dist/index60.d.cts.map +1 -1
- package/dist/index60.d.ts +19 -57
- package/dist/index60.d.ts.map +1 -1
- package/dist/index61.d.cts +6 -39
- package/dist/index61.d.cts.map +1 -1
- package/dist/index61.d.ts +6 -39
- package/dist/index61.d.ts.map +1 -1
- package/dist/index62.d.cts +44 -18
- package/dist/index62.d.cts.map +1 -1
- package/dist/index62.d.ts +44 -18
- package/dist/index62.d.ts.map +1 -1
- package/dist/index63.d.cts +47 -41
- package/dist/index63.d.cts.map +1 -1
- package/dist/index63.d.ts +47 -41
- package/dist/index63.d.ts.map +1 -1
- package/dist/index64.d.cts +55 -15
- package/dist/index64.d.cts.map +1 -1
- package/dist/index64.d.ts +54 -14
- package/dist/index64.d.ts.map +1 -1
- package/dist/index65.d.cts +36 -39
- package/dist/index65.d.cts.map +1 -1
- package/dist/index65.d.ts +37 -40
- package/dist/index65.d.ts.map +1 -1
- package/dist/index66.d.cts +16 -17
- package/dist/index66.d.cts.map +1 -1
- package/dist/index66.d.ts +17 -18
- package/dist/index66.d.ts.map +1 -1
- package/dist/index67.d.cts +40 -14
- package/dist/index67.d.cts.map +1 -1
- package/dist/index67.d.ts +40 -14
- package/dist/index67.d.ts.map +1 -1
- package/dist/index68.d.cts +16 -30
- package/dist/index68.d.cts.map +1 -1
- package/dist/index68.d.ts +17 -31
- package/dist/index68.d.ts.map +1 -1
- package/dist/index69.d.cts +39 -27
- package/dist/index69.d.cts.map +1 -1
- package/dist/index69.d.ts +40 -28
- package/dist/index69.d.ts.map +1 -1
- package/dist/index7.d.cts +8 -8
- package/dist/index7.d.cts.map +1 -1
- package/dist/index7.d.ts +8 -8
- package/dist/index7.d.ts.map +1 -1
- package/dist/index70.d.cts +22 -78
- package/dist/index70.d.cts.map +1 -1
- package/dist/index70.d.ts +22 -78
- package/dist/index70.d.ts.map +1 -1
- package/dist/index71.d.cts +77 -251
- package/dist/index71.d.cts.map +1 -1
- package/dist/index71.d.ts +77 -251
- package/dist/index71.d.ts.map +1 -1
- package/dist/index72.d.cts +19 -0
- package/dist/index72.d.cts.map +1 -0
- package/dist/index72.d.ts +19 -0
- package/dist/index72.d.ts.map +1 -0
- package/dist/index73.d.cts +37 -0
- package/dist/index73.d.cts.map +1 -0
- package/dist/index73.d.ts +37 -0
- package/dist/index73.d.ts.map +1 -0
- package/dist/index74.d.cts +36 -0
- package/dist/index74.d.cts.map +1 -0
- package/dist/index74.d.ts +36 -0
- package/dist/index74.d.ts.map +1 -0
- package/dist/index75.d.cts +86 -0
- package/dist/index75.d.cts.map +1 -0
- package/dist/index75.d.ts +86 -0
- package/dist/index75.d.ts.map +1 -0
- package/dist/index76.d.cts +278 -0
- package/dist/index76.d.cts.map +1 -0
- package/dist/index76.d.ts +278 -0
- package/dist/index76.d.ts.map +1 -0
- package/dist/index8.d.cts +4 -4
- package/dist/index8.d.ts +5 -5
- package/dist/index9.d.cts +2 -2
- package/dist/index9.d.ts +2 -2
- package/dist/index9.d.ts.map +1 -1
- package/dist/layouts/Container/index.cjs +2 -1
- package/dist/layouts/Container/index.cjs.map +1 -1
- package/dist/layouts/Container/index.d.cts +1 -1
- package/dist/layouts/Container/index.d.ts +1 -1
- package/dist/layouts/Container/index.js +1 -1
- package/dist/layouts/MultiColumn/index.cjs +5 -0
- package/dist/layouts/MultiColumn/index.d.cts +2 -0
- package/dist/layouts/MultiColumn/index.d.ts +2 -0
- package/dist/layouts/MultiColumn/index.js +2 -0
- package/dist/layouts/PageBackground/index.d.cts +1 -1
- package/dist/layouts/PageBackground/index.d.ts +1 -1
- package/dist/layouts/Stack/index.cjs +2 -1
- package/dist/layouts/Stack/index.cjs.map +1 -1
- package/dist/layouts/Stack/index.d.cts +1 -1
- package/dist/layouts/Stack/index.d.ts +1 -1
- package/dist/layouts/Stack/index.js +1 -1
- package/dist/layouts/TwoColumn/index.cjs +2 -1
- package/dist/layouts/TwoColumn/index.cjs.map +1 -1
- package/dist/layouts/TwoColumn/index.d.cts +1 -1
- package/dist/layouts/TwoColumn/index.d.ts +1 -1
- package/dist/layouts/TwoColumn/index.js +1 -1
- package/dist/layouts/index.cjs +4 -0
- package/dist/layouts/index.d.cts +6 -5
- package/dist/layouts/index.d.ts +6 -5
- package/dist/layouts/index.js +2 -1
- package/dist/patterns/DataTable/index.cjs +6 -2
- package/dist/patterns/DataTable/index.cjs.map +1 -1
- package/dist/patterns/DataTable/index.d.cts +3 -3
- package/dist/patterns/DataTable/index.d.cts.map +1 -1
- package/dist/patterns/DataTable/index.d.ts +3 -3
- package/dist/patterns/DataTable/index.d.ts.map +1 -1
- package/dist/patterns/DataTable/index.js +6 -2
- package/dist/patterns/DataTable/index.js.map +1 -1
- package/dist/patterns/Footer/index.d.cts +7 -7
- package/dist/patterns/Footer/index.d.cts.map +1 -1
- package/dist/patterns/Footer/index.d.ts +7 -7
- package/dist/patterns/Footer/index.d.ts.map +1 -1
- package/dist/patterns/Header/index.d.cts +1 -1
- package/dist/patterns/Header/index.d.ts +1 -1
- package/dist/patterns/MediaObject/index.cjs +1 -1
- package/dist/patterns/MediaObject/index.d.cts +14 -14
- package/dist/patterns/MediaObject/index.d.cts.map +1 -1
- package/dist/patterns/MediaObject/index.d.ts +12 -12
- package/dist/patterns/MediaObject/index.js +1 -1
- package/dist/patterns/NavRail/index.cjs +4 -2
- package/dist/patterns/NavRail/index.cjs.map +1 -1
- package/dist/patterns/NavRail/index.d.cts +1 -1
- package/dist/patterns/NavRail/index.d.ts +1 -1
- package/dist/patterns/NavRail/index.js +4 -2
- package/dist/patterns/NavRail/index.js.map +1 -1
- package/dist/patterns/SectionCard/index.d.cts +2 -2
- package/dist/patterns/SectionCard/index.d.cts.map +1 -1
- package/dist/patterns/SectionCard/index.d.ts +2 -2
- package/dist/patterns/SectionCard/index.d.ts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.cts +3 -3
- package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.ts +3 -3
- package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
- package/dist/patterns/index.d.cts +2 -2
- package/dist/patterns/index.d.ts +2 -2
- package/dist/primitives/Accordion/index.cjs +6 -2
- package/dist/primitives/Accordion/index.cjs.map +1 -1
- package/dist/primitives/Accordion/index.js +6 -2
- package/dist/primitives/Accordion/index.js.map +1 -1
- package/dist/primitives/Alert/index.cjs +2 -1
- package/dist/primitives/Alert/index.cjs.map +1 -1
- package/dist/primitives/Alert/index.js +1 -1
- package/dist/primitives/AlertDialog/index.cjs +1 -1
- package/dist/primitives/AlertDialog/index.js +1 -1
- package/dist/primitives/AspectRatio/index.cjs +1 -1
- package/dist/primitives/AspectRatio/index.js +1 -1
- package/dist/primitives/Avatar/index.cjs +1 -1
- package/dist/primitives/Avatar/index.js +1 -1
- package/dist/primitives/Badge/index.cjs +3 -2
- package/dist/primitives/Badge/index.cjs.map +1 -1
- package/dist/primitives/Badge/index.js +2 -2
- package/dist/primitives/Breadcrumb/index.cjs +7 -3
- package/dist/primitives/Breadcrumb/index.cjs.map +1 -1
- package/dist/primitives/Breadcrumb/index.js +7 -3
- package/dist/primitives/Breadcrumb/index.js.map +1 -1
- package/dist/primitives/Button/index.cjs +3 -2
- package/dist/primitives/Button/index.cjs.map +1 -1
- package/dist/primitives/Button/index.js +2 -2
- package/dist/primitives/ButtonGroup/index.cjs +3 -2
- package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
- package/dist/primitives/ButtonGroup/index.js +2 -2
- package/dist/primitives/Calendar/index.cjs +12 -11
- package/dist/primitives/Calendar/index.cjs.map +1 -1
- package/dist/primitives/Calendar/index.js +12 -11
- package/dist/primitives/Calendar/index.js.map +1 -1
- package/dist/primitives/Card/index.cjs +2 -1
- package/dist/primitives/Card/index.cjs.map +1 -1
- package/dist/primitives/Card/index.js +1 -1
- package/dist/primitives/Carousel/index.cjs +4 -3
- package/dist/primitives/Carousel/index.cjs.map +1 -1
- package/dist/primitives/Carousel/index.js +4 -3
- package/dist/primitives/Carousel/index.js.map +1 -1
- package/dist/primitives/Checkbox/index.cjs +10 -3
- package/dist/primitives/Checkbox/index.cjs.map +1 -1
- package/dist/primitives/Checkbox/index.d.cts +1 -1
- package/dist/primitives/Checkbox/index.d.ts +1 -1
- package/dist/primitives/Checkbox/index.js +10 -3
- package/dist/primitives/Checkbox/index.js.map +1 -1
- package/dist/primitives/CheckboxTree/index.cjs +6 -2
- package/dist/primitives/CheckboxTree/index.cjs.map +1 -1
- package/dist/primitives/CheckboxTree/index.d.cts +1 -1
- package/dist/primitives/CheckboxTree/index.d.ts +1 -1
- package/dist/primitives/CheckboxTree/index.js +6 -2
- package/dist/primitives/CheckboxTree/index.js.map +1 -1
- package/dist/primitives/CircularProgress/index.cjs +106 -0
- package/dist/primitives/CircularProgress/index.cjs.map +1 -0
- package/dist/primitives/CircularProgress/index.d.cts +2 -0
- package/dist/primitives/CircularProgress/index.d.ts +2 -0
- package/dist/primitives/CircularProgress/index.js +105 -0
- package/dist/primitives/CircularProgress/index.js.map +1 -0
- package/dist/primitives/Collapsible/index.cjs +1 -1
- package/dist/primitives/Collapsible/index.d.cts +1 -1
- package/dist/primitives/Collapsible/index.d.ts +1 -1
- package/dist/primitives/Collapsible/index.js +1 -1
- package/dist/primitives/Command/index.cjs +6 -2
- package/dist/primitives/Command/index.cjs.map +1 -1
- package/dist/primitives/Command/index.d.cts +1 -1
- package/dist/primitives/Command/index.d.ts +1 -1
- package/dist/primitives/Command/index.js +6 -2
- package/dist/primitives/Command/index.js.map +1 -1
- package/dist/primitives/ContextMenu/index.cjs +14 -4
- package/dist/primitives/ContextMenu/index.cjs.map +1 -1
- package/dist/primitives/ContextMenu/index.d.cts +1 -1
- package/dist/primitives/ContextMenu/index.d.ts +1 -1
- package/dist/primitives/ContextMenu/index.js +14 -4
- package/dist/primitives/ContextMenu/index.js.map +1 -1
- package/dist/primitives/Credits/index.cjs +8 -3
- package/dist/primitives/Credits/index.cjs.map +1 -1
- package/dist/primitives/Credits/index.d.cts +1 -1
- package/dist/primitives/Credits/index.d.ts +1 -1
- package/dist/primitives/Credits/index.js +7 -3
- package/dist/primitives/Credits/index.js.map +1 -1
- package/dist/primitives/Dialog/index.cjs +3 -2
- package/dist/primitives/Dialog/index.cjs.map +1 -1
- package/dist/primitives/Dialog/index.d.cts +1 -1
- package/dist/primitives/Dialog/index.d.ts +1 -1
- package/dist/primitives/Dialog/index.js +3 -2
- package/dist/primitives/Dialog/index.js.map +1 -1
- package/dist/primitives/Drawer/index.cjs +34 -2
- package/dist/primitives/Drawer/index.cjs.map +1 -1
- package/dist/primitives/Drawer/index.d.cts +1 -1
- package/dist/primitives/Drawer/index.d.ts +1 -1
- package/dist/primitives/Drawer/index.js +34 -2
- package/dist/primitives/Drawer/index.js.map +1 -1
- package/dist/primitives/DropdownMenu/index.cjs +14 -4
- package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
- package/dist/primitives/DropdownMenu/index.d.cts +1 -1
- package/dist/primitives/DropdownMenu/index.d.ts +1 -1
- package/dist/primitives/DropdownMenu/index.js +14 -4
- package/dist/primitives/DropdownMenu/index.js.map +1 -1
- package/dist/primitives/Empty/index.cjs +1 -1
- package/dist/primitives/Empty/index.d.cts +1 -1
- package/dist/primitives/Empty/index.d.ts +1 -1
- package/dist/primitives/Empty/index.js +1 -1
- package/dist/primitives/Field/index.cjs +1 -1
- package/dist/primitives/Field/index.d.cts +1 -1
- package/dist/primitives/Field/index.d.ts +1 -1
- package/dist/primitives/Field/index.js +1 -1
- package/dist/primitives/FileUpload/index.cjs +354 -0
- package/dist/primitives/FileUpload/index.cjs.map +1 -0
- package/dist/primitives/FileUpload/index.d.cts +2 -0
- package/dist/primitives/FileUpload/index.d.ts +2 -0
- package/dist/primitives/FileUpload/index.js +351 -0
- package/dist/primitives/FileUpload/index.js.map +1 -0
- package/dist/primitives/Form/index.cjs +1 -1
- package/dist/primitives/Form/index.d.cts +1 -1
- package/dist/primitives/Form/index.d.ts +1 -1
- package/dist/primitives/Form/index.js +1 -1
- package/dist/primitives/Heading/index.cjs +2 -1
- package/dist/primitives/Heading/index.cjs.map +1 -1
- package/dist/primitives/Heading/index.d.cts +1 -1
- package/dist/primitives/Heading/index.d.ts +1 -1
- package/dist/primitives/Heading/index.js +1 -1
- package/dist/primitives/HoverCard/index.cjs +1 -1
- package/dist/primitives/HoverCard/index.d.cts +1 -1
- package/dist/primitives/HoverCard/index.d.ts +1 -1
- package/dist/primitives/HoverCard/index.js +1 -1
- package/dist/primitives/Icon/index.d.cts +1 -1
- package/dist/primitives/Icon/index.d.ts +1 -1
- package/dist/primitives/InfoBanner/index.cjs +6 -3
- package/dist/primitives/InfoBanner/index.cjs.map +1 -1
- package/dist/primitives/InfoBanner/index.d.cts +1 -1
- package/dist/primitives/InfoBanner/index.d.ts +1 -1
- package/dist/primitives/InfoBanner/index.js +5 -3
- package/dist/primitives/InfoBanner/index.js.map +1 -1
- package/dist/primitives/Input/index.cjs +2 -1
- package/dist/primitives/Input/index.cjs.map +1 -1
- package/dist/primitives/Input/index.d.cts +1 -1
- package/dist/primitives/Input/index.d.ts +1 -1
- package/dist/primitives/Input/index.js +1 -1
- package/dist/primitives/InputGroup/index.cjs +1 -1
- package/dist/primitives/InputGroup/index.d.cts +1 -1
- package/dist/primitives/InputGroup/index.d.ts +1 -1
- package/dist/primitives/InputGroup/index.js +1 -1
- package/dist/primitives/InputOtp/index.cjs +3 -2
- package/dist/primitives/InputOtp/index.cjs.map +1 -1
- package/dist/primitives/InputOtp/index.d.cts +1 -1
- package/dist/primitives/InputOtp/index.d.ts +1 -1
- package/dist/primitives/InputOtp/index.js +3 -2
- package/dist/primitives/InputOtp/index.js.map +1 -1
- package/dist/primitives/Item/index.cjs +2 -2
- package/dist/primitives/Item/index.d.cts +1 -1
- package/dist/primitives/Item/index.d.ts +1 -1
- package/dist/primitives/Item/index.js +2 -2
- package/dist/primitives/Kbd/index.d.cts +1 -1
- package/dist/primitives/Kbd/index.d.ts +1 -1
- package/dist/primitives/Label/index.cjs +1 -1
- package/dist/primitives/Label/index.d.cts +1 -1
- package/dist/primitives/Label/index.d.ts +1 -1
- package/dist/primitives/Label/index.js +1 -1
- package/dist/primitives/Link/index.cjs +3 -2
- package/dist/primitives/Link/index.cjs.map +1 -1
- package/dist/primitives/Link/index.d.cts +1 -1
- package/dist/primitives/Link/index.d.ts +1 -1
- package/dist/primitives/Link/index.js +2 -2
- package/dist/primitives/Logo/index.d.cts +1 -1
- package/dist/primitives/Logo/index.d.ts +1 -1
- package/dist/primitives/Menubar/index.cjs +14 -4
- package/dist/primitives/Menubar/index.cjs.map +1 -1
- package/dist/primitives/Menubar/index.d.cts +1 -1
- package/dist/primitives/Menubar/index.d.ts +1 -1
- package/dist/primitives/Menubar/index.js +14 -4
- package/dist/primitives/Menubar/index.js.map +1 -1
- package/dist/primitives/Mosaic/index.cjs +4 -0
- package/dist/primitives/Mosaic/index.d.cts +2 -0
- package/dist/primitives/Mosaic/index.d.ts +2 -0
- package/dist/primitives/Mosaic/index.js +2 -0
- package/dist/primitives/NativeSelect/index.cjs +6 -3
- package/dist/primitives/NativeSelect/index.cjs.map +1 -1
- package/dist/primitives/NativeSelect/index.d.cts +1 -1
- package/dist/primitives/NativeSelect/index.d.ts +1 -1
- package/dist/primitives/NativeSelect/index.js +5 -3
- package/dist/primitives/NativeSelect/index.js.map +1 -1
- package/dist/primitives/NavRail/index.d.cts +2 -2
- package/dist/primitives/NavRail/index.d.ts +2 -2
- package/dist/primitives/NavigationMenu/index.cjs +5 -3
- package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
- package/dist/primitives/NavigationMenu/index.d.cts +1 -1
- package/dist/primitives/NavigationMenu/index.d.ts +1 -1
- package/dist/primitives/NavigationMenu/index.js +5 -3
- package/dist/primitives/NavigationMenu/index.js.map +1 -1
- package/dist/primitives/NotchedCard/index.cjs +390 -0
- package/dist/primitives/NotchedCard/index.cjs.map +1 -0
- package/dist/primitives/NotchedCard/index.d.cts +2 -0
- package/dist/primitives/NotchedCard/index.d.ts +2 -0
- package/dist/primitives/NotchedCard/index.js +385 -0
- package/dist/primitives/NotchedCard/index.js.map +1 -0
- package/dist/primitives/Pagination/index.cjs +6 -2
- package/dist/primitives/Pagination/index.cjs.map +1 -1
- package/dist/primitives/Pagination/index.d.cts +1 -1
- package/dist/primitives/Pagination/index.d.ts +1 -1
- package/dist/primitives/Pagination/index.js +6 -2
- package/dist/primitives/Pagination/index.js.map +1 -1
- package/dist/primitives/Popover/index.cjs +1 -1
- package/dist/primitives/Popover/index.d.cts +1 -1
- package/dist/primitives/Popover/index.d.ts +1 -1
- package/dist/primitives/Popover/index.js +1 -1
- package/dist/primitives/Progress/index.cjs +1 -1
- package/dist/primitives/Progress/index.d.cts +1 -1
- package/dist/primitives/Progress/index.d.ts +1 -1
- package/dist/primitives/Progress/index.js +1 -1
- package/dist/primitives/RadioGroup/index.cjs +7 -3
- package/dist/primitives/RadioGroup/index.cjs.map +1 -1
- package/dist/primitives/RadioGroup/index.d.cts +1 -1
- package/dist/primitives/RadioGroup/index.d.ts +1 -1
- package/dist/primitives/RadioGroup/index.js +7 -3
- package/dist/primitives/RadioGroup/index.js.map +1 -1
- package/dist/primitives/Resizable/index.cjs +6 -2
- package/dist/primitives/Resizable/index.cjs.map +1 -1
- package/dist/primitives/Resizable/index.d.cts +1 -1
- package/dist/primitives/Resizable/index.d.ts +1 -1
- package/dist/primitives/Resizable/index.js +6 -2
- package/dist/primitives/Resizable/index.js.map +1 -1
- package/dist/primitives/ScrollArea/index.cjs +1 -1
- package/dist/primitives/ScrollArea/index.d.cts +1 -1
- package/dist/primitives/ScrollArea/index.d.ts +1 -1
- package/dist/primitives/ScrollArea/index.js +1 -1
- package/dist/primitives/Select/index.cjs +18 -5
- package/dist/primitives/Select/index.cjs.map +1 -1
- package/dist/primitives/Select/index.d.cts +1 -1
- package/dist/primitives/Select/index.d.ts +1 -1
- package/dist/primitives/Select/index.js +18 -5
- package/dist/primitives/Select/index.js.map +1 -1
- package/dist/primitives/Separator/index.cjs +1 -1
- package/dist/primitives/Separator/index.js +1 -1
- package/dist/primitives/Sheet/index.cjs +40 -4
- package/dist/primitives/Sheet/index.cjs.map +1 -1
- package/dist/primitives/Sheet/index.d.cts +1 -1
- package/dist/primitives/Sheet/index.d.ts +1 -1
- package/dist/primitives/Sheet/index.js +40 -4
- package/dist/primitives/Sheet/index.js.map +1 -1
- package/dist/primitives/Sidebar/index.d.cts +1 -1
- package/dist/primitives/Sidebar/index.d.ts +1 -1
- package/dist/primitives/Skeleton/index.d.cts +1 -1
- package/dist/primitives/Skeleton/index.d.ts +1 -1
- package/dist/primitives/Slider/index.cjs +1 -1
- package/dist/primitives/Slider/index.d.cts +1 -1
- package/dist/primitives/Slider/index.d.ts +1 -1
- package/dist/primitives/Slider/index.js +1 -1
- package/dist/primitives/Sonner/index.cjs +22 -6
- package/dist/primitives/Sonner/index.cjs.map +1 -1
- package/dist/primitives/Sonner/index.d.cts +1 -1
- package/dist/primitives/Sonner/index.d.ts +1 -1
- package/dist/primitives/Sonner/index.js +22 -6
- package/dist/primitives/Sonner/index.js.map +1 -1
- package/dist/primitives/Spinner/index.cjs +4 -2
- package/dist/primitives/Spinner/index.cjs.map +1 -1
- package/dist/primitives/Spinner/index.d.cts +1 -1
- package/dist/primitives/Spinner/index.d.ts +1 -1
- package/dist/primitives/Spinner/index.js +4 -2
- package/dist/primitives/Spinner/index.js.map +1 -1
- package/dist/primitives/Switch/index.cjs +1 -1
- package/dist/primitives/Switch/index.d.cts +1 -1
- package/dist/primitives/Switch/index.d.ts +1 -1
- package/dist/primitives/Switch/index.js +1 -1
- package/dist/primitives/Table/index.d.cts +1 -1
- package/dist/primitives/Table/index.d.ts +1 -1
- package/dist/primitives/Tabs/index.cjs +2 -2
- package/dist/primitives/Tabs/index.d.cts +1 -1
- package/dist/primitives/Tabs/index.d.ts +1 -1
- package/dist/primitives/Tabs/index.js +2 -2
- package/dist/primitives/Text/index.cjs +2 -1
- package/dist/primitives/Text/index.cjs.map +1 -1
- package/dist/primitives/Text/index.d.cts +1 -1
- package/dist/primitives/Text/index.d.ts +1 -1
- package/dist/primitives/Text/index.js +1 -1
- package/dist/primitives/Textarea/index.cjs +2 -1
- package/dist/primitives/Textarea/index.cjs.map +1 -1
- package/dist/primitives/Textarea/index.d.cts +1 -1
- package/dist/primitives/Textarea/index.d.ts +1 -1
- package/dist/primitives/Textarea/index.js +1 -1
- package/dist/primitives/ThemeProvider/index.d.cts +1 -1
- package/dist/primitives/ThemeProvider/index.d.ts +1 -1
- package/dist/primitives/Toggle/index.cjs +3 -2
- package/dist/primitives/Toggle/index.cjs.map +1 -1
- package/dist/primitives/Toggle/index.d.cts +1 -1
- package/dist/primitives/Toggle/index.d.ts +1 -1
- package/dist/primitives/Toggle/index.js +2 -2
- package/dist/primitives/ToggleGroup/index.cjs +1 -1
- package/dist/primitives/ToggleGroup/index.d.cts +1 -1
- package/dist/primitives/ToggleGroup/index.d.ts +1 -1
- package/dist/primitives/ToggleGroup/index.js +1 -1
- package/dist/primitives/Tooltip/index.cjs +1 -1
- package/dist/primitives/Tooltip/index.d.cts +1 -1
- package/dist/primitives/Tooltip/index.d.ts +1 -1
- package/dist/primitives/Tooltip/index.js +1 -1
- package/dist/primitives/index.cjs +14 -3
- package/dist/primitives/index.d.cts +55 -51
- package/dist/primitives/index.d.ts +55 -51
- package/dist/primitives/index.js +8 -4
- package/package.json +2 -1
- package/dist/index47.d.cts.map +0 -1
- package/dist/index47.d.ts.map +0 -1
package/DESIGN.md
CHANGED
|
@@ -201,6 +201,21 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
201
201
|
- **Custom props**: `flipIcon` — moves leading icon to trailing edge (default `false`).
|
|
202
202
|
- **Notes**: `role="alert"`; compose `AlertContent` (title+description) with a leading `<svg>` and optional `AlertAction`. Not dismissible (use InfoBanner for that).
|
|
203
203
|
|
|
204
|
+
<!-- variant-facts:Alert:start — GENERATED by `pnpm docs:variants`; edit
|
|
205
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
206
|
+
|
|
207
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
208
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
209
|
+
|
|
210
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
211
|
+
|---|---|---|---|---|---|---|
|
|
212
|
+
| `default`\* | inline contextual notice inside the content flow | #ffffff → #111827 | #111827 → #f3f4f6 | — | — | white card with icon, neutral text |
|
|
213
|
+
| `destructive` | inline error notice tied to nearby content | #ffffff → #111827 | #bc0126 → #f699ac | — | — | red text on a white card (not a red band) |
|
|
214
|
+
|
|
215
|
+
Confusable: Alert vs InfoBanner vs toast → Alert = static notice inline in the content flow; InfoBanner = full-width severity band at page/section level; toast (sonner) = transient overlay.
|
|
216
|
+
|
|
217
|
+
<!-- variant-facts:Alert:end -->
|
|
218
|
+
|
|
204
219
|
### AlertDialog
|
|
205
220
|
- **Exports**: AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger
|
|
206
221
|
- **Variants**: AlertDialogContent `size: default* | large`; AlertDialogAction `variant: default* | destructive`
|
|
@@ -221,6 +236,30 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
221
236
|
- **Custom props**: `asChild` — render child element via Radix Slot (default `false`).
|
|
222
237
|
- **Notes**: Renders `<span>` by default; `ai` variant is a gradient ring with brand label.
|
|
223
238
|
|
|
239
|
+
<!-- variant-facts:Badge:start — GENERATED by `pnpm docs:variants`; edit
|
|
240
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
241
|
+
|
|
242
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
243
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
244
|
+
|
|
245
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
246
|
+
|---|---|---|---|---|---|---|
|
|
247
|
+
| `default`\* | high-emphasis label or count (new, selected filter, unread) | #111827 → #ffffff | #f3f4f6 → #111827 | hairline | — | the only filled high-contrast badge |
|
|
248
|
+
| `secondary` | neutral metadata label (category, tag, version) | #e5e7eb → #4b5563 | #374151 → #e5e7eb | hairline | — | quiet gray fill |
|
|
249
|
+
| `destructive` | error / blocking status | #fde6ea → #6c0016 | #bc0126 → #f699ac | hairline | — | red-tint fill + red text |
|
|
250
|
+
| `outline` | neutral label on busy/colored/glass surfaces | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) | #111827 → #f3f4f6 | #e5e7eb → #374151 | — | visible border, translucent fill |
|
|
251
|
+
| `ghost` | quietest label; inline counts | rgb(255 255 255 / 0.0001) → rgb(255 255 255 / 0.0001) | #111827 → #f3f4f6 | hairline | — | no visible fill — just padded text |
|
|
252
|
+
| `success` | positive status (done, active, healthy) | #ecfccb → #365314 | #4d7c0f → #bef264 | hairline | — | green tint |
|
|
253
|
+
| `warning` | caution status (pending, degraded) | #ffedd5 → #431407 | #c2410c → #fdba74 | hairline | — | orange tint |
|
|
254
|
+
| `info` | informational status (beta, new feature) | #e0f2fe → #0c4a6e | #0369a1 → #7dd3fc | hairline | — | blue tint |
|
|
255
|
+
| `ai` | AI-generated / AI-related markers only | — | #e90130 → #e90130 | — | — | gradient border, brand-colored text |
|
|
256
|
+
|
|
257
|
+
Confusable: Severity tints (`info`/`success`/`warning`/`destructive`) are for STATUS; `default`/`secondary` are for plain labels — don't color a neutral tag. `outline` vs `ghost` → outline keeps a visible border (busy/colored surfaces); ghost is text-only quietness.
|
|
258
|
+
|
|
259
|
+
**shape**: `default`\* 8px radius · `round` pill
|
|
260
|
+
|
|
261
|
+
<!-- variant-facts:Badge:end -->
|
|
262
|
+
|
|
224
263
|
### Breadcrumb
|
|
225
264
|
- **Exports**: Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis
|
|
226
265
|
- **Custom props**: BreadcrumbLink `asChild` — render passed child (e.g. router Link) instead of `<a>`.
|
|
@@ -232,12 +271,45 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
232
271
|
- **Custom props**: `asChild` — Radix Slot composition (default `false`); `loading` — show Spinner + disable (default `false`).
|
|
233
272
|
- **Notes**: forwardRef (usable as overlay trigger via `asChild`); spinner only rendered when not `asChild`.
|
|
234
273
|
|
|
274
|
+
<!-- variant-facts:Button:start — GENERATED by `pnpm docs:variants`; edit
|
|
275
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
276
|
+
|
|
277
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
278
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
279
|
+
|
|
280
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
281
|
+
|---|---|---|---|---|---|---|
|
|
282
|
+
| `default`\* | THE one main action of a view (submit, save, primary CTA) | #111827 → #ffffff | #f3f4f6 → #111827 | — | #374151 → #d1d5db | the only filled high-contrast button |
|
|
283
|
+
| `destructive` | irreversible action (delete, remove) | #fde6ea → #6c0016 | #bc0126 → #f699ac | — | #fde6ea @80% → #6c0016 @80% | red fill |
|
|
284
|
+
| `outline` | secondary action on busy/colored/glass surfaces | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) | #111827 → #f3f4f6 | #d1d5db → #374151 | rgb(31 40 50 / 0.0333) → rgb(255 255 255 / 0.1) | has a visible border |
|
|
285
|
+
| `secondary` | secondary action next to a primary | #ffffff → #111827 | #111827 → #f3f4f6 | — | #f9fafb → #111827 | filled but low-contrast, no border |
|
|
286
|
+
| `ghost` | low-emphasis: toolbars, icon rows, cancel | rgb(255 255 255 / 0.0001) → rgb(255 255 255 / 0.0001) | #111827 → #f3f4f6 | — | rgb(31 40 50 / 0.05) → rgb(255 255 255 / 0.1) | invisible at rest — only the label/icon shows |
|
|
287
|
+
| `link` | inline navigation styled as text | — | #111827 → #f3f4f6 | — | — | no box at all |
|
|
288
|
+
| `ai` | AI-powered affordances only | #ffffff → #111827 | #bc0126 → #fbccd6 | — | — | animated gradient border, brand-colored label |
|
|
289
|
+
| `destructive-ghost` | destructive icon buttons / low-emphasis delete | rgb(255 255 255 / 0.0001) → rgb(255 255 255 / 0.0001) | #bc0126 → #f699ac | — | #fde6ea → #6c0016 | red text without a red fill |
|
|
290
|
+
|
|
291
|
+
Confusable: `outline` vs `ghost` → outline has a border (survives on photos / colored bg); ghost is borderless (dense toolbars). `secondary` vs `outline` → secondary is a solid gray fill; outline is translucent with a border.
|
|
292
|
+
|
|
293
|
+
**size**: `xs` 30px · `sm` 36px · `default`\* 40px · `lg` 44px · `xl` 48px · `icon` 36px square · `icon-xs` 24px square · `icon-sm` 32px square · `icon-lg` 40px square · `icon-xl` 48px square
|
|
294
|
+
|
|
295
|
+
**shape**: `default`\* pill · `square` 6px radius
|
|
296
|
+
|
|
297
|
+
<!-- variant-facts:Button:end -->
|
|
298
|
+
|
|
235
299
|
### ButtonGroup
|
|
236
300
|
- **Exports**: ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants
|
|
237
301
|
- **Variants**: ButtonGroup `orientation: horizontal* | vertical`
|
|
238
302
|
- **Custom props**: ButtonGroupText `asChild` (default `false`).
|
|
239
303
|
- **Notes**: Merges child borders/corners into one attached unit; `role="group"`.
|
|
240
304
|
|
|
305
|
+
<!-- variant-facts:ButtonGroup:start — GENERATED by `pnpm docs:variants`; edit
|
|
306
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
**orientation**: `horizontal`\* · `vertical`
|
|
310
|
+
|
|
311
|
+
<!-- variant-facts:ButtonGroup:end -->
|
|
312
|
+
|
|
241
313
|
### Calendar
|
|
242
314
|
- **Exports**: Calendar, CalendarDayButton
|
|
243
315
|
- **Custom props**: `buttonVariant` — Button variant for prev/next nav (default `outline`); `showOutsideDays` (default `true`); `captionLayout` (default `label`, `dropdown` for month/year selects).
|
|
@@ -248,6 +320,25 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
248
320
|
- **Variants**: Card `variant: default* | glass | brand | ai | inverted`, `tint: subtle | light* | medium | heavy` (glass only); CardHeader `align: start | center* | end`; CardFooter `tone: default* | brand | muted | card`
|
|
249
321
|
- **Notes**: `tint` applies only to `variant="glass"`; footer `brand`/`muted`/`card` render a full-width band — pair with `<Card className="overflow-hidden">`. Card defaults to `justify-between` vertical distribution (overridable via className).
|
|
250
322
|
|
|
323
|
+
<!-- HAND-WRITTEN choosing table (compoundVariants — not generated; keep in sync with cardVariants). -->
|
|
324
|
+
|
|
325
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
326
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
327
|
+
|
|
328
|
+
| variant | use when | looks like | tell |
|
|
329
|
+
|---|---|---|---|
|
|
330
|
+
| `default`\* | standard content container on plain page chrome | opaque `#ffffff → #111827`, hairline border, shadow-sm | solid card with border + shadow |
|
|
331
|
+
| `glass` | card floating over `PageBackground` / imagery | translucent white → translucent dark-navy, backdrop-blurred; `tint` sets opacity | see-through + blurred, borderless |
|
|
332
|
+
| `brand` | promotional / product-branded surface | left→right brand gradient (`--theme-brand-700` → `-500`), white text — does **not** flip in dark mode | colorful gradient fill |
|
|
333
|
+
| `ai` | AI feature surface | normal surface wrapped in the gradient AI ring | gradient border, normal inside |
|
|
334
|
+
| `inverted` | contrast block (CTA band, spotlight) | dark card in light mode `#111827`, light card in dark `#ffffff` | opposite of the page |
|
|
335
|
+
|
|
336
|
+
**tint** (glass only): `subtle` 20% · `light`\* 40% · `medium` 40% (no 50% token yet) · `heavy` 60%.
|
|
337
|
+
|
|
338
|
+
Confusable: `default` vs `glass` → default is opaque with border+shadow; glass is
|
|
339
|
+
translucent+blurred with no border, and needs a textured layer behind it
|
|
340
|
+
(`PageBackground`) to read as glass.
|
|
341
|
+
|
|
251
342
|
### Carousel
|
|
252
343
|
- **Exports**: CarouselApi (type), Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext
|
|
253
344
|
- **Custom props**: `opts` (Embla options), `plugins`, `orientation: horizontal* | vertical`, `setApi` (receives Embla API).
|
|
@@ -269,6 +360,12 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
269
360
|
- **Custom props**: `nodes` (hierarchical `{id, label, children}` data); `value` (controlled selected ids, required); `onValueChange`; `defaultExpandedIds`.
|
|
270
361
|
- **Notes**: Controlled only; tri-state propagation across subtrees; `role="tree"`. This is the DS answer to hierarchical multi-select.
|
|
271
362
|
|
|
363
|
+
### CircularProgress
|
|
364
|
+
- **Exports**: CircularProgress, CircularProgressProps (type), CircularProgressVariant (type)
|
|
365
|
+
- **Variants**: `variant: default* | brand | success | warning | info | destructive | analyzing | ingesting` (indicator stroke); `trackVariant` — same scale for the track (defaults to `variant`, rendered at /20 opacity)
|
|
366
|
+
- **Custom props**: `value` (omit → indeterminate spinning arc), `min`/`max` (aria/value normalization, default 0/100), `size` (diameter px, default `48`), `strokeWidth` (px, default `4`), `progressColor`/`trackColor` (explicit CSS colours, override the variant classes), `label` (centered node), `showValueLabel` (centered `%` text when determinate, default `false`), `indeterminateLabel` (a11y text for loading state, default `Loading`).
|
|
367
|
+
- **Notes**: `role="progressbar"` with normalized aria values and a polite live region. Determinate animates stroke-dashoffset (500ms, motion-reduce respected); indeterminate spins a 35% arc (`motion-safe`). Circular counterpart to the linear `Progress` bar.
|
|
368
|
+
|
|
272
369
|
### Collapsible
|
|
273
370
|
- **Exports**: Collapsible, CollapsibleTrigger, CollapsibleContent
|
|
274
371
|
- **Notes**: Radix Collapsible passthrough (controlled/uncontrolled via `open`/`defaultOpen`); no styling applied.
|
|
@@ -290,6 +387,20 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
290
387
|
- **Custom props**: `value` (balance, required); `lowThreshold` (default `200`); `icon` override; `format` override (default floor+thousands).
|
|
291
388
|
- **Notes**: Color escalates as balance drops (neutral → amber ≤ threshold → red ≤ 0).
|
|
292
389
|
|
|
390
|
+
<!-- variant-facts:Credits:start — GENERATED by `pnpm docs:variants`; edit
|
|
391
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
392
|
+
|
|
393
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
394
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
395
|
+
|
|
396
|
+
| variant | fill | text | border | hover fill |
|
|
397
|
+
|---|---|---|---|---|
|
|
398
|
+
| `default`\* | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) | #111827 → #f3f4f6 | #e5e7eb → #374151 | — |
|
|
399
|
+
| `warning` | #ffedd5 → #431407 | #c2410c → #fdba74 | hairline | — |
|
|
400
|
+
| `critical` | #fde6ea → #6c0016 | #bc0126 → #f699ac | hairline | — |
|
|
401
|
+
|
|
402
|
+
<!-- variant-facts:Credits:end -->
|
|
403
|
+
|
|
293
404
|
### Dialog
|
|
294
405
|
- **Exports**: Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger
|
|
295
406
|
- **Variants**: DialogContent `size: sm | default* | lg | xl`
|
|
@@ -298,7 +409,8 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
298
409
|
|
|
299
410
|
### Drawer
|
|
300
411
|
- **Exports**: Drawer, DrawerPortal, DrawerOverlay, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription
|
|
301
|
-
- **
|
|
412
|
+
- **Variants**: DrawerContent `size: small | default* | medium | large | extraLarge`
|
|
413
|
+
- **Notes**: Built on `vaul`; slide `direction` (top/bottom/left/right) set on the `Drawer` root. `DrawerContent` self-portals + renders overlay; bottom drawer shows a drag handle. `size` scales the panel per direction — left/right width caps: `small` xs (20rem) · `default` sm (24rem) · `medium` md (28rem) · `large` lg (32rem) · `extraLarge` 2xl (42rem); top/bottom max-heights: 60 / 80 / 85 / 90 / 95vh. Prefer `size` over a width/height `className` override.
|
|
302
414
|
|
|
303
415
|
### DropdownMenu
|
|
304
416
|
- **Exports**: DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent
|
|
@@ -317,6 +429,11 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
317
429
|
- **Custom props**: FieldError accepts `errors` array (deduped, listed when >1) or `children`; FieldSeparator optional centered label.
|
|
318
430
|
- **Notes**: Layout primitives for forms (non-react-hook-form); `FieldError` is `role="alert"` and renders nothing when empty.
|
|
319
431
|
|
|
432
|
+
### FileUpload
|
|
433
|
+
- **Exports**: FileUpload, FileUploadHandler (type), FileUploadItem (type), FileUploadProps (type), FileUploadStatus (type)
|
|
434
|
+
- **Custom props**: `multiple` (default `false`); `accept` — native accept filter (e.g. `"image/*,.pdf"`); `maxFiles` (default unlimited when `multiple`, `1` otherwise); `maxFileSize` — bytes, oversized files rejected with a message; `validateFile` — custom validator, return a message to reject or `null` to accept; `onUpload` — async handler per accepted file, receives `{ file, signal, reportProgress }`; `onItemsChange` — fires whenever file entries change (added/progress/completed/removed); `dropzoneAriaLabel` (default `"File upload drop zone"`); `disabled`.
|
|
435
|
+
- **Notes**: Click-to-browse + drag-and-drop dropzone with per-file states (`idle | uploading | success | error`), progress bars, and remove/cancel controls. Wire real uploads via `onUpload` — call `reportProgress(0–100)` as bytes stream and throw to mark the file failed; the `signal` aborts when the user cancels/removes. Validation errors (accept/size/custom/maxFiles) render in an `aria-live` list under the dropzone.
|
|
436
|
+
|
|
320
437
|
### Form
|
|
321
438
|
- **Exports**: useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField
|
|
322
439
|
- **Notes**: react-hook-form binding layer over the Field primitives; `Form` = RHF `FormProvider`, `FormField` wraps `Controller`. `FormControl` wires id/aria-describedby/aria-invalid via Slot; must be used within `FormField`/`FormItem`.
|
|
@@ -327,6 +444,25 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
327
444
|
- **Custom props**: `as` — semantic element (default `h2`, independent of visual `size`).
|
|
328
445
|
- **Notes**: `gradient` fills text with the brand gradient.
|
|
329
446
|
|
|
447
|
+
<!-- variant-facts:Heading:start — GENERATED by `pnpm docs:variants`; edit
|
|
448
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
449
|
+
|
|
450
|
+
**Choosing a `gradient`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
451
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
452
|
+
|
|
453
|
+
| gradient | fill | text | border | hover fill |
|
|
454
|
+
|---|---|---|---|---|
|
|
455
|
+
| `true` | — | — | — | — |
|
|
456
|
+
| `false`\* | — | #111827 → #f3f4f6 | — | — |
|
|
457
|
+
|
|
458
|
+
**size**: `1` · `2`\* · `3` · `4` · `5` · `6` · `7`
|
|
459
|
+
|
|
460
|
+
**weight**: `normal` · `medium` · `semibold`
|
|
461
|
+
|
|
462
|
+
**align**: `left` · `center` · `right`
|
|
463
|
+
|
|
464
|
+
<!-- variant-facts:Heading:end -->
|
|
465
|
+
|
|
330
466
|
### HoverCard
|
|
331
467
|
- **Exports**: HoverCard, HoverCardTrigger, HoverCardContent
|
|
332
468
|
- **Custom props**: HoverCardContent `align` (default `center`), `sideOffset` (default `4`).
|
|
@@ -335,8 +471,10 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
335
471
|
### Icon
|
|
336
472
|
- **Exports**: Icon, IconProps (type), IconName (type), ICON_NAMES
|
|
337
473
|
- **Variants**: `color: default* | muted | primary | success | destructive | inverted`, `shape: square | round` (unset = bare glyph), `fill: subtle* | solid` (boxed only), `size: xs | sm | md* | lg | xl`
|
|
338
|
-
- **
|
|
339
|
-
- **
|
|
474
|
+
- **Glyph source (pass exactly one)**: `icon` — a typed lucide NAME string (`<Icon icon="search" />`), lazily code-split one chunk per icon; best for app/content icons chosen at runtime. `as` — an icon COMPONENT, lucide **or your own custom icon** (`<Icon as={Search} />`), rendered synchronously and, when un-boxed, as a bare `<svg>` so it drops into a component's direct-child `[&>svg]` slot styling; best inside components and for static/custom icons.
|
|
475
|
+
- **Custom props**: `strokeWidth`; `label` — a11y label (sets `role="img"`, else aria-hidden).
|
|
476
|
+
- **Color**: `color="default"` **inherits** the surrounding text color (currentColor — deliberately no `text-*` class, so guarded slot rules like Select's `[&_svg:not([class*='text-'])]` still apply) — a bare icon on a Button matches the label instead of forcing a dark glyph on a dark surface. On normal chrome it still resolves to `text-primary-txt` (via `<body>`). Override with a semantic `color` or a `text-*` className.
|
|
477
|
+
- **Notes**: `shape` wraps the glyph in a padded box where `fill`/`color` apply. Existing `icon="name"` usage is unchanged — `as` is purely additive.
|
|
340
478
|
|
|
341
479
|
### InfoBanner
|
|
342
480
|
- **Exports**: InfoBanner, infoBannerVariants, InfoBannerProps (type)
|
|
@@ -344,11 +482,48 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
344
482
|
- **Custom props**: `title` (required); `description`; `icon` override; `dismissible` (default `true`); `visible` (controlled); `onDismiss`.
|
|
345
483
|
- **Notes**: `role="status"`; dismissible — distinct from the non-dismissible Alert.
|
|
346
484
|
|
|
485
|
+
<!-- variant-facts:InfoBanner:start — GENERATED by `pnpm docs:variants`; edit
|
|
486
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
487
|
+
|
|
488
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
489
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
490
|
+
|
|
491
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
492
|
+
|---|---|---|---|---|---|---|
|
|
493
|
+
| `info`\* | announcements, tips, FYI messaging | #e0f2fe → #0c4a6e | #0369a1 → #7dd3fc | — | — | blue band |
|
|
494
|
+
| `success` | operation completed / healthy state | #ecfccb → #365314 | #4d7c0f → #bef264 | — | — | green band |
|
|
495
|
+
| `warning` | caution or degraded state, action may be needed | #ffedd5 → #431407 | #c2410c → #fdba74 | — | — | orange band |
|
|
496
|
+
| `error` | failure that needs attention | #fde6ea → #6c0016 | #bc0126 → #f699ac | — | — | red band |
|
|
497
|
+
| `neutral` | generic notice with no severity | #f3f4f6 → #111827 | #111827 → #f3f4f6 | — | — | gray band |
|
|
498
|
+
|
|
499
|
+
Confusable: InfoBanner vs Alert → banner is a full-width severity band at page/section level; Alert sits inline in the content flow.
|
|
500
|
+
|
|
501
|
+
<!-- variant-facts:InfoBanner:end -->
|
|
502
|
+
|
|
347
503
|
### Input
|
|
348
504
|
- **Exports**: Input, inputVariants
|
|
349
505
|
- **Variants**: `variant: default* | ai`, `size: xs | sm | default* | lg`, `shape: default* (12px) | round (pill)`
|
|
350
506
|
- **Notes**: Native `<input>` passthrough; `ai` swaps border for the AI gradient; `aria-invalid` triggers the error ring.
|
|
351
507
|
|
|
508
|
+
<!-- variant-facts:Input:start — GENERATED by `pnpm docs:variants`; edit
|
|
509
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
510
|
+
|
|
511
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
512
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
513
|
+
|
|
514
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
515
|
+
|---|---|---|---|---|---|---|
|
|
516
|
+
| `default`\* | any standard text entry | #ffffff → #1f2832 | — | #e5e7eb → #374151 | — | white fill, gray hairline border |
|
|
517
|
+
| `ai` | AI prompt / ask-anything fields only | — | — | — | — | gradient AI border |
|
|
518
|
+
|
|
519
|
+
Confusable: `ai` is reserved for AI prompt fields — a normal field with AI autofill is still `default`.
|
|
520
|
+
|
|
521
|
+
**size**: `xs` 24px · `sm` 32px · `default`\* 36px · `lg` 40px
|
|
522
|
+
|
|
523
|
+
**shape**: `default`\* 12px radius · `round` pill
|
|
524
|
+
|
|
525
|
+
<!-- variant-facts:Input:end -->
|
|
526
|
+
|
|
352
527
|
### InputGroup
|
|
353
528
|
- **Exports**: InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea
|
|
354
529
|
- **Variants**: InputGroup `variant: default* | ai`; InputGroupAddon `align: inline-start* | inline-end | block-start | block-end`; InputGroupButton `size: xs* | sm | icon-xs | icon-sm`
|
|
@@ -380,6 +555,22 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
380
555
|
- **Variants**: `variant: default* | muted | subtle`, `underline: always* | hover`
|
|
381
556
|
- **Custom props**: `asChild` — render a router link instead of `<a>` (default `false`).
|
|
382
557
|
|
|
558
|
+
<!-- variant-facts:Link:start — GENERATED by `pnpm docs:variants`; edit
|
|
559
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
560
|
+
|
|
561
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
562
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
563
|
+
|
|
564
|
+
| variant | fill | text | border | hover fill |
|
|
565
|
+
|---|---|---|---|---|
|
|
566
|
+
| `default`\* | — | #111827 @80% → #f3f4f6 @80% | — | — |
|
|
567
|
+
| `muted` | — | #111827 → #f3f4f6 | — | — |
|
|
568
|
+
| `subtle` | — | #111827 @80% → #f3f4f6 @80% | — | — |
|
|
569
|
+
|
|
570
|
+
**underline**: `always`\* · `hover`
|
|
571
|
+
|
|
572
|
+
<!-- variant-facts:Link:end -->
|
|
573
|
+
|
|
383
574
|
### Logo
|
|
384
575
|
- **Exports**: Logo, LogoBrand (type), LogoVariant (type)
|
|
385
576
|
- **Variants**: `variant: logo* | icon`
|
|
@@ -392,16 +583,35 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
392
583
|
- **Custom props**: Item/Label/SubTrigger `inset` (default `false`)
|
|
393
584
|
- **Notes**: Radix Menubar; content self-portals; auto-indents plain items when checkbox/radio items present.
|
|
394
585
|
|
|
586
|
+
### Mosaic
|
|
587
|
+
- **Exports**: Mosaic, MosaicWindow, MosaicProps (type), MosaicWindowProps (type), and tree types re-exported from Mosaic.utils: MosaicNode, MosaicParent, MosaicKey, MosaicDirection, MosaicPath, DropZone
|
|
588
|
+
- **Custom props**: `value` / `defaultValue` — the pane tree, controlled or uncontrolled (`MosaicNode<T>` = leaf id `T` or `{ direction: "row" | "column", first, second, splitPercentage? }`); `onChange` — fires with the updated tree after resize/split/remove/drag (no strict veto); `renderTile` — renders a leaf's content (required); `renderTitle` — pane toolbar title (default `String(id)`); `renderControls` — extra toolbar actions after split/remove; `createNode` — id factory for toolbar splits (required); `dragToRearrange` (default `true`); `dropZoneFraction` — edge-zone fraction 0–1 (default `0.25`); `minPaneSizePercentage` (default `10`); `emptyPlaceholder` — rendered when every pane is removed; `renamable` (default `false`) — pencil button + double-click title to rename a pane in place; `paneNames` / `defaultPaneNames` / `onPaneNamesChange` — custom pane names keyed by leaf id, controlled or uncontrolled.
|
|
589
|
+
- **Notes**: Recursive tiling layout (react-mosaic-style) built on the DS Resizable panels: panes split into rows/columns, resize via draggable dividers, and rearrange by dragging a pane's title bar onto another pane's edge (splits there) or center (swaps). Every drag outcome is also reachable via each pane's keyboard-operable toolbar split/remove buttons. `useMosaic` is intentionally not exported — `MosaicWindow` is the supported extension point.
|
|
590
|
+
|
|
395
591
|
### NativeSelect
|
|
396
592
|
- **Exports**: NativeSelect, nativeSelectVariants
|
|
397
593
|
- **Variants**: `size: xs | sm | default* | lg`
|
|
398
594
|
- **Notes**: Styled native `<select>` with chevron affordance; pass `<option>`/`<optgroup>` children; mirrors Input visuals.
|
|
399
595
|
|
|
596
|
+
<!-- variant-facts:NativeSelect:start — GENERATED by `pnpm docs:variants`; edit
|
|
597
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
**size**: `xs` 24px · `sm` 32px · `default`\* 36px · `lg` 40px
|
|
601
|
+
|
|
602
|
+
<!-- variant-facts:NativeSelect:end -->
|
|
603
|
+
|
|
400
604
|
### NavigationMenu
|
|
401
605
|
- **Exports**: NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle
|
|
402
606
|
- **Custom props**: NavigationMenu `viewport` (default `true` — shared animated viewport; `false` renders content inline)
|
|
403
607
|
- **Notes**: Radix NavigationMenu; `NavigationMenuLink` takes `active` to mark the current page.
|
|
404
608
|
|
|
609
|
+
### NotchedCard
|
|
610
|
+
- **Exports**: NotchedCard, buildNotchedCardPath, notchedCardVariants, NotchedCardProps (type), NotchedCardVariant (type)
|
|
611
|
+
- **Variants**: `variant: default* | muted | glass | brand | inverted` (surface fill + inherited text colour)
|
|
612
|
+
- **Custom props**: `topLeftComponent` / `topRightComponent` / `bottomLeftComponent` / `bottomRightComponent` (corner slots — each occupied corner notches the background around its content), `backgroundImage` (cover image inside the clipped surface), `backgroundImageOpacity` (default `0.8`), `radius` (px, default `16`), `notchRadius` (concave fillet px, default `12`), `notchGap` (gutter px between corner content and background edge, default `12`), `padding` (px, default `24`), `avoidNotches` (default `true` — float spacers with `shape-outside` keep flowing content wrapped around the cutouts; set `false` when `contentClassName` makes the wrapper flex/grid, floats have no effect there), `bordered` (default on for `default`/`muted`, off otherwise), `backgroundClassName` (classes for the clipped background layer — put custom `bg-*`/gradient fills here, NOT in `className`; the layer sits behind the content so hover fills need `group-hover:bg-*`, keyed off the root's `group` marker), `contentClassName`
|
|
613
|
+
- **Notes**: With no corner content it renders a plain rounded rectangle (no clipping/measuring). Corner sizes are tracked with ResizeObserver, so slots can be any content — text, icons, buttons, clusters. `className` styles the root (size/placement); the surface fill lives on an inner clipped layer, hence `backgroundClassName`. Outline is an SVG stroke following the notches (`primary-border`); surface shadow is a drop-shadow filter (box-shadow would be clipped away).
|
|
614
|
+
|
|
405
615
|
### Pagination
|
|
406
616
|
- **Exports**: Pagination, PaginationContent, PaginationLink, PaginationItem, PaginationPrevious, PaginationNext, PaginationEllipsis
|
|
407
617
|
- **Custom props**: PaginationLink `isActive` (aria-current; default `false`), `size` (default `icon`)
|
|
@@ -416,7 +626,7 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
416
626
|
- **Exports**: Progress
|
|
417
627
|
- **Variants**: `variant: default* | brand | success | warning | info | destructive | analyzing | ingesting`
|
|
418
628
|
- **Custom props**: `value` (omit/null → indeterminate sliding segment)
|
|
419
|
-
- **Notes**: Radix Progress; variant sets both track and indicator colors.
|
|
629
|
+
- **Notes**: Radix Progress; variant sets both track and indicator colors. Radial counterpart: `CircularProgress`.
|
|
420
630
|
|
|
421
631
|
### RadioGroup
|
|
422
632
|
- **Exports**: RadioGroup, RadioGroupItem, RichRadioItem
|
|
@@ -447,15 +657,30 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
447
657
|
|
|
448
658
|
### Sheet
|
|
449
659
|
- **Exports**: Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription
|
|
450
|
-
- **Variants**: SheetContent `side: top | right* | bottom | left`, `overlay: default* | dark | glass | none`
|
|
660
|
+
- **Variants**: SheetContent `side: top | right* | bottom | left`, `overlay: default* | dark | glass | none`, `size: small | default* | medium | large | extraLarge`
|
|
451
661
|
- **Custom props**: SheetContent `showCloseButton` (default `true`)
|
|
452
|
-
- **Notes**: Radix Dialog under the hood; content self-portals with overlay; radius on the inward edge only.
|
|
662
|
+
- **Notes**: Radix Dialog under the hood; content self-portals with overlay; radius on the inward edge only. `size` scales the panel per side — left/right width caps: `small` xs (20rem) · `default` sm (24rem) · `medium` md (28rem) · `large` lg (32rem) · `extraLarge` 2xl (42rem); top/bottom heights: 40vh / auto (content) / 60vh / 80vh / 95vh. Prefer `size` over a width/height `className` override.
|
|
453
663
|
|
|
454
664
|
### Sidebar
|
|
455
665
|
- **Exports**: Sidebar, SidebarProvider, SidebarTrigger, SidebarRail, SidebarInset, SidebarInput, SidebarHeader, SidebarFooter, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarGroupAction, SidebarGroupContent, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuAction, SidebarMenuBadge, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubItem, SidebarMenuSubButton, SidebarSeparator, useSidebar
|
|
456
666
|
- **Variants**: Sidebar `side: left* | right`, `variant: sidebar* | floating | inset`, `collapsible: offcanvas* | icon | none`
|
|
457
667
|
- **Notes**: Wrap the layout in `SidebarProvider` (owns open state, cookie persistence, and the keyboard shortcut); renders as a fixed desktop rail or a mobile Sheet. `useSidebar()` must be inside the provider. For a compact app rail prefer `NavRail`.
|
|
458
668
|
|
|
669
|
+
<!-- variant-facts:Sidebar:start — GENERATED by `pnpm docs:variants`; edit
|
|
670
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
671
|
+
|
|
672
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
673
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
674
|
+
|
|
675
|
+
| variant | fill | text | border | hover fill |
|
|
676
|
+
|---|---|---|---|---|
|
|
677
|
+
| `default`\* | — | #111827 → #f3f4f6 | — | #e5e7eb @50% → #4b5563 @50% |
|
|
678
|
+
| `outline` | #ffffff → #111827 | #111827 → #f3f4f6 | — | #e5e7eb @50% → #4b5563 @50% |
|
|
679
|
+
|
|
680
|
+
**size**: `default`\* 32px · `sm` 28px · `lg` 48px
|
|
681
|
+
|
|
682
|
+
<!-- variant-facts:Sidebar:end -->
|
|
683
|
+
|
|
459
684
|
### Skeleton
|
|
460
685
|
- **Exports**: Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject
|
|
461
686
|
- **Notes**: `skeleton-shimmer` divs; presets: Avatar (size-10 round), Line (h-4 full), Object (96px block).
|
|
@@ -491,17 +716,79 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
491
716
|
- **Custom props**: TabsList `tabPrefix`/`tabSuffix` (nodes)
|
|
492
717
|
- **Notes**: Set variant/size/orientation on the root only (shared via context). `segmented` has an animated sliding indicator; `fancy` merges the active tab into the TabsContent glass panel.
|
|
493
718
|
|
|
719
|
+
<!-- HAND-WRITTEN choosing table (compoundVariants — not generated; keep in sync with tabsListVariants/tabsTriggerVariants). -->
|
|
720
|
+
|
|
721
|
+
**Choosing a `variant`** — never re-skin a variant with paint classes (SKILL.md →
|
|
722
|
+
"Never re-skin a variant").
|
|
723
|
+
|
|
724
|
+
| variant | use when | looks like | tell |
|
|
725
|
+
|---|---|---|---|
|
|
726
|
+
| `line` | quiet content-section switching inside a page | plain text row; 2px underline slides beneath the active tab | underline only, no fills |
|
|
727
|
+
| `pill`\* | default control-style switching | track row; active tab is a raised solid pill (`#ffffff → #111827` fill + shadow) | active tab looks like a pressed pill |
|
|
728
|
+
| `segmented` | tight toggle-group of 2–5 short options | track with ONE animated indicator that slides behind triggers | single sliding thumb |
|
|
729
|
+
| `fancy` | hero/login compositions on glass — tab cards that merge into the panel | translucent gradient tab cards (glass 60→20 vertical); the active card turns flat-bottomed and fuses into the glass `TabsContent` panel with concave 16px corner curves | card-shaped tabs joined to their panel |
|
|
730
|
+
|
|
731
|
+
**size** — track heights (`pill`/`segmented`, horizontal): `sm` 24px · `md`\* 35px ·
|
|
732
|
+
`lg` 40px. `fancy` trigger padding: `sm` 8/16px (text-sm) · `md` 12/24px (text-sm) ·
|
|
733
|
+
`lg` 16/24px (text-base) — an `lg` fancy tab card runs ≈56px tall.
|
|
734
|
+
|
|
735
|
+
Confusable: `pill` vs `segmented` → both are tracks, but segmented animates one
|
|
736
|
+
shared indicator while pill styles the active trigger itself. `fancy` is only for
|
|
737
|
+
glass compositions (needs `PageBackground` behind it); everywhere else pick one of
|
|
738
|
+
the other three.
|
|
739
|
+
|
|
494
740
|
### Text
|
|
495
741
|
- **Exports**: Text, textVariants, TextProps (type)
|
|
496
742
|
- **Variants**: `size: large | regular* | small | mini | caption`, `weight: normal* | medium | semibold`, `variant: default* | muted | primary | destructive | success`, `font: body* | heading | mono`, `align: left | center | right`, `truncate: true`
|
|
497
743
|
- **Custom props**: `as` (default `p`)
|
|
498
744
|
- **Notes**: Body-copy primitive; sizes map to the paragraph type-scale tokens.
|
|
499
745
|
|
|
746
|
+
<!-- variant-facts:Text:start — GENERATED by `pnpm docs:variants`; edit
|
|
747
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
748
|
+
|
|
749
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
750
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
751
|
+
|
|
752
|
+
| variant | fill | text | border | hover fill |
|
|
753
|
+
|---|---|---|---|---|
|
|
754
|
+
| `default`\* | — | #111827 → #f3f4f6 | — | — |
|
|
755
|
+
| `muted` | — | #6b7280 → #9ca3af | — | — |
|
|
756
|
+
| `primary` | — | #111827 → #f3f4f6 | — | — |
|
|
757
|
+
| `destructive` | — | #bc0126 → #f699ac | — | — |
|
|
758
|
+
| `success` | — | #4d7c0f → #bef264 | — | — |
|
|
759
|
+
|
|
760
|
+
**size**: `large` · `regular`\* · `small` · `mini` · `caption`
|
|
761
|
+
|
|
762
|
+
**weight**: `normal`\* · `medium` · `semibold`
|
|
763
|
+
|
|
764
|
+
**font**: `body`\* · `heading` · `mono`
|
|
765
|
+
|
|
766
|
+
**align**: `left` · `center` · `right`
|
|
767
|
+
|
|
768
|
+
**truncate**: `true`
|
|
769
|
+
|
|
770
|
+
<!-- variant-facts:Text:end -->
|
|
771
|
+
|
|
500
772
|
### Textarea
|
|
501
773
|
- **Exports**: Textarea, textareaVariants
|
|
502
774
|
- **Variants**: `variant: default* | ai` (gradient border), `shape: default* (12px) | round (16px)`
|
|
503
775
|
- **Notes**: Auto-grows via `field-sizing-content`; chrome matches Input; supports aria-invalid.
|
|
504
776
|
|
|
777
|
+
<!-- variant-facts:Textarea:start — GENERATED by `pnpm docs:variants`; edit
|
|
778
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
779
|
+
|
|
780
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
781
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
782
|
+
|
|
783
|
+
| variant | fill | text | border | hover fill |
|
|
784
|
+
|---|---|---|---|---|
|
|
785
|
+
| `default`\* | #ffffff → #1f2832 | — | #e5e7eb → #374151 | — |
|
|
786
|
+
| `ai` | — | — | — | — |
|
|
787
|
+
|
|
788
|
+
**shape**: `default`\* 12px radius · `round` 16px radius
|
|
789
|
+
|
|
790
|
+
<!-- variant-facts:Textarea:end -->
|
|
791
|
+
|
|
505
792
|
### ThemeProvider
|
|
506
793
|
- **Exports**: ThemeProvider, useTheme, ThemeContext, ThemeMode (type), ThemeProduct (type)
|
|
507
794
|
- **Custom props**: `defaultTheme: light* | dark`, `defaultProduct: slingshot* | sustain | bodhi | psai`, `storageKey` (default `ds-theme-preferences`)
|
|
@@ -537,8 +824,8 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
537
824
|
|
|
538
825
|
### Header
|
|
539
826
|
- **Exports**: `Header` (wired), `HeaderBar`, `HeaderLogo`, `OrgPill`, `ProfileMenu`, `ThemeToggle`, `ProjectPicker`; hooks/data layer `useGlobalHeader`, `useHeaderCredits`, `useHeaderProject`, `getSessionToken`, `getSessionClaims`, `isSessionValid`, `buildEndpoints`, `DEFAULT_LABELS`; consts/types `TOGGLE_PROJECT_DROPDOWN_EVENT`, `GlobalHeaderState`, `ToggleProjectDropdownDetail`, `HeaderSelection`, `UseHeaderProjectResult`, `Labels`, `Fetcher`, `HeaderEndpoints`, `HeaderProps`, `ProjectNode`, `SessionClaims`
|
|
540
|
-
- **Custom props** (HeaderProps): `apiBaseUrl` — studio-auth API host (required); `environmentId` — reads `{environmentId}-sessionId` cookie (required); `logoType` — ThemeProduct, defaults to active product; `logoHref` — logo link destination (defaults to the product's public site); `showOrg`/`showProjectDropdown`/`showProfile`/`showThemeSwitcher`/`showCredits` — visibility toggles (all default `false`); `pageTitle`; `feedbackUrl`; `clientId` — active org id; `_dangerouslyInjectAccessToken` — escape hatch, avoid; `onProjectChange` — fires on user pick or automatic default; `logoAddon` — node between logo and picker; `actionsStart`/`actionsEnd` — nodes at the start/end of the right-hand actions cluster; `endpoints` — per-path overrides; `fetcher` — custom fetch (default global); `staleTime` (default 5 min); `gcTime` (default 10 min).
|
|
541
|
-
- **Notes**: Must render inside a `<ThemeProvider>`; owns an internal singleton QueryClient (no app setup). Auth state and user identity (email, client id) are decoded from the `{environmentId}-sessionId` JWT cookie — no `/me` call. Logged-out users see no user content; `ProjectNode` shape = `{ id, name, children: ProjectNode[], isContextOnly? }`. Project selection is per-tab (sessionStorage); explicit picks are remembered cross-tab in localStorage `lastSelectedProject`, and a tab with no valid selection auto-defaults to that (else the first selectable project) — there is no selection overlay.
|
|
827
|
+
- **Custom props** (HeaderProps): `apiBaseUrl` — studio-auth API host (required); `environmentId` — reads `{environmentId}-sessionId` cookie (required); `logoType` — ThemeProduct, defaults to active product; `logoHref` — logo link destination (defaults to the product's public site); `showOrg`/`showProjectDropdown`/`showProfile`/`showThemeSwitcher`/`showCredits` — visibility toggles (all default `false`); `pageTitle`; `feedbackUrl`; `clientId` — active org id; `defaultProjectId` — auto-selected when the tab has no selection and `lastSelectedProject` is absent/invalid; `_dangerouslyInjectAccessToken` — escape hatch, avoid; `onProjectChange` — fires on user pick or automatic default; `logoAddon` — node between logo and picker; `actionsStart`/`actionsEnd` — nodes at the start/end of the right-hand actions cluster; `endpoints` — per-path overrides; `fetcher` — custom fetch (default global); `staleTime` (default 5 min); `gcTime` (default 10 min).
|
|
828
|
+
- **Notes**: Must render inside a `<ThemeProvider>`; owns an internal singleton QueryClient (no app setup). Auth state and user identity (email, client id) are decoded from the `{environmentId}-sessionId` JWT cookie — no `/me` call. Logged-out users see no user content; `ProjectNode` shape = `{ id, name, children: ProjectNode[], isContextOnly? }`. Project selection is per-tab (sessionStorage); explicit picks are remembered cross-tab in localStorage `lastSelectedProject`, and a tab with no valid selection auto-defaults to that (else `defaultProjectId`, else the first selectable project) — there is no selection overlay. The paginated projects API is fetched page-by-page until exhausted and the merged tree is cached in sessionStorage keyed by client id + user id, so it is hit once per tab session per identity.
|
|
542
829
|
|
|
543
830
|
### MediaObject
|
|
544
831
|
- **Exports**: `MediaObject`, `MediaObjectImage`, `MediaObjectIcon`, `MediaObjectContent`, `MediaObjectTitle`, `MediaObjectText`, `MediaObjectActions`, `MediaObjectGroup`, `mediaObjectGroupVariants`, types `MediaObjectProps`, `MediaObjectImageProps`, `MediaObjectTitleProps`, `MediaObjectGroupProps`
|
|
@@ -546,6 +833,16 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
546
833
|
- **Custom props**: (MediaObject) `interactive` — CSS hover lift + shadow. (MediaObjectImage) `alt` — required alt text. (MediaObjectTitle) `size` — Heading size (default `"4"`).
|
|
547
834
|
- **Notes**: Radix-style compositional card; root is `<article>`, image is 16/9 cover; pure-CSS hover (no JS state).
|
|
548
835
|
|
|
836
|
+
<!-- variant-facts:MediaObject:start — GENERATED by `pnpm docs:variants`; edit
|
|
837
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
**columns**: `1` · `2` · `3`\* · `4`
|
|
841
|
+
|
|
842
|
+
**gap**: `sm` · `md` · `lg`\*
|
|
843
|
+
|
|
844
|
+
<!-- variant-facts:MediaObject:end -->
|
|
845
|
+
|
|
549
846
|
### NavRail
|
|
550
847
|
- **Exports**: NavRail, NavRailItem, NavRailUser, NavRailSeparator, NavRailMenu, NavRailMenuTrigger, NavRailMenuContent, NavRailMenuItem, + prop types
|
|
551
848
|
- **Variants**: NavRail `mode: icon* | text | expanded | expand-on-hover`
|
|
@@ -570,6 +867,39 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
570
867
|
- **Custom props**: `as` — element/component to render (default `div`).
|
|
571
868
|
- **Notes**: Centered max-width column with gutters; `glass` uses `bg-glass-40-bg backdrop-blur-glass`.
|
|
572
869
|
|
|
870
|
+
<!-- variant-facts:Container:start — GENERATED by `pnpm docs:variants`; edit
|
|
871
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
872
|
+
|
|
873
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
874
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
875
|
+
|
|
876
|
+
| variant | fill | text | border | hover fill |
|
|
877
|
+
|---|---|---|---|---|
|
|
878
|
+
| `default`\* | — | — | — | — |
|
|
879
|
+
| `glass` | rgb(255 255 255 / 0.4) → rgb(31 40 50 / 0.4) | — | — | — |
|
|
880
|
+
|
|
881
|
+
**size**: `narrow` · `content`\* · `wide` · `full`
|
|
882
|
+
|
|
883
|
+
<!-- variant-facts:Container:end -->
|
|
884
|
+
|
|
885
|
+
### MultiColumn
|
|
886
|
+
- **Exports**: `MultiColumn`, `MultiColumnItem`, `multiColumnVariants`, types `MultiColumnProps`, `MultiColumnItemProps`
|
|
887
|
+
- **Variants** (MultiColumn): `gap`: `none` | `sm` | `md` | `lg`* | `xl`; `stackBelow`: `sm` | `md` | `lg`* | `xl` — breakpoint the grid activates at.
|
|
888
|
+
- **Custom props**: `columns` (MultiColumn, required) — one CSS grid track per column (`"240px"` fixed, `"20%"` percent, `"1fr"` fractional, `"minmax(200px,1fr)"`); array length sets the column count (3, 4, 5, ...N). `order` (MultiColumnItem) — visual position via CSS `order`, independent of DOM order; also the initial position when the parent is `reorderable`. `align` (MultiColumnItem) — `start` | `center` | `end` | `stretch` (`align-self`). `id` (MultiColumnItem) — native `id`; give every item one when the parent is `reorderable` so `onReorderChange` reports stable identities.
|
|
889
|
+
- **Resizable** (opt-in, default off): `resizable` renders a drag/Arrow-key handle between adjacent columns; `onColumnsChange(columns)` fires with the updated array (pass a `columns` value you update to control it, omit for internal/uncontrolled tracking); `minColumnSize` (default `"80px"`) floors how small a column can be dragged. A dragged pair freezes to explicit px; a `minmax(min,max)` column keeps its own authored bounds even after being resized (never silently discarded). Handles are keyboard-operable (`role="separator"`, Arrow Left/Right) and hidden below `stackBelow`.
|
|
890
|
+
- **Reorderable** (opt-in, default off): `reorderable` renders a drag grip on every `MultiColumnItem`; drag onto another item to swap positions, or focus a grip and press Ctrl+Left/Ctrl+Right. `onReorderChange(orderedIds)` fires with the new left-to-right order of each item's `id` (falls back to a generated id with a console warning if `id` is omitted). Grips hidden below `stackBelow`.
|
|
891
|
+
- **Notes**: CSS Grid (not flex) so `minmax()` and mixed fixed/%/fr tracks work in one template; `TwoColumn` stays the recommended API for the aside+main pattern. Compose `<MultiColumn columns={[...]}><MultiColumnItem/>...</MultiColumn>`; stacks to `flex flex-col` below `stackBelow`. The per-instance track list is set via the `--mc-columns` custom property (inline style) and read by a static `<bp>:grid-cols-[var(--mc-columns)]` class, so Tailwind's source scanner still sees a literal class to generate (same technique as `Sidebar`'s `w-(--sidebar-width)`). Resize math and reorder math are pure functions in `MultiColumn.utils.ts` (unit-tested); the actual browser layout resolution (`getComputedStyle`) they depend on is real-browser-only and verified manually/in Storybook, not by jsdom.
|
|
892
|
+
|
|
893
|
+
<!-- variant-facts:MultiColumn:start — GENERATED by `pnpm docs:variants`; edit
|
|
894
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
**gap**: `none` · `sm` · `md` · `lg`\* · `xl`
|
|
898
|
+
|
|
899
|
+
**stackBelow**: `sm` · `md` · `lg`\* · `xl`
|
|
900
|
+
|
|
901
|
+
<!-- variant-facts:MultiColumn:end -->
|
|
902
|
+
|
|
573
903
|
### PageBackground
|
|
574
904
|
- **Exports**: `PageBackground`, type `PageBackgroundProps`
|
|
575
905
|
- **Custom props**: `fixed` — fixed to viewport (default `true`) vs absolute-fill of positioned parent.
|
|
@@ -580,11 +910,35 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
580
910
|
- **Variants**: `direction`: `vertical`* | `horizontal`; `gap`: `none` | `xs` | `sm` | `md`* | `lg` | `xl` | `2xl`; `align`: `start` | `center` | `end` | `stretch`*; `justify`: `start` | `center` | `between` | `end`
|
|
581
911
|
- **Custom props**: `as` — render as different element (default `div`).
|
|
582
912
|
|
|
913
|
+
<!-- variant-facts:Stack:start — GENERATED by `pnpm docs:variants`; edit
|
|
914
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
**direction**: `vertical`\* · `horizontal`
|
|
918
|
+
|
|
919
|
+
**gap**: `none` · `xs` · `sm` · `md`\* · `lg` · `xl` · `2xl`
|
|
920
|
+
|
|
921
|
+
**align**: `start` · `center` · `end` · `stretch`\*
|
|
922
|
+
|
|
923
|
+
**justify**: `start` · `center` · `between` · `end`
|
|
924
|
+
|
|
925
|
+
<!-- variant-facts:Stack:end -->
|
|
926
|
+
|
|
583
927
|
### TwoColumn
|
|
584
928
|
- **Exports**: `TwoColumn`, `TwoColumnAside`, `TwoColumnMain`, `twoColumnVariants`, type `TwoColumnProps`
|
|
585
929
|
- **Variants** (TwoColumn): `gap`: `none` | `sm` | `md` | `lg`* | `xl`; `reverse`: aside after main at lg+
|
|
586
930
|
- **Notes**: Compose `<TwoColumn><TwoColumnAside/><TwoColumnMain/></TwoColumn>`; stacks below `lg`. Aside default `lg:w-64` (override via className); Main is `min-w-0 flex-1`.
|
|
587
931
|
|
|
932
|
+
<!-- variant-facts:TwoColumn:start — GENERATED by `pnpm docs:variants`; edit
|
|
933
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
**gap**: `none` · `sm` · `md` · `lg`\* · `xl`
|
|
937
|
+
|
|
938
|
+
**reverse**: `true`
|
|
939
|
+
|
|
940
|
+
<!-- variant-facts:TwoColumn:end -->
|
|
941
|
+
|
|
588
942
|
### Utils
|
|
589
943
|
|
|
590
944
|
### cn
|
|
@@ -637,3 +991,134 @@ Both mode files define the identical names (`mode-light.css` on `:root`, `mode-d
|
|
|
637
991
|
- Charts: `--chart-1`…`--chart-5`; `--chart-blue(-subtle)`, `--chart-emerald(-subtle)`, `--chart-amber(-subtle)`, `--chart-red(-subtle)`, `--chart-purple(-subtle)`, `--chart-lime(-subtle)`, `--chart-indigo(-subtle)`, `--chart-orange(-subtle)`
|
|
638
992
|
- AI affordance: `--ai-surface`, `--ai-gradient-from`, `--ai-gradient-to`
|
|
639
993
|
- Logo ink: `--logo-mark-dark` (mode-driven, defined in base.css)
|
|
994
|
+
|
|
995
|
+
<!-- token-facts:start — GENERATED by `pnpm docs:variants` from
|
|
996
|
+
docs/css-variables.json; edit src/styles/tokens/* and re-run, not this block. -->
|
|
997
|
+
|
|
998
|
+
### 7.3 Resolved token values
|
|
999
|
+
|
|
1000
|
+
Actual values per mode, `light → dark` (a single value is identical in both
|
|
1001
|
+
modes). Product-scoped tokens are listed per product; `slingshot` is the
|
|
1002
|
+
default (`:root`) product.
|
|
1003
|
+
|
|
1004
|
+
**Backgrounds**
|
|
1005
|
+
|
|
1006
|
+
| token | light → dark |
|
|
1007
|
+
|---|---|
|
|
1008
|
+
| `--danger-bg` | #fde6ea → #6c0016 |
|
|
1009
|
+
| `--ghost-bg` | rgb(255 255 255 / 0.0001) |
|
|
1010
|
+
| `--ghost-hover-bg` | rgb(31 40 50 / 0.05) → rgb(255 255 255 / 0.1) |
|
|
1011
|
+
| `--info-bg` | #e0f2fe → #0c4a6e |
|
|
1012
|
+
| `--input-bg` | #ffffff → #1f2832 |
|
|
1013
|
+
| `--muted-bg` | #f3f4f6 → #111827 |
|
|
1014
|
+
| `--navbar-active-bg` | #e90130 |
|
|
1015
|
+
| `--outline-bg` | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) |
|
|
1016
|
+
| `--outline-hover-bg` | rgb(31 40 50 / 0.0333) → rgb(255 255 255 / 0.1) |
|
|
1017
|
+
| `--overlay-bg` | rgb(31 40 50 / 0.4) |
|
|
1018
|
+
| `--primary-bg` | #ffffff → #111827 |
|
|
1019
|
+
| `--primary-invert-bg` | #111827 → #ffffff |
|
|
1020
|
+
| `--primary-invert-hover-bg` | #374151 → #d1d5db |
|
|
1021
|
+
| `--secondary-bg` | #e5e7eb → #4b5563 |
|
|
1022
|
+
| `--secondary-hover-bg` | #f9fafb → #111827 |
|
|
1023
|
+
| `--success-bg` | #ecfccb → #365314 |
|
|
1024
|
+
| `--switch-active-bg` | #84cc16 |
|
|
1025
|
+
| `--toggle-active-bg` | rgb(31 40 50 / 0.05) → rgb(255 255 255 / 0.1) |
|
|
1026
|
+
| `--warning-bg` | #ffedd5 → #431407 |
|
|
1027
|
+
|
|
1028
|
+
**Glass**
|
|
1029
|
+
|
|
1030
|
+
| token | light → dark |
|
|
1031
|
+
|---|---|
|
|
1032
|
+
| `--glass-20-bg` | rgb(255 255 255 / 0.2) → rgb(31 40 50 / 0.2) |
|
|
1033
|
+
| `--glass-40-bg` | rgb(255 255 255 / 0.4) → rgb(31 40 50 / 0.4) |
|
|
1034
|
+
| `--glass-60-bg` | rgb(255 255 255 / 0.6) → rgb(31 40 50 / 0.6) |
|
|
1035
|
+
| `--glass-blur` | 45px |
|
|
1036
|
+
| `--glass-none-bg` | #ffffff → #111827 |
|
|
1037
|
+
|
|
1038
|
+
**Text**
|
|
1039
|
+
|
|
1040
|
+
| token | light → dark |
|
|
1041
|
+
|---|---|
|
|
1042
|
+
| `--danger-txt` | #bc0126 → #f699ac |
|
|
1043
|
+
| `--info-txt` | #0369a1 → #7dd3fc |
|
|
1044
|
+
| `--muted-txt` | #6b7280 → #9ca3af |
|
|
1045
|
+
| `--primary-invert-txt` | #f3f4f6 → #111827 |
|
|
1046
|
+
| `--primary-txt` | #111827 → #f3f4f6 |
|
|
1047
|
+
| `--secondary-txt` | #374151 → #e5e7eb |
|
|
1048
|
+
| `--success-txt` | #4d7c0f → #bef264 |
|
|
1049
|
+
| `--warning-txt` | #c2410c → #fdba74 |
|
|
1050
|
+
|
|
1051
|
+
**Borders**
|
|
1052
|
+
|
|
1053
|
+
| token | light → dark |
|
|
1054
|
+
|---|---|
|
|
1055
|
+
| `--danger-border` | #bc0126 → #f699ac |
|
|
1056
|
+
| `--info-border` | #0369a1 → #7dd3fc |
|
|
1057
|
+
| `--muted-border` | #f3f4f6 → #111827 |
|
|
1058
|
+
| `--primary-border` | #e5e7eb → #374151 |
|
|
1059
|
+
| `--primary-invert-border` | #9ca3af → #4b5563 |
|
|
1060
|
+
| `--secondary-border` | #d1d5db → #374151 |
|
|
1061
|
+
| `--selected-border` | #1f2937 → #f9fafb |
|
|
1062
|
+
| `--success-border` | #4d7c0f → #bef264 |
|
|
1063
|
+
| `--warning-border` | #c2410c → #fdba74 |
|
|
1064
|
+
|
|
1065
|
+
**Focus**
|
|
1066
|
+
|
|
1067
|
+
| token | light → dark |
|
|
1068
|
+
|---|---|
|
|
1069
|
+
| `--focus` | #d1d5db → #374151 |
|
|
1070
|
+
| `--focus-error` | #f699ac → #6c0016 |
|
|
1071
|
+
|
|
1072
|
+
**Charts**
|
|
1073
|
+
|
|
1074
|
+
| token | light → dark |
|
|
1075
|
+
|---|---|
|
|
1076
|
+
| `--chart-1` | #f54a00 |
|
|
1077
|
+
| `--chart-2` | #009689 |
|
|
1078
|
+
| `--chart-3` | #104e64 |
|
|
1079
|
+
| `--chart-4` | #ffb900 |
|
|
1080
|
+
| `--chart-5` | #fe9a00 |
|
|
1081
|
+
| `--chart-amber` | #fbbf24 → #b45309 |
|
|
1082
|
+
| `--chart-amber-subtle` | #fde68a → #78350f |
|
|
1083
|
+
| `--chart-blue` | #60a5fa → #1d4ed8 |
|
|
1084
|
+
| `--chart-blue-subtle` | #bfdbfe → #1e3a8a |
|
|
1085
|
+
| `--chart-emerald` | #34d399 → #047857 |
|
|
1086
|
+
| `--chart-emerald-subtle` | #a7f3d0 → #064e3b |
|
|
1087
|
+
| `--chart-indigo` | #818cf8 → #4338ca |
|
|
1088
|
+
| `--chart-indigo-subtle` | #c7d2fe → #312e81 |
|
|
1089
|
+
| `--chart-lime` | #a3e635 → #4d7c0f |
|
|
1090
|
+
| `--chart-lime-subtle` | #d9f99d → #365314 |
|
|
1091
|
+
| `--chart-orange` | #fb923c → #c2410c |
|
|
1092
|
+
| `--chart-orange-subtle` | #fed7aa → #7c2d12 |
|
|
1093
|
+
| `--chart-purple` | #c084fc → #7e22ce |
|
|
1094
|
+
| `--chart-purple-subtle` | #e9d5ff → #581c87 |
|
|
1095
|
+
| `--chart-red` | #f26783 → #bc0126 |
|
|
1096
|
+
| `--chart-red-subtle` | #fbccd6 → #6c0016 |
|
|
1097
|
+
|
|
1098
|
+
**Logo ink**
|
|
1099
|
+
|
|
1100
|
+
| token | light → dark |
|
|
1101
|
+
|---|---|
|
|
1102
|
+
| `--logo-mark-dark` | #111827 → #ffffff |
|
|
1103
|
+
|
|
1104
|
+
**Other**
|
|
1105
|
+
|
|
1106
|
+
| token | light → dark |
|
|
1107
|
+
|---|---|
|
|
1108
|
+
| `--ai-gradient-to` | #9ca3af → #4b5563 |
|
|
1109
|
+
| `--brand-gradient-to` | #e2e8f0 → #020617 |
|
|
1110
|
+
|
|
1111
|
+
**Brand & gradients (per product)**
|
|
1112
|
+
|
|
1113
|
+
| token | slingshot | bodhi | sustain |
|
|
1114
|
+
|---|---|---|---|
|
|
1115
|
+
| `--ai-gradient-from` | #e90130 | #3b82f6 | #6366f1 |
|
|
1116
|
+
| `--brand-200` | #fbccd6 → #6c0016 | #bfdbfe → #6c0016 | #c7d2fe → #6c0016 |
|
|
1117
|
+
| `--brand-50` | #fef2f5 → #3d000d | #eff6ff → #3d000d | #eef2ff → #3d000d |
|
|
1118
|
+
| `--brand-500-primary` | #e90130 | #3b82f6 | #6366f1 |
|
|
1119
|
+
| `--brand-700` | #bc0126 → #fbccd6 | #1d4ed8 → #bfdbfe | #4338ca → #c7d2fe |
|
|
1120
|
+
| `--brand-800` | #8d011d → #fbccd6 | #1e40af → #bfdbfe | #3730a3 → #c7d2fe |
|
|
1121
|
+
| `--brand-950` | #3d000d → #fef2f5 | #172554 → #eff6ff | #1e1b4b → #eef2ff |
|
|
1122
|
+
| `--brand-gradient-from` | #fbccd6 → #3d000d | #bfdbfe → #172554 | #c7d2fe → #1e1b4b |
|
|
1123
|
+
|
|
1124
|
+
<!-- token-facts:end -->
|