@shohojdhara/atomix 0.3.13 → 0.3.15

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 (249) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -0
  3. package/build-tools/EXAMPLES.md +372 -0
  4. package/build-tools/README.md +242 -0
  5. package/build-tools/__tests__/error-handler.test.js +230 -0
  6. package/build-tools/__tests__/index.test.js +141 -0
  7. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  8. package/build-tools/__tests__/utils.test.js +161 -0
  9. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  10. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  11. package/build-tools/error-handler.js +308 -0
  12. package/build-tools/index.d.ts +43 -0
  13. package/build-tools/index.js +88 -0
  14. package/build-tools/package.json +67 -0
  15. package/build-tools/rollup-plugin.js +236 -0
  16. package/build-tools/types.d.ts +163 -0
  17. package/build-tools/utils.js +203 -0
  18. package/build-tools/vite-plugin.js +161 -0
  19. package/build-tools/webpack-loader.js +123 -0
  20. package/dist/atomix.css +298 -167
  21. package/dist/atomix.css.map +1 -1
  22. package/dist/atomix.min.css +3 -3
  23. package/dist/atomix.min.css.map +1 -1
  24. package/dist/build-tools/EXAMPLES.md +372 -0
  25. package/dist/build-tools/README.md +242 -0
  26. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  27. package/dist/build-tools/__tests__/index.test.js +141 -0
  28. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  29. package/dist/build-tools/__tests__/utils.test.js +161 -0
  30. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  31. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  32. package/dist/build-tools/error-handler.js +308 -0
  33. package/dist/build-tools/index.d.ts +43 -0
  34. package/dist/build-tools/index.js +88 -0
  35. package/dist/build-tools/package.json +67 -0
  36. package/dist/build-tools/rollup-plugin.js +236 -0
  37. package/dist/build-tools/types.d.ts +163 -0
  38. package/dist/build-tools/utils.js +203 -0
  39. package/dist/build-tools/vite-plugin.js +161 -0
  40. package/dist/build-tools/webpack-loader.js +123 -0
  41. package/dist/charts.d.ts +2 -2
  42. package/dist/charts.js +87 -58
  43. package/dist/charts.js.map +1 -1
  44. package/dist/core.d.ts +42 -12
  45. package/dist/core.js +175 -135
  46. package/dist/core.js.map +1 -1
  47. package/dist/forms.d.ts +30 -16
  48. package/dist/forms.js +146 -131
  49. package/dist/forms.js.map +1 -1
  50. package/dist/heavy.d.ts +2 -2
  51. package/dist/heavy.js +151 -118
  52. package/dist/heavy.js.map +1 -1
  53. package/dist/index.d.ts +130 -106
  54. package/dist/index.esm.js +1083 -465
  55. package/dist/index.esm.js.map +1 -1
  56. package/dist/index.js +1102 -483
  57. package/dist/index.js.map +1 -1
  58. package/dist/index.min.js +1 -1
  59. package/dist/index.min.js.map +1 -1
  60. package/dist/theme.d.ts +27 -2
  61. package/dist/theme.js +721 -108
  62. package/dist/theme.js.map +1 -1
  63. package/package.json +23 -8
  64. package/scripts/atomix-cli.js +749 -1153
  65. package/scripts/cli/__tests__/README.md +81 -0
  66. package/scripts/cli/__tests__/basic.test.js +115 -0
  67. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  68. package/scripts/cli/__tests__/integration.test.js +327 -0
  69. package/scripts/cli/__tests__/test-setup.js +133 -0
  70. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  71. package/scripts/cli/__tests__/utils.test.js +78 -118
  72. package/scripts/cli/component-generator.js +564 -0
  73. package/scripts/cli/dependency-checker.js +355 -0
  74. package/scripts/cli/documentation-sync.js +542 -0
  75. package/scripts/cli/interactive-init.js +129 -292
  76. package/scripts/cli/mappings.js +211 -0
  77. package/scripts/cli/migration-tools.js +95 -288
  78. package/scripts/cli/template-manager.js +105 -0
  79. package/scripts/cli/templates/README.md +123 -0
  80. package/scripts/cli/templates/common-templates.js +636 -0
  81. package/scripts/cli/templates/composable-templates.js +171 -0
  82. package/scripts/cli/templates/config-templates.js +126 -0
  83. package/scripts/cli/templates/index.js +102 -0
  84. package/scripts/cli/templates/project-templates.js +342 -0
  85. package/scripts/cli/templates/react-templates.js +331 -0
  86. package/scripts/cli/templates/scss-templates.js +155 -0
  87. package/scripts/cli/templates/storybook-templates.js +236 -0
  88. package/scripts/cli/templates/testing-templates.js +224 -0
  89. package/scripts/cli/templates/testing-utils.js +278 -0
  90. package/scripts/cli/templates/token-templates.js +447 -0
  91. package/scripts/cli/templates/types-templates.js +147 -0
  92. package/scripts/cli/templates.js +35 -0
  93. package/scripts/cli/theme-bridge.js +28 -16
  94. package/scripts/cli/token-manager.js +432 -247
  95. package/scripts/cli/utils.js +37 -26
  96. package/src/components/Accordion/Accordion.stories.tsx +369 -870
  97. package/src/components/Accordion/Accordion.test.tsx +57 -0
  98. package/src/components/Accordion/Accordion.tsx +4 -0
  99. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  100. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  101. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  102. package/src/components/AtomixGlass/glass-utils.ts +2 -2
  103. package/src/components/AtomixGlass/shader-utils.ts +5 -0
  104. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  105. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2965 -2861
  106. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  107. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  108. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  109. package/src/components/AtomixGlass/stories/Playground.stories.tsx +73 -59
  110. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
  111. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  112. package/src/components/Avatar/Avatar.stories.tsx +239 -27
  113. package/src/components/Badge/Badge.stories.tsx +132 -373
  114. package/src/components/Badge/Badge.test.tsx +51 -0
  115. package/src/components/Badge/Badge.tsx +20 -1
  116. package/src/components/Block/Block.stories.tsx +26 -17
  117. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
  118. package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
  119. package/src/components/Button/Button.stories.tsx +463 -1126
  120. package/src/components/Button/Button.test.tsx +107 -0
  121. package/src/components/Button/Button.tsx +50 -54
  122. package/src/components/Button/ButtonGroup.stories.tsx +373 -217
  123. package/src/components/Button/README.md +5 -0
  124. package/src/components/Callout/Callout.stories.tsx +299 -644
  125. package/src/components/Callout/Callout.test.tsx +10 -10
  126. package/src/components/Callout/Callout.tsx +7 -7
  127. package/src/components/Callout/README.md +9 -8
  128. package/src/components/Card/Card.stories.tsx +248 -68
  129. package/src/components/Card/Card.tsx +2 -2
  130. package/src/components/Chart/Chart.stories.tsx +156 -14
  131. package/src/components/Chart/Chart.tsx +1 -1
  132. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
  133. package/src/components/Countdown/Countdown.stories.tsx +115 -8
  134. package/src/components/DataTable/DataTable.stories.tsx +346 -146
  135. package/src/components/DataTable/DataTable.tsx +14 -12
  136. package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
  137. package/src/components/Dropdown/Dropdown.stories.tsx +157 -37
  138. package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
  139. package/src/components/Footer/Footer.stories.tsx +392 -328
  140. package/src/components/Form/Checkbox.stories.tsx +143 -9
  141. package/src/components/Form/Checkbox.test.tsx +63 -0
  142. package/src/components/Form/Checkbox.tsx +90 -52
  143. package/src/components/Form/Form.stories.tsx +121 -22
  144. package/src/components/Form/FormGroup.stories.tsx +128 -5
  145. package/src/components/Form/Input.stories.tsx +28 -16
  146. package/src/components/Form/Input.test.tsx +59 -0
  147. package/src/components/Form/Input.tsx +97 -95
  148. package/src/components/Form/Radio.stories.tsx +232 -97
  149. package/src/components/Form/Radio.tsx +2 -2
  150. package/src/components/Form/Select.stories.tsx +144 -12
  151. package/src/components/Form/Select.tsx +2 -2
  152. package/src/components/Form/Textarea.stories.tsx +171 -13
  153. package/src/components/Form/Textarea.test.tsx +45 -0
  154. package/src/components/Form/Textarea.tsx +88 -86
  155. package/src/components/Hero/Hero.stories.tsx +333 -32
  156. package/src/components/List/List.stories.tsx +143 -5
  157. package/src/components/Modal/Modal.stories.tsx +185 -46
  158. package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
  159. package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
  160. package/src/components/Navigation/README.md +1 -1
  161. package/src/components/Pagination/Pagination.stories.tsx +5 -2
  162. package/src/components/Pagination/Pagination.tsx +1 -1
  163. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
  164. package/src/components/Popover/Popover.stories.tsx +449 -99
  165. package/src/components/ProductReview/ProductReview.tsx +1 -1
  166. package/src/components/Progress/Progress.stories.tsx +167 -5
  167. package/src/components/Progress/Progress.tsx +46 -46
  168. package/src/components/Rating/Rating.stories.tsx +4 -4
  169. package/src/components/Rating/Rating.tsx +8 -8
  170. package/src/components/River/River.stories.tsx +1 -1
  171. package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
  172. package/src/components/Slider/Slider.stories.tsx +63 -63
  173. package/src/components/Spinner/Spinner.stories.tsx +104 -10
  174. package/src/components/Spinner/Spinner.test.tsx +35 -0
  175. package/src/components/Spinner/Spinner.tsx +9 -2
  176. package/src/components/Steps/Steps.stories.tsx +172 -43
  177. package/src/components/Tabs/Tabs.stories.tsx +136 -10
  178. package/src/components/Testimonial/Testimonial.stories.tsx +121 -4
  179. package/src/components/Todo/Todo.stories.tsx +198 -9
  180. package/src/components/Toggle/Toggle.stories.tsx +153 -43
  181. package/src/components/Toggle/Toggle.test.tsx +91 -0
  182. package/src/components/Toggle/Toggle.tsx +44 -27
  183. package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
  184. package/src/components/Tooltip/Tooltip.tsx +1 -1
  185. package/src/components/Upload/Upload.stories.tsx +113 -24
  186. package/src/layouts/Grid/Grid.stories.tsx +49 -49
  187. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
  188. package/src/lib/README.md +2 -2
  189. package/src/lib/__tests__/theme-tools.test.ts +193 -0
  190. package/src/lib/composables/index.ts +2 -2
  191. package/src/lib/composables/useAccordion.ts +12 -3
  192. package/src/lib/composables/useAtomixGlass.ts +28 -56
  193. package/src/lib/composables/useBreadcrumb.ts +2 -2
  194. package/src/lib/composables/useCallout.ts +7 -7
  195. package/src/lib/composables/useChartExport.ts +2 -7
  196. package/src/lib/composables/useDataTable.ts +46 -29
  197. package/src/lib/composables/useNavbar.ts +1 -1
  198. package/src/lib/constants/components.ts +10 -33
  199. package/src/lib/storybook/InteractiveDemo.tsx +113 -0
  200. package/src/lib/storybook/PreviewContainer.tsx +36 -0
  201. package/src/lib/storybook/VariantsGrid.tsx +21 -0
  202. package/src/lib/storybook/index.ts +3 -0
  203. package/src/lib/theme/core/createThemeObject.ts +9 -5
  204. package/src/lib/theme/devtools/CLI.ts +155 -0
  205. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
  206. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
  207. package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
  208. package/src/lib/theme/devtools/index.ts +3 -0
  209. package/src/lib/theme/errors/errors.ts +8 -0
  210. package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
  211. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
  212. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
  213. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
  214. package/src/lib/theme/utils/index.ts +1 -0
  215. package/src/lib/theme/utils/themeValidation.ts +501 -0
  216. package/src/lib/theme-tools.ts +32 -3
  217. package/src/lib/types/components.ts +82 -27
  218. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  219. package/src/lib/utils/csv.ts +17 -0
  220. package/src/lib/utils/dataTableExport.ts +1 -10
  221. package/src/lib/utils/themeNaming.ts +1 -1
  222. package/src/styles/01-settings/_index.scss +2 -1
  223. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  224. package/src/styles/01-settings/_settings.colors.scss +11 -11
  225. package/src/styles/01-settings/_settings.typography.scss +5 -5
  226. package/src/styles/02-tools/_tools.utility-api.scss +14 -0
  227. package/src/styles/06-components/_components.accordion.scss +56 -14
  228. package/src/styles/06-components/_components.callout.scss +29 -33
  229. package/src/styles/06-components/_components.checkbox.scss +23 -17
  230. package/src/styles/06-components/_index.scss +1 -1
  231. package/src/styles/99-utilities/_index.scss +2 -0
  232. package/src/styles/99-utilities/_utilities.display.scss +14 -3
  233. package/src/styles/99-utilities/_utilities.flex.scss +10 -10
  234. package/src/styles/99-utilities/_utilities.scss +3 -1
  235. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  236. package/src/styles/99-utilities/_utilities.text.scss +28 -8
  237. package/themes/dark-complementary/README.md +98 -0
  238. package/themes/dark-complementary/index.scss +158 -0
  239. package/themes/default-light/README.md +81 -0
  240. package/themes/default-light/index.scss +154 -0
  241. package/themes/high-contrast/README.md +105 -0
  242. package/themes/high-contrast/index.scss +172 -0
  243. package/themes/test-theme/README.md +38 -0
  244. package/themes/test-theme/index.scss +47 -0
  245. package/scripts/cli/__tests__/cli-commands.test.js +0 -204
  246. package/scripts/cli/__tests__/vitest.config.js +0 -26
  247. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  248. package/src/lib/composables/useButton.ts +0 -93
  249. 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,43 @@
1
+ // Import types
2
+ import type {
3
+ AtomixBuildToolOptions,
4
+ BuildTool,
5
+ AtomixVitePluginOptions,
6
+ AtomixLoaderOptions,
7
+ AtomixRollupPluginOptions,
8
+ VitePluginResult,
9
+ RollupPluginResult,
10
+ } from './types.js';
11
+
12
+ // ─── Plugin Exports ──────────────────────────────────────────────────────────
13
+
14
+ /** Vite plugin for Atomix integration */
15
+ export declare function vitePlugin(options?: AtomixVitePluginOptions): VitePluginResult;
16
+
17
+ /** Webpack loader for Atomix integration (exported as the loader function itself) */
18
+ export declare const webpackLoader: (source: string) => string;
19
+
20
+ /** Rollup plugin for Atomix integration */
21
+ export declare function rollupPlugin(options?: AtomixRollupPluginOptions): RollupPluginResult;
22
+
23
+ // ─── Utility Exports ─────────────────────────────────────────────────────────
24
+
25
+ /**
26
+ * Gets the appropriate plugin/loader based on the detected build tool.
27
+ * Returns the instantiated plugin for Vite/Rollup, or the loader function for Webpack.
28
+ */
29
+ export declare function getIntegration(
30
+ buildTool: BuildTool,
31
+ options?: AtomixBuildToolOptions
32
+ ): VitePluginResult | RollupPluginResult | typeof webpackLoader | null;
33
+
34
+ /** Detects the build tool used in the current project by reading package.json */
35
+ export declare function detectBuildTool(): BuildTool;
36
+
37
+ /** Initialize the appropriate integration based on detected build tool */
38
+ export declare function initAutoIntegration(
39
+ options?: AtomixBuildToolOptions
40
+ ): VitePluginResult | RollupPluginResult | typeof webpackLoader | null;
41
+
42
+ /** Get available themes from Atomix installation */
43
+ export declare function getAvailableThemes(atomixPath?: string | null): 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,67 @@
1
+ {
2
+ "name": "@shohojdhara/atomix-build-tools",
3
+ "version": "1.0.0",
4
+ "description": "Build tool integrations for the Atomix design system",
5
+ "type": "module",
6
+ "main": "./index.js",
7
+ "types": "./index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./index.d.ts",
11
+ "import": "./index.js"
12
+ },
13
+ "./vite-plugin": {
14
+ "types": "./index.d.ts",
15
+ "import": "./vite-plugin.js"
16
+ },
17
+ "./rollup-plugin": {
18
+ "types": "./index.d.ts",
19
+ "import": "./rollup-plugin.js"
20
+ },
21
+ "./webpack-loader": {
22
+ "types": "./index.d.ts",
23
+ "import": "./webpack-loader.js"
24
+ },
25
+ "./types": {
26
+ "types": "./types.d.ts"
27
+ }
28
+ },
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "scripts": {
33
+ "test": "vitest run __tests__/"
34
+ },
35
+ "peerDependencies": {
36
+ "vite": "^4.0.0 || ^5.0.0 || ^6.0.0",
37
+ "webpack": "^5.0.0",
38
+ "rollup": "^3.0.0 || ^4.0.0"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "vite": { "optional": true },
42
+ "webpack": { "optional": true },
43
+ "rollup": { "optional": true }
44
+ },
45
+ "keywords": [
46
+ "atomix",
47
+ "design-system",
48
+ "vite",
49
+ "webpack",
50
+ "rollup",
51
+ "plugin",
52
+ "loader",
53
+ "ui",
54
+ "framework"
55
+ ],
56
+ "author": "Limon Khan",
57
+ "license": "MIT",
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "https://github.com/Shohojdhara/atomix.git",
61
+ "directory": "build-tools"
62
+ },
63
+ "bugs": {
64
+ "url": "https://github.com/Shohojdhara/atomix/issues"
65
+ },
66
+ "homepage": "https://github.com/Shohojdhara/atomix#readme"
67
+ }