@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
@@ -15,12 +15,12 @@ interface UseHeroResult {
15
15
  /**
16
16
  * Generate image column class based on size
17
17
  */
18
- generateImageColClass: (size?: number) => string;
18
+ generateImageColClass: (size?: number, customClass?: string) => string;
19
19
 
20
20
  /**
21
21
  * Generate content column class based on size
22
22
  */
23
- generateContentColClass: (size?: number) => string;
23
+ generateContentColClass: (size?: number, customClass?: string) => string;
24
24
 
25
25
  /**
26
26
  * Determine if the hero has a background image
@@ -73,7 +73,7 @@ interface UseHeroResult {
73
73
  * @param initialProps - Initial hero props
74
74
  * @returns Hero methods
75
75
  */
76
- export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
76
+ export function useHero(initialProps?: HeroProps): UseHeroResult {
77
77
  const heroRef = useRef<HTMLDivElement>(null);
78
78
  const videoRef = useRef<HTMLVideoElement>(null);
79
79
  const parallaxHandlerRef = useRef<((event: Event) => void) | null>(null);
@@ -88,6 +88,8 @@ export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
88
88
  contentWidth: undefined,
89
89
  parallax: false,
90
90
  parallaxIntensity: 0.5,
91
+ headingLevel: 'h1',
92
+ reverseOnMobile: false,
91
93
  ...initialProps,
92
94
  };
93
95
 
@@ -100,15 +102,16 @@ export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
100
102
  * Initialize background slider hook - always call hook, conditionally use result
101
103
  */
102
104
  const backgroundSliderResult = useHeroBackgroundSlider(
103
- defaultProps.backgroundSlider || {
104
- slides: [],
105
- autoplay: { delay: 5000, pauseOnHover: true }
105
+ defaultProps.backgroundSlider || {
106
+ slides: [],
107
+ autoplay: { delay: 5000, pauseOnHover: true },
108
+ transition: 'fade',
109
+ transitionDuration: 1000,
106
110
  }
107
111
  );
108
-
109
- const backgroundSlider = hasBackgroundSlider && defaultProps.backgroundSlider
110
- ? backgroundSliderResult
111
- : undefined;
112
+
113
+ const backgroundSlider =
114
+ hasBackgroundSlider && defaultProps.backgroundSlider ? backgroundSliderResult : undefined;
112
115
 
113
116
  /**
114
117
  * Check if the hero has a background image
@@ -198,7 +201,12 @@ export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
198
201
  removeParallaxEffect(heroElement);
199
202
  }
200
203
  };
201
- }, [defaultProps.parallax, defaultProps.parallaxIntensity, hasBackgroundImage, hasBackgroundSlider]);
204
+ }, [
205
+ defaultProps.parallax,
206
+ defaultProps.parallaxIntensity,
207
+ hasBackgroundImage,
208
+ hasBackgroundSlider,
209
+ ]);
202
210
 
203
211
  /**
204
212
  * Generate hero class names based on props
@@ -247,9 +255,13 @@ export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
247
255
  /**
248
256
  * Generate image column class based on size
249
257
  * @param size - Column size (1-12)
258
+ * @param customClass - Optional custom class name
250
259
  * @returns Column class
251
260
  */
252
- const generateImageColClass = (size: number = defaultProps.imageColSize || 7): string => {
261
+ const generateImageColClass = (
262
+ size: number = defaultProps.imageColSize || 7,
263
+ customClass?: string
264
+ ): string => {
253
265
  const classes = [`o-grid__col o-grid__col--md-${size}`];
254
266
 
255
267
  // Add responsive margin if needed for mobile view
@@ -257,16 +269,48 @@ export function useHero(initialProps?: Partial<HeroProps>): UseHeroResult {
257
269
  classes.push('u-mt-5 u-mt-md-0');
258
270
  }
259
271
 
272
+ // Handle mobile stacking order
273
+ if (defaultProps.reverseOnMobile) {
274
+ if (defaultProps.alignment === 'right' || defaultProps.alignment === 'center') {
275
+ classes.push('u-order-first u-order-md-last');
276
+ } else {
277
+ classes.push('u-order-last u-order-md-first');
278
+ }
279
+ }
280
+
281
+ if (customClass) {
282
+ classes.push(customClass);
283
+ }
284
+
260
285
  return classes.join(' ');
261
286
  };
262
287
 
263
288
  /**
264
289
  * Generate content column class based on size
265
290
  * @param size - Column size (1-12)
291
+ * @param customClass - Optional custom class name
266
292
  * @returns Column class
267
293
  */
268
- const generateContentColClass = (size: number = defaultProps.contentColSize || 5): string => {
269
- return `o-grid__col o-grid__col--md-${size}`;
294
+ const generateContentColClass = (
295
+ size: number = defaultProps.contentColSize || 5,
296
+ customClass?: string
297
+ ): string => {
298
+ const classes = [`o-grid__col o-grid__col--md-${size}`];
299
+
300
+ // Handle mobile stacking order
301
+ if (defaultProps.reverseOnMobile) {
302
+ if (defaultProps.alignment === 'right' || defaultProps.alignment === 'center') {
303
+ classes.push('u-order-last u-order-md-first');
304
+ } else {
305
+ classes.push('u-order-first u-order-md-last');
306
+ }
307
+ }
308
+
309
+ if (customClass) {
310
+ classes.push(customClass);
311
+ }
312
+
313
+ return classes.join(' ');
270
314
  };
271
315
 
272
316
  return {
@@ -49,13 +49,7 @@ export interface UseHeroBackgroundSliderResult {
49
49
  export function useHeroBackgroundSlider(
50
50
  config: HeroBackgroundSliderConfig
51
51
  ): UseHeroBackgroundSliderResult {
52
- const {
53
- slides,
54
- autoplay,
55
- loop = true,
56
- transition = 'fade',
57
- transitionDuration = 1000,
58
- } = config;
52
+ const { slides, autoplay, loop = true, transition = 'fade', transitionDuration = 1000 } = config;
59
53
 
60
54
  const [currentIndex, setCurrentIndex] = useState(0);
61
55
  const [isTransitioning, setIsTransitioning] = useState(false);
@@ -148,7 +142,7 @@ export function useHeroBackgroundSlider(
148
142
  if (isPausedRef.current && autoplay && slides.length > 1) {
149
143
  isPausedRef.current = false;
150
144
  const delay = typeof autoplay === 'object' ? autoplay.delay : 3000;
151
-
145
+
152
146
  // Restart autoplay
153
147
  if (!autoplayRef.current) {
154
148
  autoplayRef.current = setInterval(() => {
@@ -227,4 +221,3 @@ export function useHeroBackgroundSlider(
227
221
  resumeAutoplay,
228
222
  };
229
223
  }
230
-
@@ -6,14 +6,16 @@ import { INPUT } from '../constants/components';
6
6
  * @param initialProps - Initial input properties
7
7
  * @returns Input state and methods
8
8
  */
9
- export function useInput(initialProps?: Partial<InputProps> & {
10
- prefixIcon?: boolean;
11
- suffixIcon?: boolean;
12
- clearable?: boolean;
13
- showCounter?: boolean;
14
- showPasswordToggle?: boolean;
15
- fullWidth?: boolean;
16
- }) {
9
+ export function useInput(
10
+ initialProps?: Partial<InputProps> & {
11
+ prefixIcon?: boolean;
12
+ suffixIcon?: boolean;
13
+ clearable?: boolean;
14
+ showCounter?: boolean;
15
+ showPasswordToggle?: boolean;
16
+ fullWidth?: boolean;
17
+ }
18
+ ) {
17
19
  // Default input properties
18
20
  const defaultProps: Partial<InputProps> = {
19
21
  size: 'md',
@@ -19,9 +19,9 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
19
19
 
20
20
  // Local open state for when not controlled externally
21
21
  const [isOpenState, setIsOpenState] = useState(
22
- defaultProps.defaultCollapsedDesktop !== undefined
23
- ? !defaultProps.defaultCollapsedDesktop
24
- : (defaultProps.isOpen || false)
22
+ defaultProps.defaultCollapsedDesktop !== undefined
23
+ ? !defaultProps.defaultCollapsedDesktop
24
+ : defaultProps.isOpen || false
25
25
  );
26
26
 
27
27
  // Refs for managing responsive behavior
@@ -42,7 +42,8 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
42
42
  useEffect(() => {
43
43
  const isMobile = window.innerWidth < 768;
44
44
  const shouldCollapse = isMobile ? defaultProps.collapsible : defaultProps.collapsibleDesktop;
45
- const currentOpen = typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
45
+ const currentOpen =
46
+ typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
46
47
 
47
48
  if (shouldCollapse && wrapperRef.current && innerRef.current) {
48
49
  // Use setTimeout to ensure DOM is fully rendered
@@ -78,7 +79,7 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
78
79
  // Set proper height for vertical animation (both mobile and desktop)
79
80
  const currentOpen =
80
81
  typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
81
-
82
+
82
83
  // Use requestAnimationFrame to ensure DOM is ready
83
84
  requestAnimationFrame(() => {
84
85
  if (wrapperRef.current && innerRef.current) {
@@ -160,7 +160,7 @@ export const useTooltip = ({
160
160
  const [isPositioned, setIsPositioned] = useState(false);
161
161
  const [tooltipStyle, setTooltipStyle] = useState<React.CSSProperties>({});
162
162
  const [arrowStyle, setArrowStyle] = useState<React.CSSProperties>({});
163
-
163
+
164
164
  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
165
165
  const triggerRef = useRef<HTMLDivElement>(null);
166
166
  const tooltipRef = useRef<HTMLDivElement>(null);
@@ -282,4 +282,3 @@ export const useTooltip = ({
282
282
  };
283
283
 
284
284
  export default useTooltip;
285
-
@@ -170,7 +170,13 @@ export function useVideoPlayer({
170
170
 
171
171
  // Validate and sanitize the source URL
172
172
  const sanitizedSrc = String(newQuality.src).replace(/[<>"']/g, '');
173
- if (sanitizedSrc && (sanitizedSrc.startsWith('http://') || sanitizedSrc.startsWith('https://') || sanitizedSrc.startsWith('blob:') || sanitizedSrc.startsWith('data:'))) {
173
+ if (
174
+ sanitizedSrc &&
175
+ (sanitizedSrc.startsWith('http://') ||
176
+ sanitizedSrc.startsWith('https://') ||
177
+ sanitizedSrc.startsWith('blob:') ||
178
+ sanitizedSrc.startsWith('data:'))
179
+ ) {
174
180
  videoRef.current.src = sanitizedSrc;
175
181
  videoRef.current.currentTime = currentTime;
176
182
 
@@ -299,40 +305,43 @@ export function useVideoPlayer({
299
305
  }, [onFullscreenChange]);
300
306
 
301
307
  // Keyboard shortcuts
302
- const handleKeyDown = useCallback((e: KeyboardEvent) => {
303
- if (!containerRef.current?.contains(document.activeElement)) return;
304
-
305
- switch (e.code) {
306
- case 'Space':
307
- e.preventDefault();
308
- togglePlay();
309
- break;
310
- case 'ArrowLeft':
311
- e.preventDefault();
312
- seek(currentTime - 10);
313
- break;
314
- case 'ArrowRight':
315
- e.preventDefault();
316
- seek(currentTime + 10);
317
- break;
318
- case 'ArrowUp':
319
- e.preventDefault();
320
- setVolume(Math.min(1, volume + 0.1));
321
- break;
322
- case 'ArrowDown':
323
- e.preventDefault();
324
- setVolume(Math.max(0, volume - 0.1));
325
- break;
326
- case 'KeyM':
327
- e.preventDefault();
328
- toggleMute();
329
- break;
330
- case 'KeyF':
331
- e.preventDefault();
332
- toggleFullscreen();
333
- break;
334
- }
335
- }, [togglePlay, seek, currentTime, setVolume, volume, toggleMute, toggleFullscreen, containerRef]);
308
+ const handleKeyDown = useCallback(
309
+ (e: KeyboardEvent) => {
310
+ if (!containerRef.current?.contains(document.activeElement)) return;
311
+
312
+ switch (e.code) {
313
+ case 'Space':
314
+ e.preventDefault();
315
+ togglePlay();
316
+ break;
317
+ case 'ArrowLeft':
318
+ e.preventDefault();
319
+ seek(currentTime - 10);
320
+ break;
321
+ case 'ArrowRight':
322
+ e.preventDefault();
323
+ seek(currentTime + 10);
324
+ break;
325
+ case 'ArrowUp':
326
+ e.preventDefault();
327
+ setVolume(Math.min(1, volume + 0.1));
328
+ break;
329
+ case 'ArrowDown':
330
+ e.preventDefault();
331
+ setVolume(Math.max(0, volume - 0.1));
332
+ break;
333
+ case 'KeyM':
334
+ e.preventDefault();
335
+ toggleMute();
336
+ break;
337
+ case 'KeyF':
338
+ e.preventDefault();
339
+ toggleFullscreen();
340
+ break;
341
+ }
342
+ },
343
+ [togglePlay, seek, currentTime, setVolume, volume, toggleMute, toggleFullscreen, containerRef]
344
+ );
336
345
 
337
346
  useEffect(() => {
338
347
  document.addEventListener('keydown', handleKeyDown);