@shohojdhara/atomix 0.3.3 → 0.3.4

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 (398) hide show
  1. package/README.md +46 -28
  2. package/dist/atomix.css +13 -6
  3. package/dist/atomix.min.css +1 -1
  4. package/dist/index.d.ts +912 -505
  5. package/dist/index.esm.js +2924 -2133
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +2719 -1916
  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/package.json +11 -62
  12. package/scripts/atomix-cli.js +338 -2
  13. package/scripts/cli/interactive-init.js +36 -44
  14. package/scripts/cli/theme-bridge.js +129 -0
  15. package/scripts/sync-theme-config.js +22 -22
  16. package/src/components/Button/Button.tsx +36 -1
  17. package/src/lib/config/index.ts +275 -0
  18. package/src/lib/config/loader.ts +105 -0
  19. package/src/lib/index.ts +1 -0
  20. package/src/lib/theme/composeTheme.ts +0 -5
  21. package/src/lib/theme/config/index.ts +1 -1
  22. package/src/lib/theme/config/loader.ts +75 -41
  23. package/src/lib/theme/config/types.ts +21 -7
  24. package/src/lib/theme/config/validator.ts +1 -1
  25. package/src/lib/theme/constants.ts +12 -2
  26. package/src/lib/theme/createTheme.ts +0 -1
  27. package/src/lib/theme/createThemeFromConfig.ts +132 -0
  28. package/src/lib/theme/devtools/CLI.ts +161 -76
  29. package/src/lib/theme/devtools/Comparator.tsx +343 -0
  30. package/src/lib/theme/devtools/IMPROVEMENTS.md +429 -0
  31. package/src/lib/theme/devtools/Inspector.tsx +21 -6
  32. package/src/lib/theme/devtools/LiveEditor.tsx +393 -0
  33. package/src/lib/theme/devtools/README.md +433 -0
  34. package/src/lib/theme/devtools/index.ts +12 -11
  35. package/src/lib/theme/generateCSSVariables.ts +79 -38
  36. package/src/lib/theme/index.ts +18 -2
  37. package/src/lib/theme/runtime/ThemeManager.test.ts +17 -1
  38. package/src/lib/theme/runtime/ThemeManager.ts +7 -7
  39. package/src/lib/theme/types.ts +42 -43
  40. package/src/lib/theme-tools.ts +7 -67
  41. package/src/lib/types/components.ts +69 -75
  42. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  43. package/src/styles/03-generic/_generated-root.css +5 -0
  44. package/src/styles/06-components/_components.navbar.scss +12 -5
  45. package/src/themes/README.md +1 -2
  46. package/src/themes/themes.config.js +10 -194
  47. package/dist/themes/applemix.css +0 -16576
  48. package/dist/themes/applemix.css.map +0 -1
  49. package/dist/themes/applemix.min.css +0 -73
  50. package/dist/themes/boomdevs.css +0 -16007
  51. package/dist/themes/boomdevs.css.map +0 -1
  52. package/dist/themes/boomdevs.min.css +0 -406
  53. package/dist/themes/esrar.css +0 -18424
  54. package/dist/themes/esrar.css.map +0 -1
  55. package/dist/themes/esrar.min.css +0 -221
  56. package/dist/themes/flashtrade.css +0 -17596
  57. package/dist/themes/flashtrade.css.map +0 -1
  58. package/dist/themes/flashtrade.min.css +0 -196
  59. package/dist/themes/mashroom.css +0 -31082
  60. package/dist/themes/mashroom.css.map +0 -1
  61. package/dist/themes/mashroom.min.css +0 -450
  62. package/dist/themes/shaj-default.css +0 -17200
  63. package/dist/themes/shaj-default.css.map +0 -1
  64. package/dist/themes/shaj-default.min.css +0 -502
  65. package/src/lib/theme/__tests__/ThemeBuilder.test.ts +0 -223
  66. package/src/lib/theme/builders/ThemeBuilder.ts +0 -372
  67. package/src/lib/theme/errors.test.ts +0 -207
  68. package/src/lib/theme/generators/CSSGenerator.ts +0 -311
  69. package/src/lib/theme/generators/ConfigGenerator.ts +0 -287
  70. package/src/lib/theme/generators/TypeGenerator.ts +0 -228
  71. package/src/lib/theme/generators/index.ts +0 -21
  72. package/src/lib/theme/monitoring/ThemeAnalytics.ts +0 -409
  73. package/src/lib/theme/monitoring/index.ts +0 -17
  74. package/src/lib/theme/overrides/ComponentOverrides.ts +0 -243
  75. package/src/lib/theme/overrides/index.ts +0 -15
  76. package/src/lib/theme/whitelabel/WhiteLabelManager.ts +0 -364
  77. package/src/lib/theme/whitelabel/index.ts +0 -13
  78. package/src/themes/THEME_CHECKLIST.md +0 -74
  79. package/src/themes/applemix/01-settings/_index.scss +0 -24
  80. package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
  81. package/src/themes/applemix/01-settings/_settings.background.scss +0 -6
  82. package/src/themes/applemix/01-settings/_settings.colors.scss +0 -75
  83. package/src/themes/applemix/01-settings/_settings.config.scss +0 -15
  84. package/src/themes/applemix/01-settings/_settings.typography.scss +0 -30
  85. package/src/themes/applemix/02-tools/_index.scss +0 -4
  86. package/src/themes/applemix/03-generic/_index.scss +0 -7
  87. package/src/themes/applemix/04-elements/_index.scss +0 -7
  88. package/src/themes/applemix/05-objects/_index.scss +0 -7
  89. package/src/themes/applemix/06-components/_index.scss +0 -15
  90. package/src/themes/applemix/99-utilities/_index.scss +0 -7
  91. package/src/themes/applemix/README.md +0 -378
  92. package/src/themes/applemix/index.scss +0 -33
  93. package/src/themes/boomdevs/01-settings/_index.scss +0 -38
  94. package/src/themes/boomdevs/01-settings/_settings.accordion.scss +0 -12
  95. package/src/themes/boomdevs/01-settings/_settings.animations.scss +0 -11
  96. package/src/themes/boomdevs/01-settings/_settings.avatar.scss +0 -9
  97. package/src/themes/boomdevs/01-settings/_settings.badge.scss +0 -11
  98. package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +0 -16
  99. package/src/themes/boomdevs/01-settings/_settings.border.scss +0 -10
  100. package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +0 -14
  101. package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +0 -13
  102. package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +0 -15
  103. package/src/themes/boomdevs/01-settings/_settings.button.scss +0 -9
  104. package/src/themes/boomdevs/01-settings/_settings.callout.scss +0 -9
  105. package/src/themes/boomdevs/01-settings/_settings.card.scss +0 -11
  106. package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +0 -9
  107. package/src/themes/boomdevs/01-settings/_settings.colors.scss +0 -145
  108. package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +0 -11
  109. package/src/themes/boomdevs/01-settings/_settings.grid.scss +0 -16
  110. package/src/themes/boomdevs/01-settings/_settings.input.scss +0 -14
  111. package/src/themes/boomdevs/01-settings/_settings.link.scss +0 -11
  112. package/src/themes/boomdevs/01-settings/_settings.list.scss +0 -10
  113. package/src/themes/boomdevs/01-settings/_settings.modal.scss +0 -16
  114. package/src/themes/boomdevs/01-settings/_settings.navbar.scss +0 -16
  115. package/src/themes/boomdevs/01-settings/_settings.pagination.scss +0 -13
  116. package/src/themes/boomdevs/01-settings/_settings.progress.scss +0 -11
  117. package/src/themes/boomdevs/01-settings/_settings.rating.scss +0 -10
  118. package/src/themes/boomdevs/01-settings/_settings.spacing.scss +0 -33
  119. package/src/themes/boomdevs/01-settings/_settings.spinner.scss +0 -11
  120. package/src/themes/boomdevs/01-settings/_settings.steps.scss +0 -12
  121. package/src/themes/boomdevs/01-settings/_settings.tabs.scss +0 -12
  122. package/src/themes/boomdevs/01-settings/_settings.todo.scss +0 -15
  123. package/src/themes/boomdevs/01-settings/_settings.toggle.scss +0 -14
  124. package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +0 -13
  125. package/src/themes/boomdevs/01-settings/_settings.typography.scss +0 -58
  126. package/src/themes/boomdevs/01-settings/_settings.video-player.scss +0 -12
  127. package/src/themes/boomdevs/02-tools/_index.scss +0 -7
  128. package/src/themes/boomdevs/03-generic/_index.scss +0 -7
  129. package/src/themes/boomdevs/04-elements/_index.scss +0 -7
  130. package/src/themes/boomdevs/05-objects/_index.scss +0 -7
  131. package/src/themes/boomdevs/06-components/_components.button.scss +0 -11
  132. package/src/themes/boomdevs/06-components/_index.scss +0 -11
  133. package/src/themes/boomdevs/99-utilities/_index.scss +0 -7
  134. package/src/themes/boomdevs/index.scss +0 -26
  135. package/src/themes/esrar/01-settings/_index.scss +0 -15
  136. package/src/themes/esrar/01-settings/_settings.colors.scss +0 -91
  137. package/src/themes/esrar/02-tools/_index.scss +0 -8
  138. package/src/themes/esrar/02-tools/_tools.animations.scss +0 -342
  139. package/src/themes/esrar/06-components/_components.accordion.scss +0 -49
  140. package/src/themes/esrar/06-components/_components.avatar-group.scss +0 -14
  141. package/src/themes/esrar/06-components/_components.avatar.scss +0 -61
  142. package/src/themes/esrar/06-components/_components.badge.scss +0 -117
  143. package/src/themes/esrar/06-components/_components.breadcrumb.scss +0 -65
  144. package/src/themes/esrar/06-components/_components.btn-group.scss +0 -19
  145. package/src/themes/esrar/06-components/_components.button.scss +0 -224
  146. package/src/themes/esrar/06-components/_components.callout.scss +0 -51
  147. package/src/themes/esrar/06-components/_components.card.scss +0 -134
  148. package/src/themes/esrar/06-components/_components.chart.scss +0 -24
  149. package/src/themes/esrar/06-components/_components.checkbox-group.scss +0 -26
  150. package/src/themes/esrar/06-components/_components.checkbox.scss +0 -71
  151. package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +0 -29
  152. package/src/themes/esrar/06-components/_components.countdown.scss +0 -67
  153. package/src/themes/esrar/06-components/_components.data-table.scss +0 -22
  154. package/src/themes/esrar/06-components/_components.datepicker.scss +0 -20
  155. package/src/themes/esrar/06-components/_components.dropdown.scss +0 -272
  156. package/src/themes/esrar/06-components/_components.edge-panel.scss +0 -10
  157. package/src/themes/esrar/06-components/_components.form-group.scss +0 -15
  158. package/src/themes/esrar/06-components/_components.form.scss +0 -66
  159. package/src/themes/esrar/06-components/_components.hero.scss +0 -251
  160. package/src/themes/esrar/06-components/_components.icon.scss +0 -33
  161. package/src/themes/esrar/06-components/_components.image-gallery.scss +0 -29
  162. package/src/themes/esrar/06-components/_components.input.scss +0 -91
  163. package/src/themes/esrar/06-components/_components.list-group.scss +0 -26
  164. package/src/themes/esrar/06-components/_components.modal.scss +0 -148
  165. package/src/themes/esrar/06-components/_components.notification.scss +0 -80
  166. package/src/themes/esrar/06-components/_components.pagination.scss +0 -84
  167. package/src/themes/esrar/06-components/_components.popover.scss +0 -10
  168. package/src/themes/esrar/06-components/_components.progress.scss +0 -64
  169. package/src/themes/esrar/06-components/_components.rating.scss +0 -26
  170. package/src/themes/esrar/06-components/_components.skeleton.scss +0 -15
  171. package/src/themes/esrar/06-components/_components.slider.scss +0 -90
  172. package/src/themes/esrar/06-components/_components.spinner.scss +0 -71
  173. package/src/themes/esrar/06-components/_components.steps.scss +0 -76
  174. package/src/themes/esrar/06-components/_components.tab.scss +0 -58
  175. package/src/themes/esrar/06-components/_components.tag.scss +0 -21
  176. package/src/themes/esrar/06-components/_components.timeline.scss +0 -19
  177. package/src/themes/esrar/06-components/_components.toast.scss +0 -91
  178. package/src/themes/esrar/06-components/_components.toggle.scss +0 -74
  179. package/src/themes/esrar/06-components/_components.tooltip.scss +0 -45
  180. package/src/themes/esrar/06-components/_components.upload.scss +0 -102
  181. package/src/themes/esrar/06-components/_index.scss +0 -42
  182. package/src/themes/esrar/index.scss +0 -30
  183. package/src/themes/flashtrade/01-settings/_index.scss +0 -19
  184. package/src/themes/flashtrade/01-settings/_settings.animations.scss +0 -11
  185. package/src/themes/flashtrade/01-settings/_settings.background.scss +0 -9
  186. package/src/themes/flashtrade/01-settings/_settings.colors.scss +0 -79
  187. package/src/themes/flashtrade/01-settings/_settings.config.scss +0 -16
  188. package/src/themes/flashtrade/01-settings/_settings.typography.scss +0 -35
  189. package/src/themes/flashtrade/02-tools/_index.scss +0 -8
  190. package/src/themes/flashtrade/03-generic/_index.scss +0 -8
  191. package/src/themes/flashtrade/04-elements/_index.scss +0 -12
  192. package/src/themes/flashtrade/05-objects/_index.scss +0 -8
  193. package/src/themes/flashtrade/06-components/_components.badge.scss +0 -156
  194. package/src/themes/flashtrade/06-components/_components.button.scss +0 -135
  195. package/src/themes/flashtrade/06-components/_components.card.scss +0 -214
  196. package/src/themes/flashtrade/06-components/_components.navbar.scss +0 -227
  197. package/src/themes/flashtrade/06-components/_index.scss +0 -13
  198. package/src/themes/flashtrade/99-utilities/_index.scss +0 -9
  199. package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +0 -187
  200. package/src/themes/flashtrade/README.md +0 -386
  201. package/src/themes/flashtrade/demo.html +0 -272
  202. package/src/themes/flashtrade/index.scss +0 -36
  203. package/src/themes/mashroom/01-settings/_index.scss +0 -69
  204. package/src/themes/mashroom/01-settings/_settings.accordion.scss +0 -32
  205. package/src/themes/mashroom/01-settings/_settings.animations.scss +0 -26
  206. package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +0 -22
  207. package/src/themes/mashroom/01-settings/_settings.avatar.scss +0 -57
  208. package/src/themes/mashroom/01-settings/_settings.badge.scss +0 -19
  209. package/src/themes/mashroom/01-settings/_settings.border-radius.scss +0 -24
  210. package/src/themes/mashroom/01-settings/_settings.border.scss +0 -14
  211. package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +0 -40
  212. package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
  213. package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +0 -17
  214. package/src/themes/mashroom/01-settings/_settings.btn-group.scss +0 -5
  215. package/src/themes/mashroom/01-settings/_settings.button.scss +0 -50
  216. package/src/themes/mashroom/01-settings/_settings.callout.scss +0 -81
  217. package/src/themes/mashroom/01-settings/_settings.card.scss +0 -52
  218. package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +0 -5
  219. package/src/themes/mashroom/01-settings/_settings.checkbox.scss +0 -23
  220. package/src/themes/mashroom/01-settings/_settings.color-mode.scss +0 -7
  221. package/src/themes/mashroom/01-settings/_settings.colors.scss +0 -180
  222. package/src/themes/mashroom/01-settings/_settings.config.scss +0 -4
  223. package/src/themes/mashroom/01-settings/_settings.countdown.scss +0 -20
  224. package/src/themes/mashroom/01-settings/_settings.data-table.scss +0 -56
  225. package/src/themes/mashroom/01-settings/_settings.datepicker.scss +0 -45
  226. package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +0 -3
  227. package/src/themes/mashroom/01-settings/_settings.dropdown.scss +0 -45
  228. package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +0 -24
  229. package/src/themes/mashroom/01-settings/_settings.fonts.scss +0 -8
  230. package/src/themes/mashroom/01-settings/_settings.form-group.scss +0 -14
  231. package/src/themes/mashroom/01-settings/_settings.form.scss +0 -6
  232. package/src/themes/mashroom/01-settings/_settings.grid.scss +0 -23
  233. package/src/themes/mashroom/01-settings/_settings.hero.scss +0 -41
  234. package/src/themes/mashroom/01-settings/_settings.input.scss +0 -51
  235. package/src/themes/mashroom/01-settings/_settings.link.scss +0 -13
  236. package/src/themes/mashroom/01-settings/_settings.list-group.scss +0 -16
  237. package/src/themes/mashroom/01-settings/_settings.list.scss +0 -13
  238. package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +0 -23
  239. package/src/themes/mashroom/01-settings/_settings.menu.scss +0 -50
  240. package/src/themes/mashroom/01-settings/_settings.messages.scss +0 -98
  241. package/src/themes/mashroom/01-settings/_settings.modal.scss +0 -41
  242. package/src/themes/mashroom/01-settings/_settings.nav.scss +0 -20
  243. package/src/themes/mashroom/01-settings/_settings.navbar.scss +0 -54
  244. package/src/themes/mashroom/01-settings/_settings.pagination.scss +0 -30
  245. package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +0 -45
  246. package/src/themes/mashroom/01-settings/_settings.popover.scss +0 -20
  247. package/src/themes/mashroom/01-settings/_settings.position.scss +0 -9
  248. package/src/themes/mashroom/01-settings/_settings.progress.scss +0 -17
  249. package/src/themes/mashroom/01-settings/_settings.rating.scss +0 -11
  250. package/src/themes/mashroom/01-settings/_settings.river.scss +0 -50
  251. package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +0 -31
  252. package/src/themes/mashroom/01-settings/_settings.select.scss +0 -47
  253. package/src/themes/mashroom/01-settings/_settings.side-menu.scss +0 -79
  254. package/src/themes/mashroom/01-settings/_settings.skeleton.scss +0 -24
  255. package/src/themes/mashroom/01-settings/_settings.spacing.scss +0 -66
  256. package/src/themes/mashroom/01-settings/_settings.spinner.scss +0 -34
  257. package/src/themes/mashroom/01-settings/_settings.steps.scss +0 -33
  258. package/src/themes/mashroom/01-settings/_settings.tabs.scss +0 -33
  259. package/src/themes/mashroom/01-settings/_settings.testimonials.scss +0 -24
  260. package/src/themes/mashroom/01-settings/_settings.todo.scss +0 -52
  261. package/src/themes/mashroom/01-settings/_settings.toggle.scss +0 -49
  262. package/src/themes/mashroom/01-settings/_settings.tooltip.scss +0 -20
  263. package/src/themes/mashroom/01-settings/_settings.typography.scss +0 -95
  264. package/src/themes/mashroom/01-settings/_settings.upload.scss +0 -96
  265. package/src/themes/mashroom/01-settings/_settings.z-layers.scss +0 -19
  266. package/src/themes/mashroom/02-tools/_index.scss +0 -8
  267. package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +0 -78
  268. package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +0 -114
  269. package/src/themes/mashroom/03-generic/_index.scss +0 -6
  270. package/src/themes/mashroom/04-elements/_index.scss +0 -6
  271. package/src/themes/mashroom/05-objects/_index.scss +0 -6
  272. package/src/themes/mashroom/06-components/_components.accordion.scss +0 -187
  273. package/src/themes/mashroom/06-components/_components.avatar-group.scss +0 -276
  274. package/src/themes/mashroom/06-components/_components.avatar.scss +0 -114
  275. package/src/themes/mashroom/06-components/_components.badge.scss +0 -152
  276. package/src/themes/mashroom/06-components/_components.breadcrumb.scss +0 -162
  277. package/src/themes/mashroom/06-components/_components.btn-group.scss +0 -404
  278. package/src/themes/mashroom/06-components/_components.button.scss +0 -160
  279. package/src/themes/mashroom/06-components/_components.callout.scss +0 -140
  280. package/src/themes/mashroom/06-components/_components.card.scss +0 -225
  281. package/src/themes/mashroom/06-components/_components.checkbox.scss +0 -186
  282. package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +0 -308
  283. package/src/themes/mashroom/06-components/_components.countdown.scss +0 -402
  284. package/src/themes/mashroom/06-components/_components.data-table.scss +0 -354
  285. package/src/themes/mashroom/06-components/_components.datepicker.scss +0 -349
  286. package/src/themes/mashroom/06-components/_components.dropdown.scss +0 -334
  287. package/src/themes/mashroom/06-components/_components.edge-panel.scss +0 -413
  288. package/src/themes/mashroom/06-components/_components.form-group.scss +0 -433
  289. package/src/themes/mashroom/06-components/_components.form.scss +0 -358
  290. package/src/themes/mashroom/06-components/_components.hero.scss +0 -151
  291. package/src/themes/mashroom/06-components/_components.input.scss +0 -147
  292. package/src/themes/mashroom/06-components/_components.list-group.scss +0 -456
  293. package/src/themes/mashroom/06-components/_components.list.scss +0 -145
  294. package/src/themes/mashroom/06-components/_components.menu.scss +0 -497
  295. package/src/themes/mashroom/06-components/_components.messages.scss +0 -277
  296. package/src/themes/mashroom/06-components/_components.modal.scss +0 -264
  297. package/src/themes/mashroom/06-components/_components.nav.scss +0 -181
  298. package/src/themes/mashroom/06-components/_components.navbar.scss +0 -538
  299. package/src/themes/mashroom/06-components/_components.pagination.scss +0 -400
  300. package/src/themes/mashroom/06-components/_components.photoviewer.scss +0 -498
  301. package/src/themes/mashroom/06-components/_components.popover.scss +0 -383
  302. package/src/themes/mashroom/06-components/_components.product-review.scss +0 -408
  303. package/src/themes/mashroom/06-components/_components.progress.scss +0 -249
  304. package/src/themes/mashroom/06-components/_components.rating.scss +0 -300
  305. package/src/themes/mashroom/06-components/_components.river.scss +0 -570
  306. package/src/themes/mashroom/06-components/_components.sectionintro.scss +0 -546
  307. package/src/themes/mashroom/06-components/_components.select.scss +0 -455
  308. package/src/themes/mashroom/06-components/_components.side-menu.scss +0 -635
  309. package/src/themes/mashroom/06-components/_components.skeleton.scss +0 -447
  310. package/src/themes/mashroom/06-components/_components.slider.scss +0 -414
  311. package/src/themes/mashroom/06-components/_components.spinner.scss +0 -198
  312. package/src/themes/mashroom/06-components/_components.steps.scss +0 -350
  313. package/src/themes/mashroom/06-components/_components.tabs.scss +0 -269
  314. package/src/themes/mashroom/06-components/_components.testimonials.scss +0 -561
  315. package/src/themes/mashroom/06-components/_components.toggle.scss +0 -231
  316. package/src/themes/mashroom/06-components/_components.tooltip.scss +0 -167
  317. package/src/themes/mashroom/06-components/_components.upload.scss +0 -537
  318. package/src/themes/mashroom/06-components/_components.video-player.scss +0 -560
  319. package/src/themes/mashroom/06-components/_index.scss +0 -55
  320. package/src/themes/mashroom/99-utilities/_index.scss +0 -6
  321. package/src/themes/mashroom/index.scss +0 -26
  322. package/src/themes/shaj-default/01-settings/_index.scss +0 -69
  323. package/src/themes/shaj-default/01-settings/_settings.accordion.scss +0 -38
  324. package/src/themes/shaj-default/01-settings/_settings.animations.scss +0 -32
  325. package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +0 -28
  326. package/src/themes/shaj-default/01-settings/_settings.avatar.scss +0 -63
  327. package/src/themes/shaj-default/01-settings/_settings.badge.scss +0 -25
  328. package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +0 -24
  329. package/src/themes/shaj-default/01-settings/_settings.border.scss +0 -20
  330. package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +0 -46
  331. package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
  332. package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +0 -23
  333. package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +0 -11
  334. package/src/themes/shaj-default/01-settings/_settings.button.scss +0 -56
  335. package/src/themes/shaj-default/01-settings/_settings.callout.scss +0 -87
  336. package/src/themes/shaj-default/01-settings/_settings.card.scss +0 -52
  337. package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +0 -11
  338. package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +0 -29
  339. package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +0 -13
  340. package/src/themes/shaj-default/01-settings/_settings.colors.scss +0 -91
  341. package/src/themes/shaj-default/01-settings/_settings.config.scss +0 -4
  342. package/src/themes/shaj-default/01-settings/_settings.countdown.scss +0 -26
  343. package/src/themes/shaj-default/01-settings/_settings.data-table.scss +0 -62
  344. package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +0 -51
  345. package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +0 -9
  346. package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +0 -51
  347. package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +0 -30
  348. package/src/themes/shaj-default/01-settings/_settings.fonts.scss +0 -13
  349. package/src/themes/shaj-default/01-settings/_settings.form-group.scss +0 -20
  350. package/src/themes/shaj-default/01-settings/_settings.form.scss +0 -12
  351. package/src/themes/shaj-default/01-settings/_settings.grid.scss +0 -29
  352. package/src/themes/shaj-default/01-settings/_settings.hero.scss +0 -47
  353. package/src/themes/shaj-default/01-settings/_settings.input.scss +0 -57
  354. package/src/themes/shaj-default/01-settings/_settings.link.scss +0 -19
  355. package/src/themes/shaj-default/01-settings/_settings.list-group.scss +0 -22
  356. package/src/themes/shaj-default/01-settings/_settings.list.scss +0 -19
  357. package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +0 -29
  358. package/src/themes/shaj-default/01-settings/_settings.menu.scss +0 -56
  359. package/src/themes/shaj-default/01-settings/_settings.messages.scss +0 -104
  360. package/src/themes/shaj-default/01-settings/_settings.modal.scss +0 -47
  361. package/src/themes/shaj-default/01-settings/_settings.nav.scss +0 -26
  362. package/src/themes/shaj-default/01-settings/_settings.navbar.scss +0 -60
  363. package/src/themes/shaj-default/01-settings/_settings.pagination.scss +0 -36
  364. package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +0 -51
  365. package/src/themes/shaj-default/01-settings/_settings.popover.scss +0 -26
  366. package/src/themes/shaj-default/01-settings/_settings.position.scss +0 -15
  367. package/src/themes/shaj-default/01-settings/_settings.progress.scss +0 -23
  368. package/src/themes/shaj-default/01-settings/_settings.rating.scss +0 -17
  369. package/src/themes/shaj-default/01-settings/_settings.river.scss +0 -56
  370. package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +0 -37
  371. package/src/themes/shaj-default/01-settings/_settings.select.scss +0 -53
  372. package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +0 -85
  373. package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +0 -30
  374. package/src/themes/shaj-default/01-settings/_settings.spacing.scss +0 -72
  375. package/src/themes/shaj-default/01-settings/_settings.spinner.scss +0 -24
  376. package/src/themes/shaj-default/01-settings/_settings.steps.scss +0 -39
  377. package/src/themes/shaj-default/01-settings/_settings.tabs.scss +0 -39
  378. package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +0 -30
  379. package/src/themes/shaj-default/01-settings/_settings.todo.scss +0 -58
  380. package/src/themes/shaj-default/01-settings/_settings.toggle.scss +0 -55
  381. package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +0 -26
  382. package/src/themes/shaj-default/01-settings/_settings.typography.scss +0 -101
  383. package/src/themes/shaj-default/01-settings/_settings.upload.scss +0 -102
  384. package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +0 -25
  385. package/src/themes/shaj-default/02-tools/_index.scss +0 -0
  386. package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
  387. package/src/themes/shaj-default/03-generic/_index.scss +0 -2
  388. package/src/themes/shaj-default/04-elements/_index.scss +0 -0
  389. package/src/themes/shaj-default/05-objects/_index.scss +0 -0
  390. package/src/themes/shaj-default/06-components/_components.button.scss +0 -55
  391. package/src/themes/shaj-default/06-components/_components.card.scss +0 -57
  392. package/src/themes/shaj-default/06-components/_components.input.scss +0 -58
  393. package/src/themes/shaj-default/06-components/_components.navbar.scss +0 -99
  394. package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
  395. package/src/themes/shaj-default/06-components/_index.scss +0 -13
  396. package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
  397. package/src/themes/shaj-default/index.scss +0 -25
  398. package/theme.config.ts +0 -360
@@ -1,207 +0,0 @@
1
- /**
2
- * Theme Error Handling Tests
3
- *
4
- * Tests for ThemeError class and ThemeLogger
5
- */
6
-
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- import {
9
- ThemeError,
10
- ThemeErrorCode,
11
- ThemeLogger,
12
- LogLevel,
13
- getLogger,
14
- setLogger,
15
- createLogger,
16
- } from './errors';
17
-
18
- describe('ThemeError', () => {
19
- it('should create an error with message', () => {
20
- const error = new ThemeError('Test error');
21
- expect(error.message).toBe('Test error');
22
- expect(error.name).toBe('ThemeError');
23
- expect(error.code).toBe(ThemeErrorCode.UNKNOWN_ERROR);
24
- });
25
-
26
- it('should create an error with code', () => {
27
- const error = new ThemeError(
28
- 'Theme not found',
29
- ThemeErrorCode.THEME_NOT_FOUND
30
- );
31
- expect(error.code).toBe(ThemeErrorCode.THEME_NOT_FOUND);
32
- });
33
-
34
- it('should create an error with context', () => {
35
- const context = { themeId: 'test-theme', reason: 'not found' };
36
- const error = new ThemeError('Error', ThemeErrorCode.THEME_NOT_FOUND, context);
37
- expect(error.context).toEqual(context);
38
- });
39
-
40
- it('should have a timestamp', () => {
41
- const before = Date.now();
42
- const error = new ThemeError('Test');
43
- const after = Date.now();
44
- expect(error.timestamp).toBeGreaterThanOrEqual(before);
45
- expect(error.timestamp).toBeLessThanOrEqual(after);
46
- });
47
-
48
- it('should convert to JSON', () => {
49
- const context = { themeId: 'test' };
50
- const error = new ThemeError('Test', ThemeErrorCode.THEME_NOT_FOUND, context);
51
- const json = error.toJSON();
52
- expect(json).toHaveProperty('name', 'ThemeError');
53
- expect(json).toHaveProperty('message', 'Test');
54
- expect(json).toHaveProperty('code', ThemeErrorCode.THEME_NOT_FOUND);
55
- expect(json).toHaveProperty('context', context);
56
- expect(json).toHaveProperty('timestamp');
57
- expect(json).toHaveProperty('stack');
58
- });
59
-
60
- it('should be an instance of Error', () => {
61
- const error = new ThemeError('Test');
62
- expect(error).toBeInstanceOf(Error);
63
- expect(error).toBeInstanceOf(ThemeError);
64
- });
65
- });
66
-
67
- describe('ThemeLogger', () => {
68
- let logger: ThemeLogger;
69
- let consoleErrorSpy: ReturnType<typeof vi.spyOn>;
70
- let consoleWarnSpy: ReturnType<typeof vi.spyOn>;
71
- let consoleInfoSpy: ReturnType<typeof vi.spyOn>;
72
- let consoleDebugSpy: ReturnType<typeof vi.spyOn>;
73
-
74
- beforeEach(() => {
75
- consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
76
- consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
77
- consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => {});
78
- consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => {});
79
- });
80
-
81
- afterEach(() => {
82
- vi.restoreAllMocks();
83
- });
84
-
85
- describe('error', () => {
86
- it('should log errors at ERROR level', () => {
87
- logger = new ThemeLogger({ level: LogLevel.ERROR });
88
- const error = new Error('Test error');
89
- logger.error('Test message', error);
90
- expect(consoleErrorSpy).toHaveBeenCalledTimes(1);
91
- });
92
-
93
- it('should not log errors below ERROR level', () => {
94
- logger = new ThemeLogger({ level: LogLevel.WARN });
95
- const error = new Error('Test error');
96
- logger.error('Test message', error);
97
- expect(consoleErrorSpy).not.toHaveBeenCalled();
98
- });
99
-
100
- it('should include context in error logs', () => {
101
- logger = new ThemeLogger({ level: LogLevel.ERROR });
102
- const error = new Error('Test');
103
- const context = { themeId: 'test' };
104
- logger.error('Test', error, context);
105
- expect(consoleErrorSpy).toHaveBeenCalledWith(
106
- expect.stringContaining('[ThemeError]'),
107
- expect.objectContaining({
108
- error,
109
- context: expect.objectContaining(context),
110
- })
111
- );
112
- });
113
-
114
- it('should call custom error handler', () => {
115
- const onError = vi.fn();
116
- logger = new ThemeLogger({ level: LogLevel.ERROR, onError });
117
- const error = new Error('Test');
118
- logger.error('Test', error);
119
- expect(onError).toHaveBeenCalledWith(
120
- expect.any(ThemeError),
121
- undefined
122
- );
123
- });
124
- });
125
-
126
- describe('warn', () => {
127
- it('should log warnings at WARN level', () => {
128
- logger = new ThemeLogger({ level: LogLevel.WARN });
129
- logger.warn('Warning message');
130
- expect(consoleWarnSpy).toHaveBeenCalledTimes(1);
131
- });
132
-
133
- it('should not log warnings below WARN level', () => {
134
- logger = new ThemeLogger({ level: LogLevel.ERROR });
135
- logger.warn('Warning message');
136
- expect(consoleWarnSpy).not.toHaveBeenCalled();
137
- });
138
-
139
- it('should call custom warn handler', () => {
140
- const onWarn = vi.fn();
141
- logger = new ThemeLogger({ level: LogLevel.WARN, onWarn });
142
- logger.warn('Warning', { context: 'data' });
143
- expect(onWarn).toHaveBeenCalledWith('Warning', { context: 'data' });
144
- });
145
- });
146
-
147
- describe('info', () => {
148
- it('should log info at INFO level', () => {
149
- logger = new ThemeLogger({ level: LogLevel.INFO });
150
- logger.info('Info message');
151
- expect(consoleInfoSpy).toHaveBeenCalledTimes(1);
152
- });
153
-
154
- it('should not log info below INFO level', () => {
155
- logger = new ThemeLogger({ level: LogLevel.WARN });
156
- logger.info('Info message');
157
- expect(consoleInfoSpy).not.toHaveBeenCalled();
158
- });
159
- });
160
-
161
- describe('debug', () => {
162
- it('should log debug at DEBUG level', () => {
163
- logger = new ThemeLogger({ level: LogLevel.DEBUG });
164
- logger.debug('Debug message');
165
- expect(consoleDebugSpy).toHaveBeenCalledTimes(1);
166
- });
167
-
168
- it('should not log debug below DEBUG level', () => {
169
- logger = new ThemeLogger({ level: LogLevel.INFO });
170
- logger.debug('Debug message');
171
- expect(consoleDebugSpy).not.toHaveBeenCalled();
172
- });
173
- });
174
-
175
- describe('console control', () => {
176
- it('should not log to console when disabled', () => {
177
- logger = new ThemeLogger({ level: LogLevel.DEBUG, enableConsole: false });
178
- logger.error('Error');
179
- logger.warn('Warning');
180
- logger.info('Info');
181
- logger.debug('Debug');
182
- expect(consoleErrorSpy).not.toHaveBeenCalled();
183
- expect(consoleWarnSpy).not.toHaveBeenCalled();
184
- expect(consoleInfoSpy).not.toHaveBeenCalled();
185
- expect(consoleDebugSpy).not.toHaveBeenCalled();
186
- });
187
- });
188
- });
189
-
190
- describe('Logger utilities', () => {
191
- it('should get default logger', () => {
192
- const logger = getLogger();
193
- expect(logger).toBeInstanceOf(ThemeLogger);
194
- });
195
-
196
- it('should set custom logger', () => {
197
- const customLogger = new ThemeLogger({ level: LogLevel.DEBUG });
198
- setLogger(customLogger);
199
- const retrieved = getLogger();
200
- expect(retrieved).toBe(customLogger);
201
- });
202
-
203
- it('should create logger with config', () => {
204
- const logger = createLogger({ level: LogLevel.WARN });
205
- expect(logger).toBeInstanceOf(ThemeLogger);
206
- });
207
- });
@@ -1,311 +0,0 @@
1
- /**
2
- * CSS Generator
3
- *
4
- * Optimized CSS variable generation from theme objects
5
- */
6
-
7
- import type { Theme } from '../types';
8
-
9
- /**
10
- * CSS generation options
11
- */
12
- export interface CSSGeneratorOptions {
13
- /** CSS selector (default: ':root') */
14
- selector?: string;
15
- /** CSS variable prefix (default: 'atomix') */
16
- prefix?: string;
17
- /** Include comments */
18
- includeComments?: boolean;
19
- /** Minify output */
20
- minify?: boolean;
21
- /** Custom property formatter */
22
- formatProperty?: (path: string[], value: any) => string;
23
- }
24
-
25
- /**
26
- * CSS Generator
27
- *
28
- * Generates optimized CSS custom properties from theme objects
29
- */
30
- export class CSSGenerator {
31
- private options: Required<Omit<CSSGeneratorOptions, 'formatProperty'>> & {
32
- formatProperty?: CSSGeneratorOptions['formatProperty'];
33
- };
34
-
35
- constructor(options: CSSGeneratorOptions = {}) {
36
- this.options = {
37
- selector: options.selector || ':root',
38
- prefix: options.prefix || 'atomix',
39
- includeComments: options.includeComments ?? true,
40
- minify: options.minify ?? false,
41
- formatProperty: options.formatProperty,
42
- };
43
- }
44
-
45
- /**
46
- * Generate CSS from theme
47
- */
48
- generate(theme: Theme): string {
49
- const variables = this.extractVariables(theme);
50
- return this.formatCSS(variables);
51
- }
52
-
53
- /**
54
- * Extract CSS variables from theme
55
- */
56
- private extractVariables(theme: Theme): Map<string, string> {
57
- const variables = new Map<string, string>();
58
-
59
- // Palette
60
- this.extractPalette(theme.palette, variables);
61
-
62
- // Typography
63
- this.extractTypography(theme.typography, variables);
64
-
65
- // Spacing (generate common values)
66
- this.extractSpacing(theme.spacing, variables);
67
-
68
- // Breakpoints
69
- this.extractBreakpoints(theme.breakpoints, variables);
70
-
71
- // Shadows
72
- this.extractShadows(theme.shadows, variables);
73
-
74
- // Transitions
75
- this.extractTransitions(theme.transitions, variables);
76
-
77
- // Z-index
78
- this.extractZIndex(theme.zIndex, variables);
79
-
80
- // Border radius
81
- this.extractBorderRadius(theme.borderRadius, variables);
82
-
83
- // Custom properties
84
- this.extractCustom(theme.custom, variables);
85
-
86
- return variables;
87
- }
88
-
89
- /**
90
- * Extract palette variables
91
- */
92
- private extractPalette(palette: Theme['palette'], variables: Map<string, string>): void {
93
- const colors = ['primary', 'secondary', 'error', 'warning', 'info', 'success'] as const;
94
-
95
- for (const color of colors) {
96
- const colorObj = palette[color];
97
- if (colorObj) {
98
- variables.set(`palette-${color}-main`, colorObj.main);
99
- if (colorObj.light) variables.set(`palette-${color}-light`, colorObj.light);
100
- if (colorObj.dark) variables.set(`palette-${color}-dark`, colorObj.dark);
101
- if (colorObj.contrastText) variables.set(`palette-${color}-contrast-text`, colorObj.contrastText);
102
- }
103
- }
104
-
105
- // Background
106
- if (palette.background) {
107
- variables.set('background-default', palette.background.default);
108
- variables.set('background-paper', palette.background.paper);
109
- variables.set('background-subtle', palette.background.subtle);
110
- }
111
-
112
- // Text
113
- if (palette.text) {
114
- variables.set('text-primary', palette.text.primary);
115
- variables.set('text-secondary', palette.text.secondary);
116
- variables.set('text-disabled', palette.text.disabled);
117
- }
118
- }
119
-
120
- /**
121
- * Extract typography variables
122
- */
123
- private extractTypography(typography: Theme['typography'], variables: Map<string, string>): void {
124
- variables.set('font-family', typography.fontFamily);
125
- variables.set('font-size', `${typography.fontSize}px`);
126
-
127
- // Font weights
128
- if (typography.fontWeightLight) variables.set('font-weight-light', String(typography.fontWeightLight));
129
- if (typography.fontWeightRegular) variables.set('font-weight-regular', String(typography.fontWeightRegular));
130
- if (typography.fontWeightMedium) variables.set('font-weight-medium', String(typography.fontWeightMedium));
131
- if (typography.fontWeightSemiBold) variables.set('font-weight-semibold', String(typography.fontWeightSemiBold));
132
- if (typography.fontWeightBold) variables.set('font-weight-bold', String(typography.fontWeightBold));
133
-
134
- // Headings
135
- const headings = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;
136
- for (const heading of headings) {
137
- const h = typography[heading];
138
- if (h) {
139
- if (h.fontSize) variables.set(`typography-${heading}-font-size`, String(h.fontSize));
140
- if (h.fontWeight) variables.set(`typography-${heading}-font-weight`, String(h.fontWeight));
141
- if (h.lineHeight) variables.set(`typography-${heading}-line-height`, String(h.lineHeight));
142
- }
143
- }
144
-
145
- // Body
146
- if (typography.body1) {
147
- if (typography.body1.fontSize) variables.set('typography-body1-font-size', String(typography.body1.fontSize));
148
- if (typography.body1.fontWeight) variables.set('typography-body1-font-weight', String(typography.body1.fontWeight));
149
- if (typography.body1.lineHeight) variables.set('typography-body1-line-height', String(typography.body1.lineHeight));
150
- }
151
-
152
- if (typography.body2) {
153
- if (typography.body2.fontSize) variables.set('typography-body2-font-size', String(typography.body2.fontSize));
154
- if (typography.body2.fontWeight) variables.set('typography-body2-font-weight', String(typography.body2.fontWeight));
155
- if (typography.body2.lineHeight) variables.set('typography-body2-line-height', String(typography.body2.lineHeight));
156
- }
157
- }
158
-
159
- /**
160
- * Extract spacing variables
161
- */
162
- private extractSpacing(spacing: Theme['spacing'], variables: Map<string, string>): void {
163
- // Generate common spacing values
164
- for (let i = 0; i <= 12; i++) {
165
- try {
166
- const value = spacing(i);
167
- variables.set(`spacing-${i}`, value);
168
- } catch {
169
- // Ignore errors
170
- }
171
- }
172
- }
173
-
174
- /**
175
- * Extract breakpoint variables
176
- */
177
- private extractBreakpoints(breakpoints: Theme['breakpoints'], variables: Map<string, string>): void {
178
- const keys = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
179
- for (const key of keys) {
180
- const value = breakpoints.values[key];
181
- if (value !== undefined) {
182
- variables.set(`breakpoint-${key}`, `${value}px`);
183
- }
184
- }
185
- }
186
-
187
- /**
188
- * Extract shadow variables
189
- */
190
- private extractShadows(shadows: Theme['shadows'], variables: Map<string, string>): void {
191
- const keys = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
192
- for (const key of keys) {
193
- const shadow = shadows[key];
194
- if (shadow) {
195
- variables.set(`shadow-${key}`, shadow);
196
- }
197
- }
198
- }
199
-
200
- /**
201
- * Extract transition variables
202
- */
203
- private extractTransitions(transitions: Theme['transitions'], variables: Map<string, string>): void {
204
- if (transitions.duration) {
205
- const durations = ['shortest', 'shorter', 'short', 'standard', 'complex'] as const;
206
- for (const key of durations) {
207
- const value = transitions.duration[key];
208
- if (value !== undefined) {
209
- variables.set(`transition-duration-${key}`, `${value}ms`);
210
- }
211
- }
212
- }
213
-
214
- if (transitions.easing) {
215
- const easings = ['easeInOut', 'easeOut', 'easeIn', 'sharp'] as const;
216
- for (const key of easings) {
217
- const value = transitions.easing[key];
218
- if (value) {
219
- variables.set(`transition-easing-${key}`, value);
220
- }
221
- }
222
- }
223
- }
224
-
225
- /**
226
- * Extract z-index variables
227
- */
228
- private extractZIndex(zIndex: Theme['zIndex'], variables: Map<string, string>): void {
229
- const keys = ['mobileStepper', 'speedDial', 'appBar', 'drawer', 'modal', 'snackbar', 'tooltip'] as const;
230
- for (const key of keys) {
231
- const value = zIndex[key];
232
- if (value !== undefined) {
233
- variables.set(`z-index-${key}`, String(value));
234
- }
235
- }
236
- }
237
-
238
- /**
239
- * Extract border radius variables
240
- */
241
- private extractBorderRadius(borderRadius: Theme['borderRadius'], variables: Map<string, string>): void {
242
- const keys = ['base', 'sm', 'md', 'lg', 'xl', 'xxl', '3xl', '4xl', 'pill'] as const;
243
- for (const key of keys) {
244
- const value = borderRadius[key];
245
- if (value !== undefined) {
246
- variables.set(`border-radius-${key}`, String(value));
247
- }
248
- }
249
- }
250
-
251
- /**
252
- * Extract custom properties
253
- */
254
- private extractCustom(custom: Theme['custom'], variables: Map<string, string>): void {
255
- for (const [key, value] of Object.entries(custom)) {
256
- if (value !== undefined && value !== null) {
257
- variables.set(`custom-${key}`, String(value));
258
- }
259
- }
260
- }
261
-
262
- /**
263
- * Format CSS from variables
264
- */
265
- private formatCSS(variables: Map<string, string>): string {
266
- const { selector, prefix, includeComments, minify } = this.options;
267
- const indent = minify ? '' : ' ';
268
- const newline = minify ? '' : '\n';
269
- const space = minify ? '' : ' ';
270
-
271
- let css = '';
272
-
273
- if (includeComments && !minify) {
274
- css += `/* Atomix Theme CSS Variables */${newline}`;
275
- css += `/* Generated from theme configuration */${newline}${newline}`;
276
- }
277
-
278
- css += `${selector}${space}{${newline}`;
279
-
280
- for (const [key, value] of variables.entries()) {
281
- const property = this.formatPropertyName(key);
282
- css += `${indent}--${prefix}-${property}:${space}${value};${newline}`;
283
- }
284
-
285
- css += `}${newline}`;
286
-
287
- return css;
288
- }
289
-
290
- /**
291
- * Format property name
292
- */
293
- private formatPropertyName(key: string): string {
294
- if (this.options.formatProperty) {
295
- return this.options.formatProperty(key.split('-'), key);
296
- }
297
- return key;
298
- }
299
- }
300
-
301
- /**
302
- * Generate CSS variables from theme
303
- *
304
- * @param theme - Theme object
305
- * @param options - Generation options
306
- * @returns CSS string
307
- */
308
- export function generateCSS(theme: Theme, options: CSSGeneratorOptions = {}): string {
309
- const generator = new CSSGenerator(options);
310
- return generator.generate(theme);
311
- }