@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.
Files changed (225) hide show
  1. package/README.md +19 -0
  2. package/dist/atomix.css +1703 -1544
  3. package/dist/atomix.min.css +4 -4
  4. package/dist/index.d.ts +1465 -963
  5. package/dist/index.esm.js +16289 -25908
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +15650 -21780
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.js +1 -1
  10. package/dist/index.min.js.map +1 -1
  11. package/dist/themes/applemix.css +15008 -0
  12. package/dist/themes/applemix.min.css +72 -0
  13. package/dist/themes/boomdevs.css +1608 -1450
  14. package/dist/themes/boomdevs.min.css +5 -5
  15. package/dist/themes/esrar.css +1702 -1543
  16. package/dist/themes/esrar.min.css +4 -4
  17. package/dist/themes/flashtrade.css +15159 -0
  18. package/dist/themes/flashtrade.min.css +86 -0
  19. package/dist/themes/mashroom.css +1699 -1540
  20. package/dist/themes/mashroom.min.css +7 -7
  21. package/dist/themes/shaj-default.css +1693 -1534
  22. package/dist/themes/shaj-default.min.css +4 -4
  23. package/package.json +6 -17
  24. package/src/components/Accordion/Accordion.stories.tsx +662 -21
  25. package/src/components/Accordion/Accordion.tsx +21 -14
  26. package/src/components/AtomixGlass/AtomixGlass.test.tsx +106 -72
  27. package/src/components/AtomixGlass/AtomixGlass.tsx +529 -1195
  28. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +400 -0
  29. package/src/components/AtomixGlass/GlassFilter.tsx +156 -0
  30. package/src/components/AtomixGlass/README.md +124 -2
  31. package/src/components/AtomixGlass/atomixGLass.old.tsx +1266 -0
  32. package/src/components/AtomixGlass/glass-utils.ts +263 -0
  33. package/src/components/AtomixGlass/shader-utils.ts +792 -68
  34. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1250 -0
  35. package/src/components/AtomixGlass/stories/Examples.stories.tsx +5768 -0
  36. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1065 -0
  37. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1129 -0
  38. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +395 -0
  39. package/src/components/AtomixGlass/stories/shared-components.tsx +301 -0
  40. package/src/components/AtomixGlass/utils.ts +3 -3
  41. package/src/components/Avatar/Avatar.tsx +3 -0
  42. package/src/components/Avatar/AvatarGroup.tsx +2 -1
  43. package/src/components/Badge/Badge.stories.tsx +76 -55
  44. package/src/components/Badge/Badge.tsx +12 -14
  45. package/src/components/Breadcrumb/Breadcrumb.tsx +23 -4
  46. package/src/components/Button/Button.stories.tsx +501 -20
  47. package/src/components/Button/Button.tsx +5 -8
  48. package/src/components/Callout/Callout.stories.tsx +86 -35
  49. package/src/components/Callout/Callout.tsx +31 -9
  50. package/src/components/Card/Card.stories.tsx +565 -2
  51. package/src/components/Card/Card.tsx +15 -4
  52. package/src/components/Card/ElevationCard.tsx +2 -0
  53. package/src/components/Chart/AnimatedChart.tsx +179 -156
  54. package/src/components/Chart/AreaChart.tsx +123 -12
  55. package/src/components/Chart/BarChart.tsx +91 -100
  56. package/src/components/Chart/BaseChart.tsx +80 -0
  57. package/src/components/Chart/BubbleChart.tsx +114 -290
  58. package/src/components/Chart/CandlestickChart.tsx +282 -622
  59. package/src/components/Chart/Chart.stories.tsx +576 -179
  60. package/src/components/Chart/Chart.tsx +374 -75
  61. package/src/components/Chart/ChartRenderer.tsx +371 -220
  62. package/src/components/Chart/ChartToolbar.tsx +372 -61
  63. package/src/components/Chart/ChartTooltip.tsx +33 -18
  64. package/src/components/Chart/DonutChart.tsx +172 -254
  65. package/src/components/Chart/FunnelChart.tsx +169 -240
  66. package/src/components/Chart/GaugeChart.tsx +224 -392
  67. package/src/components/Chart/HeatmapChart.tsx +302 -440
  68. package/src/components/Chart/LineChart.tsx +148 -103
  69. package/src/components/Chart/MultiAxisChart.tsx +267 -395
  70. package/src/components/Chart/PieChart.tsx +114 -64
  71. package/src/components/Chart/RadarChart.tsx +202 -218
  72. package/src/components/Chart/ScatterChart.tsx +111 -97
  73. package/src/components/Chart/TreemapChart.tsx +147 -222
  74. package/src/components/Chart/WaterfallChart.tsx +253 -291
  75. package/src/components/Chart/index.ts +11 -9
  76. package/src/components/Chart/types.ts +85 -9
  77. package/src/components/Chart/utils.ts +66 -0
  78. package/src/components/ColorModeToggle/ColorModeToggle.tsx +6 -3
  79. package/src/components/Countdown/Countdown.tsx +4 -0
  80. package/src/components/DataTable/DataTable.tsx +2 -1
  81. package/src/components/DatePicker/DatePicker.stories.tsx +689 -12
  82. package/src/components/DatePicker/DatePicker.tsx +3 -9
  83. package/src/components/DatePicker/types.ts +5 -0
  84. package/src/components/Dropdown/Dropdown.stories.tsx +32 -25
  85. package/src/components/Dropdown/Dropdown.tsx +26 -28
  86. package/src/components/EdgePanel/EdgePanel.stories.tsx +473 -2
  87. package/src/components/EdgePanel/EdgePanel.tsx +101 -13
  88. package/src/components/Footer/Footer.stories.tsx +187 -60
  89. package/src/components/Footer/Footer.test.tsx +134 -0
  90. package/src/components/Footer/Footer.tsx +133 -34
  91. package/src/components/Footer/FooterLink.tsx +1 -1
  92. package/src/components/Footer/FooterSection.tsx +53 -36
  93. package/src/components/Footer/FooterSocialLink.tsx +32 -29
  94. package/src/components/Footer/README.md +82 -3
  95. package/src/components/Footer/index.ts +1 -1
  96. package/src/components/Form/Checkbox.stories.tsx +13 -5
  97. package/src/components/Form/Checkbox.tsx +3 -6
  98. package/src/components/Form/Form.stories.tsx +10 -3
  99. package/src/components/Form/Form.tsx +2 -0
  100. package/src/components/Form/FormGroup.tsx +2 -1
  101. package/src/components/Form/Input.stories.tsx +12 -11
  102. package/src/components/Form/Input.tsx +97 -95
  103. package/src/components/Form/Radio.stories.tsx +22 -7
  104. package/src/components/Form/Radio.tsx +3 -6
  105. package/src/components/Form/Select.stories.tsx +21 -6
  106. package/src/components/Form/Select.tsx +3 -5
  107. package/src/components/Form/Textarea.stories.tsx +13 -11
  108. package/src/components/Form/Textarea.tsx +88 -86
  109. package/src/components/Hero/Hero.stories.tsx +2 -3
  110. package/src/components/Hero/Hero.tsx +5 -6
  111. package/src/components/Icon/Icon.tsx +12 -1
  112. package/src/components/List/List.tsx +2 -1
  113. package/src/components/List/ListGroup.tsx +2 -1
  114. package/src/components/Messages/Messages.stories.tsx +113 -0
  115. package/src/components/Messages/Messages.tsx +52 -9
  116. package/src/components/Modal/Modal.stories.tsx +48 -32
  117. package/src/components/Modal/Modal.tsx +19 -24
  118. package/src/components/Navigation/Menu/MegaMenu.tsx +2 -2
  119. package/src/components/Navigation/Menu/Menu.tsx +2 -2
  120. package/src/components/Navigation/Nav/Nav.stories.tsx +469 -0
  121. package/src/components/Navigation/Nav/Nav.tsx +22 -4
  122. package/src/components/Navigation/Nav/NavDropdown.tsx +10 -1
  123. package/src/components/Navigation/Navbar/Navbar.stories.tsx +413 -0
  124. package/src/components/Navigation/Navbar/Navbar.tsx +70 -29
  125. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +340 -0
  126. package/src/components/Navigation/SideMenu/SideMenu.tsx +29 -2
  127. package/src/components/Pagination/Pagination.stories.tsx +13 -6
  128. package/src/components/Pagination/Pagination.tsx +7 -6
  129. package/src/components/PhotoViewer/PhotoViewer.tsx +2 -1
  130. package/src/components/Popover/Popover.stories.tsx +32 -24
  131. package/src/components/Popover/Popover.tsx +4 -1
  132. package/src/components/ProductReview/ProductReview.tsx +8 -2
  133. package/src/components/Progress/Progress.tsx +19 -3
  134. package/src/components/Rating/Rating.stories.tsx +11 -6
  135. package/src/components/Rating/Rating.tsx +3 -5
  136. package/src/components/River/River.tsx +5 -5
  137. package/src/components/SectionIntro/SectionIntro.tsx +8 -2
  138. package/src/components/Slider/Slider.stories.tsx +4 -4
  139. package/src/components/Slider/Slider.tsx +4 -3
  140. package/src/components/Spinner/Spinner.tsx +19 -3
  141. package/src/components/Steps/Steps.stories.tsx +5 -4
  142. package/src/components/Steps/Steps.tsx +8 -5
  143. package/src/components/Tab/Tab.stories.tsx +4 -3
  144. package/src/components/Tab/Tab.tsx +8 -6
  145. package/src/components/Testimonial/Testimonial.tsx +8 -2
  146. package/src/components/Todo/Todo.tsx +2 -1
  147. package/src/components/Toggle/Toggle.stories.tsx +5 -4
  148. package/src/components/Toggle/Toggle.tsx +8 -5
  149. package/src/components/Tooltip/Tooltip.stories.tsx +40 -30
  150. package/src/components/Tooltip/Tooltip.tsx +9 -2
  151. package/src/components/Upload/Upload.stories.tsx +252 -0
  152. package/src/components/Upload/Upload.tsx +92 -53
  153. package/src/components/VideoPlayer/VideoPlayer.tsx +3 -1
  154. package/src/components/index.ts +0 -4
  155. package/src/layouts/Grid/Grid.stories.tsx +10 -23
  156. package/src/layouts/Grid/Grid.tsx +20 -1
  157. package/src/layouts/Grid/GridCol.tsx +76 -48
  158. package/src/lib/composables/useAtomixGlass.ts +861 -44
  159. package/src/lib/composables/useBarChart.ts +21 -4
  160. package/src/lib/composables/useChart.ts +227 -370
  161. package/src/lib/composables/useChartExport.ts +19 -78
  162. package/src/lib/composables/useChartToolbar.ts +11 -21
  163. package/src/lib/composables/useEdgePanel.ts +125 -71
  164. package/src/lib/composables/useFooter.ts +3 -3
  165. package/src/lib/composables/useGlassContainer.ts +16 -7
  166. package/src/lib/composables/useLineChart.ts +11 -2
  167. package/src/lib/composables/usePieChart.ts +4 -14
  168. package/src/lib/composables/useRiver.ts +5 -0
  169. package/src/lib/composables/useSlider.ts +62 -24
  170. package/src/lib/composables/useVideoPlayer.ts +60 -63
  171. package/src/lib/constants/components.ts +147 -32
  172. package/src/lib/types/components.ts +355 -25
  173. package/src/lib/utils/displacement-generator.ts +55 -49
  174. package/src/lib/utils/icons.ts +1 -1
  175. package/src/lib/utils/index.ts +16 -10
  176. package/src/styles/01-settings/_settings.accordion.scss +19 -19
  177. package/src/styles/01-settings/_settings.animations.scss +5 -5
  178. package/src/styles/01-settings/_settings.avatar-group.scss +1 -1
  179. package/src/styles/01-settings/_settings.avatar.scss +17 -17
  180. package/src/styles/01-settings/_settings.background.scss +0 -3
  181. package/src/styles/01-settings/_settings.badge.scss +1 -1
  182. package/src/styles/01-settings/_settings.breadcrumb.scss +1 -1
  183. package/src/styles/01-settings/_settings.card.scss +1 -1
  184. package/src/styles/01-settings/_settings.chart.scss +65 -2
  185. package/src/styles/01-settings/_settings.dropdown.scss +1 -1
  186. package/src/styles/01-settings/_settings.edge-panel.scss +1 -1
  187. package/src/styles/01-settings/_settings.footer.scss +35 -42
  188. package/src/styles/01-settings/_settings.input.scss +1 -1
  189. package/src/styles/01-settings/_settings.list.scss +1 -1
  190. package/src/styles/01-settings/_settings.rating.scss +1 -1
  191. package/src/styles/01-settings/_settings.tabs.scss +1 -1
  192. package/src/styles/01-settings/_settings.upload.scss +6 -5
  193. package/src/styles/02-tools/_tools.animations.scss +4 -5
  194. package/src/styles/02-tools/_tools.background.scss +1 -13
  195. package/src/styles/02-tools/_tools.glass.scss +0 -1
  196. package/src/styles/02-tools/_tools.utility-api.scss +91 -48
  197. package/src/styles/03-generic/_generic.root.scss +1 -4
  198. package/src/styles/04-elements/_elements.body.scss +0 -1
  199. package/src/styles/06-components/_components.atomix-glass.scss +249 -0
  200. package/src/styles/06-components/_components.badge.scss +8 -23
  201. package/src/styles/06-components/_components.button.scss +8 -3
  202. package/src/styles/06-components/_components.callout.scss +10 -5
  203. package/src/styles/06-components/_components.card.scss +2 -14
  204. package/src/styles/06-components/_components.chart.scss +969 -1449
  205. package/src/styles/06-components/_components.dropdown.scss +19 -7
  206. package/src/styles/06-components/_components.edge-panel.scss +103 -0
  207. package/src/styles/06-components/_components.footer.scss +166 -85
  208. package/src/styles/06-components/_components.input.scss +8 -9
  209. package/src/styles/06-components/_components.list.scss +1 -0
  210. package/src/styles/06-components/_components.messages.scss +176 -0
  211. package/src/styles/06-components/_components.modal.scss +16 -4
  212. package/src/styles/06-components/_components.navbar.scss +12 -1
  213. package/src/styles/06-components/_components.side-menu.scss +5 -0
  214. package/src/styles/06-components/_components.skeleton.scss +8 -6
  215. package/src/styles/06-components/_components.upload.scss +219 -4
  216. package/src/styles/06-components/old.chart.styles.scss +1 -30
  217. package/src/styles/99-utilities/_index.scss +1 -0
  218. package/src/styles/99-utilities/_utilities.glass-fixes.scss +1 -0
  219. package/src/styles/99-utilities/_utilities.scss +1 -1
  220. package/src/components/AtomixGlass/AtomixGlass.stories.tsx +0 -3011
  221. package/src/components/AtomixGlass/AtomixGlassComprehensivePreview.stories.tsx +0 -1369
  222. package/src/components/Chart/AdvancedChart.tsx +0 -624
  223. package/src/components/Chart/LineChartNew.tsx +0 -167
  224. package/src/components/Chart/RealTimeChart.tsx +0 -436
  225. 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: 'A modern, comprehensive footer component with enhanced visual effects, accessibility features, responsive design, and multiple layout variants following Atomix design patterns.',
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="Support">
82
- <FooterLink href="/help">Help Center</FooterLink>
83
- <FooterLink href="/docs">Documentation</FooterLink>
84
- <FooterLink href="/community">Community</FooterLink>
85
- <FooterLink href="/status">Status</FooterLink>
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="Legal">
89
- <FooterLink href="/privacy">Privacy Policy</FooterLink>
90
- <FooterLink href="/terms">Terms of Service</FooterLink>
91
- <FooterLink href="/cookies">Cookie Policy</FooterLink>
92
- <FooterLink href="/licenses">Licenses</FooterLink>
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
- export const Default: Story = {
99
+ const LayoutTemplate: Story = {
98
100
  args: {
99
101
  brand: 'Atomix',
100
- brandDescription: 'A modern, accessible design system and component library for building beautiful user interfaces.',
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
114
- <h1>Page Content</h1>
115
- <p>This is sample page content to demonstrate the footer component.</p>
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: 'Get the latest updates, articles, and resources delivered to your inbox.',
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
- ...Default.args,
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
- brand: 'Atomix',
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
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
- ...Default.args,
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
- nostrud exercitation ullamco laboris.
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
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>GitHub</FooterLink>
315
- <FooterLink href="https://stackoverflow.com" external>Stack Overflow</FooterLink>
316
- <FooterLink href="https://developer.mozilla.org" external>MDN Docs</FooterLink>
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>Blog</FooterLink>
323
- <FooterLink href="/disabled" disabled>Disabled Link</FooterLink>
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 style={{ flex: 1, padding: '2rem', background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)' }}>
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
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, padding: '2rem', backgroundColor: 'var(--atomix-surface)' }}>
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
+ });