@shohojdhara/atomix 0.3.3 → 0.3.5

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 (489) hide show
  1. package/README.md +46 -28
  2. package/dist/atomix.css +15 -9
  3. package/dist/atomix.css.map +1 -0
  4. package/dist/atomix.min.css +15108 -11
  5. package/dist/atomix.min.css.map +1 -0
  6. package/dist/charts.d.ts +1929 -0
  7. package/dist/charts.js +6482 -0
  8. package/dist/charts.js.map +1 -0
  9. package/dist/core.d.ts +1289 -0
  10. package/dist/core.js +3357 -0
  11. package/dist/core.js.map +1 -0
  12. package/dist/forms.d.ts +1085 -0
  13. package/dist/forms.js +2450 -0
  14. package/dist/forms.js.map +1 -0
  15. package/dist/heavy.d.ts +636 -0
  16. package/dist/heavy.js +4550 -0
  17. package/dist/heavy.js.map +1 -0
  18. package/dist/index.d.ts +5196 -4618
  19. package/dist/index.esm.js +4240 -2776
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +4057 -2571
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.min.js +1 -1
  24. package/dist/index.min.js.map +1 -1
  25. package/dist/layout.d.ts +300 -0
  26. package/dist/layout.js +336 -0
  27. package/dist/layout.js.map +1 -0
  28. package/dist/theme.d.ts +1992 -0
  29. package/dist/theme.js +5348 -0
  30. package/dist/theme.js.map +1 -0
  31. package/package.json +63 -68
  32. package/scripts/atomix-cli.js +879 -15
  33. package/scripts/cli/__tests__/cli-commands.test.js +204 -0
  34. package/scripts/cli/__tests__/utils.test.js +201 -0
  35. package/scripts/cli/__tests__/vitest.config.js +26 -0
  36. package/scripts/cli/interactive-init.js +37 -45
  37. package/scripts/cli/theme-bridge.js +129 -0
  38. package/scripts/cli/token-manager.js +32 -7
  39. package/scripts/cli/utils.js +347 -0
  40. package/scripts/sync-theme-config.js +22 -22
  41. package/src/components/Accordion/Accordion.tsx +5 -54
  42. package/src/components/Accordion/index.ts +1 -1
  43. package/src/components/Avatar/Avatar.tsx +3 -3
  44. package/src/components/Badge/Badge.tsx +3 -3
  45. package/src/components/Breadcrumb/Breadcrumb.tsx +3 -3
  46. package/src/components/Button/Button.tsx +36 -1
  47. package/src/components/Card/ElevationCard.tsx +1 -1
  48. package/src/components/Chart/AnimatedChart.tsx +19 -17
  49. package/src/components/Chart/AreaChart.tsx +5 -1
  50. package/src/components/Chart/BarChart.tsx +1 -0
  51. package/src/components/Chart/BubbleChart.tsx +6 -5
  52. package/src/components/Chart/ChartToolbar.tsx +1 -0
  53. package/src/components/Chart/FunnelChart.tsx +1 -1
  54. package/src/components/Chart/RadarChart.tsx +19 -12
  55. package/src/components/Chart/ScatterChart.tsx +3 -3
  56. package/src/components/Chart/TreemapChart.tsx +2 -1
  57. package/src/components/Chart/WaterfallChart.tsx +0 -1
  58. package/src/components/Chart/types.ts +12 -2
  59. package/src/components/Chart/utils.ts +4 -3
  60. package/src/components/DataTable/DataTable.tsx +3 -3
  61. package/src/components/Dropdown/Dropdown.tsx +12 -9
  62. package/src/components/Footer/FooterSection.tsx +3 -3
  63. package/src/components/Form/Checkbox.tsx +3 -3
  64. package/src/components/Form/Input.tsx +4 -2
  65. package/src/components/Form/Radio.tsx +3 -3
  66. package/src/components/Form/Select.tsx +3 -3
  67. package/src/components/Form/Textarea.tsx +4 -2
  68. package/src/components/List/List.stories.tsx +3 -3
  69. package/src/components/List/List.tsx +3 -3
  70. package/src/components/List/ListGroup.tsx +3 -1
  71. package/src/components/Modal/Modal.tsx +3 -3
  72. package/src/components/Navigation/Menu/MegaMenu.tsx +9 -3
  73. package/src/components/Navigation/Menu/Menu.tsx +9 -3
  74. package/src/components/Pagination/Pagination.tsx +6 -5
  75. package/src/components/PhotoViewer/PhotoViewerImage.tsx +2 -2
  76. package/src/components/Popover/Popover.tsx +4 -4
  77. package/src/components/Progress/Progress.tsx +6 -2
  78. package/src/components/Rating/Rating.tsx +5 -2
  79. package/src/components/Slider/Slider.tsx +10 -9
  80. package/src/components/Spinner/Spinner.tsx +3 -3
  81. package/src/components/Tabs/Tabs.tsx +3 -3
  82. package/src/components/Tooltip/Tooltip.tsx +3 -3
  83. package/src/components/index.ts +5 -2
  84. package/src/layouts/MasonryGrid/MasonryGrid.tsx +2 -2
  85. package/src/lib/composables/useChartPerformance.ts +102 -78
  86. package/src/lib/composables/useChartScale.ts +10 -0
  87. package/src/lib/composables/useHero.ts +9 -2
  88. package/src/lib/composables/useHeroBackgroundSlider.ts +5 -3
  89. package/src/lib/composables/useSideMenu.ts +1 -0
  90. package/src/lib/composables/useVideoPlayer.ts +3 -2
  91. package/src/lib/config/index.ts +275 -0
  92. package/src/lib/config/loader.ts +147 -0
  93. package/src/lib/hooks/index.ts +0 -1
  94. package/src/lib/hooks/useComponentCustomization.ts +10 -14
  95. package/src/lib/hooks/usePerformanceMonitor.ts +149 -0
  96. package/src/lib/index.ts +1 -0
  97. package/src/lib/patterns/index.ts +2 -2
  98. package/src/lib/patterns/slots.tsx +2 -2
  99. package/src/lib/theme/composeTheme.ts +1 -6
  100. package/src/lib/theme/config/index.ts +1 -1
  101. package/src/lib/theme/config/loader.ts +75 -41
  102. package/src/lib/theme/config/types.ts +21 -7
  103. package/src/lib/theme/config/validator.ts +1 -1
  104. package/src/lib/theme/constants.ts +12 -2
  105. package/src/lib/theme/core/ThemeEngine.ts +8 -0
  106. package/src/lib/theme/core/ThemeValidator.ts +5 -2
  107. package/src/lib/theme/createTheme.ts +0 -1
  108. package/src/lib/theme/createThemeFromConfig.ts +132 -0
  109. package/src/lib/theme/devtools/CLI.ts +161 -76
  110. package/src/lib/theme/devtools/Comparator.tsx +343 -0
  111. package/src/lib/theme/devtools/IMPROVEMENTS.md +429 -0
  112. package/src/lib/theme/devtools/Inspector.tsx +22 -7
  113. package/src/lib/theme/devtools/LiveEditor.tsx +399 -0
  114. package/src/lib/theme/devtools/README.md +433 -0
  115. package/src/lib/theme/devtools/index.ts +12 -11
  116. package/src/lib/theme/generateCSSVariables.ts +80 -39
  117. package/src/lib/theme/i18n/rtl.ts +2 -1
  118. package/src/lib/theme/index.ts +18 -2
  119. package/src/lib/theme/runtime/ThemeApplicator.ts +28 -11
  120. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +3 -3
  121. package/src/lib/theme/runtime/ThemeManager.test.ts +17 -1
  122. package/src/lib/theme/runtime/ThemeManager.ts +11 -7
  123. package/src/lib/theme/types.ts +42 -43
  124. package/src/lib/theme-tools.ts +8 -68
  125. package/src/lib/types/components.ts +252 -109
  126. package/src/lib/types/partProps.ts +0 -16
  127. package/src/lib/utils/fontPreloader.ts +148 -0
  128. package/src/lib/utils/index.ts +11 -0
  129. package/src/lib/utils/memoryMonitor.ts +189 -0
  130. package/src/styles/01-settings/_settings.fonts.scss +2 -5
  131. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  132. package/src/styles/03-generic/_generated-root.css +26 -0
  133. package/src/styles/06-components/_components.navbar.scss +6 -5
  134. package/src/themes/README.md +1 -2
  135. package/src/themes/themes.config.js +30 -181
  136. package/dist/themes/applemix.css +0 -16576
  137. package/dist/themes/applemix.css.map +0 -1
  138. package/dist/themes/applemix.min.css +0 -73
  139. package/dist/themes/boomdevs.css +0 -16007
  140. package/dist/themes/boomdevs.css.map +0 -1
  141. package/dist/themes/boomdevs.min.css +0 -406
  142. package/dist/themes/esrar.css +0 -18424
  143. package/dist/themes/esrar.css.map +0 -1
  144. package/dist/themes/esrar.min.css +0 -221
  145. package/dist/themes/flashtrade.css +0 -17596
  146. package/dist/themes/flashtrade.css.map +0 -1
  147. package/dist/themes/flashtrade.min.css +0 -196
  148. package/dist/themes/mashroom.css +0 -31082
  149. package/dist/themes/mashroom.css.map +0 -1
  150. package/dist/themes/mashroom.min.css +0 -450
  151. package/dist/themes/shaj-default.css +0 -17200
  152. package/dist/themes/shaj-default.css.map +0 -1
  153. package/dist/themes/shaj-default.min.css +0 -502
  154. package/scripts/build-themes.js +0 -208
  155. package/src/components/AtomixGlass/atomixGLass.old.tsx +0 -1263
  156. package/src/lib/theme/__tests__/ThemeBuilder.test.ts +0 -223
  157. package/src/lib/theme/builders/ThemeBuilder.ts +0 -372
  158. package/src/lib/theme/errors.test.ts +0 -207
  159. package/src/lib/theme/generators/CSSGenerator.ts +0 -311
  160. package/src/lib/theme/generators/ConfigGenerator.ts +0 -287
  161. package/src/lib/theme/generators/TypeGenerator.ts +0 -228
  162. package/src/lib/theme/generators/index.ts +0 -21
  163. package/src/lib/theme/monitoring/ThemeAnalytics.ts +0 -409
  164. package/src/lib/theme/monitoring/index.ts +0 -17
  165. package/src/lib/theme/overrides/ComponentOverrides.ts +0 -243
  166. package/src/lib/theme/overrides/index.ts +0 -15
  167. package/src/lib/theme/whitelabel/WhiteLabelManager.ts +0 -364
  168. package/src/lib/theme/whitelabel/index.ts +0 -13
  169. package/src/themes/THEME_CHECKLIST.md +0 -74
  170. package/src/themes/applemix/01-settings/_index.scss +0 -24
  171. package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
  172. package/src/themes/applemix/01-settings/_settings.background.scss +0 -6
  173. package/src/themes/applemix/01-settings/_settings.colors.scss +0 -75
  174. package/src/themes/applemix/01-settings/_settings.config.scss +0 -15
  175. package/src/themes/applemix/01-settings/_settings.typography.scss +0 -30
  176. package/src/themes/applemix/02-tools/_index.scss +0 -4
  177. package/src/themes/applemix/03-generic/_index.scss +0 -7
  178. package/src/themes/applemix/04-elements/_index.scss +0 -7
  179. package/src/themes/applemix/05-objects/_index.scss +0 -7
  180. package/src/themes/applemix/06-components/_index.scss +0 -15
  181. package/src/themes/applemix/99-utilities/_index.scss +0 -7
  182. package/src/themes/applemix/README.md +0 -378
  183. package/src/themes/applemix/index.scss +0 -33
  184. package/src/themes/boomdevs/01-settings/_index.scss +0 -38
  185. package/src/themes/boomdevs/01-settings/_settings.accordion.scss +0 -12
  186. package/src/themes/boomdevs/01-settings/_settings.animations.scss +0 -11
  187. package/src/themes/boomdevs/01-settings/_settings.avatar.scss +0 -9
  188. package/src/themes/boomdevs/01-settings/_settings.badge.scss +0 -11
  189. package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +0 -16
  190. package/src/themes/boomdevs/01-settings/_settings.border.scss +0 -10
  191. package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +0 -14
  192. package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +0 -13
  193. package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +0 -15
  194. package/src/themes/boomdevs/01-settings/_settings.button.scss +0 -9
  195. package/src/themes/boomdevs/01-settings/_settings.callout.scss +0 -9
  196. package/src/themes/boomdevs/01-settings/_settings.card.scss +0 -11
  197. package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +0 -9
  198. package/src/themes/boomdevs/01-settings/_settings.colors.scss +0 -145
  199. package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +0 -11
  200. package/src/themes/boomdevs/01-settings/_settings.grid.scss +0 -16
  201. package/src/themes/boomdevs/01-settings/_settings.input.scss +0 -14
  202. package/src/themes/boomdevs/01-settings/_settings.link.scss +0 -11
  203. package/src/themes/boomdevs/01-settings/_settings.list.scss +0 -10
  204. package/src/themes/boomdevs/01-settings/_settings.modal.scss +0 -16
  205. package/src/themes/boomdevs/01-settings/_settings.navbar.scss +0 -16
  206. package/src/themes/boomdevs/01-settings/_settings.pagination.scss +0 -13
  207. package/src/themes/boomdevs/01-settings/_settings.progress.scss +0 -11
  208. package/src/themes/boomdevs/01-settings/_settings.rating.scss +0 -10
  209. package/src/themes/boomdevs/01-settings/_settings.spacing.scss +0 -33
  210. package/src/themes/boomdevs/01-settings/_settings.spinner.scss +0 -11
  211. package/src/themes/boomdevs/01-settings/_settings.steps.scss +0 -12
  212. package/src/themes/boomdevs/01-settings/_settings.tabs.scss +0 -12
  213. package/src/themes/boomdevs/01-settings/_settings.todo.scss +0 -15
  214. package/src/themes/boomdevs/01-settings/_settings.toggle.scss +0 -14
  215. package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +0 -13
  216. package/src/themes/boomdevs/01-settings/_settings.typography.scss +0 -58
  217. package/src/themes/boomdevs/01-settings/_settings.video-player.scss +0 -12
  218. package/src/themes/boomdevs/02-tools/_index.scss +0 -7
  219. package/src/themes/boomdevs/03-generic/_index.scss +0 -7
  220. package/src/themes/boomdevs/04-elements/_index.scss +0 -7
  221. package/src/themes/boomdevs/05-objects/_index.scss +0 -7
  222. package/src/themes/boomdevs/06-components/_components.button.scss +0 -11
  223. package/src/themes/boomdevs/06-components/_index.scss +0 -11
  224. package/src/themes/boomdevs/99-utilities/_index.scss +0 -7
  225. package/src/themes/boomdevs/index.scss +0 -26
  226. package/src/themes/esrar/01-settings/_index.scss +0 -15
  227. package/src/themes/esrar/01-settings/_settings.colors.scss +0 -91
  228. package/src/themes/esrar/02-tools/_index.scss +0 -8
  229. package/src/themes/esrar/02-tools/_tools.animations.scss +0 -342
  230. package/src/themes/esrar/06-components/_components.accordion.scss +0 -49
  231. package/src/themes/esrar/06-components/_components.avatar-group.scss +0 -14
  232. package/src/themes/esrar/06-components/_components.avatar.scss +0 -61
  233. package/src/themes/esrar/06-components/_components.badge.scss +0 -117
  234. package/src/themes/esrar/06-components/_components.breadcrumb.scss +0 -65
  235. package/src/themes/esrar/06-components/_components.btn-group.scss +0 -19
  236. package/src/themes/esrar/06-components/_components.button.scss +0 -224
  237. package/src/themes/esrar/06-components/_components.callout.scss +0 -51
  238. package/src/themes/esrar/06-components/_components.card.scss +0 -134
  239. package/src/themes/esrar/06-components/_components.chart.scss +0 -24
  240. package/src/themes/esrar/06-components/_components.checkbox-group.scss +0 -26
  241. package/src/themes/esrar/06-components/_components.checkbox.scss +0 -71
  242. package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +0 -29
  243. package/src/themes/esrar/06-components/_components.countdown.scss +0 -67
  244. package/src/themes/esrar/06-components/_components.data-table.scss +0 -22
  245. package/src/themes/esrar/06-components/_components.datepicker.scss +0 -20
  246. package/src/themes/esrar/06-components/_components.dropdown.scss +0 -272
  247. package/src/themes/esrar/06-components/_components.edge-panel.scss +0 -10
  248. package/src/themes/esrar/06-components/_components.form-group.scss +0 -15
  249. package/src/themes/esrar/06-components/_components.form.scss +0 -66
  250. package/src/themes/esrar/06-components/_components.hero.scss +0 -251
  251. package/src/themes/esrar/06-components/_components.icon.scss +0 -33
  252. package/src/themes/esrar/06-components/_components.image-gallery.scss +0 -29
  253. package/src/themes/esrar/06-components/_components.input.scss +0 -91
  254. package/src/themes/esrar/06-components/_components.list-group.scss +0 -26
  255. package/src/themes/esrar/06-components/_components.modal.scss +0 -148
  256. package/src/themes/esrar/06-components/_components.notification.scss +0 -80
  257. package/src/themes/esrar/06-components/_components.pagination.scss +0 -84
  258. package/src/themes/esrar/06-components/_components.popover.scss +0 -10
  259. package/src/themes/esrar/06-components/_components.progress.scss +0 -64
  260. package/src/themes/esrar/06-components/_components.rating.scss +0 -26
  261. package/src/themes/esrar/06-components/_components.skeleton.scss +0 -15
  262. package/src/themes/esrar/06-components/_components.slider.scss +0 -90
  263. package/src/themes/esrar/06-components/_components.spinner.scss +0 -71
  264. package/src/themes/esrar/06-components/_components.steps.scss +0 -76
  265. package/src/themes/esrar/06-components/_components.tab.scss +0 -58
  266. package/src/themes/esrar/06-components/_components.tag.scss +0 -21
  267. package/src/themes/esrar/06-components/_components.timeline.scss +0 -19
  268. package/src/themes/esrar/06-components/_components.toast.scss +0 -91
  269. package/src/themes/esrar/06-components/_components.toggle.scss +0 -74
  270. package/src/themes/esrar/06-components/_components.tooltip.scss +0 -45
  271. package/src/themes/esrar/06-components/_components.upload.scss +0 -102
  272. package/src/themes/esrar/06-components/_index.scss +0 -42
  273. package/src/themes/esrar/index.scss +0 -30
  274. package/src/themes/flashtrade/01-settings/_index.scss +0 -19
  275. package/src/themes/flashtrade/01-settings/_settings.animations.scss +0 -11
  276. package/src/themes/flashtrade/01-settings/_settings.background.scss +0 -9
  277. package/src/themes/flashtrade/01-settings/_settings.colors.scss +0 -79
  278. package/src/themes/flashtrade/01-settings/_settings.config.scss +0 -16
  279. package/src/themes/flashtrade/01-settings/_settings.typography.scss +0 -35
  280. package/src/themes/flashtrade/02-tools/_index.scss +0 -8
  281. package/src/themes/flashtrade/03-generic/_index.scss +0 -8
  282. package/src/themes/flashtrade/04-elements/_index.scss +0 -12
  283. package/src/themes/flashtrade/05-objects/_index.scss +0 -8
  284. package/src/themes/flashtrade/06-components/_components.badge.scss +0 -156
  285. package/src/themes/flashtrade/06-components/_components.button.scss +0 -135
  286. package/src/themes/flashtrade/06-components/_components.card.scss +0 -214
  287. package/src/themes/flashtrade/06-components/_components.navbar.scss +0 -227
  288. package/src/themes/flashtrade/06-components/_index.scss +0 -13
  289. package/src/themes/flashtrade/99-utilities/_index.scss +0 -9
  290. package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +0 -187
  291. package/src/themes/flashtrade/README.md +0 -386
  292. package/src/themes/flashtrade/demo.html +0 -272
  293. package/src/themes/flashtrade/index.scss +0 -36
  294. package/src/themes/mashroom/01-settings/_index.scss +0 -69
  295. package/src/themes/mashroom/01-settings/_settings.accordion.scss +0 -32
  296. package/src/themes/mashroom/01-settings/_settings.animations.scss +0 -26
  297. package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +0 -22
  298. package/src/themes/mashroom/01-settings/_settings.avatar.scss +0 -57
  299. package/src/themes/mashroom/01-settings/_settings.badge.scss +0 -19
  300. package/src/themes/mashroom/01-settings/_settings.border-radius.scss +0 -24
  301. package/src/themes/mashroom/01-settings/_settings.border.scss +0 -14
  302. package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +0 -40
  303. package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
  304. package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +0 -17
  305. package/src/themes/mashroom/01-settings/_settings.btn-group.scss +0 -5
  306. package/src/themes/mashroom/01-settings/_settings.button.scss +0 -50
  307. package/src/themes/mashroom/01-settings/_settings.callout.scss +0 -81
  308. package/src/themes/mashroom/01-settings/_settings.card.scss +0 -52
  309. package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +0 -5
  310. package/src/themes/mashroom/01-settings/_settings.checkbox.scss +0 -23
  311. package/src/themes/mashroom/01-settings/_settings.color-mode.scss +0 -7
  312. package/src/themes/mashroom/01-settings/_settings.colors.scss +0 -180
  313. package/src/themes/mashroom/01-settings/_settings.config.scss +0 -4
  314. package/src/themes/mashroom/01-settings/_settings.countdown.scss +0 -20
  315. package/src/themes/mashroom/01-settings/_settings.data-table.scss +0 -56
  316. package/src/themes/mashroom/01-settings/_settings.datepicker.scss +0 -45
  317. package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +0 -3
  318. package/src/themes/mashroom/01-settings/_settings.dropdown.scss +0 -45
  319. package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +0 -24
  320. package/src/themes/mashroom/01-settings/_settings.fonts.scss +0 -8
  321. package/src/themes/mashroom/01-settings/_settings.form-group.scss +0 -14
  322. package/src/themes/mashroom/01-settings/_settings.form.scss +0 -6
  323. package/src/themes/mashroom/01-settings/_settings.grid.scss +0 -23
  324. package/src/themes/mashroom/01-settings/_settings.hero.scss +0 -41
  325. package/src/themes/mashroom/01-settings/_settings.input.scss +0 -51
  326. package/src/themes/mashroom/01-settings/_settings.link.scss +0 -13
  327. package/src/themes/mashroom/01-settings/_settings.list-group.scss +0 -16
  328. package/src/themes/mashroom/01-settings/_settings.list.scss +0 -13
  329. package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +0 -23
  330. package/src/themes/mashroom/01-settings/_settings.menu.scss +0 -50
  331. package/src/themes/mashroom/01-settings/_settings.messages.scss +0 -98
  332. package/src/themes/mashroom/01-settings/_settings.modal.scss +0 -41
  333. package/src/themes/mashroom/01-settings/_settings.nav.scss +0 -20
  334. package/src/themes/mashroom/01-settings/_settings.navbar.scss +0 -54
  335. package/src/themes/mashroom/01-settings/_settings.pagination.scss +0 -30
  336. package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +0 -45
  337. package/src/themes/mashroom/01-settings/_settings.popover.scss +0 -20
  338. package/src/themes/mashroom/01-settings/_settings.position.scss +0 -9
  339. package/src/themes/mashroom/01-settings/_settings.progress.scss +0 -17
  340. package/src/themes/mashroom/01-settings/_settings.rating.scss +0 -11
  341. package/src/themes/mashroom/01-settings/_settings.river.scss +0 -50
  342. package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +0 -31
  343. package/src/themes/mashroom/01-settings/_settings.select.scss +0 -47
  344. package/src/themes/mashroom/01-settings/_settings.side-menu.scss +0 -79
  345. package/src/themes/mashroom/01-settings/_settings.skeleton.scss +0 -24
  346. package/src/themes/mashroom/01-settings/_settings.spacing.scss +0 -66
  347. package/src/themes/mashroom/01-settings/_settings.spinner.scss +0 -34
  348. package/src/themes/mashroom/01-settings/_settings.steps.scss +0 -33
  349. package/src/themes/mashroom/01-settings/_settings.tabs.scss +0 -33
  350. package/src/themes/mashroom/01-settings/_settings.testimonials.scss +0 -24
  351. package/src/themes/mashroom/01-settings/_settings.todo.scss +0 -52
  352. package/src/themes/mashroom/01-settings/_settings.toggle.scss +0 -49
  353. package/src/themes/mashroom/01-settings/_settings.tooltip.scss +0 -20
  354. package/src/themes/mashroom/01-settings/_settings.typography.scss +0 -95
  355. package/src/themes/mashroom/01-settings/_settings.upload.scss +0 -96
  356. package/src/themes/mashroom/01-settings/_settings.z-layers.scss +0 -19
  357. package/src/themes/mashroom/02-tools/_index.scss +0 -8
  358. package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +0 -78
  359. package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +0 -114
  360. package/src/themes/mashroom/03-generic/_index.scss +0 -6
  361. package/src/themes/mashroom/04-elements/_index.scss +0 -6
  362. package/src/themes/mashroom/05-objects/_index.scss +0 -6
  363. package/src/themes/mashroom/06-components/_components.accordion.scss +0 -187
  364. package/src/themes/mashroom/06-components/_components.avatar-group.scss +0 -276
  365. package/src/themes/mashroom/06-components/_components.avatar.scss +0 -114
  366. package/src/themes/mashroom/06-components/_components.badge.scss +0 -152
  367. package/src/themes/mashroom/06-components/_components.breadcrumb.scss +0 -162
  368. package/src/themes/mashroom/06-components/_components.btn-group.scss +0 -404
  369. package/src/themes/mashroom/06-components/_components.button.scss +0 -160
  370. package/src/themes/mashroom/06-components/_components.callout.scss +0 -140
  371. package/src/themes/mashroom/06-components/_components.card.scss +0 -225
  372. package/src/themes/mashroom/06-components/_components.checkbox.scss +0 -186
  373. package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +0 -308
  374. package/src/themes/mashroom/06-components/_components.countdown.scss +0 -402
  375. package/src/themes/mashroom/06-components/_components.data-table.scss +0 -354
  376. package/src/themes/mashroom/06-components/_components.datepicker.scss +0 -349
  377. package/src/themes/mashroom/06-components/_components.dropdown.scss +0 -334
  378. package/src/themes/mashroom/06-components/_components.edge-panel.scss +0 -413
  379. package/src/themes/mashroom/06-components/_components.form-group.scss +0 -433
  380. package/src/themes/mashroom/06-components/_components.form.scss +0 -358
  381. package/src/themes/mashroom/06-components/_components.hero.scss +0 -151
  382. package/src/themes/mashroom/06-components/_components.input.scss +0 -147
  383. package/src/themes/mashroom/06-components/_components.list-group.scss +0 -456
  384. package/src/themes/mashroom/06-components/_components.list.scss +0 -145
  385. package/src/themes/mashroom/06-components/_components.menu.scss +0 -497
  386. package/src/themes/mashroom/06-components/_components.messages.scss +0 -277
  387. package/src/themes/mashroom/06-components/_components.modal.scss +0 -264
  388. package/src/themes/mashroom/06-components/_components.nav.scss +0 -181
  389. package/src/themes/mashroom/06-components/_components.navbar.scss +0 -538
  390. package/src/themes/mashroom/06-components/_components.pagination.scss +0 -400
  391. package/src/themes/mashroom/06-components/_components.photoviewer.scss +0 -498
  392. package/src/themes/mashroom/06-components/_components.popover.scss +0 -383
  393. package/src/themes/mashroom/06-components/_components.product-review.scss +0 -408
  394. package/src/themes/mashroom/06-components/_components.progress.scss +0 -249
  395. package/src/themes/mashroom/06-components/_components.rating.scss +0 -300
  396. package/src/themes/mashroom/06-components/_components.river.scss +0 -570
  397. package/src/themes/mashroom/06-components/_components.sectionintro.scss +0 -546
  398. package/src/themes/mashroom/06-components/_components.select.scss +0 -455
  399. package/src/themes/mashroom/06-components/_components.side-menu.scss +0 -635
  400. package/src/themes/mashroom/06-components/_components.skeleton.scss +0 -447
  401. package/src/themes/mashroom/06-components/_components.slider.scss +0 -414
  402. package/src/themes/mashroom/06-components/_components.spinner.scss +0 -198
  403. package/src/themes/mashroom/06-components/_components.steps.scss +0 -350
  404. package/src/themes/mashroom/06-components/_components.tabs.scss +0 -269
  405. package/src/themes/mashroom/06-components/_components.testimonials.scss +0 -561
  406. package/src/themes/mashroom/06-components/_components.toggle.scss +0 -231
  407. package/src/themes/mashroom/06-components/_components.tooltip.scss +0 -167
  408. package/src/themes/mashroom/06-components/_components.upload.scss +0 -537
  409. package/src/themes/mashroom/06-components/_components.video-player.scss +0 -560
  410. package/src/themes/mashroom/06-components/_index.scss +0 -55
  411. package/src/themes/mashroom/99-utilities/_index.scss +0 -6
  412. package/src/themes/mashroom/index.scss +0 -26
  413. package/src/themes/shaj-default/01-settings/_index.scss +0 -69
  414. package/src/themes/shaj-default/01-settings/_settings.accordion.scss +0 -38
  415. package/src/themes/shaj-default/01-settings/_settings.animations.scss +0 -32
  416. package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +0 -28
  417. package/src/themes/shaj-default/01-settings/_settings.avatar.scss +0 -63
  418. package/src/themes/shaj-default/01-settings/_settings.badge.scss +0 -25
  419. package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +0 -24
  420. package/src/themes/shaj-default/01-settings/_settings.border.scss +0 -20
  421. package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +0 -46
  422. package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
  423. package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +0 -23
  424. package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +0 -11
  425. package/src/themes/shaj-default/01-settings/_settings.button.scss +0 -56
  426. package/src/themes/shaj-default/01-settings/_settings.callout.scss +0 -87
  427. package/src/themes/shaj-default/01-settings/_settings.card.scss +0 -52
  428. package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +0 -11
  429. package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +0 -29
  430. package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +0 -13
  431. package/src/themes/shaj-default/01-settings/_settings.colors.scss +0 -91
  432. package/src/themes/shaj-default/01-settings/_settings.config.scss +0 -4
  433. package/src/themes/shaj-default/01-settings/_settings.countdown.scss +0 -26
  434. package/src/themes/shaj-default/01-settings/_settings.data-table.scss +0 -62
  435. package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +0 -51
  436. package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +0 -9
  437. package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +0 -51
  438. package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +0 -30
  439. package/src/themes/shaj-default/01-settings/_settings.fonts.scss +0 -13
  440. package/src/themes/shaj-default/01-settings/_settings.form-group.scss +0 -20
  441. package/src/themes/shaj-default/01-settings/_settings.form.scss +0 -12
  442. package/src/themes/shaj-default/01-settings/_settings.grid.scss +0 -29
  443. package/src/themes/shaj-default/01-settings/_settings.hero.scss +0 -47
  444. package/src/themes/shaj-default/01-settings/_settings.input.scss +0 -57
  445. package/src/themes/shaj-default/01-settings/_settings.link.scss +0 -19
  446. package/src/themes/shaj-default/01-settings/_settings.list-group.scss +0 -22
  447. package/src/themes/shaj-default/01-settings/_settings.list.scss +0 -19
  448. package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +0 -29
  449. package/src/themes/shaj-default/01-settings/_settings.menu.scss +0 -56
  450. package/src/themes/shaj-default/01-settings/_settings.messages.scss +0 -104
  451. package/src/themes/shaj-default/01-settings/_settings.modal.scss +0 -47
  452. package/src/themes/shaj-default/01-settings/_settings.nav.scss +0 -26
  453. package/src/themes/shaj-default/01-settings/_settings.navbar.scss +0 -60
  454. package/src/themes/shaj-default/01-settings/_settings.pagination.scss +0 -36
  455. package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +0 -51
  456. package/src/themes/shaj-default/01-settings/_settings.popover.scss +0 -26
  457. package/src/themes/shaj-default/01-settings/_settings.position.scss +0 -15
  458. package/src/themes/shaj-default/01-settings/_settings.progress.scss +0 -23
  459. package/src/themes/shaj-default/01-settings/_settings.rating.scss +0 -17
  460. package/src/themes/shaj-default/01-settings/_settings.river.scss +0 -56
  461. package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +0 -37
  462. package/src/themes/shaj-default/01-settings/_settings.select.scss +0 -53
  463. package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +0 -85
  464. package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +0 -30
  465. package/src/themes/shaj-default/01-settings/_settings.spacing.scss +0 -72
  466. package/src/themes/shaj-default/01-settings/_settings.spinner.scss +0 -24
  467. package/src/themes/shaj-default/01-settings/_settings.steps.scss +0 -39
  468. package/src/themes/shaj-default/01-settings/_settings.tabs.scss +0 -39
  469. package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +0 -30
  470. package/src/themes/shaj-default/01-settings/_settings.todo.scss +0 -58
  471. package/src/themes/shaj-default/01-settings/_settings.toggle.scss +0 -55
  472. package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +0 -26
  473. package/src/themes/shaj-default/01-settings/_settings.typography.scss +0 -101
  474. package/src/themes/shaj-default/01-settings/_settings.upload.scss +0 -102
  475. package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +0 -25
  476. package/src/themes/shaj-default/02-tools/_index.scss +0 -0
  477. package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
  478. package/src/themes/shaj-default/03-generic/_index.scss +0 -2
  479. package/src/themes/shaj-default/04-elements/_index.scss +0 -0
  480. package/src/themes/shaj-default/05-objects/_index.scss +0 -0
  481. package/src/themes/shaj-default/06-components/_components.button.scss +0 -55
  482. package/src/themes/shaj-default/06-components/_components.card.scss +0 -57
  483. package/src/themes/shaj-default/06-components/_components.input.scss +0 -58
  484. package/src/themes/shaj-default/06-components/_components.navbar.scss +0 -99
  485. package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
  486. package/src/themes/shaj-default/06-components/_index.scss +0 -13
  487. package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
  488. package/src/themes/shaj-default/index.scss +0 -25
  489. package/theme.config.ts +0 -360
@@ -2,7 +2,18 @@
2
2
  * CSS Variable Generator
3
3
  *
4
4
  * Generates CSS custom properties from theme objects and injects them into the DOM.
5
- * Follows the existing --atomix- prefix convention.
5
+ *
6
+ * **Token Naming Alignment:**
7
+ * This generator produces CSS variables that match the SCSS token naming pattern exactly:
8
+ * - Colors: --atomix-primary, --atomix-primary-1 through --atomix-primary-10
9
+ * - Spacing: --atomix-spacing-1, --atomix-spacing-4, etc.
10
+ * - Typography: --atomix-font-size-base, --atomix-font-weight-normal, etc.
11
+ * - Shadows: --atomix-box-shadow, --atomix-box-shadow-sm, etc.
12
+ *
13
+ * All tokens follow the flat structure pattern used in SCSS (not nested like --atomix-palette-primary-main).
14
+ * This ensures compatibility between SCSS themes and JavaScript themes.
15
+ *
16
+ * @see src/styles/03-generic/_generic.root.scss for SCSS token definitions
6
17
  */
7
18
 
8
19
  import type { Theme } from './types';
@@ -36,7 +47,7 @@ function flattenObject(
36
47
  result: Record<string, string> = {}
37
48
  ): Record<string, string> {
38
49
  for (const key in obj) {
39
- if (!obj.hasOwnProperty(key)) continue;
50
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
40
51
 
41
52
  const value = obj[key];
42
53
  const newKey = prefix ? `${prefix}-${key}` : key;
@@ -92,6 +103,13 @@ function generateColorScale(baseColor: string, prefix: string, colorName: string
92
103
 
93
104
  /**
94
105
  * Generate CSS variables from theme palette
106
+ *
107
+ * Matches SCSS token naming pattern:
108
+ * - --atomix-primary (main color)
109
+ * - --atomix-primary-1 through --atomix-primary-10 (color scale)
110
+ * - --atomix-primary-main (alias for primary-6)
111
+ * - --atomix-primary-light (alias for primary-3)
112
+ * - --atomix-primary-dark (alias for primary-9)
95
113
  */
96
114
  function generatePaletteVariables(palette: Theme['palette'], prefix: string): Record<string, string> {
97
115
  const vars: Record<string, string> = {};
@@ -101,46 +119,60 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
101
119
  colorKeys.forEach((key) => {
102
120
  const color = palette[key];
103
121
  if (color && typeof color === 'object') {
104
- // Main color
122
+ // Main color (flat structure, matches SCSS: --atomix-primary)
105
123
  vars[`${prefix}-${key}`] = color.main;
106
124
 
107
- // Generate RGB for transparency support
125
+ // Generate RGB for transparency support (matches SCSS: --atomix-primary-rgb)
108
126
  const rgb = hexToRgb(color.main);
109
127
  if (rgb) {
110
128
  vars[`${prefix}-${key}-rgb`] = `${rgb.r}, ${rgb.g}, ${rgb.b}`;
111
129
  }
112
130
 
113
- // Map dark variant to hover (closest SCSS equivalent)
131
+ // Generate full color scale (1-10) - matches SCSS: --atomix-primary-1 through --atomix-primary-10
132
+ // Only for primary, secondary, error, warning, info, success (not for light/dark)
133
+ if (key !== 'light' && key !== 'dark') {
134
+ const colorScale = generateColorScale(color.main, prefix, key);
135
+ Object.assign(vars, colorScale);
136
+
137
+ // Add semantic aliases that map to scale steps (for backward compatibility)
138
+ // primary-main → primary-6 (main color)
139
+ vars[`${prefix}-${key}-main`] = colorScale[`${prefix}-${key}-6`] || color.main;
140
+ // primary-light → primary-3 (light variant)
141
+ vars[`${prefix}-${key}-light`] = colorScale[`${prefix}-${key}-3`] || color.light || color.main;
142
+ // primary-dark → primary-9 (dark variant)
143
+ vars[`${prefix}-${key}-dark`] = colorScale[`${prefix}-${key}-9`] || color.dark || color.main;
144
+ } else {
145
+ // For light/dark, use the provided values directly
146
+ vars[`${prefix}-${key}-main`] = color.main;
147
+ if (color.light) vars[`${prefix}-${key}-light`] = color.light;
148
+ if (color.dark) vars[`${prefix}-${key}-dark`] = color.dark;
149
+ }
150
+
151
+ // Map dark variant to hover (matches SCSS: --atomix-primary-hover)
114
152
  if (color.dark) {
115
153
  vars[`${prefix}-${key}-hover`] = color.dark;
116
154
  }
117
155
 
118
- // Generate semantic color variants
119
- // Text emphasis: emphasized version of the color for text
156
+ // Generate semantic color variants (matches SCSS patterns)
157
+ // Text emphasis: emphasized version of the color for text (--atomix-primary-text-emphasis)
120
158
  vars[`${prefix}-${key}-text-emphasis`] = emphasize(color.main, 0.15);
121
159
 
122
- // Background subtle: very light version for backgrounds
160
+ // Background subtle: very light version for backgrounds (--atomix-primary-bg-subtle)
123
161
  vars[`${prefix}-${key}-bg-subtle`] = alpha(color.main, 0.1);
124
162
 
125
- // Border subtle: light version for borders
163
+ // Border subtle: light version for borders (--atomix-primary-border-subtle)
126
164
  vars[`${prefix}-${key}-border-subtle`] = alpha(color.main, 0.2);
127
-
128
- // Generate full color scale (1-10) - only for primary, not for light/dark
129
- if (key !== 'light' && key !== 'dark') {
130
- const colorScale = generateColorScale(color.main, prefix, key);
131
- Object.assign(vars, colorScale);
132
- }
133
165
  }
134
166
  });
135
167
 
136
- // Generate gray scale from text colors
168
+ // Generate gray scale from text colors (matches SCSS: --atomix-gray-1 through --atomix-gray-10)
137
169
  // Use text.primary as base for gray scale
138
170
  if (palette.text?.primary) {
139
171
  const grayScale = generateColorScale(palette.text.primary, prefix, 'gray');
140
172
  Object.assign(vars, grayScale);
141
173
  }
142
174
 
143
- // Generate red, green, blue, yellow scales if available
175
+ // Generate red, green, blue, yellow scales (matches SCSS: --atomix-red-1 through --atomix-red-10, etc.)
144
176
  // These are typically used for semantic colors but can be extended
145
177
  if (palette.error && typeof palette.error === 'object' && palette.error.main) {
146
178
  const redScale = generateColorScale(palette.error.main, prefix, 'red');
@@ -159,11 +191,11 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
159
191
  Object.assign(vars, yellowScale);
160
192
  }
161
193
 
162
- // Background mappings to SCSS body variables
194
+ // Background mappings to SCSS body variables (matches SCSS: --atomix-body-bg)
163
195
  if (palette.background) {
164
196
  vars[`${prefix}-body-bg`] = palette.background.default;
165
197
 
166
- // Generate background subtle variants
198
+ // Generate background subtle variants (matches SCSS: --atomix-primary-bg-subtle, etc.)
167
199
  if (palette.background.default) {
168
200
  vars[`${prefix}-primary-bg-subtle`] = palette.background.default;
169
201
  }
@@ -181,11 +213,11 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
181
213
  }
182
214
  }
183
215
 
184
- // Text mappings to SCSS body variables
216
+ // Text mappings to SCSS body variables (matches SCSS: --atomix-body-color, --atomix-primary-text-emphasis, etc.)
185
217
  if (palette.text) {
186
218
  vars[`${prefix}-body-color`] = palette.text.primary;
187
219
 
188
- // Generate text emphasis variants
220
+ // Generate text emphasis variants (matches SCSS pattern)
189
221
  if (palette.text.primary) {
190
222
  vars[`${prefix}-primary-text-emphasis`] = palette.text.primary;
191
223
  }
@@ -205,14 +237,14 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
205
237
  }
206
238
  }
207
239
 
208
- // Brand text emphasis (uses primary color)
240
+ // Brand text emphasis (uses primary color) - matches SCSS: --atomix-brand-text-emphasis
209
241
  if (palette.primary) {
210
242
  vars[`${prefix}-brand-text-emphasis`] = palette.primary.main;
211
- // Brand border subtle
243
+ // Brand border subtle - matches SCSS: --atomix-brand-border-subtle
212
244
  vars[`${prefix}-brand-border-subtle`] = alpha(palette.primary.main, 0.2);
213
245
  }
214
246
 
215
- // Light and dark border subtle (if light/dark colors exist)
247
+ // Light and dark border subtle (if light/dark colors exist) - matches SCSS pattern
216
248
  if (palette.light && typeof palette.light === 'object') {
217
249
  vars[`${prefix}-light-border-subtle`] = alpha(palette.light.main, 0.2);
218
250
  }
@@ -220,7 +252,7 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
220
252
  vars[`${prefix}-dark-border-subtle`] = alpha(palette.dark.main, 0.2);
221
253
  }
222
254
 
223
- // Heading color (defaults to text primary)
255
+ // Heading color (defaults to text primary) - matches SCSS: --atomix-heading-color
224
256
  if (palette.text) {
225
257
  vars[`${prefix}-heading-color`] = palette.text.primary;
226
258
  }
@@ -304,6 +336,12 @@ function generatePaletteVariables(palette: Theme['palette'], prefix: string): Re
304
336
 
305
337
  /**
306
338
  * Generate CSS variables from theme typography
339
+ *
340
+ * Matches SCSS token naming pattern:
341
+ * - --atomix-body-font-family
342
+ * - --atomix-body-font-size
343
+ * - --atomix-font-weight-normal
344
+ * - --atomix-line-height-base
307
345
  */
308
346
  function generateTypographyVariables(
309
347
  typography: Theme['typography'],
@@ -311,25 +349,24 @@ function generateTypographyVariables(
311
349
  ): Record<string, string> {
312
350
  const vars: Record<string, string> = {};
313
351
 
314
- // Font family (SCSS: --atomix-body-font-family)
352
+ // Font family (matches SCSS: --atomix-body-font-family, --atomix-font-sans-serif, --atomix-font-monospace)
315
353
  vars[`${prefix}-body-font-family`] = typography.fontFamily;
316
- // Additional font family tokens
317
354
  vars[`${prefix}-font-sans-serif`] = typography.fontFamily;
318
355
  vars[`${prefix}-font-monospace`] = 'SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace';
319
356
 
320
- // Root font size (SCSS: --atomix-root-font-size)
357
+ // Root font size (matches SCSS: --atomix-root-font-size)
321
358
  // Typically 16px, but can be customized
322
359
  const rootFontSize = typography.fontSize || 16;
323
360
  vars[`${prefix}-root-font-size`] = `${rootFontSize}px`;
324
361
 
325
- // Base font size (SCSS: --atomix-body-font-size)
362
+ // Base font size (matches SCSS: --atomix-body-font-size)
326
363
  const baseFontSize = typography.fontSize;
327
364
  vars[`${prefix}-body-font-size`] = `${baseFontSize}px`;
328
365
 
329
- // Base font weight (SCSS: --atomix-body-font-weight)
366
+ // Base font weight (matches SCSS: --atomix-body-font-weight)
330
367
  vars[`${prefix}-body-font-weight`] = String(typography.fontWeightRegular);
331
368
 
332
- // Font weight scale
369
+ // Font weight scale (matches SCSS: --atomix-font-weight-light, --atomix-font-weight-normal, etc.)
333
370
  vars[`${prefix}-font-weight-light`] = String(typography.fontWeightLight ?? 300);
334
371
  vars[`${prefix}-font-weight-normal`] = String(typography.fontWeightRegular ?? 400);
335
372
  vars[`${prefix}-font-weight-medium`] = String(typography.fontWeightMedium ?? 500);
@@ -343,18 +380,18 @@ function generateTypographyVariables(
343
380
  vars[`${prefix}-font-weight-black`] = String((typography as any).fontWeightBlack || 900);
344
381
  }
345
382
 
346
- // Base line height (SCSS: --atomix-body-line-height)
383
+ // Base line height (matches SCSS: --atomix-body-line-height)
347
384
  const baseLineHeight = typeof typography.body1?.lineHeight === 'number'
348
385
  ? typography.body1.lineHeight
349
386
  : parseFloat(String(typography.body1?.lineHeight || 1.2));
350
387
  vars[`${prefix}-body-line-height`] = String(baseLineHeight);
351
388
 
352
- // Line height scale (using calculated defaults based on design tokens)
389
+ // Line height scale (matches SCSS: --atomix-line-height-base, --atomix-line-height-sm, --atomix-line-height-lg)
353
390
  vars[`${prefix}-line-height-base`] = String(baseLineHeight);
354
391
  vars[`${prefix}-line-height-sm`] = String(1.43);
355
392
  vars[`${prefix}-line-height-lg`] = String(1.56);
356
393
 
357
- // Extended font size scale (matching design system tokens)
394
+ // Extended font size scale (matches SCSS: --atomix-font-size-xs, --atomix-font-size-sm, etc.)
358
395
  const fontSizeXs = baseFontSize * 0.75; // 12px if base is 16px
359
396
  const fontSizeSm = baseFontSize * 0.875; // 14px if base is 16px
360
397
  const fontSizeMd = baseFontSize * 1; // 16px if base is 16px (same as base)
@@ -369,13 +406,13 @@ function generateTypographyVariables(
369
406
  vars[`${prefix}-font-size-xl`] = `${fontSizeXl}px`;
370
407
  vars[`${prefix}-font-size-2xl`] = `${fontSize2xl}px`;
371
408
 
372
- // Display font size (optional, may not be in theme)
409
+ // Display font size (matches SCSS: --atomix-display-1)
373
410
  if ('display1' in typography) {
374
411
  const display1 = (typography as any).display1;
375
412
  vars[`${prefix}-display-1`] = typeof display1 === 'string' ? display1 : `${display1}px`;
376
413
  }
377
414
 
378
- // Letter spacing for headings (from typography config)
415
+ // Letter spacing for headings (matches SCSS: --atomix-letter-spacing-h1, etc.)
379
416
  const headings = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;
380
417
  headings.forEach((heading) => {
381
418
  const headingConfig = typography[heading];
@@ -389,19 +426,23 @@ function generateTypographyVariables(
389
426
 
390
427
  /**
391
428
  * Generate CSS variables from theme shadows
429
+ *
430
+ * Matches SCSS token naming pattern:
431
+ * - --atomix-box-shadow (base, mapped from md)
432
+ * - --atomix-box-shadow-xs, --atomix-box-shadow-sm, --atomix-box-shadow-lg, --atomix-box-shadow-xl
433
+ * - --atomix-box-shadow-inset
392
434
  */
393
435
  function generateShadowVariables(shadows: Theme['shadows'], prefix: string): Record<string, string> {
394
436
  const vars: Record<string, string> = {};
395
437
 
396
- // Map JS shadow keys to SCSS variables
397
- // SCSS uses --atomix-box-shadow (base) and --atomix-box-shadow-{size}
438
+ // Map JS shadow keys to SCSS variables (matches SCSS pattern exactly)
398
439
  if (shadows.md) vars[`${prefix}-box-shadow`] = shadows.md; // Map md to base
399
440
  if (shadows.xs) vars[`${prefix}-box-shadow-xs`] = shadows.xs;
400
441
  if (shadows.sm) vars[`${prefix}-box-shadow-sm`] = shadows.sm;
401
442
  if (shadows.lg) vars[`${prefix}-box-shadow-lg`] = shadows.lg;
402
443
  if (shadows.xl) vars[`${prefix}-box-shadow-xl`] = shadows.xl;
403
444
 
404
- // Inset shadow (generate from base shadow if not provided)
445
+ // Inset shadow (matches SCSS: --atomix-box-shadow-inset)
405
446
  if (shadows.inset) {
406
447
  vars[`${prefix}-box-shadow-inset`] = shadows.inset;
407
448
  } else if (shadows.sm) {
@@ -93,7 +93,8 @@ export class RTLManager {
93
93
 
94
94
  // Try navigator.language first
95
95
  const lang: string = navigator.language || (navigator.languages && navigator.languages[0]) || 'en';
96
- return String(lang).split('-')[0].toLowerCase();
96
+ const langParts = String(lang).split('-');
97
+ return langParts[0] ? langParts[0].toLowerCase() : 'en';
97
98
  }
98
99
 
99
100
  /**
@@ -8,9 +8,18 @@
8
8
  export { ThemeProvider } from './runtime/ThemeProvider';
9
9
  export { useTheme } from './runtime/useTheme';
10
10
  export { ThemeContext } from './ThemeContext';
11
+ export { ThemeManager } from './runtime/ThemeManager';
12
+ export { ThemeErrorBoundary } from './runtime/ThemeErrorBoundary';
11
13
 
12
- // Theme building
13
- export { ThemeBuilder, createThemeBuilder, extendTheme, createTheme } from './builders/ThemeBuilder';
14
+ // Theme creation
15
+ export { createTheme } from './createTheme';
16
+ export { createThemeFromConfig } from './createThemeFromConfig';
17
+
18
+ // Theme utilities
19
+ export { quickTheme, createDarkVariant, validateTheme, themeToCSS, exportTheme, importTheme } from '../theme-tools';
20
+
21
+ // DevTools (for development and debugging)
22
+ export * from './devtools';
14
23
 
15
24
  // Theme application
16
25
  export { ThemeApplicator, getThemeApplicator, applyTheme, removeTheme } from './runtime/ThemeApplicator';
@@ -29,6 +38,9 @@ export {
29
38
  extractComponentName,
30
39
  } from './cssVariableMapper';
31
40
 
41
+ // RTL Support
42
+ export { RTLManager } from './i18n/rtl';
43
+
32
44
  // Types
33
45
  export type {
34
46
  Theme,
@@ -44,7 +56,11 @@ export type {
44
56
  ThemeComponentOverrides,
45
57
  } from './types';
46
58
 
59
+ export type { ThemeErrorBoundaryProps } from './runtime/ThemeErrorBoundary';
60
+
47
61
  export type {
48
62
  CSSVariableConfig,
49
63
  CSSVariableNamingOptions,
50
64
  } from './cssVariableMapper';
65
+
66
+ export type { RTLConfig } from './i18n/rtl';
@@ -47,8 +47,8 @@ export class ThemeApplicator {
47
47
  }
48
48
 
49
49
  // Apply component overrides
50
- if (theme.components) {
51
- this.applyComponentOverrides(theme.components);
50
+ if ((theme as any).components) {
51
+ this.applyComponentOverrides((theme as any).components);
52
52
  }
53
53
  }
54
54
 
@@ -76,19 +76,25 @@ export class ThemeApplicator {
76
76
 
77
77
  if (typography.fontSize) {
78
78
  Object.entries(typography.fontSize).forEach(([key, value]) => {
79
- vars[`--atomix-font-size-${key}`] = value;
79
+ if (typeof value === 'string' || typeof value === 'number') {
80
+ vars[`--atomix-font-size-${key}`] = value;
81
+ }
80
82
  });
81
83
  }
82
84
 
83
85
  if (typography.fontWeight) {
84
86
  Object.entries(typography.fontWeight).forEach(([key, value]) => {
85
- vars[`--atomix-font-weight-${key}`] = value;
87
+ if (typeof value === 'string' || typeof value === 'number') {
88
+ vars[`--atomix-font-weight-${key}`] = value;
89
+ }
86
90
  });
87
91
  }
88
92
 
89
93
  if (typography.lineHeight) {
90
94
  Object.entries(typography.lineHeight).forEach(([key, value]) => {
91
- vars[`--atomix-line-height-${key}`] = value;
95
+ if (typeof value === 'string' || typeof value === 'number') {
96
+ vars[`--atomix-line-height-${key}`] = value;
97
+ }
92
98
  });
93
99
  }
94
100
 
@@ -98,12 +104,23 @@ export class ThemeApplicator {
98
104
  /**
99
105
  * Apply spacing system
100
106
  */
101
- private applySpacing(spacing: Record<string, string | number>): void {
107
+ private applySpacing(spacing: any): void {
102
108
  const vars: Record<string, string | number> = {};
103
109
 
104
- Object.entries(spacing).forEach(([key, value]) => {
105
- vars[`--atomix-space-${key}`] = value;
106
- });
110
+ // Handle spacing function or object
111
+ if (typeof spacing === 'function') {
112
+ // If spacing is a function, we can't iterate it directly
113
+ // Just skip for now as it's a special case
114
+ return;
115
+ }
116
+
117
+ if (typeof spacing === 'object' && spacing !== null) {
118
+ Object.entries(spacing).forEach(([key, value]) => {
119
+ if (typeof value === 'string' || typeof value === 'number') {
120
+ vars[`--atomix-space-${key}`] = value;
121
+ }
122
+ });
123
+ }
107
124
 
108
125
  this.applyGlobalCSSVars(vars);
109
126
  }
@@ -117,9 +134,9 @@ export class ThemeApplicator {
117
134
  const vars: Record<string, string | number> = {};
118
135
 
119
136
  Object.entries(palette).forEach(([colorName, colorScale]) => {
120
- if (colorScale) {
137
+ if (colorScale && typeof colorScale === 'object') {
121
138
  Object.entries(colorScale).forEach(([shade, value]) => {
122
- if (value) {
139
+ if (value && (typeof value === 'string' || typeof value === 'number')) {
123
140
  vars[`--atomix-color-${colorName}-${shade}`] = value;
124
141
  }
125
142
  });
@@ -148,7 +148,7 @@ export class ThemeErrorBoundary extends Component<
148
148
  };
149
149
  }
150
150
 
151
- componentDidCatch(error: Error, errorInfo: ErrorInfo): void {
151
+ override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {
152
152
  // Log error
153
153
  const themeError = error instanceof ThemeError
154
154
  ? error
@@ -187,7 +187,7 @@ export class ThemeErrorBoundary extends Component<
187
187
  }
188
188
  }
189
189
 
190
- componentDidUpdate(prevProps: ThemeErrorBoundaryProps): void {
190
+ override componentDidUpdate(prevProps: ThemeErrorBoundaryProps): void {
191
191
  // Reset error if resetOnPropsChange is true and children changed
192
192
  if (
193
193
  this.props.resetOnPropsChange &&
@@ -202,7 +202,7 @@ export class ThemeErrorBoundary extends Component<
202
202
  }
203
203
  }
204
204
 
205
- render(): ReactNode {
205
+ override render(): ReactNode {
206
206
  if (this.state.hasError && this.state.error && this.state.errorInfo) {
207
207
  // Use custom fallback if provided
208
208
  if (this.props.fallback) {
@@ -10,7 +10,23 @@ import { ThemeError, ThemeErrorCode } from '../errors';
10
10
  import type { ThemeMetadata } from '../types';
11
11
 
12
12
  // Mock dependencies
13
- vi.mock('../core/ThemeEngine');
13
+ vi.mock('../core/ThemeEngine', () => {
14
+ return {
15
+ ThemeEngine: class {
16
+ initialize = vi.fn().mockResolvedValue(undefined);
17
+ on = vi.fn();
18
+ getRegistry = vi.fn().mockReturnValue({
19
+ has: vi.fn().mockReturnValue(false),
20
+ register: vi.fn(),
21
+ getAllMetadata: vi.fn().mockReturnValue([]),
22
+ });
23
+ setTheme = vi.fn().mockResolvedValue(undefined);
24
+ getActiveTheme = vi.fn().mockReturnValue(null);
25
+ isThemeLoaded = vi.fn().mockReturnValue(false);
26
+ preloadTheme = vi.fn().mockResolvedValue(undefined);
27
+ },
28
+ };
29
+ });
14
30
  vi.mock('../config/loader');
15
31
  vi.mock('../utils', () => ({
16
32
  isBrowser: () => true,
@@ -63,7 +63,7 @@ const DEFAULT_CONFIG: Partial<ThemeManagerConfig> = {
63
63
  * // No defaultTheme - uses built-in styles
64
64
  * });
65
65
  *
66
- * await themeManager.setTheme('flashtrade');
66
+ * await themeManager.setTheme('my-custom-theme');
67
67
  * ```
68
68
  */
69
69
  export class ThemeManager {
@@ -289,9 +289,11 @@ export class ThemeManager {
289
289
  /**
290
290
  * Add event listener
291
291
  */
292
+ /* eslint-disable no-dupe-class-members */
292
293
  on(event: 'themeChange', callback: ThemeChangeCallback): void;
293
294
  on(event: 'themeLoad', callback: ThemeLoadCallback): void;
294
295
  on(event: 'themeError', callback: ThemeErrorCallback): void;
296
+ /* eslint-enable no-dupe-class-members */
295
297
  on(event: ThemeManagerEvent, callback: ThemeChangeCallback | ThemeLoadCallback | ThemeErrorCallback): void {
296
298
  if (event === 'themeChange') {
297
299
  this.eventListeners.themeChange.push(callback as ThemeChangeCallback);
@@ -305,9 +307,11 @@ export class ThemeManager {
305
307
  /**
306
308
  * Remove event listener
307
309
  */
310
+ /* eslint-disable no-dupe-class-members */
308
311
  off(event: 'themeChange', callback: ThemeChangeCallback): void;
309
312
  off(event: 'themeLoad', callback: ThemeLoadCallback): void;
310
313
  off(event: 'themeError', callback: ThemeErrorCallback): void;
314
+ /* eslint-enable no-dupe-class-members */
311
315
  off(event: ThemeManagerEvent, callback: ThemeChangeCallback | ThemeLoadCallback | ThemeErrorCallback): void {
312
316
  if (event === 'themeChange') {
313
317
  this.eventListeners.themeChange = this.eventListeners.themeChange.filter(cb => cb !== callback);
@@ -356,13 +360,13 @@ export class ThemeManager {
356
360
  * Emit theme error event
357
361
  */
358
362
  private emitThemeError(error: Error, themeName: string): void {
359
- const themeError = error instanceof ThemeError
360
- ? error
363
+ const themeError = error instanceof ThemeError
364
+ ? error
361
365
  : new ThemeError(
362
- error.message,
363
- ThemeErrorCode.THEME_LOAD_FAILED,
364
- { themeName, originalError: error.message }
365
- );
366
+ error.message,
367
+ ThemeErrorCode.THEME_LOAD_FAILED,
368
+ { themeName, originalError: error.message }
369
+ );
366
370
 
367
371
  if (this.config.onError) {
368
372
  try {
@@ -189,56 +189,56 @@ export interface UseThemeReturn {
189
189
  * Component-level theme override configuration
190
190
  */
191
191
  export interface ComponentThemeOverride {
192
- /** CSS variable overrides for the component */
193
- cssVars?: Record<string, string | number>;
194
-
195
- /** Default prop overrides */
196
- defaultProps?: Record<string, any>;
197
-
198
- /** Part-specific overrides */
199
- parts?: Record<string, {
200
- cssVars?: Record<string, string | number>;
201
- className?: string;
202
- }>;
203
-
204
- /** Variant overrides */
205
- variants?: Record<string, {
192
+ /** CSS variable overrides for the component */
206
193
  cssVars?: Record<string, string | number>;
194
+
195
+ /** Default prop overrides */
196
+ defaultProps?: Record<string, any>;
197
+
198
+ /** Part-specific overrides */
199
+ parts?: Record<string, {
200
+ cssVars?: Record<string, string | number>;
201
+ className?: string;
202
+ }>;
203
+
204
+ /** Variant overrides */
205
+ variants?: Record<string, {
206
+ cssVars?: Record<string, string | number>;
207
+ className?: string;
208
+ }>;
209
+
210
+ /** Additional className for the component */
207
211
  className?: string;
208
- }>;
209
-
210
- /** Additional className for the component */
211
- className?: string;
212
212
  }
213
213
 
214
214
  /**
215
215
  * Theme component overrides for all components
216
216
  */
217
217
  export interface ThemeComponentOverrides {
218
- Button?: ComponentThemeOverride;
219
- Card?: ComponentThemeOverride;
220
- Input?: ComponentThemeOverride;
221
- Modal?: ComponentThemeOverride;
222
- Dropdown?: ComponentThemeOverride;
223
- Badge?: ComponentThemeOverride;
224
- Tabs?: ComponentThemeOverride;
225
- Progress?: ComponentThemeOverride;
226
- Tooltip?: ComponentThemeOverride;
227
- Select?: ComponentThemeOverride;
228
- Checkbox?: ComponentThemeOverride;
229
- Radio?: ComponentThemeOverride;
230
- Textarea?: ComponentThemeOverride;
231
- FormGroup?: ComponentThemeOverride;
232
- Navbar?: ComponentThemeOverride;
233
- Accordion?: ComponentThemeOverride;
234
- DataTable?: ComponentThemeOverride;
235
- Avatar?: ComponentThemeOverride;
236
- List?: ComponentThemeOverride;
237
- Popover?: ComponentThemeOverride;
238
- Messages?: ComponentThemeOverride;
239
- Callout?: ComponentThemeOverride;
240
- Spinner?: ComponentThemeOverride;
241
- [key: string]: ComponentThemeOverride | undefined;
218
+ Button?: ComponentThemeOverride;
219
+ Card?: ComponentThemeOverride;
220
+ Input?: ComponentThemeOverride;
221
+ Modal?: ComponentThemeOverride;
222
+ Dropdown?: ComponentThemeOverride;
223
+ Badge?: ComponentThemeOverride;
224
+ Tabs?: ComponentThemeOverride;
225
+ Progress?: ComponentThemeOverride;
226
+ Tooltip?: ComponentThemeOverride;
227
+ Select?: ComponentThemeOverride;
228
+ Checkbox?: ComponentThemeOverride;
229
+ Radio?: ComponentThemeOverride;
230
+ Textarea?: ComponentThemeOverride;
231
+ FormGroup?: ComponentThemeOverride;
232
+ Navbar?: ComponentThemeOverride;
233
+ Accordion?: ComponentThemeOverride;
234
+ DataTable?: ComponentThemeOverride;
235
+ Avatar?: ComponentThemeOverride;
236
+ List?: ComponentThemeOverride;
237
+ Popover?: ComponentThemeOverride;
238
+ Messages?: ComponentThemeOverride;
239
+ Callout?: ComponentThemeOverride;
240
+ Spinner?: ComponentThemeOverride;
241
+ [key: string]: ComponentThemeOverride | undefined;
242
242
  }
243
243
 
244
244
  /**
@@ -334,7 +334,6 @@ export interface PaletteOptions {
334
334
  /** Background colors */
335
335
  background?: {
336
336
  default?: string;
337
- paper?: string;
338
337
  subtle?: string;
339
338
  };
340
339
  /** Text colors */