@psnext/design-system 1.5.1 → 2.1.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 +639 -0
- package/README.md +39 -2
- package/SKILL.md +101 -0
- package/bin/install-agent-skill.mjs +54 -0
- package/dist/Header.cjs +32 -29
- package/dist/Header.cjs.map +1 -1
- package/dist/Header.js +32 -29
- package/dist/Header.js.map +1 -1
- package/dist/Icon.cjs +19 -19
- package/dist/Icon.cjs.map +1 -1
- package/dist/Icon.js +19 -19
- package/dist/Icon.js.map +1 -1
- package/dist/Logo.cjs +4 -14
- package/dist/Logo.cjs.map +1 -1
- package/dist/Logo.js +4 -14
- package/dist/Logo.js.map +1 -1
- package/dist/Sidebar.cjs +26 -20
- package/dist/Sidebar.cjs.map +1 -1
- package/dist/Sidebar.js +21 -21
- package/dist/Sidebar.js.map +1 -1
- package/dist/cn.cjs +14 -1
- package/dist/cn.cjs.map +1 -1
- package/dist/cn.js +14 -1
- package/dist/cn.js.map +1 -1
- package/dist/index.cjs +13 -10
- 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 +5 -4
- package/dist/index10.d.cts +4 -4
- package/dist/index10.d.cts.map +1 -1
- package/dist/index10.d.ts +7 -7
- 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 +18 -17
- package/dist/index12.d.cts.map +1 -1
- package/dist/index12.d.ts +18 -17
- 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/index14.d.cts +5 -5
- package/dist/index14.d.cts.map +1 -1
- package/dist/index14.d.ts +5 -5
- package/dist/index14.d.ts.map +1 -1
- 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/index17.d.cts +4 -4
- package/dist/index17.d.cts.map +1 -1
- package/dist/index17.d.ts +4 -4
- package/dist/index17.d.ts.map +1 -1
- package/dist/index18.d.cts +11 -11
- package/dist/index18.d.cts.map +1 -1
- package/dist/index18.d.ts +11 -11
- 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 +8 -8
- package/dist/index2.d.ts.map +1 -1
- 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/index22.d.cts +11 -11
- package/dist/index22.d.cts.map +1 -1
- package/dist/index22.d.ts +11 -11
- package/dist/index22.d.ts.map +1 -1
- 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 +10 -10
- package/dist/index25.d.cts +2 -2
- package/dist/index25.d.ts +2 -2
- package/dist/index26.d.cts +13 -13
- package/dist/index26.d.ts +14 -14
- 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 +5 -5
- package/dist/index28.d.ts +5 -5
- package/dist/index28.d.ts.map +1 -1
- package/dist/index29.d.cts +4 -4
- 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.cts.map +1 -1
- package/dist/index3.d.ts +13 -13
- package/dist/index3.d.ts.map +1 -1
- package/dist/index30.d.cts +5 -5
- package/dist/index30.d.ts +5 -5
- package/dist/index31.d.cts +5 -5
- package/dist/index31.d.cts.map +1 -1
- package/dist/index31.d.ts +5 -5
- package/dist/index31.d.ts.map +1 -1
- package/dist/index32.d.cts +8 -5
- package/dist/index32.d.cts.map +1 -1
- package/dist/index32.d.ts +9 -6
- package/dist/index32.d.ts.map +1 -1
- package/dist/index33.d.cts +14 -10
- package/dist/index33.d.cts.map +1 -1
- package/dist/index33.d.ts +14 -10
- package/dist/index33.d.ts.map +1 -1
- package/dist/index34.d.cts +5 -5
- package/dist/index34.d.ts +5 -5
- package/dist/index35.d.cts +14 -14
- 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.cts.map +1 -1
- 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.cts.map +1 -1
- package/dist/index37.d.ts +4 -4
- package/dist/index37.d.ts.map +1 -1
- 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.cts.map +1 -1
- package/dist/index4.d.ts +2 -2
- package/dist/index4.d.ts.map +1 -1
- package/dist/index40.d.cts +4 -4
- package/dist/index40.d.ts +5 -5
- 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 +10 -10
- package/dist/index43.d.cts.map +1 -1
- package/dist/index43.d.ts +10 -10
- package/dist/index43.d.ts.map +1 -1
- package/dist/index44.d.cts +1 -48
- package/dist/index44.d.ts +1 -48
- package/dist/index45.d.cts +42 -22
- package/dist/index45.d.cts.map +1 -1
- package/dist/index45.d.ts +42 -22
- package/dist/index45.d.ts.map +1 -1
- package/dist/index46.d.cts +21 -34
- package/dist/index46.d.cts.map +1 -1
- package/dist/index46.d.ts +21 -34
- package/dist/index46.d.ts.map +1 -1
- package/dist/index47.d.cts +33 -17
- package/dist/index47.d.cts.map +1 -1
- package/dist/index47.d.ts +33 -17
- package/dist/index47.d.ts.map +1 -1
- package/dist/index48.d.cts +18 -14
- package/dist/index48.d.cts.map +1 -1
- package/dist/index48.d.ts +18 -14
- package/dist/index48.d.ts.map +1 -1
- package/dist/index49.d.cts +12 -60
- package/dist/index49.d.cts.map +1 -1
- package/dist/index49.d.ts +12 -60
- 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/index5.d.ts.map +1 -1
- package/dist/index50.d.cts +55 -49
- package/dist/index50.d.cts.map +1 -1
- package/dist/index50.d.ts +55 -49
- package/dist/index50.d.ts.map +1 -1
- package/dist/index51.d.cts +56 -24
- package/dist/index51.d.cts.map +1 -1
- package/dist/index51.d.ts +56 -24
- package/dist/index51.d.ts.map +1 -1
- package/dist/index52.d.cts +25 -203
- package/dist/index52.d.cts.map +1 -1
- package/dist/index52.d.ts +25 -203
- package/dist/index52.d.ts.map +1 -1
- package/dist/index53.d.cts +198 -15
- package/dist/index53.d.cts.map +1 -1
- package/dist/index53.d.ts +198 -15
- package/dist/index53.d.ts.map +1 -1
- package/dist/index54.d.cts +21 -23
- package/dist/index54.d.cts.map +1 -1
- package/dist/index54.d.ts +21 -23
- package/dist/index54.d.ts.map +1 -1
- package/dist/index55.d.cts +21 -18
- package/dist/index55.d.cts.map +1 -1
- package/dist/index55.d.ts +21 -18
- package/dist/index55.d.ts.map +1 -1
- package/dist/index56.d.cts +21 -8
- package/dist/index56.d.cts.map +1 -1
- package/dist/index56.d.ts +21 -8
- package/dist/index56.d.ts.map +1 -1
- package/dist/index57.d.cts +6 -44
- package/dist/index57.d.cts.map +1 -1
- package/dist/index57.d.ts +6 -44
- package/dist/index57.d.ts.map +1 -1
- package/dist/index58.d.cts +46 -47
- package/dist/index58.d.cts.map +1 -1
- package/dist/index58.d.ts +46 -47
- package/dist/index58.d.ts.map +1 -1
- package/dist/index59.d.cts +47 -59
- package/dist/index59.d.cts.map +1 -1
- package/dist/index59.d.ts +47 -59
- package/dist/index59.d.ts.map +1 -1
- package/dist/index6.d.cts +7 -7
- package/dist/index6.d.cts.map +1 -1
- package/dist/index6.d.ts +7 -7
- package/dist/index6.d.ts.map +1 -1
- package/dist/index60.d.cts +55 -37
- package/dist/index60.d.cts.map +1 -1
- package/dist/index60.d.ts +56 -38
- package/dist/index60.d.ts.map +1 -1
- package/dist/index61.d.cts +38 -14
- package/dist/index61.d.cts.map +1 -1
- package/dist/index61.d.ts +38 -14
- package/dist/index61.d.ts.map +1 -1
- package/dist/index62.d.cts +20 -41
- package/dist/index62.d.cts.map +1 -1
- package/dist/index62.d.ts +20 -41
- package/dist/index62.d.ts.map +1 -1
- package/dist/index63.d.cts +41 -19
- package/dist/index63.d.cts.map +1 -1
- package/dist/index63.d.ts +41 -19
- package/dist/index63.d.ts.map +1 -1
- package/dist/index64.d.cts +14 -39
- package/dist/index64.d.cts.map +1 -1
- package/dist/index64.d.ts +14 -39
- package/dist/index64.d.ts.map +1 -1
- package/dist/index65.d.cts +39 -16
- package/dist/index65.d.cts.map +1 -1
- package/dist/index65.d.ts +39 -16
- package/dist/index65.d.ts.map +1 -1
- package/dist/index66.d.cts +18 -12
- package/dist/index66.d.cts.map +1 -1
- package/dist/index66.d.ts +18 -12
- package/dist/index66.d.ts.map +1 -1
- package/dist/index67.d.cts +12 -30
- package/dist/index67.d.cts.map +1 -1
- package/dist/index67.d.ts +12 -30
- package/dist/index67.d.ts.map +1 -1
- package/dist/index68.d.cts +26 -25
- package/dist/index68.d.cts.map +1 -1
- package/dist/index68.d.ts +28 -27
- package/dist/index68.d.ts.map +1 -1
- package/dist/index69.d.cts +36 -69
- package/dist/index69.d.cts.map +1 -0
- package/dist/index69.d.ts +36 -69
- package/dist/index69.d.ts.map +1 -0
- package/dist/index7.d.cts +8 -8
- package/dist/index7.d.cts.map +1 -1
- package/dist/index7.d.ts +8 -8
- package/dist/index70.d.cts +76 -237
- package/dist/index70.d.cts.map +1 -1
- package/dist/index70.d.ts +76 -237
- package/dist/index70.d.ts.map +1 -1
- package/dist/index71.d.cts +249 -0
- package/dist/index71.d.cts.map +1 -0
- package/dist/index71.d.ts +249 -0
- package/dist/index71.d.ts.map +1 -0
- package/dist/index8.d.cts +4 -4
- package/dist/index8.d.cts.map +1 -1
- package/dist/index8.d.ts +4 -4
- 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 +4 -4
- 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 +4 -4
- package/dist/layouts/Container/index.js.map +1 -1
- package/dist/layouts/PageBackground/index.cjs +2 -2
- package/dist/layouts/PageBackground/index.cjs.map +1 -1
- package/dist/layouts/PageBackground/index.d.cts +1 -1
- package/dist/layouts/PageBackground/index.d.ts +1 -1
- package/dist/layouts/PageBackground/index.js +2 -2
- package/dist/layouts/PageBackground/index.js.map +1 -1
- package/dist/layouts/Stack/index.d.cts +1 -1
- package/dist/layouts/Stack/index.d.ts +1 -1
- package/dist/layouts/TwoColumn/index.d.cts +1 -1
- package/dist/layouts/TwoColumn/index.d.ts +1 -1
- package/dist/layouts/index.d.cts +4 -4
- package/dist/layouts/index.d.ts +4 -4
- package/dist/patterns/DataTable/index.cjs +12 -7
- 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 +12 -7
- package/dist/patterns/DataTable/index.js.map +1 -1
- package/dist/patterns/Footer/index.cjs +5 -5
- package/dist/patterns/Footer/index.cjs.map +1 -1
- package/dist/patterns/Footer/index.d.cts +9 -9
- package/dist/patterns/Footer/index.d.cts.map +1 -1
- package/dist/patterns/Footer/index.d.ts +9 -9
- package/dist/patterns/Footer/index.d.ts.map +1 -1
- package/dist/patterns/Footer/index.js +5 -5
- package/dist/patterns/Footer/index.js.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.cjs.map +1 -1
- package/dist/patterns/MediaObject/index.d.cts +13 -13
- package/dist/patterns/MediaObject/index.d.cts.map +1 -1
- package/dist/patterns/MediaObject/index.d.ts +10 -10
- package/dist/patterns/MediaObject/index.js +1 -1
- package/dist/patterns/MediaObject/index.js.map +1 -1
- package/dist/patterns/NavRail/index.cjs +195 -0
- package/dist/patterns/NavRail/index.cjs.map +1 -0
- package/dist/patterns/NavRail/index.d.cts +2 -0
- package/dist/patterns/NavRail/index.d.ts +2 -0
- package/dist/patterns/NavRail/index.js +185 -0
- package/dist/patterns/NavRail/index.js.map +1 -0
- package/dist/patterns/SectionCard/index.cjs +1 -1
- package/dist/patterns/SectionCard/index.cjs.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/SectionCard/index.js +1 -1
- package/dist/patterns/SectionCard/index.js.map +1 -1
- package/dist/patterns/SectionHeading/index.d.cts +2 -2
- package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.ts +2 -2
- package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
- package/dist/patterns/index.cjs +9 -0
- package/dist/patterns/index.d.cts +3 -2
- package/dist/patterns/index.d.ts +3 -2
- package/dist/patterns/index.js +2 -1
- package/dist/primitives/Accordion/index.cjs +6 -6
- package/dist/primitives/Accordion/index.cjs.map +1 -1
- package/dist/primitives/Accordion/index.js +6 -6
- package/dist/primitives/Accordion/index.js.map +1 -1
- package/dist/primitives/Alert/index.cjs +4 -4
- package/dist/primitives/Alert/index.cjs.map +1 -1
- package/dist/primitives/Alert/index.js +4 -4
- package/dist/primitives/Alert/index.js.map +1 -1
- package/dist/primitives/AlertDialog/index.cjs +4 -4
- package/dist/primitives/AlertDialog/index.cjs.map +1 -1
- package/dist/primitives/AlertDialog/index.js +4 -4
- package/dist/primitives/AlertDialog/index.js.map +1 -1
- package/dist/primitives/Avatar/index.cjs +5 -5
- package/dist/primitives/Avatar/index.cjs.map +1 -1
- package/dist/primitives/Avatar/index.js +5 -5
- package/dist/primitives/Avatar/index.js.map +1 -1
- package/dist/primitives/Badge/index.cjs +11 -10
- package/dist/primitives/Badge/index.cjs.map +1 -1
- package/dist/primitives/Badge/index.js +11 -10
- package/dist/primitives/Badge/index.js.map +1 -1
- package/dist/primitives/Breadcrumb/index.cjs +4 -4
- package/dist/primitives/Breadcrumb/index.cjs.map +1 -1
- package/dist/primitives/Breadcrumb/index.js +4 -4
- package/dist/primitives/Breadcrumb/index.js.map +1 -1
- package/dist/primitives/Button/index.cjs +20 -13
- package/dist/primitives/Button/index.cjs.map +1 -1
- package/dist/primitives/Button/index.js +20 -13
- package/dist/primitives/Button/index.js.map +1 -1
- package/dist/primitives/ButtonGroup/index.cjs +3 -3
- package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
- package/dist/primitives/ButtonGroup/index.js +3 -3
- package/dist/primitives/ButtonGroup/index.js.map +1 -1
- package/dist/primitives/Calendar/index.cjs +22 -21
- package/dist/primitives/Calendar/index.cjs.map +1 -1
- package/dist/primitives/Calendar/index.js +22 -21
- package/dist/primitives/Calendar/index.js.map +1 -1
- package/dist/primitives/Card/index.cjs +18 -16
- package/dist/primitives/Card/index.cjs.map +1 -1
- package/dist/primitives/Card/index.js +18 -16
- package/dist/primitives/Card/index.js.map +1 -1
- package/dist/primitives/Carousel/index.cjs +2 -2
- package/dist/primitives/Carousel/index.cjs.map +1 -1
- package/dist/primitives/Carousel/index.js +2 -2
- package/dist/primitives/Carousel/index.js.map +1 -1
- package/dist/primitives/Chart/index.cjs +12 -12
- package/dist/primitives/Chart/index.cjs.map +1 -1
- package/dist/primitives/Chart/index.js +12 -12
- package/dist/primitives/Chart/index.js.map +1 -1
- package/dist/primitives/Checkbox/index.cjs +6 -6
- package/dist/primitives/Checkbox/index.cjs.map +1 -1
- package/dist/primitives/Checkbox/index.js +6 -6
- package/dist/primitives/Checkbox/index.js.map +1 -1
- package/dist/primitives/CheckboxTree/index.cjs +2 -2
- package/dist/primitives/CheckboxTree/index.cjs.map +1 -1
- package/dist/primitives/CheckboxTree/index.js +2 -2
- package/dist/primitives/CheckboxTree/index.js.map +1 -1
- package/dist/primitives/Command/index.cjs +9 -9
- package/dist/primitives/Command/index.cjs.map +1 -1
- package/dist/primitives/Command/index.js +9 -9
- package/dist/primitives/Command/index.js.map +1 -1
- package/dist/primitives/ContextMenu/index.cjs +10 -10
- package/dist/primitives/ContextMenu/index.cjs.map +1 -1
- package/dist/primitives/ContextMenu/index.js +10 -10
- package/dist/primitives/ContextMenu/index.js.map +1 -1
- package/dist/primitives/Credits/index.cjs +4 -4
- package/dist/primitives/Credits/index.cjs.map +1 -1
- package/dist/primitives/Credits/index.js +4 -4
- package/dist/primitives/Credits/index.js.map +1 -1
- package/dist/primitives/Dialog/index.cjs +5 -5
- package/dist/primitives/Dialog/index.cjs.map +1 -1
- package/dist/primitives/Dialog/index.js +5 -5
- package/dist/primitives/Dialog/index.js.map +1 -1
- package/dist/primitives/Drawer/index.cjs +5 -5
- package/dist/primitives/Drawer/index.cjs.map +1 -1
- package/dist/primitives/Drawer/index.js +5 -5
- package/dist/primitives/Drawer/index.js.map +1 -1
- package/dist/primitives/DropdownMenu/index.cjs +9 -9
- package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
- package/dist/primitives/DropdownMenu/index.js +9 -9
- package/dist/primitives/DropdownMenu/index.js.map +1 -1
- package/dist/primitives/Empty/index.cjs +4 -4
- package/dist/primitives/Empty/index.cjs.map +1 -1
- package/dist/primitives/Empty/index.js +4 -4
- package/dist/primitives/Empty/index.js.map +1 -1
- package/dist/primitives/Field/index.cjs +5 -5
- package/dist/primitives/Field/index.cjs.map +1 -1
- package/dist/primitives/Field/index.js +5 -5
- package/dist/primitives/Field/index.js.map +1 -1
- package/dist/primitives/Form/index.cjs +1 -1
- package/dist/primitives/Form/index.cjs.map +1 -1
- package/dist/primitives/Form/index.js +1 -1
- package/dist/primitives/Form/index.js.map +1 -1
- package/dist/primitives/Heading/index.cjs +2 -2
- package/dist/primitives/Heading/index.cjs.map +1 -1
- package/dist/primitives/Heading/index.js +2 -2
- package/dist/primitives/Heading/index.js.map +1 -1
- package/dist/primitives/HoverCard/index.cjs +1 -1
- package/dist/primitives/HoverCard/index.cjs.map +1 -1
- package/dist/primitives/HoverCard/index.js +1 -1
- package/dist/primitives/HoverCard/index.js.map +1 -1
- package/dist/primitives/InfoBanner/index.cjs +12 -12
- package/dist/primitives/InfoBanner/index.cjs.map +1 -1
- package/dist/primitives/InfoBanner/index.js +12 -12
- package/dist/primitives/InfoBanner/index.js.map +1 -1
- package/dist/primitives/Input/index.cjs +13 -7
- package/dist/primitives/Input/index.cjs.map +1 -1
- package/dist/primitives/Input/index.js +13 -7
- package/dist/primitives/Input/index.js.map +1 -1
- package/dist/primitives/InputGroup/index.cjs +7 -7
- package/dist/primitives/InputGroup/index.cjs.map +1 -1
- package/dist/primitives/InputGroup/index.js +7 -7
- package/dist/primitives/InputGroup/index.js.map +1 -1
- package/dist/primitives/InputOtp/index.cjs +3 -3
- package/dist/primitives/InputOtp/index.cjs.map +1 -1
- package/dist/primitives/InputOtp/index.js +3 -3
- package/dist/primitives/InputOtp/index.js.map +1 -1
- package/dist/primitives/Item/index.cjs +6 -6
- package/dist/primitives/Item/index.cjs.map +1 -1
- package/dist/primitives/Item/index.js +6 -6
- package/dist/primitives/Item/index.js.map +1 -1
- package/dist/primitives/Kbd/index.cjs +1 -1
- package/dist/primitives/Kbd/index.cjs.map +1 -1
- package/dist/primitives/Kbd/index.js +1 -1
- package/dist/primitives/Kbd/index.js.map +1 -1
- package/dist/primitives/Link/index.cjs +4 -4
- package/dist/primitives/Link/index.cjs.map +1 -1
- package/dist/primitives/Link/index.js +4 -4
- package/dist/primitives/Link/index.js.map +1 -1
- package/dist/primitives/Menubar/index.cjs +12 -12
- package/dist/primitives/Menubar/index.cjs.map +1 -1
- package/dist/primitives/Menubar/index.js +12 -12
- package/dist/primitives/Menubar/index.js.map +1 -1
- package/dist/primitives/NativeSelect/index.cjs +5 -5
- package/dist/primitives/NativeSelect/index.cjs.map +1 -1
- package/dist/primitives/NativeSelect/index.js +5 -5
- package/dist/primitives/NativeSelect/index.js.map +1 -1
- package/dist/primitives/NavRail/index.cjs +9 -194
- package/dist/primitives/NavRail/index.d.cts +1 -0
- package/dist/primitives/NavRail/index.d.ts +1 -0
- package/dist/primitives/NavRail/index.js +1 -184
- package/dist/primitives/NavigationMenu/index.cjs +7 -7
- package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
- package/dist/primitives/NavigationMenu/index.js +7 -7
- package/dist/primitives/NavigationMenu/index.js.map +1 -1
- package/dist/primitives/Pagination/index.cjs +7 -13
- 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 +8 -14
- package/dist/primitives/Pagination/index.js.map +1 -1
- package/dist/primitives/Popover/index.cjs +4 -4
- package/dist/primitives/Popover/index.cjs.map +1 -1
- package/dist/primitives/Popover/index.js +4 -4
- package/dist/primitives/Popover/index.js.map +1 -1
- package/dist/primitives/Progress/index.cjs +16 -16
- package/dist/primitives/Progress/index.cjs.map +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 +16 -16
- package/dist/primitives/Progress/index.js.map +1 -1
- package/dist/primitives/RadioGroup/index.cjs +7 -7
- 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 -7
- package/dist/primitives/RadioGroup/index.js.map +1 -1
- package/dist/primitives/Resizable/index.cjs +2 -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 +2 -2
- package/dist/primitives/Resizable/index.js.map +1 -1
- package/dist/primitives/ScrollArea/index.cjs +2 -2
- package/dist/primitives/ScrollArea/index.cjs.map +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 +2 -2
- package/dist/primitives/ScrollArea/index.js.map +1 -1
- package/dist/primitives/Select/index.cjs +8 -8
- 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 +8 -8
- package/dist/primitives/Select/index.js.map +1 -1
- package/dist/primitives/Separator/index.cjs +1 -1
- package/dist/primitives/Separator/index.cjs.map +1 -1
- package/dist/primitives/Separator/index.js +1 -1
- package/dist/primitives/Separator/index.js.map +1 -1
- package/dist/primitives/Sheet/index.cjs +8 -8
- 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 +8 -8
- 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.cjs +2 -2
- package/dist/primitives/Skeleton/index.cjs.map +1 -1
- package/dist/primitives/Skeleton/index.d.cts +1 -1
- package/dist/primitives/Skeleton/index.d.ts +1 -1
- package/dist/primitives/Skeleton/index.js +2 -2
- package/dist/primitives/Skeleton/index.js.map +1 -1
- package/dist/primitives/Slider/index.cjs +3 -3
- package/dist/primitives/Slider/index.cjs.map +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 +3 -3
- package/dist/primitives/Slider/index.js.map +1 -1
- package/dist/primitives/Sonner/index.cjs +13 -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 +13 -6
- package/dist/primitives/Sonner/index.js.map +1 -1
- package/dist/primitives/Spinner/index.d.cts +1 -1
- package/dist/primitives/Spinner/index.d.ts +1 -1
- package/dist/primitives/Switch/index.cjs +7 -7
- package/dist/primitives/Switch/index.cjs.map +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 +7 -7
- package/dist/primitives/Switch/index.js.map +1 -1
- package/dist/primitives/Table/index.cjs +7 -7
- package/dist/primitives/Table/index.cjs.map +1 -1
- package/dist/primitives/Table/index.d.cts +1 -1
- package/dist/primitives/Table/index.d.ts +1 -1
- package/dist/primitives/Table/index.js +7 -7
- package/dist/primitives/Table/index.js.map +1 -1
- package/dist/primitives/Tabs/index.cjs +21 -21
- package/dist/primitives/Tabs/index.cjs.map +1 -1
- package/dist/primitives/Tabs/index.d.cts +1 -1
- package/dist/primitives/Tabs/index.d.ts +1 -1
- package/dist/primitives/Tabs/index.js +21 -21
- package/dist/primitives/Tabs/index.js.map +1 -1
- package/dist/primitives/Text/index.cjs +5 -5
- 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 +5 -5
- package/dist/primitives/Text/index.js.map +1 -1
- package/dist/primitives/Textarea/index.cjs +20 -8
- 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 +20 -8
- package/dist/primitives/Textarea/index.js.map +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 +11 -10
- 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 +11 -10
- package/dist/primitives/Toggle/index.js.map +1 -1
- package/dist/primitives/ToggleGroup/index.cjs +2 -2
- package/dist/primitives/ToggleGroup/index.cjs.map +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 +2 -2
- package/dist/primitives/ToggleGroup/index.js.map +1 -1
- package/dist/primitives/Tooltip/index.cjs +2 -2
- package/dist/primitives/Tooltip/index.cjs.map +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 +2 -2
- package/dist/primitives/Tooltip/index.js.map +1 -1
- package/dist/primitives/index.cjs +10 -10
- package/dist/primitives/index.d.cts +21 -21
- package/dist/primitives/index.d.ts +21 -21
- package/dist/primitives/index.js +2 -2
- package/dist/styles/base.css +23 -4
- package/dist/styles/brand-scopes.css +49 -0
- package/dist/styles/glass.css +13 -8
- package/dist/styles/index.css +8 -9
- package/dist/styles/theme.css +141 -90
- package/dist/styles/tokens/border-radius.css +8 -8
- package/dist/styles/tokens/mode-dark.css +71 -94
- package/dist/styles/tokens/mode-light.css +71 -94
- package/dist/styles/tokens/shadows.css +4 -7
- package/dist/styles/tokens/spacing.css +17 -37
- package/dist/styles/tokens/theme-bodhi.css +6 -28
- package/dist/styles/tokens/theme-slingshot.css +7 -28
- package/dist/styles/tokens/theme-sustain.css +6 -28
- package/dist/styles/typography.css +9 -9
- package/package.json +8 -2
- package/dist/index44.d.cts.map +0 -1
- package/dist/index44.d.ts.map +0 -1
- package/dist/primitives/NavRail/index.cjs.map +0 -1
- package/dist/primitives/NavRail/index.js.map +0 -1
- package/dist/styles/semantic.css +0 -178
- package/dist/styles/tokens/alpha.css +0 -39
- package/dist/styles/tokens/chart-colors-dark.css +0 -18
- package/dist/styles/tokens/chart-colors-light.css +0 -18
- package/dist/styles/tokens/colors.css +0 -251
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {tabSuffix}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-txt\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-10 bg-muted-bg p-0.75\",\n segmented: \"justify-center rounded-12 bg-muted-bg p-1\",\n fancy: \"w-full items-stretch gap-1 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-6 p-0.5\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-8.75\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10 p-1\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {tabSuffix}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-primary-txt outline-none transition-all focus-visible:ring-3 focus-visible:ring-focus disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-primary-txt [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-8\",\n // Fancy (Figma Components file, node 1:6831): default = glass-60→glass-20\n // vertical gradient card; hover = solid glass-none; selected = 4px taller,\n // flat-bottomed, glass-none→glass-40 (72.6% stop), semibold, with concave\n // 16px corner curves where it meets the panel.\n fancy: cn(\n \"mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass\",\n \"bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg\",\n \"data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg\",\n \"data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:from-glass-none-bg data-[state=active]:to-glass-40-bg data-[state=active]:to-[72.6%] data-[state=active]:font-semibold\",\n \"data-[state=active]:before:absolute data-[state=active]:before:-left-4 data-[state=active]:before:bottom-0 data-[state=active]:before:size-4 data-[state=active]:before:bg-[radial-gradient(circle_at_top_left,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n \"data-[state=active]:after:absolute data-[state=active]:after:-right-4 data-[state=active]:after:bottom-0 data-[state=active]:after:size-4 data-[state=active]:after:bg-[radial-gradient(circle_at_top_right,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n // The curves flow into NEIGHBOURING tabs only — never past the group edge.\n \"first:before:hidden last:after:hidden\",\n ),\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"sm\",\n class: \"px-2 py-0.5 text-xs leading-4\",\n },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm leading-5\" },\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"lg\",\n class: \"px-2 py-1.5 text-sm leading-5\",\n },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-6 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-6 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted-bg px-1 text-xs font-medium text-muted-txt\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-primary-invert-bg group-data-[variant=fancy]/tabs:px-2 group-data-[variant=fancy]/tabs:leading-4 group-data-[variant=fancy]/tabs:font-semibold group-data-[variant=fancy]/tabs:text-primary-invert-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../
|
|
1
|
+
import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../index60.cjs";
|
|
2
2
|
export { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../
|
|
1
|
+
import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../index60.js";
|
|
2
2
|
export { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
|
|
@@ -36,13 +36,13 @@ function Tabs({ className, variant = "pill", size = "md", orientation = "horizon
|
|
|
36
36
|
})
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
const tabsListVariants = cva("relative inline-flex items-center text-muted-
|
|
39
|
+
const tabsListVariants = cva("relative inline-flex items-center text-muted-txt", {
|
|
40
40
|
variants: {
|
|
41
41
|
variant: {
|
|
42
42
|
line: "gap-1 bg-transparent",
|
|
43
|
-
pill: "justify-center rounded-
|
|
44
|
-
segmented: "justify-center rounded-
|
|
45
|
-
fancy: "w-full items-stretch gap-
|
|
43
|
+
pill: "justify-center rounded-10 bg-muted-bg p-0.75",
|
|
44
|
+
segmented: "justify-center rounded-12 bg-muted-bg p-1",
|
|
45
|
+
fancy: "w-full items-stretch gap-1 bg-transparent"
|
|
46
46
|
},
|
|
47
47
|
orientation: {
|
|
48
48
|
horizontal: "",
|
|
@@ -59,19 +59,19 @@ const tabsListVariants = cva("relative inline-flex items-center text-muted-foreg
|
|
|
59
59
|
variant: ["pill", "segmented"],
|
|
60
60
|
orientation: "horizontal",
|
|
61
61
|
size: "sm",
|
|
62
|
-
class: "h-
|
|
62
|
+
class: "h-6 p-0.5"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
variant: ["pill", "segmented"],
|
|
66
66
|
orientation: "horizontal",
|
|
67
67
|
size: "md",
|
|
68
|
-
class: "h-
|
|
68
|
+
class: "h-8.75"
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
variant: ["pill", "segmented"],
|
|
72
72
|
orientation: "horizontal",
|
|
73
73
|
size: "lg",
|
|
74
|
-
class: "h-10"
|
|
74
|
+
class: "h-10 p-1"
|
|
75
75
|
}
|
|
76
76
|
],
|
|
77
77
|
defaultVariants: {
|
|
@@ -131,7 +131,7 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
|
|
|
131
131
|
isSegmented && indicator && /* @__PURE__ */ jsx("span", {
|
|
132
132
|
"data-slot": "tabs-indicator",
|
|
133
133
|
"aria-hidden": true,
|
|
134
|
-
className: "absolute z-0 rounded-
|
|
134
|
+
className: "absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none",
|
|
135
135
|
style: orientation === "vertical" ? {
|
|
136
136
|
top: indicator.top,
|
|
137
137
|
height: indicator.height,
|
|
@@ -149,13 +149,13 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
|
|
|
149
149
|
]
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
|
-
const tabsTriggerVariants = cva("relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-
|
|
152
|
+
const tabsTriggerVariants = cva("relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-primary-txt outline-none transition-all focus-visible:ring-3 focus-visible:ring-focus disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-primary-txt [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
153
153
|
variants: {
|
|
154
154
|
variant: {
|
|
155
155
|
line: "h-[calc(100%-1px)] flex-1 rounded-none",
|
|
156
|
-
pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-
|
|
157
|
-
segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-
|
|
158
|
-
fancy: "mb-1
|
|
156
|
+
pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm",
|
|
157
|
+
segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-8",
|
|
158
|
+
fancy: cn("mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass", "bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg", "data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg", "data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:from-glass-none-bg data-[state=active]:to-glass-40-bg data-[state=active]:to-[72.6%] data-[state=active]:font-semibold", "data-[state=active]:before:absolute data-[state=active]:before:-left-4 data-[state=active]:before:bottom-0 data-[state=active]:before:size-4 data-[state=active]:before:bg-[radial-gradient(circle_at_top_left,transparent_15.5px,var(--glass-40-bg)_16px)]", "data-[state=active]:after:absolute data-[state=active]:after:-right-4 data-[state=active]:after:bottom-0 data-[state=active]:after:size-4 data-[state=active]:after:bg-[radial-gradient(circle_at_top_right,transparent_15.5px,var(--glass-40-bg)_16px)]", "first:before:hidden last:after:hidden")
|
|
159
159
|
},
|
|
160
160
|
orientation: {
|
|
161
161
|
horizontal: "",
|
|
@@ -175,7 +175,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
|
|
|
175
175
|
"segmented"
|
|
176
176
|
],
|
|
177
177
|
size: "sm",
|
|
178
|
-
class: "px-
|
|
178
|
+
class: "px-2 py-0.5 text-xs leading-4"
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
181
|
variant: [
|
|
@@ -184,7 +184,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
|
|
|
184
184
|
"segmented"
|
|
185
185
|
],
|
|
186
186
|
size: "md",
|
|
187
|
-
class: "px-2 py-1 text-sm"
|
|
187
|
+
class: "px-2 py-1 text-sm leading-5"
|
|
188
188
|
},
|
|
189
189
|
{
|
|
190
190
|
variant: [
|
|
@@ -193,7 +193,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
|
|
|
193
193
|
"segmented"
|
|
194
194
|
],
|
|
195
195
|
size: "lg",
|
|
196
|
-
class: "px-
|
|
196
|
+
class: "px-2 py-1.5 text-sm leading-5"
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
variant: "fancy",
|
|
@@ -203,22 +203,22 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
|
|
|
203
203
|
{
|
|
204
204
|
variant: "fancy",
|
|
205
205
|
size: "md",
|
|
206
|
-
class: "px-
|
|
206
|
+
class: "px-6 py-3 text-sm"
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
variant: "fancy",
|
|
210
210
|
size: "lg",
|
|
211
|
-
class: "px-
|
|
211
|
+
class: "px-6 py-4 text-base"
|
|
212
212
|
},
|
|
213
213
|
{
|
|
214
214
|
variant: "line",
|
|
215
215
|
orientation: "horizontal",
|
|
216
|
-
class: "after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-
|
|
216
|
+
class: "after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
variant: "line",
|
|
220
220
|
orientation: "vertical",
|
|
221
|
-
class: "after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-
|
|
221
|
+
class: "after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100"
|
|
222
222
|
}
|
|
223
223
|
],
|
|
224
224
|
defaultVariants: {
|
|
@@ -245,7 +245,7 @@ function TabsContent({ className, ...props }) {
|
|
|
245
245
|
const { variant } = React.useContext(TabsContext);
|
|
246
246
|
return /* @__PURE__ */ jsx(Tabs$1.Content, {
|
|
247
247
|
"data-slot": "tabs-content",
|
|
248
|
-
className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-
|
|
248
|
+
className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass", className),
|
|
249
249
|
...props
|
|
250
250
|
});
|
|
251
251
|
}
|
|
@@ -253,7 +253,7 @@ function TabsContent({ className, ...props }) {
|
|
|
253
253
|
function TabsCounter({ className, ...props }) {
|
|
254
254
|
return /* @__PURE__ */ jsx("span", {
|
|
255
255
|
"data-slot": "tabs-counter",
|
|
256
|
-
className: cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-
|
|
256
|
+
className: cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted-bg px-1 text-xs font-medium text-muted-txt", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-primary-invert-bg group-data-[variant=fancy]/tabs:px-2 group-data-[variant=fancy]/tabs:leading-4 group-data-[variant=fancy]/tabs:font-semibold group-data-[variant=fancy]/tabs:text-primary-invert-txt", className),
|
|
257
257
|
...props
|
|
258
258
|
});
|
|
259
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["TabsPrimitive"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {tabSuffix}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["TabsPrimitive"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-txt\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-10 bg-muted-bg p-0.75\",\n segmented: \"justify-center rounded-12 bg-muted-bg p-1\",\n fancy: \"w-full items-stretch gap-1 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-6 p-0.5\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-8.75\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10 p-1\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {tabSuffix}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-primary-txt outline-none transition-all focus-visible:ring-3 focus-visible:ring-focus disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-primary-txt [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-8\",\n // Fancy (Figma Components file, node 1:6831): default = glass-60→glass-20\n // vertical gradient card; hover = solid glass-none; selected = 4px taller,\n // flat-bottomed, glass-none→glass-40 (72.6% stop), semibold, with concave\n // 16px corner curves where it meets the panel.\n fancy: cn(\n \"mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass\",\n \"bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg\",\n \"data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg\",\n \"data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:from-glass-none-bg data-[state=active]:to-glass-40-bg data-[state=active]:to-[72.6%] data-[state=active]:font-semibold\",\n \"data-[state=active]:before:absolute data-[state=active]:before:-left-4 data-[state=active]:before:bottom-0 data-[state=active]:before:size-4 data-[state=active]:before:bg-[radial-gradient(circle_at_top_left,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n \"data-[state=active]:after:absolute data-[state=active]:after:-right-4 data-[state=active]:after:bottom-0 data-[state=active]:after:size-4 data-[state=active]:after:bg-[radial-gradient(circle_at_top_right,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n // The curves flow into NEIGHBOURING tabs only — never past the group edge.\n \"first:before:hidden last:after:hidden\",\n ),\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"sm\",\n class: \"px-2 py-0.5 text-xs leading-4\",\n },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm leading-5\" },\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"lg\",\n class: \"px-2 py-1.5 text-sm leading-5\",\n },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-6 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-6 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted-bg px-1 text-xs font-medium text-muted-txt\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-primary-invert-bg group-data-[variant=fancy]/tabs:px-2 group-data-[variant=fancy]/tabs:leading-4 group-data-[variant=fancy]/tabs:font-semibold group-data-[variant=fancy]/tabs:text-primary-invert-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
|
|
@@ -17,11 +17,11 @@ const textVariants = (0, require("class-variance-authority").cva)("", {
|
|
|
17
17
|
semibold: "font-semibold"
|
|
18
18
|
},
|
|
19
19
|
variant: {
|
|
20
|
-
default: "text-
|
|
21
|
-
muted: "text-muted-
|
|
22
|
-
primary: "text-primary",
|
|
23
|
-
destructive: "text-
|
|
24
|
-
success: "text-
|
|
20
|
+
default: "text-primary-txt",
|
|
21
|
+
muted: "text-muted-txt",
|
|
22
|
+
primary: "text-primary-txt",
|
|
23
|
+
destructive: "text-danger-txt",
|
|
24
|
+
success: "text-success-txt"
|
|
25
25
|
},
|
|
26
26
|
font: {
|
|
27
27
|
body: "font-sans",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-primary-txt\",\n muted: \"text-muted-txt\",\n primary: \"text-primary-txt\",\n destructive: \"text-danger-txt\",\n success: \"text-success-txt\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-primary-txt). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,gBAAA,qCAAA,EAAA,KAAmB,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,iBAAA,GAAA,kBAAA,KAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as TextProps, r as textVariants, t as Text } from "../../
|
|
1
|
+
import { n as TextProps, r as textVariants, t as Text } from "../../index61.cjs";
|
|
2
2
|
export { Text, TextProps, textVariants };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as TextProps, r as textVariants, t as Text } from "../../
|
|
1
|
+
import { n as TextProps, r as textVariants, t as Text } from "../../index61.js";
|
|
2
2
|
export { Text, TextProps, textVariants };
|
|
@@ -17,11 +17,11 @@ const textVariants = cva("", {
|
|
|
17
17
|
semibold: "font-semibold"
|
|
18
18
|
},
|
|
19
19
|
variant: {
|
|
20
|
-
default: "text-
|
|
21
|
-
muted: "text-muted-
|
|
22
|
-
primary: "text-primary",
|
|
23
|
-
destructive: "text-
|
|
24
|
-
success: "text-
|
|
20
|
+
default: "text-primary-txt",
|
|
21
|
+
muted: "text-muted-txt",
|
|
22
|
+
primary: "text-primary-txt",
|
|
23
|
+
destructive: "text-danger-txt",
|
|
24
|
+
success: "text-success-txt"
|
|
25
25
|
},
|
|
26
26
|
font: {
|
|
27
27
|
body: "font-sans",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-primary-txt\",\n muted: \"text-muted-txt\",\n primary: \"text-primary-txt\",\n destructive: \"text-danger-txt\",\n success: \"text-success-txt\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-primary-txt). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,eAAe,IAAI,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,oBAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAW,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -2,18 +2,30 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_cn = require("../../cn.cjs");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
//#region src/primitives/Textarea/Textarea.tsx
|
|
5
|
-
const textareaVariants = (0, require("class-variance-authority").cva)("
|
|
6
|
-
variants: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const textareaVariants = (0, require("class-variance-authority").cva)("text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border",
|
|
9
|
+
ai: "ai-border [--ai-surface:var(--input-bg)]"
|
|
10
|
+
},
|
|
11
|
+
shape: {
|
|
12
|
+
default: "rounded-12",
|
|
13
|
+
round: "rounded-16"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
shape: "default"
|
|
19
|
+
}
|
|
11
20
|
});
|
|
12
21
|
/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */
|
|
13
|
-
function Textarea({ className, shape, ...props }) {
|
|
22
|
+
function Textarea({ className, variant, shape, ...props }) {
|
|
14
23
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
15
24
|
"data-slot": "textarea",
|
|
16
|
-
className: require_cn.cn(textareaVariants({
|
|
25
|
+
className: require_cn.cn(textareaVariants({
|
|
26
|
+
variant,
|
|
27
|
+
shape
|
|
28
|
+
}), className),
|
|
17
29
|
...props
|
|
18
30
|
});
|
|
19
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Textarea (node 16:1745). Chrome matches Input. */\nconst textareaVariants = cva(\n \"text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n // `ai` swaps the border for the AI gradient; text/placeholder are unchanged.\n variant: {\n default:\n \"border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border\",\n ai: \"ai-border [--ai-surface:var(--input-bg)]\",\n },\n shape: {\n default: \"rounded-12\",\n // Figma drew 18px here (off the radius scale, flagged to design); code rounds\n // to the nearest token step, rounded-16.\n round: \"rounded-16\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n /** Chrome style — `default` bordered field or `ai` (AI gradient border). */\n variant,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (12px) or `round` (16px). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ variant, shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAMA,MAAM,oBAAA,qCAAA,EAAA,KACJ,4RACA;CACE,UAAU;EAER,SAAS;GACP,SACE;GACF,IAAI;EACN;EACA,OAAO;GACL,SAAS;GAGT,OAAO;EACT;CACF;CACA,iBAAiB;EACf,SAAS;EACT,OAAO;CACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WAEA,SACA,OACA,GAAG,SAKA;CACH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,iBAAiB;GAAE;GAAS;EAAM,CAAC,GAAG,SAAS;EAC7D,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as textareaVariants, t as Textarea } from "../../
|
|
1
|
+
import { n as textareaVariants, t as Textarea } from "../../index62.cjs";
|
|
2
2
|
export { Textarea, textareaVariants };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as textareaVariants, t as Textarea } from "../../
|
|
1
|
+
import { n as textareaVariants, t as Textarea } from "../../index62.js";
|
|
2
2
|
export { Textarea, textareaVariants };
|
|
@@ -2,18 +2,30 @@ import { t as cn } from "../../cn.js";
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
//#region src/primitives/Textarea/Textarea.tsx
|
|
5
|
-
const textareaVariants = cva("
|
|
6
|
-
variants: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const textareaVariants = cva("text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border",
|
|
9
|
+
ai: "ai-border [--ai-surface:var(--input-bg)]"
|
|
10
|
+
},
|
|
11
|
+
shape: {
|
|
12
|
+
default: "rounded-12",
|
|
13
|
+
round: "rounded-16"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
shape: "default"
|
|
19
|
+
}
|
|
11
20
|
});
|
|
12
21
|
/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */
|
|
13
|
-
function Textarea({ className, shape, ...props }) {
|
|
22
|
+
function Textarea({ className, variant, shape, ...props }) {
|
|
14
23
|
return /* @__PURE__ */ jsx("textarea", {
|
|
15
24
|
"data-slot": "textarea",
|
|
16
|
-
className: cn(textareaVariants({
|
|
25
|
+
className: cn(textareaVariants({
|
|
26
|
+
variant,
|
|
27
|
+
shape
|
|
28
|
+
}), className),
|
|
17
29
|
...props
|
|
18
30
|
});
|
|
19
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Textarea (node 16:1745). Chrome matches Input. */\nconst textareaVariants = cva(\n \"text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n // `ai` swaps the border for the AI gradient; text/placeholder are unchanged.\n variant: {\n default:\n \"border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border\",\n ai: \"ai-border [--ai-surface:var(--input-bg)]\",\n },\n shape: {\n default: \"rounded-12\",\n // Figma drew 18px here (off the radius scale, flagged to design); code rounds\n // to the nearest token step, rounded-16.\n round: \"rounded-16\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n /** Chrome style — `default` bordered field or `ai` (AI gradient border). */\n variant,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (12px) or `round` (16px). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ variant, shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAMA,MAAM,mBAAmB,IACvB,4RACA;CACE,UAAU;EAER,SAAS;GACP,SACE;GACF,IAAI;EACN;EACA,OAAO;GACL,SAAS;GAGT,OAAO;EACT;CACF;CACA,iBAAiB;EACf,SAAS;EACT,OAAO;CACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WAEA,SACA,OACA,GAAG,SAKA;CACH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB;GAAE;GAAS;EAAM,CAAC,GAAG,SAAS;EAC7D,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../
|
|
1
|
+
import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index63.cjs";
|
|
2
2
|
export { ThemeContext, ThemeMode, ThemeProduct, ThemeProvider, useTheme };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../
|
|
1
|
+
import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index63.js";
|
|
2
2
|
export { ThemeContext, ThemeMode, ThemeProduct, ThemeProvider, useTheme };
|
|
@@ -3,25 +3,26 @@ const require_cn = require("../../cn.cjs");
|
|
|
3
3
|
let radix_ui = require("radix-ui");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
//#region src/primitives/Toggle/Toggle.tsx
|
|
6
|
-
const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-
|
|
6
|
+
const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer text-primary-txt hover:bg-ghost-hover-bg disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-toggle-active-bg [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:ring-focus focus-visible:ring-3 outline-none transition-[color,box-shadow] aria-invalid:ring-focus-error aria-invalid:border-danger-border whitespace-nowrap", {
|
|
7
7
|
variants: {
|
|
8
|
-
/** Visual style: `default` (transparent) or `outline` (bordered). */
|
|
8
|
+
/** Visual style: `default` (transparent/ghost) or `outline` (bordered). */
|
|
9
9
|
variant: {
|
|
10
|
-
default: "bg-
|
|
11
|
-
outline: "border border-border bg-
|
|
10
|
+
default: "bg-ghost-bg",
|
|
11
|
+
outline: "border border-primary-border bg-ghost-bg"
|
|
12
12
|
},
|
|
13
|
-
/** Control size: `sm
|
|
13
|
+
/** Control size: `xs` (Mini 24), `sm` (32), `default` (36), or `lg` (40). */
|
|
14
14
|
size: {
|
|
15
|
+
xs: "h-6 px-1 min-w-6",
|
|
16
|
+
sm: "h-8 px-2 min-w-8",
|
|
15
17
|
default: "h-9 px-2 min-w-9",
|
|
16
|
-
|
|
17
|
-
lg: "h-10 px-2.5 min-w-10"
|
|
18
|
+
lg: "h-10 px-2 min-w-10"
|
|
18
19
|
},
|
|
19
20
|
shape: {
|
|
20
|
-
default: "rounded-
|
|
21
|
+
default: "rounded-8",
|
|
21
22
|
round: "rounded-full",
|
|
22
|
-
left: "rounded-l-
|
|
23
|
+
left: "rounded-l-8 rounded-r-none",
|
|
23
24
|
middle: "rounded-none",
|
|
24
|
-
right: "rounded-r-
|
|
25
|
+
right: "rounded-r-8 rounded-l-none"
|
|
25
26
|
}
|
|
26
27
|
},
|
|
27
28
|
compoundVariants: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Toggle & Toggle Group (274:53016). Active state\n is bg/interaction/toggle-active; Figma defines no hover state, so hover keeps\n the subtle ghost tint. */\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer text-primary-txt hover:bg-ghost-hover-bg disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-toggle-active-bg [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:ring-focus focus-visible:ring-3 outline-none transition-[color,box-shadow] aria-invalid:ring-focus-error aria-invalid:border-danger-border whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent/ghost) or `outline` (bordered). */\n variant: {\n default: \"bg-ghost-bg\",\n outline: \"border border-primary-border bg-ghost-bg\",\n },\n /** Control size: `xs` (Mini 24), `sm` (32), `default` (36), or `lg` (40). */\n size: {\n xs: \"h-6 px-1 min-w-6\",\n sm: \"h-8 px-2 min-w-8\",\n default: \"h-9 px-2 min-w-9\",\n lg: \"h-10 px-2 min-w-10\",\n },\n // Shape (Figma): `default` (8px) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-8\",\n round: \"rounded-full\",\n left: \"rounded-l-8 rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-8 rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AASA,MAAM,kBAAA,qCAAA,EAAA,KACJ,2eACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
|