@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 type { AtomixGlassProps } from '../../lib/types/components';
4
5
  import { Tabs } from './Tabs';
5
6
 
@@ -13,8 +14,67 @@ const meta = {
13
14
  layout: 'padded',
14
15
  docs: {
15
16
  description: {
16
- component:
17
- 'The Tabs component organizes content into multiple panels accessible via tab navigation. It provides a clean interface for switching between different views or sections of content. Tabs support keyboard navigation and can include rich content in each panel.',
17
+ component: `
18
+ # Tabs
19
+
20
+ ## Overview
21
+
22
+ Tabs organize content into multiple panels accessible via tab navigation. It provides a clean interface for switching between different views or sections of content. Tabs support keyboard navigation and can include rich content in each panel.
23
+
24
+ ## Features
25
+
26
+ - Multiple tab panels with distinct content
27
+ - Keyboard navigation support
28
+ - Active tab indication
29
+ - Glass morphism effect option
30
+ - Rich content support
31
+ - Accessible design
32
+ - Responsive behavior
33
+
34
+ ## Accessibility
35
+
36
+ - Keyboard support: Navigate tabs with arrow keys, activate with Enter/Space
37
+ - Screen reader: Tab labels and content announced properly
38
+ - ARIA support: Proper roles and properties for tab components
39
+ - Focus management: Maintains focus on active tab element
40
+
41
+ ## Usage Examples
42
+
43
+ ### Basic Usage
44
+
45
+ \`\`\`tsx
46
+ <Tabs
47
+ items={[
48
+ { label: 'Tab 1', content: <div>Content 1</div> },
49
+ { label: 'Tab 2', content: <div>Content 2</div> },
50
+ ]}
51
+ />
52
+ \`\`\`
53
+
54
+ ### With Glass Effect
55
+
56
+ \`\`\`tsx
57
+ <Tabs
58
+ glass={true}
59
+ items={[
60
+ { label: 'Tab 1', content: <div>Content 1</div> },
61
+ { label: 'Tab 2', content: <div>Content 2</div> },
62
+ ]}
63
+ />
64
+ \`\`\`
65
+
66
+ ## API Reference
67
+
68
+ ### Props
69
+
70
+ | Prop | Type | Default | Description |
71
+ | ---- | ---- | ------- | ----------- |
72
+ | activeIndex | number | 0 | The index of the currently active tab |
73
+ | items | TabItem[] | [] | Array of tab items with labels and content |
74
+ | glass | boolean \\| GlassProps | false | Enable glass morphism effect |
75
+ | onChange | (index: number) => void | - | Callback when active tab changes |
76
+ | className | string | - | Additional CSS classes for the component |
77
+ `,
18
78
  },
19
79
  },
20
80
  },
@@ -23,11 +83,30 @@ const meta = {
23
83
  activeIndex: {
24
84
  control: { type: 'number' },
25
85
  description: 'The index of the currently active tab',
26
- defaultValue: 0,
86
+ table: {
87
+ type: { summary: 'number' },
88
+ defaultValue: { summary: 0 },
89
+ },
27
90
  },
28
91
  glass: {
29
92
  control: 'boolean',
30
93
  description: 'Enable glass morphism effect',
94
+ table: {
95
+ type: { summary: 'boolean | GlassProps' },
96
+ defaultValue: { summary: false },
97
+ },
98
+ },
99
+ onChange: {
100
+ action: 'tab changed',
101
+ description: 'Callback when active tab changes',
102
+ },
103
+ className: {
104
+ control: 'text',
105
+ description: 'Additional CSS classes for the component',
106
+ table: {
107
+ type: { summary: 'string' },
108
+ defaultValue: { summary: '-' },
109
+ },
31
110
  },
32
111
  },
33
112
  } satisfies Meta<typeof Tabs>;
@@ -35,10 +114,7 @@ const meta = {
35
114
  export default meta;
36
115
  type Story = StoryObj<typeof meta>;
37
116
 
38
- /**
39
- * Default tabs component with three tabs.
40
- */
41
- export const Default: Story = {
117
+ export const BasicUsage: Story = {
42
118
  render: args => (
43
119
  <div style={{ maxWidth: '600px', margin: '0 auto', padding: '30px' }}>
44
120
  <Tabs {...args} />
@@ -61,11 +137,15 @@ export const Default: Story = {
61
137
  ],
62
138
  activeIndex: 0,
63
139
  },
140
+ parameters: {
141
+ docs: {
142
+ description: {
143
+ story: 'Basic tabs component with three tabs.',
144
+ },
145
+ },
146
+ },
64
147
  };
65
148
 
66
- /**
67
- * Tabs with a different tab initially active (Tab 2).
68
- */
69
149
  export const WithDifferentActiveTab: Story = {
70
150
  render: args => (
71
151
  <div style={{ maxWidth: '600px', margin: '0 auto', padding: '30px' }}>
@@ -89,6 +169,54 @@ export const WithDifferentActiveTab: Story = {
89
169
  ],
90
170
  activeIndex: 1,
91
171
  },
172
+ parameters: {
173
+ docs: {
174
+ description: {
175
+ story: 'Tabs with a different tab initially active (Tab 2).',
176
+ },
177
+ },
178
+ },
179
+ };
180
+
181
+ export const WithGlassEffect: Story = {
182
+ render: args => (
183
+ <div
184
+ style={{
185
+ maxWidth: '600px',
186
+ margin: '0 auto',
187
+ padding: '30px',
188
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
189
+ minHeight: '300px',
190
+ }}
191
+ >
192
+ <Tabs {...args} />
193
+ </div>
194
+ ),
195
+ args: {
196
+ items: [
197
+ {
198
+ label: 'Tab 1',
199
+ content: <p>This is the content for Tab 1 with glass effect.</p>,
200
+ },
201
+ {
202
+ label: 'Tab 2',
203
+ content: <p>This is the content for Tab 2 with glass effect.</p>,
204
+ },
205
+ {
206
+ label: 'Tab 3',
207
+ content: <p>This is the content for Tab 3 with glass effect.</p>,
208
+ },
209
+ ],
210
+ activeIndex: 0,
211
+ glass: true,
212
+ },
213
+ parameters: {
214
+ docs: {
215
+ description: {
216
+ story: 'Tabs with glass morphism effect applied.',
217
+ },
218
+ },
219
+ },
92
220
  };
93
221
 
94
222
  /**
@@ -98,7 +226,8 @@ export const WithRichContent: Story = {
98
226
  parameters: {
99
227
  docs: {
100
228
  description: {
101
- story: 'Demonstrates tabs containing rich HTML content including headings, lists, and tables, showing the flexibility of the tabs component.',
229
+ story:
230
+ 'Demonstrates tabs containing rich HTML content including headings, lists, and tables, showing the flexibility of the tabs component.',
102
231
  },
103
232
  },
104
233
  },
@@ -266,4 +395,4 @@ export const GlassCustom: Story = {
266
395
  </div>
267
396
  </div>
268
397
  ),
269
- };
398
+ };
@@ -61,83 +61,85 @@ export interface TabsProps {
61
61
  /**
62
62
  * Tabs component for switching between different content panels
63
63
  */
64
- export const Tabs: React.FC<TabsProps> = memo(({
65
- items,
66
- activeIndex = TAB.DEFAULTS.ACTIVE_INDEX,
67
- onTabChange,
68
- className = '',
69
- style,
70
- glass,
71
- }) => {
72
- const [currentTab, setCurrentTab] = useState(activeIndex);
73
-
74
- // Handle tab change
75
- const handleTabClick = (index: number) => {
76
- setCurrentTab(index);
77
- if (onTabChange) {
78
- onTabChange(index);
79
- }
80
- };
81
-
82
- const tabContent = (
83
- <div className={`c-tabs js-atomix-tab ${className}`} style={style}>
84
- <ul className="c-tabs__nav">
85
- {items.map((item, index) => (
86
- <li className="c-tabs__nav-item" key={`tab-nav-${index}`}>
87
- <button
88
- className={`c-tabs__nav-btn ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
89
- onClick={() => handleTabClick(index)}
64
+ export const Tabs: React.FC<TabsProps> = memo(
65
+ ({
66
+ items,
67
+ activeIndex = TAB.DEFAULTS.ACTIVE_INDEX,
68
+ onTabChange,
69
+ className = '',
70
+ style,
71
+ glass,
72
+ }) => {
73
+ const [currentTab, setCurrentTab] = useState(activeIndex);
74
+
75
+ // Handle tab change
76
+ const handleTabClick = (index: number) => {
77
+ setCurrentTab(index);
78
+ if (onTabChange) {
79
+ onTabChange(index);
80
+ }
81
+ };
82
+
83
+ const tabContent = (
84
+ <div className={`c-tabs js-atomix-tab ${className}`} style={style}>
85
+ <ul className="c-tabs__nav">
86
+ {items.map((item, index) => (
87
+ <li className="c-tabs__nav-item" key={`tab-nav-${index}`}>
88
+ <button
89
+ className={`c-tabs__nav-btn ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
90
+ onClick={() => handleTabClick(index)}
91
+ data-tabindex={index}
92
+ role="tab"
93
+ aria-selected={index === currentTab}
94
+ aria-controls={`tab-panel-${index}`}
95
+ >
96
+ {item.label}
97
+ </button>
98
+ </li>
99
+ ))}
100
+ </ul>
101
+ <div className="c-tabs__panels">
102
+ {items.map((item, index) => (
103
+ <div
104
+ className={`c-tabs__panel ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
105
+ key={`tab-panel-${index}`}
90
106
  data-tabindex={index}
91
- role="tab"
92
- aria-selected={index === currentTab}
93
- aria-controls={`tab-panel-${index}`}
107
+ id={`tab-panel-${index}`}
108
+ role="tabpanel"
109
+ aria-labelledby={`tab-nav-${index}`}
110
+ style={{
111
+ height: index === currentTab ? 'auto' : '0px',
112
+ opacity: index === currentTab ? 1 : 0,
113
+ overflow: 'hidden',
114
+ transition: 'height 0.3s ease, opacity 0.3s ease',
115
+ }}
94
116
  >
95
- {item.label}
96
- </button>
97
- </li>
98
- ))}
99
- </ul>
100
- <div className="c-tabs__panels">
101
- {items.map((item, index) => (
102
- <div
103
- className={`c-tabs__panel ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
104
- key={`tab-panel-${index}`}
105
- data-tabindex={index}
106
- id={`tab-panel-${index}`}
107
- role="tabpanel"
108
- aria-labelledby={`tab-nav-${index}`}
109
- style={{
110
- height: index === currentTab ? 'auto' : '0px',
111
- opacity: index === currentTab ? 1 : 0,
112
- overflow: 'hidden',
113
- transition: 'height 0.3s ease, opacity 0.3s ease',
114
- }}
115
- >
116
- <div className="c-tabs__panel-body">{item.content}</div>
117
- </div>
118
- ))}
117
+ <div className="c-tabs__panel-body">{item.content}</div>
118
+ </div>
119
+ ))}
120
+ </div>
119
121
  </div>
120
- </div>
121
- );
122
-
123
- if (glass) {
124
- // Default glass settings for tabs
125
- const defaultGlassProps = {
126
- displacementScale: 60,
127
- blurAmount: 1,
128
- saturation: 160,
129
- aberrationIntensity: 0.5,
130
- cornerRadius: 8,
131
- mode: 'shader' as const,
132
- };
133
-
134
- const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
122
+ );
123
+
124
+ if (glass) {
125
+ // Default glass settings for tabs
126
+ const defaultGlassProps = {
127
+ displacementScale: 60,
128
+ blurAmount: 1,
129
+ saturation: 160,
130
+ aberrationIntensity: 0.5,
131
+ cornerRadius: 8,
132
+ mode: 'shader' as const,
133
+ };
134
+
135
+ const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
136
+
137
+ return <AtomixGlass {...glassProps}>{tabContent}</AtomixGlass>;
138
+ }
135
139
 
136
- return <AtomixGlass {...glassProps}>{tabContent}</AtomixGlass>;
140
+ return tabContent;
137
141
  }
138
-
139
- return tabContent;
140
- });
142
+ );
141
143
 
142
144
  Tabs.displayName = 'Tabs';
143
145
 
@@ -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 { Testimonial } from './Testimonial';
4
5
 
5
6
  const meta = {
@@ -9,20 +10,108 @@ const meta = {
9
10
  layout: 'centered',
10
11
  docs: {
11
12
  description: {
12
- component:
13
- 'The Testimonial component displays customer reviews, quotes, or endorsements with author information and avatars. It supports multiple sizes, skeleton loading states, and can display rich content. Testimonials are ideal for showcasing social proof, customer feedback, or featured quotes on landing pages and marketing sites.',
13
+ component: `
14
+ # Testimonial
15
+
16
+ ## Overview
17
+
18
+ Testimonial component displays customer reviews, quotes, or endorsements with author information and avatars. It supports multiple sizes, skeleton loading states, and can display rich content. Testimonials are ideal for showcasing social proof, customer feedback, or featured quotes on landing pages and marketing sites.
19
+
20
+ ## Features
21
+
22
+ - Customer quotes with author information
23
+ - Avatar display with author details
24
+ - Multiple size variants
25
+ - Skeleton loading states
26
+ - Responsive design
27
+ - Accessible markup
28
+ - Customizable styling
29
+
30
+ ## Accessibility
31
+
32
+ - Screen reader: Quote and author information announced properly
33
+ - ARIA support: Proper roles and properties for testimonial components
34
+ - Keyboard support: Accessible via keyboard navigation
35
+ - Focus management: Maintains focus on interactive elements
36
+
37
+ ## Usage Examples
38
+
39
+ ### Basic Usage
40
+
41
+ \`\`\`tsx
42
+ <Testimonial
43
+ quote="Great product!"
44
+ author={{
45
+ name: 'John Doe',
46
+ role: 'Customer',
47
+ avatarSrc: '/path/to/avatar.jpg',
48
+ avatarAlt: 'John Doe'
49
+ }}
50
+ />
51
+ \`\`\`
52
+
53
+ ### With Size Variant
54
+
55
+ \`\`\`tsx
56
+ <Testimonial
57
+ quote="Great product!"
58
+ author={{
59
+ name: 'John Doe',
60
+ role: 'Customer',
61
+ avatarSrc: '/path/to/avatar.jpg',
62
+ avatarAlt: 'John Doe'
63
+ }}
64
+ size="lg"
65
+ />
66
+ \`\`\`
67
+
68
+ ## API Reference
69
+
70
+ ### Props
71
+
72
+ | Prop | Type | Default | Description |
73
+ | ---- | ---- | ------- | ----------- |
74
+ | quote | string | - | The testimonial quote text |
75
+ | author | AuthorInfo | - | Information about the testimonial author |
76
+ | size | '' \\| 'sm' \\| 'lg' | '' | Size variant of the testimonial |
77
+ | skeleton | boolean | false | Whether to show skeleton loading state |
78
+ `,
14
79
  },
15
80
  },
16
81
  },
17
82
  tags: ['autodocs'],
18
83
  argTypes: {
84
+ quote: {
85
+ control: 'text',
86
+ description: 'The testimonial quote text',
87
+ table: {
88
+ type: { summary: 'string' },
89
+ defaultValue: { summary: '-' },
90
+ },
91
+ },
92
+ author: {
93
+ control: 'object',
94
+ description: 'Information about the testimonial author',
95
+ table: {
96
+ type: { summary: 'AuthorInfo' },
97
+ defaultValue: { summary: '-' },
98
+ },
99
+ },
19
100
  size: {
20
101
  control: { type: 'select', options: ['', 'sm', 'lg'] },
21
102
  description: 'Size variant of the testimonial',
103
+ table: {
104
+ type: { summary: '"" | "sm" | "lg"' },
105
+ defaultValue: { summary: '' },
106
+ },
22
107
  },
23
108
  skeleton: {
24
109
  control: 'boolean',
25
110
  description: 'Whether to show skeleton loading state',
111
+ table: {
112
+ type: { summary: 'boolean' },
113
+ defaultValue: { summary: false },
114
+ },
26
115
  },
27
116
  },
28
117
  } satisfies Meta<typeof Testimonial>;
@@ -31,7 +120,7 @@ export default meta;
31
120
  type Story = StoryObj<typeof meta>;
32
121
 
33
122
  // Default testimonial
34
- export const Default: Story = {
123
+ export const BasicUsage: Story = {
35
124
  render: args => (
36
125
  <div style={{ padding: '30px' }}>
37
126
  <Testimonial {...args} />
@@ -49,6 +138,13 @@ export const Default: Story = {
49
138
  },
50
139
  size: '',
51
140
  },
141
+ parameters: {
142
+ docs: {
143
+ description: {
144
+ story: 'Basic testimonial with default size.',
145
+ },
146
+ },
147
+ },
52
148
  };
53
149
 
54
150
  // Large testimonial
@@ -70,6 +166,13 @@ export const Large: Story = {
70
166
  },
71
167
  size: 'lg',
72
168
  },
169
+ parameters: {
170
+ docs: {
171
+ description: {
172
+ story: 'Large testimonial with expanded size.',
173
+ },
174
+ },
175
+ },
73
176
  };
74
177
 
75
178
  // Small testimonial
@@ -91,6 +194,13 @@ export const Small: Story = {
91
194
  },
92
195
  size: 'sm',
93
196
  },
197
+ parameters: {
198
+ docs: {
199
+ description: {
200
+ story: 'Small testimonial with compact size.',
201
+ },
202
+ },
203
+ },
94
204
  };
95
205
 
96
206
  // Skeleton loading state
@@ -104,6 +214,13 @@ export const Skeleton: Story = {
104
214
  skeleton: true,
105
215
  size: '',
106
216
  },
217
+ parameters: {
218
+ docs: {
219
+ description: {
220
+ story: 'Testimonial showing skeleton loading state.',
221
+ },
222
+ },
223
+ },
107
224
  };
108
225
 
109
226
  // Large skeleton