@shohojdhara/atomix 0.3.13 → 0.3.15
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 +39 -0
- package/README.md +2 -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 +43 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +67 -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 +298 -167
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +3 -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 +43 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +67 -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 +2 -2
- package/dist/charts.js +87 -58
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +42 -12
- package/dist/core.js +175 -135
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +30 -16
- package/dist/forms.js +146 -131
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +2 -2
- package/dist/heavy.js +151 -118
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +130 -106
- package/dist/index.esm.js +1083 -465
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1102 -483
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +27 -2
- package/dist/theme.js +721 -108
- package/dist/theme.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +749 -1153
- 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 +78 -118
- package/scripts/cli/component-generator.js +564 -0
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/documentation-sync.js +542 -0
- package/scripts/cli/interactive-init.js +129 -292
- package/scripts/cli/mappings.js +211 -0
- package/scripts/cli/migration-tools.js +95 -288
- package/scripts/cli/template-manager.js +105 -0
- package/scripts/cli/templates/README.md +123 -0
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +171 -0
- package/scripts/cli/templates/config-templates.js +126 -0
- package/scripts/cli/templates/index.js +102 -0
- package/scripts/cli/templates/project-templates.js +342 -0
- package/scripts/cli/templates/react-templates.js +331 -0
- package/scripts/cli/templates/scss-templates.js +155 -0
- package/scripts/cli/templates/storybook-templates.js +236 -0
- package/scripts/cli/templates/testing-templates.js +224 -0
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/token-templates.js +447 -0
- package/scripts/cli/templates/types-templates.js +147 -0
- package/scripts/cli/templates.js +35 -0
- package/scripts/cli/theme-bridge.js +28 -16
- package/scripts/cli/token-manager.js +432 -247
- package/scripts/cli/utils.js +37 -26
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- package/src/components/Accordion/Accordion.test.tsx +57 -0
- package/src/components/Accordion/Accordion.tsx +4 -0
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +2 -2
- package/src/components/AtomixGlass/shader-utils.ts +5 -0
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2965 -2861
- 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 +73 -59
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +239 -27
- package/src/components/Badge/Badge.stories.tsx +132 -373
- package/src/components/Badge/Badge.test.tsx +51 -0
- package/src/components/Badge/Badge.tsx +20 -1
- package/src/components/Block/Block.stories.tsx +26 -17
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +50 -54
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Button/README.md +5 -0
- package/src/components/Callout/Callout.stories.tsx +299 -644
- package/src/components/Callout/Callout.test.tsx +10 -10
- package/src/components/Callout/Callout.tsx +7 -7
- package/src/components/Callout/README.md +9 -8
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Card/Card.tsx +2 -2
- package/src/components/Chart/Chart.stories.tsx +156 -14
- package/src/components/Chart/Chart.tsx +1 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
- package/src/components/Countdown/Countdown.stories.tsx +115 -8
- package/src/components/DataTable/DataTable.stories.tsx +346 -146
- package/src/components/DataTable/DataTable.tsx +14 -12
- package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +157 -37
- package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
- package/src/components/Footer/Footer.stories.tsx +392 -328
- package/src/components/Form/Checkbox.stories.tsx +143 -9
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +90 -52
- package/src/components/Form/Form.stories.tsx +121 -22
- package/src/components/Form/FormGroup.stories.tsx +128 -5
- package/src/components/Form/Input.stories.tsx +28 -16
- package/src/components/Form/Input.test.tsx +59 -0
- package/src/components/Form/Input.tsx +97 -95
- package/src/components/Form/Radio.stories.tsx +232 -97
- package/src/components/Form/Radio.tsx +2 -2
- package/src/components/Form/Select.stories.tsx +144 -12
- package/src/components/Form/Select.tsx +2 -2
- package/src/components/Form/Textarea.stories.tsx +171 -13
- package/src/components/Form/Textarea.test.tsx +45 -0
- package/src/components/Form/Textarea.tsx +88 -86
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +143 -5
- package/src/components/Modal/Modal.stories.tsx +185 -46
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
- package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
- package/src/components/Navigation/README.md +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +5 -2
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
- package/src/components/Popover/Popover.stories.tsx +449 -99
- package/src/components/ProductReview/ProductReview.tsx +1 -1
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/Progress/Progress.tsx +46 -46
- package/src/components/Rating/Rating.stories.tsx +4 -4
- package/src/components/Rating/Rating.tsx +8 -8
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Slider/Slider.stories.tsx +63 -63
- package/src/components/Spinner/Spinner.stories.tsx +104 -10
- package/src/components/Spinner/Spinner.test.tsx +35 -0
- package/src/components/Spinner/Spinner.tsx +9 -2
- package/src/components/Steps/Steps.stories.tsx +172 -43
- package/src/components/Tabs/Tabs.stories.tsx +136 -10
- package/src/components/Testimonial/Testimonial.stories.tsx +121 -4
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +153 -43
- package/src/components/Toggle/Toggle.test.tsx +91 -0
- package/src/components/Toggle/Toggle.tsx +44 -27
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/components/Upload/Upload.stories.tsx +113 -24
- package/src/layouts/Grid/Grid.stories.tsx +49 -49
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +193 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/useAccordion.ts +12 -3
- package/src/lib/composables/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useBreadcrumb.ts +2 -2
- package/src/lib/composables/useCallout.ts +7 -7
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/composables/useNavbar.ts +1 -1
- package/src/lib/constants/components.ts +10 -33
- package/src/lib/storybook/InteractiveDemo.tsx +113 -0
- package/src/lib/storybook/PreviewContainer.tsx +36 -0
- package/src/lib/storybook/VariantsGrid.tsx +21 -0
- package/src/lib/storybook/index.ts +3 -0
- package/src/lib/theme/core/createThemeObject.ts +9 -5
- package/src/lib/theme/devtools/CLI.ts +155 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
- package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
- package/src/lib/theme/devtools/index.ts +3 -0
- package/src/lib/theme/errors/errors.ts +8 -0
- package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
- package/src/lib/theme/utils/index.ts +1 -0
- package/src/lib/theme/utils/themeValidation.ts +501 -0
- package/src/lib/theme-tools.ts +32 -3
- package/src/lib/types/components.ts +82 -27
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/csv.ts +17 -0
- package/src/lib/utils/dataTableExport.ts +1 -10
- package/src/lib/utils/themeNaming.ts +1 -1
- package/src/styles/01-settings/_index.scss +2 -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.typography.scss +5 -5
- package/src/styles/02-tools/_tools.utility-api.scss +14 -0
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.callout.scss +29 -33
- package/src/styles/06-components/_components.checkbox.scss +23 -17
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.display.scss +14 -3
- package/src/styles/99-utilities/_utilities.flex.scss +10 -10
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +28 -8
- 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/__tests__/cli-commands.test.js +0 -204
- package/scripts/cli/__tests__/vitest.config.js +0 -26
- 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
|
@@ -60,8 +60,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
60
60
|
}}
|
|
61
61
|
>
|
|
62
62
|
<div className="u-text-center">
|
|
63
|
-
<h2 className="u-
|
|
64
|
-
<p className="u-
|
|
63
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Welcome to Atomix</h2>
|
|
64
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
65
65
|
A modern design system for building responsive interfaces
|
|
66
66
|
</p>
|
|
67
67
|
<Button variant="primary">Get Started</Button>
|
|
@@ -84,8 +84,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
84
84
|
}}
|
|
85
85
|
>
|
|
86
86
|
<div className="u-text-center">
|
|
87
|
-
<h2 className="u-
|
|
88
|
-
<p className="u-
|
|
87
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Flexible Components</h2>
|
|
88
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
89
89
|
Build with reusable and customizable components
|
|
90
90
|
</p>
|
|
91
91
|
<Button variant="light">Learn More</Button>
|
|
@@ -108,8 +108,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
108
108
|
}}
|
|
109
109
|
>
|
|
110
110
|
<div className="u-text-center">
|
|
111
|
-
<h2 className="u-
|
|
112
|
-
<p className="u-
|
|
111
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Easy to Use</h2>
|
|
112
|
+
<p className="u-text-base u-c-white u-mb-4">Simple API and comprehensive documentation</p>
|
|
113
113
|
<Button variant="light">View Docs</Button>
|
|
114
114
|
</div>
|
|
115
115
|
</div>
|
|
@@ -130,8 +130,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
130
130
|
}}
|
|
131
131
|
>
|
|
132
132
|
<div className="u-text-center">
|
|
133
|
-
<h2 className="u-
|
|
134
|
-
<p className="u-
|
|
133
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Fully Responsive</h2>
|
|
134
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
135
135
|
Works on all device sizes from mobile to desktop
|
|
136
136
|
</p>
|
|
137
137
|
<Button variant="dark">See Demo</Button>
|
|
@@ -154,8 +154,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
154
154
|
}}
|
|
155
155
|
>
|
|
156
156
|
<div className="u-text-center">
|
|
157
|
-
<h2 className="u-
|
|
158
|
-
<p className="u-
|
|
157
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Accessible Design</h2>
|
|
158
|
+
<p className="u-text-base u-c-white u-mb-4">WCAG 2.1 AA compliant for all users</p>
|
|
159
159
|
<Button variant="info">Learn More</Button>
|
|
160
160
|
</div>
|
|
161
161
|
</div>
|
|
@@ -176,8 +176,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
176
176
|
}}
|
|
177
177
|
>
|
|
178
178
|
<div className="u-text-center">
|
|
179
|
-
<h2 className="u-
|
|
180
|
-
<p className="u-
|
|
179
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Themeable</h2>
|
|
180
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
181
181
|
Easily customize colors, spacing and typography
|
|
182
182
|
</p>
|
|
183
183
|
<Button variant="warning">View Themes</Button>
|
|
@@ -200,8 +200,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
200
200
|
}}
|
|
201
201
|
>
|
|
202
202
|
<div className="u-text-center">
|
|
203
|
-
<h2 className="u-
|
|
204
|
-
<p className="u-
|
|
203
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Performance Focused</h2>
|
|
204
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
205
205
|
Optimized for fast loading and smooth interactions
|
|
206
206
|
</p>
|
|
207
207
|
<Button variant="success">See Benchmarks</Button>
|
|
@@ -224,8 +224,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
224
224
|
}}
|
|
225
225
|
>
|
|
226
226
|
<div className="u-text-center">
|
|
227
|
-
<h2 className="u-
|
|
228
|
-
<p className="u-
|
|
227
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Developer Friendly</h2>
|
|
228
|
+
<p className="u-text-base u-c-white u-mb-4">Well documented with clear APIs and examples</p>
|
|
229
229
|
<Button variant="primary">View Docs</Button>
|
|
230
230
|
</div>
|
|
231
231
|
</div>
|
|
@@ -246,8 +246,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
246
246
|
}}
|
|
247
247
|
>
|
|
248
248
|
<div className="u-text-center">
|
|
249
|
-
<h2 className="u-
|
|
250
|
-
<p className="u-
|
|
249
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Modular Components</h2>
|
|
250
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
251
251
|
Import only what you need to reduce bundle size
|
|
252
252
|
</p>
|
|
253
253
|
<Button variant="dark">See Components</Button>
|
|
@@ -270,8 +270,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
270
270
|
}}
|
|
271
271
|
>
|
|
272
272
|
<div className="u-text-center">
|
|
273
|
-
<h2 className="u-
|
|
274
|
-
<p className="u-
|
|
273
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Cross Browser</h2>
|
|
274
|
+
<p className="u-text-base u-c-white u-mb-4">
|
|
275
275
|
Consistent experience across all modern browsers
|
|
276
276
|
</p>
|
|
277
277
|
<Button variant="secondary">View Support</Button>
|
|
@@ -294,8 +294,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
294
294
|
}}
|
|
295
295
|
>
|
|
296
296
|
<div className="u-text-center">
|
|
297
|
-
<h2 className="u-
|
|
298
|
-
<p className="u-
|
|
297
|
+
<h2 className="u-text-3 u-c-white u-mb-3">RTL Support</h2>
|
|
298
|
+
<p className="u-text-base u-c-white u-mb-4">Full right-to-left language support built-in</p>
|
|
299
299
|
<Button variant="info">Learn More</Button>
|
|
300
300
|
</div>
|
|
301
301
|
</div>
|
|
@@ -316,8 +316,8 @@ const basicSlides: SliderSlide[] = [
|
|
|
316
316
|
}}
|
|
317
317
|
>
|
|
318
318
|
<div className="u-text-center">
|
|
319
|
-
<h2 className="u-
|
|
320
|
-
<p className="u-
|
|
319
|
+
<h2 className="u-text-3 u-c-white u-mb-3">Open Source</h2>
|
|
320
|
+
<p className="u-text-base u-c-white u-mb-4">Free to use and contribute to the community</p>
|
|
321
321
|
<Button variant="success">View on GitHub</Button>
|
|
322
322
|
</div>
|
|
323
323
|
</div>
|
|
@@ -341,11 +341,11 @@ const productSlides: SliderSlide[] = [
|
|
|
341
341
|
borderRadius: '4px',
|
|
342
342
|
}}
|
|
343
343
|
/>
|
|
344
|
-
<h3 className="u-
|
|
345
|
-
<p className="u-
|
|
344
|
+
<h3 className="u-text-4 u-font-bold u-mb-2">Premium Plan</h3>
|
|
345
|
+
<p className="u-text-sm u-c-muted u-mb-3">Perfect for small teams and growing businesses</p>
|
|
346
346
|
<div className="u-mb-4">
|
|
347
|
-
<span className="u-
|
|
348
|
-
<span className="u-
|
|
347
|
+
<span className="u-text-1 u-font-bold">$29</span>
|
|
348
|
+
<span className="u-text-sm u-c-muted">/month</span>
|
|
349
349
|
</div>
|
|
350
350
|
<Button variant="primary" className="u-w-100">
|
|
351
351
|
Get Started
|
|
@@ -368,11 +368,11 @@ const productSlides: SliderSlide[] = [
|
|
|
368
368
|
borderRadius: '4px',
|
|
369
369
|
}}
|
|
370
370
|
/>
|
|
371
|
-
<h3 className="u-
|
|
372
|
-
<p className="u-
|
|
371
|
+
<h3 className="u-text-4 u-font-bold u-mb-2">Business Plan</h3>
|
|
372
|
+
<p className="u-text-sm u-c-muted u-mb-3">For established teams with advanced needs</p>
|
|
373
373
|
<div className="u-mb-4">
|
|
374
|
-
<span className="u-
|
|
375
|
-
<span className="u-
|
|
374
|
+
<span className="u-text-1 u-font-bold">$79</span>
|
|
375
|
+
<span className="u-text-sm u-c-muted">/month</span>
|
|
376
376
|
</div>
|
|
377
377
|
<Button variant="secondary" className="u-w-100">
|
|
378
378
|
Get Started
|
|
@@ -395,10 +395,10 @@ const productSlides: SliderSlide[] = [
|
|
|
395
395
|
borderRadius: '4px',
|
|
396
396
|
}}
|
|
397
397
|
/>
|
|
398
|
-
<h3 className="u-
|
|
399
|
-
<p className="u-
|
|
398
|
+
<h3 className="u-text-4 u-font-bold u-mb-2">Enterprise Plan</h3>
|
|
399
|
+
<p className="u-text-sm u-c-muted u-mb-3">Custom solutions for large organizations</p>
|
|
400
400
|
<div className="u-mb-4">
|
|
401
|
-
<span className="u-
|
|
401
|
+
<span className="u-text-1 u-font-bold">Custom</span>
|
|
402
402
|
</div>
|
|
403
403
|
<Button variant="dark" className="u-w-100">
|
|
404
404
|
Contact Sales
|
|
@@ -421,11 +421,11 @@ const productSlides: SliderSlide[] = [
|
|
|
421
421
|
borderRadius: '4px',
|
|
422
422
|
}}
|
|
423
423
|
/>
|
|
424
|
-
<h3 className="u-
|
|
425
|
-
<p className="u-
|
|
424
|
+
<h3 className="u-text-4 u-font-bold u-mb-2">Developer Plan</h3>
|
|
425
|
+
<p className="u-text-sm u-c-muted u-mb-3">For developers and technical teams</p>
|
|
426
426
|
<div className="u-mb-4">
|
|
427
|
-
<span className="u-
|
|
428
|
-
<span className="u-
|
|
427
|
+
<span className="u-text-1 u-font-bold">$49</span>
|
|
428
|
+
<span className="u-text-sm u-c-muted">/month</span>
|
|
429
429
|
</div>
|
|
430
430
|
<Button variant="info" className="u-w-100">
|
|
431
431
|
Get Started
|
|
@@ -443,7 +443,7 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
443
443
|
content: (
|
|
444
444
|
<Card className="u-h-100">
|
|
445
445
|
<div className="u-p-5 u-text-center">
|
|
446
|
-
<div className="u-mb-4 u-
|
|
446
|
+
<div className="u-mb-4 u-flex u-justify-center">
|
|
447
447
|
<div
|
|
448
448
|
style={{
|
|
449
449
|
width: '60px',
|
|
@@ -453,12 +453,12 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
453
453
|
}}
|
|
454
454
|
/>
|
|
455
455
|
</div>
|
|
456
|
-
<p className="u-
|
|
456
|
+
<p className="u-text-base u-fst-italic u-mb-4">
|
|
457
457
|
"Atomix has completely transformed how we build our user interfaces. The components are
|
|
458
458
|
intuitive and the design system is consistent across all our products."
|
|
459
459
|
</p>
|
|
460
|
-
<h4 className="u-
|
|
461
|
-
<p className="u-
|
|
460
|
+
<h4 className="u-text-4 u-font-bold">Jane Cooper</h4>
|
|
461
|
+
<p className="u-text-sm u-c-muted">Product Designer, TechCorp</p>
|
|
462
462
|
</div>
|
|
463
463
|
</Card>
|
|
464
464
|
),
|
|
@@ -468,7 +468,7 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
468
468
|
content: (
|
|
469
469
|
<Card className="u-h-100">
|
|
470
470
|
<div className="u-p-5 u-text-center">
|
|
471
|
-
<div className="u-mb-4 u-
|
|
471
|
+
<div className="u-mb-4 u-flex u-justify-center">
|
|
472
472
|
<div
|
|
473
473
|
style={{
|
|
474
474
|
width: '60px',
|
|
@@ -478,12 +478,12 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
478
478
|
}}
|
|
479
479
|
/>
|
|
480
480
|
</div>
|
|
481
|
-
<p className="u-
|
|
481
|
+
<p className="u-text-base u-fst-italic u-mb-4">
|
|
482
482
|
"Implementing Atomix reduced our development time by 40%. The documentation is excellent
|
|
483
483
|
and the components are highly customizable."
|
|
484
484
|
</p>
|
|
485
|
-
<h4 className="u-
|
|
486
|
-
<p className="u-
|
|
485
|
+
<h4 className="u-text-4 u-font-bold">John Doe</h4>
|
|
486
|
+
<p className="u-text-sm u-c-muted">Frontend Developer, StartupX</p>
|
|
487
487
|
</div>
|
|
488
488
|
</Card>
|
|
489
489
|
),
|
|
@@ -493,7 +493,7 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
493
493
|
content: (
|
|
494
494
|
<Card className="u-h-100">
|
|
495
495
|
<div className="u-p-5 u-text-center">
|
|
496
|
-
<div className="u-mb-4 u-
|
|
496
|
+
<div className="u-mb-4 u-flex u-justify-center">
|
|
497
497
|
<div
|
|
498
498
|
style={{
|
|
499
499
|
width: '60px',
|
|
@@ -503,12 +503,12 @@ const testimonialSlides: SliderSlide[] = [
|
|
|
503
503
|
}}
|
|
504
504
|
/>
|
|
505
505
|
</div>
|
|
506
|
-
<p className="u-
|
|
506
|
+
<p className="u-text-base u-fst-italic u-mb-4">
|
|
507
507
|
"The accessibility features in Atomix are impressive. Our products now meet WCAG 2.1 AA
|
|
508
508
|
standards with minimal effort."
|
|
509
509
|
</p>
|
|
510
|
-
<h4 className="u-
|
|
511
|
-
<p className="u-
|
|
510
|
+
<h4 className="u-text-4 u-font-bold">Sarah Johnson</h4>
|
|
511
|
+
<p className="u-text-sm u-c-muted">Accessibility Lead, InclusiveTech</p>
|
|
512
512
|
</div>
|
|
513
513
|
</Card>
|
|
514
514
|
),
|
|
@@ -522,9 +522,9 @@ const featureSlides: SliderSlide[] = [
|
|
|
522
522
|
content: (
|
|
523
523
|
<div className="u-h-100" style={{ display: 'flex', alignItems: 'center' }}>
|
|
524
524
|
<div className="o-grid u-w-100">
|
|
525
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
526
|
-
<h2 className="u-
|
|
527
|
-
<p className="u-
|
|
525
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-flex-column u-justify-center u-p-5">
|
|
526
|
+
<h2 className="u-text-3 u-font-bold u-mb-3">Responsive Design</h2>
|
|
527
|
+
<p className="u-text-base u-c-muted u-mb-4">
|
|
528
528
|
All components are built with mobile-first responsive design principles, ensuring your
|
|
529
529
|
interfaces look great on any device.
|
|
530
530
|
</p>
|
|
@@ -532,7 +532,7 @@ const featureSlides: SliderSlide[] = [
|
|
|
532
532
|
<Button variant="primary">Learn More</Button>
|
|
533
533
|
</div>
|
|
534
534
|
</div>
|
|
535
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
535
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-items-center u-justify-center u-p-5">
|
|
536
536
|
<div
|
|
537
537
|
className="u-w-100 u-h-100"
|
|
538
538
|
style={{
|
|
@@ -558,9 +558,9 @@ const featureSlides: SliderSlide[] = [
|
|
|
558
558
|
content: (
|
|
559
559
|
<div className="u-h-100" style={{ display: 'flex', alignItems: 'center' }}>
|
|
560
560
|
<div className="o-grid u-w-100">
|
|
561
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
562
|
-
<h2 className="u-
|
|
563
|
-
<p className="u-
|
|
561
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-flex-column u-justify-center u-p-5">
|
|
562
|
+
<h2 className="u-text-3 u-font-bold u-mb-3">Accessibility</h2>
|
|
563
|
+
<p className="u-text-base u-c-muted u-mb-4">
|
|
564
564
|
Built with WCAG 2.1 AA compliance in mind, ensuring your applications are usable by
|
|
565
565
|
everyone, including people with disabilities.
|
|
566
566
|
</p>
|
|
@@ -568,7 +568,7 @@ const featureSlides: SliderSlide[] = [
|
|
|
568
568
|
<Button variant="secondary">Accessibility Guide</Button>
|
|
569
569
|
</div>
|
|
570
570
|
</div>
|
|
571
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
571
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-items-center u-justify-center u-p-5">
|
|
572
572
|
<div
|
|
573
573
|
className="u-w-100 u-h-100"
|
|
574
574
|
style={{
|
|
@@ -594,9 +594,9 @@ const featureSlides: SliderSlide[] = [
|
|
|
594
594
|
content: (
|
|
595
595
|
<div className="u-h-100" style={{ display: 'flex', alignItems: 'center' }}>
|
|
596
596
|
<div className="o-grid u-w-100">
|
|
597
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
598
|
-
<h2 className="u-
|
|
599
|
-
<p className="u-
|
|
597
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-flex-column u-justify-center u-p-5">
|
|
598
|
+
<h2 className="u-text-3 u-font-bold u-mb-3">Customizable</h2>
|
|
599
|
+
<p className="u-text-base u-c-muted u-mb-4">
|
|
600
600
|
Easily customize colors, spacing, typography and more through CSS variables or SCSS
|
|
601
601
|
mixins to match your brand identity.
|
|
602
602
|
</p>
|
|
@@ -604,7 +604,7 @@ const featureSlides: SliderSlide[] = [
|
|
|
604
604
|
<Button variant="success">Customization Guide</Button>
|
|
605
605
|
</div>
|
|
606
606
|
</div>
|
|
607
|
-
<div className="o-grid__col u-col-12 u-col-md-6 u-
|
|
607
|
+
<div className="o-grid__col u-col-12 u-col-md-6 u-flex u-items-center u-justify-center u-p-5">
|
|
608
608
|
<div
|
|
609
609
|
className="u-w-100 u-h-100"
|
|
610
610
|
style={{
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
3
4
|
import { Spinner } from './Spinner';
|
|
4
5
|
import { THEME_COLORS, SIZES } from '../../lib/constants/components';
|
|
5
6
|
|
|
@@ -10,8 +11,56 @@ const meta = {
|
|
|
10
11
|
layout: 'centered',
|
|
11
12
|
docs: {
|
|
12
13
|
description: {
|
|
13
|
-
component:
|
|
14
|
-
|
|
14
|
+
component: `
|
|
15
|
+
# Spinner
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Spinner provides visual feedback during loading states. It displays an animated loading indicator that can be customized with different variants and sizes. Use spinners to indicate that content is being loaded or processed.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- Multiple color variants
|
|
24
|
+
- Multiple size options
|
|
25
|
+
- Fullscreen mode
|
|
26
|
+
- Smooth animations
|
|
27
|
+
- Accessible design
|
|
28
|
+
- Responsive behavior
|
|
29
|
+
|
|
30
|
+
## Accessibility
|
|
31
|
+
|
|
32
|
+
- Screen reader: Loading state announced appropriately
|
|
33
|
+
- ARIA support: Proper roles and properties for spinner components
|
|
34
|
+
- Keyboard support: Accessible via keyboard navigation
|
|
35
|
+
- Focus management: Focus indicators maintained for interactive elements
|
|
36
|
+
|
|
37
|
+
## Usage Examples
|
|
38
|
+
|
|
39
|
+
### Basic Usage
|
|
40
|
+
|
|
41
|
+
\`\`\`tsx
|
|
42
|
+
<Spinner />
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
### With Variant and Size
|
|
46
|
+
|
|
47
|
+
\`\`\`tsx
|
|
48
|
+
<Spinner
|
|
49
|
+
variant="primary"
|
|
50
|
+
size="lg"
|
|
51
|
+
/>
|
|
52
|
+
\`\`\`
|
|
53
|
+
|
|
54
|
+
## API Reference
|
|
55
|
+
|
|
56
|
+
### Props
|
|
57
|
+
|
|
58
|
+
| Prop | Type | Default | Description |
|
|
59
|
+
| ---- | ---- | ------- | ----------- |
|
|
60
|
+
| variant | ThemeColor | 'primary' | The color variant of the spinner |
|
|
61
|
+
| size | 'sm' \\| 'md' \\| 'lg' | 'md' | The size of the spinner |
|
|
62
|
+
| fullscreen | boolean | false | Whether the spinner should be centered and fixed in the viewport |
|
|
63
|
+
`,
|
|
15
64
|
},
|
|
16
65
|
},
|
|
17
66
|
},
|
|
@@ -21,15 +70,27 @@ const meta = {
|
|
|
21
70
|
control: { type: 'select' },
|
|
22
71
|
options: THEME_COLORS,
|
|
23
72
|
description: 'The color variant of the spinner',
|
|
73
|
+
table: {
|
|
74
|
+
type: { summary: 'ThemeColor' },
|
|
75
|
+
defaultValue: { summary: 'primary' },
|
|
76
|
+
},
|
|
24
77
|
},
|
|
25
78
|
size: {
|
|
26
79
|
control: { type: 'select' },
|
|
27
80
|
options: SIZES,
|
|
28
81
|
description: 'The size of the spinner',
|
|
82
|
+
table: {
|
|
83
|
+
type: { summary: '"sm" | "md" | "lg"' },
|
|
84
|
+
defaultValue: { summary: 'md' },
|
|
85
|
+
},
|
|
29
86
|
},
|
|
30
87
|
fullscreen: {
|
|
31
88
|
control: 'boolean',
|
|
32
89
|
description: 'Whether the spinner should be centered and fixed in the viewport',
|
|
90
|
+
table: {
|
|
91
|
+
type: { summary: 'boolean' },
|
|
92
|
+
defaultValue: { summary: false },
|
|
93
|
+
},
|
|
33
94
|
},
|
|
34
95
|
},
|
|
35
96
|
} satisfies Meta<typeof Spinner>;
|
|
@@ -37,33 +98,66 @@ const meta = {
|
|
|
37
98
|
export default meta;
|
|
38
99
|
type Story = StoryObj<typeof meta>;
|
|
39
100
|
|
|
40
|
-
|
|
41
|
-
export const Default: Story = {
|
|
101
|
+
export const BasicUsage: Story = {
|
|
42
102
|
args: {
|
|
43
103
|
variant: 'primary',
|
|
44
104
|
size: 'md',
|
|
45
105
|
fullscreen: false,
|
|
46
106
|
},
|
|
107
|
+
parameters: {
|
|
108
|
+
docs: {
|
|
109
|
+
description: {
|
|
110
|
+
story: 'Basic spinner with default settings.',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
47
114
|
};
|
|
48
115
|
|
|
49
|
-
|
|
50
|
-
export const Sizes: Story = {
|
|
116
|
+
export const AllSizes: Story = {
|
|
51
117
|
render: () => (
|
|
52
|
-
<div className="u-
|
|
118
|
+
<div className="u-flex u-flex-wrap u-gap-3 u-items-center">
|
|
53
119
|
<Spinner size="sm" />
|
|
54
120
|
<Spinner size="md" />
|
|
55
121
|
<Spinner size="lg" />
|
|
56
122
|
</div>
|
|
57
123
|
),
|
|
124
|
+
parameters: {
|
|
125
|
+
docs: {
|
|
126
|
+
description: {
|
|
127
|
+
story: 'Spinner in all available sizes.',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
},
|
|
58
131
|
};
|
|
59
132
|
|
|
60
|
-
|
|
61
|
-
export const ColorVariants: Story = {
|
|
133
|
+
export const AllVariants: Story = {
|
|
62
134
|
render: () => (
|
|
63
|
-
<div className="u-
|
|
135
|
+
<div className="u-flex u-flex-wrap u-gap-3 u-items-center">
|
|
64
136
|
{THEME_COLORS.map(color => (
|
|
65
137
|
<Spinner key={color} variant={color} />
|
|
66
138
|
))}
|
|
67
139
|
</div>
|
|
68
140
|
),
|
|
141
|
+
parameters: {
|
|
142
|
+
docs: {
|
|
143
|
+
description: {
|
|
144
|
+
story: 'Spinner in all available color variants.',
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export const Fullscreen: Story = {
|
|
151
|
+
render: () => (
|
|
152
|
+
<div style={{ height: '200px', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
153
|
+
<Spinner fullscreen={true} variant="primary" size="lg" />
|
|
154
|
+
</div>
|
|
155
|
+
),
|
|
156
|
+
parameters: {
|
|
157
|
+
docs: {
|
|
158
|
+
description: {
|
|
159
|
+
story: 'Fullscreen spinner centered in the viewport.',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
69
163
|
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
3
|
+
import { Spinner } from './Spinner';
|
|
4
|
+
|
|
5
|
+
// Mock AtomixGlass component
|
|
6
|
+
vi.mock('../AtomixGlass/AtomixGlass', () => ({
|
|
7
|
+
AtomixGlass: ({ children, ...props }: any) => (
|
|
8
|
+
<div data-testid="atomix-glass" data-glass-props={JSON.stringify(props)}>
|
|
9
|
+
{children}
|
|
10
|
+
</div>
|
|
11
|
+
),
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
describe('Spinner Component', () => {
|
|
15
|
+
it('renders with default accessibility props', () => {
|
|
16
|
+
render(<Spinner />);
|
|
17
|
+
const spinner = screen.getByRole('status');
|
|
18
|
+
expect(spinner).toBeInTheDocument();
|
|
19
|
+
expect(spinner).toHaveAttribute('aria-label', 'Loading');
|
|
20
|
+
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('renders with custom accessibility props', () => {
|
|
24
|
+
render(<Spinner role="alert" aria-label="Please wait" />);
|
|
25
|
+
const spinner = screen.getByRole('alert');
|
|
26
|
+
expect(spinner).toBeInTheDocument();
|
|
27
|
+
expect(spinner).toHaveAttribute('aria-label', 'Please wait');
|
|
28
|
+
expect(screen.getByText('Please wait')).toBeInTheDocument();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('renders as glass when enabled', () => {
|
|
32
|
+
render(<Spinner glass />);
|
|
33
|
+
expect(screen.getByTestId('atomix-glass')).toBeInTheDocument();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -11,6 +11,8 @@ export const Spinner: React.FC<SpinnerProps> = memo(({
|
|
|
11
11
|
className = '',
|
|
12
12
|
style,
|
|
13
13
|
glass,
|
|
14
|
+
'aria-label': ariaLabel,
|
|
15
|
+
role = 'status',
|
|
14
16
|
}) => {
|
|
15
17
|
const { generateSpinnerClass } = useSpinner({
|
|
16
18
|
size,
|
|
@@ -26,8 +28,13 @@ export const Spinner: React.FC<SpinnerProps> = memo(({
|
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
const spinnerContent = (
|
|
29
|
-
<div
|
|
30
|
-
|
|
31
|
+
<div
|
|
32
|
+
className={spinnerClass}
|
|
33
|
+
style={style}
|
|
34
|
+
role={role}
|
|
35
|
+
aria-label={ariaLabel || 'Loading'}
|
|
36
|
+
>
|
|
37
|
+
<span className={SPINNER.VISUALLY_HIDDEN}>{ariaLabel || 'Loading...'}</span>
|
|
31
38
|
</div>
|
|
32
39
|
);
|
|
33
40
|
|