@shohojdhara/atomix 0.3.14 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/build-tools/EXAMPLES.md +372 -0
- package/build-tools/README.md +242 -0
- package/build-tools/__tests__/error-handler.test.js +230 -0
- package/build-tools/__tests__/index.test.js +141 -0
- package/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/build-tools/__tests__/utils.test.js +161 -0
- package/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/build-tools/error-handler.js +308 -0
- package/build-tools/index.d.ts +44 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +50 -0
- package/build-tools/rollup-plugin.js +236 -0
- package/build-tools/types.d.ts +163 -0
- package/build-tools/utils.js +203 -0
- package/build-tools/vite-plugin.js +161 -0
- package/build-tools/webpack-loader.js +123 -0
- package/dist/atomix.css +21044 -2618
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +77 -3
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/EXAMPLES.md +372 -0
- package/dist/build-tools/README.md +242 -0
- package/dist/build-tools/__tests__/error-handler.test.js +230 -0
- package/dist/build-tools/__tests__/index.test.js +141 -0
- package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/dist/build-tools/__tests__/utils.test.js +161 -0
- package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/dist/build-tools/error-handler.js +308 -0
- package/dist/build-tools/index.d.ts +44 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +50 -0
- package/dist/build-tools/rollup-plugin.js +236 -0
- package/dist/build-tools/types.d.ts +163 -0
- package/dist/build-tools/utils.js +203 -0
- package/dist/build-tools/vite-plugin.js +161 -0
- package/dist/build-tools/webpack-loader.js +123 -0
- package/dist/charts.d.ts +1 -1
- package/dist/charts.js +86 -57
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +136 -112
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +2 -5
- package/dist/forms.js +140 -128
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +136 -112
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +152 -78
- package/dist/index.esm.js +346 -340
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +359 -353
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/theme.d.ts +9 -9
- package/dist/theme.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +170 -73
- package/scripts/cli/__tests__/README.md +81 -0
- package/scripts/cli/__tests__/basic.test.js +115 -0
- package/scripts/cli/__tests__/component-generator.test.js +332 -0
- package/scripts/cli/__tests__/integration.test.js +327 -0
- package/scripts/cli/__tests__/test-setup.js +133 -0
- package/scripts/cli/__tests__/token-manager.test.js +251 -0
- package/scripts/cli/__tests__/utils.test.js +161 -0
- package/scripts/cli/component-generator.js +253 -299
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/interactive-init.js +46 -5
- package/scripts/cli/template-manager.js +0 -2
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +148 -126
- package/scripts/cli/templates/index.js +23 -16
- package/scripts/cli/templates/project-templates.js +151 -23
- package/scripts/cli/templates/react-templates.js +280 -210
- package/scripts/cli/templates/scss-templates.js +90 -91
- package/scripts/cli/templates/testing-templates.js +206 -27
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/types-templates.js +70 -56
- package/scripts/cli/theme-bridge.js +8 -2
- package/scripts/cli/token-manager.js +318 -206
- package/scripts/cli/utils.js +0 -1
- package/src/components/Accordion/Accordion.stories.tsx +358 -850
- package/src/components/Accordion/Accordion.test.tsx +70 -50
- package/src/components/Accordion/Accordion.tsx +99 -94
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +6 -5
- package/src/components/AtomixGlass/shader-utils.ts +133 -52
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -36
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +195 -0
- package/src/components/Avatar/Avatar.tsx +58 -56
- package/src/components/Badge/Badge.stories.tsx +122 -352
- package/src/components/Badge/Badge.test.tsx +41 -41
- package/src/components/Badge/Badge.tsx +64 -62
- package/src/components/Block/Block.stories.tsx +30 -11
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
- package/src/components/Button/Button.stories.tsx +454 -1126
- package/src/components/Button/Button.test.tsx +123 -0
- package/src/components/Button/Button.tsx +88 -60
- package/src/components/Button/ButtonGroup.stories.tsx +376 -215
- package/src/components/Button/ButtonGroup.tsx +4 -15
- package/src/components/Callout/Callout.stories.tsx +316 -568
- package/src/components/Card/Card.stories.tsx +292 -81
- package/src/components/Card/Card.tsx +30 -14
- package/src/components/Chart/AreaChart.tsx +1 -1
- package/src/components/Chart/CandlestickChart.tsx +23 -16
- package/src/components/Chart/Chart.stories.tsx +153 -16
- package/src/components/Chart/Chart.tsx +40 -44
- package/src/components/Chart/ChartRenderer.tsx +39 -12
- package/src/components/Chart/ChartToolbar.tsx +21 -5
- package/src/components/Chart/DonutChart.tsx +1 -1
- package/src/components/Chart/FunnelChart.tsx +4 -1
- package/src/components/Chart/GaugeChart.tsx +3 -1
- package/src/components/Chart/HeatmapChart.tsx +50 -37
- package/src/components/Chart/LineChart.tsx +3 -2
- package/src/components/Chart/MultiAxisChart.tsx +24 -16
- package/src/components/Chart/RadarChart.tsx +19 -17
- package/src/components/Chart/ScatterChart.tsx +29 -21
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
- package/src/components/Countdown/Countdown.stories.tsx +114 -7
- package/src/components/DataTable/DataTable.stories.tsx +349 -144
- package/src/components/DataTable/DataTable.test.tsx +26 -148
- package/src/components/DataTable/DataTable.tsx +485 -456
- package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
- package/src/components/DatePicker/DatePicker.tsx +31 -26
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
- package/src/components/Dropdown/Dropdown.tsx +313 -299
- package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
- package/src/components/EdgePanel/EdgePanel.tsx +1 -3
- package/src/components/Footer/Footer.stories.tsx +396 -327
- package/src/components/Footer/Footer.tsx +130 -128
- package/src/components/Footer/FooterLink.tsx +2 -2
- package/src/components/Form/Checkbox.stories.tsx +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +122 -78
- package/src/components/Form/Form.stories.tsx +110 -19
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Input.stories.tsx +22 -39
- package/src/components/Form/Input.test.tsx +38 -44
- package/src/components/Form/Radio.stories.tsx +146 -17
- package/src/components/Form/Radio.tsx +68 -66
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Select.tsx +184 -182
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Form/Textarea.test.tsx +27 -32
- package/src/components/Hero/Hero.stories.tsx +372 -38
- package/src/components/Hero/Hero.tsx +201 -55
- package/src/components/Icon/index.ts +7 -1
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/List/List.tsx +19 -23
- package/src/components/Modal/Modal.stories.tsx +183 -43
- package/src/components/Modal/Modal.tsx +130 -127
- package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
- package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
- package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
- package/src/components/Pagination/Pagination.stories.tsx +7 -4
- package/src/components/Pagination/Pagination.tsx +199 -202
- package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
- package/src/components/Popover/Popover.stories.tsx +354 -97
- package/src/components/Popover/Popover.tsx +41 -37
- package/src/components/Progress/Progress.stories.tsx +160 -7
- package/src/components/River/River.stories.tsx +3 -2
- package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
- package/src/components/Slider/Slider.stories.tsx +12 -4
- package/src/components/Spinner/Spinner.stories.tsx +104 -8
- package/src/components/Spinner/Spinner.test.tsx +23 -23
- package/src/components/Spinner/Spinner.tsx +43 -46
- package/src/components/Steps/Steps.stories.tsx +173 -42
- package/src/components/Tabs/Tabs.stories.tsx +141 -12
- package/src/components/Tabs/Tabs.tsx +74 -72
- package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +137 -36
- package/src/components/Toggle/Toggle.test.tsx +65 -70
- package/src/components/Toggle/Toggle.tsx +4 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
- package/src/components/Tooltip/Tooltip.tsx +104 -106
- package/src/components/Upload/Upload.stories.tsx +241 -150
- package/src/components/Upload/Upload.tsx +287 -283
- package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
- package/src/components/index.ts +13 -2
- package/src/layouts/Grid/Grid.stories.tsx +9 -3
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +219 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/shared-mouse-tracker.ts +13 -14
- package/src/lib/composables/useAtomixGlass.ts +126 -97
- package/src/lib/composables/useChartExport.ts +3 -8
- package/src/lib/composables/useDataTable.ts +72 -43
- package/src/lib/composables/useHero.ts +58 -14
- package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
- package/src/lib/composables/useInput.ts +10 -8
- package/src/lib/composables/useSideMenu.ts +6 -5
- package/src/lib/composables/useTooltip.ts +1 -2
- package/src/lib/composables/useVideoPlayer.ts +44 -35
- package/src/lib/config/index.ts +154 -154
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/constants/cssVariables.ts +29 -29
- package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
- package/src/lib/hooks/index.ts +1 -1
- package/src/lib/hooks/useComponentCustomization.ts +11 -17
- package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
- package/src/lib/patterns/__tests__/slots.test.ts +1 -1
- package/src/lib/patterns/index.ts +1 -1
- package/src/lib/patterns/slots.tsx +8 -13
- package/src/lib/storybook/InteractiveDemo.tsx +13 -18
- package/src/lib/storybook/PreviewContainer.tsx +1 -1
- package/src/lib/storybook/VariantsGrid.tsx +3 -7
- package/src/lib/storybook/index.ts +1 -1
- package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
- package/src/lib/theme/adapters/index.ts +3 -9
- package/src/lib/theme/adapters/themeAdapter.ts +41 -26
- package/src/lib/theme/config/index.ts +1 -1
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +10 -5
- package/src/lib/theme/constants/constants.ts +2 -2
- package/src/lib/theme/constants/index.ts +1 -2
- package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
- package/src/lib/theme/core/composeTheme.ts +32 -26
- package/src/lib/theme/core/createTheme.ts +1 -1
- package/src/lib/theme/core/createThemeObject.ts +308 -301
- package/src/lib/theme/core/index.ts +3 -3
- package/src/lib/theme/devtools/CLI.ts +107 -105
- package/src/lib/theme/devtools/Comparator.tsx +50 -32
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
- package/src/lib/theme/devtools/Inspector.tsx +75 -60
- package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
- package/src/lib/theme/devtools/Preview.tsx +150 -106
- package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
- package/src/lib/theme/devtools/index.ts +3 -9
- package/src/lib/theme/devtools/useHistory.ts +23 -21
- package/src/lib/theme/errors/errors.ts +12 -11
- package/src/lib/theme/errors/index.ts +2 -7
- package/src/lib/theme/generators/generateCSS.ts +9 -13
- package/src/lib/theme/generators/generateCSSNested.ts +1 -6
- package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
- package/src/lib/theme/generators/index.ts +1 -4
- package/src/lib/theme/i18n/index.ts +1 -1
- package/src/lib/theme/i18n/rtl.ts +13 -13
- package/src/lib/theme/index.ts +7 -16
- package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
- package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
- package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
- package/src/lib/theme/runtime/index.ts +2 -5
- package/src/lib/theme/runtime/useTheme.ts +18 -18
- package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
- package/src/lib/theme/test/testTheme.ts +15 -16
- package/src/lib/theme/tokens/index.ts +2 -7
- package/src/lib/theme/tokens/tokens.ts +25 -24
- package/src/lib/theme/types.ts +428 -411
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
- package/src/lib/theme/utils/componentTheming.ts +18 -18
- package/src/lib/theme/utils/domUtils.ts +277 -289
- package/src/lib/theme/utils/index.ts +1 -2
- package/src/lib/theme/utils/injectCSS.ts +10 -14
- package/src/lib/theme/utils/naming.ts +20 -16
- package/src/lib/theme/utils/themeHelpers.ts +10 -12
- package/src/lib/theme/utils/themeUtils.ts +85 -86
- package/src/lib/theme/utils/themeValidation.ts +82 -33
- package/src/lib/theme-tools.ts +8 -6
- package/src/lib/types/components.ts +172 -71
- package/src/lib/types/partProps.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/componentUtils.ts +8 -12
- package/src/lib/utils/csv.ts +19 -0
- package/src/lib/utils/dataTableExport.ts +2 -15
- package/src/lib/utils/fontPreloader.ts +10 -19
- package/src/lib/utils/icons.ts +4 -1
- package/src/lib/utils/index.ts +2 -6
- package/src/lib/utils/memoryMonitor.ts +10 -8
- package/src/lib/utils/themeNaming.ts +2 -2
- package/src/styles/01-settings/_index.scss +1 -1
- package/src/styles/01-settings/_settings.accordion.scss +28 -7
- package/src/styles/01-settings/_settings.colors.scss +11 -11
- package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
- package/src/styles/01-settings/_settings.navbar.scss +1 -1
- package/src/styles/01-settings/_settings.spacing.scss +3 -4
- package/src/styles/01-settings/_settings.tooltip.scss +1 -1
- package/src/styles/01-settings/_settings.typography.scss +4 -4
- package/src/styles/02-tools/_tools.button.scss +51 -21
- package/src/styles/02-tools/_tools.utility-api.scss +38 -12
- package/src/styles/03-generic/_generic.root.scss +4 -3
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.atomix-glass.scss +13 -9
- package/src/styles/06-components/_components.button.scss +16 -4
- package/src/styles/06-components/_components.callout.scss +27 -21
- package/src/styles/06-components/_components.card.scss +5 -14
- package/src/styles/06-components/_components.chart.scss +22 -19
- package/src/styles/06-components/_components.checkbox.scss +25 -17
- package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
- package/src/styles/06-components/_components.edge-panel.scss +9 -2
- package/src/styles/06-components/_components.footer.scss +1 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -5
- package/src/styles/06-components/_components.toggle.scss +18 -0
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/06-components/old.chart.styles.scss +0 -2
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.border.scss +69 -27
- package/src/styles/99-utilities/_utilities.display.scss +1 -1
- package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
- package/src/styles/99-utilities/_utilities.position.scss +16 -9
- package/src/styles/99-utilities/_utilities.scss +2 -0
- package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
- package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +67 -46
- package/themes/dark-complementary/README.md +98 -0
- package/themes/dark-complementary/index.scss +158 -0
- package/themes/default-light/README.md +81 -0
- package/themes/default-light/index.scss +154 -0
- package/themes/high-contrast/README.md +105 -0
- package/themes/high-contrast/index.scss +172 -0
- package/themes/test-theme/README.md +38 -0
- package/themes/test-theme/index.scss +47 -0
- package/scripts/cli/templates-original-backup.js +0 -1655
- package/scripts/cli/templates_backup.js +0 -684
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
- package/src/lib/composables/useButton.ts +0 -93
- package/src/lib/composables/useCheckbox.ts +0 -70
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
2
3
|
import React, { useState } from 'react';
|
|
3
4
|
import { Upload } from './Upload';
|
|
4
5
|
import { SIZES } from '../../lib/constants/components';
|
|
@@ -10,8 +11,68 @@ const meta = {
|
|
|
10
11
|
layout: 'centered',
|
|
11
12
|
docs: {
|
|
12
13
|
description: {
|
|
13
|
-
component:
|
|
14
|
-
|
|
14
|
+
component: `
|
|
15
|
+
# Upload
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Upload provides a modern file upload interface with drag & drop functionality, progress tracking, file preview, and validation. It supports single and multiple file uploads, custom file size limits, and provides visual feedback throughout the upload process. Ideal for forms requiring file attachments or media uploads.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- Drag & drop file upload
|
|
24
|
+
- Progress tracking
|
|
25
|
+
- File preview
|
|
26
|
+
- Validation
|
|
27
|
+
- Multiple file support
|
|
28
|
+
- Customizable size limits
|
|
29
|
+
- Accessible design
|
|
30
|
+
- Responsive behavior
|
|
31
|
+
|
|
32
|
+
## Accessibility
|
|
33
|
+
|
|
34
|
+
- Keyboard support: Upload via keyboard navigation
|
|
35
|
+
- Screen reader: File selection and status announced appropriately
|
|
36
|
+
- ARIA support: Proper roles and properties for upload components
|
|
37
|
+
- Focus management: Visible focus indicators maintained
|
|
38
|
+
|
|
39
|
+
## Usage Examples
|
|
40
|
+
|
|
41
|
+
### Basic Usage
|
|
42
|
+
|
|
43
|
+
\`\`\`tsx
|
|
44
|
+
<Upload
|
|
45
|
+
title="Drag and Drop files here"
|
|
46
|
+
onFileSelect={(files) => console.log(files)}
|
|
47
|
+
/>
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
### Multiple Files
|
|
51
|
+
|
|
52
|
+
\`\`\`tsx
|
|
53
|
+
<Upload
|
|
54
|
+
multiple={true}
|
|
55
|
+
title="Drag and Drop files here"
|
|
56
|
+
onFileSelect={(files) => console.log(files)}
|
|
57
|
+
/>
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
## API Reference
|
|
61
|
+
|
|
62
|
+
### Props
|
|
63
|
+
|
|
64
|
+
| Prop | Type | Default | Description |
|
|
65
|
+
| ---- | ---- | ------- | ----------- |
|
|
66
|
+
| size | 'sm' \\| 'md' \\| 'lg' | 'md' | Size variant of the upload component |
|
|
67
|
+
| disabled | boolean | false | Whether the upload component is disabled |
|
|
68
|
+
| maxSizeInMB | number | 5 | Maximum file size in MB |
|
|
69
|
+
| multiple | boolean | false | Whether multiple files can be selected |
|
|
70
|
+
| title | string | 'Drag and Drop files here' | Text for the drag and drop section |
|
|
71
|
+
| supportedFilesText | string | 'Files supported: PDF, XSLS, JPEG, PNG, Scanner' | Text describing supported file types |
|
|
72
|
+
| buttonText | string | 'Choose File' | Text for the upload button |
|
|
73
|
+
| helperText | string | 'Maximum size: 5MB' | Helper text displayed below the button |
|
|
74
|
+
| onFileSelect | (files: File[]) => void | - | Callback when files are selected |
|
|
75
|
+
`,
|
|
15
76
|
},
|
|
16
77
|
},
|
|
17
78
|
},
|
|
@@ -20,43 +81,71 @@ const meta = {
|
|
|
20
81
|
size: {
|
|
21
82
|
control: { type: 'select' },
|
|
22
83
|
options: SIZES,
|
|
23
|
-
defaultValue: 'md',
|
|
24
84
|
description: 'Size variant of the upload component',
|
|
85
|
+
table: {
|
|
86
|
+
type: { summary: '"sm" | "md" | "lg"' },
|
|
87
|
+
defaultValue: { summary: 'md' },
|
|
88
|
+
},
|
|
25
89
|
},
|
|
26
90
|
disabled: {
|
|
27
91
|
control: { type: 'boolean' },
|
|
28
|
-
defaultValue: false,
|
|
29
92
|
description: 'Whether the upload component is disabled',
|
|
93
|
+
table: {
|
|
94
|
+
type: { summary: 'boolean' },
|
|
95
|
+
defaultValue: { summary: false },
|
|
96
|
+
},
|
|
30
97
|
},
|
|
31
98
|
maxSizeInMB: {
|
|
32
99
|
control: { type: 'number' },
|
|
33
|
-
defaultValue: 5,
|
|
34
100
|
description: 'Maximum file size in MB',
|
|
101
|
+
table: {
|
|
102
|
+
type: { summary: 'number' },
|
|
103
|
+
defaultValue: { summary: 5 },
|
|
104
|
+
},
|
|
35
105
|
},
|
|
36
106
|
multiple: {
|
|
37
107
|
control: { type: 'boolean' },
|
|
38
|
-
defaultValue: false,
|
|
39
108
|
description: 'Whether multiple files can be selected',
|
|
109
|
+
table: {
|
|
110
|
+
type: { summary: 'boolean' },
|
|
111
|
+
defaultValue: { summary: false },
|
|
112
|
+
},
|
|
40
113
|
},
|
|
41
114
|
title: {
|
|
42
115
|
control: { type: 'text' },
|
|
43
|
-
defaultValue: 'Drag and Drop files here',
|
|
44
116
|
description: 'Text for the drag and drop section',
|
|
117
|
+
table: {
|
|
118
|
+
type: { summary: 'string' },
|
|
119
|
+
defaultValue: { summary: 'Drag and Drop files here' },
|
|
120
|
+
},
|
|
45
121
|
},
|
|
46
122
|
supportedFilesText: {
|
|
47
123
|
control: { type: 'text' },
|
|
48
|
-
defaultValue: 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',
|
|
49
124
|
description: 'Text describing supported file types',
|
|
125
|
+
table: {
|
|
126
|
+
type: { summary: 'string' },
|
|
127
|
+
defaultValue: { summary: 'Files supported: PDF, XSLS, JPEG, PNG, Scanner' },
|
|
128
|
+
},
|
|
50
129
|
},
|
|
51
130
|
buttonText: {
|
|
52
131
|
control: { type: 'text' },
|
|
53
|
-
defaultValue: 'Choose File',
|
|
54
132
|
description: 'Text for the upload button',
|
|
133
|
+
table: {
|
|
134
|
+
type: { summary: 'string' },
|
|
135
|
+
defaultValue: { summary: 'Choose File' },
|
|
136
|
+
},
|
|
55
137
|
},
|
|
56
138
|
helperText: {
|
|
57
139
|
control: { type: 'text' },
|
|
58
|
-
defaultValue: 'Maximum size: 5MB',
|
|
59
140
|
description: 'Helper text displayed below the button',
|
|
141
|
+
table: {
|
|
142
|
+
type: { summary: 'string' },
|
|
143
|
+
defaultValue: { summary: 'Maximum size: 5MB' },
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
onFileSelect: {
|
|
147
|
+
action: 'file selected',
|
|
148
|
+
description: 'Callback when files are selected',
|
|
60
149
|
},
|
|
61
150
|
},
|
|
62
151
|
} satisfies Meta<typeof Upload>;
|
|
@@ -64,8 +153,7 @@ const meta = {
|
|
|
64
153
|
export default meta;
|
|
65
154
|
type Story = StoryObj<typeof meta>;
|
|
66
155
|
|
|
67
|
-
|
|
68
|
-
export const Default: Story = {
|
|
156
|
+
export const BasicUsage: Story = {
|
|
69
157
|
render: args => (
|
|
70
158
|
<div style={{ padding: '30px', maxWidth: '600px' }}>
|
|
71
159
|
<Upload {...args} />
|
|
@@ -77,6 +165,7 @@ export const Default: Story = {
|
|
|
77
165
|
supportedFilesText: 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',
|
|
78
166
|
buttonText: 'Choose File',
|
|
79
167
|
helperText: 'Maximum size: 5MB',
|
|
168
|
+
onFileSelect: fn(),
|
|
80
169
|
},
|
|
81
170
|
parameters: {
|
|
82
171
|
docs: {
|
|
@@ -90,48 +179,48 @@ export const Default: Story = {
|
|
|
90
179
|
// Size Variants
|
|
91
180
|
export const SizeVariants: Story = {
|
|
92
181
|
render: () => (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
182
|
+
<div style={{ padding: '30px' }}>
|
|
183
|
+
<div style={{ marginBottom: '40px' }}>
|
|
184
|
+
<h3 style={{ marginBottom: '20px', fontSize: '18px', fontWeight: '600' }}>Small Size</h3>
|
|
185
|
+
<div style={{ maxWidth: '400px' }}>
|
|
186
|
+
<Upload
|
|
187
|
+
size="sm"
|
|
188
|
+
title="Small Upload Area"
|
|
189
|
+
supportedFilesText="PDF, JPEG, PNG"
|
|
190
|
+
buttonText="Choose File"
|
|
191
|
+
helperText="Max: 2MB"
|
|
192
|
+
/>
|
|
193
|
+
</div>
|
|
104
194
|
</div>
|
|
105
|
-
</div>
|
|
106
195
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
196
|
+
<div style={{ marginBottom: '40px' }}>
|
|
197
|
+
<h3 style={{ marginBottom: '20px', fontSize: '18px', fontWeight: '600' }}>
|
|
198
|
+
Medium Size (Default)
|
|
199
|
+
</h3>
|
|
200
|
+
<div style={{ maxWidth: '500px' }}>
|
|
201
|
+
<Upload
|
|
202
|
+
size="md"
|
|
203
|
+
title="Drag and Drop files here"
|
|
204
|
+
supportedFilesText="Files supported: PDF, XSLS, JPEG, PNG, Scanner"
|
|
205
|
+
buttonText="Choose File"
|
|
206
|
+
helperText="Maximum size: 5MB"
|
|
207
|
+
/>
|
|
208
|
+
</div>
|
|
119
209
|
</div>
|
|
120
|
-
</div>
|
|
121
210
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
211
|
+
<div>
|
|
212
|
+
<h3 style={{ marginBottom: '20px', fontSize: '18px', fontWeight: '600' }}>Large Size</h3>
|
|
213
|
+
<div style={{ maxWidth: '700px' }}>
|
|
214
|
+
<Upload
|
|
215
|
+
size="lg"
|
|
216
|
+
title="Drop your files here for upload"
|
|
217
|
+
supportedFilesText="Supported formats: PDF, Excel, Word, Images, and more"
|
|
218
|
+
buttonText="Browse Files"
|
|
219
|
+
helperText="Maximum file size: 10MB per file"
|
|
220
|
+
/>
|
|
221
|
+
</div>
|
|
132
222
|
</div>
|
|
133
223
|
</div>
|
|
134
|
-
</div>
|
|
135
224
|
),
|
|
136
225
|
parameters: {
|
|
137
226
|
docs: {
|
|
@@ -142,8 +231,7 @@ export const SizeVariants: Story = {
|
|
|
142
231
|
},
|
|
143
232
|
};
|
|
144
233
|
|
|
145
|
-
|
|
146
|
-
export const Disabled: Story = {
|
|
234
|
+
export const DisabledState: Story = {
|
|
147
235
|
render: args => (
|
|
148
236
|
<div style={{ padding: '30px', maxWidth: '600px' }}>
|
|
149
237
|
<Upload {...args} />
|
|
@@ -151,16 +239,17 @@ export const Disabled: Story = {
|
|
|
151
239
|
),
|
|
152
240
|
args: {
|
|
153
241
|
size: 'md',
|
|
154
|
-
title: 'Drag and Drop files here',
|
|
155
|
-
supportedFilesText: 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',
|
|
156
|
-
buttonText: 'Choose File',
|
|
157
|
-
helperText: 'Maximum size: 5MB',
|
|
158
242
|
disabled: true,
|
|
243
|
+
title: 'Upload Disabled',
|
|
244
|
+
supportedFilesText: 'PDF, JPEG, PNG',
|
|
245
|
+
buttonText: 'Choose File',
|
|
246
|
+
helperText: 'This upload component is disabled',
|
|
247
|
+
onFileSelect: fn(),
|
|
159
248
|
},
|
|
160
249
|
parameters: {
|
|
161
250
|
docs: {
|
|
162
251
|
description: {
|
|
163
|
-
story: 'Upload component in disabled state
|
|
252
|
+
story: 'Upload component in disabled state.',
|
|
164
253
|
},
|
|
165
254
|
},
|
|
166
255
|
},
|
|
@@ -353,7 +442,6 @@ export const CustomIcon: Story = {
|
|
|
353
442
|
},
|
|
354
443
|
};
|
|
355
444
|
|
|
356
|
-
// Multiple file upload
|
|
357
445
|
export const MultipleFiles: Story = {
|
|
358
446
|
render: args => (
|
|
359
447
|
<div style={{ padding: '30px', maxWidth: '600px' }}>
|
|
@@ -363,15 +451,16 @@ export const MultipleFiles: Story = {
|
|
|
363
451
|
args: {
|
|
364
452
|
size: 'md',
|
|
365
453
|
multiple: true,
|
|
454
|
+
title: 'Drag and Drop files here',
|
|
455
|
+
supportedFilesText: 'PDF, JPEG, PNG, DOCX',
|
|
366
456
|
buttonText: 'Choose Files',
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
helperText: 'Maximum size: 5MB per file',
|
|
457
|
+
helperText: 'Multiple files supported, max size: 5MB each',
|
|
458
|
+
onFileSelect: fn(),
|
|
370
459
|
},
|
|
371
460
|
parameters: {
|
|
372
461
|
docs: {
|
|
373
462
|
description: {
|
|
374
|
-
story: 'Upload component configured to
|
|
463
|
+
story: 'Upload component configured to allow multiple file selections.',
|
|
375
464
|
},
|
|
376
465
|
},
|
|
377
466
|
},
|
|
@@ -383,73 +472,73 @@ export const DragDropDemo: Story = {
|
|
|
383
472
|
const [dragState, setDragState] = useState<'idle' | 'dragging'>('idle');
|
|
384
473
|
const [uploadedFiles, setUploadedFiles] = useState<string[]>([]);
|
|
385
474
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
475
|
+
const handleFileSelect = (files: File[]) => {
|
|
476
|
+
const fileNames = files.map(file => file.name);
|
|
477
|
+
setUploadedFiles(prev => [...prev, ...fileNames]);
|
|
478
|
+
};
|
|
390
479
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
480
|
+
return (
|
|
481
|
+
<div style={{ padding: '30px' }}>
|
|
482
|
+
<div style={{ marginBottom: '20px' }}>
|
|
483
|
+
<h3 style={{ fontSize: '18px', fontWeight: '600', marginBottom: '10px' }}>
|
|
484
|
+
Interactive Drag & Drop Demo
|
|
485
|
+
</h3>
|
|
486
|
+
<p style={{ color: '#666', fontSize: '14px', marginBottom: '20px' }}>
|
|
487
|
+
Try dragging files over the upload area to see the hover effects, or click to select
|
|
488
|
+
files.
|
|
489
|
+
</p>
|
|
490
|
+
</div>
|
|
402
491
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
492
|
+
<div style={{ maxWidth: '600px', marginBottom: '20px' }}>
|
|
493
|
+
<Upload
|
|
494
|
+
title="Drag files here to see the magic ✨"
|
|
495
|
+
supportedFilesText="PDF, Images, Documents - All welcome!"
|
|
496
|
+
buttonText="Or click to browse"
|
|
497
|
+
helperText="Watch the upload area respond to your interactions"
|
|
498
|
+
onFileSelect={handleFileSelect}
|
|
499
|
+
multiple={true}
|
|
500
|
+
/>
|
|
501
|
+
</div>
|
|
413
502
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
style={{
|
|
417
|
-
padding: '16px',
|
|
418
|
-
backgroundColor: '#f8f9fa',
|
|
419
|
-
borderRadius: '8px',
|
|
420
|
-
border: '1px solid #e9ecef',
|
|
421
|
-
}}
|
|
422
|
-
>
|
|
423
|
-
<h4
|
|
424
|
-
style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px', color: '#495057' }}
|
|
425
|
-
>
|
|
426
|
-
Selected Files:
|
|
427
|
-
</h4>
|
|
428
|
-
<ul style={{ margin: 0, paddingLeft: '20px' }}>
|
|
429
|
-
{uploadedFiles.map((fileName, index) => (
|
|
430
|
-
<li key={index} style={{ fontSize: '14px', color: '#6c757d', marginBottom: '4px' }}>
|
|
431
|
-
{fileName}
|
|
432
|
-
</li>
|
|
433
|
-
))}
|
|
434
|
-
</ul>
|
|
435
|
-
<button
|
|
436
|
-
onClick={() => setUploadedFiles([])}
|
|
503
|
+
{uploadedFiles.length > 0 && (
|
|
504
|
+
<div
|
|
437
505
|
style={{
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
color: 'white',
|
|
443
|
-
border: 'none',
|
|
444
|
-
borderRadius: '4px',
|
|
445
|
-
cursor: 'pointer',
|
|
506
|
+
padding: '16px',
|
|
507
|
+
backgroundColor: '#f8f9fa',
|
|
508
|
+
borderRadius: '8px',
|
|
509
|
+
border: '1px solid #e9ecef',
|
|
446
510
|
}}
|
|
447
511
|
>
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
512
|
+
<h4
|
|
513
|
+
style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px', color: '#495057' }}
|
|
514
|
+
>
|
|
515
|
+
Selected Files:
|
|
516
|
+
</h4>
|
|
517
|
+
<ul style={{ margin: 0, paddingLeft: '20px' }}>
|
|
518
|
+
{uploadedFiles.map((fileName, index) => (
|
|
519
|
+
<li key={index} style={{ fontSize: '14px', color: '#6c757d', marginBottom: '4px' }}>
|
|
520
|
+
{fileName}
|
|
521
|
+
</li>
|
|
522
|
+
))}
|
|
523
|
+
</ul>
|
|
524
|
+
<button
|
|
525
|
+
onClick={() => setUploadedFiles([])}
|
|
526
|
+
style={{
|
|
527
|
+
marginTop: '12px',
|
|
528
|
+
padding: '6px 12px',
|
|
529
|
+
fontSize: '12px',
|
|
530
|
+
backgroundColor: '#6c757d',
|
|
531
|
+
color: 'white',
|
|
532
|
+
border: 'none',
|
|
533
|
+
borderRadius: '4px',
|
|
534
|
+
cursor: 'pointer',
|
|
535
|
+
}}
|
|
536
|
+
>
|
|
537
|
+
Clear List
|
|
538
|
+
</button>
|
|
539
|
+
</div>
|
|
540
|
+
)}
|
|
541
|
+
</div>
|
|
453
542
|
);
|
|
454
543
|
},
|
|
455
544
|
parameters: {
|
|
@@ -466,39 +555,41 @@ export const DragDropDemo: Story = {
|
|
|
466
555
|
export const FileTypeRestrictions: Story = {
|
|
467
556
|
render: () => (
|
|
468
557
|
<div style={{ padding: '30px' }}>
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
558
|
+
<div style={{ marginBottom: '40px' }}>
|
|
559
|
+
<h3 style={{ marginBottom: '20px', fontSize: '18px', fontWeight: '600' }}>Images Only</h3>
|
|
560
|
+
<div style={{ maxWidth: '500px' }}>
|
|
561
|
+
<Upload
|
|
562
|
+
title="Upload Images"
|
|
563
|
+
supportedFilesText="JPEG, PNG, GIF, WebP"
|
|
564
|
+
buttonText="Choose Images"
|
|
565
|
+
helperText="Maximum size: 10MB"
|
|
566
|
+
acceptedFileTypes={['image/jpeg', 'image/png', 'image/gif', 'image/webp']}
|
|
567
|
+
multiple={true}
|
|
568
|
+
/>
|
|
569
|
+
</div>
|
|
480
570
|
</div>
|
|
481
|
-
</div>
|
|
482
571
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
572
|
+
<div style={{ marginBottom: '40px' }}>
|
|
573
|
+
<h3 style={{ marginBottom: '20px', fontSize: '18px', fontWeight: '600' }}>
|
|
574
|
+
Documents Only
|
|
575
|
+
</h3>
|
|
576
|
+
<div style={{ maxWidth: '500px' }}>
|
|
577
|
+
<Upload
|
|
578
|
+
title="Upload Documents"
|
|
579
|
+
supportedFilesText="PDF, Word, Excel, PowerPoint"
|
|
580
|
+
buttonText="Choose Documents"
|
|
581
|
+
helperText="Maximum size: 25MB"
|
|
582
|
+
acceptedFileTypes={[
|
|
583
|
+
'application/pdf',
|
|
584
|
+
'application/msword',
|
|
585
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
586
|
+
'application/vnd.ms-excel',
|
|
587
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
588
|
+
]}
|
|
589
|
+
/>
|
|
590
|
+
</div>
|
|
499
591
|
</div>
|
|
500
592
|
</div>
|
|
501
|
-
</div>
|
|
502
593
|
),
|
|
503
594
|
parameters: {
|
|
504
595
|
docs: {
|