@shohojdhara/atomix 0.3.14 → 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 (173) 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 +43 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +67 -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 +203 -90
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +3 -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 +43 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +67 -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 +9 -61
  53. package/dist/index.esm.js +237 -286
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +250 -299
  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/package.json +23 -8
  60. package/scripts/atomix-cli.js +170 -73
  61. package/scripts/cli/__tests__/README.md +81 -0
  62. package/scripts/cli/__tests__/basic.test.js +115 -0
  63. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  64. package/scripts/cli/__tests__/integration.test.js +327 -0
  65. package/scripts/cli/__tests__/test-setup.js +133 -0
  66. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  67. package/scripts/cli/__tests__/utils.test.js +161 -0
  68. package/scripts/cli/component-generator.js +253 -299
  69. package/scripts/cli/dependency-checker.js +355 -0
  70. package/scripts/cli/interactive-init.js +46 -5
  71. package/scripts/cli/template-manager.js +0 -2
  72. package/scripts/cli/templates/common-templates.js +636 -0
  73. package/scripts/cli/templates/composable-templates.js +148 -126
  74. package/scripts/cli/templates/index.js +23 -16
  75. package/scripts/cli/templates/project-templates.js +151 -23
  76. package/scripts/cli/templates/react-templates.js +280 -210
  77. package/scripts/cli/templates/scss-templates.js +90 -91
  78. package/scripts/cli/templates/testing-templates.js +206 -27
  79. package/scripts/cli/templates/testing-utils.js +278 -0
  80. package/scripts/cli/templates/types-templates.js +70 -56
  81. package/scripts/cli/theme-bridge.js +8 -2
  82. package/scripts/cli/token-manager.js +318 -206
  83. package/scripts/cli/utils.js +0 -1
  84. package/src/components/Accordion/Accordion.stories.tsx +369 -870
  85. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  86. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  87. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  88. package/src/components/AtomixGlass/glass-utils.ts +2 -2
  89. package/src/components/AtomixGlass/shader-utils.ts +5 -0
  90. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  91. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  92. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  93. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  94. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  95. package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -35
  96. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
  97. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  98. package/src/components/Avatar/Avatar.stories.tsx +213 -1
  99. package/src/components/Badge/Badge.stories.tsx +121 -362
  100. package/src/components/Block/Block.stories.tsx +21 -12
  101. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
  102. package/src/components/Button/Button.stories.tsx +463 -1126
  103. package/src/components/Button/Button.test.tsx +107 -0
  104. package/src/components/Button/Button.tsx +46 -50
  105. package/src/components/Button/ButtonGroup.stories.tsx +373 -217
  106. package/src/components/Callout/Callout.stories.tsx +289 -634
  107. package/src/components/Card/Card.stories.tsx +248 -68
  108. package/src/components/Chart/Chart.stories.tsx +150 -8
  109. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
  110. package/src/components/Countdown/Countdown.stories.tsx +115 -8
  111. package/src/components/DataTable/DataTable.stories.tsx +346 -146
  112. package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
  113. package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
  114. package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
  115. package/src/components/Footer/Footer.stories.tsx +392 -328
  116. package/src/components/Form/Checkbox.stories.tsx +140 -6
  117. package/src/components/Form/Checkbox.test.tsx +63 -0
  118. package/src/components/Form/Checkbox.tsx +87 -51
  119. package/src/components/Form/Form.stories.tsx +119 -20
  120. package/src/components/Form/FormGroup.stories.tsx +127 -4
  121. package/src/components/Form/Radio.stories.tsx +140 -5
  122. package/src/components/Form/Select.stories.tsx +140 -8
  123. package/src/components/Form/Textarea.stories.tsx +149 -6
  124. package/src/components/Hero/Hero.stories.tsx +333 -32
  125. package/src/components/List/List.stories.tsx +141 -3
  126. package/src/components/Modal/Modal.stories.tsx +181 -42
  127. package/src/components/Popover/Popover.stories.tsx +448 -98
  128. package/src/components/Progress/Progress.stories.tsx +167 -5
  129. package/src/components/River/River.stories.tsx +1 -1
  130. package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
  131. package/src/components/Spinner/Spinner.stories.tsx +102 -8
  132. package/src/components/Steps/Steps.stories.tsx +172 -43
  133. package/src/components/Tabs/Tabs.stories.tsx +136 -10
  134. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  135. package/src/components/Todo/Todo.stories.tsx +198 -9
  136. package/src/components/Toggle/Toggle.stories.tsx +126 -39
  137. package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
  138. package/src/components/Upload/Upload.stories.tsx +113 -24
  139. package/src/lib/README.md +2 -2
  140. package/src/lib/__tests__/theme-tools.test.ts +193 -0
  141. package/src/lib/composables/index.ts +2 -2
  142. package/src/lib/composables/useAtomixGlass.ts +28 -56
  143. package/src/lib/composables/useChartExport.ts +2 -7
  144. package/src/lib/composables/useDataTable.ts +46 -29
  145. package/src/lib/constants/components.ts +9 -32
  146. package/src/lib/theme/devtools/CLI.ts +1 -1
  147. package/src/lib/types/components.ts +1 -1
  148. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  149. package/src/lib/utils/csv.ts +17 -0
  150. package/src/lib/utils/dataTableExport.ts +1 -10
  151. package/src/styles/01-settings/_index.scss +2 -1
  152. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  153. package/src/styles/01-settings/_settings.colors.scss +11 -11
  154. package/src/styles/01-settings/_settings.typography.scss +5 -5
  155. package/src/styles/02-tools/_tools.utility-api.scss +14 -0
  156. package/src/styles/06-components/_components.accordion.scss +56 -14
  157. package/src/styles/06-components/_components.checkbox.scss +23 -17
  158. package/src/styles/99-utilities/_index.scss +2 -0
  159. package/src/styles/99-utilities/_utilities.scss +3 -1
  160. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  161. package/themes/dark-complementary/README.md +98 -0
  162. package/themes/dark-complementary/index.scss +158 -0
  163. package/themes/default-light/README.md +81 -0
  164. package/themes/default-light/index.scss +154 -0
  165. package/themes/high-contrast/README.md +105 -0
  166. package/themes/high-contrast/index.scss +172 -0
  167. package/themes/test-theme/README.md +38 -0
  168. package/themes/test-theme/index.scss +47 -0
  169. package/scripts/cli/templates-original-backup.js +0 -1655
  170. package/scripts/cli/templates_backup.js +0 -684
  171. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  172. package/src/lib/composables/useButton.ts +0 -93
  173. 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';