@shohojdhara/atomix 0.3.14 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build-tools/EXAMPLES.md +372 -0
  3. package/build-tools/README.md +242 -0
  4. package/build-tools/__tests__/error-handler.test.js +230 -0
  5. package/build-tools/__tests__/index.test.js +141 -0
  6. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  7. package/build-tools/__tests__/utils.test.js +161 -0
  8. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  9. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  10. package/build-tools/error-handler.js +308 -0
  11. package/build-tools/index.d.ts +44 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +50 -0
  14. package/build-tools/rollup-plugin.js +236 -0
  15. package/build-tools/types.d.ts +163 -0
  16. package/build-tools/utils.js +203 -0
  17. package/build-tools/vite-plugin.js +161 -0
  18. package/build-tools/webpack-loader.js +123 -0
  19. package/dist/atomix.css +21044 -2618
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +77 -3
  22. package/dist/atomix.min.css.map +1 -1
  23. package/dist/build-tools/EXAMPLES.md +372 -0
  24. package/dist/build-tools/README.md +242 -0
  25. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  26. package/dist/build-tools/__tests__/index.test.js +141 -0
  27. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  28. package/dist/build-tools/__tests__/utils.test.js +161 -0
  29. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  30. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  31. package/dist/build-tools/error-handler.js +308 -0
  32. package/dist/build-tools/index.d.ts +44 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +50 -0
  35. package/dist/build-tools/rollup-plugin.js +236 -0
  36. package/dist/build-tools/types.d.ts +163 -0
  37. package/dist/build-tools/utils.js +203 -0
  38. package/dist/build-tools/vite-plugin.js +161 -0
  39. package/dist/build-tools/webpack-loader.js +123 -0
  40. package/dist/charts.d.ts +1 -1
  41. package/dist/charts.js +86 -57
  42. package/dist/charts.js.map +1 -1
  43. package/dist/core.d.ts +1 -1
  44. package/dist/core.js +136 -112
  45. package/dist/core.js.map +1 -1
  46. package/dist/forms.d.ts +2 -5
  47. package/dist/forms.js +140 -128
  48. package/dist/forms.js.map +1 -1
  49. package/dist/heavy.d.ts +1 -1
  50. package/dist/heavy.js +136 -112
  51. package/dist/heavy.js.map +1 -1
  52. package/dist/index.d.ts +152 -78
  53. package/dist/index.esm.js +346 -340
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +359 -353
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.min.js +1 -1
  58. package/dist/index.min.js.map +1 -1
  59. package/dist/layout.js.map +1 -1
  60. package/dist/theme.d.ts +9 -9
  61. package/dist/theme.js.map +1 -1
  62. package/package.json +23 -8
  63. package/scripts/atomix-cli.js +170 -73
  64. package/scripts/cli/__tests__/README.md +81 -0
  65. package/scripts/cli/__tests__/basic.test.js +115 -0
  66. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  67. package/scripts/cli/__tests__/integration.test.js +327 -0
  68. package/scripts/cli/__tests__/test-setup.js +133 -0
  69. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  70. package/scripts/cli/__tests__/utils.test.js +161 -0
  71. package/scripts/cli/component-generator.js +253 -299
  72. package/scripts/cli/dependency-checker.js +355 -0
  73. package/scripts/cli/interactive-init.js +46 -5
  74. package/scripts/cli/template-manager.js +0 -2
  75. package/scripts/cli/templates/common-templates.js +636 -0
  76. package/scripts/cli/templates/composable-templates.js +148 -126
  77. package/scripts/cli/templates/index.js +23 -16
  78. package/scripts/cli/templates/project-templates.js +151 -23
  79. package/scripts/cli/templates/react-templates.js +280 -210
  80. package/scripts/cli/templates/scss-templates.js +90 -91
  81. package/scripts/cli/templates/testing-templates.js +206 -27
  82. package/scripts/cli/templates/testing-utils.js +278 -0
  83. package/scripts/cli/templates/types-templates.js +70 -56
  84. package/scripts/cli/theme-bridge.js +8 -2
  85. package/scripts/cli/token-manager.js +318 -206
  86. package/scripts/cli/utils.js +0 -1
  87. package/src/components/Accordion/Accordion.stories.tsx +358 -850
  88. package/src/components/Accordion/Accordion.test.tsx +70 -50
  89. package/src/components/Accordion/Accordion.tsx +99 -94
  90. package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
  91. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  92. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  93. package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
  94. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  95. package/src/components/AtomixGlass/glass-utils.ts +6 -5
  96. package/src/components/AtomixGlass/shader-utils.ts +133 -52
  97. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  98. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  99. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  100. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  101. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  102. package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -36
  103. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
  104. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  105. package/src/components/Avatar/Avatar.stories.tsx +195 -0
  106. package/src/components/Avatar/Avatar.tsx +58 -56
  107. package/src/components/Badge/Badge.stories.tsx +122 -352
  108. package/src/components/Badge/Badge.test.tsx +41 -41
  109. package/src/components/Badge/Badge.tsx +64 -62
  110. package/src/components/Block/Block.stories.tsx +30 -11
  111. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
  112. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
  113. package/src/components/Button/Button.stories.tsx +454 -1126
  114. package/src/components/Button/Button.test.tsx +123 -0
  115. package/src/components/Button/Button.tsx +88 -60
  116. package/src/components/Button/ButtonGroup.stories.tsx +376 -215
  117. package/src/components/Button/ButtonGroup.tsx +4 -15
  118. package/src/components/Callout/Callout.stories.tsx +316 -568
  119. package/src/components/Card/Card.stories.tsx +292 -81
  120. package/src/components/Card/Card.tsx +30 -14
  121. package/src/components/Chart/AreaChart.tsx +1 -1
  122. package/src/components/Chart/CandlestickChart.tsx +23 -16
  123. package/src/components/Chart/Chart.stories.tsx +153 -16
  124. package/src/components/Chart/Chart.tsx +40 -44
  125. package/src/components/Chart/ChartRenderer.tsx +39 -12
  126. package/src/components/Chart/ChartToolbar.tsx +21 -5
  127. package/src/components/Chart/DonutChart.tsx +1 -1
  128. package/src/components/Chart/FunnelChart.tsx +4 -1
  129. package/src/components/Chart/GaugeChart.tsx +3 -1
  130. package/src/components/Chart/HeatmapChart.tsx +50 -37
  131. package/src/components/Chart/LineChart.tsx +3 -2
  132. package/src/components/Chart/MultiAxisChart.tsx +24 -16
  133. package/src/components/Chart/RadarChart.tsx +19 -17
  134. package/src/components/Chart/ScatterChart.tsx +29 -21
  135. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
  136. package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
  137. package/src/components/Countdown/Countdown.stories.tsx +114 -7
  138. package/src/components/DataTable/DataTable.stories.tsx +349 -144
  139. package/src/components/DataTable/DataTable.test.tsx +26 -148
  140. package/src/components/DataTable/DataTable.tsx +485 -456
  141. package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
  142. package/src/components/DatePicker/DatePicker.tsx +31 -26
  143. package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
  144. package/src/components/Dropdown/Dropdown.tsx +313 -299
  145. package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
  146. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  147. package/src/components/Footer/Footer.stories.tsx +396 -327
  148. package/src/components/Footer/Footer.tsx +130 -128
  149. package/src/components/Footer/FooterLink.tsx +2 -2
  150. package/src/components/Form/Checkbox.stories.tsx +140 -6
  151. package/src/components/Form/Checkbox.test.tsx +63 -0
  152. package/src/components/Form/Checkbox.tsx +122 -78
  153. package/src/components/Form/Form.stories.tsx +110 -19
  154. package/src/components/Form/FormGroup.stories.tsx +127 -4
  155. package/src/components/Form/Input.stories.tsx +22 -39
  156. package/src/components/Form/Input.test.tsx +38 -44
  157. package/src/components/Form/Radio.stories.tsx +146 -17
  158. package/src/components/Form/Radio.tsx +68 -66
  159. package/src/components/Form/Select.stories.tsx +140 -8
  160. package/src/components/Form/Select.tsx +184 -182
  161. package/src/components/Form/Textarea.stories.tsx +149 -6
  162. package/src/components/Form/Textarea.test.tsx +27 -32
  163. package/src/components/Hero/Hero.stories.tsx +372 -38
  164. package/src/components/Hero/Hero.tsx +201 -55
  165. package/src/components/Icon/index.ts +7 -1
  166. package/src/components/List/List.stories.tsx +141 -3
  167. package/src/components/List/List.tsx +19 -23
  168. package/src/components/Modal/Modal.stories.tsx +183 -43
  169. package/src/components/Modal/Modal.tsx +130 -127
  170. package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
  171. package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
  172. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
  173. package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
  174. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
  175. package/src/components/Pagination/Pagination.stories.tsx +7 -4
  176. package/src/components/Pagination/Pagination.tsx +199 -202
  177. package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
  178. package/src/components/Popover/Popover.stories.tsx +354 -97
  179. package/src/components/Popover/Popover.tsx +41 -37
  180. package/src/components/Progress/Progress.stories.tsx +160 -7
  181. package/src/components/River/River.stories.tsx +3 -2
  182. package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
  183. package/src/components/Slider/Slider.stories.tsx +12 -4
  184. package/src/components/Spinner/Spinner.stories.tsx +104 -8
  185. package/src/components/Spinner/Spinner.test.tsx +23 -23
  186. package/src/components/Spinner/Spinner.tsx +43 -46
  187. package/src/components/Steps/Steps.stories.tsx +173 -42
  188. package/src/components/Tabs/Tabs.stories.tsx +141 -12
  189. package/src/components/Tabs/Tabs.tsx +74 -72
  190. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  191. package/src/components/Todo/Todo.stories.tsx +198 -9
  192. package/src/components/Toggle/Toggle.stories.tsx +137 -36
  193. package/src/components/Toggle/Toggle.test.tsx +65 -70
  194. package/src/components/Toggle/Toggle.tsx +4 -1
  195. package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
  196. package/src/components/Tooltip/Tooltip.tsx +104 -106
  197. package/src/components/Upload/Upload.stories.tsx +241 -150
  198. package/src/components/Upload/Upload.tsx +287 -283
  199. package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
  200. package/src/components/index.ts +13 -2
  201. package/src/layouts/Grid/Grid.stories.tsx +9 -3
  202. package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
  203. package/src/lib/README.md +2 -2
  204. package/src/lib/__tests__/theme-tools.test.ts +219 -0
  205. package/src/lib/composables/index.ts +2 -2
  206. package/src/lib/composables/shared-mouse-tracker.ts +13 -14
  207. package/src/lib/composables/useAtomixGlass.ts +126 -97
  208. package/src/lib/composables/useChartExport.ts +3 -8
  209. package/src/lib/composables/useDataTable.ts +72 -43
  210. package/src/lib/composables/useHero.ts +58 -14
  211. package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
  212. package/src/lib/composables/useInput.ts +10 -8
  213. package/src/lib/composables/useSideMenu.ts +6 -5
  214. package/src/lib/composables/useTooltip.ts +1 -2
  215. package/src/lib/composables/useVideoPlayer.ts +44 -35
  216. package/src/lib/config/index.ts +154 -154
  217. package/src/lib/constants/components.ts +9 -32
  218. package/src/lib/constants/cssVariables.ts +29 -29
  219. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
  220. package/src/lib/hooks/index.ts +1 -1
  221. package/src/lib/hooks/useComponentCustomization.ts +11 -17
  222. package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
  223. package/src/lib/patterns/__tests__/slots.test.ts +1 -1
  224. package/src/lib/patterns/index.ts +1 -1
  225. package/src/lib/patterns/slots.tsx +8 -13
  226. package/src/lib/storybook/InteractiveDemo.tsx +13 -18
  227. package/src/lib/storybook/PreviewContainer.tsx +1 -1
  228. package/src/lib/storybook/VariantsGrid.tsx +3 -7
  229. package/src/lib/storybook/index.ts +1 -1
  230. package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
  231. package/src/lib/theme/adapters/index.ts +3 -9
  232. package/src/lib/theme/adapters/themeAdapter.ts +41 -26
  233. package/src/lib/theme/config/index.ts +1 -1
  234. package/src/lib/theme/config/types.ts +2 -2
  235. package/src/lib/theme/config/validator.ts +10 -5
  236. package/src/lib/theme/constants/constants.ts +2 -2
  237. package/src/lib/theme/constants/index.ts +1 -2
  238. package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
  239. package/src/lib/theme/core/composeTheme.ts +32 -26
  240. package/src/lib/theme/core/createTheme.ts +1 -1
  241. package/src/lib/theme/core/createThemeObject.ts +308 -301
  242. package/src/lib/theme/core/index.ts +3 -3
  243. package/src/lib/theme/devtools/CLI.ts +107 -105
  244. package/src/lib/theme/devtools/Comparator.tsx +50 -32
  245. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
  246. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
  247. package/src/lib/theme/devtools/Inspector.tsx +75 -60
  248. package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
  249. package/src/lib/theme/devtools/Preview.tsx +150 -106
  250. package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
  251. package/src/lib/theme/devtools/index.ts +3 -9
  252. package/src/lib/theme/devtools/useHistory.ts +23 -21
  253. package/src/lib/theme/errors/errors.ts +12 -11
  254. package/src/lib/theme/errors/index.ts +2 -7
  255. package/src/lib/theme/generators/generateCSS.ts +9 -13
  256. package/src/lib/theme/generators/generateCSSNested.ts +1 -6
  257. package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
  258. package/src/lib/theme/generators/index.ts +1 -4
  259. package/src/lib/theme/i18n/index.ts +1 -1
  260. package/src/lib/theme/i18n/rtl.ts +13 -13
  261. package/src/lib/theme/index.ts +7 -16
  262. package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
  263. package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
  264. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
  265. package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
  266. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
  267. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
  268. package/src/lib/theme/runtime/index.ts +2 -5
  269. package/src/lib/theme/runtime/useTheme.ts +18 -18
  270. package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
  271. package/src/lib/theme/test/testTheme.ts +15 -16
  272. package/src/lib/theme/tokens/index.ts +2 -7
  273. package/src/lib/theme/tokens/tokens.ts +25 -24
  274. package/src/lib/theme/types.ts +428 -411
  275. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
  276. package/src/lib/theme/utils/componentTheming.ts +18 -18
  277. package/src/lib/theme/utils/domUtils.ts +277 -289
  278. package/src/lib/theme/utils/index.ts +1 -2
  279. package/src/lib/theme/utils/injectCSS.ts +10 -14
  280. package/src/lib/theme/utils/naming.ts +20 -16
  281. package/src/lib/theme/utils/themeHelpers.ts +10 -12
  282. package/src/lib/theme/utils/themeUtils.ts +85 -86
  283. package/src/lib/theme/utils/themeValidation.ts +82 -33
  284. package/src/lib/theme-tools.ts +8 -6
  285. package/src/lib/types/components.ts +172 -71
  286. package/src/lib/types/partProps.ts +1 -1
  287. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  288. package/src/lib/utils/componentUtils.ts +8 -12
  289. package/src/lib/utils/csv.ts +19 -0
  290. package/src/lib/utils/dataTableExport.ts +2 -15
  291. package/src/lib/utils/fontPreloader.ts +10 -19
  292. package/src/lib/utils/icons.ts +4 -1
  293. package/src/lib/utils/index.ts +2 -6
  294. package/src/lib/utils/memoryMonitor.ts +10 -8
  295. package/src/lib/utils/themeNaming.ts +2 -2
  296. package/src/styles/01-settings/_index.scss +1 -1
  297. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  298. package/src/styles/01-settings/_settings.colors.scss +11 -11
  299. package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
  300. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  301. package/src/styles/01-settings/_settings.spacing.scss +3 -4
  302. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  303. package/src/styles/01-settings/_settings.typography.scss +4 -4
  304. package/src/styles/02-tools/_tools.button.scss +51 -21
  305. package/src/styles/02-tools/_tools.utility-api.scss +38 -12
  306. package/src/styles/03-generic/_generic.root.scss +4 -3
  307. package/src/styles/06-components/_components.accordion.scss +56 -14
  308. package/src/styles/06-components/_components.atomix-glass.scss +13 -9
  309. package/src/styles/06-components/_components.button.scss +16 -4
  310. package/src/styles/06-components/_components.callout.scss +27 -21
  311. package/src/styles/06-components/_components.card.scss +5 -14
  312. package/src/styles/06-components/_components.chart.scss +22 -19
  313. package/src/styles/06-components/_components.checkbox.scss +25 -17
  314. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
  315. package/src/styles/06-components/_components.edge-panel.scss +9 -2
  316. package/src/styles/06-components/_components.footer.scss +1 -1
  317. package/src/styles/06-components/_components.side-menu.scss +5 -5
  318. package/src/styles/06-components/_components.toggle.scss +18 -0
  319. package/src/styles/06-components/_index.scss +1 -1
  320. package/src/styles/06-components/old.chart.styles.scss +0 -2
  321. package/src/styles/99-utilities/_index.scss +2 -0
  322. package/src/styles/99-utilities/_utilities.border.scss +69 -27
  323. package/src/styles/99-utilities/_utilities.display.scss +1 -1
  324. package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
  325. package/src/styles/99-utilities/_utilities.position.scss +16 -9
  326. package/src/styles/99-utilities/_utilities.scss +2 -0
  327. package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
  328. package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
  329. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  330. package/src/styles/99-utilities/_utilities.text.scss +67 -46
  331. package/themes/dark-complementary/README.md +98 -0
  332. package/themes/dark-complementary/index.scss +158 -0
  333. package/themes/default-light/README.md +81 -0
  334. package/themes/default-light/index.scss +154 -0
  335. package/themes/high-contrast/README.md +105 -0
  336. package/themes/high-contrast/index.scss +172 -0
  337. package/themes/test-theme/README.md +38 -0
  338. package/themes/test-theme/index.scss +47 -0
  339. package/scripts/cli/templates-original-backup.js +0 -1655
  340. package/scripts/cli/templates_backup.js +0 -684
  341. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  342. package/src/lib/composables/useButton.ts +0 -93
  343. package/src/lib/composables/useCheckbox.ts +0 -70
@@ -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 { Footer } from './Footer';
4
5
  import { FooterSection } from './FooterSection';
5
6
  import { FooterLink } from './FooterLink';
@@ -12,43 +13,229 @@ const meta = {
12
13
  layout: 'fullscreen',
13
14
  docs: {
14
15
  description: {
15
- component:
16
- 'The Footer component provides a comprehensive footer section for websites with multiple layout variants, sections, links, and optional features like newsletter signup and back-to-top buttons. Footers support various color variants, sizes, and can be sticky. Essential for site navigation, branding, and additional information display.',
16
+ component: `
17
+ # Footer
18
+
19
+ ## Overview
20
+
21
+ Footer provides a comprehensive footer section for websites with multiple layout variants, sections, links, and optional features like newsletter signup and back-to-top buttons. Footers support various color variants, sizes, and can be sticky. Essential for site navigation, branding, and additional information display.
22
+
23
+ ## Features
24
+
25
+ - Multiple layout variants (columns, centered, minimal, stacked, flexible, sidebar, wide)
26
+ - Color and size variants
27
+ - Newsletter signup option
28
+ - Back-to-top button
29
+ - Social media links
30
+ - Divider options
31
+ - Sticky positioning
32
+ - Responsive design
33
+ - Glass effect option
34
+
35
+ ## Accessibility
36
+
37
+ - Screen reader: Footer content and links announced properly
38
+ - ARIA support: Proper landmarks and roles for footer section
39
+ - Keyboard support: All interactive elements accessible via keyboard
40
+ - Focus management: Visible focus indicators for navigation
41
+
42
+ ## Usage Examples
43
+
44
+ ### Basic Usage
45
+
46
+ \`\`\`tsx
47
+ <Footer>
48
+ <FooterSection title="Products">
49
+ <FooterLink href="/products">Our Products</FooterLink>
50
+ </FooterSection>
51
+ </Footer>
52
+ \`\`\`
53
+
54
+ ### With Newsletter
55
+
56
+ \`\`\`tsx
57
+ <Footer showNewsletter={true}>
58
+ <FooterSection title="Products">
59
+ <FooterLink href="/products">Our Products</FooterLink>
60
+ </FooterSection>
61
+ </Footer>
62
+ \`\`\`
63
+
64
+ ## API Reference
65
+
66
+ ### Props
67
+
68
+ | Prop | Type | Default | Description |
69
+ | ---- | ---- | ------- | ----------- |
70
+ | layout | 'columns' \\| 'centered' \\| 'minimal' \\| 'stacked' \\| 'flexible' \\| 'sidebar' \\| 'wide' | 'columns' | Footer layout variant |
71
+ | variant | ThemeColor | 'secondary' | Color variant |
72
+ | size | 'sm' \\| 'md' \\| 'lg' | 'md' | Size variant |
73
+ | showNewsletter | boolean | false | Whether to show newsletter signup |
74
+ | showBackToTop | boolean | false | Whether to show back to top button |
75
+ | showDivider | boolean | false | Whether to show divider above bottom section |
76
+ | sticky | boolean | false | Whether footer should be sticky |
77
+ | socialLinks | SocialLink[] | [] | Array of social media links |
78
+ | onBackToTopClick | () => void | - | Callback when back to top button is clicked |
79
+ | brand | ReactNode | - | Brand name or logo |
80
+ | brandLogo | string \\| ReactNode | - | Brand logo (image URL or React element) |
81
+ | brandDescription | ReactNode | - | Brand description text |
82
+ | copyright | ReactNode | - | Copyright text |
83
+ | newsletterTitle | string | 'Stay Updated' | Newsletter section title |
84
+ | newsletterDescription | string | 'Subscribe...' | Newsletter section description |
85
+ | newsletterPlaceholder | string | 'Enter your email' | Newsletter input placeholder |
86
+ | newsletterButtonText | string | 'Subscribe' | Newsletter submit button text |
87
+ | onNewsletterSubmit | (email: string) => void | - | Newsletter submit handler |
88
+ | glass | boolean | - | Whether footer should have glass effect |
89
+ `,
17
90
  },
18
91
  },
19
92
  },
20
93
  tags: ['autodocs'],
21
94
  argTypes: {
22
95
  layout: {
23
- control: 'select',
96
+ control: { type: 'select' },
24
97
  options: ['columns', 'centered', 'minimal', 'stacked', 'flexible', 'sidebar', 'wide'],
25
98
  description: 'Footer layout variant',
99
+ table: {
100
+ type: {
101
+ summary:
102
+ '"columns" | "centered" | "minimal" | "stacked" | "flexible" | "sidebar" | "wide"',
103
+ },
104
+ defaultValue: { summary: 'columns' },
105
+ },
26
106
  },
27
107
  variant: {
28
- control: 'select',
108
+ control: { type: 'select' },
29
109
  options: THEME_COLORS,
30
110
  description: 'Color variant',
111
+ table: {
112
+ type: { summary: 'ThemeColor' },
113
+ defaultValue: { summary: 'primary' },
114
+ },
31
115
  },
32
116
  size: {
33
- control: 'select',
117
+ control: { type: 'select' },
34
118
  options: SIZES,
35
119
  description: 'Size variant',
120
+ table: {
121
+ type: { summary: '"sm" | "md" | "lg"' },
122
+ defaultValue: { summary: 'md' },
123
+ },
36
124
  },
37
125
  showNewsletter: {
38
126
  control: 'boolean',
39
127
  description: 'Whether to show newsletter signup',
128
+ table: {
129
+ type: { summary: 'boolean' },
130
+ defaultValue: { summary: false },
131
+ },
40
132
  },
41
133
  showBackToTop: {
42
134
  control: 'boolean',
43
135
  description: 'Whether to show back to top button',
136
+ table: {
137
+ type: { summary: 'boolean' },
138
+ defaultValue: { summary: false },
139
+ },
44
140
  },
45
141
  showDivider: {
46
142
  control: 'boolean',
47
143
  description: 'Whether to show divider above bottom section',
144
+ table: {
145
+ type: { summary: 'boolean' },
146
+ defaultValue: { summary: true },
147
+ },
48
148
  },
49
149
  sticky: {
50
150
  control: 'boolean',
51
151
  description: 'Whether footer should be sticky',
152
+ table: {
153
+ type: { summary: 'boolean' },
154
+ defaultValue: { summary: false },
155
+ },
156
+ },
157
+ socialLinks: {
158
+ control: 'object',
159
+ description: 'Array of social media links',
160
+ table: {
161
+ type: { summary: 'SocialLink[]' },
162
+ defaultValue: { summary: '[]' },
163
+ },
164
+ },
165
+ onBackToTop: {
166
+ action: 'back to top clicked',
167
+ description: 'Callback when back to top button is clicked',
168
+ },
169
+ onNewsletterSubmit: {
170
+ action: 'newsletter submitted',
171
+ description: 'Callback when newsletter is submitted',
172
+ },
173
+ brand: {
174
+ control: 'text',
175
+ description: 'Brand name',
176
+ table: {
177
+ type: { summary: 'ReactNode' },
178
+ },
179
+ },
180
+ brandLogo: {
181
+ control: 'text',
182
+ description: 'Brand logo URL',
183
+ table: {
184
+ type: { summary: 'string | ReactNode' },
185
+ },
186
+ },
187
+ brandDescription: {
188
+ control: 'text',
189
+ description: 'Brand description',
190
+ table: {
191
+ type: { summary: 'ReactNode' },
192
+ },
193
+ },
194
+ copyright: {
195
+ control: 'text',
196
+ description: 'Copyright text',
197
+ table: {
198
+ type: { summary: 'ReactNode' },
199
+ },
200
+ },
201
+ newsletterTitle: {
202
+ control: 'text',
203
+ description: 'Title for newsletter section',
204
+ table: {
205
+ type: { summary: 'string' },
206
+ defaultValue: { summary: 'Stay Updated' },
207
+ },
208
+ },
209
+ newsletterDescription: {
210
+ control: 'text',
211
+ description: 'Description for newsletter section',
212
+ table: {
213
+ type: { summary: 'string' },
214
+ defaultValue: { summary: 'Subscribe to our newsletter for the latest updates.' },
215
+ },
216
+ },
217
+ newsletterPlaceholder: {
218
+ control: 'text',
219
+ description: 'Placeholder for newsletter input',
220
+ table: {
221
+ type: { summary: 'string' },
222
+ defaultValue: { summary: 'Enter your email' },
223
+ },
224
+ },
225
+ newsletterButtonText: {
226
+ control: 'text',
227
+ description: 'Text for newsletter button',
228
+ table: {
229
+ type: { summary: 'string' },
230
+ defaultValue: { summary: 'Subscribe' },
231
+ },
232
+ },
233
+ glass: {
234
+ control: 'boolean',
235
+ description: 'Whether to apply glass effect',
236
+ table: {
237
+ type: { summary: 'boolean' },
238
+ },
52
239
  },
53
240
  },
54
241
  } satisfies Meta<typeof Footer>;
@@ -82,56 +269,38 @@ const SampleFooterContent = () => (
82
269
  <FooterLink href="/contact">Contact</FooterLink>
83
270
  </FooterSection>
84
271
 
85
- <FooterSection title="Company">
86
- <FooterLink href="/about">About Us</FooterLink>
87
- <FooterLink href="/careers">Careers</FooterLink>
88
- <FooterLink href="/blog">Blog</FooterLink>
89
- <FooterLink href="/contact">Contact</FooterLink>
272
+ <FooterSection title="Resources">
273
+ <FooterLink href="/docs">Documentation</FooterLink>
274
+ <FooterLink href="/tutorials">Tutorials</FooterLink>
275
+ <FooterLink href="/support">Support</FooterLink>
276
+ <FooterLink href="/community">Community</FooterLink>
90
277
  </FooterSection>
91
278
 
92
- <FooterSection title="Company">
93
- <FooterLink href="/about">About Us</FooterLink>
94
- <FooterLink href="/careers">Careers</FooterLink>
95
- <FooterLink href="/blog">Blog</FooterLink>
96
- <FooterLink href="/contact">Contact</FooterLink>
279
+ <FooterSection title="Legal">
280
+ <FooterLink href="/privacy">Privacy Policy</FooterLink>
281
+ <FooterLink href="/terms">Terms of Service</FooterLink>
282
+ <FooterLink href="/cookies">Cookie Policy</FooterLink>
283
+ <FooterLink href="/gdpr">GDPR Compliance</FooterLink>
97
284
  </FooterSection>
98
285
  </>
99
286
  );
100
287
 
101
- const LayoutTemplate: Story = {
288
+ export const BasicUsage: Story = {
102
289
  args: {
103
290
  brand: 'Atomix',
104
- brandDescription: 'A modern design system for building accessible web applications.',
105
- copyright: '© 2024 Atomix UI. All rights reserved.',
106
- layout: 'columns',
107
- variant: 'primary',
108
- size: 'md',
109
- showNewsletter: false,
110
- showBackToTop: false,
111
- showDivider: true,
112
- sticky: false,
291
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
292
+ copyright: '© 2024 Atomix. All rights reserved.',
113
293
  socialLinks: sampleSocialLinks,
114
294
  },
115
- render: (args: any) => (
116
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
117
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)', padding: '2rem' }}>
118
- <h1>Main Content</h1>
119
- <p>This is sample page content to demonstrate the footer in context.</p>
120
- </div>
121
- <Footer {...args}>
122
- <SampleFooterContent />
123
- </Footer>
124
- </div>
295
+ render: args => (
296
+ <Footer {...args}>
297
+ <SampleFooterContent />
298
+ </Footer>
125
299
  ),
126
- };
127
-
128
- export const Default: Story = {
129
- ...LayoutTemplate,
130
300
  parameters: {
131
301
  docs: {
132
302
  description: {
133
- story:
134
- 'Default footer configuration with modern styling, design tokens, and enhanced visual effects.',
303
+ story: 'Basic footer with sample content and default layout.',
135
304
  },
136
305
  },
137
306
  },
@@ -139,377 +308,277 @@ export const Default: Story = {
139
308
 
140
309
  export const WithNewsletter: Story = {
141
310
  args: {
142
- ...Default.args,
311
+ brand: 'Atomix',
312
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
313
+ copyright: '© 2024 Atomix. All rights reserved.',
143
314
  showNewsletter: true,
144
- newsletterTitle: 'Stay in the Loop',
145
- newsletterDescription:
146
- 'Get the latest updates, articles, and resources delivered to your inbox.',
147
- onNewsletterSubmit: (email: string) => {
148
- alert(`Thank you for subscribing with ${email}!`);
315
+ newsletterTitle: 'Stay Updated',
316
+ newsletterDescription: 'Subscribe to our newsletter for the latest updates and news.',
317
+ newsletterPlaceholder: 'Enter your email address',
318
+ newsletterButtonText: 'Subscribe Now',
319
+ onNewsletterSubmit: fn(),
320
+ socialLinks: sampleSocialLinks,
321
+ },
322
+ render: args => (
323
+ <Footer {...args}>
324
+ <SampleFooterContent />
325
+ </Footer>
326
+ ),
327
+ parameters: {
328
+ docs: {
329
+ description: {
330
+ story: 'Footer with newsletter signup form.',
331
+ },
149
332
  },
150
333
  },
151
- render: Default.render,
152
334
  };
153
335
 
154
336
  export const WithBackToTop: Story = {
155
337
  args: {
156
- ...Default.args,
338
+ brand: 'Atomix',
339
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
340
+ copyright: '© 2024 Atomix. All rights reserved.',
157
341
  showBackToTop: true,
158
342
  backToTopText: 'Back to Top',
159
- onBackToTop: () => {
160
- // Back to top functionality
343
+ onBackToTop: fn(),
344
+ socialLinks: sampleSocialLinks,
345
+ },
346
+ render: args => (
347
+ <Footer {...args}>
348
+ <SampleFooterContent />
349
+ </Footer>
350
+ ),
351
+ parameters: {
352
+ docs: {
353
+ description: {
354
+ story: 'Footer with back to top button and social links.',
355
+ },
161
356
  },
162
357
  },
163
- render: Default.render,
164
358
  };
165
359
 
166
- export const Centered: Story = {
167
- ...LayoutTemplate,
360
+ export const CenteredLayout: Story = {
168
361
  args: {
169
- ...LayoutTemplate.args,
170
362
  layout: 'centered',
171
- showNewsletter: true,
172
- showBackToTop: true,
173
- },
174
- };
175
-
176
- export const Minimal: Story = {
177
- ...LayoutTemplate,
178
- args: {
179
- ...LayoutTemplate.args,
180
- layout: 'minimal',
181
- variant: 'light',
182
- size: 'sm',
183
- socialLinks: sampleSocialLinks.slice(0, 3),
184
- showDivider: false,
185
- showNewsletter: false,
363
+ brand: 'Atomix',
364
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
365
+ copyright: '© 2024 Atomix. All rights reserved.',
366
+ socialLinks: sampleSocialLinks,
186
367
  },
187
- render: (args: any) => (
188
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
189
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
190
- <h1>Page Content</h1>
191
- <p>This is sample page content with a minimal footer.</p>
192
- </div>
193
- <Footer {...args}>
194
- <FooterSection title="Quick Links">
195
- <FooterLink href="/about">About</FooterLink>
196
- <FooterLink href="/contact">Contact</FooterLink>
197
- <FooterLink href="/privacy">Privacy</FooterLink>
198
- </FooterSection>
199
- </Footer>
200
- </div>
368
+ render: args => (
369
+ <Footer {...args}>
370
+ <SampleFooterContent />
371
+ </Footer>
201
372
  ),
202
- };
203
-
204
- export const Stacked: Story = {
205
- ...LayoutTemplate,
206
- args: {
207
- ...LayoutTemplate.args,
208
- layout: 'stacked',
209
- showNewsletter: true,
210
- showBackToTop: true,
211
- },
212
- };
213
-
214
- export const DarkVariant: Story = {
215
- args: {
216
- ...Default.args,
217
- variant: 'dark',
218
- showNewsletter: true,
219
- showBackToTop: true,
220
- },
221
- render: Default.render,
222
- };
223
-
224
- export const LargeSize: Story = {
225
- args: {
226
- ...Default.args,
227
- size: 'lg',
228
- showNewsletter: true,
229
- showBackToTop: true,
373
+ parameters: {
374
+ docs: {
375
+ description: {
376
+ story: 'Footer with centered layout variant.',
377
+ },
378
+ },
230
379
  },
231
- render: Default.render,
232
380
  };
233
381
 
234
- export const SmallSize: Story = {
382
+ export const MinimalLayout: Story = {
235
383
  args: {
236
- ...Default.args,
237
- size: 'sm',
238
384
  layout: 'minimal',
385
+ brand: 'Atomix',
386
+ brandLogo: 'https://via.placeholder.com/150x50.png?text=LOGO',
387
+ copyright: '© 2024 Atomix. All rights reserved.',
388
+ socialLinks: sampleSocialLinks,
239
389
  },
240
- render: Default.render,
241
- };
242
-
243
- export const WithBrandLogo: Story = {
244
- args: {
245
- ...Default.args,
246
- brandLogo: 'https://via.placeholder.com/150x50/007bff/ffffff?text=LOGO',
247
- showNewsletter: true,
390
+ render: args => (
391
+ <Footer {...args}>
392
+ <SampleFooterContent />
393
+ </Footer>
394
+ ),
395
+ parameters: {
396
+ docs: {
397
+ description: {
398
+ story: 'Footer with minimal layout variant.',
399
+ },
400
+ },
248
401
  },
249
- render: Default.render,
250
402
  };
251
403
 
252
- export const Sticky: Story = {
404
+ export const StackedLayout: Story = {
253
405
  args: {
254
- ...Default.args,
255
- sticky: true,
256
- size: 'sm',
257
- layout: 'minimal',
406
+ layout: 'stacked',
407
+ brand: 'Atomix',
408
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
409
+ copyright: '© 2024 Atomix. All rights reserved.',
410
+ socialLinks: sampleSocialLinks,
258
411
  },
259
- render: (args: any) => (
260
- <div style={{ height: '200vh', backgroundColor: 'var(--atomix-surface)' }}>
261
- <div style={{ padding: '2rem' }}>
262
- <h1>Scroll down to see sticky footer</h1>
263
- <p>This page is tall enough to demonstrate the sticky footer behavior.</p>
264
- {Array.from({ length: 20 }, (_, i) => (
265
- <p key={i}>
266
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor
267
- incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
268
- exercitation ullamco laboris.
269
- </p>
270
- ))}
271
- </div>
272
- <Footer {...args}>
273
- <SampleFooterContent />
274
- </Footer>
275
- </div>
412
+ render: args => (
413
+ <Footer {...args}>
414
+ <SampleFooterContent />
415
+ </Footer>
276
416
  ),
277
- };
278
-
279
- export const CollapsibleSections: Story = {
280
- args: {
281
- ...Default.args,
282
- showNewsletter: true,
417
+ parameters: {
418
+ docs: {
419
+ description: {
420
+ story: 'Footer with stacked layout variant.',
421
+ },
422
+ },
283
423
  },
284
- render: (args: any) => (
285
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
286
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
287
- <h1>Collapsible Footer Sections</h1>
288
- <p>Resize the window to mobile size to see collapsible sections.</p>
289
- </div>
290
- <Footer {...args}>
291
- <FooterSection title="Products" collapsible defaultCollapsed>
292
- <FooterLink href="/product1">Web Development</FooterLink>
293
- <FooterLink href="/product2">Mobile Apps</FooterLink>
294
- <FooterLink href="/product3">UI/UX Design</FooterLink>
295
- </FooterSection>
296
-
297
- <FooterSection title="Company" collapsible>
298
- <FooterLink href="/about">About Us</FooterLink>
299
- <FooterLink href="/careers">Careers</FooterLink>
300
- <FooterLink href="/blog">Blog</FooterLink>
301
- </FooterSection>
302
- </Footer>
303
- </div>
304
- ),
305
424
  };
306
425
 
307
- export const WithExternalLinks: Story = {
426
+ export const FlexibleLayout: Story = {
308
427
  args: {
309
- ...Default.args,
310
- socialLinks: [
311
- ...sampleSocialLinks,
312
- { platform: 'tiktok' as const, url: 'https://tiktok.com/@company' },
313
- { platform: 'whatsapp' as const, url: 'https://wa.me/1234567890' },
314
- { platform: 'discord' as const, url: 'https://discord.gg/company' },
315
- ],
428
+ layout: 'flexible',
429
+ brand: 'Atomix',
430
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
431
+ copyright: '© 2024 Atomix. All rights reserved.',
432
+ socialLinks: sampleSocialLinks,
316
433
  },
317
- render: (args: any) => (
318
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
319
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
320
- <h1>Modern Social Links</h1>
321
- <p>Footer with enhanced social platforms and modern styling.</p>
322
- </div>
323
- <Footer {...args}>
324
- <FooterSection title="External Resources">
325
- <FooterLink href="https://github.com" external>
326
- GitHub
327
- </FooterLink>
328
- <FooterLink href="https://stackoverflow.com" external>
329
- Stack Overflow
330
- </FooterLink>
331
- <FooterLink href="https://developer.mozilla.org" external>
332
- MDN Docs
333
- </FooterLink>
334
- </FooterSection>
335
-
336
- <FooterSection title="Internal Links">
337
- <FooterLink href="/about">About Us</FooterLink>
338
- <FooterLink href="/contact">Contact</FooterLink>
339
- <FooterLink href="/blog" active>
340
- Blog
341
- </FooterLink>
342
- <FooterLink href="/disabled" disabled>
343
- Disabled Link
344
- </FooterLink>
345
- </FooterSection>
346
- </Footer>
347
- </div>
434
+ render: args => (
435
+ <Footer {...args}>
436
+ <SampleFooterContent />
437
+ </Footer>
348
438
  ),
439
+ parameters: {
440
+ docs: {
441
+ description: {
442
+ story: 'Footer with flexible layout variant.',
443
+ },
444
+ },
445
+ },
349
446
  };
350
447
 
351
- export const ModernGradients: Story = {
448
+ export const SidebarLayout: Story = {
352
449
  args: {
353
- ...Default.args,
354
- variant: 'primary',
355
- showNewsletter: true,
356
- showBackToTop: true,
450
+ layout: 'sidebar',
451
+ brand: 'Atomix',
452
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
453
+ copyright: '© 2024 Atomix. All rights reserved.',
357
454
  socialLinks: sampleSocialLinks,
358
455
  },
359
- render: (args: any) => (
360
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
361
- <div
362
- style={{
363
- flex: 1,
364
- padding: '2rem',
365
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
366
- }}
367
- >
368
- <h1 style={{ color: 'white' }}>Modern Design</h1>
369
- <p style={{ color: 'white' }}>Showcasing modern gradients and enhanced visual effects.</p>
370
- </div>
371
- <Footer {...args}>
372
- <SampleFooterContent />
373
- </Footer>
374
- </div>
456
+ render: args => (
457
+ <Footer {...args}>
458
+ <SampleFooterContent />
459
+ </Footer>
375
460
  ),
461
+ parameters: {
462
+ docs: {
463
+ description: {
464
+ story: 'Footer with sidebar layout variant.',
465
+ },
466
+ },
467
+ },
376
468
  };
377
469
 
378
- export const DesignTokensShowcase: Story = {
470
+ export const WideLayout: Story = {
379
471
  args: {
380
- ...Default.args,
381
- brand: 'Design Tokens',
382
- brandDescription:
383
- 'Showcasing consistent design tokens, modern hover effects, and enhanced visual styling throughout the footer component.',
384
- showNewsletter: true,
385
- showBackToTop: true,
472
+ layout: 'wide',
473
+ brand: 'Atomix',
474
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
475
+ copyright: '© 2024 Atomix. All rights reserved.',
386
476
  socialLinks: sampleSocialLinks,
387
477
  },
478
+ render: args => (
479
+ <Footer {...args}>
480
+ <SampleFooterContent />
481
+ </Footer>
482
+ ),
388
483
  parameters: {
389
484
  docs: {
390
485
  description: {
391
- story:
392
- 'Demonstrates the use of design tokens for consistent styling, enhanced hover effects, modern gradients, and improved accessibility features.',
486
+ story: 'Footer with wide layout variant.',
393
487
  },
394
488
  },
395
489
  },
396
- render: (args: any) => (
397
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
398
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
399
- <h1>Design Token Integration</h1>
400
- <p>
401
- This footer demonstrates consistent use of design tokens for colors, spacing, shadows, and
402
- typography. Hover over elements to see enhanced visual effects.
403
- </p>
404
- <ul>
405
- <li>✨ Global CSS variables for box shadows</li>
406
- <li>🎨 Design token-based colors and opacity</li>
407
- <li>📏 Consistent spacing using rem() function</li>
408
- <li>🔄 Smooth transitions and hover effects</li>
409
- <li>♿ Enhanced accessibility features</li>
410
- </ul>
411
- </div>
412
- <Footer {...args}>
413
- <FooterSection title="Design System">
414
- <FooterLink href="/tokens">Design Tokens</FooterLink>
415
- <FooterLink href="/components">Components</FooterLink>
416
- <FooterLink href="/guidelines">Guidelines</FooterLink>
417
- <FooterLink href="/accessibility">Accessibility</FooterLink>
418
- </FooterSection>
419
-
420
- <FooterSection title="Development">
421
- <FooterLink href="/scss">SCSS Architecture</FooterLink>
422
- <FooterLink href="/css-vars">CSS Variables</FooterLink>
423
- <FooterLink href="/responsive">Responsive Design</FooterLink>
424
- <FooterLink href="/performance">Performance</FooterLink>
425
- </FooterSection>
426
- </Footer>
427
- </div>
428
- ),
429
490
  };
430
491
 
431
- export const AccessibilityFocused: Story = {
492
+ export const DarkVariant: Story = {
432
493
  args: {
433
- ...Default.args,
434
- showNewsletter: true,
435
- showBackToTop: true,
494
+ variant: 'dark',
495
+ brand: 'Atomix',
496
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
497
+ copyright: '© 2024 Atomix. All rights reserved.',
498
+ socialLinks: sampleSocialLinks,
436
499
  },
437
- render: (args: any) => (
438
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
439
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
440
- <h1>Accessibility Features</h1>
441
- <p>Tab through the footer elements to see enhanced focus states and keyboard navigation.</p>
442
- </div>
443
- <Footer {...args}>
444
- <SampleFooterContent />
445
- </Footer>
446
- </div>
500
+ render: args => (
501
+ <Footer {...args}>
502
+ <SampleFooterContent />
503
+ </Footer>
447
504
  ),
448
- };
449
-
450
- export const ResponsiveShowcase: Story = {
451
- args: {
452
- ...Default.args,
453
- layout: 'columns',
454
- showNewsletter: true,
455
- showBackToTop: true,
505
+ parameters: {
506
+ docs: {
507
+ description: {
508
+ story: 'Footer with dark color variant.',
509
+ },
510
+ },
456
511
  },
457
- render: (args: any) => (
458
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
459
- <div style={{ flex: 1, backgroundColor: 'var(--atomix-brand-bg-subtle)' }}>
460
- <h1>Responsive Design</h1>
461
- <p>Resize the viewport to see responsive grid layouts and collapsible sections.</p>
462
- </div>
463
- <Footer {...args}>
464
- <SampleFooterContent />
465
- </Footer>
466
- </div>
467
- ),
468
512
  };
469
513
 
470
- export const Flexible: Story = {
471
- ...LayoutTemplate,
514
+ export const LargeSize: Story = {
472
515
  args: {
473
- ...LayoutTemplate.args,
474
- layout: 'flexible',
516
+ size: 'lg',
517
+ brand: 'Atomix',
518
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
519
+ copyright: '© 2024 Atomix. All rights reserved.',
520
+ socialLinks: sampleSocialLinks,
475
521
  },
522
+ render: args => (
523
+ <Footer {...args}>
524
+ <SampleFooterContent />
525
+ </Footer>
526
+ ),
476
527
  parameters: {
477
528
  docs: {
478
529
  description: {
479
- story:
480
- 'Flexible layout that automatically adapts to content width and screen size. Perfect for dynamic content scenarios.',
530
+ story: 'Footer with large size variant.',
481
531
  },
482
532
  },
483
533
  },
484
534
  };
485
535
 
486
- export const Sidebar: Story = {
487
- ...LayoutTemplate,
536
+ export const WithGlassEffect: Story = {
488
537
  args: {
489
- ...LayoutTemplate.args,
490
- layout: 'sidebar',
538
+ brand: 'Atomix',
539
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
540
+ copyright: '© 2024 Atomix. All rights reserved.',
541
+ socialLinks: sampleSocialLinks,
542
+ glass: true,
491
543
  },
544
+ render: args => (
545
+ <Footer {...args}>
546
+ <SampleFooterContent />
547
+ </Footer>
548
+ ),
492
549
  parameters: {
493
550
  docs: {
494
551
  description: {
495
- story:
496
- 'Sidebar layout with brand and newsletter in a left sidebar and content sections in the main area.',
552
+ story: 'Footer with glass effect enabled.',
497
553
  },
498
554
  },
499
555
  },
500
556
  };
501
557
 
502
- export const Wide: Story = {
503
- ...LayoutTemplate,
558
+ export const StickyFooter: Story = {
504
559
  args: {
505
- ...LayoutTemplate.args,
506
- layout: 'wide',
560
+ sticky: true,
561
+ brand: 'Atomix',
562
+ brandDescription: 'A modern design system for building beautiful, accessible websites.',
563
+ copyright: '© 2024 Atomix. All rights reserved.',
564
+ socialLinks: sampleSocialLinks,
507
565
  },
566
+ render: args => (
567
+ <div style={{ minHeight: '200vh' }}>
568
+ <div
569
+ style={{ height: '100vh', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
570
+ >
571
+ <p>Scroll down to see the sticky footer</p>
572
+ </div>
573
+ <Footer {...args}>
574
+ <SampleFooterContent />
575
+ </Footer>
576
+ </div>
577
+ ),
508
578
  parameters: {
509
579
  docs: {
510
580
  description: {
511
- story:
512
- 'Wide layout optimized for large screens with generous spacing and extended content areas.',
581
+ story: 'Sticky footer that stays at the bottom of the viewport.',
513
582
  },
514
583
  },
515
584
  },