@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,161 @@
1
+ /**
2
+ * @fileoverview Vite Plugin for Atomix Design System
3
+ * Provides seamless integration of Atomix components and styles into Vite projects
4
+ */
5
+
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import {
9
+ resolveAtomixRoot,
10
+ filterComponents,
11
+ removeAtomImports,
12
+ generateThemeCss,
13
+ applyThemeToCSS,
14
+ getAvailableThemes,
15
+ createLogger,
16
+ } from './utils.js';
17
+ import { Validator } from './error-handler.js';
18
+
19
+ /**
20
+ * @typedef {Object} AtomixVitePluginOptions
21
+ * @property {string} [theme='default'] - Theme to use
22
+ * @property {string[]} [components=[]] - Specific components to include
23
+ * @property {boolean} [optimizeCss=true] - Whether to optimize CSS
24
+ * @property {boolean} [includeAtoms=false] - Whether to include atomic styles
25
+ * @property {boolean} [verbose=false] - Enable verbose logging
26
+ */
27
+
28
+ /**
29
+ * Atomix Vite Plugin
30
+ * @param {AtomixVitePluginOptions} options - Plugin options
31
+ * @returns {import('vite').Plugin}
32
+ */
33
+ export default function atomixVitePlugin(options = {}) {
34
+ const {
35
+ theme = 'default',
36
+ components = [],
37
+ optimizeCss = true,
38
+ includeAtoms = false,
39
+ verbose = false,
40
+ } = options;
41
+
42
+ const log = createLogger('[Atomix Vite Plugin]', verbose);
43
+ let atomixRoot = null;
44
+
45
+ // Validate options — throws AtomixBuildError on failure
46
+ Validator.validateOptions({ theme, components }, [], []);
47
+
48
+ log.log(`Initializing with theme: ${theme}`);
49
+ if (components.length > 0) {
50
+ log.log(`Selected components: ${components.join(', ')}`);
51
+ }
52
+
53
+ return {
54
+ name: 'atomix',
55
+
56
+ configResolved(_resolvedConfig) {
57
+ atomixRoot = resolveAtomixRoot();
58
+ if (atomixRoot) {
59
+ log.log(`Found Atomix at: ${atomixRoot}`);
60
+ } else {
61
+ log.warn('Could not resolve Atomix package location');
62
+ }
63
+ },
64
+
65
+ /**
66
+ * Transform Atomix imports to optimize for production
67
+ */
68
+ async transform(code, id) {
69
+ const isAtomixFile =
70
+ id.includes('@shohojdhara/atomix') ||
71
+ (atomixRoot && id.includes(atomixRoot)) ||
72
+ code.includes('@shohojdhara/atomix');
73
+
74
+ if (!isAtomixFile) {
75
+ return null;
76
+ }
77
+
78
+ log.log(`Processing: ${id}`);
79
+
80
+ let transformedCode = code;
81
+
82
+ // Apply component filtering if specified
83
+ if (components.length > 0) {
84
+ transformedCode = filterComponents(transformedCode, components, includeAtoms);
85
+ }
86
+
87
+ // Remove atom imports if not requested
88
+ if (!includeAtoms) {
89
+ transformedCode = removeAtomImports(transformedCode);
90
+ }
91
+
92
+ return {
93
+ code: transformedCode,
94
+ map: null,
95
+ };
96
+ },
97
+
98
+ /**
99
+ * Inject theme CSS into dev server
100
+ */
101
+ configureServer(server) {
102
+ server.middlewares.use((req, res, next) => {
103
+ if (req.url && req.url.includes('/atomix-theme.css')) {
104
+ try {
105
+ const themeCss = generateThemeCss(theme, atomixRoot);
106
+ res.setHeader('Content-Type', 'text/css');
107
+ res.setHeader('Cache-Control', 'no-cache');
108
+ res.end(themeCss);
109
+ return;
110
+ } catch (error) {
111
+ log.error('Error serving theme CSS:', error);
112
+ res.statusCode = 500;
113
+ res.end('Error serving theme CSS');
114
+ return;
115
+ }
116
+ }
117
+ next();
118
+ });
119
+ },
120
+
121
+ /**
122
+ * Generate CSS for production build
123
+ */
124
+ generateBundle(outputOptions, bundle) {
125
+ if (!optimizeCss) return;
126
+
127
+ for (const fileName in bundle) {
128
+ const chunk = bundle[fileName];
129
+ if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) {
130
+ try {
131
+ if (theme !== 'default') {
132
+ chunk.source = applyThemeToCSS(chunk.source.toString(), theme, atomixRoot);
133
+ log.log(`Applied theme ${theme} to ${fileName}`);
134
+ }
135
+ } catch (error) {
136
+ log.error(`Error processing CSS ${fileName}:`, error);
137
+ }
138
+ }
139
+ }
140
+ },
141
+
142
+ /**
143
+ * Build start hook
144
+ */
145
+ buildStart() {
146
+ log.log('Build started');
147
+
148
+ // Validate theme exists
149
+ if (theme !== 'default' && atomixRoot) {
150
+ const themePath = path.join(atomixRoot, 'themes', theme);
151
+ if (!fs.existsSync(themePath)) {
152
+ const available = getAvailableThemes(atomixRoot);
153
+ this.warn(`[Atomix Vite Plugin] Theme '${theme}' not found. Available themes: ${available.join(', ') || 'none detected'}`);
154
+ }
155
+ }
156
+ },
157
+ };
158
+ }
159
+
160
+ // Re-export helpers for external consumption
161
+ export { resolveAtomixRoot as getAtomixPackageLocation, getAvailableThemes } from './utils.js';
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @fileoverview Webpack Loader for Atomix Design System
3
+ * Provides integration of Atomix components and styles into Webpack projects
4
+ */
5
+
6
+ import path from 'path';
7
+ import { createRequire } from 'module';
8
+ import {
9
+ filterComponents,
10
+ removeAtomImports,
11
+ shouldProcessFile,
12
+ createLogger,
13
+ } from './utils.js';
14
+ import { Validator } from './error-handler.js';
15
+
16
+ const require = createRequire(import.meta.url);
17
+
18
+ /**
19
+ * @typedef {Object} AtomixLoaderOptions
20
+ * @property {boolean} [includeAtoms=false] - Whether to include atomic styles
21
+ * @property {string[]} [components=[]] - Specific components to include
22
+ * @property {boolean} [excludeUnnecessaryStyles=true] - Remove unused styles
23
+ * @property {boolean} [verbose=false] - Enable verbose logging
24
+ * @property {string} [theme='default'] - Theme to use
25
+ */
26
+
27
+ /**
28
+ * Webpack loader to process Atomix components and optimize imports
29
+ * @param {string} source - Source code to transform
30
+ * @returns {string} Transformed source code
31
+ */
32
+ export default function atomixLoader(source) {
33
+ const options = this.getOptions() || {};
34
+
35
+ const {
36
+ includeAtoms = false,
37
+ components = [],
38
+ verbose = false,
39
+ } = options;
40
+
41
+ const log = createLogger('[Atomix Webpack Loader]', verbose);
42
+
43
+ // Validate options — throws AtomixBuildError on failure
44
+ Validator.validateOptions({ components }, [], []);
45
+
46
+ const resourcePath = this.resourcePath;
47
+
48
+ log.log(`Processing: ${resourcePath}`);
49
+ if (components.length > 0) {
50
+ log.log(`Selected components: ${components.join(', ')}`);
51
+ }
52
+
53
+ // Determine if we should process this file (strict matching)
54
+ if (!shouldProcessFile(resourcePath, source)) {
55
+ return source;
56
+ }
57
+
58
+ let transformedSource = source;
59
+
60
+ // Apply component filtering if specified
61
+ if (components.length > 0) {
62
+ transformedSource = filterComponents(transformedSource, components, includeAtoms);
63
+ }
64
+
65
+ // Remove atom imports if not requested
66
+ if (!includeAtoms) {
67
+ transformedSource = removeAtomImports(transformedSource);
68
+ }
69
+
70
+ log.log(`Transformation complete for: ${resourcePath}`);
71
+
72
+ return transformedSource;
73
+ }
74
+
75
+ /**
76
+ * Pitch loader function for preprocessing.
77
+ * Runs before the source is processed.
78
+ */
79
+ export function pitch() {
80
+ const options = this.getOptions() || {};
81
+ const { verbose = false } = options;
82
+
83
+ const isAtomixFile =
84
+ this.resourcePath.includes('node_modules/@shohojdhara/atomix') ||
85
+ this.resourcePath.includes('@shohojdhara/atomix');
86
+
87
+ if (!isAtomixFile) {
88
+ return; // Skip processing
89
+ }
90
+
91
+ if (verbose) {
92
+ console.log(`[Atomix Webpack Loader - Pitch] Will process: ${this.resourcePath}`);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Helper to get Atomix configuration from the project root.
98
+ * @param {string} context - Project context path.
99
+ * @returns {Object} Atomix configuration.
100
+ */
101
+ export function getAtomixConfig(context) {
102
+ try {
103
+ const configPath = path.join(context, 'atomix.config.ts');
104
+ const resolvedPath = require.resolve(configPath);
105
+
106
+ // Clear module cache to get fresh config
107
+ if (require.cache[resolvedPath]) {
108
+ delete require.cache[resolvedPath];
109
+ }
110
+
111
+ return require(configPath);
112
+ } catch {
113
+ return {
114
+ theme: 'default',
115
+ optimize: true,
116
+ includeAtoms: false,
117
+ components: [],
118
+ };
119
+ }
120
+ }
121
+
122
+ // Re-export helper for external consumption
123
+ export { getAvailableThemes } from './utils.js';