@shohojdhara/atomix 0.3.1 → 0.3.3

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 (449) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/README.md +41 -24
  3. package/dist/atomix.css +540 -666
  4. package/dist/atomix.min.css +3 -3
  5. package/dist/index.d.ts +7559 -5717
  6. package/dist/index.esm.js +5013 -2301
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/index.js +5084 -2356
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.min.js +1 -1
  11. package/dist/index.min.js.map +1 -1
  12. package/dist/themes/applemix.css +1683 -722
  13. package/dist/themes/applemix.css.map +1 -0
  14. package/dist/themes/applemix.min.css +13 -10
  15. package/dist/themes/boomdevs.css +1358 -544
  16. package/dist/themes/boomdevs.css.map +1 -0
  17. package/dist/themes/boomdevs.min.css +13 -10
  18. package/dist/themes/esrar.css +1743 -718
  19. package/dist/themes/esrar.css.map +1 -0
  20. package/dist/themes/esrar.min.css +41 -7
  21. package/dist/themes/flashtrade.css +1735 -752
  22. package/dist/themes/flashtrade.css.map +1 -0
  23. package/dist/themes/flashtrade.min.css +19 -13
  24. package/dist/themes/mashroom.css +1765 -787
  25. package/dist/themes/mashroom.css.map +1 -0
  26. package/dist/themes/mashroom.min.css +87 -38
  27. package/dist/themes/shaj-default.css +1685 -713
  28. package/dist/themes/shaj-default.css.map +1 -0
  29. package/dist/themes/shaj-default.min.css +11 -7
  30. package/package.json +95 -26
  31. package/scripts/atomix-cli.js +1428 -0
  32. package/scripts/build-themes.js +208 -0
  33. package/scripts/cli/interactive-init.js +528 -0
  34. package/scripts/cli/migration-tools.js +603 -0
  35. package/scripts/cli/token-manager.js +519 -0
  36. package/scripts/sync-theme-config.js +309 -0
  37. package/src/components/List/ListGroup.tsx +1 -2
  38. package/src/components/Popover/Popover.tsx +2 -2
  39. package/src/components/Tooltip/Tooltip.stories.tsx +49 -12
  40. package/src/components/Tooltip/Tooltip.tsx +32 -58
  41. package/src/lib/composables/useAtomixGlass.ts +46 -46
  42. package/src/lib/composables/useTooltip.ts +285 -0
  43. package/src/lib/constants/cssVariables.ts +390 -0
  44. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +151 -0
  45. package/src/lib/hooks/index.ts +19 -0
  46. package/src/lib/hooks/useComponentCustomization.ts +175 -0
  47. package/src/lib/index.ts +10 -1
  48. package/src/lib/patterns/__tests__/slots.test.ts +108 -0
  49. package/src/lib/patterns/index.ts +35 -0
  50. package/src/lib/patterns/slots.tsx +421 -0
  51. package/src/lib/theme/__tests__/ThemeBuilder.test.ts +223 -0
  52. package/src/lib/theme/builders/ThemeBuilder.ts +372 -0
  53. package/src/lib/theme/config/index.ts +21 -0
  54. package/src/lib/theme/config/loader.ts +276 -0
  55. package/src/lib/theme/config/types.ts +98 -0
  56. package/src/lib/theme/config/validator.ts +326 -0
  57. package/src/lib/theme/constants.ts +183 -0
  58. package/src/lib/theme/core/ThemeCache.ts +283 -0
  59. package/src/lib/theme/core/ThemeEngine.test.ts +146 -0
  60. package/src/lib/theme/core/ThemeEngine.ts +657 -0
  61. package/src/lib/theme/core/ThemeRegistry.ts +284 -0
  62. package/src/lib/theme/core/ThemeValidator.ts +530 -0
  63. package/src/lib/theme/core/index.ts +24 -0
  64. package/src/lib/theme/createTheme.ts +83 -204
  65. package/src/lib/theme/cssVariableMapper.ts +261 -0
  66. package/src/lib/theme/devtools/CLI.ts +279 -0
  67. package/src/lib/theme/devtools/Inspector.tsx +594 -0
  68. package/src/lib/theme/devtools/Preview.tsx +392 -0
  69. package/src/lib/theme/devtools/index.ts +21 -0
  70. package/src/lib/theme/errors.test.ts +207 -0
  71. package/src/lib/theme/errors.ts +233 -0
  72. package/src/lib/theme/generateCSSVariables.ts +93 -9
  73. package/src/lib/theme/generators/CSSGenerator.ts +311 -0
  74. package/src/lib/theme/generators/ConfigGenerator.ts +287 -0
  75. package/src/lib/theme/generators/TypeGenerator.ts +228 -0
  76. package/src/lib/theme/generators/index.ts +21 -0
  77. package/src/lib/theme/i18n/index.ts +9 -0
  78. package/src/lib/theme/i18n/rtl.ts +325 -0
  79. package/src/lib/theme/index.ts +36 -109
  80. package/src/lib/theme/monitoring/ThemeAnalytics.ts +409 -0
  81. package/src/lib/theme/monitoring/index.ts +17 -0
  82. package/src/lib/theme/overrides/ComponentOverrides.ts +243 -0
  83. package/src/lib/theme/overrides/index.ts +15 -0
  84. package/src/lib/theme/runtime/ThemeApplicator.ts +252 -0
  85. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +233 -0
  86. package/src/lib/theme/runtime/ThemeManager.test.ts +176 -0
  87. package/src/lib/theme/runtime/ThemeManager.ts +442 -0
  88. package/src/lib/theme/runtime/ThemeProvider.tsx +318 -0
  89. package/src/lib/theme/runtime/index.ts +17 -0
  90. package/src/lib/theme/runtime/useTheme.ts +52 -0
  91. package/src/lib/theme/themeUtils.ts +27 -5
  92. package/src/lib/theme/types.ts +62 -1
  93. package/src/lib/theme/utils.ts +23 -22
  94. package/src/lib/theme/whitelabel/WhiteLabelManager.ts +364 -0
  95. package/src/lib/theme/whitelabel/index.ts +13 -0
  96. package/src/lib/theme-tools.ts +185 -0
  97. package/src/lib/types/components.ts +194 -0
  98. package/src/lib/types/partProps.ts +426 -0
  99. package/src/lib/utils/__tests__/componentUtils.test.ts +144 -0
  100. package/src/lib/utils/componentUtils.ts +163 -0
  101. package/src/lib/utils/index.ts +17 -57
  102. package/src/styles/01-settings/_settings.badge.scss +1 -1
  103. package/src/styles/01-settings/_settings.callout.scss +1 -1
  104. package/src/styles/01-settings/_settings.card.scss +1 -1
  105. package/src/styles/01-settings/_settings.colors.scss +10 -10
  106. package/src/styles/01-settings/_settings.input.scss +1 -1
  107. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  108. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  109. package/src/styles/01-settings/_settings.upload.scss +1 -1
  110. package/src/styles/06-components/_components.chart.scss +2 -2
  111. package/src/styles/06-components/_components.tooltip.scss +31 -81
  112. package/src/styles/99-utilities/_utilities.border.scss +27 -58
  113. package/src/styles/99-utilities/_utilities.gradient.scss +12 -0
  114. package/src/styles/99-utilities/_utilities.position.scss +8 -15
  115. package/src/styles/99-utilities/_utilities.scss +2 -0
  116. package/src/styles/99-utilities/_utilities.spacing.scss +76 -121
  117. package/src/styles/99-utilities/_utilities.text.scss +30 -49
  118. package/src/themes/README.md +443 -0
  119. package/src/themes/THEME_CHECKLIST.md +74 -0
  120. package/src/themes/applemix/01-settings/_index.scss +24 -0
  121. package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
  122. package/src/themes/applemix/01-settings/_settings.background.scss +6 -0
  123. package/src/themes/applemix/01-settings/_settings.colors.scss +75 -0
  124. package/src/themes/applemix/01-settings/_settings.config.scss +15 -0
  125. package/src/themes/applemix/01-settings/_settings.typography.scss +30 -0
  126. package/src/themes/applemix/02-tools/_index.scss +4 -0
  127. package/src/themes/applemix/03-generic/_index.scss +7 -0
  128. package/src/themes/applemix/04-elements/_index.scss +7 -0
  129. package/src/themes/applemix/05-objects/_index.scss +7 -0
  130. package/src/themes/applemix/06-components/_index.scss +15 -0
  131. package/src/themes/applemix/99-utilities/_index.scss +7 -0
  132. package/src/themes/applemix/README.md +378 -0
  133. package/src/themes/applemix/index.scss +33 -0
  134. package/src/themes/boomdevs/01-settings/_index.scss +38 -0
  135. package/src/themes/boomdevs/01-settings/_settings.accordion.scss +12 -0
  136. package/src/themes/boomdevs/01-settings/_settings.animations.scss +11 -0
  137. package/src/themes/boomdevs/01-settings/_settings.avatar.scss +9 -0
  138. package/src/themes/boomdevs/01-settings/_settings.badge.scss +11 -0
  139. package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +16 -0
  140. package/src/themes/boomdevs/01-settings/_settings.border.scss +10 -0
  141. package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +14 -0
  142. package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +13 -0
  143. package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +15 -0
  144. package/src/themes/boomdevs/01-settings/_settings.button.scss +9 -0
  145. package/src/themes/boomdevs/01-settings/_settings.callout.scss +9 -0
  146. package/src/themes/boomdevs/01-settings/_settings.card.scss +11 -0
  147. package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +9 -0
  148. package/src/themes/boomdevs/01-settings/_settings.colors.scss +145 -0
  149. package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +11 -0
  150. package/src/themes/boomdevs/01-settings/_settings.grid.scss +16 -0
  151. package/src/themes/boomdevs/01-settings/_settings.input.scss +14 -0
  152. package/src/themes/boomdevs/01-settings/_settings.link.scss +11 -0
  153. package/src/themes/boomdevs/01-settings/_settings.list.scss +10 -0
  154. package/src/themes/boomdevs/01-settings/_settings.modal.scss +16 -0
  155. package/src/themes/boomdevs/01-settings/_settings.navbar.scss +16 -0
  156. package/src/themes/boomdevs/01-settings/_settings.pagination.scss +13 -0
  157. package/src/themes/boomdevs/01-settings/_settings.progress.scss +11 -0
  158. package/src/themes/boomdevs/01-settings/_settings.rating.scss +10 -0
  159. package/src/themes/boomdevs/01-settings/_settings.spacing.scss +33 -0
  160. package/src/themes/boomdevs/01-settings/_settings.spinner.scss +11 -0
  161. package/src/themes/boomdevs/01-settings/_settings.steps.scss +12 -0
  162. package/src/themes/boomdevs/01-settings/_settings.tabs.scss +12 -0
  163. package/src/themes/boomdevs/01-settings/_settings.todo.scss +15 -0
  164. package/src/themes/boomdevs/01-settings/_settings.toggle.scss +14 -0
  165. package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +13 -0
  166. package/src/themes/boomdevs/01-settings/_settings.typography.scss +58 -0
  167. package/src/themes/boomdevs/01-settings/_settings.video-player.scss +12 -0
  168. package/src/themes/boomdevs/02-tools/_index.scss +7 -0
  169. package/src/themes/boomdevs/03-generic/_index.scss +7 -0
  170. package/src/themes/boomdevs/04-elements/_index.scss +7 -0
  171. package/src/themes/boomdevs/05-objects/_index.scss +7 -0
  172. package/src/themes/boomdevs/06-components/_components.button.scss +11 -0
  173. package/src/themes/boomdevs/06-components/_index.scss +11 -0
  174. package/src/themes/boomdevs/99-utilities/_index.scss +7 -0
  175. package/src/themes/boomdevs/index.scss +26 -0
  176. package/src/themes/esrar/01-settings/_index.scss +15 -0
  177. package/src/themes/esrar/01-settings/_settings.colors.scss +91 -0
  178. package/src/themes/esrar/02-tools/_index.scss +8 -0
  179. package/src/themes/esrar/02-tools/_tools.animations.scss +342 -0
  180. package/src/themes/esrar/06-components/_components.accordion.scss +49 -0
  181. package/src/themes/esrar/06-components/_components.avatar-group.scss +14 -0
  182. package/src/themes/esrar/06-components/_components.avatar.scss +61 -0
  183. package/src/themes/esrar/06-components/_components.badge.scss +117 -0
  184. package/src/themes/esrar/06-components/_components.breadcrumb.scss +65 -0
  185. package/src/themes/esrar/06-components/_components.btn-group.scss +19 -0
  186. package/src/themes/esrar/06-components/_components.button.scss +224 -0
  187. package/src/themes/esrar/06-components/_components.callout.scss +51 -0
  188. package/src/themes/esrar/06-components/_components.card.scss +134 -0
  189. package/src/themes/esrar/06-components/_components.chart.scss +24 -0
  190. package/src/themes/esrar/06-components/_components.checkbox-group.scss +26 -0
  191. package/src/themes/esrar/06-components/_components.checkbox.scss +71 -0
  192. package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +29 -0
  193. package/src/themes/esrar/06-components/_components.countdown.scss +67 -0
  194. package/src/themes/esrar/06-components/_components.data-table.scss +22 -0
  195. package/src/themes/esrar/06-components/_components.datepicker.scss +20 -0
  196. package/src/themes/esrar/06-components/_components.dropdown.scss +272 -0
  197. package/src/themes/esrar/06-components/_components.edge-panel.scss +10 -0
  198. package/src/themes/esrar/06-components/_components.form-group.scss +15 -0
  199. package/src/themes/esrar/06-components/_components.form.scss +66 -0
  200. package/src/themes/esrar/06-components/_components.hero.scss +251 -0
  201. package/src/themes/esrar/06-components/_components.icon.scss +33 -0
  202. package/src/themes/esrar/06-components/_components.image-gallery.scss +29 -0
  203. package/src/themes/esrar/06-components/_components.input.scss +91 -0
  204. package/src/themes/esrar/06-components/_components.list-group.scss +26 -0
  205. package/src/themes/esrar/06-components/_components.modal.scss +148 -0
  206. package/src/themes/esrar/06-components/_components.notification.scss +80 -0
  207. package/src/themes/esrar/06-components/_components.pagination.scss +84 -0
  208. package/src/themes/esrar/06-components/_components.popover.scss +10 -0
  209. package/src/themes/esrar/06-components/_components.progress.scss +64 -0
  210. package/src/themes/esrar/06-components/_components.rating.scss +26 -0
  211. package/src/themes/esrar/06-components/_components.skeleton.scss +15 -0
  212. package/src/themes/esrar/06-components/_components.slider.scss +90 -0
  213. package/src/themes/esrar/06-components/_components.spinner.scss +71 -0
  214. package/src/themes/esrar/06-components/_components.steps.scss +76 -0
  215. package/src/themes/esrar/06-components/_components.tab.scss +58 -0
  216. package/src/themes/esrar/06-components/_components.tag.scss +21 -0
  217. package/src/themes/esrar/06-components/_components.timeline.scss +19 -0
  218. package/src/themes/esrar/06-components/_components.toast.scss +91 -0
  219. package/src/themes/esrar/06-components/_components.toggle.scss +74 -0
  220. package/src/themes/esrar/06-components/_components.tooltip.scss +45 -0
  221. package/src/themes/esrar/06-components/_components.upload.scss +102 -0
  222. package/src/themes/esrar/06-components/_index.scss +42 -0
  223. package/src/themes/esrar/index.scss +30 -0
  224. package/src/themes/flashtrade/01-settings/_index.scss +19 -0
  225. package/src/themes/flashtrade/01-settings/_settings.animations.scss +11 -0
  226. package/src/themes/flashtrade/01-settings/_settings.background.scss +9 -0
  227. package/src/themes/flashtrade/01-settings/_settings.colors.scss +79 -0
  228. package/src/themes/flashtrade/01-settings/_settings.config.scss +16 -0
  229. package/src/themes/flashtrade/01-settings/_settings.typography.scss +35 -0
  230. package/src/themes/flashtrade/02-tools/_index.scss +8 -0
  231. package/src/themes/flashtrade/03-generic/_index.scss +8 -0
  232. package/src/themes/flashtrade/04-elements/_index.scss +12 -0
  233. package/src/themes/flashtrade/05-objects/_index.scss +8 -0
  234. package/src/themes/flashtrade/06-components/_components.badge.scss +156 -0
  235. package/src/themes/flashtrade/06-components/_components.button.scss +135 -0
  236. package/src/themes/flashtrade/06-components/_components.card.scss +214 -0
  237. package/src/themes/flashtrade/06-components/_components.navbar.scss +227 -0
  238. package/src/themes/flashtrade/06-components/_index.scss +13 -0
  239. package/src/themes/flashtrade/99-utilities/_index.scss +9 -0
  240. package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +187 -0
  241. package/src/themes/flashtrade/README.md +386 -0
  242. package/src/themes/flashtrade/demo.html +272 -0
  243. package/src/themes/flashtrade/index.scss +36 -0
  244. package/src/themes/mashroom/01-settings/_index.scss +69 -0
  245. package/src/themes/mashroom/01-settings/_settings.accordion.scss +32 -0
  246. package/src/themes/mashroom/01-settings/_settings.animations.scss +26 -0
  247. package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +22 -0
  248. package/src/themes/mashroom/01-settings/_settings.avatar.scss +57 -0
  249. package/src/themes/mashroom/01-settings/_settings.badge.scss +19 -0
  250. package/src/themes/mashroom/01-settings/_settings.border-radius.scss +24 -0
  251. package/src/themes/mashroom/01-settings/_settings.border.scss +14 -0
  252. package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +40 -0
  253. package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
  254. package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +17 -0
  255. package/src/themes/mashroom/01-settings/_settings.btn-group.scss +5 -0
  256. package/src/themes/mashroom/01-settings/_settings.button.scss +50 -0
  257. package/src/themes/mashroom/01-settings/_settings.callout.scss +81 -0
  258. package/src/themes/mashroom/01-settings/_settings.card.scss +52 -0
  259. package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +5 -0
  260. package/src/themes/mashroom/01-settings/_settings.checkbox.scss +23 -0
  261. package/src/themes/mashroom/01-settings/_settings.color-mode.scss +7 -0
  262. package/src/themes/mashroom/01-settings/_settings.colors.scss +180 -0
  263. package/src/themes/mashroom/01-settings/_settings.config.scss +4 -0
  264. package/src/themes/mashroom/01-settings/_settings.countdown.scss +20 -0
  265. package/src/themes/mashroom/01-settings/_settings.data-table.scss +56 -0
  266. package/src/themes/mashroom/01-settings/_settings.datepicker.scss +45 -0
  267. package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +3 -0
  268. package/src/themes/mashroom/01-settings/_settings.dropdown.scss +45 -0
  269. package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +24 -0
  270. package/src/themes/mashroom/01-settings/_settings.fonts.scss +8 -0
  271. package/src/themes/mashroom/01-settings/_settings.form-group.scss +14 -0
  272. package/src/themes/mashroom/01-settings/_settings.form.scss +6 -0
  273. package/src/themes/mashroom/01-settings/_settings.grid.scss +23 -0
  274. package/src/themes/mashroom/01-settings/_settings.hero.scss +41 -0
  275. package/src/themes/mashroom/01-settings/_settings.input.scss +51 -0
  276. package/src/themes/mashroom/01-settings/_settings.link.scss +13 -0
  277. package/src/themes/mashroom/01-settings/_settings.list-group.scss +16 -0
  278. package/src/themes/mashroom/01-settings/_settings.list.scss +13 -0
  279. package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +23 -0
  280. package/src/themes/mashroom/01-settings/_settings.menu.scss +50 -0
  281. package/src/themes/mashroom/01-settings/_settings.messages.scss +98 -0
  282. package/src/themes/mashroom/01-settings/_settings.modal.scss +41 -0
  283. package/src/themes/mashroom/01-settings/_settings.nav.scss +20 -0
  284. package/src/themes/mashroom/01-settings/_settings.navbar.scss +54 -0
  285. package/src/themes/mashroom/01-settings/_settings.pagination.scss +30 -0
  286. package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +45 -0
  287. package/src/themes/mashroom/01-settings/_settings.popover.scss +20 -0
  288. package/src/themes/mashroom/01-settings/_settings.position.scss +9 -0
  289. package/src/themes/mashroom/01-settings/_settings.progress.scss +17 -0
  290. package/src/themes/mashroom/01-settings/_settings.rating.scss +11 -0
  291. package/src/themes/mashroom/01-settings/_settings.river.scss +50 -0
  292. package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +31 -0
  293. package/src/themes/mashroom/01-settings/_settings.select.scss +47 -0
  294. package/src/themes/mashroom/01-settings/_settings.side-menu.scss +79 -0
  295. package/src/themes/mashroom/01-settings/_settings.skeleton.scss +24 -0
  296. package/src/themes/mashroom/01-settings/_settings.spacing.scss +66 -0
  297. package/src/themes/mashroom/01-settings/_settings.spinner.scss +34 -0
  298. package/src/themes/mashroom/01-settings/_settings.steps.scss +33 -0
  299. package/src/themes/mashroom/01-settings/_settings.tabs.scss +33 -0
  300. package/src/themes/mashroom/01-settings/_settings.testimonials.scss +24 -0
  301. package/src/themes/mashroom/01-settings/_settings.todo.scss +52 -0
  302. package/src/themes/mashroom/01-settings/_settings.toggle.scss +49 -0
  303. package/src/themes/mashroom/01-settings/_settings.tooltip.scss +20 -0
  304. package/src/themes/mashroom/01-settings/_settings.typography.scss +95 -0
  305. package/src/themes/mashroom/01-settings/_settings.upload.scss +96 -0
  306. package/src/themes/mashroom/01-settings/_settings.z-layers.scss +19 -0
  307. package/src/themes/mashroom/02-tools/_index.scss +8 -0
  308. package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +78 -0
  309. package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +114 -0
  310. package/src/themes/mashroom/03-generic/_index.scss +6 -0
  311. package/src/themes/mashroom/04-elements/_index.scss +6 -0
  312. package/src/themes/mashroom/05-objects/_index.scss +6 -0
  313. package/src/themes/mashroom/06-components/_components.accordion.scss +187 -0
  314. package/src/themes/mashroom/06-components/_components.avatar-group.scss +276 -0
  315. package/src/themes/mashroom/06-components/_components.avatar.scss +114 -0
  316. package/src/themes/mashroom/06-components/_components.badge.scss +152 -0
  317. package/src/themes/mashroom/06-components/_components.breadcrumb.scss +162 -0
  318. package/src/themes/mashroom/06-components/_components.btn-group.scss +404 -0
  319. package/src/themes/mashroom/06-components/_components.button.scss +160 -0
  320. package/src/themes/mashroom/06-components/_components.callout.scss +140 -0
  321. package/src/themes/mashroom/06-components/_components.card.scss +225 -0
  322. package/src/themes/mashroom/06-components/_components.checkbox.scss +186 -0
  323. package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +308 -0
  324. package/src/themes/mashroom/06-components/_components.countdown.scss +402 -0
  325. package/src/themes/mashroom/06-components/_components.data-table.scss +354 -0
  326. package/src/themes/mashroom/06-components/_components.datepicker.scss +349 -0
  327. package/src/themes/mashroom/06-components/_components.dropdown.scss +334 -0
  328. package/src/themes/mashroom/06-components/_components.edge-panel.scss +413 -0
  329. package/src/themes/mashroom/06-components/_components.form-group.scss +433 -0
  330. package/src/themes/mashroom/06-components/_components.form.scss +358 -0
  331. package/src/themes/mashroom/06-components/_components.hero.scss +151 -0
  332. package/src/themes/mashroom/06-components/_components.input.scss +147 -0
  333. package/src/themes/mashroom/06-components/_components.list-group.scss +456 -0
  334. package/src/themes/mashroom/06-components/_components.list.scss +145 -0
  335. package/src/themes/mashroom/06-components/_components.menu.scss +497 -0
  336. package/src/themes/mashroom/06-components/_components.messages.scss +277 -0
  337. package/src/themes/mashroom/06-components/_components.modal.scss +264 -0
  338. package/src/themes/mashroom/06-components/_components.nav.scss +181 -0
  339. package/src/themes/mashroom/06-components/_components.navbar.scss +538 -0
  340. package/src/themes/mashroom/06-components/_components.pagination.scss +400 -0
  341. package/src/themes/mashroom/06-components/_components.photoviewer.scss +498 -0
  342. package/src/themes/mashroom/06-components/_components.popover.scss +383 -0
  343. package/src/themes/mashroom/06-components/_components.product-review.scss +408 -0
  344. package/src/themes/mashroom/06-components/_components.progress.scss +249 -0
  345. package/src/themes/mashroom/06-components/_components.rating.scss +300 -0
  346. package/src/themes/mashroom/06-components/_components.river.scss +570 -0
  347. package/src/themes/mashroom/06-components/_components.sectionintro.scss +546 -0
  348. package/src/themes/mashroom/06-components/_components.select.scss +455 -0
  349. package/src/themes/mashroom/06-components/_components.side-menu.scss +635 -0
  350. package/src/themes/mashroom/06-components/_components.skeleton.scss +447 -0
  351. package/src/themes/mashroom/06-components/_components.slider.scss +414 -0
  352. package/src/themes/mashroom/06-components/_components.spinner.scss +198 -0
  353. package/src/themes/mashroom/06-components/_components.steps.scss +350 -0
  354. package/src/themes/mashroom/06-components/_components.tabs.scss +269 -0
  355. package/src/themes/mashroom/06-components/_components.testimonials.scss +561 -0
  356. package/src/themes/mashroom/06-components/_components.toggle.scss +231 -0
  357. package/src/themes/mashroom/06-components/_components.tooltip.scss +167 -0
  358. package/src/themes/mashroom/06-components/_components.upload.scss +537 -0
  359. package/src/themes/mashroom/06-components/_components.video-player.scss +560 -0
  360. package/src/themes/mashroom/06-components/_index.scss +55 -0
  361. package/src/themes/mashroom/99-utilities/_index.scss +6 -0
  362. package/src/themes/mashroom/index.scss +26 -0
  363. package/src/themes/shaj-default/01-settings/_index.scss +69 -0
  364. package/src/themes/shaj-default/01-settings/_settings.accordion.scss +38 -0
  365. package/src/themes/shaj-default/01-settings/_settings.animations.scss +32 -0
  366. package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +28 -0
  367. package/src/themes/shaj-default/01-settings/_settings.avatar.scss +63 -0
  368. package/src/themes/shaj-default/01-settings/_settings.badge.scss +25 -0
  369. package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +24 -0
  370. package/src/themes/shaj-default/01-settings/_settings.border.scss +20 -0
  371. package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +46 -0
  372. package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
  373. package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +23 -0
  374. package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +11 -0
  375. package/src/themes/shaj-default/01-settings/_settings.button.scss +56 -0
  376. package/src/themes/shaj-default/01-settings/_settings.callout.scss +87 -0
  377. package/src/themes/shaj-default/01-settings/_settings.card.scss +52 -0
  378. package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +11 -0
  379. package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +29 -0
  380. package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +13 -0
  381. package/src/themes/shaj-default/01-settings/_settings.colors.scss +91 -0
  382. package/src/themes/shaj-default/01-settings/_settings.config.scss +4 -0
  383. package/src/themes/shaj-default/01-settings/_settings.countdown.scss +26 -0
  384. package/src/themes/shaj-default/01-settings/_settings.data-table.scss +62 -0
  385. package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +51 -0
  386. package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +9 -0
  387. package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +51 -0
  388. package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +30 -0
  389. package/src/themes/shaj-default/01-settings/_settings.fonts.scss +13 -0
  390. package/src/themes/shaj-default/01-settings/_settings.form-group.scss +20 -0
  391. package/src/themes/shaj-default/01-settings/_settings.form.scss +12 -0
  392. package/src/themes/shaj-default/01-settings/_settings.grid.scss +29 -0
  393. package/src/themes/shaj-default/01-settings/_settings.hero.scss +47 -0
  394. package/src/themes/shaj-default/01-settings/_settings.input.scss +57 -0
  395. package/src/themes/shaj-default/01-settings/_settings.link.scss +19 -0
  396. package/src/themes/shaj-default/01-settings/_settings.list-group.scss +22 -0
  397. package/src/themes/shaj-default/01-settings/_settings.list.scss +19 -0
  398. package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +29 -0
  399. package/src/themes/shaj-default/01-settings/_settings.menu.scss +56 -0
  400. package/src/themes/shaj-default/01-settings/_settings.messages.scss +104 -0
  401. package/src/themes/shaj-default/01-settings/_settings.modal.scss +47 -0
  402. package/src/themes/shaj-default/01-settings/_settings.nav.scss +26 -0
  403. package/src/themes/shaj-default/01-settings/_settings.navbar.scss +60 -0
  404. package/src/themes/shaj-default/01-settings/_settings.pagination.scss +36 -0
  405. package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +51 -0
  406. package/src/themes/shaj-default/01-settings/_settings.popover.scss +26 -0
  407. package/src/themes/shaj-default/01-settings/_settings.position.scss +15 -0
  408. package/src/themes/shaj-default/01-settings/_settings.progress.scss +23 -0
  409. package/src/themes/shaj-default/01-settings/_settings.rating.scss +17 -0
  410. package/src/themes/shaj-default/01-settings/_settings.river.scss +56 -0
  411. package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +37 -0
  412. package/src/themes/shaj-default/01-settings/_settings.select.scss +53 -0
  413. package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +85 -0
  414. package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +30 -0
  415. package/src/themes/shaj-default/01-settings/_settings.spacing.scss +72 -0
  416. package/src/themes/shaj-default/01-settings/_settings.spinner.scss +24 -0
  417. package/src/themes/shaj-default/01-settings/_settings.steps.scss +39 -0
  418. package/src/themes/shaj-default/01-settings/_settings.tabs.scss +39 -0
  419. package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +30 -0
  420. package/src/themes/shaj-default/01-settings/_settings.todo.scss +58 -0
  421. package/src/themes/shaj-default/01-settings/_settings.toggle.scss +55 -0
  422. package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +26 -0
  423. package/src/themes/shaj-default/01-settings/_settings.typography.scss +101 -0
  424. package/src/themes/shaj-default/01-settings/_settings.upload.scss +102 -0
  425. package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +25 -0
  426. package/src/themes/shaj-default/02-tools/_index.scss +0 -0
  427. package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
  428. package/src/themes/shaj-default/03-generic/_index.scss +2 -0
  429. package/src/themes/shaj-default/04-elements/_index.scss +0 -0
  430. package/src/themes/shaj-default/05-objects/_index.scss +0 -0
  431. package/src/themes/shaj-default/06-components/_components.button.scss +55 -0
  432. package/src/themes/shaj-default/06-components/_components.card.scss +57 -0
  433. package/src/themes/shaj-default/06-components/_components.input.scss +58 -0
  434. package/src/themes/shaj-default/06-components/_components.navbar.scss +99 -0
  435. package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
  436. package/src/themes/shaj-default/06-components/_index.scss +13 -0
  437. package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
  438. package/src/themes/shaj-default/index.scss +25 -0
  439. package/src/themes/themes.config.js +219 -0
  440. package/theme.config.ts +360 -0
  441. package/src/lib/theme/ThemeManager.integration.test.ts +0 -124
  442. package/src/lib/theme/ThemeManager.stories.tsx +0 -472
  443. package/src/lib/theme/ThemeManager.test.ts +0 -190
  444. package/src/lib/theme/ThemeManager.ts +0 -645
  445. package/src/lib/theme/ThemeProvider.tsx +0 -377
  446. package/src/lib/theme/createTheme.test.ts +0 -475
  447. package/src/lib/theme/useTheme.test.tsx +0 -67
  448. package/src/lib/theme/useTheme.ts +0 -64
  449. package/src/lib/theme/utils.test.ts +0 -140
@@ -32,6 +32,8 @@ import type {
32
32
  ZIndexOptions,
33
33
  BorderRadiusOptions,
34
34
  } from './types';
35
+ import { hexToRgb, getLuminance, getContrastText, lighten, darken, createSpacing } from './themeUtils';
36
+ import { deepMerge } from './composeTheme';
35
37
 
36
38
  // ============================================================================
37
39
  // Default Theme Values
@@ -39,116 +41,119 @@ import type {
39
41
 
40
42
  const DEFAULT_PALETTE: Theme['palette'] = {
41
43
  primary: {
42
- main: '#7AFFD7',
43
- light: '#A3FFE5',
44
- dark: '#00E6C3',
45
- contrastText: '#000000',
44
+ main: '#7c3aed', // Primary-6
45
+ light: '#d0b2f5', // Primary-3
46
+ dark: '#3c1583', // Primary-9
47
+ contrastText: '#ffffff',
46
48
  },
47
49
  secondary: {
48
- main: '#FF5733',
49
- light: '#FF8A65',
50
- dark: '#C62828',
51
- contrastText: '#FFFFFF',
50
+ main: '#f3f4f6', // Gray-2
51
+ light: '#ffffff', // Gray-1
52
+ dark: '#e5e7eb', // Gray-3
53
+ contrastText: '#1f2937', // Gray-9
52
54
  },
53
55
  error: {
54
- main: '#F44336',
55
- light: '#E57373',
56
- dark: '#D32F2F',
57
- contrastText: '#FFFFFF',
56
+ main: '#ef4444', // Red-6
57
+ light: '#fca5a5', // Red-4
58
+ dark: '#991b1b', // Red-9
59
+ contrastText: '#ffffff',
58
60
  },
59
61
  warning: {
60
- main: '#FF9800',
61
- light: '#FFB74D',
62
- dark: '#F57C00',
62
+ main: '#eab308', // Yellow-6
63
+ light: '#fde047', // Yellow-4
64
+ dark: '#854d0e', // Yellow-9
63
65
  contrastText: '#000000',
64
66
  },
65
67
  info: {
66
- main: '#2196F3',
67
- light: '#64B5F6',
68
- dark: '#1976D2',
69
- contrastText: '#FFFFFF',
68
+ main: '#3b82f6', // Blue-6
69
+ light: '#93c5fd', // Blue-4
70
+ dark: '#1e40af', // Blue-9
71
+ contrastText: '#ffffff',
70
72
  },
71
73
  success: {
72
- main: '#4CAF50',
73
- light: '#81C784',
74
- dark: '#388E3C',
75
- contrastText: '#FFFFFF',
74
+ main: '#22c55e', // Green-6
75
+ light: '#86efac', // Green-4
76
+ dark: '#166534', // Green-9
77
+ contrastText: '#ffffff',
76
78
  },
77
79
  background: {
78
- default: '#FFFFFF',
79
- paper: '#F5F5F5',
80
- subtle: '#FAFAFA',
80
+ default: '#ffffff', // Primary-bg
81
+ paper: '#f3f4f6', // Secondary-bg
82
+ subtle: '#d1d5db', // Gray-4 (Tertiary-bg)
81
83
  },
82
84
  text: {
83
- primary: 'rgba(0, 0, 0, 0.87)',
84
- secondary: 'rgba(0, 0, 0, 0.6)',
85
- disabled: 'rgba(0, 0, 0, 0.38)',
85
+ primary: '#111827', // Gray-10
86
+ secondary: '#374151', // Gray-8
87
+ disabled: '#9ca3af', // Gray-5
86
88
  },
87
89
  };
88
90
 
89
91
  const DEFAULT_TYPOGRAPHY: Theme['typography'] = {
90
- fontFamily: '"Inter", "Roboto", "Helvetica", "Arial", sans-serif',
91
- fontSize: 14,
92
+ fontFamily: '"Roboto", "Helvetica Neue", "Helvetica", "Arial", sans-serif',
93
+ fontSize: 16, // 1rem
92
94
  fontWeightLight: 300,
93
95
  fontWeightRegular: 400,
94
96
  fontWeightMedium: 500,
95
97
  fontWeightSemiBold: 600,
96
98
  fontWeightBold: 700,
99
+ fontWeightHeavy: 800,
100
+ fontWeightBlack: 900,
97
101
  h1: {
98
- fontSize: '2.5rem',
102
+ fontSize: '2.5rem', // 40px
99
103
  fontWeight: 700,
100
- lineHeight: 1.2,
101
- letterSpacing: '-0.01562em',
104
+ lineHeight: 1.3,
105
+ letterSpacing: '-1px',
102
106
  },
103
107
  h2: {
104
- fontSize: '2rem',
108
+ fontSize: '2rem', // 32px
105
109
  fontWeight: 700,
106
110
  lineHeight: 1.3,
107
- letterSpacing: '-0.00833em',
111
+ letterSpacing: '-1px',
108
112
  },
109
113
  h3: {
110
- fontSize: '1.75rem',
111
- fontWeight: 600,
112
- lineHeight: 1.4,
113
- letterSpacing: '0em',
114
+ fontSize: '1.5rem', // 24px
115
+ fontWeight: 700,
116
+ lineHeight: 1.3,
117
+ letterSpacing: '-1px',
114
118
  },
115
119
  h4: {
116
- fontSize: '1.5rem',
117
- fontWeight: 600,
118
- lineHeight: 1.4,
119
- letterSpacing: '0.00735em',
120
+ fontSize: '1.25rem', // 20px
121
+ fontWeight: 700,
122
+ lineHeight: 1.3,
123
+ letterSpacing: '-0.5px',
120
124
  },
121
125
  h5: {
122
- fontSize: '1.25rem',
123
- fontWeight: 600,
124
- lineHeight: 1.5,
125
- letterSpacing: '0em',
126
+ fontSize: '1.125rem', // 18px
127
+ fontWeight: 700,
128
+ lineHeight: 1.3,
129
+ letterSpacing: '-0.5px',
126
130
  },
127
131
  h6: {
128
- fontSize: '1rem',
129
- fontWeight: 600,
130
- lineHeight: 1.6,
131
- letterSpacing: '0.0075em',
132
+ fontSize: '1rem', // 16px
133
+ fontWeight: 700,
134
+ lineHeight: 1.3,
135
+ letterSpacing: '-0.5px',
132
136
  },
133
137
  body1: {
134
- fontSize: '1rem',
138
+ fontSize: '1rem', // 16px
135
139
  fontWeight: 400,
136
- lineHeight: 1.5,
140
+ lineHeight: 1.2,
137
141
  },
138
142
  body2: {
139
- fontSize: '0.875rem',
143
+ fontSize: '0.875rem', // 14px
140
144
  fontWeight: 400,
141
- lineHeight: 1.43,
145
+ lineHeight: 1.2,
142
146
  },
143
147
  };
144
148
 
145
149
  const DEFAULT_BREAKPOINTS: Theme['breakpoints'] = {
146
150
  values: {
147
151
  xs: 0,
148
- sm: 600,
149
- md: 960,
150
- lg: 1280,
151
- xl: 1920,
152
+ sm: 576,
153
+ md: 768,
154
+ lg: 992,
155
+ xl: 1200,
156
+ xxl: 1440,
152
157
  },
153
158
  unit: 'px',
154
159
  up: (key) => {
@@ -167,12 +172,12 @@ const DEFAULT_BREAKPOINTS: Theme['breakpoints'] = {
167
172
  };
168
173
 
169
174
  const DEFAULT_SHADOWS: Theme['shadows'] = {
170
- xs: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
171
- sm: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
172
- md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
173
- lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
174
- xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
175
- inset: 'inset 0 1px 3px 0 rgba(0, 0, 0, 0.1), inset 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
175
+ xs: '0px 1px 2px 0px rgba(45, 54, 67, 0.04), 0px 2px 4px 0px rgba(45, 54, 67, 0.08)',
176
+ sm: '0 2px 4px rgba(0, 0, 0, 0.075)',
177
+ md: '0 4px 8px rgba(0, 0, 0, 0.1)',
178
+ lg: '0 16px 48px rgba(0, 0, 0, 0.175)',
179
+ xl: '0px 16px 64px -8px rgba(45, 54, 67, 0.14)',
180
+ inset: 'inset 0 1px 2px rgba(0, 0, 0, 0.075)',
176
181
  };
177
182
 
178
183
  const DEFAULT_TRANSITIONS: Theme['transitions'] = {
@@ -219,109 +224,6 @@ const DEFAULT_BORDER_RADIUS: Theme['borderRadius'] = {
219
224
  // Helper Functions
220
225
  // ============================================================================
221
226
 
222
- /**
223
- * Deep merge two objects
224
- */
225
- function deepMerge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T {
226
- if (!sources.length) return target;
227
- const source = sources.shift();
228
-
229
- if (isObject(target) && isObject(source)) {
230
- for (const key in source) {
231
- if (!source.hasOwnProperty(key)) continue;
232
- const sourceValue = source[key];
233
- if (isObject(sourceValue)) {
234
- if (!target[key]) Object.assign(target, { [key]: {} });
235
- deepMerge(target[key] as any, sourceValue as any);
236
- } else {
237
- Object.assign(target, { [key]: sourceValue });
238
- }
239
- }
240
- }
241
-
242
- return deepMerge(target, ...sources);
243
- }
244
-
245
- /**
246
- * Check if value is an object
247
- */
248
- function isObject(item: any): item is Record<string, any> {
249
- return item && typeof item === 'object' && !Array.isArray(item);
250
- }
251
-
252
- /**
253
- * Convert hex color to RGB
254
- */
255
- function hexToRgb(hex: string): { r: number; g: number; b: number } | null {
256
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
257
- if (!result || !result[1] || !result[2] || !result[3]) {
258
- return null;
259
- }
260
- return {
261
- r: parseInt(result[1], 16),
262
- g: parseInt(result[2], 16),
263
- b: parseInt(result[3], 16),
264
- };
265
- }
266
-
267
- /**
268
- * Calculate relative luminance
269
- */
270
- function getLuminance(color: string): number {
271
- const rgb = hexToRgb(color);
272
- if (!rgb) return 0;
273
-
274
- const { r, g, b } = rgb;
275
- const [rs, gs, bs] = [r ?? 0, g ?? 0, b ?? 0].map((c) => {
276
- const val = c / 255;
277
- return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);
278
- });
279
-
280
- return 0.2126 * (rs ?? 0) + 0.7152 * (gs ?? 0) + 0.0722 * (bs ?? 0);
281
- }
282
-
283
- /**
284
- * Get contrast text color (black or white) based on background
285
- */
286
- function getContrastText(background: string): string {
287
- const luminance = getLuminance(background);
288
- return luminance > 0.5 ? '#000000' : '#FFFFFF';
289
- }
290
-
291
- /**
292
- * Lighten a color
293
- */
294
- function lighten(color: string, amount: number = 0.2): string {
295
- const rgb = hexToRgb(color);
296
- if (!rgb) return color;
297
-
298
- const { r, g, b } = rgb;
299
- const lightenValue = (val: number) => Math.min(255, Math.round(val + (255 - val) * amount));
300
-
301
- const newR = lightenValue(r ?? 0).toString(16).padStart(2, '0');
302
- const newG = lightenValue(g ?? 0).toString(16).padStart(2, '0');
303
- const newB = lightenValue(b ?? 0).toString(16).padStart(2, '0');
304
-
305
- return `#${newR}${newG}${newB}`;
306
- }
307
-
308
- /**
309
- * Darken a color
310
- */
311
- function darken(color: string, amount: number = 0.2): string {
312
- const rgb = hexToRgb(color);
313
- if (!rgb) return color;
314
-
315
- const { r, g, b } = rgb;
316
- const darkenValue = (val: number) => Math.max(0, Math.round(val * (1 - amount)));
317
-
318
- const newR = darkenValue(r ?? 0).toString(16).padStart(2, '0');
319
- const newG = darkenValue(g ?? 0).toString(16).padStart(2, '0');
320
- const newB = darkenValue(b ?? 0).toString(16).padStart(2, '0');
321
-
322
- return `#${newR}${newG}${newB}`;
323
- }
324
-
325
227
  /**
326
228
  * Create a complete palette color from partial configuration
327
229
  */
@@ -343,37 +245,6 @@ function createPaletteColor(color: Partial<PaletteColor> | string): PaletteColor
343
245
  };
344
246
  }
345
247
 
346
- /**
347
- * Create spacing function
348
- */
349
- function createSpacing(spacingInput: SpacingOptions = 4): SpacingFunction {
350
- // If it's already a function, return it
351
- if (typeof spacingInput === 'function') {
352
- return spacingInput;
353
- }
354
-
355
- // If it's a number, create a function that multiplies by that number
356
- if (typeof spacingInput === 'number') {
357
- return (...values: number[]) => {
358
- if (values.length === 0) return '0px';
359
- return values.map((value) => `${value * spacingInput}px`).join(' ');
360
- };
361
- }
362
-
363
- // If it's an array, use it as a scale
364
- if (Array.isArray(spacingInput)) {
365
- return (...values: number[]) => {
366
- if (values.length === 0) return '0px';
367
- return values.map((value) => `${spacingInput[value] || value}px`).join(' ');
368
- };
369
- }
370
-
371
- // Default to 4px base
372
- return (...values: number[]) => {
373
- if (values.length === 0) return '0px';
374
- return values.map((value) => `${value * 4}px`).join(' ');
375
- };
376
- }
377
248
 
378
249
  /**
379
250
  * Create breakpoints object
@@ -381,10 +252,11 @@ function createSpacing(spacingInput: SpacingOptions = 4): SpacingFunction {
381
252
  function createBreakpoints(breakpointsInput?: BreakpointsOptions): Theme['breakpoints'] {
382
253
  const values = {
383
254
  xs: 0,
384
- sm: 600,
385
- md: 960,
386
- lg: 1280,
387
- xl: 1920,
255
+ sm: 576,
256
+ md: 768,
257
+ lg: 992,
258
+ xl: 1200,
259
+ xxl: 1440,
388
260
  ...breakpointsInput?.values,
389
261
  };
390
262
 
@@ -431,6 +303,13 @@ export function createTheme(...options: ThemeOptions[]): Theme {
431
303
  warning: createPaletteColor(mergedOptions.palette?.warning || DEFAULT_PALETTE.warning),
432
304
  info: createPaletteColor(mergedOptions.palette?.info || DEFAULT_PALETTE.info),
433
305
  success: createPaletteColor(mergedOptions.palette?.success || DEFAULT_PALETTE.success),
306
+ // Handle light and dark colors if provided
307
+ ...(mergedOptions.palette?.light && {
308
+ light: createPaletteColor(mergedOptions.palette.light),
309
+ }),
310
+ ...(mergedOptions.palette?.dark && {
311
+ dark: createPaletteColor(mergedOptions.palette.dark),
312
+ }),
434
313
  background: {
435
314
  default: mergedOptions.palette?.background?.default || DEFAULT_PALETTE.background.default,
436
315
  paper: mergedOptions.palette?.background?.paper || DEFAULT_PALETTE.background.paper,
@@ -0,0 +1,261 @@
1
+ /**
2
+ * CSS Variable Mapper
3
+ *
4
+ * Utilities for generating and managing CSS custom properties from SCSS tokens
5
+ * and component configurations.
6
+ */
7
+
8
+ /**
9
+ * Configuration for generating CSS variables for a component
10
+ */
11
+ export interface CSSVariableConfig {
12
+ /** Component name (e.g., 'button', 'card') */
13
+ component: string;
14
+ /** Base properties for the component */
15
+ properties: Record<string, string | number>;
16
+ /** Part-specific properties (e.g., icon, label) */
17
+ parts?: Record<string, Record<string, string | number>>;
18
+ /** State-specific properties (e.g., hover, active, disabled) */
19
+ states?: Record<string, Record<string, string | number>>;
20
+ /** Variant-specific properties (e.g., primary, secondary) */
21
+ variants?: Record<string, Record<string, string | number>>;
22
+ }
23
+
24
+ /**
25
+ * CSS variable naming options
26
+ */
27
+ export interface CSSVariableNamingOptions {
28
+ /** Prefix for all variables (default: 'atomix') */
29
+ prefix?: string;
30
+ /** Separator between parts (default: '-') */
31
+ separator?: string;
32
+ /** Whether to include component name in variable (default: true) */
33
+ includeComponent?: boolean;
34
+ }
35
+
36
+ /**
37
+ * Generate CSS variable name from parts
38
+ *
39
+ * @example
40
+ * generateCSSVariableName('button', 'bg', { prefix: 'atomix' })
41
+ * // Returns: '--atomix-button-bg'
42
+ */
43
+ export function generateCSSVariableName(
44
+ component: string,
45
+ property: string,
46
+ options: CSSVariableNamingOptions = {}
47
+ ): string {
48
+ const {
49
+ prefix = 'atomix',
50
+ separator = '-',
51
+ includeComponent = true,
52
+ } = options;
53
+
54
+ const parts = [prefix];
55
+
56
+ if (includeComponent) {
57
+ parts.push(component);
58
+ }
59
+
60
+ parts.push(property);
61
+
62
+ return `--${parts.join(separator)}`;
63
+ }
64
+
65
+ /**
66
+ * Generate CSS variables object from configuration
67
+ *
68
+ * @example
69
+ * const vars = generateComponentCSSVars({
70
+ * component: 'button',
71
+ * properties: { bg: '#000', color: '#fff' }
72
+ * })
73
+ * // Returns: { '--atomix-button-bg': '#000', '--atomix-button-color': '#fff' }
74
+ */
75
+ export function generateComponentCSSVars(
76
+ config: CSSVariableConfig,
77
+ options: CSSVariableNamingOptions = {}
78
+ ): Record<string, string> {
79
+ const vars: Record<string, string> = {};
80
+ const { component, properties, parts, states, variants } = config;
81
+
82
+ // Base properties
83
+ Object.entries(properties).forEach(([key, value]) => {
84
+ const varName = generateCSSVariableName(component, key, options);
85
+ vars[varName] = String(value);
86
+ });
87
+
88
+ // Part properties
89
+ if (parts) {
90
+ Object.entries(parts).forEach(([partName, partProps]) => {
91
+ Object.entries(partProps).forEach(([key, value]) => {
92
+ const varName = generateCSSVariableName(
93
+ component,
94
+ `${partName}-${key}`,
95
+ options
96
+ );
97
+ vars[varName] = String(value);
98
+ });
99
+ });
100
+ }
101
+
102
+ // State properties
103
+ if (states) {
104
+ Object.entries(states).forEach(([stateName, stateProps]) => {
105
+ Object.entries(stateProps).forEach(([key, value]) => {
106
+ const varName = generateCSSVariableName(
107
+ component,
108
+ `${stateName}-${key}`,
109
+ options
110
+ );
111
+ vars[varName] = String(value);
112
+ });
113
+ });
114
+ }
115
+
116
+ // Variant properties
117
+ if (variants) {
118
+ Object.entries(variants).forEach(([variantName, variantProps]) => {
119
+ Object.entries(variantProps).forEach(([key, value]) => {
120
+ const varName = generateCSSVariableName(
121
+ component,
122
+ `${variantName}-${key}`,
123
+ options
124
+ );
125
+ vars[varName] = String(value);
126
+ });
127
+ });
128
+ }
129
+
130
+ return vars;
131
+ }
132
+
133
+ /**
134
+ * Map SCSS tokens to CSS custom properties
135
+ *
136
+ * @example
137
+ * const tokens = { '$primary-color': '#7AFFD7', '$spacing-md': '16px' }
138
+ * const vars = mapSCSSTokensToCSSVars(tokens)
139
+ * // Returns: { '--primary-color': '#7AFFD7', '--spacing-md': '16px' }
140
+ */
141
+ export function mapSCSSTokensToCSSVars(
142
+ tokens: Record<string, any>,
143
+ options: CSSVariableNamingOptions = {}
144
+ ): Record<string, string> {
145
+ const vars: Record<string, string> = {};
146
+ const { prefix = 'atomix', separator = '-' } = options;
147
+
148
+ Object.entries(tokens).forEach(([key, value]) => {
149
+ // Remove $ prefix from SCSS variables
150
+ const cleanKey = key.startsWith('$') ? key.slice(1) : key;
151
+
152
+ // Convert underscores to separators
153
+ const normalizedKey = cleanKey.replace(/_/g, separator);
154
+
155
+ // Generate variable name
156
+ const varName = `--${prefix}${separator}${normalizedKey}`;
157
+
158
+ vars[varName] = String(value);
159
+ });
160
+
161
+ return vars;
162
+ }
163
+
164
+ /**
165
+ * Apply CSS variables to an element
166
+ *
167
+ * @param element - Target element (defaults to document.documentElement)
168
+ * @param vars - CSS variables to apply
169
+ */
170
+ export function applyCSSVariables(
171
+ vars: Record<string, string | number>,
172
+ element: HTMLElement = document.documentElement
173
+ ): void {
174
+ Object.entries(vars).forEach(([key, value]) => {
175
+ element.style.setProperty(key, String(value));
176
+ });
177
+ }
178
+
179
+ /**
180
+ * Remove CSS variables from an element
181
+ *
182
+ * @param varNames - Variable names to remove
183
+ * @param element - Target element (defaults to document.documentElement)
184
+ */
185
+ export function removeCSSVariables(
186
+ varNames: string[],
187
+ element: HTMLElement = document.documentElement
188
+ ): void {
189
+ varNames.forEach((varName) => {
190
+ element.style.removeProperty(varName);
191
+ });
192
+ }
193
+
194
+ /**
195
+ * Get CSS variable value from an element
196
+ *
197
+ * @param varName - Variable name to get
198
+ * @param element - Target element (defaults to document.documentElement)
199
+ * @returns Variable value or null if not found
200
+ */
201
+ export function getCSSVariable(
202
+ varName: string,
203
+ element: HTMLElement = document.documentElement
204
+ ): string | null {
205
+ return getComputedStyle(element).getPropertyValue(varName).trim() || null;
206
+ }
207
+
208
+ /**
209
+ * Convert CSS variable object to inline style object
210
+ *
211
+ * @example
212
+ * const vars = { '--atomix-button-bg': '#000' }
213
+ * const style = cssVarsToStyle(vars)
214
+ * // Returns: { '--atomix-button-bg': '#000' } as React.CSSProperties
215
+ */
216
+ export function cssVarsToStyle(
217
+ vars: Record<string, string | number>
218
+ ): React.CSSProperties {
219
+ return Object.entries(vars).reduce((acc, [key, value]) => {
220
+ (acc as any)[key] = typeof value === 'number' ? `${value}px` : value;
221
+ return acc;
222
+ }, {} as React.CSSProperties);
223
+ }
224
+
225
+ /**
226
+ * Merge multiple CSS variable objects
227
+ * Later objects override earlier ones
228
+ */
229
+ export function mergeCSSVars(
230
+ ...varObjects: Array<Record<string, string | number> | undefined>
231
+ ): Record<string, string | number> {
232
+ return varObjects.reduce<Record<string, string | number>>((acc, vars) => {
233
+ if (vars) {
234
+ Object.assign(acc, vars);
235
+ }
236
+ return acc;
237
+ }, {});
238
+ }
239
+
240
+ /**
241
+ * Validate CSS variable name format
242
+ */
243
+ export function isValidCSSVariableName(name: string): boolean {
244
+ return /^--[a-z0-9-]+$/.test(name);
245
+ }
246
+
247
+ /**
248
+ * Extract component name from CSS variable name
249
+ *
250
+ * @example
251
+ * extractComponentName('--atomix-button-bg')
252
+ * // Returns: 'button'
253
+ */
254
+ export function extractComponentName(
255
+ varName: string,
256
+ prefix: string = 'atomix'
257
+ ): string | null {
258
+ const regex = new RegExp(`^--${prefix}-([a-z0-9]+)-`);
259
+ const match = varName.match(regex);
260
+ return match ? (match[1] ?? null) : null;
261
+ }