@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.
- package/CHANGELOG.md +39 -0
- package/README.md +2 -0
- package/build-tools/EXAMPLES.md +372 -0
- package/build-tools/README.md +242 -0
- package/build-tools/__tests__/error-handler.test.js +230 -0
- package/build-tools/__tests__/index.test.js +141 -0
- package/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/build-tools/__tests__/utils.test.js +161 -0
- package/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/build-tools/error-handler.js +308 -0
- package/build-tools/index.d.ts +43 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +67 -0
- package/build-tools/rollup-plugin.js +236 -0
- package/build-tools/types.d.ts +163 -0
- package/build-tools/utils.js +203 -0
- package/build-tools/vite-plugin.js +161 -0
- package/build-tools/webpack-loader.js +123 -0
- package/dist/atomix.css +298 -167
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +3 -3
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/EXAMPLES.md +372 -0
- package/dist/build-tools/README.md +242 -0
- package/dist/build-tools/__tests__/error-handler.test.js +230 -0
- package/dist/build-tools/__tests__/index.test.js +141 -0
- package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/dist/build-tools/__tests__/utils.test.js +161 -0
- package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/dist/build-tools/error-handler.js +308 -0
- package/dist/build-tools/index.d.ts +43 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +67 -0
- package/dist/build-tools/rollup-plugin.js +236 -0
- package/dist/build-tools/types.d.ts +163 -0
- package/dist/build-tools/utils.js +203 -0
- package/dist/build-tools/vite-plugin.js +161 -0
- package/dist/build-tools/webpack-loader.js +123 -0
- package/dist/charts.d.ts +2 -2
- package/dist/charts.js +87 -58
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +42 -12
- package/dist/core.js +175 -135
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +30 -16
- package/dist/forms.js +146 -131
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +2 -2
- package/dist/heavy.js +151 -118
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +130 -106
- package/dist/index.esm.js +1083 -465
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1102 -483
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +27 -2
- package/dist/theme.js +721 -108
- package/dist/theme.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +749 -1153
- package/scripts/cli/__tests__/README.md +81 -0
- package/scripts/cli/__tests__/basic.test.js +115 -0
- package/scripts/cli/__tests__/component-generator.test.js +332 -0
- package/scripts/cli/__tests__/integration.test.js +327 -0
- package/scripts/cli/__tests__/test-setup.js +133 -0
- package/scripts/cli/__tests__/token-manager.test.js +251 -0
- package/scripts/cli/__tests__/utils.test.js +78 -118
- package/scripts/cli/component-generator.js +564 -0
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/documentation-sync.js +542 -0
- package/scripts/cli/interactive-init.js +129 -292
- package/scripts/cli/mappings.js +211 -0
- package/scripts/cli/migration-tools.js +95 -288
- package/scripts/cli/template-manager.js +105 -0
- package/scripts/cli/templates/README.md +123 -0
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +171 -0
- package/scripts/cli/templates/config-templates.js +126 -0
- package/scripts/cli/templates/index.js +102 -0
- package/scripts/cli/templates/project-templates.js +342 -0
- package/scripts/cli/templates/react-templates.js +331 -0
- package/scripts/cli/templates/scss-templates.js +155 -0
- package/scripts/cli/templates/storybook-templates.js +236 -0
- package/scripts/cli/templates/testing-templates.js +224 -0
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/token-templates.js +447 -0
- package/scripts/cli/templates/types-templates.js +147 -0
- package/scripts/cli/templates.js +35 -0
- package/scripts/cli/theme-bridge.js +28 -16
- package/scripts/cli/token-manager.js +432 -247
- package/scripts/cli/utils.js +37 -26
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- package/src/components/Accordion/Accordion.test.tsx +57 -0
- package/src/components/Accordion/Accordion.tsx +4 -0
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +2 -2
- package/src/components/AtomixGlass/shader-utils.ts +5 -0
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2965 -2861
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +73 -59
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +239 -27
- package/src/components/Badge/Badge.stories.tsx +132 -373
- package/src/components/Badge/Badge.test.tsx +51 -0
- package/src/components/Badge/Badge.tsx +20 -1
- package/src/components/Block/Block.stories.tsx +26 -17
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +50 -54
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Button/README.md +5 -0
- package/src/components/Callout/Callout.stories.tsx +299 -644
- package/src/components/Callout/Callout.test.tsx +10 -10
- package/src/components/Callout/Callout.tsx +7 -7
- package/src/components/Callout/README.md +9 -8
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Card/Card.tsx +2 -2
- package/src/components/Chart/Chart.stories.tsx +156 -14
- package/src/components/Chart/Chart.tsx +1 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
- package/src/components/Countdown/Countdown.stories.tsx +115 -8
- package/src/components/DataTable/DataTable.stories.tsx +346 -146
- package/src/components/DataTable/DataTable.tsx +14 -12
- package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +157 -37
- package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
- package/src/components/Footer/Footer.stories.tsx +392 -328
- package/src/components/Form/Checkbox.stories.tsx +143 -9
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +90 -52
- package/src/components/Form/Form.stories.tsx +121 -22
- package/src/components/Form/FormGroup.stories.tsx +128 -5
- package/src/components/Form/Input.stories.tsx +28 -16
- package/src/components/Form/Input.test.tsx +59 -0
- package/src/components/Form/Input.tsx +97 -95
- package/src/components/Form/Radio.stories.tsx +232 -97
- package/src/components/Form/Radio.tsx +2 -2
- package/src/components/Form/Select.stories.tsx +144 -12
- package/src/components/Form/Select.tsx +2 -2
- package/src/components/Form/Textarea.stories.tsx +171 -13
- package/src/components/Form/Textarea.test.tsx +45 -0
- package/src/components/Form/Textarea.tsx +88 -86
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +143 -5
- package/src/components/Modal/Modal.stories.tsx +185 -46
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
- package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
- package/src/components/Navigation/README.md +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +5 -2
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
- package/src/components/Popover/Popover.stories.tsx +449 -99
- package/src/components/ProductReview/ProductReview.tsx +1 -1
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/Progress/Progress.tsx +46 -46
- package/src/components/Rating/Rating.stories.tsx +4 -4
- package/src/components/Rating/Rating.tsx +8 -8
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Slider/Slider.stories.tsx +63 -63
- package/src/components/Spinner/Spinner.stories.tsx +104 -10
- package/src/components/Spinner/Spinner.test.tsx +35 -0
- package/src/components/Spinner/Spinner.tsx +9 -2
- package/src/components/Steps/Steps.stories.tsx +172 -43
- package/src/components/Tabs/Tabs.stories.tsx +136 -10
- package/src/components/Testimonial/Testimonial.stories.tsx +121 -4
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +153 -43
- package/src/components/Toggle/Toggle.test.tsx +91 -0
- package/src/components/Toggle/Toggle.tsx +44 -27
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/components/Upload/Upload.stories.tsx +113 -24
- package/src/layouts/Grid/Grid.stories.tsx +49 -49
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +193 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/useAccordion.ts +12 -3
- package/src/lib/composables/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useBreadcrumb.ts +2 -2
- package/src/lib/composables/useCallout.ts +7 -7
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/composables/useNavbar.ts +1 -1
- package/src/lib/constants/components.ts +10 -33
- package/src/lib/storybook/InteractiveDemo.tsx +113 -0
- package/src/lib/storybook/PreviewContainer.tsx +36 -0
- package/src/lib/storybook/VariantsGrid.tsx +21 -0
- package/src/lib/storybook/index.ts +3 -0
- package/src/lib/theme/core/createThemeObject.ts +9 -5
- package/src/lib/theme/devtools/CLI.ts +155 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
- package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
- package/src/lib/theme/devtools/index.ts +3 -0
- package/src/lib/theme/errors/errors.ts +8 -0
- package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
- package/src/lib/theme/utils/index.ts +1 -0
- package/src/lib/theme/utils/themeValidation.ts +501 -0
- package/src/lib/theme-tools.ts +32 -3
- package/src/lib/types/components.ts +82 -27
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/csv.ts +17 -0
- package/src/lib/utils/dataTableExport.ts +1 -10
- package/src/lib/utils/themeNaming.ts +1 -1
- package/src/styles/01-settings/_index.scss +2 -1
- package/src/styles/01-settings/_settings.accordion.scss +28 -7
- package/src/styles/01-settings/_settings.colors.scss +11 -11
- package/src/styles/01-settings/_settings.typography.scss +5 -5
- package/src/styles/02-tools/_tools.utility-api.scss +14 -0
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.callout.scss +29 -33
- package/src/styles/06-components/_components.checkbox.scss +23 -17
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.display.scss +14 -3
- package/src/styles/99-utilities/_utilities.flex.scss +10 -10
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +28 -8
- package/themes/dark-complementary/README.md +98 -0
- package/themes/dark-complementary/index.scss +158 -0
- package/themes/default-light/README.md +81 -0
- package/themes/default-light/index.scss +154 -0
- package/themes/high-contrast/README.md +105 -0
- package/themes/high-contrast/index.scss +172 -0
- package/themes/test-theme/README.md +38 -0
- package/themes/test-theme/index.scss +47 -0
- package/scripts/cli/__tests__/cli-commands.test.js +0 -204
- package/scripts/cli/__tests__/vitest.config.js +0 -26
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
- package/src/lib/composables/useButton.ts +0 -93
- 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';
|