@shohojdhara/atomix 0.3.14 → 0.4.0

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 (343) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build-tools/EXAMPLES.md +372 -0
  3. package/build-tools/README.md +242 -0
  4. package/build-tools/__tests__/error-handler.test.js +230 -0
  5. package/build-tools/__tests__/index.test.js +141 -0
  6. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  7. package/build-tools/__tests__/utils.test.js +161 -0
  8. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  9. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  10. package/build-tools/error-handler.js +308 -0
  11. package/build-tools/index.d.ts +44 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +50 -0
  14. package/build-tools/rollup-plugin.js +236 -0
  15. package/build-tools/types.d.ts +163 -0
  16. package/build-tools/utils.js +203 -0
  17. package/build-tools/vite-plugin.js +161 -0
  18. package/build-tools/webpack-loader.js +123 -0
  19. package/dist/atomix.css +21044 -2618
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +77 -3
  22. package/dist/atomix.min.css.map +1 -1
  23. package/dist/build-tools/EXAMPLES.md +372 -0
  24. package/dist/build-tools/README.md +242 -0
  25. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  26. package/dist/build-tools/__tests__/index.test.js +141 -0
  27. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  28. package/dist/build-tools/__tests__/utils.test.js +161 -0
  29. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  30. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  31. package/dist/build-tools/error-handler.js +308 -0
  32. package/dist/build-tools/index.d.ts +44 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +50 -0
  35. package/dist/build-tools/rollup-plugin.js +236 -0
  36. package/dist/build-tools/types.d.ts +163 -0
  37. package/dist/build-tools/utils.js +203 -0
  38. package/dist/build-tools/vite-plugin.js +161 -0
  39. package/dist/build-tools/webpack-loader.js +123 -0
  40. package/dist/charts.d.ts +1 -1
  41. package/dist/charts.js +86 -57
  42. package/dist/charts.js.map +1 -1
  43. package/dist/core.d.ts +1 -1
  44. package/dist/core.js +136 -112
  45. package/dist/core.js.map +1 -1
  46. package/dist/forms.d.ts +2 -5
  47. package/dist/forms.js +140 -128
  48. package/dist/forms.js.map +1 -1
  49. package/dist/heavy.d.ts +1 -1
  50. package/dist/heavy.js +136 -112
  51. package/dist/heavy.js.map +1 -1
  52. package/dist/index.d.ts +152 -78
  53. package/dist/index.esm.js +346 -340
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +359 -353
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.min.js +1 -1
  58. package/dist/index.min.js.map +1 -1
  59. package/dist/layout.js.map +1 -1
  60. package/dist/theme.d.ts +9 -9
  61. package/dist/theme.js.map +1 -1
  62. package/package.json +23 -8
  63. package/scripts/atomix-cli.js +170 -73
  64. package/scripts/cli/__tests__/README.md +81 -0
  65. package/scripts/cli/__tests__/basic.test.js +115 -0
  66. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  67. package/scripts/cli/__tests__/integration.test.js +327 -0
  68. package/scripts/cli/__tests__/test-setup.js +133 -0
  69. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  70. package/scripts/cli/__tests__/utils.test.js +161 -0
  71. package/scripts/cli/component-generator.js +253 -299
  72. package/scripts/cli/dependency-checker.js +355 -0
  73. package/scripts/cli/interactive-init.js +46 -5
  74. package/scripts/cli/template-manager.js +0 -2
  75. package/scripts/cli/templates/common-templates.js +636 -0
  76. package/scripts/cli/templates/composable-templates.js +148 -126
  77. package/scripts/cli/templates/index.js +23 -16
  78. package/scripts/cli/templates/project-templates.js +151 -23
  79. package/scripts/cli/templates/react-templates.js +280 -210
  80. package/scripts/cli/templates/scss-templates.js +90 -91
  81. package/scripts/cli/templates/testing-templates.js +206 -27
  82. package/scripts/cli/templates/testing-utils.js +278 -0
  83. package/scripts/cli/templates/types-templates.js +70 -56
  84. package/scripts/cli/theme-bridge.js +8 -2
  85. package/scripts/cli/token-manager.js +318 -206
  86. package/scripts/cli/utils.js +0 -1
  87. package/src/components/Accordion/Accordion.stories.tsx +358 -850
  88. package/src/components/Accordion/Accordion.test.tsx +70 -50
  89. package/src/components/Accordion/Accordion.tsx +99 -94
  90. package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
  91. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  92. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  93. package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
  94. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  95. package/src/components/AtomixGlass/glass-utils.ts +6 -5
  96. package/src/components/AtomixGlass/shader-utils.ts +133 -52
  97. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  98. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  99. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  100. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  101. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  102. package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -36
  103. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
  104. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  105. package/src/components/Avatar/Avatar.stories.tsx +195 -0
  106. package/src/components/Avatar/Avatar.tsx +58 -56
  107. package/src/components/Badge/Badge.stories.tsx +122 -352
  108. package/src/components/Badge/Badge.test.tsx +41 -41
  109. package/src/components/Badge/Badge.tsx +64 -62
  110. package/src/components/Block/Block.stories.tsx +30 -11
  111. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
  112. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
  113. package/src/components/Button/Button.stories.tsx +454 -1126
  114. package/src/components/Button/Button.test.tsx +123 -0
  115. package/src/components/Button/Button.tsx +88 -60
  116. package/src/components/Button/ButtonGroup.stories.tsx +376 -215
  117. package/src/components/Button/ButtonGroup.tsx +4 -15
  118. package/src/components/Callout/Callout.stories.tsx +316 -568
  119. package/src/components/Card/Card.stories.tsx +292 -81
  120. package/src/components/Card/Card.tsx +30 -14
  121. package/src/components/Chart/AreaChart.tsx +1 -1
  122. package/src/components/Chart/CandlestickChart.tsx +23 -16
  123. package/src/components/Chart/Chart.stories.tsx +153 -16
  124. package/src/components/Chart/Chart.tsx +40 -44
  125. package/src/components/Chart/ChartRenderer.tsx +39 -12
  126. package/src/components/Chart/ChartToolbar.tsx +21 -5
  127. package/src/components/Chart/DonutChart.tsx +1 -1
  128. package/src/components/Chart/FunnelChart.tsx +4 -1
  129. package/src/components/Chart/GaugeChart.tsx +3 -1
  130. package/src/components/Chart/HeatmapChart.tsx +50 -37
  131. package/src/components/Chart/LineChart.tsx +3 -2
  132. package/src/components/Chart/MultiAxisChart.tsx +24 -16
  133. package/src/components/Chart/RadarChart.tsx +19 -17
  134. package/src/components/Chart/ScatterChart.tsx +29 -21
  135. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
  136. package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
  137. package/src/components/Countdown/Countdown.stories.tsx +114 -7
  138. package/src/components/DataTable/DataTable.stories.tsx +349 -144
  139. package/src/components/DataTable/DataTable.test.tsx +26 -148
  140. package/src/components/DataTable/DataTable.tsx +485 -456
  141. package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
  142. package/src/components/DatePicker/DatePicker.tsx +31 -26
  143. package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
  144. package/src/components/Dropdown/Dropdown.tsx +313 -299
  145. package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
  146. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  147. package/src/components/Footer/Footer.stories.tsx +396 -327
  148. package/src/components/Footer/Footer.tsx +130 -128
  149. package/src/components/Footer/FooterLink.tsx +2 -2
  150. package/src/components/Form/Checkbox.stories.tsx +140 -6
  151. package/src/components/Form/Checkbox.test.tsx +63 -0
  152. package/src/components/Form/Checkbox.tsx +122 -78
  153. package/src/components/Form/Form.stories.tsx +110 -19
  154. package/src/components/Form/FormGroup.stories.tsx +127 -4
  155. package/src/components/Form/Input.stories.tsx +22 -39
  156. package/src/components/Form/Input.test.tsx +38 -44
  157. package/src/components/Form/Radio.stories.tsx +146 -17
  158. package/src/components/Form/Radio.tsx +68 -66
  159. package/src/components/Form/Select.stories.tsx +140 -8
  160. package/src/components/Form/Select.tsx +184 -182
  161. package/src/components/Form/Textarea.stories.tsx +149 -6
  162. package/src/components/Form/Textarea.test.tsx +27 -32
  163. package/src/components/Hero/Hero.stories.tsx +372 -38
  164. package/src/components/Hero/Hero.tsx +201 -55
  165. package/src/components/Icon/index.ts +7 -1
  166. package/src/components/List/List.stories.tsx +141 -3
  167. package/src/components/List/List.tsx +19 -23
  168. package/src/components/Modal/Modal.stories.tsx +183 -43
  169. package/src/components/Modal/Modal.tsx +130 -127
  170. package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
  171. package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
  172. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
  173. package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
  174. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
  175. package/src/components/Pagination/Pagination.stories.tsx +7 -4
  176. package/src/components/Pagination/Pagination.tsx +199 -202
  177. package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
  178. package/src/components/Popover/Popover.stories.tsx +354 -97
  179. package/src/components/Popover/Popover.tsx +41 -37
  180. package/src/components/Progress/Progress.stories.tsx +160 -7
  181. package/src/components/River/River.stories.tsx +3 -2
  182. package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
  183. package/src/components/Slider/Slider.stories.tsx +12 -4
  184. package/src/components/Spinner/Spinner.stories.tsx +104 -8
  185. package/src/components/Spinner/Spinner.test.tsx +23 -23
  186. package/src/components/Spinner/Spinner.tsx +43 -46
  187. package/src/components/Steps/Steps.stories.tsx +173 -42
  188. package/src/components/Tabs/Tabs.stories.tsx +141 -12
  189. package/src/components/Tabs/Tabs.tsx +74 -72
  190. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  191. package/src/components/Todo/Todo.stories.tsx +198 -9
  192. package/src/components/Toggle/Toggle.stories.tsx +137 -36
  193. package/src/components/Toggle/Toggle.test.tsx +65 -70
  194. package/src/components/Toggle/Toggle.tsx +4 -1
  195. package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
  196. package/src/components/Tooltip/Tooltip.tsx +104 -106
  197. package/src/components/Upload/Upload.stories.tsx +241 -150
  198. package/src/components/Upload/Upload.tsx +287 -283
  199. package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
  200. package/src/components/index.ts +13 -2
  201. package/src/layouts/Grid/Grid.stories.tsx +9 -3
  202. package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
  203. package/src/lib/README.md +2 -2
  204. package/src/lib/__tests__/theme-tools.test.ts +219 -0
  205. package/src/lib/composables/index.ts +2 -2
  206. package/src/lib/composables/shared-mouse-tracker.ts +13 -14
  207. package/src/lib/composables/useAtomixGlass.ts +126 -97
  208. package/src/lib/composables/useChartExport.ts +3 -8
  209. package/src/lib/composables/useDataTable.ts +72 -43
  210. package/src/lib/composables/useHero.ts +58 -14
  211. package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
  212. package/src/lib/composables/useInput.ts +10 -8
  213. package/src/lib/composables/useSideMenu.ts +6 -5
  214. package/src/lib/composables/useTooltip.ts +1 -2
  215. package/src/lib/composables/useVideoPlayer.ts +44 -35
  216. package/src/lib/config/index.ts +154 -154
  217. package/src/lib/constants/components.ts +9 -32
  218. package/src/lib/constants/cssVariables.ts +29 -29
  219. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
  220. package/src/lib/hooks/index.ts +1 -1
  221. package/src/lib/hooks/useComponentCustomization.ts +11 -17
  222. package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
  223. package/src/lib/patterns/__tests__/slots.test.ts +1 -1
  224. package/src/lib/patterns/index.ts +1 -1
  225. package/src/lib/patterns/slots.tsx +8 -13
  226. package/src/lib/storybook/InteractiveDemo.tsx +13 -18
  227. package/src/lib/storybook/PreviewContainer.tsx +1 -1
  228. package/src/lib/storybook/VariantsGrid.tsx +3 -7
  229. package/src/lib/storybook/index.ts +1 -1
  230. package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
  231. package/src/lib/theme/adapters/index.ts +3 -9
  232. package/src/lib/theme/adapters/themeAdapter.ts +41 -26
  233. package/src/lib/theme/config/index.ts +1 -1
  234. package/src/lib/theme/config/types.ts +2 -2
  235. package/src/lib/theme/config/validator.ts +10 -5
  236. package/src/lib/theme/constants/constants.ts +2 -2
  237. package/src/lib/theme/constants/index.ts +1 -2
  238. package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
  239. package/src/lib/theme/core/composeTheme.ts +32 -26
  240. package/src/lib/theme/core/createTheme.ts +1 -1
  241. package/src/lib/theme/core/createThemeObject.ts +308 -301
  242. package/src/lib/theme/core/index.ts +3 -3
  243. package/src/lib/theme/devtools/CLI.ts +107 -105
  244. package/src/lib/theme/devtools/Comparator.tsx +50 -32
  245. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
  246. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
  247. package/src/lib/theme/devtools/Inspector.tsx +75 -60
  248. package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
  249. package/src/lib/theme/devtools/Preview.tsx +150 -106
  250. package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
  251. package/src/lib/theme/devtools/index.ts +3 -9
  252. package/src/lib/theme/devtools/useHistory.ts +23 -21
  253. package/src/lib/theme/errors/errors.ts +12 -11
  254. package/src/lib/theme/errors/index.ts +2 -7
  255. package/src/lib/theme/generators/generateCSS.ts +9 -13
  256. package/src/lib/theme/generators/generateCSSNested.ts +1 -6
  257. package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
  258. package/src/lib/theme/generators/index.ts +1 -4
  259. package/src/lib/theme/i18n/index.ts +1 -1
  260. package/src/lib/theme/i18n/rtl.ts +13 -13
  261. package/src/lib/theme/index.ts +7 -16
  262. package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
  263. package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
  264. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
  265. package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
  266. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
  267. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
  268. package/src/lib/theme/runtime/index.ts +2 -5
  269. package/src/lib/theme/runtime/useTheme.ts +18 -18
  270. package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
  271. package/src/lib/theme/test/testTheme.ts +15 -16
  272. package/src/lib/theme/tokens/index.ts +2 -7
  273. package/src/lib/theme/tokens/tokens.ts +25 -24
  274. package/src/lib/theme/types.ts +428 -411
  275. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
  276. package/src/lib/theme/utils/componentTheming.ts +18 -18
  277. package/src/lib/theme/utils/domUtils.ts +277 -289
  278. package/src/lib/theme/utils/index.ts +1 -2
  279. package/src/lib/theme/utils/injectCSS.ts +10 -14
  280. package/src/lib/theme/utils/naming.ts +20 -16
  281. package/src/lib/theme/utils/themeHelpers.ts +10 -12
  282. package/src/lib/theme/utils/themeUtils.ts +85 -86
  283. package/src/lib/theme/utils/themeValidation.ts +82 -33
  284. package/src/lib/theme-tools.ts +8 -6
  285. package/src/lib/types/components.ts +172 -71
  286. package/src/lib/types/partProps.ts +1 -1
  287. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  288. package/src/lib/utils/componentUtils.ts +8 -12
  289. package/src/lib/utils/csv.ts +19 -0
  290. package/src/lib/utils/dataTableExport.ts +2 -15
  291. package/src/lib/utils/fontPreloader.ts +10 -19
  292. package/src/lib/utils/icons.ts +4 -1
  293. package/src/lib/utils/index.ts +2 -6
  294. package/src/lib/utils/memoryMonitor.ts +10 -8
  295. package/src/lib/utils/themeNaming.ts +2 -2
  296. package/src/styles/01-settings/_index.scss +1 -1
  297. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  298. package/src/styles/01-settings/_settings.colors.scss +11 -11
  299. package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
  300. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  301. package/src/styles/01-settings/_settings.spacing.scss +3 -4
  302. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  303. package/src/styles/01-settings/_settings.typography.scss +4 -4
  304. package/src/styles/02-tools/_tools.button.scss +51 -21
  305. package/src/styles/02-tools/_tools.utility-api.scss +38 -12
  306. package/src/styles/03-generic/_generic.root.scss +4 -3
  307. package/src/styles/06-components/_components.accordion.scss +56 -14
  308. package/src/styles/06-components/_components.atomix-glass.scss +13 -9
  309. package/src/styles/06-components/_components.button.scss +16 -4
  310. package/src/styles/06-components/_components.callout.scss +27 -21
  311. package/src/styles/06-components/_components.card.scss +5 -14
  312. package/src/styles/06-components/_components.chart.scss +22 -19
  313. package/src/styles/06-components/_components.checkbox.scss +25 -17
  314. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
  315. package/src/styles/06-components/_components.edge-panel.scss +9 -2
  316. package/src/styles/06-components/_components.footer.scss +1 -1
  317. package/src/styles/06-components/_components.side-menu.scss +5 -5
  318. package/src/styles/06-components/_components.toggle.scss +18 -0
  319. package/src/styles/06-components/_index.scss +1 -1
  320. package/src/styles/06-components/old.chart.styles.scss +0 -2
  321. package/src/styles/99-utilities/_index.scss +2 -0
  322. package/src/styles/99-utilities/_utilities.border.scss +69 -27
  323. package/src/styles/99-utilities/_utilities.display.scss +1 -1
  324. package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
  325. package/src/styles/99-utilities/_utilities.position.scss +16 -9
  326. package/src/styles/99-utilities/_utilities.scss +2 -0
  327. package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
  328. package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
  329. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  330. package/src/styles/99-utilities/_utilities.text.scss +67 -46
  331. package/themes/dark-complementary/README.md +98 -0
  332. package/themes/dark-complementary/index.scss +158 -0
  333. package/themes/default-light/README.md +81 -0
  334. package/themes/default-light/index.scss +154 -0
  335. package/themes/high-contrast/README.md +105 -0
  336. package/themes/high-contrast/index.scss +172 -0
  337. package/themes/test-theme/README.md +38 -0
  338. package/themes/test-theme/index.scss +47 -0
  339. package/scripts/cli/templates-original-backup.js +0 -1655
  340. package/scripts/cli/templates_backup.js +0 -684
  341. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  342. package/src/lib/composables/useButton.ts +0 -93
  343. package/src/lib/composables/useCheckbox.ts +0 -70
@@ -0,0 +1,308 @@
1
+ /**
2
+ * @fileoverview Error handling utilities for Atomix build tools
3
+ */
4
+
5
+ /**
6
+ * Custom error class for Atomix build tool errors
7
+ * @extends Error
8
+ */
9
+ export class AtomixBuildError extends Error {
10
+ /**
11
+ * @param {string} message - Error message
12
+ * @param {string} code - Error code
13
+ * @param {Object} [details] - Additional error details
14
+ * @param {string[]} [suggestions] - Suggested solutions
15
+ */
16
+ constructor(message, code, details = {}, suggestions = []) {
17
+ super(message);
18
+ this.name = 'AtomixBuildError';
19
+ this.code = code;
20
+ this.details = details;
21
+ this.suggestions = suggestions;
22
+ this.timestamp = new Date().toISOString();
23
+ }
24
+
25
+ /**
26
+ * Get formatted error message
27
+ * @returns {string} Formatted error message
28
+ */
29
+ toString() {
30
+ let msg = `[AtomixBuildError:${this.code}] ${this.message}`;
31
+
32
+ if (this.details && Object.keys(this.details).length > 0) {
33
+ msg += `\nDetails: ${JSON.stringify(this.details, null, 2)}`;
34
+ }
35
+
36
+ if (this.suggestions && this.suggestions.length > 0) {
37
+ msg += `\nSuggestions:\n${this.suggestions.map((s, i) => ` ${i + 1}. ${s}`).join('\n')}`;
38
+ }
39
+
40
+ return msg;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Validation utilities
46
+ */
47
+ export class Validator {
48
+ /**
49
+ * Validate theme name
50
+ * @param {string} theme - Theme name to validate
51
+ * @param {string[]} [availableThemes] - List of available themes
52
+ * @throws {AtomixBuildError} If validation fails
53
+ */
54
+ static validateTheme(theme, availableThemes = []) {
55
+ if (typeof theme !== 'string') {
56
+ throw new AtomixBuildError(
57
+ 'Theme must be a string',
58
+ 'INVALID_THEME_TYPE',
59
+ { theme, type: typeof theme },
60
+ ['Provide a string value for theme option']
61
+ );
62
+ }
63
+
64
+ if (theme.trim() === '') {
65
+ throw new AtomixBuildError(
66
+ 'Theme cannot be empty',
67
+ 'EMPTY_THEME',
68
+ { theme },
69
+ ['Provide a valid theme name']
70
+ );
71
+ }
72
+
73
+ if (availableThemes.length > 0 && !availableThemes.includes(theme)) {
74
+ throw new AtomixBuildError(
75
+ `Theme '${theme}' not found`,
76
+ 'THEME_NOT_FOUND',
77
+ { theme, availableThemes },
78
+ [
79
+ `Available themes: ${availableThemes.join(', ')}`,
80
+ 'Check if the theme name is spelled correctly',
81
+ 'Verify the theme exists in your Atomix installation'
82
+ ]
83
+ );
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Validate components array
89
+ * @param {any} components - Components to validate
90
+ * @param {string[]} [availableComponents] - List of available components
91
+ * @throws {AtomixBuildError} If validation fails
92
+ */
93
+ static validateComponents(components, availableComponents = []) {
94
+ if (!Array.isArray(components)) {
95
+ throw new AtomixBuildError(
96
+ 'Components must be an array',
97
+ 'INVALID_COMPONENTS_TYPE',
98
+ { components, type: typeof components },
99
+ ['Provide an array of component names']
100
+ );
101
+ }
102
+
103
+ const invalidItems = components.filter(item => typeof item !== 'string');
104
+ if (invalidItems.length > 0) {
105
+ throw new AtomixBuildError(
106
+ 'All component names must be strings',
107
+ 'INVALID_COMPONENT_NAMES',
108
+ { invalidItems },
109
+ ['Ensure all component names are string values']
110
+ );
111
+ }
112
+
113
+ if (availableComponents.length > 0) {
114
+ const missingComponents = components.filter(comp => !availableComponents.includes(comp));
115
+ if (missingComponents.length > 0) {
116
+ throw new AtomixBuildError(
117
+ `Some requested components not found: ${missingComponents.join(', ')}`,
118
+ 'COMPONENTS_NOT_FOUND',
119
+ { missingComponents, availableComponents },
120
+ [
121
+ `Available components: ${availableComponents.slice(0, 10).join(', ')}${availableComponents.length > 10 ? '...' : ''}`,
122
+ 'Check component names for typos',
123
+ 'Verify components exist in your Atomix version'
124
+ ]
125
+ );
126
+ }
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Validate boolean options
132
+ * @param {any} value - Value to validate
133
+ * @param {string} optionName - Name of the option
134
+ * @throws {AtomixBuildError} If validation fails
135
+ */
136
+ static validateBoolean(value, optionName) {
137
+ if (typeof value !== 'boolean') {
138
+ throw new AtomixBuildError(
139
+ `${optionName} must be a boolean`,
140
+ 'INVALID_BOOLEAN_OPTION',
141
+ { optionName, value, type: typeof value },
142
+ [`Provide true or false for ${optionName} option`]
143
+ );
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Validate string options
149
+ * @param {any} value - Value to validate
150
+ * @param {string} optionName - Name of the option
151
+ * @param {boolean} [allowEmpty=false] - Whether empty strings are allowed
152
+ * @throws {AtomixBuildError} If validation fails
153
+ */
154
+ static validateString(value, optionName, allowEmpty = false) {
155
+ if (typeof value !== 'string') {
156
+ throw new AtomixBuildError(
157
+ `${optionName} must be a string`,
158
+ 'INVALID_STRING_OPTION',
159
+ { optionName, value, type: typeof value },
160
+ [`Provide a string value for ${optionName} option`]
161
+ );
162
+ }
163
+
164
+ if (!allowEmpty && value.trim() === '') {
165
+ throw new AtomixBuildError(
166
+ `${optionName} cannot be empty`,
167
+ 'EMPTY_STRING_OPTION',
168
+ { optionName, value },
169
+ [`Provide a non-empty string for ${optionName} option`]
170
+ );
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Validate plugin options object
176
+ * @param {Object} options - Options to validate
177
+ * @param {string[]} [availableThemes] - Available themes
178
+ * @param {string[]} [availableComponents] - Available components
179
+ * @throws {AtomixBuildError} If validation fails
180
+ */
181
+ static validateOptions(options, availableThemes = [], availableComponents = []) {
182
+ if (typeof options !== 'object' || options === null) {
183
+ throw new AtomixBuildError(
184
+ 'Options must be an object',
185
+ 'INVALID_OPTIONS_OBJECT',
186
+ { options, type: typeof options },
187
+ ['Provide a valid options object']
188
+ );
189
+ }
190
+
191
+ // Validate individual options
192
+ if ('theme' in options) {
193
+ this.validateTheme(options.theme, availableThemes);
194
+ }
195
+
196
+ if ('components' in options) {
197
+ this.validateComponents(options.components, availableComponents);
198
+ }
199
+
200
+ if ('optimizeCss' in options) {
201
+ this.validateBoolean(options.optimizeCss, 'optimizeCss');
202
+ }
203
+
204
+ if ('includeAtoms' in options) {
205
+ this.validateBoolean(options.includeAtoms, 'includeAtoms');
206
+ }
207
+
208
+ if ('verbose' in options) {
209
+ this.validateBoolean(options.verbose, 'verbose');
210
+ }
211
+
212
+ if ('optimize' in options) {
213
+ this.validateBoolean(options.optimize, 'optimize');
214
+ }
215
+
216
+ // Check for unknown options
217
+ const knownOptions = ['theme', 'components', 'optimizeCss', 'includeAtoms', 'verbose', 'optimize'];
218
+ const unknownOptions = Object.keys(options).filter(key => !knownOptions.includes(key));
219
+
220
+ if (unknownOptions.length > 0) {
221
+ console.warn(`[AtomixBuildWarning] Unknown options provided: ${unknownOptions.join(', ')}`);
222
+ }
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Error handling utilities
228
+ */
229
+ export class ErrorHandler {
230
+ /**
231
+ * Wrap a function with error handling
232
+ * @param {Function} fn - Function to wrap
233
+ * @param {string} context - Context/error prefix
234
+ * @returns {Function} Wrapped function
235
+ */
236
+ static withErrorHandling(fn, context) {
237
+ return (...args) => {
238
+ try {
239
+ return fn(...args);
240
+ } catch (error) {
241
+ if (error instanceof AtomixBuildError) {
242
+ throw error;
243
+ }
244
+
245
+ throw new AtomixBuildError(
246
+ `${context}: ${error.message}`,
247
+ 'UNEXPECTED_ERROR',
248
+ { originalError: error.message, stack: error.stack },
249
+ ['Check the error details above', 'Review your configuration', 'Consult the documentation']
250
+ );
251
+ }
252
+ };
253
+ }
254
+
255
+ /**
256
+ * Create a safe validator function
257
+ * @param {Function} validator - Validator function
258
+ * @param {string} context - Context for error messages
259
+ * @returns {Function} Safe validator function
260
+ */
261
+ static createSafeValidator(validator, context) {
262
+ return (...args) => {
263
+ try {
264
+ return validator(...args);
265
+ } catch (error) {
266
+ if (error instanceof AtomixBuildError) {
267
+ throw error;
268
+ }
269
+
270
+ throw new AtomixBuildError(
271
+ `${context}: Validation failed`,
272
+ 'VALIDATION_ERROR',
273
+ { args, originalError: error.message },
274
+ ['Check the validation rules', 'Review your input data']
275
+ );
276
+ }
277
+ };
278
+ }
279
+
280
+ /**
281
+ * Log error with proper formatting
282
+ * @param {Error|AtomixBuildError} error - Error to log
283
+ * @param {boolean} [verbose=false] - Whether to show verbose output
284
+ */
285
+ static logError(error, verbose = false) {
286
+ if (error instanceof AtomixBuildError) {
287
+ console.error(error.toString());
288
+ } else {
289
+ console.error(`[Error] ${error.message}`);
290
+ if (verbose && error.stack) {
291
+ console.error('Stack trace:', error.stack);
292
+ }
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Get error code from error
298
+ * @param {Error} error - Error object
299
+ * @returns {string|null} Error code or null
300
+ */
301
+ static getErrorCode(error) {
302
+ if (error instanceof AtomixBuildError) {
303
+ return error.code;
304
+ }
305
+ return null;
306
+ }
307
+ }
308
+
@@ -0,0 +1,44 @@
1
+ import {
2
+ AtomixVitePluginOptions,
3
+ AtomixRollupPluginOptions,
4
+ AtomixLoaderOptions,
5
+ AtomixBuildToolOptions,
6
+ BuildTool,
7
+ } from './types.js';
8
+
9
+ export * from './types.js';
10
+
11
+ /**
12
+ * Atomix Vite Plugin
13
+ */
14
+ export function vitePlugin(options?: AtomixVitePluginOptions): any;
15
+
16
+ /**
17
+ * Atomix Webpack Loader
18
+ */
19
+ export function webpackLoader(source: string): string;
20
+
21
+ /**
22
+ * Atomix Rollup Plugin
23
+ */
24
+ export function rollupPlugin(options?: AtomixRollupPluginOptions): any;
25
+
26
+ /**
27
+ * Gets the appropriate plugin/loader based on the detected build tool
28
+ */
29
+ export function getIntegration(buildTool: BuildTool, options?: AtomixBuildToolOptions): any;
30
+
31
+ /**
32
+ * Detects the build tool used in the current project
33
+ */
34
+ export function detectBuildTool(): BuildTool;
35
+
36
+ /**
37
+ * Initialize the appropriate integration based on detected build tool
38
+ */
39
+ export function initAutoIntegration(options?: AtomixBuildToolOptions): any;
40
+
41
+ /**
42
+ * Get available themes
43
+ */
44
+ export function getAvailableThemes(atomixRoot?: string): string[];
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @fileoverview Entry point for Atomix Build Tool Integrations
3
+ * Provides a unified way to access build tool plugins/loaders
4
+ * @module @shohojdhara/atomix/build-tools
5
+ */
6
+
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+
10
+ /** @typedef {import('./types').AtomixBuildToolOptions} AtomixBuildToolOptions */
11
+ /** @typedef {import('./types').BuildTool} BuildTool */
12
+
13
+ import vitePluginFn from './vite-plugin.js';
14
+ import webpackLoaderFn from './webpack-loader.js';
15
+ import rollupPluginFn from './rollup-plugin.js';
16
+
17
+ // Named re-exports
18
+ export { default as vitePlugin } from './vite-plugin.js';
19
+ export { default as webpackLoader } from './webpack-loader.js';
20
+ export { default as rollupPlugin } from './rollup-plugin.js';
21
+
22
+ /**
23
+ * Gets the appropriate plugin/loader based on the detected build tool
24
+ * @param {BuildTool} buildTool - Name of the build tool ('vite', 'webpack', 'rollup')
25
+ * @param {AtomixBuildToolOptions} [options={}] - Options to pass to the plugin/loader
26
+ * @returns {Function|null} The appropriate plugin/loader function or null if not found
27
+ */
28
+ export function getIntegration(buildTool, options = {}) {
29
+ switch (buildTool?.toLowerCase()) {
30
+ case 'vite':
31
+ return vitePluginFn(options);
32
+ case 'webpack':
33
+ // Webpack loaders work differently — return the loader function itself
34
+ return webpackLoaderFn;
35
+ case 'rollup':
36
+ return rollupPluginFn(options);
37
+ default:
38
+ console.warn(`[Atomix Build Tools] Unsupported build tool: ${buildTool}`);
39
+ return null;
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Detects the build tool used in the current project
45
+ * @returns {BuildTool} Detected build tool or null if not found
46
+ */
47
+ export function detectBuildTool() {
48
+ try {
49
+ const pkgPath = path.join(process.cwd(), 'package.json');
50
+ if (!fs.existsSync(pkgPath)) {
51
+ return null;
52
+ }
53
+
54
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
55
+ const allDeps = {
56
+ ...pkg.dependencies,
57
+ ...pkg.devDependencies,
58
+ };
59
+
60
+ if (allDeps.vite) return 'vite';
61
+ if (allDeps.webpack) return 'webpack';
62
+ if (allDeps.rollup) return 'rollup';
63
+
64
+ return null;
65
+ } catch (e) {
66
+ console.error('[Atomix Build Tools] Error detecting build tool:', e.message);
67
+ return null;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Initialize the appropriate integration based on detected build tool
73
+ * @param {AtomixBuildToolOptions} [options={}] - Options to pass to the plugin/loader
74
+ * @returns {Function|null} The appropriate plugin/loader function or null if not found
75
+ */
76
+ export function initAutoIntegration(options = {}) {
77
+ const buildTool = detectBuildTool();
78
+ if (!buildTool) {
79
+ console.warn('[Atomix Build Tools] Could not detect build tool, please use specific integration');
80
+ return null;
81
+ }
82
+
83
+ console.log(`[Atomix Build Tools] Detected build tool: ${buildTool}, initializing integration...`);
84
+ return getIntegration(buildTool, options);
85
+ }
86
+
87
+ // Export helpers
88
+ export { getAvailableThemes } from './utils.js';
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@shohojdhara/atomix-build-tools",
3
+ "version": "1.0.0",
4
+ "description": "Build tool integrations for the Atomix design system",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./index.d.ts",
11
+ "import": "./index.js",
12
+ "default": "./index.js"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "test": "vitest run __tests__/"
17
+ },
18
+ "peerDependencies": {
19
+ "vite": "^4.0.0 || ^5.0.0 || ^6.0.0",
20
+ "webpack": "^5.0.0",
21
+ "rollup": "^3.0.0 || ^4.0.0"
22
+ },
23
+ "peerDependenciesMeta": {
24
+ "vite": { "optional": true },
25
+ "webpack": { "optional": true },
26
+ "rollup": { "optional": true }
27
+ },
28
+ "keywords": [
29
+ "atomix",
30
+ "design-system",
31
+ "vite",
32
+ "webpack",
33
+ "rollup",
34
+ "plugin",
35
+ "loader",
36
+ "ui",
37
+ "framework"
38
+ ],
39
+ "author": "Limon Khan",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/Shohojdhara/atomix.git",
44
+ "directory": "build-tools"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/Shohojdhara/atomix/issues"
48
+ },
49
+ "homepage": "https://github.com/Shohojdhara/atomix#readme"
50
+ }