@shohojdhara/atomix 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/README.md +46 -28
  2. package/dist/atomix.css +15 -9
  3. package/dist/atomix.css.map +1 -0
  4. package/dist/atomix.min.css +15108 -11
  5. package/dist/atomix.min.css.map +1 -0
  6. package/dist/charts.d.ts +1929 -0
  7. package/dist/charts.js +6482 -0
  8. package/dist/charts.js.map +1 -0
  9. package/dist/core.d.ts +1289 -0
  10. package/dist/core.js +3357 -0
  11. package/dist/core.js.map +1 -0
  12. package/dist/forms.d.ts +1085 -0
  13. package/dist/forms.js +2450 -0
  14. package/dist/forms.js.map +1 -0
  15. package/dist/heavy.d.ts +636 -0
  16. package/dist/heavy.js +4550 -0
  17. package/dist/heavy.js.map +1 -0
  18. package/dist/index.d.ts +5196 -4618
  19. package/dist/index.esm.js +4240 -2776
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +4057 -2571
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.min.js +1 -1
  24. package/dist/index.min.js.map +1 -1
  25. package/dist/layout.d.ts +300 -0
  26. package/dist/layout.js +336 -0
  27. package/dist/layout.js.map +1 -0
  28. package/dist/theme.d.ts +1992 -0
  29. package/dist/theme.js +5348 -0
  30. package/dist/theme.js.map +1 -0
  31. package/package.json +63 -68
  32. package/scripts/atomix-cli.js +879 -15
  33. package/scripts/cli/__tests__/cli-commands.test.js +204 -0
  34. package/scripts/cli/__tests__/utils.test.js +201 -0
  35. package/scripts/cli/__tests__/vitest.config.js +26 -0
  36. package/scripts/cli/interactive-init.js +37 -45
  37. package/scripts/cli/theme-bridge.js +129 -0
  38. package/scripts/cli/token-manager.js +32 -7
  39. package/scripts/cli/utils.js +347 -0
  40. package/scripts/sync-theme-config.js +22 -22
  41. package/src/components/Accordion/Accordion.tsx +5 -54
  42. package/src/components/Accordion/index.ts +1 -1
  43. package/src/components/Avatar/Avatar.tsx +3 -3
  44. package/src/components/Badge/Badge.tsx +3 -3
  45. package/src/components/Breadcrumb/Breadcrumb.tsx +3 -3
  46. package/src/components/Button/Button.tsx +36 -1
  47. package/src/components/Card/ElevationCard.tsx +1 -1
  48. package/src/components/Chart/AnimatedChart.tsx +19 -17
  49. package/src/components/Chart/AreaChart.tsx +5 -1
  50. package/src/components/Chart/BarChart.tsx +1 -0
  51. package/src/components/Chart/BubbleChart.tsx +6 -5
  52. package/src/components/Chart/ChartToolbar.tsx +1 -0
  53. package/src/components/Chart/FunnelChart.tsx +1 -1
  54. package/src/components/Chart/RadarChart.tsx +19 -12
  55. package/src/components/Chart/ScatterChart.tsx +3 -3
  56. package/src/components/Chart/TreemapChart.tsx +2 -1
  57. package/src/components/Chart/WaterfallChart.tsx +0 -1
  58. package/src/components/Chart/types.ts +12 -2
  59. package/src/components/Chart/utils.ts +4 -3
  60. package/src/components/DataTable/DataTable.tsx +3 -3
  61. package/src/components/Dropdown/Dropdown.tsx +12 -9
  62. package/src/components/Footer/FooterSection.tsx +3 -3
  63. package/src/components/Form/Checkbox.tsx +3 -3
  64. package/src/components/Form/Input.tsx +4 -2
  65. package/src/components/Form/Radio.tsx +3 -3
  66. package/src/components/Form/Select.tsx +3 -3
  67. package/src/components/Form/Textarea.tsx +4 -2
  68. package/src/components/List/List.stories.tsx +3 -3
  69. package/src/components/List/List.tsx +3 -3
  70. package/src/components/List/ListGroup.tsx +3 -1
  71. package/src/components/Modal/Modal.tsx +3 -3
  72. package/src/components/Navigation/Menu/MegaMenu.tsx +9 -3
  73. package/src/components/Navigation/Menu/Menu.tsx +9 -3
  74. package/src/components/Pagination/Pagination.tsx +6 -5
  75. package/src/components/PhotoViewer/PhotoViewerImage.tsx +2 -2
  76. package/src/components/Popover/Popover.tsx +4 -4
  77. package/src/components/Progress/Progress.tsx +6 -2
  78. package/src/components/Rating/Rating.tsx +5 -2
  79. package/src/components/Slider/Slider.tsx +10 -9
  80. package/src/components/Spinner/Spinner.tsx +3 -3
  81. package/src/components/Tabs/Tabs.tsx +3 -3
  82. package/src/components/Tooltip/Tooltip.tsx +3 -3
  83. package/src/components/index.ts +5 -2
  84. package/src/layouts/MasonryGrid/MasonryGrid.tsx +2 -2
  85. package/src/lib/composables/useChartPerformance.ts +102 -78
  86. package/src/lib/composables/useChartScale.ts +10 -0
  87. package/src/lib/composables/useHero.ts +9 -2
  88. package/src/lib/composables/useHeroBackgroundSlider.ts +5 -3
  89. package/src/lib/composables/useSideMenu.ts +1 -0
  90. package/src/lib/composables/useVideoPlayer.ts +3 -2
  91. package/src/lib/config/index.ts +275 -0
  92. package/src/lib/config/loader.ts +147 -0
  93. package/src/lib/hooks/index.ts +0 -1
  94. package/src/lib/hooks/useComponentCustomization.ts +10 -14
  95. package/src/lib/hooks/usePerformanceMonitor.ts +149 -0
  96. package/src/lib/index.ts +1 -0
  97. package/src/lib/patterns/index.ts +2 -2
  98. package/src/lib/patterns/slots.tsx +2 -2
  99. package/src/lib/theme/composeTheme.ts +1 -6
  100. package/src/lib/theme/config/index.ts +1 -1
  101. package/src/lib/theme/config/loader.ts +75 -41
  102. package/src/lib/theme/config/types.ts +21 -7
  103. package/src/lib/theme/config/validator.ts +1 -1
  104. package/src/lib/theme/constants.ts +12 -2
  105. package/src/lib/theme/core/ThemeEngine.ts +8 -0
  106. package/src/lib/theme/core/ThemeValidator.ts +5 -2
  107. package/src/lib/theme/createTheme.ts +0 -1
  108. package/src/lib/theme/createThemeFromConfig.ts +132 -0
  109. package/src/lib/theme/devtools/CLI.ts +161 -76
  110. package/src/lib/theme/devtools/Comparator.tsx +343 -0
  111. package/src/lib/theme/devtools/IMPROVEMENTS.md +429 -0
  112. package/src/lib/theme/devtools/Inspector.tsx +22 -7
  113. package/src/lib/theme/devtools/LiveEditor.tsx +399 -0
  114. package/src/lib/theme/devtools/README.md +433 -0
  115. package/src/lib/theme/devtools/index.ts +12 -11
  116. package/src/lib/theme/generateCSSVariables.ts +80 -39
  117. package/src/lib/theme/i18n/rtl.ts +2 -1
  118. package/src/lib/theme/index.ts +18 -2
  119. package/src/lib/theme/runtime/ThemeApplicator.ts +28 -11
  120. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +3 -3
  121. package/src/lib/theme/runtime/ThemeManager.test.ts +17 -1
  122. package/src/lib/theme/runtime/ThemeManager.ts +11 -7
  123. package/src/lib/theme/types.ts +42 -43
  124. package/src/lib/theme-tools.ts +8 -68
  125. package/src/lib/types/components.ts +252 -109
  126. package/src/lib/types/partProps.ts +0 -16
  127. package/src/lib/utils/fontPreloader.ts +148 -0
  128. package/src/lib/utils/index.ts +11 -0
  129. package/src/lib/utils/memoryMonitor.ts +189 -0
  130. package/src/styles/01-settings/_settings.fonts.scss +2 -5
  131. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  132. package/src/styles/03-generic/_generated-root.css +26 -0
  133. package/src/styles/06-components/_components.navbar.scss +6 -5
  134. package/src/themes/README.md +1 -2
  135. package/src/themes/themes.config.js +30 -181
  136. package/dist/themes/applemix.css +0 -16576
  137. package/dist/themes/applemix.css.map +0 -1
  138. package/dist/themes/applemix.min.css +0 -73
  139. package/dist/themes/boomdevs.css +0 -16007
  140. package/dist/themes/boomdevs.css.map +0 -1
  141. package/dist/themes/boomdevs.min.css +0 -406
  142. package/dist/themes/esrar.css +0 -18424
  143. package/dist/themes/esrar.css.map +0 -1
  144. package/dist/themes/esrar.min.css +0 -221
  145. package/dist/themes/flashtrade.css +0 -17596
  146. package/dist/themes/flashtrade.css.map +0 -1
  147. package/dist/themes/flashtrade.min.css +0 -196
  148. package/dist/themes/mashroom.css +0 -31082
  149. package/dist/themes/mashroom.css.map +0 -1
  150. package/dist/themes/mashroom.min.css +0 -450
  151. package/dist/themes/shaj-default.css +0 -17200
  152. package/dist/themes/shaj-default.css.map +0 -1
  153. package/dist/themes/shaj-default.min.css +0 -502
  154. package/scripts/build-themes.js +0 -208
  155. package/src/components/AtomixGlass/atomixGLass.old.tsx +0 -1263
  156. package/src/lib/theme/__tests__/ThemeBuilder.test.ts +0 -223
  157. package/src/lib/theme/builders/ThemeBuilder.ts +0 -372
  158. package/src/lib/theme/errors.test.ts +0 -207
  159. package/src/lib/theme/generators/CSSGenerator.ts +0 -311
  160. package/src/lib/theme/generators/ConfigGenerator.ts +0 -287
  161. package/src/lib/theme/generators/TypeGenerator.ts +0 -228
  162. package/src/lib/theme/generators/index.ts +0 -21
  163. package/src/lib/theme/monitoring/ThemeAnalytics.ts +0 -409
  164. package/src/lib/theme/monitoring/index.ts +0 -17
  165. package/src/lib/theme/overrides/ComponentOverrides.ts +0 -243
  166. package/src/lib/theme/overrides/index.ts +0 -15
  167. package/src/lib/theme/whitelabel/WhiteLabelManager.ts +0 -364
  168. package/src/lib/theme/whitelabel/index.ts +0 -13
  169. package/src/themes/THEME_CHECKLIST.md +0 -74
  170. package/src/themes/applemix/01-settings/_index.scss +0 -24
  171. package/src/themes/applemix/01-settings/_settings.animations.scss +0 -0
  172. package/src/themes/applemix/01-settings/_settings.background.scss +0 -6
  173. package/src/themes/applemix/01-settings/_settings.colors.scss +0 -75
  174. package/src/themes/applemix/01-settings/_settings.config.scss +0 -15
  175. package/src/themes/applemix/01-settings/_settings.typography.scss +0 -30
  176. package/src/themes/applemix/02-tools/_index.scss +0 -4
  177. package/src/themes/applemix/03-generic/_index.scss +0 -7
  178. package/src/themes/applemix/04-elements/_index.scss +0 -7
  179. package/src/themes/applemix/05-objects/_index.scss +0 -7
  180. package/src/themes/applemix/06-components/_index.scss +0 -15
  181. package/src/themes/applemix/99-utilities/_index.scss +0 -7
  182. package/src/themes/applemix/README.md +0 -378
  183. package/src/themes/applemix/index.scss +0 -33
  184. package/src/themes/boomdevs/01-settings/_index.scss +0 -38
  185. package/src/themes/boomdevs/01-settings/_settings.accordion.scss +0 -12
  186. package/src/themes/boomdevs/01-settings/_settings.animations.scss +0 -11
  187. package/src/themes/boomdevs/01-settings/_settings.avatar.scss +0 -9
  188. package/src/themes/boomdevs/01-settings/_settings.badge.scss +0 -11
  189. package/src/themes/boomdevs/01-settings/_settings.border-radius.scss +0 -16
  190. package/src/themes/boomdevs/01-settings/_settings.border.scss +0 -10
  191. package/src/themes/boomdevs/01-settings/_settings.box-shadow.scss +0 -14
  192. package/src/themes/boomdevs/01-settings/_settings.breadcrumb.scss +0 -13
  193. package/src/themes/boomdevs/01-settings/_settings.breakpoints.scss +0 -15
  194. package/src/themes/boomdevs/01-settings/_settings.button.scss +0 -9
  195. package/src/themes/boomdevs/01-settings/_settings.callout.scss +0 -9
  196. package/src/themes/boomdevs/01-settings/_settings.card.scss +0 -11
  197. package/src/themes/boomdevs/01-settings/_settings.checkbox.scss +0 -9
  198. package/src/themes/boomdevs/01-settings/_settings.colors.scss +0 -145
  199. package/src/themes/boomdevs/01-settings/_settings.dropdown.scss +0 -11
  200. package/src/themes/boomdevs/01-settings/_settings.grid.scss +0 -16
  201. package/src/themes/boomdevs/01-settings/_settings.input.scss +0 -14
  202. package/src/themes/boomdevs/01-settings/_settings.link.scss +0 -11
  203. package/src/themes/boomdevs/01-settings/_settings.list.scss +0 -10
  204. package/src/themes/boomdevs/01-settings/_settings.modal.scss +0 -16
  205. package/src/themes/boomdevs/01-settings/_settings.navbar.scss +0 -16
  206. package/src/themes/boomdevs/01-settings/_settings.pagination.scss +0 -13
  207. package/src/themes/boomdevs/01-settings/_settings.progress.scss +0 -11
  208. package/src/themes/boomdevs/01-settings/_settings.rating.scss +0 -10
  209. package/src/themes/boomdevs/01-settings/_settings.spacing.scss +0 -33
  210. package/src/themes/boomdevs/01-settings/_settings.spinner.scss +0 -11
  211. package/src/themes/boomdevs/01-settings/_settings.steps.scss +0 -12
  212. package/src/themes/boomdevs/01-settings/_settings.tabs.scss +0 -12
  213. package/src/themes/boomdevs/01-settings/_settings.todo.scss +0 -15
  214. package/src/themes/boomdevs/01-settings/_settings.toggle.scss +0 -14
  215. package/src/themes/boomdevs/01-settings/_settings.tooltip.scss +0 -13
  216. package/src/themes/boomdevs/01-settings/_settings.typography.scss +0 -58
  217. package/src/themes/boomdevs/01-settings/_settings.video-player.scss +0 -12
  218. package/src/themes/boomdevs/02-tools/_index.scss +0 -7
  219. package/src/themes/boomdevs/03-generic/_index.scss +0 -7
  220. package/src/themes/boomdevs/04-elements/_index.scss +0 -7
  221. package/src/themes/boomdevs/05-objects/_index.scss +0 -7
  222. package/src/themes/boomdevs/06-components/_components.button.scss +0 -11
  223. package/src/themes/boomdevs/06-components/_index.scss +0 -11
  224. package/src/themes/boomdevs/99-utilities/_index.scss +0 -7
  225. package/src/themes/boomdevs/index.scss +0 -26
  226. package/src/themes/esrar/01-settings/_index.scss +0 -15
  227. package/src/themes/esrar/01-settings/_settings.colors.scss +0 -91
  228. package/src/themes/esrar/02-tools/_index.scss +0 -8
  229. package/src/themes/esrar/02-tools/_tools.animations.scss +0 -342
  230. package/src/themes/esrar/06-components/_components.accordion.scss +0 -49
  231. package/src/themes/esrar/06-components/_components.avatar-group.scss +0 -14
  232. package/src/themes/esrar/06-components/_components.avatar.scss +0 -61
  233. package/src/themes/esrar/06-components/_components.badge.scss +0 -117
  234. package/src/themes/esrar/06-components/_components.breadcrumb.scss +0 -65
  235. package/src/themes/esrar/06-components/_components.btn-group.scss +0 -19
  236. package/src/themes/esrar/06-components/_components.button.scss +0 -224
  237. package/src/themes/esrar/06-components/_components.callout.scss +0 -51
  238. package/src/themes/esrar/06-components/_components.card.scss +0 -134
  239. package/src/themes/esrar/06-components/_components.chart.scss +0 -24
  240. package/src/themes/esrar/06-components/_components.checkbox-group.scss +0 -26
  241. package/src/themes/esrar/06-components/_components.checkbox.scss +0 -71
  242. package/src/themes/esrar/06-components/_components.color-mode-toggle.scss +0 -29
  243. package/src/themes/esrar/06-components/_components.countdown.scss +0 -67
  244. package/src/themes/esrar/06-components/_components.data-table.scss +0 -22
  245. package/src/themes/esrar/06-components/_components.datepicker.scss +0 -20
  246. package/src/themes/esrar/06-components/_components.dropdown.scss +0 -272
  247. package/src/themes/esrar/06-components/_components.edge-panel.scss +0 -10
  248. package/src/themes/esrar/06-components/_components.form-group.scss +0 -15
  249. package/src/themes/esrar/06-components/_components.form.scss +0 -66
  250. package/src/themes/esrar/06-components/_components.hero.scss +0 -251
  251. package/src/themes/esrar/06-components/_components.icon.scss +0 -33
  252. package/src/themes/esrar/06-components/_components.image-gallery.scss +0 -29
  253. package/src/themes/esrar/06-components/_components.input.scss +0 -91
  254. package/src/themes/esrar/06-components/_components.list-group.scss +0 -26
  255. package/src/themes/esrar/06-components/_components.modal.scss +0 -148
  256. package/src/themes/esrar/06-components/_components.notification.scss +0 -80
  257. package/src/themes/esrar/06-components/_components.pagination.scss +0 -84
  258. package/src/themes/esrar/06-components/_components.popover.scss +0 -10
  259. package/src/themes/esrar/06-components/_components.progress.scss +0 -64
  260. package/src/themes/esrar/06-components/_components.rating.scss +0 -26
  261. package/src/themes/esrar/06-components/_components.skeleton.scss +0 -15
  262. package/src/themes/esrar/06-components/_components.slider.scss +0 -90
  263. package/src/themes/esrar/06-components/_components.spinner.scss +0 -71
  264. package/src/themes/esrar/06-components/_components.steps.scss +0 -76
  265. package/src/themes/esrar/06-components/_components.tab.scss +0 -58
  266. package/src/themes/esrar/06-components/_components.tag.scss +0 -21
  267. package/src/themes/esrar/06-components/_components.timeline.scss +0 -19
  268. package/src/themes/esrar/06-components/_components.toast.scss +0 -91
  269. package/src/themes/esrar/06-components/_components.toggle.scss +0 -74
  270. package/src/themes/esrar/06-components/_components.tooltip.scss +0 -45
  271. package/src/themes/esrar/06-components/_components.upload.scss +0 -102
  272. package/src/themes/esrar/06-components/_index.scss +0 -42
  273. package/src/themes/esrar/index.scss +0 -30
  274. package/src/themes/flashtrade/01-settings/_index.scss +0 -19
  275. package/src/themes/flashtrade/01-settings/_settings.animations.scss +0 -11
  276. package/src/themes/flashtrade/01-settings/_settings.background.scss +0 -9
  277. package/src/themes/flashtrade/01-settings/_settings.colors.scss +0 -79
  278. package/src/themes/flashtrade/01-settings/_settings.config.scss +0 -16
  279. package/src/themes/flashtrade/01-settings/_settings.typography.scss +0 -35
  280. package/src/themes/flashtrade/02-tools/_index.scss +0 -8
  281. package/src/themes/flashtrade/03-generic/_index.scss +0 -8
  282. package/src/themes/flashtrade/04-elements/_index.scss +0 -12
  283. package/src/themes/flashtrade/05-objects/_index.scss +0 -8
  284. package/src/themes/flashtrade/06-components/_components.badge.scss +0 -156
  285. package/src/themes/flashtrade/06-components/_components.button.scss +0 -135
  286. package/src/themes/flashtrade/06-components/_components.card.scss +0 -214
  287. package/src/themes/flashtrade/06-components/_components.navbar.scss +0 -227
  288. package/src/themes/flashtrade/06-components/_index.scss +0 -13
  289. package/src/themes/flashtrade/99-utilities/_index.scss +0 -9
  290. package/src/themes/flashtrade/99-utilities/_utilities.trading.scss +0 -187
  291. package/src/themes/flashtrade/README.md +0 -386
  292. package/src/themes/flashtrade/demo.html +0 -272
  293. package/src/themes/flashtrade/index.scss +0 -36
  294. package/src/themes/mashroom/01-settings/_index.scss +0 -69
  295. package/src/themes/mashroom/01-settings/_settings.accordion.scss +0 -32
  296. package/src/themes/mashroom/01-settings/_settings.animations.scss +0 -26
  297. package/src/themes/mashroom/01-settings/_settings.avatar-group.scss +0 -22
  298. package/src/themes/mashroom/01-settings/_settings.avatar.scss +0 -57
  299. package/src/themes/mashroom/01-settings/_settings.badge.scss +0 -19
  300. package/src/themes/mashroom/01-settings/_settings.border-radius.scss +0 -24
  301. package/src/themes/mashroom/01-settings/_settings.border.scss +0 -14
  302. package/src/themes/mashroom/01-settings/_settings.box-shadow.scss +0 -40
  303. package/src/themes/mashroom/01-settings/_settings.breadcrumb.scss +0 -0
  304. package/src/themes/mashroom/01-settings/_settings.breakpoints.scss +0 -17
  305. package/src/themes/mashroom/01-settings/_settings.btn-group.scss +0 -5
  306. package/src/themes/mashroom/01-settings/_settings.button.scss +0 -50
  307. package/src/themes/mashroom/01-settings/_settings.callout.scss +0 -81
  308. package/src/themes/mashroom/01-settings/_settings.card.scss +0 -52
  309. package/src/themes/mashroom/01-settings/_settings.checkbox-group.scss +0 -5
  310. package/src/themes/mashroom/01-settings/_settings.checkbox.scss +0 -23
  311. package/src/themes/mashroom/01-settings/_settings.color-mode.scss +0 -7
  312. package/src/themes/mashroom/01-settings/_settings.colors.scss +0 -180
  313. package/src/themes/mashroom/01-settings/_settings.config.scss +0 -4
  314. package/src/themes/mashroom/01-settings/_settings.countdown.scss +0 -20
  315. package/src/themes/mashroom/01-settings/_settings.data-table.scss +0 -56
  316. package/src/themes/mashroom/01-settings/_settings.datepicker.scss +0 -45
  317. package/src/themes/mashroom/01-settings/_settings.design-tokens.scss +0 -3
  318. package/src/themes/mashroom/01-settings/_settings.dropdown.scss +0 -45
  319. package/src/themes/mashroom/01-settings/_settings.edge-panel.scss +0 -24
  320. package/src/themes/mashroom/01-settings/_settings.fonts.scss +0 -8
  321. package/src/themes/mashroom/01-settings/_settings.form-group.scss +0 -14
  322. package/src/themes/mashroom/01-settings/_settings.form.scss +0 -6
  323. package/src/themes/mashroom/01-settings/_settings.grid.scss +0 -23
  324. package/src/themes/mashroom/01-settings/_settings.hero.scss +0 -41
  325. package/src/themes/mashroom/01-settings/_settings.input.scss +0 -51
  326. package/src/themes/mashroom/01-settings/_settings.link.scss +0 -13
  327. package/src/themes/mashroom/01-settings/_settings.list-group.scss +0 -16
  328. package/src/themes/mashroom/01-settings/_settings.list.scss +0 -13
  329. package/src/themes/mashroom/01-settings/_settings.masonry-grid.scss +0 -23
  330. package/src/themes/mashroom/01-settings/_settings.menu.scss +0 -50
  331. package/src/themes/mashroom/01-settings/_settings.messages.scss +0 -98
  332. package/src/themes/mashroom/01-settings/_settings.modal.scss +0 -41
  333. package/src/themes/mashroom/01-settings/_settings.nav.scss +0 -20
  334. package/src/themes/mashroom/01-settings/_settings.navbar.scss +0 -54
  335. package/src/themes/mashroom/01-settings/_settings.pagination.scss +0 -30
  336. package/src/themes/mashroom/01-settings/_settings.photoviewer.scss +0 -45
  337. package/src/themes/mashroom/01-settings/_settings.popover.scss +0 -20
  338. package/src/themes/mashroom/01-settings/_settings.position.scss +0 -9
  339. package/src/themes/mashroom/01-settings/_settings.progress.scss +0 -17
  340. package/src/themes/mashroom/01-settings/_settings.rating.scss +0 -11
  341. package/src/themes/mashroom/01-settings/_settings.river.scss +0 -50
  342. package/src/themes/mashroom/01-settings/_settings.sectionintro.scss +0 -31
  343. package/src/themes/mashroom/01-settings/_settings.select.scss +0 -47
  344. package/src/themes/mashroom/01-settings/_settings.side-menu.scss +0 -79
  345. package/src/themes/mashroom/01-settings/_settings.skeleton.scss +0 -24
  346. package/src/themes/mashroom/01-settings/_settings.spacing.scss +0 -66
  347. package/src/themes/mashroom/01-settings/_settings.spinner.scss +0 -34
  348. package/src/themes/mashroom/01-settings/_settings.steps.scss +0 -33
  349. package/src/themes/mashroom/01-settings/_settings.tabs.scss +0 -33
  350. package/src/themes/mashroom/01-settings/_settings.testimonials.scss +0 -24
  351. package/src/themes/mashroom/01-settings/_settings.todo.scss +0 -52
  352. package/src/themes/mashroom/01-settings/_settings.toggle.scss +0 -49
  353. package/src/themes/mashroom/01-settings/_settings.tooltip.scss +0 -20
  354. package/src/themes/mashroom/01-settings/_settings.typography.scss +0 -95
  355. package/src/themes/mashroom/01-settings/_settings.upload.scss +0 -96
  356. package/src/themes/mashroom/01-settings/_settings.z-layers.scss +0 -19
  357. package/src/themes/mashroom/02-tools/_index.scss +0 -8
  358. package/src/themes/mashroom/02-tools/_tools.psychedelic-gradients.scss +0 -78
  359. package/src/themes/mashroom/02-tools/_tools.trippy-effects.scss +0 -114
  360. package/src/themes/mashroom/03-generic/_index.scss +0 -6
  361. package/src/themes/mashroom/04-elements/_index.scss +0 -6
  362. package/src/themes/mashroom/05-objects/_index.scss +0 -6
  363. package/src/themes/mashroom/06-components/_components.accordion.scss +0 -187
  364. package/src/themes/mashroom/06-components/_components.avatar-group.scss +0 -276
  365. package/src/themes/mashroom/06-components/_components.avatar.scss +0 -114
  366. package/src/themes/mashroom/06-components/_components.badge.scss +0 -152
  367. package/src/themes/mashroom/06-components/_components.breadcrumb.scss +0 -162
  368. package/src/themes/mashroom/06-components/_components.btn-group.scss +0 -404
  369. package/src/themes/mashroom/06-components/_components.button.scss +0 -160
  370. package/src/themes/mashroom/06-components/_components.callout.scss +0 -140
  371. package/src/themes/mashroom/06-components/_components.card.scss +0 -225
  372. package/src/themes/mashroom/06-components/_components.checkbox.scss +0 -186
  373. package/src/themes/mashroom/06-components/_components.color-mode-toggle.scss +0 -308
  374. package/src/themes/mashroom/06-components/_components.countdown.scss +0 -402
  375. package/src/themes/mashroom/06-components/_components.data-table.scss +0 -354
  376. package/src/themes/mashroom/06-components/_components.datepicker.scss +0 -349
  377. package/src/themes/mashroom/06-components/_components.dropdown.scss +0 -334
  378. package/src/themes/mashroom/06-components/_components.edge-panel.scss +0 -413
  379. package/src/themes/mashroom/06-components/_components.form-group.scss +0 -433
  380. package/src/themes/mashroom/06-components/_components.form.scss +0 -358
  381. package/src/themes/mashroom/06-components/_components.hero.scss +0 -151
  382. package/src/themes/mashroom/06-components/_components.input.scss +0 -147
  383. package/src/themes/mashroom/06-components/_components.list-group.scss +0 -456
  384. package/src/themes/mashroom/06-components/_components.list.scss +0 -145
  385. package/src/themes/mashroom/06-components/_components.menu.scss +0 -497
  386. package/src/themes/mashroom/06-components/_components.messages.scss +0 -277
  387. package/src/themes/mashroom/06-components/_components.modal.scss +0 -264
  388. package/src/themes/mashroom/06-components/_components.nav.scss +0 -181
  389. package/src/themes/mashroom/06-components/_components.navbar.scss +0 -538
  390. package/src/themes/mashroom/06-components/_components.pagination.scss +0 -400
  391. package/src/themes/mashroom/06-components/_components.photoviewer.scss +0 -498
  392. package/src/themes/mashroom/06-components/_components.popover.scss +0 -383
  393. package/src/themes/mashroom/06-components/_components.product-review.scss +0 -408
  394. package/src/themes/mashroom/06-components/_components.progress.scss +0 -249
  395. package/src/themes/mashroom/06-components/_components.rating.scss +0 -300
  396. package/src/themes/mashroom/06-components/_components.river.scss +0 -570
  397. package/src/themes/mashroom/06-components/_components.sectionintro.scss +0 -546
  398. package/src/themes/mashroom/06-components/_components.select.scss +0 -455
  399. package/src/themes/mashroom/06-components/_components.side-menu.scss +0 -635
  400. package/src/themes/mashroom/06-components/_components.skeleton.scss +0 -447
  401. package/src/themes/mashroom/06-components/_components.slider.scss +0 -414
  402. package/src/themes/mashroom/06-components/_components.spinner.scss +0 -198
  403. package/src/themes/mashroom/06-components/_components.steps.scss +0 -350
  404. package/src/themes/mashroom/06-components/_components.tabs.scss +0 -269
  405. package/src/themes/mashroom/06-components/_components.testimonials.scss +0 -561
  406. package/src/themes/mashroom/06-components/_components.toggle.scss +0 -231
  407. package/src/themes/mashroom/06-components/_components.tooltip.scss +0 -167
  408. package/src/themes/mashroom/06-components/_components.upload.scss +0 -537
  409. package/src/themes/mashroom/06-components/_components.video-player.scss +0 -560
  410. package/src/themes/mashroom/06-components/_index.scss +0 -55
  411. package/src/themes/mashroom/99-utilities/_index.scss +0 -6
  412. package/src/themes/mashroom/index.scss +0 -26
  413. package/src/themes/shaj-default/01-settings/_index.scss +0 -69
  414. package/src/themes/shaj-default/01-settings/_settings.accordion.scss +0 -38
  415. package/src/themes/shaj-default/01-settings/_settings.animations.scss +0 -32
  416. package/src/themes/shaj-default/01-settings/_settings.avatar-group.scss +0 -28
  417. package/src/themes/shaj-default/01-settings/_settings.avatar.scss +0 -63
  418. package/src/themes/shaj-default/01-settings/_settings.badge.scss +0 -25
  419. package/src/themes/shaj-default/01-settings/_settings.border-radius.scss +0 -24
  420. package/src/themes/shaj-default/01-settings/_settings.border.scss +0 -20
  421. package/src/themes/shaj-default/01-settings/_settings.box-shadow.scss +0 -46
  422. package/src/themes/shaj-default/01-settings/_settings.breadcrumb.scss +0 -0
  423. package/src/themes/shaj-default/01-settings/_settings.breakpoints.scss +0 -23
  424. package/src/themes/shaj-default/01-settings/_settings.btn-group.scss +0 -11
  425. package/src/themes/shaj-default/01-settings/_settings.button.scss +0 -56
  426. package/src/themes/shaj-default/01-settings/_settings.callout.scss +0 -87
  427. package/src/themes/shaj-default/01-settings/_settings.card.scss +0 -52
  428. package/src/themes/shaj-default/01-settings/_settings.checkbox-group.scss +0 -11
  429. package/src/themes/shaj-default/01-settings/_settings.checkbox.scss +0 -29
  430. package/src/themes/shaj-default/01-settings/_settings.color-mode.scss +0 -13
  431. package/src/themes/shaj-default/01-settings/_settings.colors.scss +0 -91
  432. package/src/themes/shaj-default/01-settings/_settings.config.scss +0 -4
  433. package/src/themes/shaj-default/01-settings/_settings.countdown.scss +0 -26
  434. package/src/themes/shaj-default/01-settings/_settings.data-table.scss +0 -62
  435. package/src/themes/shaj-default/01-settings/_settings.datepicker.scss +0 -51
  436. package/src/themes/shaj-default/01-settings/_settings.design-tokens.scss +0 -9
  437. package/src/themes/shaj-default/01-settings/_settings.dropdown.scss +0 -51
  438. package/src/themes/shaj-default/01-settings/_settings.edge-panel.scss +0 -30
  439. package/src/themes/shaj-default/01-settings/_settings.fonts.scss +0 -13
  440. package/src/themes/shaj-default/01-settings/_settings.form-group.scss +0 -20
  441. package/src/themes/shaj-default/01-settings/_settings.form.scss +0 -12
  442. package/src/themes/shaj-default/01-settings/_settings.grid.scss +0 -29
  443. package/src/themes/shaj-default/01-settings/_settings.hero.scss +0 -47
  444. package/src/themes/shaj-default/01-settings/_settings.input.scss +0 -57
  445. package/src/themes/shaj-default/01-settings/_settings.link.scss +0 -19
  446. package/src/themes/shaj-default/01-settings/_settings.list-group.scss +0 -22
  447. package/src/themes/shaj-default/01-settings/_settings.list.scss +0 -19
  448. package/src/themes/shaj-default/01-settings/_settings.masonry-grid.scss +0 -29
  449. package/src/themes/shaj-default/01-settings/_settings.menu.scss +0 -56
  450. package/src/themes/shaj-default/01-settings/_settings.messages.scss +0 -104
  451. package/src/themes/shaj-default/01-settings/_settings.modal.scss +0 -47
  452. package/src/themes/shaj-default/01-settings/_settings.nav.scss +0 -26
  453. package/src/themes/shaj-default/01-settings/_settings.navbar.scss +0 -60
  454. package/src/themes/shaj-default/01-settings/_settings.pagination.scss +0 -36
  455. package/src/themes/shaj-default/01-settings/_settings.photoviewer.scss +0 -51
  456. package/src/themes/shaj-default/01-settings/_settings.popover.scss +0 -26
  457. package/src/themes/shaj-default/01-settings/_settings.position.scss +0 -15
  458. package/src/themes/shaj-default/01-settings/_settings.progress.scss +0 -23
  459. package/src/themes/shaj-default/01-settings/_settings.rating.scss +0 -17
  460. package/src/themes/shaj-default/01-settings/_settings.river.scss +0 -56
  461. package/src/themes/shaj-default/01-settings/_settings.sectionintro.scss +0 -37
  462. package/src/themes/shaj-default/01-settings/_settings.select.scss +0 -53
  463. package/src/themes/shaj-default/01-settings/_settings.side-menu.scss +0 -85
  464. package/src/themes/shaj-default/01-settings/_settings.skeleton.scss +0 -30
  465. package/src/themes/shaj-default/01-settings/_settings.spacing.scss +0 -72
  466. package/src/themes/shaj-default/01-settings/_settings.spinner.scss +0 -24
  467. package/src/themes/shaj-default/01-settings/_settings.steps.scss +0 -39
  468. package/src/themes/shaj-default/01-settings/_settings.tabs.scss +0 -39
  469. package/src/themes/shaj-default/01-settings/_settings.testimonials.scss +0 -30
  470. package/src/themes/shaj-default/01-settings/_settings.todo.scss +0 -58
  471. package/src/themes/shaj-default/01-settings/_settings.toggle.scss +0 -55
  472. package/src/themes/shaj-default/01-settings/_settings.tooltip.scss +0 -26
  473. package/src/themes/shaj-default/01-settings/_settings.typography.scss +0 -101
  474. package/src/themes/shaj-default/01-settings/_settings.upload.scss +0 -102
  475. package/src/themes/shaj-default/01-settings/_settings.z-layers.scss +0 -25
  476. package/src/themes/shaj-default/02-tools/_index.scss +0 -0
  477. package/src/themes/shaj-default/03-generic/_generic.root.scss +0 -0
  478. package/src/themes/shaj-default/03-generic/_index.scss +0 -2
  479. package/src/themes/shaj-default/04-elements/_index.scss +0 -0
  480. package/src/themes/shaj-default/05-objects/_index.scss +0 -0
  481. package/src/themes/shaj-default/06-components/_components.button.scss +0 -55
  482. package/src/themes/shaj-default/06-components/_components.card.scss +0 -57
  483. package/src/themes/shaj-default/06-components/_components.input.scss +0 -58
  484. package/src/themes/shaj-default/06-components/_components.navbar.scss +0 -99
  485. package/src/themes/shaj-default/06-components/_components.tooltip.scss +0 -0
  486. package/src/themes/shaj-default/06-components/_index.scss +0 -13
  487. package/src/themes/shaj-default/99-utilities/_index.scss +0 -0
  488. package/src/themes/shaj-default/index.scss +0 -25
  489. package/theme.config.ts +0 -360
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Atomix Config Loader
3
+ *
4
+ * Helper functions to load atomix.config.ts from external projects.
5
+ * Similar to how Tailwind loads tailwind.config.js
6
+ */
7
+
8
+ import type { AtomixConfig } from './index';
9
+
10
+ /**
11
+ * Load Atomix configuration from project root
12
+ *
13
+ * Attempts to load atomix.config.ts from the current working directory.
14
+ * Falls back to default config if file doesn't exist.
15
+ *
16
+ * @param options - Loader options
17
+ * @returns Loaded configuration or default
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { loadAtomixConfig } from '@shohojdhara/atomix/config';
22
+ *
23
+ * const config = loadAtomixConfig();
24
+ * const theme = createThemeFromConfig(config);
25
+ * ```
26
+ */
27
+ export function loadAtomixConfig(
28
+ options: {
29
+ /** Custom config path (default: 'atomix.config.ts') */
30
+ configPath?: string;
31
+ /** Whether to throw error if config not found (default: false) */
32
+ required?: boolean;
33
+ } = {}
34
+ ): AtomixConfig {
35
+ const { configPath = 'atomix.config.ts', required = false } = options;
36
+
37
+ // Default config
38
+ const defaultConfig: AtomixConfig = {
39
+ prefix: 'atomix',
40
+ theme: {
41
+ extend: {},
42
+ },
43
+ };
44
+
45
+ // In browser environments, config loading is not supported
46
+ if (typeof window !== 'undefined') {
47
+ if (required) {
48
+ throw new Error('Config loading not supported in browser environment');
49
+ }
50
+ return defaultConfig;
51
+ }
52
+
53
+ // Try to load config file
54
+ try {
55
+ // Use dynamic import for ESM compatibility
56
+ const configModule = require(configPath);
57
+ const config = configModule.default || configModule;
58
+
59
+ // Validate it's an AtomixConfig
60
+ if (config && typeof config === 'object') {
61
+ return config as AtomixConfig;
62
+ }
63
+
64
+ throw new Error('Invalid config format');
65
+ } catch (error: any) {
66
+ if (required) {
67
+ throw new Error(`Failed to load config from ${configPath}: ${error.message}`);
68
+ }
69
+
70
+ // Return default config if not required
71
+ return defaultConfig;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Resolve config path
77
+ *
78
+ * Finds atomix.config.ts in the project, checking common locations.
79
+ * Returns null in browser environments where file system access is not available.
80
+ *
81
+ * This function is designed to work in Node.js environments only.
82
+ * In browser builds, it will always return null without attempting to access Node.js modules.
83
+ *
84
+ * @internal This function uses Node.js modules and should not be called in browser environments.
85
+ */
86
+ export function resolveConfigPath(): string | null {
87
+ // Early return for browser environments - prevents any Node.js module access
88
+ // This check happens before any require() calls, preventing bundlers from analyzing them
89
+ if (typeof window !== 'undefined' || typeof process === 'undefined' || !process.cwd) {
90
+ return null;
91
+ }
92
+
93
+ // Only attempt to load Node.js modules in Node.js runtime
94
+ // Use a lazy-loading pattern that prevents static analysis by bundlers
95
+ try {
96
+ // Create a function that only executes in Node.js runtime
97
+ // Use string-based module names to prevent static analysis by bundlers
98
+ const loadNodeModules = () => {
99
+ // These requires are only executed at runtime in Node.js environments
100
+ // They are marked as external in Rollup config and should not be bundled
101
+ // Using string concatenation and computed property access to prevent static analysis
102
+ if (typeof require === 'undefined') {
103
+ return null;
104
+ }
105
+
106
+ // Use a try-catch wrapper to safely access require
107
+ try {
108
+ // Build module names dynamically to prevent static analysis
109
+ const moduleNames: [string, string] = ['f' + 's', 'p' + 'a' + 't' + 'h'];
110
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
111
+ const fs = require(moduleNames[0]);
112
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
113
+ const path = require(moduleNames[1]);
114
+ return { fs, path };
115
+ } catch {
116
+ return null;
117
+ }
118
+ };
119
+
120
+ const modules = loadNodeModules();
121
+ if (!modules) {
122
+ return null;
123
+ }
124
+
125
+ const { fs, path } = modules;
126
+ const cwd = process.cwd();
127
+ const possiblePaths = [
128
+ path.join(cwd, 'atomix.config.ts'),
129
+ path.join(cwd, 'atomix.config.js'),
130
+ path.join(cwd, 'atomix.config.mjs'),
131
+ ];
132
+
133
+ for (const configPath of possiblePaths) {
134
+ if (fs.existsSync(configPath)) {
135
+ return configPath;
136
+ }
137
+ }
138
+ } catch (error) {
139
+ // Silently fail in browser environments or when modules are unavailable
140
+ return null;
141
+ }
142
+
143
+ return null;
144
+ }
145
+
146
+ export default loadAtomixConfig;
147
+
@@ -8,7 +8,6 @@ export {
8
8
  useComponentCustomization,
9
9
  useComponentDefaultProps,
10
10
  useMergedProps,
11
- mergeClassNames,
12
11
  applyCSSVarsToStyle,
13
12
  } from './useComponentCustomization';
14
13
 
@@ -11,6 +11,7 @@ import type { ComponentPartsMap } from '../types/partProps';
11
11
  import type { ComponentCSSVariables } from '../constants/cssVariables';
12
12
  import { mergeCSSVars } from '../theme/cssVariableMapper';
13
13
  import { mergePartStyles } from '../types/partProps';
14
+ import { mergeClassNames } from '../utils/componentUtils';
14
15
 
15
16
  /**
16
17
  * Component names that support customization
@@ -22,7 +23,9 @@ export type ComponentName = keyof ComponentPartsMap;
22
23
  */
23
24
  export interface CustomizableComponentProps<T extends ComponentName> {
24
25
  /** CSS variable overrides */
25
- cssVars?: Partial<Record<ComponentCSSVariables[T], string | number>>;
26
+ cssVars?: T extends keyof ComponentCSSVariables
27
+ ? Partial<Record<ComponentCSSVariables[T], string | number>>
28
+ : Record<string, string | number>;
26
29
  /** Part-based styling */
27
30
  parts?: ComponentPartsMap[T];
28
31
  /** Additional className */
@@ -72,17 +75,17 @@ export function useComponentCustomization<T extends ComponentName>(
72
75
 
73
76
  // Merge CSS variables
74
77
  const cssVars = useMemo(() => {
75
- const themeVars = theme?.components?.[component]?.cssVars || {};
78
+ const themeVars = (theme as any)?.components?.[component]?.cssVars || {};
76
79
  const propVars = props.cssVars || {};
77
80
  return mergeCSSVars(themeVars, propVars as any);
78
81
  }, [theme, component, props.cssVars]);
79
82
 
80
83
  // Merge parts
81
84
  const parts = useMemo(() => {
82
- const themeParts = theme?.components?.[component]?.parts || {};
83
- const propParts = props.parts || {};
85
+ const themeParts = (theme as any)?.components?.[component]?.parts || {};
86
+ const propParts = (props.parts || {}) as Record<string, any>;
84
87
 
85
- const merged: any = {};
88
+ const merged: Record<string, any> = {};
86
89
  const allPartNames = new Set([
87
90
  ...Object.keys(themeParts),
88
91
  ...Object.keys(propParts),
@@ -100,7 +103,7 @@ export function useComponentCustomization<T extends ComponentName>(
100
103
 
101
104
  // Merge className
102
105
  const className = useMemo(() => {
103
- const themeClassName = theme?.components?.[component]?.className || '';
106
+ const themeClassName = (theme as any)?.components?.[component]?.className || '';
104
107
  const propClassName = props.className || '';
105
108
  return [themeClassName, propClassName].filter(Boolean).join(' ');
106
109
  }, [theme, component, props.className]);
@@ -136,7 +139,7 @@ export function useComponentDefaultProps<T extends ComponentName>(
136
139
  const { theme } = useTheme();
137
140
 
138
141
  return useMemo(() => {
139
- return theme?.components?.[component]?.defaultProps || {};
142
+ return (theme as any)?.components?.[component]?.defaultProps || {};
140
143
  }, [theme, component]);
141
144
  }
142
145
 
@@ -152,13 +155,6 @@ export function useMergedProps<T extends Record<string, any>>(
152
155
  }, [defaultProps, props]);
153
156
  }
154
157
 
155
- /**
156
- * Utility to create className from parts
157
- */
158
- export function mergeClassNames(...classNames: Array<string | undefined | null | false>): string {
159
- return classNames.filter(Boolean).join(' ');
160
- }
161
-
162
158
  /**
163
159
  * Utility to apply CSS variables to style object
164
160
  */
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Performance Monitoring Hook
3
+ *
4
+ * Tracks component render times and re-render counts
5
+ * for performance analysis and optimization
6
+ */
7
+
8
+ import { useEffect, useRef } from 'react';
9
+
10
+ export interface PerformanceMetrics {
11
+ /**
12
+ * Component name
13
+ */
14
+ componentName: string;
15
+ /**
16
+ * Number of renders
17
+ */
18
+ renderCount: number;
19
+ /**
20
+ * Average render time in milliseconds
21
+ */
22
+ averageRenderTime: number;
23
+ /**
24
+ * Total render time in milliseconds
25
+ */
26
+ totalRenderTime: number;
27
+ /**
28
+ * Maximum render time in milliseconds
29
+ */
30
+ maxRenderTime: number;
31
+ /**
32
+ * Minimum render time in milliseconds
33
+ */
34
+ minRenderTime: number;
35
+ }
36
+
37
+ /**
38
+ * Options for performance monitoring
39
+ */
40
+ export interface UsePerformanceMonitorOptions {
41
+ /**
42
+ * Component name to track
43
+ */
44
+ componentName: string;
45
+ /**
46
+ * Whether to log metrics to console (development only)
47
+ */
48
+ logToConsole?: boolean;
49
+ /**
50
+ * Threshold in milliseconds to warn about slow renders
51
+ */
52
+ warnThreshold?: number;
53
+ /**
54
+ * Callback to report metrics (e.g., to analytics)
55
+ */
56
+ onMetrics?: (metrics: PerformanceMetrics) => void;
57
+ }
58
+
59
+ /**
60
+ * Hook to monitor component performance
61
+ *
62
+ * @param options - Performance monitoring options
63
+ * @returns Performance metrics
64
+ *
65
+ * @example
66
+ * ```tsx
67
+ * function MyComponent() {
68
+ * usePerformanceMonitor({
69
+ * componentName: 'MyComponent',
70
+ * warnThreshold: 16, // Warn if render takes > 16ms (1 frame)
71
+ * });
72
+ *
73
+ * return <div>Content</div>;
74
+ * }
75
+ * ```
76
+ */
77
+ export function usePerformanceMonitor(options: UsePerformanceMonitorOptions) {
78
+ const {
79
+ componentName,
80
+ logToConsole = process.env.NODE_ENV === 'development',
81
+ warnThreshold = 16,
82
+ onMetrics,
83
+ } = options;
84
+
85
+ const metricsRef = useRef<PerformanceMetrics>({
86
+ componentName,
87
+ renderCount: 0,
88
+ averageRenderTime: 0,
89
+ totalRenderTime: 0,
90
+ maxRenderTime: 0,
91
+ minRenderTime: Infinity,
92
+ });
93
+
94
+ const renderStartRef = useRef<number>(0);
95
+
96
+ useEffect(() => {
97
+ // Start timing the render
98
+ renderStartRef.current = performance.now();
99
+ });
100
+
101
+ useEffect(() => {
102
+ // Calculate render time
103
+ const renderTime = performance.now() - renderStartRef.current;
104
+ const metrics = metricsRef.current;
105
+
106
+ // Update metrics
107
+ metrics.renderCount += 1;
108
+ metrics.totalRenderTime += renderTime;
109
+ metrics.averageRenderTime = metrics.totalRenderTime / metrics.renderCount;
110
+ metrics.maxRenderTime = Math.max(metrics.maxRenderTime, renderTime);
111
+ metrics.minRenderTime = Math.min(metrics.minRenderTime, renderTime);
112
+
113
+ // Warn if render is slow
114
+ if (renderTime > warnThreshold && logToConsole) {
115
+ console.warn(
116
+ `[Performance] ${componentName} render took ${renderTime.toFixed(2)}ms ` +
117
+ `(threshold: ${warnThreshold}ms)`
118
+ );
119
+ }
120
+
121
+ // Log metrics in development
122
+ if (logToConsole && metrics.renderCount % 10 === 0) {
123
+ console.log(`[Performance] ${componentName} metrics:`, {
124
+ renderCount: metrics.renderCount,
125
+ averageRenderTime: metrics.averageRenderTime.toFixed(2) + 'ms',
126
+ maxRenderTime: metrics.maxRenderTime.toFixed(2) + 'ms',
127
+ minRenderTime: metrics.minRenderTime.toFixed(2) + 'ms',
128
+ });
129
+ }
130
+
131
+ // Report metrics via callback
132
+ if (onMetrics) {
133
+ onMetrics({ ...metrics });
134
+ }
135
+ });
136
+
137
+ return metricsRef.current;
138
+ }
139
+
140
+ /**
141
+ * Get all performance metrics for all monitored components
142
+ * (useful for debugging and analytics)
143
+ */
144
+ export function getPerformanceMetrics(): PerformanceMetrics[] {
145
+ // This would need to be implemented with a global store
146
+ // For now, this is a placeholder
147
+ return [];
148
+ }
149
+
package/src/lib/index.ts CHANGED
@@ -23,3 +23,4 @@ export * from './utils/componentUtils';
23
23
  export * from './theme';
24
24
  export * from './patterns';
25
25
  export * from './hooks';
26
+ export * from './config';
@@ -11,7 +11,7 @@ export {
11
11
  createSlotComponent,
12
12
  useSlot,
13
13
  createSlotProps,
14
- } from './slots.tsx';
14
+ } from './slots';
15
15
 
16
16
  export type {
17
17
  SlotProps,
@@ -32,4 +32,4 @@ export type {
32
32
  DropdownRootSlotProps,
33
33
  DropdownToggleSlotProps,
34
34
  DropdownMenuSlotProps,
35
- } from './slots.tsx';
35
+ } from './slots';
@@ -59,7 +59,7 @@ export function renderSlot<T>(
59
59
  // Priority 2: component
60
60
  if (slotObj.component) {
61
61
  const Component = slotObj.component;
62
- return <Component {...props} />;
62
+ return <Component {...(props as any)} />;
63
63
  }
64
64
 
65
65
  // Priority 3: children
@@ -133,7 +133,7 @@ export function createSlotComponent<T>(
133
133
  return <Element {...(props as any)}>{children}</Element>;
134
134
  }
135
135
 
136
- const Component = defaultElement;
136
+ const Component = defaultElement as React.ComponentType<any>;
137
137
  return <Component {...slotProps}>{children}</Component>;
138
138
  };
139
139
  }
@@ -33,7 +33,7 @@ export function deepMerge<T extends Record<string, any>>(...objects: Partial<T>[
33
33
  if (!source) continue;
34
34
 
35
35
  for (const key in source) {
36
- if (!source.hasOwnProperty(key)) continue;
36
+ if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
37
37
 
38
38
  const targetValue = result[key];
39
39
  const sourceValue = source[key];
@@ -185,7 +185,6 @@ export function createThemeVariants(baseTheme: ThemeOptions): {
185
185
  ...baseTheme.palette,
186
186
  background: {
187
187
  default: '#121212',
188
- paper: '#1E1E1E',
189
188
  subtle: '#2A2A2A',
190
189
  ...baseTheme.palette?.background,
191
190
  },
@@ -304,7 +303,6 @@ export function createThemePreset(
304
303
  secondary: { main: '#FFFFFF' },
305
304
  background: {
306
305
  default: '#FFFFFF',
307
- paper: '#F5F5F5',
308
306
  subtle: '#FAFAFA',
309
307
  },
310
308
  },
@@ -319,7 +317,6 @@ export function createThemePreset(
319
317
  secondary: { main: '#FF5733' },
320
318
  background: {
321
319
  default: '#FAFAFA',
322
- paper: '#FFFFFF',
323
320
  subtle: '#F5F5F5',
324
321
  },
325
322
  },
@@ -334,7 +331,6 @@ export function createThemePreset(
334
331
  secondary: { main: '#DC004E' },
335
332
  background: {
336
333
  default: '#FFFFFF',
337
- paper: '#F5F5F5',
338
334
  subtle: '#EEEEEE',
339
335
  },
340
336
  },
@@ -349,7 +345,6 @@ export function createThemePreset(
349
345
  secondary: { main: '#4ECDC4' },
350
346
  background: {
351
347
  default: '#FFF8F0',
352
- paper: '#FFFFFF',
353
348
  subtle: '#FFF0E0',
354
349
  },
355
350
  },
@@ -11,7 +11,7 @@ export type {
11
11
  LoadedThemeConfig,
12
12
  ConfigValidationResult,
13
13
  ThemeMetadata,
14
- ThemeConfig,
14
+ AtomixConfig,
15
15
  ThemeDefinition,
16
16
  CSSThemeDefinition,
17
17
  JSThemeDefinition,
@@ -13,7 +13,9 @@ import { validateConfig } from './validator';
13
13
  import { ThemeError, ThemeErrorCode, getLogger } from '../errors';
14
14
  import {
15
15
  DEFAULT_CONFIG_PATH,
16
+ DEFAULT_ATOMIX_CONFIG_PATH,
16
17
  DEFAULT_CONFIG_RELATIVE_PATH,
18
+ DEFAULT_LEGACY_CONFIG_RELATIVE_PATH,
17
19
  DEFAULT_BASE_PATH,
18
20
  DEFAULT_STORAGE_KEY,
19
21
  DEFAULT_DATA_ATTRIBUTE,
@@ -50,7 +52,7 @@ export function loadThemeConfig(
50
52
  options: ConfigLoaderOptions = {}
51
53
  ): LoadedThemeConfig {
52
54
  const {
53
- configPath = DEFAULT_CONFIG_PATH,
55
+ configPath = DEFAULT_ATOMIX_CONFIG_PATH,
54
56
  validate = true,
55
57
  env = typeof process !== 'undefined' && process.env ? (process.env.NODE_ENV === 'production' ? 'production' : 'development') : 'development',
56
58
  } = options;
@@ -62,67 +64,99 @@ export function loadThemeConfig(
62
64
 
63
65
  // Try to load config dynamically
64
66
  let config: LoadedThemeConfig;
65
-
67
+
66
68
  try {
67
- // In browser/Vite environment, we can't load theme.config.ts dynamically
68
- // This is expected and we'll use the fallback config
69
+ // In browser/Vite environment, we can't load config dynamically
69
70
  if (typeof window !== 'undefined') {
70
71
  throw new Error('Theme config loading not supported in browser environment');
71
72
  }
72
-
73
- // In Node.js/bundler environment, try require (CommonJS) first
74
- // Check if we're in a browser environment first
75
- if (typeof window !== 'undefined' || typeof require === 'undefined') {
76
- throw new Error('Theme config loading not supported in browser environment');
73
+
74
+ // In ESM environments, require might be undefined.
75
+ let nodeRequire: any;
76
+ try {
77
+ nodeRequire = require;
78
+ } catch {
79
+ // require is not defined
77
80
  }
78
-
79
- // Type for theme config module
80
- interface ThemeConfigModule {
81
- default?: LoadedThemeConfig;
81
+
82
+ if (!nodeRequire) {
83
+ throw new Error('Theme config loading not supported in this environment (require is undefined)');
84
+ }
85
+
86
+ // Type for config module
87
+ interface ConfigModule {
88
+ default?: any;
82
89
  [key: string]: unknown;
83
90
  }
84
-
85
- let themeConfigModule: ThemeConfigModule;
86
-
87
- // Try require (Node.js/CommonJS) - works in Node.js environments
91
+
92
+ let configModule: ConfigModule;
93
+
94
+ // Try require (Node.js/CommonJS)
88
95
  try {
89
- // Try relative path first (for build tools)
96
+ // Try relative path first
90
97
  try {
91
- themeConfigModule = require(DEFAULT_CONFIG_RELATIVE_PATH) as ThemeConfigModule;
98
+ configModule = nodeRequire(DEFAULT_CONFIG_RELATIVE_PATH) as ConfigModule;
92
99
  } catch {
93
- // If relative path fails, try to resolve from process.cwd()
94
- const path = require('path') as typeof import('path');
95
- const fs = require('fs') as typeof import('fs');
96
- const configFilePath = path.resolve(process.cwd(), configPath);
97
-
98
- // Check if file exists
99
- if (fs.existsSync(configFilePath)) {
100
- // Delete from cache to force reload
101
- const resolvedPath = require.resolve(configFilePath);
102
- if (require.cache && require.cache[resolvedPath]) {
103
- delete require.cache[resolvedPath];
100
+ // Try fallback to legacy relative path
101
+ try {
102
+ configModule = nodeRequire(DEFAULT_LEGACY_CONFIG_RELATIVE_PATH) as ConfigModule;
103
+ } catch {
104
+ // If relative paths fail, try to resolve from process.cwd()
105
+ const path = nodeRequire('path') as typeof import('path');
106
+ const fs = nodeRequire('fs') as typeof import('fs');
107
+
108
+ let configFilePath = path.resolve(process.cwd(), configPath);
109
+
110
+ // Fallback if atomix.config.ts not found
111
+ if (!fs.existsSync(configFilePath) && configPath === DEFAULT_ATOMIX_CONFIG_PATH) {
112
+ configFilePath = path.resolve(process.cwd(), DEFAULT_CONFIG_PATH);
113
+ }
114
+
115
+ if (fs.existsSync(configFilePath)) {
116
+ const resolvedPath = nodeRequire.resolve(configFilePath);
117
+ if (nodeRequire.cache && nodeRequire.cache[resolvedPath]) {
118
+ delete nodeRequire.cache[resolvedPath];
119
+ }
120
+ configModule = nodeRequire(configFilePath) as ConfigModule;
121
+ } else {
122
+ throw new Error(`Config file not found: ${configFilePath}`);
104
123
  }
105
- themeConfigModule = require(configFilePath) as ThemeConfigModule;
106
- } else {
107
- throw new Error(`Config file not found: ${configFilePath}`);
108
124
  }
109
125
  }
110
126
  } catch (requireError) {
111
- // If require fails, throw to fall through to error handling
112
- const errorMessage = requireError instanceof Error
113
- ? requireError.message
127
+ const errorMessage = requireError instanceof Error
128
+ ? requireError.message
114
129
  : String(requireError);
115
130
  throw new ThemeError(
116
- `Cannot load theme config: ${errorMessage}`,
131
+ `Cannot load config: ${errorMessage}`,
117
132
  ThemeErrorCode.CONFIG_LOAD_FAILED,
118
133
  { configPath, error: errorMessage }
119
134
  );
120
135
  }
121
-
122
- const rawConfig = (themeConfigModule.default || themeConfigModule) as LoadedThemeConfig;
136
+
137
+ const rawConfig = configModule.default || configModule;
138
+
139
+ // Handle new AtomixConfig structure vs legacy ThemeConfig
140
+ let processedConfig: any;
141
+ if (rawConfig.theme && (rawConfig.theme.themes || rawConfig.theme.tokens || rawConfig.theme.extend)) {
142
+ // New AtomixConfig structure
143
+ processedConfig = {
144
+ themes: rawConfig.theme.themes || {},
145
+ build: rawConfig.build || {},
146
+ runtime: rawConfig.runtime || {},
147
+ integration: rawConfig.integration || {},
148
+ dependencies: rawConfig.dependencies || {},
149
+ // Store tokens for generator
150
+ __tokens: rawConfig.theme.tokens,
151
+ __extend: rawConfig.theme.extend,
152
+ };
153
+ } else {
154
+ // Legacy ThemeConfig structure
155
+ processedConfig = { ...rawConfig };
156
+ }
123
157
 
124
158
  // Apply environment-specific overrides
125
- const processedConfig = applyEnvOverrides(rawConfig, env);
159
+ processedConfig = applyEnvOverrides(processedConfig, env);
126
160
 
127
161
  // Validate if requested
128
162
  let validationResult: ConfigValidationResult | null = null;
@@ -143,7 +177,7 @@ export function loadThemeConfig(
143
177
  configPath,
144
178
  error: errorMessage,
145
179
  });
146
-
180
+
147
181
  config = {
148
182
  themes: {},
149
183
  build: {