@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
@@ -171,7 +171,12 @@ export const VideoPlayer = forwardRef<HTMLVideoElement, VideoPlayerProps>(
171
171
  const video = videoRef.current;
172
172
  if (video) {
173
173
  const tracks = video.textTracks;
174
- console.log('Setting subtitle:', subtitleLang ? 'enabled' : 'disabled', 'Available tracks:', tracks.length);
174
+ console.log(
175
+ 'Setting subtitle:',
176
+ subtitleLang ? 'enabled' : 'disabled',
177
+ 'Available tracks:',
178
+ tracks.length
179
+ );
175
180
 
176
181
  // Hide all tracks first
177
182
  for (let i = 0; i < tracks.length; i++) {
@@ -110,9 +110,20 @@ export {
110
110
  type SideMenuListProps,
111
111
  } from './Navigation/SideMenu/SideMenuList';
112
112
  // Menu components
113
- export { Menu, MenuItem, MenuDivider, type MenuProps, type MenuItemProps, type MenuDividerProps } from './Navigation/Menu/Menu';
113
+ export {
114
+ Menu,
115
+ MenuItem,
116
+ MenuDivider,
117
+ type MenuProps,
118
+ type MenuItemProps,
119
+ type MenuDividerProps,
120
+ } from './Navigation/Menu/Menu';
114
121
  export { MegaMenu, MegaMenuColumn, MegaMenuLink } from './Navigation/Menu/MegaMenu';
115
- export type { MegaMenuProps, MegaMenuColumnProps, MegaMenuLinkProps } from '../lib/types/components';
122
+ export type {
123
+ MegaMenuProps,
124
+ MegaMenuColumnProps,
125
+ MegaMenuLinkProps,
126
+ } from '../lib/types/components';
116
127
  // Navigation sub-components
117
128
  export { NavDropdown, type NavDropdownProps } from './Navigation/Nav/NavDropdown';
118
129
  export { default as Pagination, type PaginationProps } from './Pagination/Pagination';
@@ -549,7 +549,9 @@ export const AlignmentAndSpacing: Story = {
549
549
  </p>
550
550
 
551
551
  <div className="u-mb-6">
552
- <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">justify-content="start"</h3>
552
+ <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">
553
+ justify-content="start"
554
+ </h3>
553
555
  <Row justifyContent="start" className="u-mb-4 u-p-3 u-bg-brand-subtle u-rounded">
554
556
  <GridCol xs={3}>
555
557
  <DemoCard variant="secondary">Col 1</DemoCard>
@@ -561,7 +563,9 @@ export const AlignmentAndSpacing: Story = {
561
563
  </div>
562
564
 
563
565
  <div className="u-mb-6">
564
- <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">justify-content="center"</h3>
566
+ <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">
567
+ justify-content="center"
568
+ </h3>
565
569
  <Row justifyContent="center" className="u-mb-4 u-p-3 u-bg-brand-subtle u-rounded">
566
570
  <GridCol xs={3}>
567
571
  <DemoCard variant="secondary">Col 1</DemoCard>
@@ -587,7 +591,9 @@ export const AlignmentAndSpacing: Story = {
587
591
  </div>
588
592
 
589
593
  <div className="u-mb-6">
590
- <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">justify-content="around"</h3>
594
+ <h3 className="u-mb-3 u-text-secondary-emphasis u-font-medium">
595
+ justify-content="around"
596
+ </h3>
591
597
  <Row justifyContent="around" className="u-mb-4 u-p-3 u-bg-brand-subtle u-rounded">
592
598
  <GridCol xs={3}>
593
599
  <DemoCard variant="secondary">Col 1</DemoCard>
@@ -374,7 +374,11 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
374
374
  const position = positions[index];
375
375
  if (!position) {
376
376
  return (
377
- <div key={item.id} ref={item.ref as React.LegacyRef<HTMLDivElement>} style={{ opacity: 0, position: 'absolute' }}>
377
+ <div
378
+ key={item.id}
379
+ ref={item.ref as React.LegacyRef<HTMLDivElement>}
380
+ style={{ opacity: 0, position: 'absolute' }}
381
+ >
378
382
  {item.element}
379
383
  </div>
380
384
  );
package/src/lib/README.md CHANGED
@@ -42,10 +42,10 @@ src/
42
42
  Composables are reusable pieces of component logic that can be shared across components.
43
43
 
44
44
  ```typescript
45
- import { useButton } from '../lib/composables/useButton';
45
+ import { useAccordion } from '../lib/composables/useAccordion';
46
46
 
47
47
  // In your component
48
- const { generateButtonClass, handleClick } = useButton();
48
+ const { generateAccordionClass, handleToggle } = useAccordion();
49
49
  ```
50
50
 
51
51
  ### Component Interactions
@@ -0,0 +1,219 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ importTheme,
4
+ exportTheme,
5
+ quickTheme,
6
+ createDarkVariant,
7
+ validateTheme,
8
+ themeToCSS,
9
+ getThemeMetadata,
10
+ supportsDarkMode,
11
+ } from '../theme-tools';
12
+ import { Theme } from '../theme/types';
13
+
14
+ describe('theme-tools', () => {
15
+ const mockTheme: Theme = {
16
+ name: 'Test Theme',
17
+ palette: {
18
+ primary: { main: '#7AFFD7' },
19
+ secondary: { main: '#FF5733' },
20
+ error: { main: '#FF0000' },
21
+ warning: { main: '#FFA500' },
22
+ info: { main: '#0000FF' },
23
+ success: { main: '#00FF00' },
24
+ background: {
25
+ default: '#ffffff',
26
+ paper: '#f5f5f5',
27
+ subtle: '#fafafa',
28
+ },
29
+ text: {
30
+ primary: '#000000',
31
+ secondary: '#666666',
32
+ disabled: '#999999',
33
+ },
34
+ },
35
+ typography: {
36
+ fontFamily: 'Arial',
37
+ fontSize: 16,
38
+ fontWeightLight: 300,
39
+ fontWeightRegular: 400,
40
+ fontWeightMedium: 500,
41
+ fontWeightSemiBold: 600,
42
+ fontWeightBold: 700,
43
+ h1: { fontSize: '2rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
44
+ h2: { fontSize: '1.5rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
45
+ h3: { fontSize: '1.25rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
46
+ h4: { fontSize: '1.1rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
47
+ h5: { fontSize: '1rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
48
+ h6: { fontSize: '0.9rem', fontWeight: 700, lineHeight: 1.2, letterSpacing: '0' },
49
+ body1: { fontSize: '1rem', fontWeight: 400, lineHeight: 1.5 },
50
+ body2: { fontSize: '0.875rem', fontWeight: 400, lineHeight: 1.5 },
51
+ },
52
+ spacing: (v: number) => `${v * 8}px`,
53
+ breakpoints: {
54
+ values: { xs: 0, sm: 600, md: 960, lg: 1280, xl: 1920 },
55
+ unit: 'px',
56
+ up: (k: any) => `@media (min-width: ${k}px)`,
57
+ down: (k: any) => `@media (max-width: ${k}px)`,
58
+ between: (s: any, e: any) => `@media (min-width: ${s}px) and (max-width: ${e}px)`,
59
+ },
60
+ shadows: { xs: 'none', sm: 'none', md: 'none', lg: 'none', xl: 'none' },
61
+ transitions: {
62
+ duration: {
63
+ shortest: 150,
64
+ shorter: 200,
65
+ short: 250,
66
+ standard: 300,
67
+ complex: 375,
68
+ enteringScreen: 225,
69
+ leavingScreen: 195,
70
+ },
71
+ easing: { easeInOut: 'ease', easeOut: 'ease', easeIn: 'ease', sharp: 'ease' },
72
+ },
73
+ zIndex: {
74
+ mobileStepper: 1000,
75
+ speedDial: 1050,
76
+ appBar: 1100,
77
+ drawer: 1200,
78
+ modal: 1300,
79
+ snackbar: 1400,
80
+ tooltip: 1500,
81
+ },
82
+ borderRadius: {
83
+ base: 4,
84
+ sm: 2,
85
+ md: 4,
86
+ lg: 8,
87
+ xl: 12,
88
+ xxl: 16,
89
+ '3xl': 24,
90
+ '4xl': 32,
91
+ pill: 9999,
92
+ },
93
+ custom: {},
94
+ __isJSTheme: true,
95
+ };
96
+
97
+ describe('quickTheme', () => {
98
+ it('should create a theme with primary color', () => {
99
+ const theme = quickTheme('My Theme', '#ff0000');
100
+ expect(theme.name).toBe('My Theme');
101
+ expect(theme.palette.primary.main).toBe('#ff0000');
102
+ });
103
+
104
+ it('should create a theme with primary and secondary color', () => {
105
+ const theme = quickTheme('My Theme', '#ff0000', '#00ff00');
106
+ expect(theme.palette.secondary.main).toBe('#00ff00');
107
+ });
108
+ });
109
+
110
+ describe('createDarkVariant', () => {
111
+ it('should create a dark variant of a theme', () => {
112
+ const darkTheme = createDarkVariant(mockTheme);
113
+ expect(darkTheme.name).toBe('Test Theme Dark');
114
+ expect(darkTheme.palette.mode).toBe('dark');
115
+ expect(darkTheme.palette.background.default).toBe('#121212');
116
+ expect(darkTheme.palette.text.primary).toBe('#ffffff');
117
+ });
118
+ });
119
+
120
+ describe('validateTheme', () => {
121
+ it('should return valid for a correct theme', () => {
122
+ const result = validateTheme(mockTheme);
123
+ expect(result.valid).toBe(true);
124
+ expect(result.errors).toHaveLength(0);
125
+ });
126
+
127
+ it('should return errors for a theme missing name', () => {
128
+ const invalidTheme = { ...mockTheme, name: '' };
129
+ const result = validateTheme(invalidTheme as any);
130
+ expect(result.valid).toBe(false);
131
+ expect(result.errors).toContain('Theme must have a name');
132
+ });
133
+
134
+ it('should return errors for a theme missing palette', () => {
135
+ const invalidTheme = { ...mockTheme, palette: undefined };
136
+ const result = validateTheme(invalidTheme as any);
137
+ expect(result.valid).toBe(false);
138
+ expect(result.errors).toContain('Theme must have a palette');
139
+ });
140
+
141
+ it('should return errors for a theme missing primary color', () => {
142
+ const invalidTheme = { ...mockTheme, palette: { ...mockTheme.palette, primary: undefined } };
143
+ const result = validateTheme(invalidTheme as any);
144
+ expect(result.valid).toBe(false);
145
+ expect(result.errors).toContain('Theme palette must have a primary color');
146
+ });
147
+ });
148
+
149
+ describe('themeToCSS', () => {
150
+ it('should generate CSS variables', () => {
151
+ const css = themeToCSS(mockTheme);
152
+ expect(css).toContain(':root');
153
+ expect(css).toContain('--atomix-');
154
+ });
155
+
156
+ it('should use custom selector', () => {
157
+ const css = themeToCSS(mockTheme, '.custom-theme');
158
+ expect(css).toContain('.custom-theme');
159
+ });
160
+ });
161
+
162
+ describe('getThemeMetadata', () => {
163
+ it('should extract metadata correctly', () => {
164
+ const metadata = getThemeMetadata(mockTheme);
165
+ expect(metadata.name).toBe('Test Theme');
166
+ expect(metadata.color).toBe('#7AFFD7');
167
+ expect(metadata.supportsDarkMode).toBe(false);
168
+ });
169
+
170
+ it('should identify dark mode support from palette mode', () => {
171
+ const darkTheme = { ...mockTheme, palette: { ...mockTheme.palette, mode: 'dark' } };
172
+ const metadata = getThemeMetadata(darkTheme as any);
173
+ expect(metadata.supportsDarkMode).toBe(true);
174
+ });
175
+ });
176
+
177
+ describe('supportsDarkMode', () => {
178
+ it('should return true if palette mode is dark', () => {
179
+ const theme = { ...mockTheme, palette: { ...mockTheme.palette, mode: 'dark' } };
180
+ expect(supportsDarkMode(theme as any)).toBe(true);
181
+ });
182
+
183
+ it('should return true if supportsDarkMode property is true', () => {
184
+ const theme = { ...mockTheme, supportsDarkMode: true };
185
+ expect(supportsDarkMode(theme as any)).toBe(true);
186
+ });
187
+
188
+ it('should return true if a11y modes includes dark', () => {
189
+ const theme = { ...mockTheme, a11y: { modes: ['dark'] } };
190
+ expect(supportsDarkMode(theme as any)).toBe(true);
191
+ });
192
+
193
+ it('should return false otherwise', () => {
194
+ expect(supportsDarkMode(mockTheme)).toBe(false);
195
+ });
196
+ });
197
+
198
+ describe('exportTheme', () => {
199
+ it('should export theme to JSON string', () => {
200
+ const json = exportTheme(mockTheme);
201
+ const parsed = JSON.parse(json);
202
+ expect(parsed.name).toBe('Test Theme');
203
+ });
204
+ });
205
+
206
+ describe('importTheme', () => {
207
+ it('should import a valid theme JSON', () => {
208
+ const theme = { name: 'Imported Theme' };
209
+ const json = JSON.stringify(theme);
210
+ const result = importTheme(json);
211
+ expect(result.name).toBe('Imported Theme');
212
+ });
213
+
214
+ it('should throw an error for invalid JSON', () => {
215
+ const invalidJson = '{ invalid: json }';
216
+ expect(() => importTheme(invalidJson)).toThrow('Invalid theme JSON');
217
+ });
218
+ });
219
+ });
@@ -1,5 +1,5 @@
1
1
  // Button composables
2
- export * from './useButton';
2
+ // export * from './useButton';
3
3
 
4
4
  // Accordion composables
5
5
  export * from './useAccordion';
@@ -29,7 +29,7 @@ export * from './useEdgePanel';
29
29
  export * from './useTodo';
30
30
 
31
31
  // Form composables
32
- export * from './useCheckbox';
32
+ // export * from './useCheckbox';
33
33
  export * from './useForm';
34
34
  export * from './useFormGroup';
35
35
 
@@ -19,15 +19,15 @@ class GlobalMouseTracker {
19
19
  */
20
20
  subscribe(callback: (pos: MousePosition) => void): () => void {
21
21
  this.listeners.add(callback);
22
-
22
+
23
23
  // Start tracking if this is the first subscriber
24
24
  if (this.listeners.size === 1) {
25
25
  this.startTracking();
26
26
  }
27
-
27
+
28
28
  // Immediately notify with current position
29
29
  callback(this.position);
30
-
30
+
31
31
  // Return unsubscribe function
32
32
  return () => {
33
33
  this.unsubscribe(callback);
@@ -39,7 +39,7 @@ class GlobalMouseTracker {
39
39
  */
40
40
  private unsubscribe(callback: (pos: MousePosition) => void): void {
41
41
  this.listeners.delete(callback);
42
-
42
+
43
43
  // Stop tracking if no more subscribers
44
44
  if (this.listeners.size === 0) {
45
45
  this.stopTracking();
@@ -53,9 +53,9 @@ class GlobalMouseTracker {
53
53
  if (this.isTracking) {
54
54
  return;
55
55
  }
56
-
56
+
57
57
  this.isTracking = true;
58
-
58
+
59
59
  // Use document-level listener for global tracking
60
60
  document.addEventListener('mousemove', this.handleMouseMove, { passive: true });
61
61
  }
@@ -67,16 +67,16 @@ class GlobalMouseTracker {
67
67
  if (!this.isTracking) {
68
68
  return;
69
69
  }
70
-
70
+
71
71
  this.isTracking = false;
72
72
  document.removeEventListener('mousemove', this.handleMouseMove);
73
-
73
+
74
74
  // Cancel any pending RAF
75
75
  if (this.rafId !== null) {
76
76
  cancelAnimationFrame(this.rafId);
77
77
  this.rafId = null;
78
78
  }
79
-
79
+
80
80
  this.lastEvent = null;
81
81
  }
82
82
 
@@ -85,7 +85,7 @@ class GlobalMouseTracker {
85
85
  */
86
86
  private handleMouseMove = (e: MouseEvent): void => {
87
87
  this.lastEvent = e;
88
-
88
+
89
89
  // Use requestAnimationFrame to throttle updates
90
90
  if (this.rafId === null) {
91
91
  this.rafId = requestAnimationFrame(() => {
@@ -94,9 +94,9 @@ class GlobalMouseTracker {
94
94
  x: this.lastEvent.clientX,
95
95
  y: this.lastEvent.clientY,
96
96
  };
97
-
97
+
98
98
  // Notify all subscribers
99
- this.listeners.forEach((callback) => {
99
+ this.listeners.forEach(callback => {
100
100
  try {
101
101
  callback(this.position);
102
102
  } catch (error) {
@@ -104,7 +104,7 @@ class GlobalMouseTracker {
104
104
  }
105
105
  });
106
106
  }
107
-
107
+
108
108
  this.rafId = null;
109
109
  });
110
110
  }
@@ -130,4 +130,3 @@ const globalMouseTracker = new GlobalMouseTracker();
130
130
 
131
131
  export { globalMouseTracker };
132
132
  export type { GlobalMouseTracker };
133
-