@psnext/design-system 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +27 -4
- package/SKILL.md +1 -1
- package/dist/Header.cjs +1 -1
- package/dist/Header.cjs.map +1 -1
- package/dist/Header.js +1 -1
- package/dist/Header.js.map +1 -1
- package/dist/Mosaic.cjs +472 -0
- package/dist/Mosaic.cjs.map +1 -0
- package/dist/Mosaic.js +459 -0
- package/dist/Mosaic.js.map +1 -0
- package/dist/index.cjs +13 -2
- 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.js +7 -3
- package/dist/index10.d.cts +6 -6
- package/dist/index10.d.cts.map +1 -1
- package/dist/index10.d.ts +6 -6
- package/dist/index11.d.cts +3 -3
- package/dist/index11.d.ts +3 -3
- package/dist/index12.d.cts +12 -12
- package/dist/index12.d.cts.map +1 -1
- package/dist/index12.d.ts +12 -12
- package/dist/index13.d.cts +6 -6
- package/dist/index13.d.cts.map +1 -1
- package/dist/index13.d.ts +6 -6
- package/dist/index14.d.cts +5 -5
- package/dist/index14.d.ts +5 -5
- package/dist/index15.d.cts +58 -23
- package/dist/index15.d.cts.map +1 -1
- package/dist/index15.d.ts +58 -23
- package/dist/index15.d.ts.map +1 -1
- package/dist/index16.d.cts +23 -32
- package/dist/index16.d.cts.map +1 -1
- package/dist/index16.d.ts +23 -32
- package/dist/index16.d.ts.map +1 -1
- package/dist/index17.d.cts +34 -15
- package/dist/index17.d.cts.map +1 -1
- package/dist/index17.d.ts +34 -15
- package/dist/index17.d.ts.map +1 -1
- package/dist/index18.d.cts +13 -67
- package/dist/index18.d.cts.map +1 -1
- package/dist/index18.d.ts +13 -67
- package/dist/index18.d.ts.map +1 -1
- package/dist/index19.d.cts +55 -48
- package/dist/index19.d.cts.map +1 -1
- package/dist/index19.d.ts +55 -48
- package/dist/index19.d.ts.map +1 -1
- package/dist/index2.d.cts +8 -8
- package/dist/index2.d.cts.map +1 -1
- package/dist/index2.d.ts +8 -8
- package/dist/index2.d.ts.map +1 -1
- package/dist/index20.d.cts +45 -75
- package/dist/index20.d.cts.map +1 -1
- package/dist/index20.d.ts +45 -75
- package/dist/index20.d.ts.map +1 -1
- package/dist/index21.d.cts +90 -28
- package/dist/index21.d.cts.map +1 -1
- package/dist/index21.d.ts +90 -28
- package/dist/index21.d.ts.map +1 -1
- package/dist/index22.d.cts +28 -56
- package/dist/index22.d.cts.map +1 -1
- package/dist/index22.d.ts +28 -56
- package/dist/index22.d.ts.map +1 -1
- package/dist/index23.d.cts +53 -78
- package/dist/index23.d.cts.map +1 -1
- package/dist/index23.d.ts +53 -78
- package/dist/index23.d.ts.map +1 -1
- package/dist/index24.d.cts +83 -33
- package/dist/index24.d.cts.map +1 -1
- package/dist/index24.d.ts +83 -33
- package/dist/index24.d.ts.map +1 -1
- package/dist/index25.d.cts +43 -11
- package/dist/index25.d.cts.map +1 -1
- package/dist/index25.d.ts +43 -11
- package/dist/index25.d.ts.map +1 -1
- package/dist/index26.d.cts +11 -74
- package/dist/index26.d.cts.map +1 -1
- package/dist/index26.d.ts +11 -74
- package/dist/index26.d.ts.map +1 -1
- package/dist/index27.d.cts +68 -59
- package/dist/index27.d.cts.map +1 -1
- package/dist/index27.d.ts +68 -59
- package/dist/index27.d.ts.map +1 -1
- package/dist/index28.d.cts +47 -30
- package/dist/index28.d.cts.map +1 -1
- package/dist/index28.d.ts +47 -30
- package/dist/index28.d.ts.map +1 -1
- package/dist/index29.d.cts +63 -17
- package/dist/index29.d.cts.map +1 -1
- package/dist/index29.d.ts +63 -17
- package/dist/index29.d.ts.map +1 -1
- package/dist/index3.d.cts +13 -13
- package/dist/index3.d.cts.map +1 -1
- package/dist/index3.d.ts +13 -13
- package/dist/index30.d.cts +29 -80
- package/dist/index30.d.cts.map +1 -1
- package/dist/index30.d.ts +29 -80
- package/dist/index30.d.ts.map +1 -1
- package/dist/index31.d.cts +19 -34
- package/dist/index31.d.cts.map +1 -1
- package/dist/index31.d.ts +19 -34
- package/dist/index31.d.ts.map +1 -1
- package/dist/index32.d.cts +80 -18
- package/dist/index32.d.cts.map +1 -1
- package/dist/index32.d.ts +79 -17
- package/dist/index32.d.ts.map +1 -1
- package/dist/index33.d.cts +32 -51
- package/dist/index33.d.cts.map +1 -1
- package/dist/index33.d.ts +32 -51
- package/dist/index33.d.ts.map +1 -1
- package/dist/index34.d.cts +19 -36
- package/dist/index34.d.cts.map +1 -1
- package/dist/index34.d.ts +19 -36
- package/dist/index34.d.ts.map +1 -1
- package/dist/index35.d.cts +43 -61
- package/dist/index35.d.cts.map +1 -1
- package/dist/index35.d.ts +43 -61
- package/dist/index35.d.ts.map +1 -1
- package/dist/index36.d.cts +35 -11
- package/dist/index36.d.cts.map +1 -1
- package/dist/index36.d.ts +35 -11
- package/dist/index36.d.ts.map +1 -1
- package/dist/index37.d.cts +68 -20
- package/dist/index37.d.cts.map +1 -1
- package/dist/index37.d.ts +68 -20
- package/dist/index37.d.ts.map +1 -1
- package/dist/index38.d.cts +14 -15
- package/dist/index38.d.cts.map +1 -1
- package/dist/index38.d.ts +14 -15
- package/dist/index38.d.ts.map +1 -1
- package/dist/index39.d.cts +22 -98
- package/dist/index39.d.cts.map +1 -1
- package/dist/index39.d.ts +22 -98
- package/dist/index39.d.ts.map +1 -1
- package/dist/index4.d.cts +2 -2
- package/dist/index4.d.cts.map +1 -1
- package/dist/index4.d.ts +2 -2
- package/dist/index4.d.ts.map +1 -1
- package/dist/index40.d.cts +15 -17
- package/dist/index40.d.cts.map +1 -1
- package/dist/index40.d.ts +15 -17
- package/dist/index40.d.ts.map +1 -1
- package/dist/index41.d.cts +84 -35
- package/dist/index41.d.cts.map +1 -1
- package/dist/index41.d.ts +84 -35
- package/dist/index41.d.ts.map +1 -1
- package/dist/index42.d.cts +118 -38
- package/dist/index42.d.cts.map +1 -1
- package/dist/index42.d.ts +118 -38
- package/dist/index42.d.ts.map +1 -1
- package/dist/index43.d.cts +15 -89
- package/dist/index43.d.cts.map +1 -1
- package/dist/index43.d.ts +15 -89
- package/dist/index43.d.ts.map +1 -1
- package/dist/index44.d.cts +56 -1
- package/dist/index44.d.cts.map +1 -0
- package/dist/index44.d.ts +56 -1
- package/dist/index44.d.ts.map +1 -0
- package/dist/index45.d.cts +31 -34
- package/dist/index45.d.cts.map +1 -1
- package/dist/index45.d.ts +31 -34
- package/dist/index45.d.ts.map +1 -1
- package/dist/index46.d.cts +89 -21
- package/dist/index46.d.cts.map +1 -1
- package/dist/index46.d.ts +89 -21
- package/dist/index46.d.ts.map +1 -1
- package/dist/index47.d.cts +1 -41
- package/dist/index47.d.ts +1 -41
- package/dist/index48.d.cts +122 -20
- package/dist/index48.d.cts.map +1 -1
- package/dist/index48.d.ts +122 -20
- package/dist/index48.d.ts.map +1 -1
- package/dist/index49.d.cts +40 -13
- package/dist/index49.d.cts.map +1 -1
- package/dist/index49.d.ts +40 -13
- package/dist/index49.d.ts.map +1 -1
- package/dist/index5.d.cts +7 -7
- package/dist/index5.d.cts.map +1 -1
- package/dist/index5.d.ts +7 -7
- package/dist/index50.d.cts +22 -63
- package/dist/index50.d.cts.map +1 -1
- package/dist/index50.d.ts +22 -63
- package/dist/index50.d.ts.map +1 -1
- package/dist/index51.d.cts +33 -55
- package/dist/index51.d.cts.map +1 -1
- package/dist/index51.d.ts +33 -55
- package/dist/index51.d.ts.map +1 -1
- package/dist/index52.d.cts +18 -24
- package/dist/index52.d.cts.map +1 -1
- package/dist/index52.d.ts +18 -24
- package/dist/index52.d.ts.map +1 -1
- package/dist/index53.d.cts +12 -200
- package/dist/index53.d.cts.map +1 -1
- package/dist/index53.d.ts +12 -200
- package/dist/index53.d.ts.map +1 -1
- package/dist/index54.d.cts +58 -15
- package/dist/index54.d.cts.map +1 -1
- package/dist/index54.d.ts +58 -15
- package/dist/index54.d.ts.map +1 -1
- package/dist/index55.d.cts +93 -23
- package/dist/index55.d.cts.map +1 -1
- package/dist/index55.d.ts +93 -23
- package/dist/index55.d.ts.map +1 -1
- package/dist/index56.d.cts +27 -21
- package/dist/index56.d.cts.map +1 -1
- package/dist/index56.d.ts +27 -21
- package/dist/index56.d.ts.map +1 -1
- package/dist/index57.d.cts +203 -6
- package/dist/index57.d.cts.map +1 -1
- package/dist/index57.d.ts +203 -6
- package/dist/index57.d.ts.map +1 -1
- package/dist/index58.d.cts +17 -41
- package/dist/index58.d.cts.map +1 -1
- package/dist/index58.d.ts +17 -41
- package/dist/index58.d.ts.map +1 -1
- package/dist/index59.d.cts +24 -47
- package/dist/index59.d.cts.map +1 -1
- package/dist/index59.d.ts +24 -47
- package/dist/index59.d.ts.map +1 -1
- package/dist/index6.d.cts +5 -5
- package/dist/index6.d.cts.map +1 -1
- package/dist/index6.d.ts +5 -5
- package/dist/index60.d.cts +19 -57
- package/dist/index60.d.cts.map +1 -1
- package/dist/index60.d.ts +19 -57
- package/dist/index60.d.ts.map +1 -1
- package/dist/index61.d.cts +6 -39
- package/dist/index61.d.cts.map +1 -1
- package/dist/index61.d.ts +6 -39
- package/dist/index61.d.ts.map +1 -1
- package/dist/index62.d.cts +44 -18
- package/dist/index62.d.cts.map +1 -1
- package/dist/index62.d.ts +44 -18
- package/dist/index62.d.ts.map +1 -1
- package/dist/index63.d.cts +47 -41
- package/dist/index63.d.cts.map +1 -1
- package/dist/index63.d.ts +47 -41
- package/dist/index63.d.ts.map +1 -1
- package/dist/index64.d.cts +55 -15
- package/dist/index64.d.cts.map +1 -1
- package/dist/index64.d.ts +55 -15
- package/dist/index64.d.ts.map +1 -1
- package/dist/index65.d.cts +36 -39
- package/dist/index65.d.cts.map +1 -1
- package/dist/index65.d.ts +36 -39
- package/dist/index65.d.ts.map +1 -1
- package/dist/index66.d.cts +16 -17
- package/dist/index66.d.cts.map +1 -1
- package/dist/index66.d.ts +16 -17
- package/dist/index66.d.ts.map +1 -1
- package/dist/index67.d.cts +38 -84
- package/dist/index67.d.cts.map +1 -1
- package/dist/index67.d.ts +38 -84
- package/dist/index67.d.ts.map +1 -1
- package/dist/index68.d.cts +17 -13
- package/dist/index68.d.cts.map +1 -1
- package/dist/index68.d.ts +17 -13
- package/dist/index68.d.ts.map +1 -1
- package/dist/index69.d.cts +41 -30
- package/dist/index69.d.cts.map +1 -1
- package/dist/index69.d.ts +41 -30
- package/dist/index69.d.ts.map +1 -1
- package/dist/index7.d.cts +8 -8
- package/dist/index7.d.ts +8 -8
- package/dist/index7.d.ts.map +1 -1
- package/dist/index70.d.cts +17 -28
- package/dist/index70.d.cts.map +1 -1
- package/dist/index70.d.ts +17 -28
- package/dist/index70.d.ts.map +1 -1
- package/dist/index71.d.cts +88 -79
- package/dist/index71.d.cts.map +1 -1
- package/dist/index71.d.ts +88 -79
- package/dist/index71.d.ts.map +1 -1
- package/dist/index72.d.cts +13 -272
- package/dist/index72.d.cts.map +1 -1
- package/dist/index72.d.ts +13 -272
- package/dist/index72.d.ts.map +1 -1
- package/dist/index73.d.cts +37 -0
- package/dist/index73.d.cts.map +1 -0
- package/dist/index73.d.ts +37 -0
- package/dist/index73.d.ts.map +1 -0
- package/dist/index74.d.cts +36 -0
- package/dist/index74.d.cts.map +1 -0
- package/dist/index74.d.ts +36 -0
- package/dist/index74.d.ts.map +1 -0
- package/dist/index75.d.cts +86 -0
- package/dist/index75.d.cts.map +1 -0
- package/dist/index75.d.ts +86 -0
- package/dist/index75.d.ts.map +1 -0
- package/dist/index76.d.cts +278 -0
- package/dist/index76.d.cts.map +1 -0
- package/dist/index76.d.ts +278 -0
- package/dist/index76.d.ts.map +1 -0
- package/dist/index8.d.cts +4 -4
- package/dist/index8.d.cts.map +1 -1
- package/dist/index8.d.ts +4 -4
- 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.d.cts +1 -1
- package/dist/layouts/Container/index.d.ts +1 -1
- package/dist/layouts/MultiColumn/index.d.cts +1 -1
- package/dist/layouts/MultiColumn/index.d.ts +1 -1
- package/dist/layouts/PageBackground/index.d.cts +1 -1
- package/dist/layouts/PageBackground/index.d.ts +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 +5 -5
- package/dist/layouts/index.d.ts +5 -5
- 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/Footer/index.d.cts +7 -7
- package/dist/patterns/Footer/index.d.ts +7 -7
- package/dist/patterns/Header/index.d.cts +1 -1
- package/dist/patterns/Header/index.d.ts +1 -1
- package/dist/patterns/MediaObject/index.d.cts +14 -14
- package/dist/patterns/MediaObject/index.d.cts.map +1 -1
- package/dist/patterns/MediaObject/index.d.ts +13 -13
- package/dist/patterns/NavRail/index.d.cts +1 -1
- package/dist/patterns/NavRail/index.d.ts +1 -1
- package/dist/patterns/SectionCard/index.d.cts +2 -2
- package/dist/patterns/SectionCard/index.d.cts.map +1 -1
- package/dist/patterns/SectionCard/index.d.ts +2 -2
- package/dist/patterns/SectionCard/index.d.ts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.cts +3 -3
- package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
- package/dist/patterns/SectionHeading/index.d.ts +3 -3
- package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
- package/dist/patterns/index.d.cts +2 -2
- package/dist/patterns/index.d.ts +2 -2
- package/dist/primitives/Checkbox/index.cjs +1 -1
- package/dist/primitives/Checkbox/index.cjs.map +1 -1
- package/dist/primitives/Checkbox/index.d.cts +1 -1
- package/dist/primitives/Checkbox/index.d.ts +1 -1
- package/dist/primitives/Checkbox/index.js +1 -1
- package/dist/primitives/Checkbox/index.js.map +1 -1
- package/dist/primitives/CheckboxTree/index.d.cts +1 -1
- package/dist/primitives/CheckboxTree/index.d.ts +1 -1
- package/dist/primitives/CircularProgress/index.cjs +106 -0
- package/dist/primitives/CircularProgress/index.cjs.map +1 -0
- package/dist/primitives/CircularProgress/index.d.cts +2 -0
- package/dist/primitives/CircularProgress/index.d.ts +2 -0
- package/dist/primitives/CircularProgress/index.js +105 -0
- package/dist/primitives/CircularProgress/index.js.map +1 -0
- package/dist/primitives/Collapsible/index.d.cts +1 -1
- package/dist/primitives/Collapsible/index.d.ts +1 -1
- package/dist/primitives/Command/index.d.cts +1 -1
- package/dist/primitives/Command/index.d.ts +1 -1
- package/dist/primitives/ContextMenu/index.d.cts +1 -1
- package/dist/primitives/ContextMenu/index.d.ts +1 -1
- package/dist/primitives/Credits/index.d.cts +1 -1
- package/dist/primitives/Credits/index.d.ts +1 -1
- package/dist/primitives/Dialog/index.d.cts +1 -1
- package/dist/primitives/Dialog/index.d.ts +1 -1
- package/dist/primitives/Drawer/index.cjs +34 -2
- package/dist/primitives/Drawer/index.cjs.map +1 -1
- package/dist/primitives/Drawer/index.d.cts +1 -1
- package/dist/primitives/Drawer/index.d.ts +1 -1
- package/dist/primitives/Drawer/index.js +34 -2
- package/dist/primitives/Drawer/index.js.map +1 -1
- package/dist/primitives/DropdownMenu/index.d.cts +1 -1
- package/dist/primitives/DropdownMenu/index.d.ts +1 -1
- package/dist/primitives/Empty/index.d.cts +1 -1
- package/dist/primitives/Empty/index.d.ts +1 -1
- package/dist/primitives/Field/index.d.cts +1 -1
- package/dist/primitives/Field/index.d.ts +1 -1
- package/dist/primitives/FileUpload/index.cjs +354 -0
- package/dist/primitives/FileUpload/index.cjs.map +1 -0
- package/dist/primitives/FileUpload/index.d.cts +2 -0
- package/dist/primitives/FileUpload/index.d.ts +2 -0
- package/dist/primitives/FileUpload/index.js +351 -0
- package/dist/primitives/FileUpload/index.js.map +1 -0
- package/dist/primitives/Form/index.d.cts +1 -1
- package/dist/primitives/Form/index.d.ts +1 -1
- package/dist/primitives/Heading/index.d.cts +1 -1
- package/dist/primitives/Heading/index.d.ts +1 -1
- package/dist/primitives/HoverCard/index.d.cts +1 -1
- package/dist/primitives/HoverCard/index.d.ts +1 -1
- package/dist/primitives/Icon/index.d.cts +1 -1
- package/dist/primitives/Icon/index.d.ts +1 -1
- package/dist/primitives/InfoBanner/index.d.cts +1 -1
- package/dist/primitives/InfoBanner/index.d.ts +1 -1
- package/dist/primitives/Input/index.d.cts +1 -1
- package/dist/primitives/Input/index.d.ts +1 -1
- package/dist/primitives/InputGroup/index.d.cts +1 -1
- package/dist/primitives/InputGroup/index.d.ts +1 -1
- package/dist/primitives/InputOtp/index.d.cts +1 -1
- package/dist/primitives/InputOtp/index.d.ts +1 -1
- package/dist/primitives/Item/index.d.cts +1 -1
- package/dist/primitives/Item/index.d.ts +1 -1
- package/dist/primitives/Kbd/index.d.cts +1 -1
- package/dist/primitives/Kbd/index.d.ts +1 -1
- package/dist/primitives/Label/index.d.cts +1 -1
- package/dist/primitives/Label/index.d.ts +1 -1
- package/dist/primitives/Link/index.d.cts +1 -1
- package/dist/primitives/Link/index.d.ts +1 -1
- package/dist/primitives/Logo/index.d.cts +1 -1
- package/dist/primitives/Logo/index.d.ts +1 -1
- package/dist/primitives/Menubar/index.d.cts +1 -1
- package/dist/primitives/Menubar/index.d.ts +1 -1
- package/dist/primitives/Mosaic/index.cjs +4 -0
- package/dist/primitives/Mosaic/index.d.cts +2 -0
- package/dist/primitives/Mosaic/index.d.ts +2 -0
- package/dist/primitives/Mosaic/index.js +2 -0
- package/dist/primitives/NativeSelect/index.d.cts +1 -1
- package/dist/primitives/NativeSelect/index.d.ts +1 -1
- package/dist/primitives/NavRail/index.d.cts +2 -2
- package/dist/primitives/NavRail/index.d.ts +2 -2
- package/dist/primitives/NavigationMenu/index.d.cts +1 -1
- package/dist/primitives/NavigationMenu/index.d.ts +1 -1
- package/dist/primitives/NotchedCard/index.cjs +390 -0
- package/dist/primitives/NotchedCard/index.cjs.map +1 -0
- package/dist/primitives/NotchedCard/index.d.cts +2 -0
- package/dist/primitives/NotchedCard/index.d.ts +2 -0
- package/dist/primitives/NotchedCard/index.js +385 -0
- package/dist/primitives/NotchedCard/index.js.map +1 -0
- package/dist/primitives/Pagination/index.d.cts +1 -1
- package/dist/primitives/Pagination/index.d.ts +1 -1
- package/dist/primitives/Popover/index.d.cts +1 -1
- package/dist/primitives/Popover/index.d.ts +1 -1
- package/dist/primitives/Progress/index.d.cts +1 -1
- package/dist/primitives/Progress/index.d.ts +1 -1
- package/dist/primitives/RadioGroup/index.cjs +1 -1
- 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 +1 -1
- package/dist/primitives/RadioGroup/index.js.map +1 -1
- package/dist/primitives/Resizable/index.d.cts +1 -1
- package/dist/primitives/Resizable/index.d.ts +1 -1
- package/dist/primitives/ScrollArea/index.d.cts +1 -1
- package/dist/primitives/ScrollArea/index.d.ts +1 -1
- package/dist/primitives/Select/index.d.cts +1 -1
- package/dist/primitives/Select/index.d.ts +1 -1
- package/dist/primitives/Sheet/index.cjs +34 -2
- 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 +34 -2
- package/dist/primitives/Sheet/index.js.map +1 -1
- package/dist/primitives/Sidebar/index.d.cts +1 -1
- package/dist/primitives/Sidebar/index.d.ts +1 -1
- package/dist/primitives/Skeleton/index.d.cts +1 -1
- package/dist/primitives/Skeleton/index.d.ts +1 -1
- package/dist/primitives/Slider/index.d.cts +1 -1
- package/dist/primitives/Slider/index.d.ts +1 -1
- package/dist/primitives/Sonner/index.d.cts +1 -1
- package/dist/primitives/Sonner/index.d.ts +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.d.cts +1 -1
- package/dist/primitives/Switch/index.d.ts +1 -1
- package/dist/primitives/Table/index.d.cts +1 -1
- package/dist/primitives/Table/index.d.ts +1 -1
- package/dist/primitives/Tabs/index.d.cts +1 -1
- package/dist/primitives/Tabs/index.d.ts +1 -1
- package/dist/primitives/Text/index.d.cts +1 -1
- package/dist/primitives/Text/index.d.ts +1 -1
- package/dist/primitives/Textarea/index.d.cts +1 -1
- package/dist/primitives/Textarea/index.d.ts +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.d.cts +1 -1
- package/dist/primitives/Toggle/index.d.ts +1 -1
- package/dist/primitives/ToggleGroup/index.d.cts +1 -1
- package/dist/primitives/ToggleGroup/index.d.ts +1 -1
- package/dist/primitives/Tooltip/index.d.cts +1 -1
- package/dist/primitives/Tooltip/index.d.ts +1 -1
- package/dist/primitives/index.cjs +13 -2
- package/dist/primitives/index.d.cts +55 -51
- package/dist/primitives/index.d.ts +55 -51
- package/dist/primitives/index.js +7 -3
- package/package.json +1 -1
- package/dist/index47.d.cts.map +0 -1
- package/dist/index47.d.ts.map +0 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_chunk = require("../../chunk.cjs");
|
|
3
|
+
const require_cn = require("../../cn.cjs");
|
|
4
|
+
const require_primitives_Button_index = require("../Button/index.cjs");
|
|
5
|
+
const require_primitives_Progress_index = require("../Progress/index.cjs");
|
|
6
|
+
let react = require("react");
|
|
7
|
+
react = require_chunk.__toESM(react);
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
let lucide_react = require("lucide-react");
|
|
10
|
+
//#region src/primitives/FileUpload/FileUpload.tsx
|
|
11
|
+
function clamp(value, min, max) {
|
|
12
|
+
return Math.min(max, Math.max(min, value));
|
|
13
|
+
}
|
|
14
|
+
function formatBytes(value) {
|
|
15
|
+
if (!Number.isFinite(value) || value <= 0) return "0 B";
|
|
16
|
+
const units = [
|
|
17
|
+
"B",
|
|
18
|
+
"KB",
|
|
19
|
+
"MB",
|
|
20
|
+
"GB",
|
|
21
|
+
"TB"
|
|
22
|
+
];
|
|
23
|
+
const exponent = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);
|
|
24
|
+
const size = value / 1024 ** exponent;
|
|
25
|
+
return `${size.toFixed(size >= 10 || exponent === 0 ? 0 : 1)} ${units[exponent]}`;
|
|
26
|
+
}
|
|
27
|
+
function getAcceptTokens(accept) {
|
|
28
|
+
return (accept ?? "").split(",").map((token) => token.trim().toLowerCase()).filter(Boolean);
|
|
29
|
+
}
|
|
30
|
+
function matchesAccept(file, accept) {
|
|
31
|
+
const tokens = getAcceptTokens(accept);
|
|
32
|
+
if (tokens.length === 0) return true;
|
|
33
|
+
const fileName = file.name.toLowerCase();
|
|
34
|
+
const fileType = file.type.toLowerCase();
|
|
35
|
+
return tokens.some((token) => {
|
|
36
|
+
if (token.startsWith(".")) return fileName.endsWith(token);
|
|
37
|
+
if (token.endsWith("/*")) {
|
|
38
|
+
const category = token.slice(0, token.length - 1);
|
|
39
|
+
return fileType.startsWith(category);
|
|
40
|
+
}
|
|
41
|
+
return fileType === token;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function createFileItem(file) {
|
|
45
|
+
return {
|
|
46
|
+
id: typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${file.name}-${file.lastModified}-${Math.random().toString(36).slice(2)}`,
|
|
47
|
+
file,
|
|
48
|
+
status: "idle",
|
|
49
|
+
progress: 0
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function hasFiles(event) {
|
|
53
|
+
return Array.from(event.dataTransfer?.types ?? []).includes("Files");
|
|
54
|
+
}
|
|
55
|
+
function getStatusLabel(item) {
|
|
56
|
+
if (item.status === "idle") return "Ready to upload";
|
|
57
|
+
if (item.status === "uploading") return `Uploading… ${Math.round(item.progress)}%`;
|
|
58
|
+
if (item.status === "success") return "Upload complete";
|
|
59
|
+
return item.error ? `Upload failed: ${item.error}` : "Upload failed";
|
|
60
|
+
}
|
|
61
|
+
/** File upload primitive with click-to-browse and drag-and-drop interactions, validation, and per-file upload states. */
|
|
62
|
+
function FileUpload({ className, multiple = false, accept, maxFiles, maxFileSize, validateFile, onUpload, onItemsChange, dropzoneAriaLabel = "File upload drop zone", disabled, ...props }) {
|
|
63
|
+
const inputRef = react.useRef(null);
|
|
64
|
+
const uploadControllersRef = react.useRef(/* @__PURE__ */ new Map());
|
|
65
|
+
const [items, setItems] = react.useState([]);
|
|
66
|
+
const [errors, setErrors] = react.useState([]);
|
|
67
|
+
const [dragState, setDragState] = react.useState("idle");
|
|
68
|
+
const dragDepthRef = react.useRef(0);
|
|
69
|
+
const baseId = react.useId();
|
|
70
|
+
const hintId = `${baseId}-hint`;
|
|
71
|
+
const errorId = `${baseId}-errors`;
|
|
72
|
+
const updateItem = react.useCallback((itemId, updater) => {
|
|
73
|
+
setItems((current) => current.map((item) => item.id === itemId ? updater(item) : item));
|
|
74
|
+
}, []);
|
|
75
|
+
const removeItem = react.useCallback((itemId) => {
|
|
76
|
+
uploadControllersRef.current.get(itemId)?.abort();
|
|
77
|
+
uploadControllersRef.current.delete(itemId);
|
|
78
|
+
setItems((current) => current.filter((item) => item.id !== itemId));
|
|
79
|
+
}, []);
|
|
80
|
+
const beginUpload = react.useCallback((item) => {
|
|
81
|
+
if (!onUpload) return;
|
|
82
|
+
const controller = new AbortController();
|
|
83
|
+
uploadControllersRef.current.set(item.id, controller);
|
|
84
|
+
updateItem(item.id, (current) => ({
|
|
85
|
+
...current,
|
|
86
|
+
status: "uploading",
|
|
87
|
+
progress: 0,
|
|
88
|
+
error: void 0
|
|
89
|
+
}));
|
|
90
|
+
onUpload({
|
|
91
|
+
file: item.file,
|
|
92
|
+
signal: controller.signal,
|
|
93
|
+
reportProgress: (value) => {
|
|
94
|
+
updateItem(item.id, (current) => {
|
|
95
|
+
if (current.status !== "uploading") return current;
|
|
96
|
+
return {
|
|
97
|
+
...current,
|
|
98
|
+
progress: clamp(value, 0, 100)
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}).then(() => {
|
|
103
|
+
if (controller.signal.aborted) return;
|
|
104
|
+
updateItem(item.id, (current) => ({
|
|
105
|
+
...current,
|
|
106
|
+
status: "success",
|
|
107
|
+
progress: 100,
|
|
108
|
+
error: void 0
|
|
109
|
+
}));
|
|
110
|
+
}).catch((uploadError) => {
|
|
111
|
+
if (controller.signal.aborted) return;
|
|
112
|
+
const message = uploadError instanceof Error && uploadError.message ? uploadError.message : "Upload failed.";
|
|
113
|
+
updateItem(item.id, (current) => ({
|
|
114
|
+
...current,
|
|
115
|
+
status: "error",
|
|
116
|
+
error: message
|
|
117
|
+
}));
|
|
118
|
+
}).finally(() => {
|
|
119
|
+
uploadControllersRef.current.delete(item.id);
|
|
120
|
+
});
|
|
121
|
+
}, [onUpload, updateItem]);
|
|
122
|
+
const queueFiles = react.useCallback((queuedFiles) => {
|
|
123
|
+
const incoming = Array.isArray(queuedFiles) ? queuedFiles : Array.from(queuedFiles);
|
|
124
|
+
if (incoming.length === 0) return;
|
|
125
|
+
if (!multiple) {
|
|
126
|
+
uploadControllersRef.current.forEach((controller) => controller.abort());
|
|
127
|
+
uploadControllersRef.current.clear();
|
|
128
|
+
}
|
|
129
|
+
const nextErrors = [];
|
|
130
|
+
const acceptedItems = [];
|
|
131
|
+
const nextItems = multiple ? [...items] : [];
|
|
132
|
+
const effectiveMaxFiles = multiple ? maxFiles ?? Number.POSITIVE_INFINITY : 1;
|
|
133
|
+
let candidates = incoming;
|
|
134
|
+
if (!multiple && incoming.length > 1) {
|
|
135
|
+
nextErrors.push("Only one file can be selected at a time.");
|
|
136
|
+
candidates = [incoming[0]];
|
|
137
|
+
}
|
|
138
|
+
const availableSlots = Math.max(0, effectiveMaxFiles - nextItems.length);
|
|
139
|
+
if (availableSlots < candidates.length) {
|
|
140
|
+
nextErrors.push(`You can upload up to ${effectiveMaxFiles} file${effectiveMaxFiles === 1 ? "" : "s"}.`);
|
|
141
|
+
candidates = candidates.slice(0, availableSlots);
|
|
142
|
+
}
|
|
143
|
+
for (const file of candidates) {
|
|
144
|
+
if (!matchesAccept(file, accept)) {
|
|
145
|
+
nextErrors.push(`${file.name} has an unsupported file type.`);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (maxFileSize != null && file.size > maxFileSize) {
|
|
149
|
+
nextErrors.push(`${file.name} exceeds the ${formatBytes(maxFileSize)} size limit.`);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const customError = validateFile?.(file);
|
|
153
|
+
if (customError) {
|
|
154
|
+
nextErrors.push(customError);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const item = createFileItem(file);
|
|
158
|
+
acceptedItems.push(item);
|
|
159
|
+
nextItems.push(item);
|
|
160
|
+
}
|
|
161
|
+
setItems(nextItems);
|
|
162
|
+
setErrors(nextErrors);
|
|
163
|
+
setDragState(nextErrors.length > 0 ? "invalid-drop" : "idle");
|
|
164
|
+
if (onUpload) acceptedItems.forEach((item) => beginUpload(item));
|
|
165
|
+
}, [
|
|
166
|
+
accept,
|
|
167
|
+
beginUpload,
|
|
168
|
+
items,
|
|
169
|
+
maxFileSize,
|
|
170
|
+
maxFiles,
|
|
171
|
+
multiple,
|
|
172
|
+
onUpload,
|
|
173
|
+
validateFile
|
|
174
|
+
]);
|
|
175
|
+
const openPicker = react.useCallback(() => {
|
|
176
|
+
if (disabled) return;
|
|
177
|
+
inputRef.current?.click();
|
|
178
|
+
}, [disabled]);
|
|
179
|
+
const handleInputChange = react.useCallback((event) => {
|
|
180
|
+
queueFiles(event.target.files ?? []);
|
|
181
|
+
event.target.value = "";
|
|
182
|
+
}, [queueFiles]);
|
|
183
|
+
const handleDragEnter = react.useCallback((event) => {
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
if (disabled) return;
|
|
186
|
+
if (!hasFiles(event)) {
|
|
187
|
+
setDragState("invalid-drop");
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
dragDepthRef.current += 1;
|
|
191
|
+
setDragState("drag-over");
|
|
192
|
+
}, [disabled]);
|
|
193
|
+
const handleDragOver = react.useCallback((event) => {
|
|
194
|
+
event.preventDefault();
|
|
195
|
+
if (disabled) return;
|
|
196
|
+
if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
|
|
197
|
+
if (!hasFiles(event)) setDragState("invalid-drop");
|
|
198
|
+
}, [disabled]);
|
|
199
|
+
const handleDragLeave = react.useCallback((event) => {
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
|
|
202
|
+
if (dragDepthRef.current === 0) setDragState("idle");
|
|
203
|
+
}, []);
|
|
204
|
+
const handleDrop = react.useCallback((event) => {
|
|
205
|
+
event.preventDefault();
|
|
206
|
+
dragDepthRef.current = 0;
|
|
207
|
+
if (disabled) return;
|
|
208
|
+
if (!hasFiles(event)) {
|
|
209
|
+
setErrors(["Only files can be dropped here."]);
|
|
210
|
+
setDragState("invalid-drop");
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
queueFiles(event.dataTransfer.files);
|
|
214
|
+
}, [disabled, queueFiles]);
|
|
215
|
+
react.useEffect(() => {
|
|
216
|
+
onItemsChange?.(items);
|
|
217
|
+
}, [items, onItemsChange]);
|
|
218
|
+
react.useEffect(() => () => {
|
|
219
|
+
uploadControllersRef.current.forEach((controller) => controller.abort());
|
|
220
|
+
uploadControllersRef.current.clear();
|
|
221
|
+
}, []);
|
|
222
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
223
|
+
"data-slot": "file-upload",
|
|
224
|
+
className: require_cn.cn("flex flex-col gap-3", className),
|
|
225
|
+
...props,
|
|
226
|
+
children: [
|
|
227
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
228
|
+
ref: inputRef,
|
|
229
|
+
type: "file",
|
|
230
|
+
accept,
|
|
231
|
+
multiple,
|
|
232
|
+
disabled,
|
|
233
|
+
"data-slot": "file-upload-input",
|
|
234
|
+
className: "hidden",
|
|
235
|
+
onChange: handleInputChange,
|
|
236
|
+
tabIndex: -1
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
239
|
+
"data-slot": "file-upload-dropzone",
|
|
240
|
+
"data-drag-state": dragState,
|
|
241
|
+
role: "button",
|
|
242
|
+
tabIndex: disabled ? -1 : 0,
|
|
243
|
+
"aria-label": dropzoneAriaLabel,
|
|
244
|
+
"aria-disabled": disabled || void 0,
|
|
245
|
+
"aria-describedby": errors.length > 0 ? `${hintId} ${errorId}` : hintId,
|
|
246
|
+
className: require_cn.cn("flex cursor-pointer flex-col items-center justify-center gap-2 rounded-12 border-2 border-dashed px-5 py-8 text-center outline-none transition-colors focus-visible:ring-3 focus-visible:ring-focus", "data-[drag-state=idle]:border-primary-border data-[drag-state=idle]:bg-secondary-bg/25", "data-[drag-state=drag-over]:border-primary-invert-border data-[drag-state=drag-over]:bg-primary-bg", "data-[drag-state=invalid-drop]:border-danger-border data-[drag-state=invalid-drop]:bg-danger-bg/35", disabled && "cursor-not-allowed opacity-60"),
|
|
247
|
+
onClick: openPicker,
|
|
248
|
+
onKeyDown: (event) => {
|
|
249
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
openPicker();
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
onDragEnter: handleDragEnter,
|
|
255
|
+
onDragOver: handleDragOver,
|
|
256
|
+
onDragLeave: handleDragLeave,
|
|
257
|
+
onDrop: handleDrop,
|
|
258
|
+
children: [
|
|
259
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.UploadCloud, {
|
|
260
|
+
className: "size-8 text-muted-txt",
|
|
261
|
+
"aria-hidden": "true"
|
|
262
|
+
}),
|
|
263
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
264
|
+
className: "font-medium text-sm text-primary-txt",
|
|
265
|
+
children: "Drag files here or click to browse"
|
|
266
|
+
}),
|
|
267
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
268
|
+
id: hintId,
|
|
269
|
+
className: "text-muted-txt text-xs",
|
|
270
|
+
children: [
|
|
271
|
+
multiple ? "Supports multiple files." : "Supports one file.",
|
|
272
|
+
accept ? ` Accepted: ${accept}.` : "",
|
|
273
|
+
maxFileSize ? ` Max file size: ${formatBytes(maxFileSize)}.` : ""
|
|
274
|
+
]
|
|
275
|
+
})
|
|
276
|
+
]
|
|
277
|
+
}),
|
|
278
|
+
errors.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
279
|
+
id: errorId,
|
|
280
|
+
role: "alert",
|
|
281
|
+
className: "space-y-1 text-danger-txt text-xs",
|
|
282
|
+
children: errors.map((message, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
283
|
+
className: "flex items-start gap-1.5",
|
|
284
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CircleAlert, {
|
|
285
|
+
className: "mt-0.5 size-3.5 shrink-0",
|
|
286
|
+
"aria-hidden": "true"
|
|
287
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: message })]
|
|
288
|
+
}, `${message}-${index}`))
|
|
289
|
+
}) : null,
|
|
290
|
+
items.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
291
|
+
"data-slot": "file-upload-list",
|
|
292
|
+
className: "space-y-2",
|
|
293
|
+
"aria-live": "polite",
|
|
294
|
+
children: items.map((item) => {
|
|
295
|
+
const showProgress = item.status === "uploading" || item.status === "success";
|
|
296
|
+
const progressVariant = item.status === "error" ? "destructive" : "default";
|
|
297
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
298
|
+
"data-slot": "file-upload-item",
|
|
299
|
+
"data-state": item.status,
|
|
300
|
+
className: "rounded-12 border border-primary-border bg-secondary-bg/20 px-3 py-2",
|
|
301
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
302
|
+
className: "flex items-start gap-2.5",
|
|
303
|
+
children: [
|
|
304
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
305
|
+
className: "mt-0.5 shrink-0 text-muted-txt",
|
|
306
|
+
"aria-hidden": "true",
|
|
307
|
+
children: item.status === "success" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckCircle2, { className: "size-4 text-success-txt" }) : item.status === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CircleAlert, { className: "size-4 text-danger-txt" }) : item.status === "uploading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FileIcon, { className: "size-4" })
|
|
308
|
+
}),
|
|
309
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
310
|
+
className: "min-w-0 flex-1",
|
|
311
|
+
children: [
|
|
312
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
313
|
+
className: "flex items-center justify-between gap-3",
|
|
314
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
315
|
+
className: "truncate font-medium text-sm text-primary-txt",
|
|
316
|
+
children: item.file.name
|
|
317
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
318
|
+
className: "shrink-0 text-muted-txt text-xs",
|
|
319
|
+
children: formatBytes(item.file.size)
|
|
320
|
+
})]
|
|
321
|
+
}),
|
|
322
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
323
|
+
className: "mt-0.5 text-muted-txt text-xs",
|
|
324
|
+
children: getStatusLabel(item)
|
|
325
|
+
}),
|
|
326
|
+
showProgress ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_primitives_Progress_index.Progress, {
|
|
327
|
+
className: "mt-2",
|
|
328
|
+
value: item.status === "success" ? 100 : item.progress,
|
|
329
|
+
variant: progressVariant,
|
|
330
|
+
"aria-label": `Upload progress for ${item.file.name}`
|
|
331
|
+
}) : null
|
|
332
|
+
]
|
|
333
|
+
}),
|
|
334
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_primitives_Button_index.Button, {
|
|
335
|
+
type: "button",
|
|
336
|
+
variant: item.status === "uploading" ? "destructive-ghost" : "ghost",
|
|
337
|
+
size: "icon-sm",
|
|
338
|
+
shape: "square",
|
|
339
|
+
"aria-label": item.status === "uploading" ? `Cancel upload for ${item.file.name}` : `Remove ${item.file.name}`,
|
|
340
|
+
onClick: () => removeItem(item.id),
|
|
341
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.XIcon, {})
|
|
342
|
+
})
|
|
343
|
+
]
|
|
344
|
+
})
|
|
345
|
+
}, item.id);
|
|
346
|
+
})
|
|
347
|
+
}) : null
|
|
348
|
+
]
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
//#endregion
|
|
352
|
+
exports.FileUpload = FileUpload;
|
|
353
|
+
|
|
354
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["React","cn","UploadCloud","CircleAlert","CheckCircle2","Loader2","FileIcon","Progress","Button","XIcon"],"sources":["../../../src/primitives/FileUpload/FileUpload.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckCircle2, CircleAlert, FileIcon, Loader2, UploadCloud, XIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { Progress } from \"@/primitives/Progress\";\nimport { cn } from \"@/utils\";\n\ntype FileUploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\n\ntype FileUploadItem = {\n id: string;\n file: File;\n status: FileUploadStatus;\n progress: number;\n error?: string;\n};\n\ntype FileUploadHandler = (params: {\n file: File;\n signal: AbortSignal;\n reportProgress: (value: number) => void;\n}) => Promise<void>;\n\ntype FileUploadProps = Omit<React.ComponentProps<\"div\">, \"onChange\"> & {\n /** Disable click, drag/drop, and file selection. */\n disabled?: boolean;\n /** Allow selecting or dropping multiple files in one interaction. */\n multiple?: boolean;\n /** Native file accept filter (e.g. `image/*,.pdf`). */\n accept?: string;\n /** Maximum number of files held by the component at once. */\n maxFiles?: number;\n /** Maximum file size in bytes; oversized files are rejected with an error message. */\n maxFileSize?: number;\n /** Optional custom validator. Return a message to reject the file, or `null` to accept it. */\n validateFile?: (file: File) => string | null;\n /** Called for each accepted file; receives a progress reporter and abort signal. */\n onUpload?: FileUploadHandler;\n /** Called whenever file entries change (added, progress updates, completed, removed). */\n onItemsChange?: (items: FileUploadItem[]) => void;\n /** Accessible label for the drag-and-drop region. */\n dropzoneAriaLabel?: string;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction formatBytes(value: number) {\n if (!Number.isFinite(value) || value <= 0) {\n return \"0 B\";\n }\n\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const exponent = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);\n const size = value / 1024 ** exponent;\n return `${size.toFixed(size >= 10 || exponent === 0 ? 0 : 1)} ${units[exponent]}`;\n}\n\nfunction getAcceptTokens(accept?: string) {\n return (accept ?? \"\")\n .split(\",\")\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n}\n\nfunction matchesAccept(file: File, accept?: string) {\n const tokens = getAcceptTokens(accept);\n if (tokens.length === 0) {\n return true;\n }\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith(\"/*\")) {\n const category = token.slice(0, token.length - 1);\n return fileType.startsWith(category);\n }\n\n return fileType === token;\n });\n}\n\nfunction createFileItem(file: File): FileUploadItem {\n const id =\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `${file.name}-${file.lastModified}-${Math.random().toString(36).slice(2)}`;\n\n return {\n id,\n file,\n status: \"idle\",\n progress: 0,\n };\n}\n\nfunction hasFiles(event: React.DragEvent<HTMLElement>) {\n return Array.from(event.dataTransfer?.types ?? []).includes(\"Files\");\n}\n\nfunction getStatusLabel(item: FileUploadItem) {\n if (item.status === \"idle\") {\n return \"Ready to upload\";\n }\n\n if (item.status === \"uploading\") {\n return `Uploading… ${Math.round(item.progress)}%`;\n }\n\n if (item.status === \"success\") {\n return \"Upload complete\";\n }\n\n return item.error ? `Upload failed: ${item.error}` : \"Upload failed\";\n}\n\n/** File upload primitive with click-to-browse and drag-and-drop interactions, validation, and per-file upload states. */\nfunction FileUpload({\n className,\n multiple = false,\n accept,\n maxFiles,\n maxFileSize,\n validateFile,\n onUpload,\n onItemsChange,\n dropzoneAriaLabel = \"File upload drop zone\",\n disabled,\n ...props\n}: FileUploadProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const uploadControllersRef = React.useRef<Map<string, AbortController>>(new Map());\n\n const [items, setItems] = React.useState<FileUploadItem[]>([]);\n const [errors, setErrors] = React.useState<string[]>([]);\n const [dragState, setDragState] = React.useState<\"idle\" | \"drag-over\" | \"invalid-drop\">(\"idle\");\n const dragDepthRef = React.useRef(0);\n\n const baseId = React.useId();\n const hintId = `${baseId}-hint`;\n const errorId = `${baseId}-errors`;\n\n const updateItem = React.useCallback(\n (itemId: string, updater: (item: FileUploadItem) => FileUploadItem) => {\n setItems((current) => current.map((item) => (item.id === itemId ? updater(item) : item)));\n },\n [],\n );\n\n const removeItem = React.useCallback((itemId: string) => {\n const controller = uploadControllersRef.current.get(itemId);\n controller?.abort();\n uploadControllersRef.current.delete(itemId);\n setItems((current) => current.filter((item) => item.id !== itemId));\n }, []);\n\n const beginUpload = React.useCallback(\n (item: FileUploadItem) => {\n if (!onUpload) {\n return;\n }\n\n const controller = new AbortController();\n uploadControllersRef.current.set(item.id, controller);\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"uploading\",\n progress: 0,\n error: undefined,\n }));\n\n void onUpload({\n file: item.file,\n signal: controller.signal,\n reportProgress: (value) => {\n updateItem(item.id, (current) => {\n if (current.status !== \"uploading\") {\n return current;\n }\n\n return {\n ...current,\n progress: clamp(value, 0, 100),\n };\n });\n },\n })\n .then(() => {\n if (controller.signal.aborted) {\n return;\n }\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"success\",\n progress: 100,\n error: undefined,\n }));\n })\n .catch((uploadError) => {\n if (controller.signal.aborted) {\n return;\n }\n\n const message =\n uploadError instanceof Error && uploadError.message\n ? uploadError.message\n : \"Upload failed.\";\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"error\",\n error: message,\n }));\n })\n .finally(() => {\n uploadControllersRef.current.delete(item.id);\n });\n },\n [onUpload, updateItem],\n );\n\n const queueFiles = React.useCallback(\n (queuedFiles: File[] | FileList) => {\n const incoming = Array.isArray(queuedFiles) ? queuedFiles : Array.from(queuedFiles);\n if (incoming.length === 0) {\n return;\n }\n\n if (!multiple) {\n uploadControllersRef.current.forEach((controller) => controller.abort());\n uploadControllersRef.current.clear();\n }\n\n const nextErrors: string[] = [];\n const acceptedItems: FileUploadItem[] = [];\n const nextItems = multiple ? [...items] : [];\n\n const effectiveMaxFiles = multiple ? (maxFiles ?? Number.POSITIVE_INFINITY) : 1;\n let candidates = incoming;\n\n if (!multiple && incoming.length > 1) {\n nextErrors.push(\"Only one file can be selected at a time.\");\n candidates = [incoming[0]];\n }\n\n const availableSlots = Math.max(0, effectiveMaxFiles - nextItems.length);\n if (availableSlots < candidates.length) {\n nextErrors.push(\n `You can upload up to ${effectiveMaxFiles} file${effectiveMaxFiles === 1 ? \"\" : \"s\"}.`,\n );\n candidates = candidates.slice(0, availableSlots);\n }\n\n for (const file of candidates) {\n if (!matchesAccept(file, accept)) {\n nextErrors.push(`${file.name} has an unsupported file type.`);\n continue;\n }\n\n if (maxFileSize != null && file.size > maxFileSize) {\n nextErrors.push(`${file.name} exceeds the ${formatBytes(maxFileSize)} size limit.`);\n continue;\n }\n\n const customError = validateFile?.(file);\n if (customError) {\n nextErrors.push(customError);\n continue;\n }\n\n const item = createFileItem(file);\n acceptedItems.push(item);\n nextItems.push(item);\n }\n\n setItems(nextItems);\n setErrors(nextErrors);\n setDragState(nextErrors.length > 0 ? \"invalid-drop\" : \"idle\");\n\n if (onUpload) {\n acceptedItems.forEach((item) => beginUpload(item));\n }\n },\n [accept, beginUpload, items, maxFileSize, maxFiles, multiple, onUpload, validateFile],\n );\n\n const openPicker = React.useCallback(() => {\n if (disabled) {\n return;\n }\n\n inputRef.current?.click();\n }, [disabled]);\n\n const handleInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n queueFiles(event.target.files ?? []);\n event.target.value = \"\";\n },\n [queueFiles],\n );\n\n const handleDragEnter = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n if (!hasFiles(event)) {\n setDragState(\"invalid-drop\");\n return;\n }\n\n dragDepthRef.current += 1;\n setDragState(\"drag-over\");\n },\n [disabled],\n );\n\n const handleDragOver = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n\n if (!hasFiles(event)) {\n setDragState(\"invalid-drop\");\n }\n },\n [disabled],\n );\n\n const handleDragLeave = React.useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);\n if (dragDepthRef.current === 0) {\n setDragState(\"idle\");\n }\n }, []);\n\n const handleDrop = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n dragDepthRef.current = 0;\n\n if (disabled) {\n return;\n }\n\n if (!hasFiles(event)) {\n setErrors([\"Only files can be dropped here.\"]);\n setDragState(\"invalid-drop\");\n return;\n }\n\n queueFiles(event.dataTransfer.files);\n },\n [disabled, queueFiles],\n );\n\n React.useEffect(() => {\n onItemsChange?.(items);\n }, [items, onItemsChange]);\n\n React.useEffect(\n () => () => {\n uploadControllersRef.current.forEach((controller) => controller.abort());\n uploadControllersRef.current.clear();\n },\n [],\n );\n\n return (\n <div data-slot=\"file-upload\" className={cn(\"flex flex-col gap-3\", className)} {...props}>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n data-slot=\"file-upload-input\"\n className=\"hidden\"\n onChange={handleInputChange}\n tabIndex={-1}\n />\n\n <div\n data-slot=\"file-upload-dropzone\"\n data-drag-state={dragState}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={dropzoneAriaLabel}\n aria-disabled={disabled || undefined}\n aria-describedby={errors.length > 0 ? `${hintId} ${errorId}` : hintId}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center gap-2 rounded-12 border-2 border-dashed px-5 py-8 text-center outline-none transition-colors focus-visible:ring-3 focus-visible:ring-focus\",\n \"data-[drag-state=idle]:border-primary-border data-[drag-state=idle]:bg-secondary-bg/25\",\n \"data-[drag-state=drag-over]:border-primary-invert-border data-[drag-state=drag-over]:bg-primary-bg\",\n \"data-[drag-state=invalid-drop]:border-danger-border data-[drag-state=invalid-drop]:bg-danger-bg/35\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n onClick={openPicker}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openPicker();\n }\n }}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <UploadCloud className=\"size-8 text-muted-txt\" aria-hidden=\"true\" />\n <p className=\"font-medium text-sm text-primary-txt\">Drag files here or click to browse</p>\n <p id={hintId} className=\"text-muted-txt text-xs\">\n {multiple ? \"Supports multiple files.\" : \"Supports one file.\"}\n {accept ? ` Accepted: ${accept}.` : \"\"}\n {maxFileSize ? ` Max file size: ${formatBytes(maxFileSize)}.` : \"\"}\n </p>\n </div>\n\n {errors.length > 0 ? (\n <ul id={errorId} role=\"alert\" className=\"space-y-1 text-danger-txt text-xs\">\n {errors.map((message, index) => (\n <li key={`${message}-${index}`} className=\"flex items-start gap-1.5\">\n <CircleAlert className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </li>\n ))}\n </ul>\n ) : null}\n\n {items.length > 0 ? (\n <ul data-slot=\"file-upload-list\" className=\"space-y-2\" aria-live=\"polite\">\n {items.map((item) => {\n const showProgress = item.status === \"uploading\" || item.status === \"success\";\n const progressVariant = item.status === \"error\" ? \"destructive\" : \"default\";\n\n return (\n <li\n key={item.id}\n data-slot=\"file-upload-item\"\n data-state={item.status}\n className=\"rounded-12 border border-primary-border bg-secondary-bg/20 px-3 py-2\"\n >\n <div className=\"flex items-start gap-2.5\">\n <div className=\"mt-0.5 shrink-0 text-muted-txt\" aria-hidden=\"true\">\n {item.status === \"success\" ? (\n <CheckCircle2 className=\"size-4 text-success-txt\" />\n ) : item.status === \"error\" ? (\n <CircleAlert className=\"size-4 text-danger-txt\" />\n ) : item.status === \"uploading\" ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileIcon className=\"size-4\" />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"truncate font-medium text-sm text-primary-txt\">\n {item.file.name}\n </p>\n <p className=\"shrink-0 text-muted-txt text-xs\">\n {formatBytes(item.file.size)}\n </p>\n </div>\n <p className=\"mt-0.5 text-muted-txt text-xs\">{getStatusLabel(item)}</p>\n {showProgress ? (\n <Progress\n className=\"mt-2\"\n value={item.status === \"success\" ? 100 : item.progress}\n variant={progressVariant}\n aria-label={`Upload progress for ${item.file.name}`}\n />\n ) : null}\n </div>\n\n <Button\n type=\"button\"\n variant={item.status === \"uploading\" ? \"destructive-ghost\" : \"ghost\"}\n size=\"icon-sm\"\n shape=\"square\"\n aria-label={\n item.status === \"uploading\"\n ? `Cancel upload for ${item.file.name}`\n : `Remove ${item.file.name}`\n }\n onClick={() => removeItem(item.id)}\n >\n <XIcon />\n </Button>\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n </div>\n );\n}\n\nexport {\n FileUpload,\n type FileUploadHandler,\n type FileUploadItem,\n type FileUploadProps,\n type FileUploadStatus,\n};\n"],"mappings":"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"}
|