@shohojdhara/atomix 0.3.2 → 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 (390) hide show
  1. package/README.md +39 -20
  2. package/dist/atomix.css +83 -115
  3. package/dist/atomix.min.css +3 -3
  4. package/dist/index.d.ts +7049 -7284
  5. package/dist/index.esm.js +3529 -4674
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +3208 -4315
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.js +1 -1
  10. package/dist/index.min.js.map +1 -1
  11. package/dist/themes/applemix.css +16576 -0
  12. package/dist/themes/applemix.css.map +1 -0
  13. package/dist/themes/applemix.min.css +73 -0
  14. package/dist/themes/boomdevs.css +16007 -0
  15. package/dist/themes/boomdevs.css.map +1 -0
  16. package/dist/themes/boomdevs.min.css +406 -0
  17. package/dist/themes/esrar.css +18424 -0
  18. package/dist/themes/esrar.css.map +1 -0
  19. package/dist/themes/esrar.min.css +221 -0
  20. package/dist/themes/flashtrade.css +17596 -0
  21. package/dist/themes/flashtrade.css.map +1 -0
  22. package/dist/themes/flashtrade.min.css +196 -0
  23. package/dist/themes/mashroom.css +31082 -0
  24. package/dist/themes/mashroom.css.map +1 -0
  25. package/dist/themes/mashroom.min.css +450 -0
  26. package/dist/themes/shaj-default.css +17200 -0
  27. package/dist/themes/shaj-default.css.map +1 -0
  28. package/dist/themes/shaj-default.min.css +502 -0
  29. package/package.json +96 -17
  30. package/scripts/atomix-cli.js +1428 -0
  31. package/scripts/build-themes.js +208 -0
  32. package/scripts/cli/interactive-init.js +528 -0
  33. package/scripts/cli/migration-tools.js +603 -0
  34. package/scripts/cli/token-manager.js +519 -0
  35. package/scripts/sync-theme-config.js +309 -0
  36. package/src/components/List/ListGroup.tsx +1 -2
  37. package/src/components/Popover/Popover.tsx +2 -2
  38. package/src/components/Tooltip/Tooltip.stories.tsx +49 -12
  39. package/src/components/Tooltip/Tooltip.tsx +32 -58
  40. package/src/lib/composables/useTooltip.ts +285 -0
  41. package/src/lib/constants/cssVariables.ts +390 -0
  42. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +151 -0
  43. package/src/lib/hooks/index.ts +19 -0
  44. package/src/lib/hooks/useComponentCustomization.ts +175 -0
  45. package/src/lib/index.ts +13 -1
  46. package/src/lib/patterns/__tests__/slots.test.ts +108 -0
  47. package/src/lib/patterns/index.ts +35 -0
  48. package/src/lib/patterns/slots.tsx +421 -0
  49. package/src/lib/theme/__tests__/ThemeBuilder.test.ts +223 -0
  50. package/src/lib/theme/builders/ThemeBuilder.ts +372 -0
  51. package/src/lib/theme/createTheme.ts +2 -134
  52. package/src/lib/theme/cssVariableMapper.ts +261 -0
  53. package/src/lib/theme/index.ts +33 -250
  54. package/src/lib/theme/runtime/ThemeApplicator.ts +252 -0
  55. package/src/lib/theme/themeUtils.ts +27 -5
  56. package/src/lib/theme/types.ts +59 -0
  57. package/src/lib/theme-tools.ts +185 -0
  58. package/src/lib/types/components.ts +194 -0
  59. package/src/lib/types/partProps.ts +426 -0
  60. package/src/lib/utils/__tests__/componentUtils.test.ts +144 -0
  61. package/src/lib/utils/componentUtils.ts +163 -0
  62. package/src/lib/utils/index.ts +17 -57
  63. package/src/styles/01-settings/_settings.colors.scss +10 -10
  64. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  65. package/src/styles/06-components/_components.tooltip.scss +31 -81
  66. package/src/themes/README.md +443 -0
  67. package/src/themes/THEME_CHECKLIST.md +74 -0
  68. package/src/themes/applemix/01-settings/_index.scss +24 -0
  69. package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
  70. package/src/themes/applemix/01-settings/_settings.background.scss +6 -0
  71. package/src/themes/applemix/01-settings/_settings.colors.scss +75 -0
  72. package/src/themes/applemix/01-settings/_settings.config.scss +15 -0
  73. package/src/themes/applemix/01-settings/_settings.typography.scss +30 -0
  74. package/src/themes/applemix/02-tools/_index.scss +4 -0
  75. package/src/themes/applemix/03-generic/_index.scss +7 -0
  76. package/src/themes/applemix/04-elements/_index.scss +7 -0
  77. package/src/themes/applemix/05-objects/_index.scss +7 -0
  78. package/src/themes/applemix/06-components/_index.scss +15 -0
  79. package/src/themes/applemix/99-utilities/_index.scss +7 -0
  80. package/src/themes/applemix/README.md +378 -0
  81. package/src/themes/applemix/index.scss +33 -0
  82. package/src/themes/boomdevs/01-settings/_index.scss +38 -0
  83. package/src/themes/boomdevs/01-settings/_settings.accordion.scss +12 -0
  84. package/src/themes/boomdevs/01-settings/_settings.animations.scss +11 -0
  85. package/src/themes/boomdevs/01-settings/_settings.avatar.scss +9 -0
  86. package/src/themes/boomdevs/01-settings/_settings.badge.scss +11 -0
  87. package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +16 -0
  88. package/src/themes/boomdevs/01-settings/_settings.border.scss +10 -0
  89. package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +14 -0
  90. package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +13 -0
  91. package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +15 -0
  92. package/src/themes/boomdevs/01-settings/_settings.button.scss +9 -0
  93. package/src/themes/boomdevs/01-settings/_settings.callout.scss +9 -0
  94. package/src/themes/boomdevs/01-settings/_settings.card.scss +11 -0
  95. package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +9 -0
  96. package/src/themes/boomdevs/01-settings/_settings.colors.scss +145 -0
  97. package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +11 -0
  98. package/src/themes/boomdevs/01-settings/_settings.grid.scss +16 -0
  99. package/src/themes/boomdevs/01-settings/_settings.input.scss +14 -0
  100. package/src/themes/boomdevs/01-settings/_settings.link.scss +11 -0
  101. package/src/themes/boomdevs/01-settings/_settings.list.scss +10 -0
  102. package/src/themes/boomdevs/01-settings/_settings.modal.scss +16 -0
  103. package/src/themes/boomdevs/01-settings/_settings.navbar.scss +16 -0
  104. package/src/themes/boomdevs/01-settings/_settings.pagination.scss +13 -0
  105. package/src/themes/boomdevs/01-settings/_settings.progress.scss +11 -0
  106. package/src/themes/boomdevs/01-settings/_settings.rating.scss +10 -0
  107. package/src/themes/boomdevs/01-settings/_settings.spacing.scss +33 -0
  108. package/src/themes/boomdevs/01-settings/_settings.spinner.scss +11 -0
  109. package/src/themes/boomdevs/01-settings/_settings.steps.scss +12 -0
  110. package/src/themes/boomdevs/01-settings/_settings.tabs.scss +12 -0
  111. package/src/themes/boomdevs/01-settings/_settings.todo.scss +15 -0
  112. package/src/themes/boomdevs/01-settings/_settings.toggle.scss +14 -0
  113. package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +13 -0
  114. package/src/themes/boomdevs/01-settings/_settings.typography.scss +58 -0
  115. package/src/themes/boomdevs/01-settings/_settings.video-player.scss +12 -0
  116. package/src/themes/boomdevs/02-tools/_index.scss +7 -0
  117. package/src/themes/boomdevs/03-generic/_index.scss +7 -0
  118. package/src/themes/boomdevs/04-elements/_index.scss +7 -0
  119. package/src/themes/boomdevs/05-objects/_index.scss +7 -0
  120. package/src/themes/boomdevs/06-components/_components.button.scss +11 -0
  121. package/src/themes/boomdevs/06-components/_index.scss +11 -0
  122. package/src/themes/boomdevs/99-utilities/_index.scss +7 -0
  123. package/src/themes/boomdevs/index.scss +26 -0
  124. package/src/themes/esrar/01-settings/_index.scss +15 -0
  125. package/src/themes/esrar/01-settings/_settings.colors.scss +91 -0
  126. package/src/themes/esrar/02-tools/_index.scss +8 -0
  127. package/src/themes/esrar/02-tools/_tools.animations.scss +342 -0
  128. package/src/themes/esrar/06-components/_components.accordion.scss +49 -0
  129. package/src/themes/esrar/06-components/_components.avatar-group.scss +14 -0
  130. package/src/themes/esrar/06-components/_components.avatar.scss +61 -0
  131. package/src/themes/esrar/06-components/_components.badge.scss +117 -0
  132. package/src/themes/esrar/06-components/_components.breadcrumb.scss +65 -0
  133. package/src/themes/esrar/06-components/_components.btn-group.scss +19 -0
  134. package/src/themes/esrar/06-components/_components.button.scss +224 -0
  135. package/src/themes/esrar/06-components/_components.callout.scss +51 -0
  136. package/src/themes/esrar/06-components/_components.card.scss +134 -0
  137. package/src/themes/esrar/06-components/_components.chart.scss +24 -0
  138. package/src/themes/esrar/06-components/_components.checkbox-group.scss +26 -0
  139. package/src/themes/esrar/06-components/_components.checkbox.scss +71 -0
  140. package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +29 -0
  141. package/src/themes/esrar/06-components/_components.countdown.scss +67 -0
  142. package/src/themes/esrar/06-components/_components.data-table.scss +22 -0
  143. package/src/themes/esrar/06-components/_components.datepicker.scss +20 -0
  144. package/src/themes/esrar/06-components/_components.dropdown.scss +272 -0
  145. package/src/themes/esrar/06-components/_components.edge-panel.scss +10 -0
  146. package/src/themes/esrar/06-components/_components.form-group.scss +15 -0
  147. package/src/themes/esrar/06-components/_components.form.scss +66 -0
  148. package/src/themes/esrar/06-components/_components.hero.scss +251 -0
  149. package/src/themes/esrar/06-components/_components.icon.scss +33 -0
  150. package/src/themes/esrar/06-components/_components.image-gallery.scss +29 -0
  151. package/src/themes/esrar/06-components/_components.input.scss +91 -0
  152. package/src/themes/esrar/06-components/_components.list-group.scss +26 -0
  153. package/src/themes/esrar/06-components/_components.modal.scss +148 -0
  154. package/src/themes/esrar/06-components/_components.notification.scss +80 -0
  155. package/src/themes/esrar/06-components/_components.pagination.scss +84 -0
  156. package/src/themes/esrar/06-components/_components.popover.scss +10 -0
  157. package/src/themes/esrar/06-components/_components.progress.scss +64 -0
  158. package/src/themes/esrar/06-components/_components.rating.scss +26 -0
  159. package/src/themes/esrar/06-components/_components.skeleton.scss +15 -0
  160. package/src/themes/esrar/06-components/_components.slider.scss +90 -0
  161. package/src/themes/esrar/06-components/_components.spinner.scss +71 -0
  162. package/src/themes/esrar/06-components/_components.steps.scss +76 -0
  163. package/src/themes/esrar/06-components/_components.tab.scss +58 -0
  164. package/src/themes/esrar/06-components/_components.tag.scss +21 -0
  165. package/src/themes/esrar/06-components/_components.timeline.scss +19 -0
  166. package/src/themes/esrar/06-components/_components.toast.scss +91 -0
  167. package/src/themes/esrar/06-components/_components.toggle.scss +74 -0
  168. package/src/themes/esrar/06-components/_components.tooltip.scss +45 -0
  169. package/src/themes/esrar/06-components/_components.upload.scss +102 -0
  170. package/src/themes/esrar/06-components/_index.scss +42 -0
  171. package/src/themes/esrar/index.scss +30 -0
  172. package/src/themes/flashtrade/01-settings/_index.scss +19 -0
  173. package/src/themes/flashtrade/01-settings/_settings.animations.scss +11 -0
  174. package/src/themes/flashtrade/01-settings/_settings.background.scss +9 -0
  175. package/src/themes/flashtrade/01-settings/_settings.colors.scss +79 -0
  176. package/src/themes/flashtrade/01-settings/_settings.config.scss +16 -0
  177. package/src/themes/flashtrade/01-settings/_settings.typography.scss +35 -0
  178. package/src/themes/flashtrade/02-tools/_index.scss +8 -0
  179. package/src/themes/flashtrade/03-generic/_index.scss +8 -0
  180. package/src/themes/flashtrade/04-elements/_index.scss +12 -0
  181. package/src/themes/flashtrade/05-objects/_index.scss +8 -0
  182. package/src/themes/flashtrade/06-components/_components.badge.scss +156 -0
  183. package/src/themes/flashtrade/06-components/_components.button.scss +135 -0
  184. package/src/themes/flashtrade/06-components/_components.card.scss +214 -0
  185. package/src/themes/flashtrade/06-components/_components.navbar.scss +227 -0
  186. package/src/themes/flashtrade/06-components/_index.scss +13 -0
  187. package/src/themes/flashtrade/99-utilities/_index.scss +9 -0
  188. package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +187 -0
  189. package/src/themes/flashtrade/README.md +386 -0
  190. package/src/themes/flashtrade/demo.html +272 -0
  191. package/src/themes/flashtrade/index.scss +36 -0
  192. package/src/themes/mashroom/01-settings/_index.scss +69 -0
  193. package/src/themes/mashroom/01-settings/_settings.accordion.scss +32 -0
  194. package/src/themes/mashroom/01-settings/_settings.animations.scss +26 -0
  195. package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +22 -0
  196. package/src/themes/mashroom/01-settings/_settings.avatar.scss +57 -0
  197. package/src/themes/mashroom/01-settings/_settings.badge.scss +19 -0
  198. package/src/themes/mashroom/01-settings/_settings.border-radius.scss +24 -0
  199. package/src/themes/mashroom/01-settings/_settings.border.scss +14 -0
  200. package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +40 -0
  201. package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
  202. package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +17 -0
  203. package/src/themes/mashroom/01-settings/_settings.btn-group.scss +5 -0
  204. package/src/themes/mashroom/01-settings/_settings.button.scss +50 -0
  205. package/src/themes/mashroom/01-settings/_settings.callout.scss +81 -0
  206. package/src/themes/mashroom/01-settings/_settings.card.scss +52 -0
  207. package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +5 -0
  208. package/src/themes/mashroom/01-settings/_settings.checkbox.scss +23 -0
  209. package/src/themes/mashroom/01-settings/_settings.color-mode.scss +7 -0
  210. package/src/themes/mashroom/01-settings/_settings.colors.scss +180 -0
  211. package/src/themes/mashroom/01-settings/_settings.config.scss +4 -0
  212. package/src/themes/mashroom/01-settings/_settings.countdown.scss +20 -0
  213. package/src/themes/mashroom/01-settings/_settings.data-table.scss +56 -0
  214. package/src/themes/mashroom/01-settings/_settings.datepicker.scss +45 -0
  215. package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +3 -0
  216. package/src/themes/mashroom/01-settings/_settings.dropdown.scss +45 -0
  217. package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +24 -0
  218. package/src/themes/mashroom/01-settings/_settings.fonts.scss +8 -0
  219. package/src/themes/mashroom/01-settings/_settings.form-group.scss +14 -0
  220. package/src/themes/mashroom/01-settings/_settings.form.scss +6 -0
  221. package/src/themes/mashroom/01-settings/_settings.grid.scss +23 -0
  222. package/src/themes/mashroom/01-settings/_settings.hero.scss +41 -0
  223. package/src/themes/mashroom/01-settings/_settings.input.scss +51 -0
  224. package/src/themes/mashroom/01-settings/_settings.link.scss +13 -0
  225. package/src/themes/mashroom/01-settings/_settings.list-group.scss +16 -0
  226. package/src/themes/mashroom/01-settings/_settings.list.scss +13 -0
  227. package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +23 -0
  228. package/src/themes/mashroom/01-settings/_settings.menu.scss +50 -0
  229. package/src/themes/mashroom/01-settings/_settings.messages.scss +98 -0
  230. package/src/themes/mashroom/01-settings/_settings.modal.scss +41 -0
  231. package/src/themes/mashroom/01-settings/_settings.nav.scss +20 -0
  232. package/src/themes/mashroom/01-settings/_settings.navbar.scss +54 -0
  233. package/src/themes/mashroom/01-settings/_settings.pagination.scss +30 -0
  234. package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +45 -0
  235. package/src/themes/mashroom/01-settings/_settings.popover.scss +20 -0
  236. package/src/themes/mashroom/01-settings/_settings.position.scss +9 -0
  237. package/src/themes/mashroom/01-settings/_settings.progress.scss +17 -0
  238. package/src/themes/mashroom/01-settings/_settings.rating.scss +11 -0
  239. package/src/themes/mashroom/01-settings/_settings.river.scss +50 -0
  240. package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +31 -0
  241. package/src/themes/mashroom/01-settings/_settings.select.scss +47 -0
  242. package/src/themes/mashroom/01-settings/_settings.side-menu.scss +79 -0
  243. package/src/themes/mashroom/01-settings/_settings.skeleton.scss +24 -0
  244. package/src/themes/mashroom/01-settings/_settings.spacing.scss +66 -0
  245. package/src/themes/mashroom/01-settings/_settings.spinner.scss +34 -0
  246. package/src/themes/mashroom/01-settings/_settings.steps.scss +33 -0
  247. package/src/themes/mashroom/01-settings/_settings.tabs.scss +33 -0
  248. package/src/themes/mashroom/01-settings/_settings.testimonials.scss +24 -0
  249. package/src/themes/mashroom/01-settings/_settings.todo.scss +52 -0
  250. package/src/themes/mashroom/01-settings/_settings.toggle.scss +49 -0
  251. package/src/themes/mashroom/01-settings/_settings.tooltip.scss +20 -0
  252. package/src/themes/mashroom/01-settings/_settings.typography.scss +95 -0
  253. package/src/themes/mashroom/01-settings/_settings.upload.scss +96 -0
  254. package/src/themes/mashroom/01-settings/_settings.z-layers.scss +19 -0
  255. package/src/themes/mashroom/02-tools/_index.scss +8 -0
  256. package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +78 -0
  257. package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +114 -0
  258. package/src/themes/mashroom/03-generic/_index.scss +6 -0
  259. package/src/themes/mashroom/04-elements/_index.scss +6 -0
  260. package/src/themes/mashroom/05-objects/_index.scss +6 -0
  261. package/src/themes/mashroom/06-components/_components.accordion.scss +187 -0
  262. package/src/themes/mashroom/06-components/_components.avatar-group.scss +276 -0
  263. package/src/themes/mashroom/06-components/_components.avatar.scss +114 -0
  264. package/src/themes/mashroom/06-components/_components.badge.scss +152 -0
  265. package/src/themes/mashroom/06-components/_components.breadcrumb.scss +162 -0
  266. package/src/themes/mashroom/06-components/_components.btn-group.scss +404 -0
  267. package/src/themes/mashroom/06-components/_components.button.scss +160 -0
  268. package/src/themes/mashroom/06-components/_components.callout.scss +140 -0
  269. package/src/themes/mashroom/06-components/_components.card.scss +225 -0
  270. package/src/themes/mashroom/06-components/_components.checkbox.scss +186 -0
  271. package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +308 -0
  272. package/src/themes/mashroom/06-components/_components.countdown.scss +402 -0
  273. package/src/themes/mashroom/06-components/_components.data-table.scss +354 -0
  274. package/src/themes/mashroom/06-components/_components.datepicker.scss +349 -0
  275. package/src/themes/mashroom/06-components/_components.dropdown.scss +334 -0
  276. package/src/themes/mashroom/06-components/_components.edge-panel.scss +413 -0
  277. package/src/themes/mashroom/06-components/_components.form-group.scss +433 -0
  278. package/src/themes/mashroom/06-components/_components.form.scss +358 -0
  279. package/src/themes/mashroom/06-components/_components.hero.scss +151 -0
  280. package/src/themes/mashroom/06-components/_components.input.scss +147 -0
  281. package/src/themes/mashroom/06-components/_components.list-group.scss +456 -0
  282. package/src/themes/mashroom/06-components/_components.list.scss +145 -0
  283. package/src/themes/mashroom/06-components/_components.menu.scss +497 -0
  284. package/src/themes/mashroom/06-components/_components.messages.scss +277 -0
  285. package/src/themes/mashroom/06-components/_components.modal.scss +264 -0
  286. package/src/themes/mashroom/06-components/_components.nav.scss +181 -0
  287. package/src/themes/mashroom/06-components/_components.navbar.scss +538 -0
  288. package/src/themes/mashroom/06-components/_components.pagination.scss +400 -0
  289. package/src/themes/mashroom/06-components/_components.photoviewer.scss +498 -0
  290. package/src/themes/mashroom/06-components/_components.popover.scss +383 -0
  291. package/src/themes/mashroom/06-components/_components.product-review.scss +408 -0
  292. package/src/themes/mashroom/06-components/_components.progress.scss +249 -0
  293. package/src/themes/mashroom/06-components/_components.rating.scss +300 -0
  294. package/src/themes/mashroom/06-components/_components.river.scss +570 -0
  295. package/src/themes/mashroom/06-components/_components.sectionintro.scss +546 -0
  296. package/src/themes/mashroom/06-components/_components.select.scss +455 -0
  297. package/src/themes/mashroom/06-components/_components.side-menu.scss +635 -0
  298. package/src/themes/mashroom/06-components/_components.skeleton.scss +447 -0
  299. package/src/themes/mashroom/06-components/_components.slider.scss +414 -0
  300. package/src/themes/mashroom/06-components/_components.spinner.scss +198 -0
  301. package/src/themes/mashroom/06-components/_components.steps.scss +350 -0
  302. package/src/themes/mashroom/06-components/_components.tabs.scss +269 -0
  303. package/src/themes/mashroom/06-components/_components.testimonials.scss +561 -0
  304. package/src/themes/mashroom/06-components/_components.toggle.scss +231 -0
  305. package/src/themes/mashroom/06-components/_components.tooltip.scss +167 -0
  306. package/src/themes/mashroom/06-components/_components.upload.scss +537 -0
  307. package/src/themes/mashroom/06-components/_components.video-player.scss +560 -0
  308. package/src/themes/mashroom/06-components/_index.scss +55 -0
  309. package/src/themes/mashroom/99-utilities/_index.scss +6 -0
  310. package/src/themes/mashroom/index.scss +26 -0
  311. package/src/themes/shaj-default/01-settings/_index.scss +69 -0
  312. package/src/themes/shaj-default/01-settings/_settings.accordion.scss +38 -0
  313. package/src/themes/shaj-default/01-settings/_settings.animations.scss +32 -0
  314. package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +28 -0
  315. package/src/themes/shaj-default/01-settings/_settings.avatar.scss +63 -0
  316. package/src/themes/shaj-default/01-settings/_settings.badge.scss +25 -0
  317. package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +24 -0
  318. package/src/themes/shaj-default/01-settings/_settings.border.scss +20 -0
  319. package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +46 -0
  320. package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
  321. package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +23 -0
  322. package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +11 -0
  323. package/src/themes/shaj-default/01-settings/_settings.button.scss +56 -0
  324. package/src/themes/shaj-default/01-settings/_settings.callout.scss +87 -0
  325. package/src/themes/shaj-default/01-settings/_settings.card.scss +52 -0
  326. package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +11 -0
  327. package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +29 -0
  328. package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +13 -0
  329. package/src/themes/shaj-default/01-settings/_settings.colors.scss +91 -0
  330. package/src/themes/shaj-default/01-settings/_settings.config.scss +4 -0
  331. package/src/themes/shaj-default/01-settings/_settings.countdown.scss +26 -0
  332. package/src/themes/shaj-default/01-settings/_settings.data-table.scss +62 -0
  333. package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +51 -0
  334. package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +9 -0
  335. package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +51 -0
  336. package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +30 -0
  337. package/src/themes/shaj-default/01-settings/_settings.fonts.scss +13 -0
  338. package/src/themes/shaj-default/01-settings/_settings.form-group.scss +20 -0
  339. package/src/themes/shaj-default/01-settings/_settings.form.scss +12 -0
  340. package/src/themes/shaj-default/01-settings/_settings.grid.scss +29 -0
  341. package/src/themes/shaj-default/01-settings/_settings.hero.scss +47 -0
  342. package/src/themes/shaj-default/01-settings/_settings.input.scss +57 -0
  343. package/src/themes/shaj-default/01-settings/_settings.link.scss +19 -0
  344. package/src/themes/shaj-default/01-settings/_settings.list-group.scss +22 -0
  345. package/src/themes/shaj-default/01-settings/_settings.list.scss +19 -0
  346. package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +29 -0
  347. package/src/themes/shaj-default/01-settings/_settings.menu.scss +56 -0
  348. package/src/themes/shaj-default/01-settings/_settings.messages.scss +104 -0
  349. package/src/themes/shaj-default/01-settings/_settings.modal.scss +47 -0
  350. package/src/themes/shaj-default/01-settings/_settings.nav.scss +26 -0
  351. package/src/themes/shaj-default/01-settings/_settings.navbar.scss +60 -0
  352. package/src/themes/shaj-default/01-settings/_settings.pagination.scss +36 -0
  353. package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +51 -0
  354. package/src/themes/shaj-default/01-settings/_settings.popover.scss +26 -0
  355. package/src/themes/shaj-default/01-settings/_settings.position.scss +15 -0
  356. package/src/themes/shaj-default/01-settings/_settings.progress.scss +23 -0
  357. package/src/themes/shaj-default/01-settings/_settings.rating.scss +17 -0
  358. package/src/themes/shaj-default/01-settings/_settings.river.scss +56 -0
  359. package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +37 -0
  360. package/src/themes/shaj-default/01-settings/_settings.select.scss +53 -0
  361. package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +85 -0
  362. package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +30 -0
  363. package/src/themes/shaj-default/01-settings/_settings.spacing.scss +72 -0
  364. package/src/themes/shaj-default/01-settings/_settings.spinner.scss +24 -0
  365. package/src/themes/shaj-default/01-settings/_settings.steps.scss +39 -0
  366. package/src/themes/shaj-default/01-settings/_settings.tabs.scss +39 -0
  367. package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +30 -0
  368. package/src/themes/shaj-default/01-settings/_settings.todo.scss +58 -0
  369. package/src/themes/shaj-default/01-settings/_settings.toggle.scss +55 -0
  370. package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +26 -0
  371. package/src/themes/shaj-default/01-settings/_settings.typography.scss +101 -0
  372. package/src/themes/shaj-default/01-settings/_settings.upload.scss +102 -0
  373. package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +25 -0
  374. package/src/themes/shaj-default/02-tools/_index.scss +0 -0
  375. package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
  376. package/src/themes/shaj-default/03-generic/_index.scss +2 -0
  377. package/src/themes/shaj-default/04-elements/_index.scss +0 -0
  378. package/src/themes/shaj-default/05-objects/_index.scss +0 -0
  379. package/src/themes/shaj-default/06-components/_components.button.scss +55 -0
  380. package/src/themes/shaj-default/06-components/_components.card.scss +57 -0
  381. package/src/themes/shaj-default/06-components/_components.input.scss +58 -0
  382. package/src/themes/shaj-default/06-components/_components.navbar.scss +99 -0
  383. package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
  384. package/src/themes/shaj-default/06-components/_index.scss +13 -0
  385. package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
  386. package/src/themes/shaj-default/index.scss +25 -0
  387. package/src/themes/themes.config.js +219 -0
  388. package/theme.config.ts +360 -0
  389. package/src/lib/theme/studio/ThemeStudio.tsx +0 -312
  390. package/src/lib/theme/studio/index.ts +0 -8
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Theme Applicator
3
+ *
4
+ * Applies theme configurations to the DOM, including CSS variables,
5
+ * component overrides, typography, spacing, and color palettes.
6
+ */
7
+
8
+ import { applyCSSVariables, removeCSSVariables } from '../cssVariableMapper';
9
+ import type { Theme, ThemeComponentOverrides, ComponentThemeOverride } from '../types';
10
+
11
+ /**
12
+ * Theme applicator class for runtime theme application
13
+ */
14
+ export class ThemeApplicator {
15
+ private appliedVars: Set<string> = new Set();
16
+ private root: HTMLElement;
17
+
18
+ constructor(root: HTMLElement = document.documentElement) {
19
+ this.root = root;
20
+ }
21
+
22
+ /**
23
+ * Apply a complete theme configuration
24
+ */
25
+ applyTheme(theme: Theme): void {
26
+ // Clear previously applied variables
27
+ this.clearAppliedVars();
28
+
29
+ // Apply global CSS variables
30
+ if (theme.cssVars) {
31
+ this.applyGlobalCSSVars(theme.cssVars);
32
+ }
33
+
34
+ // Apply typography system
35
+ if (theme.typography) {
36
+ this.applyTypography(theme.typography);
37
+ }
38
+
39
+ // Apply spacing system
40
+ if (theme.spacing) {
41
+ this.applySpacing(theme.spacing);
42
+ }
43
+
44
+ // Apply color palette
45
+ if (theme.palette) {
46
+ this.applyPalette(theme.palette);
47
+ }
48
+
49
+ // Apply component overrides
50
+ if (theme.components) {
51
+ this.applyComponentOverrides(theme.components);
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Apply global CSS variables
57
+ */
58
+ private applyGlobalCSSVars(vars: Record<string, string | number>): void {
59
+ Object.entries(vars).forEach(([key, value]) => {
60
+ this.root.style.setProperty(key, String(value));
61
+ this.appliedVars.add(key);
62
+ });
63
+ }
64
+
65
+ /**
66
+ * Apply typography system
67
+ */
68
+ private applyTypography(typography: Theme['typography']): void {
69
+ if (!typography) return;
70
+
71
+ const vars: Record<string, string | number> = {};
72
+
73
+ if (typography.fontFamily) {
74
+ vars['--atomix-font-family'] = typography.fontFamily;
75
+ }
76
+
77
+ if (typography.fontSize) {
78
+ Object.entries(typography.fontSize).forEach(([key, value]) => {
79
+ vars[`--atomix-font-size-${key}`] = value;
80
+ });
81
+ }
82
+
83
+ if (typography.fontWeight) {
84
+ Object.entries(typography.fontWeight).forEach(([key, value]) => {
85
+ vars[`--atomix-font-weight-${key}`] = value;
86
+ });
87
+ }
88
+
89
+ if (typography.lineHeight) {
90
+ Object.entries(typography.lineHeight).forEach(([key, value]) => {
91
+ vars[`--atomix-line-height-${key}`] = value;
92
+ });
93
+ }
94
+
95
+ this.applyGlobalCSSVars(vars);
96
+ }
97
+
98
+ /**
99
+ * Apply spacing system
100
+ */
101
+ private applySpacing(spacing: Record<string, string | number>): void {
102
+ const vars: Record<string, string | number> = {};
103
+
104
+ Object.entries(spacing).forEach(([key, value]) => {
105
+ vars[`--atomix-space-${key}`] = value;
106
+ });
107
+
108
+ this.applyGlobalCSSVars(vars);
109
+ }
110
+
111
+ /**
112
+ * Apply color palette
113
+ */
114
+ private applyPalette(palette: Theme['palette']): void {
115
+ if (!palette) return;
116
+
117
+ const vars: Record<string, string | number> = {};
118
+
119
+ Object.entries(palette).forEach(([colorName, colorScale]) => {
120
+ if (colorScale) {
121
+ Object.entries(colorScale).forEach(([shade, value]) => {
122
+ if (value) {
123
+ vars[`--atomix-color-${colorName}-${shade}`] = value;
124
+ }
125
+ });
126
+ }
127
+ });
128
+
129
+ this.applyGlobalCSSVars(vars);
130
+ }
131
+
132
+ /**
133
+ * Apply component-level overrides
134
+ */
135
+ private applyComponentOverrides(overrides: ThemeComponentOverrides): void {
136
+ Object.entries(overrides).forEach(([componentName, override]) => {
137
+ if (override) {
138
+ this.applyComponentOverride(componentName, override);
139
+ }
140
+ });
141
+ }
142
+
143
+ /**
144
+ * Apply override for a specific component
145
+ */
146
+ private applyComponentOverride(
147
+ componentName: string,
148
+ override: ComponentThemeOverride
149
+ ): void {
150
+ const vars: Record<string, string | number> = {};
151
+ const componentKey = componentName.toLowerCase();
152
+
153
+ // Apply component-level CSS variables
154
+ if (override.cssVars) {
155
+ Object.entries(override.cssVars).forEach(([key, value]) => {
156
+ // If key doesn't start with --, add component prefix
157
+ const varKey = key.startsWith('--')
158
+ ? key
159
+ : `--atomix-${componentKey}-${key}`;
160
+ vars[varKey] = value;
161
+ });
162
+ }
163
+
164
+ // Apply part-specific CSS variables
165
+ if (override.parts) {
166
+ Object.entries(override.parts).forEach(([partName, partOverride]) => {
167
+ if (partOverride.cssVars) {
168
+ Object.entries(partOverride.cssVars).forEach(([key, value]) => {
169
+ const varKey = key.startsWith('--')
170
+ ? key
171
+ : `--atomix-${componentKey}-${partName}-${key}`;
172
+ vars[varKey] = value;
173
+ });
174
+ }
175
+ });
176
+ }
177
+
178
+ // Apply variant-specific CSS variables
179
+ if (override.variants) {
180
+ Object.entries(override.variants).forEach(([variantName, variantOverride]) => {
181
+ if (variantOverride.cssVars) {
182
+ Object.entries(variantOverride.cssVars).forEach(([key, value]) => {
183
+ const varKey = key.startsWith('--')
184
+ ? key
185
+ : `--atomix-${componentKey}-${variantName}-${key}`;
186
+ vars[varKey] = value;
187
+ });
188
+ }
189
+ });
190
+ }
191
+
192
+ this.applyGlobalCSSVars(vars);
193
+ }
194
+
195
+ /**
196
+ * Clear all applied CSS variables
197
+ */
198
+ private clearAppliedVars(): void {
199
+ removeCSSVariables(Array.from(this.appliedVars), this.root);
200
+ this.appliedVars.clear();
201
+ }
202
+
203
+ /**
204
+ * Get all currently applied variables
205
+ */
206
+ getAppliedVars(): string[] {
207
+ return Array.from(this.appliedVars);
208
+ }
209
+
210
+ /**
211
+ * Remove theme application
212
+ */
213
+ removeTheme(): void {
214
+ this.clearAppliedVars();
215
+ }
216
+
217
+ /**
218
+ * Update specific CSS variables without clearing all
219
+ */
220
+ updateCSSVars(vars: Record<string, string | number>): void {
221
+ this.applyGlobalCSSVars(vars);
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Global theme applicator instance
227
+ */
228
+ let globalApplicator: ThemeApplicator | null = null;
229
+
230
+ /**
231
+ * Get or create global theme applicator
232
+ */
233
+ export function getThemeApplicator(): ThemeApplicator {
234
+ if (!globalApplicator) {
235
+ globalApplicator = new ThemeApplicator();
236
+ }
237
+ return globalApplicator;
238
+ }
239
+
240
+ /**
241
+ * Apply theme using global applicator
242
+ */
243
+ export function applyTheme(theme: Theme): void {
244
+ getThemeApplicator().applyTheme(theme);
245
+ }
246
+
247
+ /**
248
+ * Remove theme using global applicator
249
+ */
250
+ export function removeTheme(): void {
251
+ getThemeApplicator().removeTheme();
252
+ }
@@ -5,7 +5,7 @@
5
5
  * spacing helpers, and theme value accessors.
6
6
  */
7
7
 
8
- import type { Theme, SpacingFunction } from './types';
8
+ import type { Theme, SpacingFunction, SpacingOptions } from './types';
9
9
 
10
10
  // ============================================================================
11
11
  // Color Manipulation Utilities
@@ -150,15 +150,37 @@ export function emphasize(color: string, coefficient: number = 0.15): string {
150
150
  // ============================================================================
151
151
 
152
152
  /**
153
- * Create a spacing function with a given base unit
153
+ * Create a spacing function from various input types
154
154
  *
155
- * @param base - Base spacing unit in pixels, default 4
155
+ * @param spacingInput - Spacing configuration (number, array, or function), default 4
156
156
  * @returns Spacing function
157
157
  */
158
- export function createSpacing(base: number = 4): SpacingFunction {
158
+ export function createSpacing(spacingInput: SpacingOptions = 4): SpacingFunction {
159
+ // If it's already a function, return it
160
+ if (typeof spacingInput === 'function') {
161
+ return spacingInput;
162
+ }
163
+
164
+ // If it's a number, create a function that multiplies by that number
165
+ if (typeof spacingInput === 'number') {
166
+ return (...values: number[]) => {
167
+ if (values.length === 0) return '0px';
168
+ return values.map((value) => `${value * spacingInput}px`).join(' ');
169
+ };
170
+ }
171
+
172
+ // If it's an array, use it as a scale
173
+ if (Array.isArray(spacingInput)) {
174
+ return (...values: number[]) => {
175
+ if (values.length === 0) return '0px';
176
+ return values.map((value) => `${spacingInput[value] || value}px`).join(' ');
177
+ };
178
+ }
179
+
180
+ // Default to 4px base
159
181
  return (...values: number[]) => {
160
182
  if (values.length === 0) return '0px';
161
- return values.map((value) => `${value * base}px`).join(' ');
183
+ return values.map((value) => `${value * 4}px`).join(' ');
162
184
  };
163
185
  }
164
186
 
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import type { ThemeManager as ThemeManagerType } from './runtime/ThemeManager';
8
+ import type { PartStyleProps } from '../types/partProps';
8
9
 
9
10
  /**
10
11
  * Theme metadata interface matching themes.config.js structure
@@ -184,6 +185,62 @@ export interface UseThemeReturn {
184
185
  preloadTheme: (themeName: string) => Promise<void>;
185
186
  }
186
187
 
188
+ /**
189
+ * Component-level theme override configuration
190
+ */
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, {
206
+ cssVars?: Record<string, string | number>;
207
+ className?: string;
208
+ }>;
209
+
210
+ /** Additional className for the component */
211
+ className?: string;
212
+ }
213
+
214
+ /**
215
+ * Theme component overrides for all components
216
+ */
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;
242
+ }
243
+
187
244
  /**
188
245
  * Theme provider props
189
246
  */
@@ -559,6 +616,8 @@ export interface Theme extends ThemeMetadata {
559
616
  borderRadius: Required<BorderRadiusOptions>;
560
617
  /** Custom properties */
561
618
  custom: ThemeCustomProperties;
619
+ /** Global CSS variables to apply */
620
+ cssVars?: Record<string, string | number>;
562
621
  /** Indicates this is a JS theme (not CSS-only) */
563
622
  __isJSTheme: true;
564
623
  }
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Theme Tools for Library Users
3
+ *
4
+ * Developer-friendly utilities for working with Atomix themes
5
+ */
6
+
7
+ import { Theme, ThemeMetadata } from './theme/types';
8
+ import { createTheme } from './theme/createTheme';
9
+ import { extendTheme, mergeTheme } from './theme/composeTheme';
10
+ import { ComponentOverrideManager } from './theme/overrides/ComponentOverrides';
11
+ import { WhiteLabelManager } from './theme/whitelabel/WhiteLabelManager';
12
+ import { generateCSSVariables } from './theme/generateCSSVariables';
13
+
14
+ /**
15
+ * Quick theme creator with sensible defaults
16
+ */
17
+ export function quickTheme(name: string, primaryColor: string, secondaryColor?: string): Theme {
18
+ return createTheme({
19
+ name,
20
+ palette: {
21
+ primary: { main: primaryColor },
22
+ secondary: secondaryColor ? { main: secondaryColor } : undefined,
23
+ },
24
+ });
25
+ }
26
+
27
+ /**
28
+ * Create a dark theme variant from a light theme
29
+ */
30
+ export function createDarkVariant(lightTheme: Theme): Theme {
31
+ return extendTheme(lightTheme, {
32
+ name: `${lightTheme.name} Dark`,
33
+ palette: {
34
+ mode: 'dark',
35
+ background: {
36
+ default: '#121212',
37
+ paper: '#1e1e1e',
38
+ },
39
+ text: {
40
+ primary: '#ffffff',
41
+ secondary: 'rgba(255, 255, 255, 0.7)',
42
+ },
43
+ },
44
+ });
45
+ }
46
+
47
+ /**
48
+ * Validate theme structure
49
+ */
50
+ export function validateTheme(theme: Theme): { valid: boolean; errors: string[] } {
51
+ const errors: string[] = [];
52
+
53
+ if (!theme.name) {
54
+ errors.push('Theme must have a name');
55
+ }
56
+
57
+ if (!theme.palette) {
58
+ errors.push('Theme must have a palette');
59
+ }
60
+
61
+ if (theme.palette && !theme.palette.primary) {
62
+ errors.push('Theme palette must have a primary color');
63
+ }
64
+
65
+ return {
66
+ valid: errors.length === 0,
67
+ errors,
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Generate CSS string from theme
73
+ */
74
+ export function themeToCSS(theme: Theme, selector = ':root'): string {
75
+ return generateCSSVariables(theme, {
76
+ selector,
77
+ prefix: 'atomix',
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Apply overrides to theme easily
83
+ */
84
+ export function applyOverrides(
85
+ theme: Theme,
86
+ overrides: Record<string, any>
87
+ ): Theme {
88
+ const manager = new ComponentOverrideManager(theme);
89
+
90
+ Object.entries(overrides).forEach(([component, override]) => {
91
+ manager.addOverride(component, override);
92
+ });
93
+
94
+ const overriddenTheme = manager.getThemeWithOverrides();
95
+ if (!overriddenTheme) {
96
+ throw new Error('Failed to get theme with overrides: theme was not set');
97
+ }
98
+
99
+ return overriddenTheme;
100
+ }
101
+
102
+ /**
103
+ * Apply white label configuration
104
+ */
105
+ export function applyWhiteLabel(
106
+ theme: Theme,
107
+ brand: {
108
+ name: string;
109
+ primaryColor: string;
110
+ logo?: string;
111
+ }
112
+ ): Theme {
113
+ const manager = new WhiteLabelManager(theme);
114
+
115
+ manager.configure({
116
+ brand: {
117
+ name: brand.name,
118
+ primaryColor: brand.primaryColor,
119
+ logo: brand.logo,
120
+ },
121
+ themeOverrides: {
122
+ palette: {
123
+ primary: { main: brand.primaryColor },
124
+ },
125
+ },
126
+ });
127
+
128
+ const whiteLabeledTheme = manager.getWhiteLabeledTheme();
129
+ if (!whiteLabeledTheme) {
130
+ throw new Error('Failed to get white labeled theme: theme was not set');
131
+ }
132
+
133
+ return whiteLabeledTheme;
134
+ }
135
+
136
+ /**
137
+ * Get theme metadata
138
+ */
139
+ export function getThemeMetadata(theme: Theme): ThemeMetadata {
140
+ return {
141
+ name: theme.name || 'Custom Theme',
142
+ description: theme.description,
143
+ author: theme.author,
144
+ version: theme.version || '1.0.0',
145
+ tags: theme.tags || [],
146
+ supportsDarkMode: theme.palette?.mode === 'dark',
147
+ status: 'stable',
148
+ color: theme.palette?.primary?.main || '#7AFFD7',
149
+ };
150
+ }
151
+
152
+ /**
153
+ * Check if theme supports dark mode
154
+ */
155
+ export function supportsDarkMode(theme: Theme): boolean {
156
+ return theme.palette?.mode === 'dark' ||
157
+ theme.supportsDarkMode === true ||
158
+ Boolean(theme.a11y?.modes?.includes('dark'));
159
+ }
160
+
161
+ /**
162
+ * Export theme as JSON
163
+ */
164
+ export function exportTheme(theme: Theme): string {
165
+ return JSON.stringify(theme, null, 2);
166
+ }
167
+
168
+ /**
169
+ * Import theme from JSON
170
+ */
171
+ export function importTheme(json: string): Theme {
172
+ try {
173
+ return JSON.parse(json) as Theme;
174
+ } catch (error) {
175
+ throw new Error('Invalid theme JSON');
176
+ }
177
+ }
178
+
179
+ // Re-export commonly used functions
180
+ export { createTheme, extendTheme, mergeTheme };
181
+ export { generateCSSVariables };
182
+ export { ComponentOverrideManager } from './theme/overrides/ComponentOverrides';
183
+ export { WhiteLabelManager } from './theme/whitelabel/WhiteLabelManager';
184
+ export { RTLManager } from './theme/i18n/rtl';
185
+ export { ThemeAnalytics } from './theme/monitoring/ThemeAnalytics';