@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
@@ -52,241 +52,141 @@ export interface BackgroundWrapperProps {
52
52
  'aria-hidden'?: 'true' | 'false' | boolean;
53
53
  }
54
54
 
55
- /**
56
- * Interactive Story Container
57
- *
58
- * A container that provides mouse tracking and interactive background effects
59
- * for enhanced storytelling and demonstration purposes.
60
- */
61
- export interface StoryContainerProps {
62
- children: React.ReactNode;
63
- style?: React.CSSProperties;
64
- interactive?: boolean;
65
- }
66
-
67
- /**
68
- * Interactive Wrapper Component
69
- *
70
- * Provides mouse position tracking and offset calculations for interactive stories
71
- */
72
- export interface InteractiveWrapperProps {
73
- children: (
74
- mousePos: { x: number; y: number },
75
- mouseOffset: { x: number; y: number },
76
- containerRef: RefObject<HTMLDivElement>
77
- ) => React.ReactNode;
78
- }
79
-
80
- /**
81
- * Collection of high-quality background images for different moods and scenarios
82
- *
83
- * This array provides a variety of background options that work well with the
84
- * AtomixGlass component, showcasing different visual styles and contexts.
85
- */
86
- export const backgroundImages = [
87
- // 0: Modern office interior with natural lighting
88
- 'https://images.pexels.com/photos/5653101/pexels-photo-5653101.jpeg',
89
- // 1: Beautiful natural landscape - mountains and lake
90
- 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
91
- // 2: Urban cityscape with modern buildings
92
- 'https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
93
- // 3: Forest path with sunlight filtering through trees
94
- 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
95
- // 4: Ocean waves and beach scene
96
- 'https://images.unsplash.com/photo-1505142468610-359e7d316be0?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
97
- // 5: Modern architecture with glass facades
98
- 'https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
99
- // 6: Cozy café interior with warm lighting
100
- 'https://images.unsplash.com/photo-1554118811-1e0d58224f24?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
101
- // 7: Desert landscape with dramatic sky
102
- 'https://images.unsplash.com/photo-1509316785289-025f5b846b35?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
103
- // 8: Tropical paradise with palm trees and ocean
104
- 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
105
- // 9: Modern library or workspace with natural light
106
- 'https://images.unsplash.com/photo-1521587760476-6c12a4b040da?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
107
- ];
108
-
109
- /**
110
- * BackgroundWrapper Component Implementation
111
- *
112
- * Renders a container with a background image and optional overlay,
113
- * providing a consistent environment for showcasing the AtomixGlass component.
114
- *
115
- * @param props - BackgroundWrapperProps
116
- * @returns JSX.Element
117
- */
118
- export const BackgroundWrapper = ({
55
+ export const BackgroundWrapper: React.FC<BackgroundWrapperProps> = ({
119
56
  children,
120
57
  backgroundImage,
121
58
  backgroundIndex,
122
59
  overlay = false,
123
- overlayColor = 'rgba(0,0,0,0)',
124
- overlayOpacity = 0,
125
- height = '97vh',
126
- width = '97vw',
127
- borderRadius = '12px',
60
+ overlayColor = 'rgba(0, 0, 0, 0.5)',
61
+ overlayOpacity = 0.5,
62
+ height = '100vh',
63
+ width = '100vw',
64
+ borderRadius = '0',
65
+ padding = '0',
128
66
  className = '',
129
67
  style = {},
130
- }: BackgroundWrapperProps) => {
131
- // If backgroundIndex is provided, use it to select from the backgroundImages array
68
+ interactive = false,
69
+ 'aria-hidden': ariaHidden,
70
+ }) => {
71
+ // Use the background image if provided, otherwise use the indexed one from backgroundImages
132
72
  const bgImage =
133
- backgroundIndex !== undefined ? backgroundImages[backgroundIndex] : backgroundImage;
134
-
135
- // Apply default overlay settings if overlay flag is true using nullish coalescing
136
- const finalOverlayColor = overlay ? 'rgba(0,0,0,0.5)' : (overlayColor ?? 'rgba(0,0,0,0)');
137
- const finalOverlayOpacity = overlay ? 0.5 : (overlayOpacity ?? 0);
73
+ backgroundImage ||
74
+ (backgroundIndex !== undefined ? backgroundImages[backgroundIndex] : backgroundImages[0]);
75
+
76
+ const bgStyle = {
77
+ backgroundImage: bgImage ? `url(${bgImage})` : undefined,
78
+ height,
79
+ width,
80
+ borderRadius,
81
+ padding,
82
+ ...style,
83
+ };
138
84
 
139
85
  return (
140
86
  <div
141
- className={`c-atomix-glass-background ${className}`}
142
- style={{
143
- position: 'relative',
144
- height: height,
145
- width: width,
146
- backgroundColor: !bgImage ? '#1a1a2e' : undefined, // Fallback color if no image
147
- background: bgImage ? `url(${bgImage})` : undefined,
148
- backgroundSize: 'cover',
149
- backgroundPosition: 'center',
150
- backgroundAttachment: 'fixed',
151
- display: 'flex',
152
- alignItems: 'center',
153
- justifyContent: 'center',
154
- borderRadius: borderRadius,
155
- overflow: 'auto',
156
- ...style,
157
- }}
87
+ className={`u-relative u-overflow-hidden ${className}`}
88
+ style={bgStyle}
89
+ aria-hidden={ariaHidden}
158
90
  >
159
- {/* Overlay */}
160
- {(finalOverlayOpacity > 0 || overlay) && (
91
+ {overlay && (
161
92
  <div
93
+ className="u-absolute u-inset-0"
162
94
  style={{
163
- position: 'absolute',
164
- inset: 0,
165
- backgroundColor: finalOverlayColor,
166
- opacity: finalOverlayOpacity,
167
- borderRadius: borderRadius,
168
- pointerEvents: 'none',
95
+ backgroundColor: overlayColor,
96
+ opacity: overlayOpacity,
169
97
  }}
170
98
  />
171
99
  )}
172
- <div
173
- style={{
174
- position: 'relative',
175
- width: '100%',
176
- height: '100%',
177
- display: 'flex',
178
- alignItems: 'center',
179
- justifyContent: 'center',
180
- color: 'white',
181
- }}
182
- >
183
- {children}
184
- </div>
100
+ <div className="u-relative u-z-10">{children}</div>
185
101
  </div>
186
102
  );
187
103
  };
188
104
 
189
105
  /**
190
- * Interactive Story Container Component
106
+ * Interactive Story Container
191
107
  *
192
108
  * A container that provides mouse tracking and interactive background effects
193
109
  * for enhanced storytelling and demonstration purposes.
194
110
  */
195
- export const StoryContainer = ({
111
+ export interface StoryContainerProps {
112
+ children: React.ReactNode;
113
+ className?: string;
114
+ style?: React.CSSProperties;
115
+ parallax?: boolean;
116
+ parallaxStrength?: number;
117
+ }
118
+
119
+ export const StoryContainer: React.FC<StoryContainerProps> = ({
196
120
  children,
121
+ className = '',
197
122
  style = {},
198
- interactive = false,
199
- }: StoryContainerProps) => {
123
+ parallax = false,
124
+ parallaxStrength = 20,
125
+ }) => {
200
126
  const containerRef = useRef<HTMLDivElement>(null);
201
- const [backgroundPosition, setBackgroundPosition] = useState({ x: 0, y: 0 });
127
+
128
+ const [position, setPosition] = useState({ x: 0, y: 0 });
202
129
 
203
130
  const handleMouseMove = useCallback(
204
131
  (e: MouseEvent) => {
205
- if (containerRef.current && interactive) {
206
- const rect = containerRef.current.getBoundingClientRect();
207
- const centerX = rect.left + rect.width / 2;
208
- const centerY = rect.top + rect.height / 2;
132
+ if (!containerRef.current || !parallax) return;
133
+
134
+ const rect = containerRef.current.getBoundingClientRect();
135
+ const x = e.clientX - rect.left;
136
+ const y = e.clientY - rect.top;
137
+
138
+ const centerX = rect.width / 2;
139
+ const centerY = rect.height / 2;
209
140
 
210
- // Calculate offset as a percentage
211
- const offsetX = ((e.clientX - centerX) / rect.width) * 100;
212
- const offsetY = ((e.clientY - centerY) / rect.height) * 100;
141
+ const moveX = ((x - centerX) / centerX) * parallaxStrength;
142
+ const moveY = ((y - centerY) / centerY) * parallaxStrength;
213
143
 
214
- setBackgroundPosition({ x: offsetX, y: offsetY });
215
- }
144
+ setPosition({ x: -moveX, y: -moveY });
216
145
  },
217
- [interactive]
146
+ [parallax, parallaxStrength]
218
147
  );
219
148
 
220
149
  useEffect(() => {
221
- const currentRef = containerRef.current;
222
- if (currentRef && interactive) {
223
- currentRef.addEventListener('mousemove', handleMouseMove);
224
- return () => {
225
- currentRef.removeEventListener('mousemove', handleMouseMove);
226
- };
227
- }
228
- return undefined;
229
- }, [handleMouseMove, interactive]);
150
+ if (!parallax) return;
151
+
152
+ const container = containerRef.current;
153
+ if (!container) return;
154
+
155
+ container.addEventListener('mousemove', handleMouseMove as any);
156
+ return () => {
157
+ container.removeEventListener('mousemove', handleMouseMove as any);
158
+ };
159
+ }, [handleMouseMove, parallax]);
230
160
 
231
161
  return (
232
162
  <div
233
163
  ref={containerRef}
234
- style={{
235
- width: '100vw',
236
- height: '100vh',
237
- display: 'flex',
238
- alignItems: 'center',
239
- justifyContent: 'center',
240
- backgroundImage: interactive
241
- ? 'url(https://images.unsplash.com/photo-1497366216548-37526070297c?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D)'
242
- : undefined,
243
- backgroundSize: interactive ? '160%' : 'cover',
244
- backgroundPosition: interactive
245
- ? `calc(50% + ${backgroundPosition.x}px) calc(50% + ${backgroundPosition.y}px)`
246
- : 'center',
247
- ...style,
248
- }}
164
+ className={`u-relative u-overflow-hidden u-w-full u-h-screen ${className}`}
165
+ style={style}
249
166
  >
250
- {children}
167
+ {parallax ? (
168
+ <div
169
+ className="u-absolute u-inset-0 u-transition-transform u-duration-100 u-ease-linear"
170
+ style={{
171
+ transform: `translate(${position.x}px, ${position.y}px)`,
172
+ zIndex: -1,
173
+ }}
174
+ >
175
+ {children}
176
+ </div>
177
+ ) : (
178
+ <>{children}</>
179
+ )}
251
180
  </div>
252
181
  );
253
182
  };
254
183
 
255
184
  /**
256
- * Interactive Wrapper Component
257
- *
258
- * Provides mouse position tracking and offset calculations for interactive stories
185
+ * Collection of high-quality background images for different moods and scenarios
259
186
  */
260
- export const InteractiveWrapper = ({ children }: InteractiveWrapperProps) => {
261
- const containerRef = useRef<HTMLDivElement>(null);
262
- const [mousePos, setMousePos] = useState({ x: 0, y: 0 });
263
- const [mouseOffset, setMouseOffset] = useState({ x: 0, y: 0 });
264
-
265
- const handleMouseMove = useCallback((e: MouseEvent) => {
266
- if (containerRef.current) {
267
- const rect = containerRef.current.getBoundingClientRect();
268
- const centerX = rect.left + rect.width / 2;
269
- const centerY = rect.top + rect.height / 2;
270
-
271
- setMouseOffset({
272
- x: ((e.clientX - centerX) / rect.width) * 100,
273
- y: ((e.clientY - centerY) / rect.height) * 100,
274
- });
275
- }
276
- setMousePos({ x: e.clientX, y: e.clientY });
277
- }, []);
278
-
279
- useEffect(() => {
280
- const currentRef = containerRef.current;
281
- currentRef?.addEventListener('mousemove', handleMouseMove);
282
- return () => {
283
- currentRef?.removeEventListener('mousemove', handleMouseMove);
284
- };
285
- }, [handleMouseMove]);
286
-
287
- return (
288
- <div ref={containerRef} style={{ width: '100%', height: '100%' }}>
289
- {children(mousePos, mouseOffset, containerRef)}
290
- </div>
291
- );
292
- };
187
+ export const backgroundImages = [
188
+ 'https://images.unsplash.com/photo-1637825891028-564f672aa42c?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
189
+ 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
190
+ 'https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2670',
191
+ 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
192
+ ];
@@ -20,31 +20,77 @@ const meta = {
20
20
  src: {
21
21
  control: 'text',
22
22
  description: 'Avatar image source URL',
23
+ table: {
24
+ category: 'Main',
25
+ },
23
26
  },
24
27
  alt: {
25
28
  control: 'text',
26
29
  description: 'Alt text for the avatar image',
30
+ table: {
31
+ category: 'Main',
32
+ },
27
33
  },
28
34
  initials: {
29
35
  control: 'text',
30
36
  description: 'Initials to display when no image is available',
37
+ table: {
38
+ category: 'Main',
39
+ },
31
40
  },
32
41
  icon: {
33
42
  control: { disable: true },
34
43
  description: 'Icon to display when no image or initials are available',
44
+ table: {
45
+ category: 'Main',
46
+ },
35
47
  },
36
48
  size: {
37
49
  control: { type: 'select' },
38
50
  options: ['xs', 'sm', 'md', 'lg', 'xl'],
39
51
  description: 'Size variant for the avatar',
52
+ table: {
53
+ category: 'Style',
54
+ defaultValue: { summary: 'md' },
55
+ },
40
56
  },
41
57
  circle: {
42
58
  control: 'boolean',
43
59
  description: 'Whether to make the avatar circular',
60
+ table: {
61
+ category: 'Style',
62
+ defaultValue: { summary: 'false' },
63
+ },
44
64
  },
45
65
  disabled: {
46
66
  control: 'boolean',
47
67
  description: 'Whether the avatar is disabled',
68
+ table: {
69
+ category: 'State',
70
+ defaultValue: { summary: 'false' },
71
+ },
72
+ },
73
+ className: {
74
+ control: 'text',
75
+ description: 'Additional CSS classes',
76
+ table: {
77
+ category: 'Misc',
78
+ },
79
+ },
80
+ style: {
81
+ control: 'object',
82
+ description: 'Inline styles',
83
+ table: {
84
+ category: 'Misc',
85
+ },
86
+ },
87
+ glass: {
88
+ control: 'boolean',
89
+ description: 'Apply glassmorphism effect',
90
+ table: {
91
+ category: 'Style',
92
+ defaultValue: { summary: 'false' },
93
+ },
48
94
  },
49
95
  },
50
96
  } satisfies Meta<typeof Avatar>;
@@ -60,6 +106,141 @@ export const Basic: Story = {
60
106
  size: 'md',
61
107
  circle: false,
62
108
  },
109
+ parameters: {
110
+ docs: {
111
+ description: {
112
+ story: 'Basic avatar with an image source',
113
+ },
114
+ },
115
+ },
116
+ };
117
+
118
+ // Avatar with Initials
119
+ export const WithInitials: Story = {
120
+ args: {
121
+ initials: 'JD',
122
+ size: 'md',
123
+ circle: true,
124
+ },
125
+ parameters: {
126
+ docs: {
127
+ description: {
128
+ story: 'Avatar displaying user initials when no image is available',
129
+ },
130
+ },
131
+ },
132
+ };
133
+
134
+ // Avatar with Icon
135
+ export const WithIcon: Story = {
136
+ args: {
137
+ icon: <Icon name="User" size="md" />,
138
+ size: 'md',
139
+ circle: true,
140
+ },
141
+ parameters: {
142
+ docs: {
143
+ description: {
144
+ story: 'Avatar displaying an icon when no image or initials are available',
145
+ },
146
+ },
147
+ },
148
+ };
149
+
150
+ // Avatar Sizes
151
+ export const Sizes: Story = {
152
+ render: () => {
153
+ const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
154
+
155
+ return (
156
+ <div className="u-flex u-gap-4 u-flex-wrap u-items-center">
157
+ {sizes.map(size => (
158
+ <div key={size} className="u-flex u-flex-col u-items-center u-gap-2">
159
+ <Avatar
160
+ src={`https://i.pravatar.cc/150?img=${size === 'xs' ? 1 : size === 'sm' ? 2 : size === 'md' ? 3 : size === 'lg' ? 4 : 5}`}
161
+ size={size}
162
+ circle
163
+ />
164
+ <span className="u-text-xs u-capitalize">{size}</span>
165
+ </div>
166
+ ))}
167
+ </div>
168
+ );
169
+ },
170
+ parameters: {
171
+ docs: {
172
+ description: {
173
+ story: 'Different avatar sizes from extra-small to extra-large',
174
+ },
175
+ },
176
+ },
177
+ };
178
+
179
+ // Avatar Shapes
180
+ export const Shapes: Story = {
181
+ render: () => {
182
+ return (
183
+ <div className="u-flex u-gap-6 u-items-center">
184
+ <div className="u-flex u-flex-col u-items-center u-gap-2">
185
+ <Avatar src="https://i.pravatar.cc/150?img=6" size="md" circle={false} />
186
+ <span className="u-text-xs">Square</span>
187
+ </div>
188
+ <div className="u-flex u-flex-col u-items-center u-gap-2">
189
+ <Avatar src="https://i.pravatar.cc/150?img=7" size="md" circle={true} />
190
+ <span className="u-text-xs">Circle</span>
191
+ </div>
192
+ </div>
193
+ );
194
+ },
195
+ parameters: {
196
+ docs: {
197
+ description: {
198
+ story: 'Avatar shapes: square and circle',
199
+ },
200
+ },
201
+ },
202
+ };
203
+
204
+ // Avatar States
205
+ export const States: Story = {
206
+ render: () => {
207
+ return (
208
+ <div className="u-flex u-gap-6 u-items-center">
209
+ <div className="u-flex u-flex-col u-items-center u-gap-2">
210
+ <Avatar src="https://i.pravatar.cc/150?img=8" size="md" circle />
211
+ <span className="u-text-xs">Default</span>
212
+ </div>
213
+ <div className="u-flex u-flex-col u-items-center u-gap-2">
214
+ <Avatar src="https://i.pravatar.cc/150?img=9" size="md" circle disabled />
215
+ <span className="u-text-xs">Disabled</span>
216
+ </div>
217
+ </div>
218
+ );
219
+ },
220
+ parameters: {
221
+ docs: {
222
+ description: {
223
+ story: 'Avatar states: default and disabled',
224
+ },
225
+ },
226
+ },
227
+ };
228
+
229
+ // Avatar with Glass Effect
230
+ export const WithGlassEffect: Story = {
231
+ args: {
232
+ src: 'https://i.pravatar.cc/150?img=10',
233
+ size: 'md',
234
+ circle: true,
235
+ glass: true,
236
+ },
237
+ parameters: {
238
+ docs: {
239
+ description: {
240
+ story: 'Avatar with glassmorphism effect',
241
+ },
242
+ },
243
+ },
63
244
  };
64
245
 
65
246
  // Avatar Variants Showcase
@@ -156,6 +337,13 @@ export const VariantsShowcase: Story = {
156
337
  </div>
157
338
  );
158
339
  },
340
+ parameters: {
341
+ docs: {
342
+ description: {
343
+ story: 'Comprehensive showcase of avatar variants across all sizes',
344
+ },
345
+ },
346
+ },
159
347
  };
160
348
 
161
349
  // Avatar Group Showcase
@@ -261,4 +449,11 @@ export const AvatarGroupShowcase: Story = {
261
449
  </div>
262
450
  );
263
451
  },
452
+ parameters: {
453
+ docs: {
454
+ description: {
455
+ story: 'Various configurations of AvatarGroup component',
456
+ },
457
+ },
458
+ },
264
459
  };