@shohojdhara/atomix 0.2.3 → 0.2.5
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/README.md +19 -0
- package/dist/atomix.css +1703 -1544
- package/dist/atomix.min.css +4 -4
- package/dist/index.d.ts +1465 -963
- package/dist/index.esm.js +16289 -25908
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +15650 -21780
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/themes/applemix.css +15008 -0
- package/dist/themes/applemix.min.css +72 -0
- package/dist/themes/boomdevs.css +1608 -1450
- package/dist/themes/boomdevs.min.css +5 -5
- package/dist/themes/esrar.css +1702 -1543
- package/dist/themes/esrar.min.css +4 -4
- package/dist/themes/flashtrade.css +15159 -0
- package/dist/themes/flashtrade.min.css +86 -0
- package/dist/themes/mashroom.css +1699 -1540
- package/dist/themes/mashroom.min.css +7 -7
- package/dist/themes/shaj-default.css +1693 -1534
- package/dist/themes/shaj-default.min.css +4 -4
- package/package.json +6 -17
- package/src/components/Accordion/Accordion.stories.tsx +662 -21
- package/src/components/Accordion/Accordion.tsx +21 -14
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +106 -72
- package/src/components/AtomixGlass/AtomixGlass.tsx +529 -1195
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +400 -0
- package/src/components/AtomixGlass/GlassFilter.tsx +156 -0
- package/src/components/AtomixGlass/README.md +124 -2
- package/src/components/AtomixGlass/atomixGLass.old.tsx +1266 -0
- package/src/components/AtomixGlass/glass-utils.ts +263 -0
- package/src/components/AtomixGlass/shader-utils.ts +792 -68
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1250 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +5768 -0
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1065 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +1129 -0
- package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +395 -0
- package/src/components/AtomixGlass/stories/shared-components.tsx +301 -0
- package/src/components/AtomixGlass/utils.ts +3 -3
- package/src/components/Avatar/Avatar.tsx +3 -0
- package/src/components/Avatar/AvatarGroup.tsx +2 -1
- package/src/components/Badge/Badge.stories.tsx +76 -55
- package/src/components/Badge/Badge.tsx +12 -14
- package/src/components/Breadcrumb/Breadcrumb.tsx +23 -4
- package/src/components/Button/Button.stories.tsx +501 -20
- package/src/components/Button/Button.tsx +5 -8
- package/src/components/Callout/Callout.stories.tsx +86 -35
- package/src/components/Callout/Callout.tsx +31 -9
- package/src/components/Card/Card.stories.tsx +565 -2
- package/src/components/Card/Card.tsx +15 -4
- package/src/components/Card/ElevationCard.tsx +2 -0
- package/src/components/Chart/AnimatedChart.tsx +179 -156
- package/src/components/Chart/AreaChart.tsx +123 -12
- package/src/components/Chart/BarChart.tsx +91 -100
- package/src/components/Chart/BaseChart.tsx +80 -0
- package/src/components/Chart/BubbleChart.tsx +114 -290
- package/src/components/Chart/CandlestickChart.tsx +282 -622
- package/src/components/Chart/Chart.stories.tsx +576 -179
- package/src/components/Chart/Chart.tsx +374 -75
- package/src/components/Chart/ChartRenderer.tsx +371 -220
- package/src/components/Chart/ChartToolbar.tsx +372 -61
- package/src/components/Chart/ChartTooltip.tsx +33 -18
- package/src/components/Chart/DonutChart.tsx +172 -254
- package/src/components/Chart/FunnelChart.tsx +169 -240
- package/src/components/Chart/GaugeChart.tsx +224 -392
- package/src/components/Chart/HeatmapChart.tsx +302 -440
- package/src/components/Chart/LineChart.tsx +148 -103
- package/src/components/Chart/MultiAxisChart.tsx +267 -395
- package/src/components/Chart/PieChart.tsx +114 -64
- package/src/components/Chart/RadarChart.tsx +202 -218
- package/src/components/Chart/ScatterChart.tsx +111 -97
- package/src/components/Chart/TreemapChart.tsx +147 -222
- package/src/components/Chart/WaterfallChart.tsx +253 -291
- package/src/components/Chart/index.ts +11 -9
- package/src/components/Chart/types.ts +85 -9
- package/src/components/Chart/utils.ts +66 -0
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +6 -3
- package/src/components/Countdown/Countdown.tsx +4 -0
- package/src/components/DataTable/DataTable.tsx +2 -1
- package/src/components/DatePicker/DatePicker.stories.tsx +689 -12
- package/src/components/DatePicker/DatePicker.tsx +3 -9
- package/src/components/DatePicker/types.ts +5 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +32 -25
- package/src/components/Dropdown/Dropdown.tsx +26 -28
- package/src/components/EdgePanel/EdgePanel.stories.tsx +473 -2
- package/src/components/EdgePanel/EdgePanel.tsx +101 -13
- package/src/components/Footer/Footer.stories.tsx +187 -60
- package/src/components/Footer/Footer.test.tsx +134 -0
- package/src/components/Footer/Footer.tsx +133 -34
- package/src/components/Footer/FooterLink.tsx +1 -1
- package/src/components/Footer/FooterSection.tsx +53 -36
- package/src/components/Footer/FooterSocialLink.tsx +32 -29
- package/src/components/Footer/README.md +82 -3
- package/src/components/Footer/index.ts +1 -1
- package/src/components/Form/Checkbox.stories.tsx +13 -5
- package/src/components/Form/Checkbox.tsx +3 -6
- package/src/components/Form/Form.stories.tsx +10 -3
- package/src/components/Form/Form.tsx +2 -0
- package/src/components/Form/FormGroup.tsx +2 -1
- package/src/components/Form/Input.stories.tsx +12 -11
- package/src/components/Form/Input.tsx +97 -95
- package/src/components/Form/Radio.stories.tsx +22 -7
- package/src/components/Form/Radio.tsx +3 -6
- package/src/components/Form/Select.stories.tsx +21 -6
- package/src/components/Form/Select.tsx +3 -5
- package/src/components/Form/Textarea.stories.tsx +13 -11
- package/src/components/Form/Textarea.tsx +88 -86
- package/src/components/Hero/Hero.stories.tsx +2 -3
- package/src/components/Hero/Hero.tsx +5 -6
- package/src/components/Icon/Icon.tsx +12 -1
- package/src/components/List/List.tsx +2 -1
- package/src/components/List/ListGroup.tsx +2 -1
- package/src/components/Messages/Messages.stories.tsx +113 -0
- package/src/components/Messages/Messages.tsx +52 -9
- package/src/components/Modal/Modal.stories.tsx +48 -32
- package/src/components/Modal/Modal.tsx +19 -24
- package/src/components/Navigation/Menu/MegaMenu.tsx +2 -2
- package/src/components/Navigation/Menu/Menu.tsx +2 -2
- package/src/components/Navigation/Nav/Nav.stories.tsx +469 -0
- package/src/components/Navigation/Nav/Nav.tsx +22 -4
- package/src/components/Navigation/Nav/NavDropdown.tsx +10 -1
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +413 -0
- package/src/components/Navigation/Navbar/Navbar.tsx +70 -29
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +340 -0
- package/src/components/Navigation/SideMenu/SideMenu.tsx +29 -2
- package/src/components/Pagination/Pagination.stories.tsx +13 -6
- package/src/components/Pagination/Pagination.tsx +7 -6
- package/src/components/PhotoViewer/PhotoViewer.tsx +2 -1
- package/src/components/Popover/Popover.stories.tsx +32 -24
- package/src/components/Popover/Popover.tsx +4 -1
- package/src/components/ProductReview/ProductReview.tsx +8 -2
- package/src/components/Progress/Progress.tsx +19 -3
- package/src/components/Rating/Rating.stories.tsx +11 -6
- package/src/components/Rating/Rating.tsx +3 -5
- package/src/components/River/River.tsx +5 -5
- package/src/components/SectionIntro/SectionIntro.tsx +8 -2
- package/src/components/Slider/Slider.stories.tsx +4 -4
- package/src/components/Slider/Slider.tsx +4 -3
- package/src/components/Spinner/Spinner.tsx +19 -3
- package/src/components/Steps/Steps.stories.tsx +5 -4
- package/src/components/Steps/Steps.tsx +8 -5
- package/src/components/Tab/Tab.stories.tsx +4 -3
- package/src/components/Tab/Tab.tsx +8 -6
- package/src/components/Testimonial/Testimonial.tsx +8 -2
- package/src/components/Todo/Todo.tsx +2 -1
- package/src/components/Toggle/Toggle.stories.tsx +5 -4
- package/src/components/Toggle/Toggle.tsx +8 -5
- package/src/components/Tooltip/Tooltip.stories.tsx +40 -30
- package/src/components/Tooltip/Tooltip.tsx +9 -2
- package/src/components/Upload/Upload.stories.tsx +252 -0
- package/src/components/Upload/Upload.tsx +92 -53
- package/src/components/VideoPlayer/VideoPlayer.tsx +3 -1
- package/src/components/index.ts +0 -4
- package/src/layouts/Grid/Grid.stories.tsx +10 -23
- package/src/layouts/Grid/Grid.tsx +20 -1
- package/src/layouts/Grid/GridCol.tsx +76 -48
- package/src/lib/composables/useAtomixGlass.ts +861 -44
- package/src/lib/composables/useBarChart.ts +21 -4
- package/src/lib/composables/useChart.ts +227 -370
- package/src/lib/composables/useChartExport.ts +19 -78
- package/src/lib/composables/useChartToolbar.ts +11 -21
- package/src/lib/composables/useEdgePanel.ts +125 -71
- package/src/lib/composables/useFooter.ts +3 -3
- package/src/lib/composables/useGlassContainer.ts +16 -7
- package/src/lib/composables/useLineChart.ts +11 -2
- package/src/lib/composables/usePieChart.ts +4 -14
- package/src/lib/composables/useRiver.ts +5 -0
- package/src/lib/composables/useSlider.ts +62 -24
- package/src/lib/composables/useVideoPlayer.ts +60 -63
- package/src/lib/constants/components.ts +147 -32
- package/src/lib/types/components.ts +355 -25
- package/src/lib/utils/displacement-generator.ts +55 -49
- package/src/lib/utils/icons.ts +1 -1
- package/src/lib/utils/index.ts +16 -10
- package/src/styles/01-settings/_settings.accordion.scss +19 -19
- package/src/styles/01-settings/_settings.animations.scss +5 -5
- package/src/styles/01-settings/_settings.avatar-group.scss +1 -1
- package/src/styles/01-settings/_settings.avatar.scss +17 -17
- package/src/styles/01-settings/_settings.background.scss +0 -3
- package/src/styles/01-settings/_settings.badge.scss +1 -1
- package/src/styles/01-settings/_settings.breadcrumb.scss +1 -1
- package/src/styles/01-settings/_settings.card.scss +1 -1
- package/src/styles/01-settings/_settings.chart.scss +65 -2
- package/src/styles/01-settings/_settings.dropdown.scss +1 -1
- package/src/styles/01-settings/_settings.edge-panel.scss +1 -1
- package/src/styles/01-settings/_settings.footer.scss +35 -42
- package/src/styles/01-settings/_settings.input.scss +1 -1
- package/src/styles/01-settings/_settings.list.scss +1 -1
- package/src/styles/01-settings/_settings.rating.scss +1 -1
- package/src/styles/01-settings/_settings.tabs.scss +1 -1
- package/src/styles/01-settings/_settings.upload.scss +6 -5
- package/src/styles/02-tools/_tools.animations.scss +4 -5
- package/src/styles/02-tools/_tools.background.scss +1 -13
- package/src/styles/02-tools/_tools.glass.scss +0 -1
- package/src/styles/02-tools/_tools.utility-api.scss +91 -48
- package/src/styles/03-generic/_generic.root.scss +1 -4
- package/src/styles/04-elements/_elements.body.scss +0 -1
- package/src/styles/06-components/_components.atomix-glass.scss +249 -0
- package/src/styles/06-components/_components.badge.scss +8 -23
- package/src/styles/06-components/_components.button.scss +8 -3
- package/src/styles/06-components/_components.callout.scss +10 -5
- package/src/styles/06-components/_components.card.scss +2 -14
- package/src/styles/06-components/_components.chart.scss +969 -1449
- package/src/styles/06-components/_components.dropdown.scss +19 -7
- package/src/styles/06-components/_components.edge-panel.scss +103 -0
- package/src/styles/06-components/_components.footer.scss +166 -85
- package/src/styles/06-components/_components.input.scss +8 -9
- package/src/styles/06-components/_components.list.scss +1 -0
- package/src/styles/06-components/_components.messages.scss +176 -0
- package/src/styles/06-components/_components.modal.scss +16 -4
- package/src/styles/06-components/_components.navbar.scss +12 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -0
- package/src/styles/06-components/_components.skeleton.scss +8 -6
- package/src/styles/06-components/_components.upload.scss +219 -4
- package/src/styles/06-components/old.chart.styles.scss +1 -30
- package/src/styles/99-utilities/_index.scss +1 -0
- package/src/styles/99-utilities/_utilities.glass-fixes.scss +1 -0
- package/src/styles/99-utilities/_utilities.scss +1 -1
- package/src/components/AtomixGlass/AtomixGlass.stories.tsx +0 -3011
- package/src/components/AtomixGlass/AtomixGlassComprehensivePreview.stories.tsx +0 -1369
- package/src/components/Chart/AdvancedChart.tsx +0 -624
- package/src/components/Chart/LineChartNew.tsx +0 -167
- package/src/components/Chart/RealTimeChart.tsx +0 -436
- package/src/components/DatePicker/DatePicker copy.tsx +0 -551
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
3
|
import { Footer } from './Footer';
|
|
3
4
|
import { FooterSection } from './FooterSection';
|
|
@@ -10,14 +11,15 @@ const meta: Meta<typeof Footer> = {
|
|
|
10
11
|
layout: 'fullscreen',
|
|
11
12
|
docs: {
|
|
12
13
|
description: {
|
|
13
|
-
component:
|
|
14
|
+
component:
|
|
15
|
+
'A modern, comprehensive footer component with enhanced visual effects, accessibility features, responsive design, and multiple layout variants. Features include design token integration, improved hover effects, modern gradients, and comprehensive accessibility support following Atomix design patterns.',
|
|
14
16
|
},
|
|
15
17
|
},
|
|
16
18
|
},
|
|
17
19
|
argTypes: {
|
|
18
20
|
layout: {
|
|
19
21
|
control: 'select',
|
|
20
|
-
options: ['columns', 'centered', 'minimal', 'stacked'],
|
|
22
|
+
options: ['columns', 'centered', 'minimal', 'stacked', 'flexible', 'sidebar', 'wide'],
|
|
21
23
|
description: 'Footer layout variant',
|
|
22
24
|
},
|
|
23
25
|
variant: {
|
|
@@ -70,49 +72,49 @@ const SampleFooterContent = () => (
|
|
|
70
72
|
<FooterLink href="/product3">UI/UX Design</FooterLink>
|
|
71
73
|
<FooterLink href="/product4">Consulting</FooterLink>
|
|
72
74
|
</FooterSection>
|
|
73
|
-
|
|
75
|
+
|
|
74
76
|
<FooterSection title="Company">
|
|
75
77
|
<FooterLink href="/about">About Us</FooterLink>
|
|
76
78
|
<FooterLink href="/careers">Careers</FooterLink>
|
|
77
79
|
<FooterLink href="/blog">Blog</FooterLink>
|
|
78
80
|
<FooterLink href="/contact">Contact</FooterLink>
|
|
79
81
|
</FooterSection>
|
|
80
|
-
|
|
81
|
-
<FooterSection title="
|
|
82
|
-
<FooterLink href="/
|
|
83
|
-
<FooterLink href="/
|
|
84
|
-
<FooterLink href="/
|
|
85
|
-
<FooterLink href="/
|
|
82
|
+
|
|
83
|
+
<FooterSection title="Company">
|
|
84
|
+
<FooterLink href="/about">About Us</FooterLink>
|
|
85
|
+
<FooterLink href="/careers">Careers</FooterLink>
|
|
86
|
+
<FooterLink href="/blog">Blog</FooterLink>
|
|
87
|
+
<FooterLink href="/contact">Contact</FooterLink>
|
|
86
88
|
</FooterSection>
|
|
87
|
-
|
|
88
|
-
<FooterSection title="
|
|
89
|
-
<FooterLink href="/
|
|
90
|
-
<FooterLink href="/
|
|
91
|
-
<FooterLink href="/
|
|
92
|
-
<FooterLink href="/
|
|
89
|
+
|
|
90
|
+
<FooterSection title="Company">
|
|
91
|
+
<FooterLink href="/about">About Us</FooterLink>
|
|
92
|
+
<FooterLink href="/careers">Careers</FooterLink>
|
|
93
|
+
<FooterLink href="/blog">Blog</FooterLink>
|
|
94
|
+
<FooterLink href="/contact">Contact</FooterLink>
|
|
93
95
|
</FooterSection>
|
|
94
96
|
</>
|
|
95
97
|
);
|
|
96
98
|
|
|
97
|
-
|
|
99
|
+
const LayoutTemplate: Story = {
|
|
98
100
|
args: {
|
|
99
101
|
brand: 'Atomix',
|
|
100
|
-
brandDescription: 'A modern
|
|
101
|
-
copyright: '© 2024 Atomix. All rights reserved.',
|
|
102
|
+
brandDescription: 'A modern design system for building accessible web applications.',
|
|
103
|
+
copyright: '© 2024 Atomix UI. All rights reserved.',
|
|
102
104
|
layout: 'columns',
|
|
103
105
|
variant: 'primary',
|
|
104
106
|
size: 'md',
|
|
105
|
-
socialLinks: sampleSocialLinks,
|
|
106
107
|
showNewsletter: false,
|
|
107
108
|
showBackToTop: false,
|
|
108
109
|
showDivider: true,
|
|
109
110
|
sticky: false,
|
|
111
|
+
socialLinks: sampleSocialLinks,
|
|
110
112
|
},
|
|
111
|
-
render: (args) => (
|
|
113
|
+
render: (args: any) => (
|
|
112
114
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
113
|
-
<div style={{ flex: 1,
|
|
114
|
-
<h1>
|
|
115
|
-
<p>This is sample page content to demonstrate the footer
|
|
115
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)', padding: '2rem' }}>
|
|
116
|
+
<h1>Main Content</h1>
|
|
117
|
+
<p>This is sample page content to demonstrate the footer in context.</p>
|
|
116
118
|
</div>
|
|
117
119
|
<Footer {...args}>
|
|
118
120
|
<SampleFooterContent />
|
|
@@ -121,12 +123,25 @@ export const Default: Story = {
|
|
|
121
123
|
),
|
|
122
124
|
};
|
|
123
125
|
|
|
126
|
+
export const Default: Story = {
|
|
127
|
+
...LayoutTemplate,
|
|
128
|
+
parameters: {
|
|
129
|
+
docs: {
|
|
130
|
+
description: {
|
|
131
|
+
story:
|
|
132
|
+
'Default footer configuration with modern styling, design tokens, and enhanced visual effects.',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
|
|
124
138
|
export const WithNewsletter: Story = {
|
|
125
139
|
args: {
|
|
126
140
|
...Default.args,
|
|
127
141
|
showNewsletter: true,
|
|
128
142
|
newsletterTitle: 'Stay in the Loop',
|
|
129
|
-
newsletterDescription:
|
|
143
|
+
newsletterDescription:
|
|
144
|
+
'Get the latest updates, articles, and resources delivered to your inbox.',
|
|
130
145
|
onNewsletterSubmit: (email: string) => {
|
|
131
146
|
console.log('Newsletter signup:', email);
|
|
132
147
|
alert(`Thank you for subscribing with ${email}!`);
|
|
@@ -148,28 +163,29 @@ export const WithBackToTop: Story = {
|
|
|
148
163
|
};
|
|
149
164
|
|
|
150
165
|
export const Centered: Story = {
|
|
166
|
+
...LayoutTemplate,
|
|
151
167
|
args: {
|
|
152
|
-
...
|
|
168
|
+
...LayoutTemplate.args,
|
|
153
169
|
layout: 'centered',
|
|
154
170
|
showNewsletter: true,
|
|
155
171
|
showBackToTop: true,
|
|
156
172
|
},
|
|
157
|
-
render: Default.render,
|
|
158
173
|
};
|
|
159
174
|
|
|
160
175
|
export const Minimal: Story = {
|
|
176
|
+
...LayoutTemplate,
|
|
161
177
|
args: {
|
|
162
|
-
|
|
163
|
-
copyright: '© 2024 Atomix. All rights reserved.',
|
|
178
|
+
...LayoutTemplate.args,
|
|
164
179
|
layout: 'minimal',
|
|
165
180
|
variant: 'light',
|
|
166
181
|
size: 'sm',
|
|
167
182
|
socialLinks: sampleSocialLinks.slice(0, 3),
|
|
168
183
|
showDivider: false,
|
|
184
|
+
showNewsletter: false,
|
|
169
185
|
},
|
|
170
|
-
render: (args) => (
|
|
186
|
+
render: (args: any) => (
|
|
171
187
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
172
|
-
<div style={{ flex: 1,
|
|
188
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
173
189
|
<h1>Page Content</h1>
|
|
174
190
|
<p>This is sample page content with a minimal footer.</p>
|
|
175
191
|
</div>
|
|
@@ -185,13 +201,13 @@ export const Minimal: Story = {
|
|
|
185
201
|
};
|
|
186
202
|
|
|
187
203
|
export const Stacked: Story = {
|
|
204
|
+
...LayoutTemplate,
|
|
188
205
|
args: {
|
|
189
|
-
...
|
|
206
|
+
...LayoutTemplate.args,
|
|
190
207
|
layout: 'stacked',
|
|
191
208
|
showNewsletter: true,
|
|
192
209
|
showBackToTop: true,
|
|
193
210
|
},
|
|
194
|
-
render: Default.render,
|
|
195
211
|
};
|
|
196
212
|
|
|
197
213
|
export const DarkVariant: Story = {
|
|
@@ -239,16 +255,16 @@ export const Sticky: Story = {
|
|
|
239
255
|
size: 'sm',
|
|
240
256
|
layout: 'minimal',
|
|
241
257
|
},
|
|
242
|
-
render: (args) => (
|
|
258
|
+
render: (args: any) => (
|
|
243
259
|
<div style={{ height: '200vh', backgroundColor: 'var(--atomix-surface)' }}>
|
|
244
260
|
<div style={{ padding: '2rem' }}>
|
|
245
261
|
<h1>Scroll down to see sticky footer</h1>
|
|
246
262
|
<p>This page is tall enough to demonstrate the sticky footer behavior.</p>
|
|
247
263
|
{Array.from({ length: 20 }, (_, i) => (
|
|
248
264
|
<p key={i}>
|
|
249
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor
|
|
250
|
-
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
|
|
251
|
-
|
|
265
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor
|
|
266
|
+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
|
|
267
|
+
exercitation ullamco laboris.
|
|
252
268
|
</p>
|
|
253
269
|
))}
|
|
254
270
|
</div>
|
|
@@ -264,9 +280,9 @@ export const CollapsibleSections: Story = {
|
|
|
264
280
|
...Default.args,
|
|
265
281
|
showNewsletter: true,
|
|
266
282
|
},
|
|
267
|
-
render: (args) => (
|
|
283
|
+
render: (args: any) => (
|
|
268
284
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
269
|
-
<div style={{ flex: 1,
|
|
285
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
270
286
|
<h1>Collapsible Footer Sections</h1>
|
|
271
287
|
<p>Resize the window to mobile size to see collapsible sections.</p>
|
|
272
288
|
</div>
|
|
@@ -276,18 +292,12 @@ export const CollapsibleSections: Story = {
|
|
|
276
292
|
<FooterLink href="/product2">Mobile Apps</FooterLink>
|
|
277
293
|
<FooterLink href="/product3">UI/UX Design</FooterLink>
|
|
278
294
|
</FooterSection>
|
|
279
|
-
|
|
295
|
+
|
|
280
296
|
<FooterSection title="Company" collapsible>
|
|
281
297
|
<FooterLink href="/about">About Us</FooterLink>
|
|
282
298
|
<FooterLink href="/careers">Careers</FooterLink>
|
|
283
299
|
<FooterLink href="/blog">Blog</FooterLink>
|
|
284
300
|
</FooterSection>
|
|
285
|
-
|
|
286
|
-
<FooterSection title="Support" collapsible>
|
|
287
|
-
<FooterLink href="/help">Help Center</FooterLink>
|
|
288
|
-
<FooterLink href="/docs">Documentation</FooterLink>
|
|
289
|
-
<FooterLink href="/community">Community</FooterLink>
|
|
290
|
-
</FooterSection>
|
|
291
301
|
</Footer>
|
|
292
302
|
</div>
|
|
293
303
|
),
|
|
@@ -303,24 +313,34 @@ export const WithExternalLinks: Story = {
|
|
|
303
313
|
{ platform: 'discord' as const, url: 'https://discord.gg/company' },
|
|
304
314
|
],
|
|
305
315
|
},
|
|
306
|
-
render: (args) => (
|
|
316
|
+
render: (args: any) => (
|
|
307
317
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
308
|
-
<div style={{ flex: 1,
|
|
318
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
309
319
|
<h1>Modern Social Links</h1>
|
|
310
320
|
<p>Footer with enhanced social platforms and modern styling.</p>
|
|
311
321
|
</div>
|
|
312
322
|
<Footer {...args}>
|
|
313
323
|
<FooterSection title="External Resources">
|
|
314
|
-
<FooterLink href="https://github.com" external>
|
|
315
|
-
|
|
316
|
-
|
|
324
|
+
<FooterLink href="https://github.com" external>
|
|
325
|
+
GitHub
|
|
326
|
+
</FooterLink>
|
|
327
|
+
<FooterLink href="https://stackoverflow.com" external>
|
|
328
|
+
Stack Overflow
|
|
329
|
+
</FooterLink>
|
|
330
|
+
<FooterLink href="https://developer.mozilla.org" external>
|
|
331
|
+
MDN Docs
|
|
332
|
+
</FooterLink>
|
|
317
333
|
</FooterSection>
|
|
318
|
-
|
|
334
|
+
|
|
319
335
|
<FooterSection title="Internal Links">
|
|
320
336
|
<FooterLink href="/about">About Us</FooterLink>
|
|
321
337
|
<FooterLink href="/contact">Contact</FooterLink>
|
|
322
|
-
<FooterLink href="/blog" active>
|
|
323
|
-
|
|
338
|
+
<FooterLink href="/blog" active>
|
|
339
|
+
Blog
|
|
340
|
+
</FooterLink>
|
|
341
|
+
<FooterLink href="/disabled" disabled>
|
|
342
|
+
Disabled Link
|
|
343
|
+
</FooterLink>
|
|
324
344
|
</FooterSection>
|
|
325
345
|
</Footer>
|
|
326
346
|
</div>
|
|
@@ -335,9 +355,15 @@ export const ModernGradients: Story = {
|
|
|
335
355
|
showBackToTop: true,
|
|
336
356
|
socialLinks: sampleSocialLinks,
|
|
337
357
|
},
|
|
338
|
-
render: (args) => (
|
|
358
|
+
render: (args: any) => (
|
|
339
359
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
340
|
-
<div
|
|
360
|
+
<div
|
|
361
|
+
style={{
|
|
362
|
+
flex: 1,
|
|
363
|
+
padding: '2rem',
|
|
364
|
+
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
365
|
+
}}
|
|
366
|
+
>
|
|
341
367
|
<h1 style={{ color: 'white' }}>Modern Design</h1>
|
|
342
368
|
<p style={{ color: 'white' }}>Showcasing modern gradients and enhanced visual effects.</p>
|
|
343
369
|
</div>
|
|
@@ -348,15 +374,68 @@ export const ModernGradients: Story = {
|
|
|
348
374
|
),
|
|
349
375
|
};
|
|
350
376
|
|
|
377
|
+
export const DesignTokensShowcase: Story = {
|
|
378
|
+
args: {
|
|
379
|
+
...Default.args,
|
|
380
|
+
brand: 'Design Tokens',
|
|
381
|
+
brandDescription:
|
|
382
|
+
'Showcasing consistent design tokens, modern hover effects, and enhanced visual styling throughout the footer component.',
|
|
383
|
+
showNewsletter: true,
|
|
384
|
+
showBackToTop: true,
|
|
385
|
+
socialLinks: sampleSocialLinks,
|
|
386
|
+
},
|
|
387
|
+
parameters: {
|
|
388
|
+
docs: {
|
|
389
|
+
description: {
|
|
390
|
+
story:
|
|
391
|
+
'Demonstrates the use of design tokens for consistent styling, enhanced hover effects, modern gradients, and improved accessibility features.',
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
render: (args: any) => (
|
|
396
|
+
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
397
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
398
|
+
<h1>Design Token Integration</h1>
|
|
399
|
+
<p>
|
|
400
|
+
This footer demonstrates consistent use of design tokens for colors, spacing, shadows, and
|
|
401
|
+
typography. Hover over elements to see enhanced visual effects.
|
|
402
|
+
</p>
|
|
403
|
+
<ul>
|
|
404
|
+
<li>✨ Global CSS variables for box shadows</li>
|
|
405
|
+
<li>🎨 Design token-based colors and opacity</li>
|
|
406
|
+
<li>📏 Consistent spacing using rem() function</li>
|
|
407
|
+
<li>🔄 Smooth transitions and hover effects</li>
|
|
408
|
+
<li>♿ Enhanced accessibility features</li>
|
|
409
|
+
</ul>
|
|
410
|
+
</div>
|
|
411
|
+
<Footer {...args}>
|
|
412
|
+
<FooterSection title="Design System">
|
|
413
|
+
<FooterLink href="/tokens">Design Tokens</FooterLink>
|
|
414
|
+
<FooterLink href="/components">Components</FooterLink>
|
|
415
|
+
<FooterLink href="/guidelines">Guidelines</FooterLink>
|
|
416
|
+
<FooterLink href="/accessibility">Accessibility</FooterLink>
|
|
417
|
+
</FooterSection>
|
|
418
|
+
|
|
419
|
+
<FooterSection title="Development">
|
|
420
|
+
<FooterLink href="/scss">SCSS Architecture</FooterLink>
|
|
421
|
+
<FooterLink href="/css-vars">CSS Variables</FooterLink>
|
|
422
|
+
<FooterLink href="/responsive">Responsive Design</FooterLink>
|
|
423
|
+
<FooterLink href="/performance">Performance</FooterLink>
|
|
424
|
+
</FooterSection>
|
|
425
|
+
</Footer>
|
|
426
|
+
</div>
|
|
427
|
+
),
|
|
428
|
+
};
|
|
429
|
+
|
|
351
430
|
export const AccessibilityFocused: Story = {
|
|
352
431
|
args: {
|
|
353
432
|
...Default.args,
|
|
354
433
|
showNewsletter: true,
|
|
355
434
|
showBackToTop: true,
|
|
356
435
|
},
|
|
357
|
-
render: (args) => (
|
|
436
|
+
render: (args: any) => (
|
|
358
437
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
359
|
-
<div style={{ flex: 1,
|
|
438
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
360
439
|
<h1>Accessibility Features</h1>
|
|
361
440
|
<p>Tab through the footer elements to see enhanced focus states and keyboard navigation.</p>
|
|
362
441
|
</div>
|
|
@@ -374,9 +453,9 @@ export const ResponsiveShowcase: Story = {
|
|
|
374
453
|
showNewsletter: true,
|
|
375
454
|
showBackToTop: true,
|
|
376
455
|
},
|
|
377
|
-
render: (args) => (
|
|
456
|
+
render: (args: any) => (
|
|
378
457
|
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
|
379
|
-
<div style={{ flex: 1,
|
|
458
|
+
<div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
|
|
380
459
|
<h1>Responsive Design</h1>
|
|
381
460
|
<p>Resize the viewport to see responsive grid layouts and collapsible sections.</p>
|
|
382
461
|
</div>
|
|
@@ -385,4 +464,52 @@ export const ResponsiveShowcase: Story = {
|
|
|
385
464
|
</Footer>
|
|
386
465
|
</div>
|
|
387
466
|
),
|
|
388
|
-
};
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
export const Flexible: Story = {
|
|
470
|
+
...LayoutTemplate,
|
|
471
|
+
args: {
|
|
472
|
+
...LayoutTemplate.args,
|
|
473
|
+
layout: 'flexible',
|
|
474
|
+
},
|
|
475
|
+
parameters: {
|
|
476
|
+
docs: {
|
|
477
|
+
description: {
|
|
478
|
+
story:
|
|
479
|
+
'Flexible layout that automatically adapts to content width and screen size. Perfect for dynamic content scenarios.',
|
|
480
|
+
},
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
export const Sidebar: Story = {
|
|
486
|
+
...LayoutTemplate,
|
|
487
|
+
args: {
|
|
488
|
+
...LayoutTemplate.args,
|
|
489
|
+
layout: 'sidebar',
|
|
490
|
+
},
|
|
491
|
+
parameters: {
|
|
492
|
+
docs: {
|
|
493
|
+
description: {
|
|
494
|
+
story:
|
|
495
|
+
'Sidebar layout with brand and newsletter in a left sidebar and content sections in the main area.',
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
export const Wide: Story = {
|
|
502
|
+
...LayoutTemplate,
|
|
503
|
+
args: {
|
|
504
|
+
...LayoutTemplate.args,
|
|
505
|
+
layout: 'wide',
|
|
506
|
+
},
|
|
507
|
+
parameters: {
|
|
508
|
+
docs: {
|
|
509
|
+
description: {
|
|
510
|
+
story:
|
|
511
|
+
'Wide layout optimized for large screens with generous spacing and extended content areas.',
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
},
|
|
515
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import { Footer } from './Footer';
|
|
4
|
+
import { FooterSection } from './FooterSection';
|
|
5
|
+
import { FooterLink } from './FooterLink';
|
|
6
|
+
|
|
7
|
+
describe('Footer', () => {
|
|
8
|
+
const defaultProps = {
|
|
9
|
+
brand: 'Atomix',
|
|
10
|
+
copyright: '© 2024 Atomix UI. All rights reserved.',
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
test('renders footer with brand and copyright', () => {
|
|
14
|
+
render(<Footer {...defaultProps} />);
|
|
15
|
+
|
|
16
|
+
expect(screen.getByText('Atomix')).toBeInTheDocument();
|
|
17
|
+
expect(screen.getByText('© 2024 Atomix UI. All rights reserved.')).toBeInTheDocument();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('renders footer with columns layout by default', () => {
|
|
21
|
+
render(
|
|
22
|
+
<Footer {...defaultProps}>
|
|
23
|
+
<FooterSection title="Products">
|
|
24
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
25
|
+
</FooterSection>
|
|
26
|
+
</Footer>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const footer = screen.getByRole('contentinfo');
|
|
30
|
+
expect(footer).toHaveClass('c-footer--columns');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('renders footer with centered layout', () => {
|
|
34
|
+
render(
|
|
35
|
+
<Footer {...defaultProps} layout="centered">
|
|
36
|
+
<FooterSection title="Products">
|
|
37
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
38
|
+
</FooterSection>
|
|
39
|
+
</Footer>
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const footer = screen.getByRole('contentinfo');
|
|
43
|
+
expect(footer).toHaveClass('c-footer--centered');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('renders footer with minimal layout', () => {
|
|
47
|
+
render(
|
|
48
|
+
<Footer {...defaultProps} layout="minimal">
|
|
49
|
+
<FooterSection title="Products">
|
|
50
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
51
|
+
</FooterSection>
|
|
52
|
+
</Footer>
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const footer = screen.getByRole('contentinfo');
|
|
56
|
+
expect(footer).toHaveClass('c-footer--minimal');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('renders footer with stacked layout', () => {
|
|
60
|
+
render(
|
|
61
|
+
<Footer {...defaultProps} layout="stacked">
|
|
62
|
+
<FooterSection title="Products">
|
|
63
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
64
|
+
</FooterSection>
|
|
65
|
+
</Footer>
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const footer = screen.getByRole('contentinfo');
|
|
69
|
+
expect(footer).toHaveClass('c-footer--stacked');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('renders footer with flexible layout', () => {
|
|
73
|
+
render(
|
|
74
|
+
<Footer {...defaultProps} layout="flexible">
|
|
75
|
+
<FooterSection title="Products">
|
|
76
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
77
|
+
</FooterSection>
|
|
78
|
+
</Footer>
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const footer = screen.getByRole('contentinfo');
|
|
82
|
+
expect(footer).toHaveClass('c-footer--flexible');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('renders footer with sidebar layout', () => {
|
|
86
|
+
render(
|
|
87
|
+
<Footer {...defaultProps} layout="sidebar">
|
|
88
|
+
<FooterSection title="Products">
|
|
89
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
90
|
+
</FooterSection>
|
|
91
|
+
</Footer>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const footer = screen.getByRole('contentinfo');
|
|
95
|
+
expect(footer).toHaveClass('c-footer--sidebar');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('renders footer with wide layout', () => {
|
|
99
|
+
render(
|
|
100
|
+
<Footer {...defaultProps} layout="wide">
|
|
101
|
+
<FooterSection title="Products">
|
|
102
|
+
<FooterLink href="#product1">Product 1</FooterLink>
|
|
103
|
+
</FooterSection>
|
|
104
|
+
</Footer>
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
const footer = screen.getByRole('contentinfo');
|
|
108
|
+
expect(footer).toHaveClass('c-footer--wide');
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('renders newsletter section when showNewsletter is true', () => {
|
|
112
|
+
render(<Footer {...defaultProps} showNewsletter />);
|
|
113
|
+
|
|
114
|
+
expect(screen.getByText('Stay Updated')).toBeInTheDocument();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('does not render newsletter section when showNewsletter is false', () => {
|
|
118
|
+
render(<Footer {...defaultProps} showNewsletter={false} />);
|
|
119
|
+
|
|
120
|
+
expect(screen.queryByText('Stay Updated')).not.toBeInTheDocument();
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('renders social links when provided', () => {
|
|
124
|
+
const socialLinks = [
|
|
125
|
+
{ platform: 'twitter', url: 'https://twitter.com/example' },
|
|
126
|
+
{ platform: 'github', url: 'https://github.com/example' },
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
render(<Footer {...defaultProps} socialLinks={socialLinks} />);
|
|
130
|
+
|
|
131
|
+
const socialLinksContainer = screen.getByTestId('footer-social-links');
|
|
132
|
+
expect(socialLinksContainer.children).toHaveLength(2);
|
|
133
|
+
});
|
|
134
|
+
});
|