@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 { generateUUID } from '../../lib/utils';
|
|
3
4
|
import { Todo } from './Todo';
|
|
4
5
|
import { SIZES } from '../../lib/constants/components';
|
|
@@ -10,8 +11,71 @@ const meta = {
|
|
|
10
11
|
layout: 'centered',
|
|
11
12
|
docs: {
|
|
12
13
|
description: {
|
|
13
|
-
component:
|
|
14
|
-
|
|
14
|
+
component: `
|
|
15
|
+
# Todo
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Todo component provides a complete todo list interface with the ability to add, complete, and manage tasks. It supports multiple sizes, can show or hide completed items, and provides a clean interface for task management. Ideal for task tracking, project management, or any scenario requiring a simple todo list.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- Add, complete, and manage tasks
|
|
24
|
+
- Multiple size options
|
|
25
|
+
- Show/hide completed items
|
|
26
|
+
- Clean and intuitive interface
|
|
27
|
+
- Responsive design
|
|
28
|
+
- Task persistence
|
|
29
|
+
- Accessible markup
|
|
30
|
+
|
|
31
|
+
## Accessibility
|
|
32
|
+
|
|
33
|
+
- Keyboard support: Navigate and interact with todos using keyboard
|
|
34
|
+
- Screen reader: Task status and content announced properly
|
|
35
|
+
- ARIA support: Proper roles and properties for todo components
|
|
36
|
+
- Focus management: Maintains focus on interactive elements
|
|
37
|
+
|
|
38
|
+
## Usage Examples
|
|
39
|
+
|
|
40
|
+
### Basic Usage
|
|
41
|
+
|
|
42
|
+
\`\`\`tsx
|
|
43
|
+
<Todo
|
|
44
|
+
items={[
|
|
45
|
+
{ id: '1', text: 'Task 1', completed: false },
|
|
46
|
+
{ id: '2', text: 'Task 2', completed: true },
|
|
47
|
+
]}
|
|
48
|
+
title="My Tasks"
|
|
49
|
+
placeholder="Add a new task"
|
|
50
|
+
/>
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
### With Configuration
|
|
54
|
+
|
|
55
|
+
\`\`\`tsx
|
|
56
|
+
<Todo
|
|
57
|
+
items={tasks}
|
|
58
|
+
title="Project Tasks"
|
|
59
|
+
placeholder="Add a new task"
|
|
60
|
+
size="lg"
|
|
61
|
+
showCompleted={false}
|
|
62
|
+
/>
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
## API Reference
|
|
66
|
+
|
|
67
|
+
### Props
|
|
68
|
+
|
|
69
|
+
| Prop | Type | Default | Description |
|
|
70
|
+
| ---- | ---- | ------- | ----------- |
|
|
71
|
+
| items | TodoItem[] | [] | Array of todo items |
|
|
72
|
+
| title | string | - | Title of the todo list |
|
|
73
|
+
| size | 'sm' \\| 'md' \\| 'lg' | 'md' | Size of the todo component |
|
|
74
|
+
| placeholder | string | - | Placeholder text for the input field |
|
|
75
|
+
| showCompleted | boolean | true | Whether to show completed items |
|
|
76
|
+
| className | string | - | Additional CSS class names |
|
|
77
|
+
| disabled | boolean | false | Whether the todo list is disabled |
|
|
78
|
+
`,
|
|
15
79
|
},
|
|
16
80
|
},
|
|
17
81
|
},
|
|
@@ -20,31 +84,59 @@ const meta = {
|
|
|
20
84
|
items: {
|
|
21
85
|
control: 'object',
|
|
22
86
|
description: 'Array of todo items',
|
|
87
|
+
table: {
|
|
88
|
+
type: { summary: 'TodoItem[]' },
|
|
89
|
+
defaultValue: { summary: '[]' },
|
|
90
|
+
},
|
|
23
91
|
},
|
|
24
92
|
title: {
|
|
25
93
|
control: 'text',
|
|
26
94
|
description: 'Title of the todo list',
|
|
95
|
+
table: {
|
|
96
|
+
type: { summary: 'string' },
|
|
97
|
+
defaultValue: { summary: '-' },
|
|
98
|
+
},
|
|
27
99
|
},
|
|
28
100
|
size: {
|
|
29
101
|
control: { type: 'select' },
|
|
30
102
|
options: SIZES,
|
|
31
103
|
description: 'Size of the todo component',
|
|
104
|
+
table: {
|
|
105
|
+
type: { summary: '"sm" | "md" | "lg"' },
|
|
106
|
+
defaultValue: { summary: 'md' },
|
|
107
|
+
},
|
|
32
108
|
},
|
|
33
109
|
placeholder: {
|
|
34
110
|
control: 'text',
|
|
35
111
|
description: 'Placeholder text for the input field',
|
|
112
|
+
table: {
|
|
113
|
+
type: { summary: 'string' },
|
|
114
|
+
defaultValue: { summary: '-' },
|
|
115
|
+
},
|
|
36
116
|
},
|
|
37
117
|
showCompleted: {
|
|
38
118
|
control: 'boolean',
|
|
39
119
|
description: 'Whether to show completed items',
|
|
120
|
+
table: {
|
|
121
|
+
type: { summary: 'boolean' },
|
|
122
|
+
defaultValue: { summary: true },
|
|
123
|
+
},
|
|
40
124
|
},
|
|
41
125
|
className: {
|
|
42
126
|
control: 'text',
|
|
43
127
|
description: 'Additional CSS class names',
|
|
128
|
+
table: {
|
|
129
|
+
type: { summary: 'string' },
|
|
130
|
+
defaultValue: { summary: '-' },
|
|
131
|
+
},
|
|
44
132
|
},
|
|
45
133
|
disabled: {
|
|
46
134
|
control: 'boolean',
|
|
47
135
|
description: 'Whether the todo list is disabled',
|
|
136
|
+
table: {
|
|
137
|
+
type: { summary: 'boolean' },
|
|
138
|
+
defaultValue: { summary: false },
|
|
139
|
+
},
|
|
48
140
|
},
|
|
49
141
|
},
|
|
50
142
|
} satisfies Meta<typeof Todo>;
|
|
@@ -52,7 +144,7 @@ const meta = {
|
|
|
52
144
|
export default meta;
|
|
53
145
|
type Story = StoryObj<typeof meta>;
|
|
54
146
|
|
|
55
|
-
export const
|
|
147
|
+
export const BasicUsage: Story = {
|
|
56
148
|
args: {
|
|
57
149
|
items: [
|
|
58
150
|
{ id: '1', text: 'Learn React', completed: true },
|
|
@@ -65,6 +157,13 @@ export const Default: Story = {
|
|
|
65
157
|
showCompleted: true,
|
|
66
158
|
disabled: false,
|
|
67
159
|
},
|
|
160
|
+
parameters: {
|
|
161
|
+
docs: {
|
|
162
|
+
description: {
|
|
163
|
+
story: 'Basic todo list with sample tasks.',
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
},
|
|
68
167
|
};
|
|
69
168
|
|
|
70
169
|
export const WithManyItems: Story = {
|
|
@@ -79,19 +178,56 @@ export const WithManyItems: Story = {
|
|
|
79
178
|
title: 'Project Tasks',
|
|
80
179
|
showCompleted: true,
|
|
81
180
|
},
|
|
181
|
+
parameters: {
|
|
182
|
+
docs: {
|
|
183
|
+
description: {
|
|
184
|
+
story: 'Todo list with multiple tasks.',
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
},
|
|
82
188
|
};
|
|
83
189
|
|
|
84
190
|
export const Small: Story = {
|
|
85
191
|
args: {
|
|
86
|
-
|
|
192
|
+
items: [
|
|
193
|
+
{ id: '1', text: 'Learn React', completed: true },
|
|
194
|
+
{ id: '2', text: 'Build a todo app', completed: false },
|
|
195
|
+
{ id: '3', text: 'Deploy to production', completed: false },
|
|
196
|
+
],
|
|
197
|
+
title: 'Todo List',
|
|
198
|
+
placeholder: 'Add a new task',
|
|
87
199
|
size: 'sm',
|
|
200
|
+
showCompleted: true,
|
|
201
|
+
disabled: false,
|
|
202
|
+
},
|
|
203
|
+
parameters: {
|
|
204
|
+
docs: {
|
|
205
|
+
description: {
|
|
206
|
+
story: 'Small-sized todo list.',
|
|
207
|
+
},
|
|
208
|
+
},
|
|
88
209
|
},
|
|
89
210
|
};
|
|
90
211
|
|
|
91
212
|
export const Large: Story = {
|
|
92
213
|
args: {
|
|
93
|
-
|
|
214
|
+
items: [
|
|
215
|
+
{ id: '1', text: 'Learn React', completed: true },
|
|
216
|
+
{ id: '2', text: 'Build a todo app', completed: false },
|
|
217
|
+
{ id: '3', text: 'Deploy to production', completed: false },
|
|
218
|
+
],
|
|
219
|
+
title: 'Todo List',
|
|
220
|
+
placeholder: 'Add a new task',
|
|
94
221
|
size: 'lg',
|
|
222
|
+
showCompleted: true,
|
|
223
|
+
disabled: false,
|
|
224
|
+
},
|
|
225
|
+
parameters: {
|
|
226
|
+
docs: {
|
|
227
|
+
description: {
|
|
228
|
+
story: 'Large-sized todo list.',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
95
231
|
},
|
|
96
232
|
};
|
|
97
233
|
|
|
@@ -102,28 +238,81 @@ export const HideCompleted: Story = {
|
|
|
102
238
|
{ id: generateUUID(), text: 'Build a todo app', completed: false },
|
|
103
239
|
{ id: generateUUID(), text: 'Deploy to production', completed: false },
|
|
104
240
|
],
|
|
241
|
+
title: 'Todo List',
|
|
242
|
+
placeholder: 'Add a new task',
|
|
105
243
|
showCompleted: false,
|
|
106
|
-
|
|
244
|
+
},
|
|
245
|
+
parameters: {
|
|
246
|
+
docs: {
|
|
247
|
+
description: {
|
|
248
|
+
story: 'Todo list that hides completed items.',
|
|
249
|
+
},
|
|
250
|
+
},
|
|
107
251
|
},
|
|
108
252
|
};
|
|
109
253
|
|
|
110
254
|
export const Disabled: Story = {
|
|
111
255
|
args: {
|
|
112
|
-
|
|
256
|
+
items: [
|
|
257
|
+
{ id: '1', text: 'Learn React', completed: true },
|
|
258
|
+
{ id: '2', text: 'Build a todo app', completed: false },
|
|
259
|
+
{ id: '3', text: 'Deploy to production', completed: false },
|
|
260
|
+
],
|
|
261
|
+
title: 'Todo List',
|
|
262
|
+
placeholder: 'Add a new task',
|
|
263
|
+
size: 'md',
|
|
264
|
+
showCompleted: true,
|
|
113
265
|
disabled: true,
|
|
114
266
|
},
|
|
267
|
+
parameters: {
|
|
268
|
+
docs: {
|
|
269
|
+
description: {
|
|
270
|
+
story: 'Disabled todo list.',
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
},
|
|
115
274
|
};
|
|
116
275
|
|
|
117
276
|
export const CustomTitle: Story = {
|
|
118
277
|
args: {
|
|
119
|
-
|
|
278
|
+
items: [
|
|
279
|
+
{ id: '1', text: 'Learn React', completed: true },
|
|
280
|
+
{ id: '2', text: 'Build a todo app', completed: false },
|
|
281
|
+
{ id: '3', text: 'Deploy to production', completed: false },
|
|
282
|
+
],
|
|
120
283
|
title: 'My Custom Todo List',
|
|
284
|
+
placeholder: 'Add a new task',
|
|
285
|
+
size: 'md',
|
|
286
|
+
showCompleted: true,
|
|
287
|
+
disabled: false,
|
|
288
|
+
},
|
|
289
|
+
parameters: {
|
|
290
|
+
docs: {
|
|
291
|
+
description: {
|
|
292
|
+
story: 'Todo list with a custom title.',
|
|
293
|
+
},
|
|
294
|
+
},
|
|
121
295
|
},
|
|
122
296
|
};
|
|
123
297
|
|
|
124
298
|
export const NoTitle: Story = {
|
|
125
299
|
args: {
|
|
126
|
-
|
|
300
|
+
items: [
|
|
301
|
+
{ id: '1', text: 'Learn React', completed: true },
|
|
302
|
+
{ id: '2', text: 'Build a todo app', completed: false },
|
|
303
|
+
{ id: '3', text: 'Deploy to production', completed: false },
|
|
304
|
+
],
|
|
127
305
|
title: '',
|
|
306
|
+
placeholder: 'Add a new task',
|
|
307
|
+
size: 'md',
|
|
308
|
+
showCompleted: true,
|
|
309
|
+
disabled: false,
|
|
310
|
+
},
|
|
311
|
+
parameters: {
|
|
312
|
+
docs: {
|
|
313
|
+
description: {
|
|
314
|
+
story: 'Todo list without a title.',
|
|
315
|
+
},
|
|
316
|
+
},
|
|
128
317
|
},
|
|
129
318
|
};
|
|
@@ -1,16 +1,70 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
3
4
|
import { Toggle } from './Toggle';
|
|
4
5
|
|
|
5
|
-
const meta = {
|
|
6
|
+
const meta: Meta<typeof Toggle> = {
|
|
6
7
|
title: 'Components/Toggle',
|
|
7
8
|
component: Toggle,
|
|
8
9
|
parameters: {
|
|
9
10
|
layout: 'centered',
|
|
10
11
|
docs: {
|
|
11
12
|
description: {
|
|
12
|
-
component:
|
|
13
|
-
|
|
13
|
+
component: `
|
|
14
|
+
# Toggle
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
Toggle provides an on/off switch control for binary choices. It offers a more visually distinct alternative to checkboxes for settings, preferences, or feature toggles. Toggles support disabled states and can include glass morphism effects.
|
|
19
|
+
|
|
20
|
+
## Features
|
|
21
|
+
|
|
22
|
+
- On/off state control
|
|
23
|
+
- Uncontrolled and controlled usage
|
|
24
|
+
- Disabled state
|
|
25
|
+
- Glass morphism effect
|
|
26
|
+
- Accessible design
|
|
27
|
+
- Responsive behavior
|
|
28
|
+
|
|
29
|
+
## Accessibility
|
|
30
|
+
|
|
31
|
+
- Keyboard support: Toggle with Space or Enter key
|
|
32
|
+
- Screen reader: State changes announced appropriately
|
|
33
|
+
- ARIA support: Proper roles and properties for toggle components
|
|
34
|
+
- Focus management: Visible focus indicators maintained
|
|
35
|
+
|
|
36
|
+
## Usage Examples
|
|
37
|
+
|
|
38
|
+
### Basic Usage
|
|
39
|
+
|
|
40
|
+
\`\`\`tsx
|
|
41
|
+
<Toggle
|
|
42
|
+
defaultChecked={false}
|
|
43
|
+
onChange={(checked) => console.log(checked)}
|
|
44
|
+
/>
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
### Controlled Usage
|
|
48
|
+
|
|
49
|
+
\`\`\`tsx
|
|
50
|
+
<Toggle
|
|
51
|
+
checked={isEnabled}
|
|
52
|
+
onChange={setEnabled}
|
|
53
|
+
/>
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
## API Reference
|
|
57
|
+
|
|
58
|
+
### Props
|
|
59
|
+
|
|
60
|
+
| Prop | Type | Default | Description |
|
|
61
|
+
| ---- | ---- | ------- | ----------- |
|
|
62
|
+
| defaultChecked | boolean | false | Whether the toggle is initially on (uncontrolled) |
|
|
63
|
+
| checked | boolean | - | Whether the toggle is on (controlled) |
|
|
64
|
+
| onChange | (checked: boolean) => void | - | Callback when the toggle state changes |
|
|
65
|
+
| disabled | boolean | false | Whether the toggle is disabled |
|
|
66
|
+
| glass | boolean | false | Enable glass morphism effect |
|
|
67
|
+
`,
|
|
14
68
|
},
|
|
15
69
|
},
|
|
16
70
|
},
|
|
@@ -19,11 +73,18 @@ const meta = {
|
|
|
19
73
|
defaultChecked: {
|
|
20
74
|
control: { type: 'boolean' },
|
|
21
75
|
description: 'Whether the toggle is initially on (uncontrolled)',
|
|
22
|
-
|
|
76
|
+
table: {
|
|
77
|
+
type: { summary: 'boolean' },
|
|
78
|
+
defaultValue: { summary: 'false' },
|
|
79
|
+
},
|
|
23
80
|
},
|
|
24
81
|
checked: {
|
|
25
82
|
control: { type: 'boolean' },
|
|
26
83
|
description: 'Whether the toggle is on (controlled)',
|
|
84
|
+
table: {
|
|
85
|
+
type: { summary: 'boolean' },
|
|
86
|
+
defaultValue: { summary: '-' },
|
|
87
|
+
},
|
|
27
88
|
},
|
|
28
89
|
onChange: {
|
|
29
90
|
action: 'changed',
|
|
@@ -32,19 +93,26 @@ const meta = {
|
|
|
32
93
|
disabled: {
|
|
33
94
|
control: { type: 'boolean' },
|
|
34
95
|
description: 'Whether the toggle is disabled',
|
|
35
|
-
|
|
96
|
+
table: {
|
|
97
|
+
type: { summary: 'boolean' },
|
|
98
|
+
defaultValue: { summary: 'false' },
|
|
99
|
+
},
|
|
36
100
|
},
|
|
37
101
|
glass: {
|
|
38
102
|
control: 'boolean',
|
|
39
103
|
description: 'Enable glass morphism effect',
|
|
104
|
+
table: {
|
|
105
|
+
type: { summary: 'boolean' },
|
|
106
|
+
defaultValue: { summary: 'false' },
|
|
107
|
+
},
|
|
40
108
|
},
|
|
41
109
|
},
|
|
42
|
-
}
|
|
110
|
+
};
|
|
43
111
|
|
|
44
112
|
export default meta;
|
|
45
113
|
type Story = StoryObj<typeof meta>;
|
|
46
114
|
|
|
47
|
-
export const
|
|
115
|
+
export const BasicUsage: Story = {
|
|
48
116
|
render: args => (
|
|
49
117
|
<div style={{ display: 'flex', justifyContent: 'center', padding: '30px' }}>
|
|
50
118
|
<Toggle {...args} />
|
|
@@ -54,11 +122,15 @@ export const Default: Story = {
|
|
|
54
122
|
defaultChecked: false,
|
|
55
123
|
disabled: false,
|
|
56
124
|
},
|
|
125
|
+
parameters: {
|
|
126
|
+
docs: {
|
|
127
|
+
description: {
|
|
128
|
+
story: 'Basic toggle with default settings.',
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
57
132
|
};
|
|
58
133
|
|
|
59
|
-
/**
|
|
60
|
-
* Controlled Toggle using checked and onChange.
|
|
61
|
-
*/
|
|
62
134
|
export const Controlled: Story = {
|
|
63
135
|
render: () => {
|
|
64
136
|
const [isChecked, setIsChecked] = React.useState(false);
|
|
@@ -69,6 +141,13 @@ export const Controlled: Story = {
|
|
|
69
141
|
</div>
|
|
70
142
|
);
|
|
71
143
|
},
|
|
144
|
+
parameters: {
|
|
145
|
+
docs: {
|
|
146
|
+
description: {
|
|
147
|
+
story: 'Controlled toggle using checked and onChange.',
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
},
|
|
72
151
|
};
|
|
73
152
|
|
|
74
153
|
export const InitiallyOn: Story = {
|
|
@@ -81,42 +160,52 @@ export const InitiallyOn: Story = {
|
|
|
81
160
|
defaultChecked: true,
|
|
82
161
|
disabled: false,
|
|
83
162
|
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
</div>
|
|
91
|
-
),
|
|
92
|
-
args: {
|
|
93
|
-
defaultChecked: false,
|
|
94
|
-
disabled: true,
|
|
163
|
+
parameters: {
|
|
164
|
+
docs: {
|
|
165
|
+
description: {
|
|
166
|
+
story: 'Toggle that starts in the "on" position.',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
95
169
|
},
|
|
96
170
|
};
|
|
97
171
|
|
|
98
|
-
export const
|
|
99
|
-
render:
|
|
100
|
-
<div
|
|
101
|
-
|
|
172
|
+
export const DisabledStates: Story = {
|
|
173
|
+
render: () => (
|
|
174
|
+
<div
|
|
175
|
+
style={{
|
|
176
|
+
display: 'flex',
|
|
177
|
+
flexDirection: 'column',
|
|
178
|
+
alignItems: 'center',
|
|
179
|
+
gap: '2rem',
|
|
180
|
+
padding: '30px',
|
|
181
|
+
}}
|
|
182
|
+
>
|
|
183
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>
|
|
184
|
+
<Toggle disabled={true} checked={false} />
|
|
185
|
+
<span>Disabled Off</span>
|
|
186
|
+
</div>
|
|
187
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>
|
|
188
|
+
<Toggle disabled={true} checked={true} />
|
|
189
|
+
<span>Disabled On</span>
|
|
190
|
+
</div>
|
|
102
191
|
</div>
|
|
103
192
|
),
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
193
|
+
parameters: {
|
|
194
|
+
docs: {
|
|
195
|
+
description: {
|
|
196
|
+
story: 'Toggle in both disabled states (off and on).',
|
|
197
|
+
},
|
|
198
|
+
},
|
|
107
199
|
},
|
|
108
200
|
};
|
|
109
201
|
|
|
110
|
-
export const
|
|
111
|
-
|
|
112
|
-
defaultChecked: false,
|
|
113
|
-
disabled: false,
|
|
114
|
-
glass: true,
|
|
115
|
-
},
|
|
116
|
-
render: (args: any) => (
|
|
202
|
+
export const WithGlassEffect: Story = {
|
|
203
|
+
render: args => (
|
|
117
204
|
<div
|
|
118
205
|
style={{
|
|
119
|
-
background: '
|
|
206
|
+
background: 'url(https://images.unsplash.com/photo-1579546929518-9e396f3cc809)',
|
|
207
|
+
backgroundSize: 'cover',
|
|
208
|
+
backgroundPosition: 'center',
|
|
120
209
|
padding: '3rem',
|
|
121
210
|
borderRadius: '12px',
|
|
122
211
|
minHeight: '200px',
|
|
@@ -128,6 +217,18 @@ export const Glass: Story = {
|
|
|
128
217
|
<Toggle {...args} />
|
|
129
218
|
</div>
|
|
130
219
|
),
|
|
220
|
+
args: {
|
|
221
|
+
defaultChecked: false,
|
|
222
|
+
disabled: false,
|
|
223
|
+
glass: true,
|
|
224
|
+
},
|
|
225
|
+
parameters: {
|
|
226
|
+
docs: {
|
|
227
|
+
description: {
|
|
228
|
+
story: 'Toggle with glass morphism effect applied.',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
131
232
|
};
|
|
132
233
|
|
|
133
234
|
export const GlassOn: Story = {
|