@psnext/design-system 2.2.0 → 2.4.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 +466 -4
- package/README.md +3 -3
- package/SKILL.md +83 -5
- package/bin/install-agent-skill.mjs +39 -7
- package/dist/Header.cjs +214 -108
- package/dist/Header.cjs.map +1 -1
- package/dist/Header.js +214 -108
- 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/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 +5 -1
- 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 +3 -2
- package/dist/index10.d.cts +6 -6
- package/dist/index10.d.ts +7 -7
- package/dist/index10.d.ts.map +1 -1
- 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 +11 -11
- package/dist/index12.d.ts +13 -13
- package/dist/index12.d.ts.map +1 -1
- 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.cts.map +1 -1
- package/dist/index14.d.ts +5 -5
- package/dist/index15.d.cts +3 -3
- package/dist/index15.d.cts.map +1 -1
- package/dist/index15.d.ts +3 -3
- package/dist/index15.d.ts.map +1 -1
- package/dist/index16.d.cts +2 -2
- package/dist/index16.d.cts.map +1 -1
- package/dist/index16.d.ts +2 -2
- package/dist/index16.d.ts.map +1 -1
- package/dist/index17.d.cts +4 -4
- package/dist/index17.d.cts.map +1 -1
- package/dist/index17.d.ts +4 -4
- package/dist/index18.d.cts +11 -11
- package/dist/index18.d.cts.map +1 -1
- package/dist/index18.d.ts +11 -11
- package/dist/index18.d.ts.map +1 -1
- package/dist/index19.d.cts +10 -10
- package/dist/index19.d.cts.map +1 -1
- package/dist/index19.d.ts +10 -10
- package/dist/index19.d.ts.map +1 -1
- package/dist/index2.d.cts +8 -8
- package/dist/index2.d.cts.map +1 -1
- package/dist/index2.d.ts +7 -7
- package/dist/index20.d.cts +16 -16
- package/dist/index20.d.cts.map +1 -1
- package/dist/index20.d.ts +16 -16
- package/dist/index20.d.ts.map +1 -1
- package/dist/index21.d.cts +4 -4
- package/dist/index21.d.cts.map +1 -1
- package/dist/index21.d.ts +4 -4
- package/dist/index21.d.ts.map +1 -1
- package/dist/index22.d.cts +11 -11
- package/dist/index22.d.ts +11 -11
- package/dist/index23.d.cts +16 -16
- package/dist/index23.d.cts.map +1 -1
- package/dist/index23.d.ts +16 -16
- package/dist/index23.d.ts.map +1 -1
- package/dist/index24.d.cts +10 -10
- package/dist/index24.d.cts.map +1 -1
- package/dist/index24.d.ts +11 -11
- package/dist/index24.d.ts.map +1 -1
- package/dist/index25.d.cts +2 -2
- package/dist/index25.d.cts.map +1 -1
- package/dist/index25.d.ts +2 -2
- package/dist/index25.d.ts.map +1 -1
- package/dist/index26.d.cts +13 -13
- package/dist/index26.d.cts.map +1 -1
- package/dist/index26.d.ts +15 -15
- package/dist/index26.d.ts.map +1 -1
- package/dist/index27.d.cts +7 -7
- package/dist/index27.d.cts.map +1 -1
- package/dist/index27.d.ts +7 -7
- package/dist/index27.d.ts.map +1 -1
- package/dist/index28.d.cts +4 -4
- package/dist/index28.d.ts +6 -6
- package/dist/index28.d.ts.map +1 -1
- package/dist/index29.d.cts +4 -4
- package/dist/index29.d.cts.map +1 -1
- package/dist/index29.d.ts +4 -4
- 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 +42 -13
- package/dist/index30.d.cts.map +1 -1
- package/dist/index30.d.ts +43 -14
- package/dist/index30.d.ts.map +1 -1
- package/dist/index31.d.cts +5 -5
- package/dist/index31.d.cts.map +1 -1
- package/dist/index31.d.ts +6 -6
- package/dist/index31.d.ts.map +1 -1
- package/dist/index32.d.cts +6 -6
- package/dist/index32.d.cts.map +1 -1
- package/dist/index32.d.ts +6 -6
- package/dist/index33.d.cts +11 -11
- package/dist/index33.d.cts.map +1 -1
- package/dist/index33.d.ts +12 -12
- package/dist/index33.d.ts.map +1 -1
- package/dist/index34.d.cts +5 -5
- package/dist/index34.d.cts.map +1 -1
- package/dist/index34.d.ts +5 -5
- package/dist/index34.d.ts.map +1 -1
- package/dist/index35.d.cts +15 -15
- package/dist/index35.d.cts.map +1 -1
- package/dist/index35.d.ts +16 -16
- package/dist/index35.d.ts.map +1 -1
- package/dist/index36.d.cts +3 -3
- package/dist/index36.d.ts +3 -3
- package/dist/index36.d.ts.map +1 -1
- package/dist/index37.d.cts +5 -5
- package/dist/index37.d.ts +6 -6
- package/dist/index38.d.cts +2 -2
- package/dist/index38.d.ts +2 -2
- package/dist/index39.d.cts +17 -17
- package/dist/index39.d.cts.map +1 -1
- package/dist/index39.d.ts +17 -17
- package/dist/index39.d.ts.map +1 -1
- package/dist/index4.d.cts +2 -2
- package/dist/index4.d.ts +2 -2
- package/dist/index40.d.cts +5 -5
- package/dist/index40.d.cts.map +1 -1
- package/dist/index40.d.ts +6 -6
- package/dist/index40.d.ts.map +1 -1
- package/dist/index41.d.cts +11 -11
- package/dist/index41.d.cts.map +1 -1
- package/dist/index41.d.ts +11 -11
- package/dist/index41.d.ts.map +1 -1
- package/dist/index42.d.cts +8 -8
- package/dist/index42.d.cts.map +1 -1
- package/dist/index42.d.ts +8 -8
- package/dist/index42.d.ts.map +1 -1
- package/dist/index43.d.cts +9 -9
- package/dist/index43.d.cts.map +1 -1
- package/dist/index43.d.ts +9 -9
- package/dist/index43.d.ts.map +1 -1
- package/dist/index45.d.cts +8 -8
- package/dist/index45.d.cts.map +1 -1
- package/dist/index45.d.ts +8 -8
- package/dist/index45.d.ts.map +1 -1
- package/dist/index46.d.cts +2 -2
- package/dist/index46.d.cts.map +1 -1
- package/dist/index46.d.ts +2 -2
- package/dist/index46.d.ts.map +1 -1
- package/dist/index47.d.cts +4 -4
- package/dist/index47.d.cts.map +1 -1
- package/dist/index47.d.ts +4 -4
- package/dist/index47.d.ts.map +1 -1
- package/dist/index48.d.cts +4 -4
- package/dist/index48.d.cts.map +1 -1
- package/dist/index48.d.ts +4 -4
- package/dist/index48.d.ts.map +1 -1
- package/dist/index49.d.cts +3 -3
- package/dist/index49.d.ts +3 -3
- package/dist/index5.d.cts +7 -7
- package/dist/index5.d.ts +7 -7
- package/dist/index5.d.ts.map +1 -1
- package/dist/index50.d.cts +11 -11
- package/dist/index50.d.cts.map +1 -1
- package/dist/index50.d.ts +11 -11
- package/dist/index50.d.ts.map +1 -1
- package/dist/index51.d.cts +9 -9
- package/dist/index51.d.cts.map +1 -1
- package/dist/index51.d.ts +9 -9
- package/dist/index51.d.ts.map +1 -1
- package/dist/index52.d.cts +5 -5
- package/dist/index52.d.ts +5 -5
- package/dist/index53.d.cts +26 -26
- package/dist/index53.d.cts.map +1 -1
- package/dist/index53.d.ts +27 -27
- package/dist/index53.d.ts.map +1 -1
- package/dist/index54.d.cts +5 -5
- package/dist/index54.d.ts +5 -5
- package/dist/index54.d.ts.map +1 -1
- package/dist/index55.d.cts +2 -2
- package/dist/index55.d.cts.map +1 -1
- package/dist/index55.d.ts +2 -2
- package/dist/index56.d.cts +2 -2
- package/dist/index56.d.cts.map +1 -1
- package/dist/index56.d.ts +2 -2
- package/dist/index56.d.ts.map +1 -1
- package/dist/index57.d.cts +2 -2
- package/dist/index57.d.cts.map +1 -1
- package/dist/index57.d.ts +2 -2
- package/dist/index57.d.ts.map +1 -1
- package/dist/index58.d.cts +4 -4
- package/dist/index58.d.ts +4 -4
- package/dist/index58.d.ts.map +1 -1
- package/dist/index59.d.cts +9 -9
- package/dist/index59.d.ts +9 -9
- package/dist/index6.d.cts +6 -6
- package/dist/index6.d.cts.map +1 -1
- package/dist/index6.d.ts +6 -6
- package/dist/index6.d.ts.map +1 -1
- package/dist/index60.d.cts +9 -9
- package/dist/index60.d.cts.map +1 -1
- package/dist/index60.d.ts +13 -13
- package/dist/index60.d.ts.map +1 -1
- package/dist/index61.d.cts +5 -5
- package/dist/index61.d.ts +6 -6
- package/dist/index62.d.cts +5 -5
- package/dist/index62.d.ts +5 -5
- package/dist/index62.d.ts.map +1 -1
- package/dist/index63.d.cts +2 -2
- package/dist/index63.d.cts.map +1 -1
- package/dist/index63.d.ts +2 -2
- package/dist/index63.d.ts.map +1 -1
- package/dist/index64.d.cts +6 -6
- package/dist/index64.d.cts.map +1 -1
- package/dist/index64.d.ts +7 -7
- package/dist/index65.d.cts +3 -3
- package/dist/index65.d.ts +4 -4
- package/dist/index65.d.ts.map +1 -1
- package/dist/index66.d.cts +4 -4
- package/dist/index66.d.cts.map +1 -1
- package/dist/index66.d.ts +6 -6
- package/dist/index66.d.ts.map +1 -1
- package/dist/index67.d.cts +83 -11
- package/dist/index67.d.cts.map +1 -1
- package/dist/index67.d.ts +83 -11
- package/dist/index67.d.ts.map +1 -1
- package/dist/index68.d.cts +12 -30
- package/dist/index68.d.cts.map +1 -1
- package/dist/index68.d.ts +12 -30
- package/dist/index68.d.ts.map +1 -1
- package/dist/index69.d.cts +28 -27
- package/dist/index69.d.cts.map +1 -1
- package/dist/index69.d.ts +29 -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 +33 -78
- package/dist/index70.d.cts.map +1 -1
- package/dist/index70.d.ts +33 -78
- package/dist/index70.d.ts.map +1 -1
- package/dist/index71.d.cts +77 -258
- package/dist/index71.d.cts.map +1 -1
- package/dist/index71.d.ts +77 -258
- package/dist/index71.d.ts.map +1 -1
- package/dist/index72.d.cts +278 -0
- package/dist/index72.d.cts.map +1 -0
- package/dist/index72.d.ts +278 -0
- package/dist/index72.d.ts.map +1 -0
- package/dist/index8.d.cts +5 -5
- package/dist/index8.d.ts +5 -5
- package/dist/index8.d.ts.map +1 -1
- package/dist/index9.d.cts +2 -2
- package/dist/index9.d.cts.map +1 -1
- package/dist/index9.d.ts +2 -2
- package/dist/layouts/Container/index.cjs +2 -1
- package/dist/layouts/Container/index.cjs.map +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 +5 -4
- package/dist/layouts/index.d.ts +5 -4
- 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/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 +11 -11
- package/dist/patterns/MediaObject/index.d.ts +14 -14
- 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.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.ts +2 -2
- package/dist/patterns/SectionCard/index.d.ts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.cts +2 -2
- package/dist/patterns/SectionHeading/index.d.ts +2 -2
- package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
- package/dist/patterns/index.d.cts +1 -1
- package/dist/patterns/index.d.ts +1 -1
- 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 +9 -2
- package/dist/primitives/Checkbox/index.cjs.map +1 -1
- package/dist/primitives/Checkbox/index.js +9 -2
- 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.js +6 -2
- package/dist/primitives/CheckboxTree/index.js.map +1 -1
- package/dist/primitives/Collapsible/index.cjs +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.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.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.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.js +3 -2
- package/dist/primitives/Dialog/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.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.js +1 -1
- package/dist/primitives/Field/index.cjs +1 -1
- package/dist/primitives/Field/index.js +1 -1
- package/dist/primitives/Form/index.cjs +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.js +1 -1
- package/dist/primitives/HoverCard/index.cjs +1 -1
- package/dist/primitives/HoverCard/index.js +1 -1
- package/dist/primitives/InfoBanner/index.cjs +6 -3
- package/dist/primitives/InfoBanner/index.cjs.map +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.js +1 -1
- package/dist/primitives/InputGroup/index.cjs +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.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.js +2 -2
- package/dist/primitives/Label/index.cjs +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.js +2 -2
- package/dist/primitives/Menubar/index.cjs +14 -4
- package/dist/primitives/Menubar/index.cjs.map +1 -1
- package/dist/primitives/Menubar/index.js +14 -4
- package/dist/primitives/Menubar/index.js.map +1 -1
- package/dist/primitives/NativeSelect/index.cjs +6 -3
- package/dist/primitives/NativeSelect/index.cjs.map +1 -1
- package/dist/primitives/NativeSelect/index.js +5 -3
- package/dist/primitives/NativeSelect/index.js.map +1 -1
- package/dist/primitives/NavigationMenu/index.cjs +5 -3
- package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
- package/dist/primitives/NavigationMenu/index.js +5 -3
- package/dist/primitives/NavigationMenu/index.js.map +1 -1
- package/dist/primitives/Pagination/index.cjs +6 -2
- package/dist/primitives/Pagination/index.cjs.map +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.js +1 -1
- package/dist/primitives/Progress/index.cjs +1 -1
- package/dist/primitives/Progress/index.js +1 -1
- package/dist/primitives/RadioGroup/index.cjs +6 -2
- package/dist/primitives/RadioGroup/index.cjs.map +1 -1
- package/dist/primitives/RadioGroup/index.js +6 -2
- 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.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.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.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 +6 -2
- package/dist/primitives/Sheet/index.cjs.map +1 -1
- package/dist/primitives/Sheet/index.js +6 -2
- package/dist/primitives/Sheet/index.js.map +1 -1
- package/dist/primitives/Slider/index.cjs +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.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.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.js +1 -1
- package/dist/primitives/Tabs/index.cjs +2 -2
- 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.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.js +1 -1
- package/dist/primitives/Toggle/index.cjs +3 -2
- package/dist/primitives/Toggle/index.cjs.map +1 -1
- package/dist/primitives/Toggle/index.js +2 -2
- package/dist/primitives/ToggleGroup/index.cjs +1 -1
- package/dist/primitives/ToggleGroup/index.js +1 -1
- package/dist/primitives/Tooltip/index.cjs +1 -1
- package/dist/primitives/Tooltip/index.js +1 -1
- package/dist/primitives/index.cjs +1 -1
- package/dist/primitives/index.js +1 -1
- package/package.json +2 -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).
|
|
@@ -290,6 +381,20 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
290
381
|
- **Custom props**: `value` (balance, required); `lowThreshold` (default `200`); `icon` override; `format` override (default floor+thousands).
|
|
291
382
|
- **Notes**: Color escalates as balance drops (neutral → amber ≤ threshold → red ≤ 0).
|
|
292
383
|
|
|
384
|
+
<!-- variant-facts:Credits:start — GENERATED by `pnpm docs:variants`; edit
|
|
385
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
386
|
+
|
|
387
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
388
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
389
|
+
|
|
390
|
+
| variant | fill | text | border | hover fill |
|
|
391
|
+
|---|---|---|---|---|
|
|
392
|
+
| `default`\* | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) | #111827 → #f3f4f6 | #e5e7eb → #374151 | — |
|
|
393
|
+
| `warning` | #ffedd5 → #431407 | #c2410c → #fdba74 | hairline | — |
|
|
394
|
+
| `critical` | #fde6ea → #6c0016 | #bc0126 → #f699ac | hairline | — |
|
|
395
|
+
|
|
396
|
+
<!-- variant-facts:Credits:end -->
|
|
397
|
+
|
|
293
398
|
### Dialog
|
|
294
399
|
- **Exports**: Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger
|
|
295
400
|
- **Variants**: DialogContent `size: sm | default* | lg | xl`
|
|
@@ -327,6 +432,25 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
327
432
|
- **Custom props**: `as` — semantic element (default `h2`, independent of visual `size`).
|
|
328
433
|
- **Notes**: `gradient` fills text with the brand gradient.
|
|
329
434
|
|
|
435
|
+
<!-- variant-facts:Heading:start — GENERATED by `pnpm docs:variants`; edit
|
|
436
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
437
|
+
|
|
438
|
+
**Choosing a `gradient`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
439
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
440
|
+
|
|
441
|
+
| gradient | fill | text | border | hover fill |
|
|
442
|
+
|---|---|---|---|---|
|
|
443
|
+
| `true` | — | — | — | — |
|
|
444
|
+
| `false`\* | — | #111827 → #f3f4f6 | — | — |
|
|
445
|
+
|
|
446
|
+
**size**: `1` · `2`\* · `3` · `4` · `5` · `6` · `7`
|
|
447
|
+
|
|
448
|
+
**weight**: `normal` · `medium` · `semibold`
|
|
449
|
+
|
|
450
|
+
**align**: `left` · `center` · `right`
|
|
451
|
+
|
|
452
|
+
<!-- variant-facts:Heading:end -->
|
|
453
|
+
|
|
330
454
|
### HoverCard
|
|
331
455
|
- **Exports**: HoverCard, HoverCardTrigger, HoverCardContent
|
|
332
456
|
- **Custom props**: HoverCardContent `align` (default `center`), `sideOffset` (default `4`).
|
|
@@ -335,8 +459,10 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
335
459
|
### Icon
|
|
336
460
|
- **Exports**: Icon, IconProps (type), IconName (type), ICON_NAMES
|
|
337
461
|
- **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
|
-
- **
|
|
462
|
+
- **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.
|
|
463
|
+
- **Custom props**: `strokeWidth`; `label` — a11y label (sets `role="img"`, else aria-hidden).
|
|
464
|
+
- **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.
|
|
465
|
+
- **Notes**: `shape` wraps the glyph in a padded box where `fill`/`color` apply. Existing `icon="name"` usage is unchanged — `as` is purely additive.
|
|
340
466
|
|
|
341
467
|
### InfoBanner
|
|
342
468
|
- **Exports**: InfoBanner, infoBannerVariants, InfoBannerProps (type)
|
|
@@ -344,11 +470,48 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
344
470
|
- **Custom props**: `title` (required); `description`; `icon` override; `dismissible` (default `true`); `visible` (controlled); `onDismiss`.
|
|
345
471
|
- **Notes**: `role="status"`; dismissible — distinct from the non-dismissible Alert.
|
|
346
472
|
|
|
473
|
+
<!-- variant-facts:InfoBanner:start — GENERATED by `pnpm docs:variants`; edit
|
|
474
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
475
|
+
|
|
476
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
477
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
478
|
+
|
|
479
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
480
|
+
|---|---|---|---|---|---|---|
|
|
481
|
+
| `info`\* | announcements, tips, FYI messaging | #e0f2fe → #0c4a6e | #0369a1 → #7dd3fc | — | — | blue band |
|
|
482
|
+
| `success` | operation completed / healthy state | #ecfccb → #365314 | #4d7c0f → #bef264 | — | — | green band |
|
|
483
|
+
| `warning` | caution or degraded state, action may be needed | #ffedd5 → #431407 | #c2410c → #fdba74 | — | — | orange band |
|
|
484
|
+
| `error` | failure that needs attention | #fde6ea → #6c0016 | #bc0126 → #f699ac | — | — | red band |
|
|
485
|
+
| `neutral` | generic notice with no severity | #f3f4f6 → #111827 | #111827 → #f3f4f6 | — | — | gray band |
|
|
486
|
+
|
|
487
|
+
Confusable: InfoBanner vs Alert → banner is a full-width severity band at page/section level; Alert sits inline in the content flow.
|
|
488
|
+
|
|
489
|
+
<!-- variant-facts:InfoBanner:end -->
|
|
490
|
+
|
|
347
491
|
### Input
|
|
348
492
|
- **Exports**: Input, inputVariants
|
|
349
493
|
- **Variants**: `variant: default* | ai`, `size: xs | sm | default* | lg`, `shape: default* (12px) | round (pill)`
|
|
350
494
|
- **Notes**: Native `<input>` passthrough; `ai` swaps border for the AI gradient; `aria-invalid` triggers the error ring.
|
|
351
495
|
|
|
496
|
+
<!-- variant-facts:Input:start — GENERATED by `pnpm docs:variants`; edit
|
|
497
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
498
|
+
|
|
499
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
500
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
501
|
+
|
|
502
|
+
| variant | use when | fill | text | border | hover fill | tell |
|
|
503
|
+
|---|---|---|---|---|---|---|
|
|
504
|
+
| `default`\* | any standard text entry | #ffffff → #1f2832 | — | #e5e7eb → #374151 | — | white fill, gray hairline border |
|
|
505
|
+
| `ai` | AI prompt / ask-anything fields only | — | — | — | — | gradient AI border |
|
|
506
|
+
|
|
507
|
+
Confusable: `ai` is reserved for AI prompt fields — a normal field with AI autofill is still `default`.
|
|
508
|
+
|
|
509
|
+
**size**: `xs` 24px · `sm` 32px · `default`\* 36px · `lg` 40px
|
|
510
|
+
|
|
511
|
+
**shape**: `default`\* 12px radius · `round` pill
|
|
512
|
+
|
|
513
|
+
<!-- variant-facts:Input:end -->
|
|
514
|
+
|
|
352
515
|
### InputGroup
|
|
353
516
|
- **Exports**: InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea
|
|
354
517
|
- **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 +543,22 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
380
543
|
- **Variants**: `variant: default* | muted | subtle`, `underline: always* | hover`
|
|
381
544
|
- **Custom props**: `asChild` — render a router link instead of `<a>` (default `false`).
|
|
382
545
|
|
|
546
|
+
<!-- variant-facts:Link:start — GENERATED by `pnpm docs:variants`; edit
|
|
547
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
548
|
+
|
|
549
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
550
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
551
|
+
|
|
552
|
+
| variant | fill | text | border | hover fill |
|
|
553
|
+
|---|---|---|---|---|
|
|
554
|
+
| `default`\* | — | #111827 @80% → #f3f4f6 @80% | — | — |
|
|
555
|
+
| `muted` | — | #111827 → #f3f4f6 | — | — |
|
|
556
|
+
| `subtle` | — | #111827 @80% → #f3f4f6 @80% | — | — |
|
|
557
|
+
|
|
558
|
+
**underline**: `always`\* · `hover`
|
|
559
|
+
|
|
560
|
+
<!-- variant-facts:Link:end -->
|
|
561
|
+
|
|
383
562
|
### Logo
|
|
384
563
|
- **Exports**: Logo, LogoBrand (type), LogoVariant (type)
|
|
385
564
|
- **Variants**: `variant: logo* | icon`
|
|
@@ -397,6 +576,14 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
397
576
|
- **Variants**: `size: xs | sm | default* | lg`
|
|
398
577
|
- **Notes**: Styled native `<select>` with chevron affordance; pass `<option>`/`<optgroup>` children; mirrors Input visuals.
|
|
399
578
|
|
|
579
|
+
<!-- variant-facts:NativeSelect:start — GENERATED by `pnpm docs:variants`; edit
|
|
580
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
**size**: `xs` 24px · `sm` 32px · `default`\* 36px · `lg` 40px
|
|
584
|
+
|
|
585
|
+
<!-- variant-facts:NativeSelect:end -->
|
|
586
|
+
|
|
400
587
|
### NavigationMenu
|
|
401
588
|
- **Exports**: NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle
|
|
402
589
|
- **Custom props**: NavigationMenu `viewport` (default `true` — shared animated viewport; `false` renders content inline)
|
|
@@ -456,6 +643,21 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
456
643
|
- **Variants**: Sidebar `side: left* | right`, `variant: sidebar* | floating | inset`, `collapsible: offcanvas* | icon | none`
|
|
457
644
|
- **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
645
|
|
|
646
|
+
<!-- variant-facts:Sidebar:start — GENERATED by `pnpm docs:variants`; edit
|
|
647
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
648
|
+
|
|
649
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
650
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
651
|
+
|
|
652
|
+
| variant | fill | text | border | hover fill |
|
|
653
|
+
|---|---|---|---|---|
|
|
654
|
+
| `default`\* | — | #111827 → #f3f4f6 | — | #e5e7eb @50% → #4b5563 @50% |
|
|
655
|
+
| `outline` | #ffffff → #111827 | #111827 → #f3f4f6 | — | #e5e7eb @50% → #4b5563 @50% |
|
|
656
|
+
|
|
657
|
+
**size**: `default`\* 32px · `sm` 28px · `lg` 48px
|
|
658
|
+
|
|
659
|
+
<!-- variant-facts:Sidebar:end -->
|
|
660
|
+
|
|
459
661
|
### Skeleton
|
|
460
662
|
- **Exports**: Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject
|
|
461
663
|
- **Notes**: `skeleton-shimmer` divs; presets: Avatar (size-10 round), Line (h-4 full), Object (96px block).
|
|
@@ -491,17 +693,79 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
491
693
|
- **Custom props**: TabsList `tabPrefix`/`tabSuffix` (nodes)
|
|
492
694
|
- **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
695
|
|
|
696
|
+
<!-- HAND-WRITTEN choosing table (compoundVariants — not generated; keep in sync with tabsListVariants/tabsTriggerVariants). -->
|
|
697
|
+
|
|
698
|
+
**Choosing a `variant`** — never re-skin a variant with paint classes (SKILL.md →
|
|
699
|
+
"Never re-skin a variant").
|
|
700
|
+
|
|
701
|
+
| variant | use when | looks like | tell |
|
|
702
|
+
|---|---|---|---|
|
|
703
|
+
| `line` | quiet content-section switching inside a page | plain text row; 2px underline slides beneath the active tab | underline only, no fills |
|
|
704
|
+
| `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 |
|
|
705
|
+
| `segmented` | tight toggle-group of 2–5 short options | track with ONE animated indicator that slides behind triggers | single sliding thumb |
|
|
706
|
+
| `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 |
|
|
707
|
+
|
|
708
|
+
**size** — track heights (`pill`/`segmented`, horizontal): `sm` 24px · `md`\* 35px ·
|
|
709
|
+
`lg` 40px. `fancy` trigger padding: `sm` 8/16px (text-sm) · `md` 12/24px (text-sm) ·
|
|
710
|
+
`lg` 16/24px (text-base) — an `lg` fancy tab card runs ≈56px tall.
|
|
711
|
+
|
|
712
|
+
Confusable: `pill` vs `segmented` → both are tracks, but segmented animates one
|
|
713
|
+
shared indicator while pill styles the active trigger itself. `fancy` is only for
|
|
714
|
+
glass compositions (needs `PageBackground` behind it); everywhere else pick one of
|
|
715
|
+
the other three.
|
|
716
|
+
|
|
494
717
|
### Text
|
|
495
718
|
- **Exports**: Text, textVariants, TextProps (type)
|
|
496
719
|
- **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
720
|
- **Custom props**: `as` (default `p`)
|
|
498
721
|
- **Notes**: Body-copy primitive; sizes map to the paragraph type-scale tokens.
|
|
499
722
|
|
|
723
|
+
<!-- variant-facts:Text:start — GENERATED by `pnpm docs:variants`; edit
|
|
724
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
725
|
+
|
|
726
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
727
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
728
|
+
|
|
729
|
+
| variant | fill | text | border | hover fill |
|
|
730
|
+
|---|---|---|---|---|
|
|
731
|
+
| `default`\* | — | #111827 → #f3f4f6 | — | — |
|
|
732
|
+
| `muted` | — | #6b7280 → #9ca3af | — | — |
|
|
733
|
+
| `primary` | — | #111827 → #f3f4f6 | — | — |
|
|
734
|
+
| `destructive` | — | #bc0126 → #f699ac | — | — |
|
|
735
|
+
| `success` | — | #4d7c0f → #bef264 | — | — |
|
|
736
|
+
|
|
737
|
+
**size**: `large` · `regular`\* · `small` · `mini` · `caption`
|
|
738
|
+
|
|
739
|
+
**weight**: `normal`\* · `medium` · `semibold`
|
|
740
|
+
|
|
741
|
+
**font**: `body`\* · `heading` · `mono`
|
|
742
|
+
|
|
743
|
+
**align**: `left` · `center` · `right`
|
|
744
|
+
|
|
745
|
+
**truncate**: `true`
|
|
746
|
+
|
|
747
|
+
<!-- variant-facts:Text:end -->
|
|
748
|
+
|
|
500
749
|
### Textarea
|
|
501
750
|
- **Exports**: Textarea, textareaVariants
|
|
502
751
|
- **Variants**: `variant: default* | ai` (gradient border), `shape: default* (12px) | round (16px)`
|
|
503
752
|
- **Notes**: Auto-grows via `field-sizing-content`; chrome matches Input; supports aria-invalid.
|
|
504
753
|
|
|
754
|
+
<!-- variant-facts:Textarea:start — GENERATED by `pnpm docs:variants`; edit
|
|
755
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
756
|
+
|
|
757
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
758
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
759
|
+
|
|
760
|
+
| variant | fill | text | border | hover fill |
|
|
761
|
+
|---|---|---|---|---|
|
|
762
|
+
| `default`\* | #ffffff → #1f2832 | — | #e5e7eb → #374151 | — |
|
|
763
|
+
| `ai` | — | — | — | — |
|
|
764
|
+
|
|
765
|
+
**shape**: `default`\* 12px radius · `round` 16px radius
|
|
766
|
+
|
|
767
|
+
<!-- variant-facts:Textarea:end -->
|
|
768
|
+
|
|
505
769
|
### ThemeProvider
|
|
506
770
|
- **Exports**: ThemeProvider, useTheme, ThemeContext, ThemeMode (type), ThemeProduct (type)
|
|
507
771
|
- **Custom props**: `defaultTheme: light* | dark`, `defaultProduct: slingshot* | sustain | bodhi | psai`, `storageKey` (default `ds-theme-preferences`)
|
|
@@ -537,8 +801,8 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
537
801
|
|
|
538
802
|
### Header
|
|
539
803
|
- **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
|
|
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? }`.
|
|
804
|
+
- **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).
|
|
805
|
+
- **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
806
|
|
|
543
807
|
### MediaObject
|
|
544
808
|
- **Exports**: `MediaObject`, `MediaObjectImage`, `MediaObjectIcon`, `MediaObjectContent`, `MediaObjectTitle`, `MediaObjectText`, `MediaObjectActions`, `MediaObjectGroup`, `mediaObjectGroupVariants`, types `MediaObjectProps`, `MediaObjectImageProps`, `MediaObjectTitleProps`, `MediaObjectGroupProps`
|
|
@@ -546,6 +810,16 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
546
810
|
- **Custom props**: (MediaObject) `interactive` — CSS hover lift + shadow. (MediaObjectImage) `alt` — required alt text. (MediaObjectTitle) `size` — Heading size (default `"4"`).
|
|
547
811
|
- **Notes**: Radix-style compositional card; root is `<article>`, image is 16/9 cover; pure-CSS hover (no JS state).
|
|
548
812
|
|
|
813
|
+
<!-- variant-facts:MediaObject:start — GENERATED by `pnpm docs:variants`; edit
|
|
814
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
**columns**: `1` · `2` · `3`\* · `4`
|
|
818
|
+
|
|
819
|
+
**gap**: `sm` · `md` · `lg`\*
|
|
820
|
+
|
|
821
|
+
<!-- variant-facts:MediaObject:end -->
|
|
822
|
+
|
|
549
823
|
### NavRail
|
|
550
824
|
- **Exports**: NavRail, NavRailItem, NavRailUser, NavRailSeparator, NavRailMenu, NavRailMenuTrigger, NavRailMenuContent, NavRailMenuItem, + prop types
|
|
551
825
|
- **Variants**: NavRail `mode: icon* | text | expanded | expand-on-hover`
|
|
@@ -570,6 +844,39 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
570
844
|
- **Custom props**: `as` — element/component to render (default `div`).
|
|
571
845
|
- **Notes**: Centered max-width column with gutters; `glass` uses `bg-glass-40-bg backdrop-blur-glass`.
|
|
572
846
|
|
|
847
|
+
<!-- variant-facts:Container:start — GENERATED by `pnpm docs:variants`; edit
|
|
848
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
849
|
+
|
|
850
|
+
**Choosing a `variant`** — colors are `light → dark` mode actuals. Never re-skin a
|
|
851
|
+
variant with paint classes (SKILL.md → "Never re-skin a variant").
|
|
852
|
+
|
|
853
|
+
| variant | fill | text | border | hover fill |
|
|
854
|
+
|---|---|---|---|---|
|
|
855
|
+
| `default`\* | — | — | — | — |
|
|
856
|
+
| `glass` | rgb(255 255 255 / 0.4) → rgb(31 40 50 / 0.4) | — | — | — |
|
|
857
|
+
|
|
858
|
+
**size**: `narrow` · `content`\* · `wide` · `full`
|
|
859
|
+
|
|
860
|
+
<!-- variant-facts:Container:end -->
|
|
861
|
+
|
|
862
|
+
### MultiColumn
|
|
863
|
+
- **Exports**: `MultiColumn`, `MultiColumnItem`, `multiColumnVariants`, types `MultiColumnProps`, `MultiColumnItemProps`
|
|
864
|
+
- **Variants** (MultiColumn): `gap`: `none` | `sm` | `md` | `lg`* | `xl`; `stackBelow`: `sm` | `md` | `lg`* | `xl` — breakpoint the grid activates at.
|
|
865
|
+
- **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.
|
|
866
|
+
- **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`.
|
|
867
|
+
- **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`.
|
|
868
|
+
- **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.
|
|
869
|
+
|
|
870
|
+
<!-- variant-facts:MultiColumn:start — GENERATED by `pnpm docs:variants`; edit
|
|
871
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
**gap**: `none` · `sm` · `md` · `lg`\* · `xl`
|
|
875
|
+
|
|
876
|
+
**stackBelow**: `sm` · `md` · `lg`\* · `xl`
|
|
877
|
+
|
|
878
|
+
<!-- variant-facts:MultiColumn:end -->
|
|
879
|
+
|
|
573
880
|
### PageBackground
|
|
574
881
|
- **Exports**: `PageBackground`, type `PageBackgroundProps`
|
|
575
882
|
- **Custom props**: `fixed` — fixed to viewport (default `true`) vs absolute-fill of positioned parent.
|
|
@@ -580,11 +887,35 @@ Stories in `src/<layer>/<Component>/<Component>.stories.tsx` are the canonical e
|
|
|
580
887
|
- **Variants**: `direction`: `vertical`* | `horizontal`; `gap`: `none` | `xs` | `sm` | `md`* | `lg` | `xl` | `2xl`; `align`: `start` | `center` | `end` | `stretch`*; `justify`: `start` | `center` | `between` | `end`
|
|
581
888
|
- **Custom props**: `as` — render as different element (default `div`).
|
|
582
889
|
|
|
890
|
+
<!-- variant-facts:Stack:start — GENERATED by `pnpm docs:variants`; edit
|
|
891
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
**direction**: `vertical`\* · `horizontal`
|
|
895
|
+
|
|
896
|
+
**gap**: `none` · `xs` · `sm` · `md`\* · `lg` · `xl` · `2xl`
|
|
897
|
+
|
|
898
|
+
**align**: `start` · `center` · `end` · `stretch`\*
|
|
899
|
+
|
|
900
|
+
**justify**: `start` · `center` · `between` · `end`
|
|
901
|
+
|
|
902
|
+
<!-- variant-facts:Stack:end -->
|
|
903
|
+
|
|
583
904
|
### TwoColumn
|
|
584
905
|
- **Exports**: `TwoColumn`, `TwoColumnAside`, `TwoColumnMain`, `twoColumnVariants`, type `TwoColumnProps`
|
|
585
906
|
- **Variants** (TwoColumn): `gap`: `none` | `sm` | `md` | `lg`* | `xl`; `reverse`: aside after main at lg+
|
|
586
907
|
- **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
908
|
|
|
909
|
+
<!-- variant-facts:TwoColumn:start — GENERATED by `pnpm docs:variants`; edit
|
|
910
|
+
scripts/variant-intent.json (judgment) or the component (facts), not this block. -->
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
**gap**: `none` · `sm` · `md` · `lg`\* · `xl`
|
|
914
|
+
|
|
915
|
+
**reverse**: `true`
|
|
916
|
+
|
|
917
|
+
<!-- variant-facts:TwoColumn:end -->
|
|
918
|
+
|
|
588
919
|
### Utils
|
|
589
920
|
|
|
590
921
|
### cn
|
|
@@ -637,3 +968,134 @@ Both mode files define the identical names (`mode-light.css` on `:root`, `mode-d
|
|
|
637
968
|
- 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
969
|
- AI affordance: `--ai-surface`, `--ai-gradient-from`, `--ai-gradient-to`
|
|
639
970
|
- Logo ink: `--logo-mark-dark` (mode-driven, defined in base.css)
|
|
971
|
+
|
|
972
|
+
<!-- token-facts:start — GENERATED by `pnpm docs:variants` from
|
|
973
|
+
docs/css-variables.json; edit src/styles/tokens/* and re-run, not this block. -->
|
|
974
|
+
|
|
975
|
+
### 7.3 Resolved token values
|
|
976
|
+
|
|
977
|
+
Actual values per mode, `light → dark` (a single value is identical in both
|
|
978
|
+
modes). Product-scoped tokens are listed per product; `slingshot` is the
|
|
979
|
+
default (`:root`) product.
|
|
980
|
+
|
|
981
|
+
**Backgrounds**
|
|
982
|
+
|
|
983
|
+
| token | light → dark |
|
|
984
|
+
|---|---|
|
|
985
|
+
| `--danger-bg` | #fde6ea → #6c0016 |
|
|
986
|
+
| `--ghost-bg` | rgb(255 255 255 / 0.0001) |
|
|
987
|
+
| `--ghost-hover-bg` | rgb(31 40 50 / 0.05) → rgb(255 255 255 / 0.1) |
|
|
988
|
+
| `--info-bg` | #e0f2fe → #0c4a6e |
|
|
989
|
+
| `--input-bg` | #ffffff → #1f2832 |
|
|
990
|
+
| `--muted-bg` | #f3f4f6 → #111827 |
|
|
991
|
+
| `--navbar-active-bg` | #e90130 |
|
|
992
|
+
| `--outline-bg` | rgb(255 255 255 / 0.1) → rgb(255 255 255 / 0.05) |
|
|
993
|
+
| `--outline-hover-bg` | rgb(31 40 50 / 0.0333) → rgb(255 255 255 / 0.1) |
|
|
994
|
+
| `--overlay-bg` | rgb(31 40 50 / 0.4) |
|
|
995
|
+
| `--primary-bg` | #ffffff → #111827 |
|
|
996
|
+
| `--primary-invert-bg` | #111827 → #ffffff |
|
|
997
|
+
| `--primary-invert-hover-bg` | #374151 → #d1d5db |
|
|
998
|
+
| `--secondary-bg` | #e5e7eb → #4b5563 |
|
|
999
|
+
| `--secondary-hover-bg` | #f9fafb → #111827 |
|
|
1000
|
+
| `--success-bg` | #ecfccb → #365314 |
|
|
1001
|
+
| `--switch-active-bg` | #84cc16 |
|
|
1002
|
+
| `--toggle-active-bg` | rgb(31 40 50 / 0.05) → rgb(255 255 255 / 0.1) |
|
|
1003
|
+
| `--warning-bg` | #ffedd5 → #431407 |
|
|
1004
|
+
|
|
1005
|
+
**Glass**
|
|
1006
|
+
|
|
1007
|
+
| token | light → dark |
|
|
1008
|
+
|---|---|
|
|
1009
|
+
| `--glass-20-bg` | rgb(255 255 255 / 0.2) → rgb(31 40 50 / 0.2) |
|
|
1010
|
+
| `--glass-40-bg` | rgb(255 255 255 / 0.4) → rgb(31 40 50 / 0.4) |
|
|
1011
|
+
| `--glass-60-bg` | rgb(255 255 255 / 0.6) → rgb(31 40 50 / 0.6) |
|
|
1012
|
+
| `--glass-blur` | 45px |
|
|
1013
|
+
| `--glass-none-bg` | #ffffff → #111827 |
|
|
1014
|
+
|
|
1015
|
+
**Text**
|
|
1016
|
+
|
|
1017
|
+
| token | light → dark |
|
|
1018
|
+
|---|---|
|
|
1019
|
+
| `--danger-txt` | #bc0126 → #f699ac |
|
|
1020
|
+
| `--info-txt` | #0369a1 → #7dd3fc |
|
|
1021
|
+
| `--muted-txt` | #6b7280 → #9ca3af |
|
|
1022
|
+
| `--primary-invert-txt` | #f3f4f6 → #111827 |
|
|
1023
|
+
| `--primary-txt` | #111827 → #f3f4f6 |
|
|
1024
|
+
| `--secondary-txt` | #374151 → #e5e7eb |
|
|
1025
|
+
| `--success-txt` | #4d7c0f → #bef264 |
|
|
1026
|
+
| `--warning-txt` | #c2410c → #fdba74 |
|
|
1027
|
+
|
|
1028
|
+
**Borders**
|
|
1029
|
+
|
|
1030
|
+
| token | light → dark |
|
|
1031
|
+
|---|---|
|
|
1032
|
+
| `--danger-border` | #bc0126 → #f699ac |
|
|
1033
|
+
| `--info-border` | #0369a1 → #7dd3fc |
|
|
1034
|
+
| `--muted-border` | #f3f4f6 → #111827 |
|
|
1035
|
+
| `--primary-border` | #e5e7eb → #374151 |
|
|
1036
|
+
| `--primary-invert-border` | #9ca3af → #4b5563 |
|
|
1037
|
+
| `--secondary-border` | #d1d5db → #374151 |
|
|
1038
|
+
| `--selected-border` | #1f2937 → #f9fafb |
|
|
1039
|
+
| `--success-border` | #4d7c0f → #bef264 |
|
|
1040
|
+
| `--warning-border` | #c2410c → #fdba74 |
|
|
1041
|
+
|
|
1042
|
+
**Focus**
|
|
1043
|
+
|
|
1044
|
+
| token | light → dark |
|
|
1045
|
+
|---|---|
|
|
1046
|
+
| `--focus` | #d1d5db → #374151 |
|
|
1047
|
+
| `--focus-error` | #f699ac → #6c0016 |
|
|
1048
|
+
|
|
1049
|
+
**Charts**
|
|
1050
|
+
|
|
1051
|
+
| token | light → dark |
|
|
1052
|
+
|---|---|
|
|
1053
|
+
| `--chart-1` | #f54a00 |
|
|
1054
|
+
| `--chart-2` | #009689 |
|
|
1055
|
+
| `--chart-3` | #104e64 |
|
|
1056
|
+
| `--chart-4` | #ffb900 |
|
|
1057
|
+
| `--chart-5` | #fe9a00 |
|
|
1058
|
+
| `--chart-amber` | #fbbf24 → #b45309 |
|
|
1059
|
+
| `--chart-amber-subtle` | #fde68a → #78350f |
|
|
1060
|
+
| `--chart-blue` | #60a5fa → #1d4ed8 |
|
|
1061
|
+
| `--chart-blue-subtle` | #bfdbfe → #1e3a8a |
|
|
1062
|
+
| `--chart-emerald` | #34d399 → #047857 |
|
|
1063
|
+
| `--chart-emerald-subtle` | #a7f3d0 → #064e3b |
|
|
1064
|
+
| `--chart-indigo` | #818cf8 → #4338ca |
|
|
1065
|
+
| `--chart-indigo-subtle` | #c7d2fe → #312e81 |
|
|
1066
|
+
| `--chart-lime` | #a3e635 → #4d7c0f |
|
|
1067
|
+
| `--chart-lime-subtle` | #d9f99d → #365314 |
|
|
1068
|
+
| `--chart-orange` | #fb923c → #c2410c |
|
|
1069
|
+
| `--chart-orange-subtle` | #fed7aa → #7c2d12 |
|
|
1070
|
+
| `--chart-purple` | #c084fc → #7e22ce |
|
|
1071
|
+
| `--chart-purple-subtle` | #e9d5ff → #581c87 |
|
|
1072
|
+
| `--chart-red` | #f26783 → #bc0126 |
|
|
1073
|
+
| `--chart-red-subtle` | #fbccd6 → #6c0016 |
|
|
1074
|
+
|
|
1075
|
+
**Logo ink**
|
|
1076
|
+
|
|
1077
|
+
| token | light → dark |
|
|
1078
|
+
|---|---|
|
|
1079
|
+
| `--logo-mark-dark` | #111827 → #ffffff |
|
|
1080
|
+
|
|
1081
|
+
**Other**
|
|
1082
|
+
|
|
1083
|
+
| token | light → dark |
|
|
1084
|
+
|---|---|
|
|
1085
|
+
| `--ai-gradient-to` | #9ca3af → #4b5563 |
|
|
1086
|
+
| `--brand-gradient-to` | #e2e8f0 → #020617 |
|
|
1087
|
+
|
|
1088
|
+
**Brand & gradients (per product)**
|
|
1089
|
+
|
|
1090
|
+
| token | slingshot | bodhi | sustain |
|
|
1091
|
+
|---|---|---|---|
|
|
1092
|
+
| `--ai-gradient-from` | #e90130 | #3b82f6 | #6366f1 |
|
|
1093
|
+
| `--brand-200` | #fbccd6 → #6c0016 | #bfdbfe → #6c0016 | #c7d2fe → #6c0016 |
|
|
1094
|
+
| `--brand-50` | #fef2f5 → #3d000d | #eff6ff → #3d000d | #eef2ff → #3d000d |
|
|
1095
|
+
| `--brand-500-primary` | #e90130 | #3b82f6 | #6366f1 |
|
|
1096
|
+
| `--brand-700` | #bc0126 → #fbccd6 | #1d4ed8 → #bfdbfe | #4338ca → #c7d2fe |
|
|
1097
|
+
| `--brand-800` | #8d011d → #fbccd6 | #1e40af → #bfdbfe | #3730a3 → #c7d2fe |
|
|
1098
|
+
| `--brand-950` | #3d000d → #fef2f5 | #172554 → #eff6ff | #1e1b4b → #eef2ff |
|
|
1099
|
+
| `--brand-gradient-from` | #fbccd6 → #3d000d | #bfdbfe → #172554 | #c7d2fe → #1e1b4b |
|
|
1100
|
+
|
|
1101
|
+
<!-- token-facts:end -->
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Bodhi, Sustain, …), in light and dark.
|
|
|
7
7
|
|
|
8
8
|
- **65 primitives** (Button, Dialog, Input, Select, Table, Tabs, Card, Chart, …)
|
|
9
9
|
- **7 patterns** (Header, Footer, DataTable, MediaObject, SectionCard, …)
|
|
10
|
-
- **5 layouts** (Container, Stack, TwoColumn, PageBackground
|
|
10
|
+
- **5 layouts** (Container, MultiColumn, Stack, TwoColumn, PageBackground)
|
|
11
11
|
- Dual **ESM + CJS** builds with **TypeScript declarations**; deep imports are tree-shakeable.
|
|
12
12
|
|
|
13
13
|
> **Browse every component in Storybook** — each has a live preview, a props
|
|
@@ -43,7 +43,7 @@ will write DS-native code instead of guessing:
|
|
|
43
43
|
|
|
44
44
|
### Install them as an Agent Skill (recommended)
|
|
45
45
|
|
|
46
|
-
Run this in your app to copy both docs into `.
|
|
46
|
+
Run this in your app to copy both docs into `.agent/skills/design-system/`,
|
|
47
47
|
where coding agents pick them up automatically:
|
|
48
48
|
|
|
49
49
|
```bash
|
|
@@ -128,7 +128,7 @@ shown on its **Storybook Docs** page (generated from the source types + JSDoc).
|
|
|
128
128
|
|---|---|
|
|
129
129
|
| `@psnext/design-system/primitives/*` · `…/primitives` | Button, Dialog, Input, Select, Table, Tabs, Card, Chart, Badge, Text, Heading, Icon, `Logo`, Credits, `ThemeProvider`/`useTheme`, … (65) |
|
|
130
130
|
| `@psnext/design-system/patterns/*` · `…/patterns` | `Header`, `Footer`, `DataTable`, `MediaObject`, `NavRail`, `SectionCard`, `SectionHeading` |
|
|
131
|
-
| `@psnext/design-system/layouts/*` · `…/layouts` | `Container`, `Stack`, `TwoColumn`, `PageBackground` |
|
|
131
|
+
| `@psnext/design-system/layouts/*` · `…/layouts` | `Container`, `MultiColumn`, `Stack`, `TwoColumn`, `PageBackground` |
|
|
132
132
|
| `@psnext/design-system/styles` | the single raw-CSS entry (tokens + themes + bridge) |
|
|
133
133
|
|
|
134
134
|
The package is **side-effect-free** (`sideEffects: ["**/*.css"]`), so unused
|