@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.15] - 2026-02-20
4
+
5
+ ### Added
6
+
7
+ - Standardize component import paths, update build tool plugin import examples, and include themes in package distribution (fda94bac)
8
+ - Add TypeScript declaration files to package for build-tools (fc288744)
9
+ - Update type definitions and improve export documentation for build-tools (13a6dd2c)
10
+
11
+ ### Changed
12
+
13
+ - Centralize build tool utilities for theme handling, component filtering, and logging (6acdcbfe)
14
+
15
+ ### Fixed
16
+
17
+ - Add `.js` extension to type import path in build tools definition (e0479944)
18
+ - Resolve duplicate identifiers in `AtomixGlass` (51d82d99)
19
+
20
+ ## [2.0.0] - 2026-01-20
21
+
22
+ ### Added
23
+
24
+ - **Spinner**: Added `aria-label` (default "Loading") and `role` (default "status") props for improved accessibility.
25
+ - **Badge**: Added `onRemove` callback and `aria-label` support. Providing `onRemove` automatically renders a close button.
26
+ - **Input/Textarea**: Added `defaultValue` prop for uncontrolled component support.
27
+ - **JSDoc**: Added `@default` tags to many component props for better developer experience and documentation.
28
+
29
+ ### Changed (Breaking)
30
+
31
+ - **Standardized ARIA Props**: All ARIA-related props have been renamed from camelCase to kebab-case (e.g., `ariaLabel` -> `aria-label`) to align with native React/HTML standards.
32
+ - **Toggle Component**: Refactored API to follow standard React form patterns. Removed `initialOn`, `onToggleOn`, and `onToggleOff`. Added `checked`, `defaultChecked`, and `onChange`.
33
+ - **Rating Component**: Renamed `color` prop to `variant` for consistency with other components.
34
+ - **Accordion Component**: Consolidated `onOpen` and `onClose` into a single `onOpenChange` handler.
35
+ - **Callout Component**: Renamed `oneLine` to `compact` and `toast` to `isToast`.
36
+
37
+ ### Fixed
38
+
39
+ - Fixed several accessibility issues across navigation components.
40
+ - Improved focus management in `Modal` component.
41
+
3
42
  ## 0.3.11
4
43
 
5
44
  ### Patch Changes
package/README.md CHANGED
@@ -16,6 +16,7 @@
16
16
  - [React Integration](#react-integration)
17
17
  - [Components](#components)
18
18
  - [API](#api)
19
+ - [Migration Guide](#migration-guide)
19
20
  - [Contributing](#contributing)
20
21
  - [License](#license)
21
22
 
@@ -139,6 +140,7 @@ For a complete list, see [components documentation](./src/components/).
139
140
 
140
141
  ## API
141
142
 
143
+ - [v2.0.0 Migration Guide](./MIGRATION_V2.md)
142
144
  - [Components API](./docs/components/README.md)
143
145
  - [Theme System](./docs/THEME_SYSTEM.md)
144
146
  - [CLI Reference](./docs/CLI_API_REFERENCE.md)
@@ -0,0 +1,372 @@
1
+ # Build Tool Integration Examples
2
+
3
+ This document provides practical examples of how to integrate Atomix with popular build tools. All examples include TypeScript support and comprehensive error handling.
4
+
5
+ ## TypeScript Support
6
+
7
+ All build tools include full TypeScript definitions:
8
+
9
+ ```ts
10
+ import { type AtomixVitePluginOptions, type AtomixLoaderOptions, type AtomixRollupPluginOptions } from '@shohojdhara/atomix/build-tools';
11
+ ```
12
+
13
+ ## Vite Integration
14
+
15
+ ### Basic Setup
16
+
17
+ ```js
18
+ // vite.config.js
19
+ import { defineConfig } from 'vite';
20
+ import react from '@vitejs/plugin-react';
21
+ import atomixPlugin from '@shohojdhara/atomix/build-tools/vite-plugin.js';
22
+
23
+ export default defineConfig({
24
+ plugins: [
25
+ react(),
26
+ atomixPlugin({
27
+ theme: 'dark',
28
+ optimizeCss: true,
29
+ verbose: false
30
+ })
31
+ ]
32
+ });
33
+ ```
34
+
35
+ With TypeScript:
36
+
37
+ ```ts
38
+ // vite.config.ts
39
+ import { defineConfig } from 'vite';
40
+ import react from '@vitejs/plugin-react';
41
+ import atomixPlugin, { type AtomixVitePluginOptions } from '@shohojdhara/atomix/build-tools/vite-plugin.js';
42
+
43
+ const atomixOptions: AtomixVitePluginOptions = {
44
+ theme: 'dark',
45
+ components: ['Button', 'Card'],
46
+ optimizeCss: true,
47
+ includeAtoms: false,
48
+ verbose: true
49
+ };
50
+
51
+ export default defineConfig({
52
+ plugins: [react(), atomixPlugin(atomixOptions)]
53
+ });
54
+ ```
55
+
56
+ ### Advanced Setup
57
+
58
+ ```js
59
+ // vite.config.js
60
+ import { defineConfig } from 'vite';
61
+ import react from '@vitejs/plugin-react';
62
+ import atomix from '@shohojdhara/atomix/build-tools';
63
+
64
+ export default defineConfig({
65
+ plugins: [
66
+ react(),
67
+ atomix.vitePlugin({
68
+ theme: 'custom-theme',
69
+ components: ['Button', 'Card', 'Modal'],
70
+ optimizeCss: true,
71
+ includeAtoms: true
72
+ })
73
+ ],
74
+ css: {
75
+ preprocessorOptions: {
76
+ scss: {
77
+ // Add Atomix SCSS paths
78
+ additionalData: `@import "@shohojdhara/atomix/scss/settings";`
79
+ }
80
+ }
81
+ }
82
+ });
83
+ ```
84
+
85
+ ## Webpack Integration
86
+
87
+ ### Basic Setup
88
+
89
+ ```js
90
+ // webpack.config.js
91
+ const path = require('path');
92
+
93
+ module.exports = {
94
+ // ... other config
95
+ module: {
96
+ rules: [
97
+ {
98
+ test: /\.(js|jsx|ts|tsx)$/,
99
+ include: [
100
+ path.resolve(__dirname, 'src'),
101
+ path.resolve(__dirname, 'node_modules/@shohojdhara/atomix')
102
+ ],
103
+ use: {
104
+ loader: path.resolve(__dirname, 'node_modules/@shohojdhara/atomix/build-tools/webpack-loader.js'),
105
+ options: {
106
+ includeAtoms: false,
107
+ components: ['Button', 'Input'],
108
+ excludeUnnecessaryStyles: true,
109
+ verbose: false
110
+ }
111
+ }
112
+ }
113
+ ]
114
+ },
115
+ resolve: {
116
+ alias: {
117
+ '@shohojdhara/atomix': path.resolve(__dirname, 'node_modules/@shohojdhara/atomix')
118
+ }
119
+ }
120
+ };
121
+ ```
122
+
123
+ With TypeScript:
124
+
125
+ ```ts
126
+ // webpack.config.ts
127
+ import path from 'path';
128
+ import { type AtomixLoaderOptions } from '@shohojdhara/atomix/build-tools';
129
+
130
+ const atomixLoaderOptions: AtomixLoaderOptions = {
131
+ includeAtoms: false,
132
+ components: ['Button', 'Card', 'Input'],
133
+ excludeUnnecessaryStyles: true,
134
+ verbose: true
135
+ };
136
+
137
+ export default {
138
+ // ... other config
139
+ module: {
140
+ rules: [
141
+ {
142
+ test: /\.(js|jsx|ts|tsx)$/,
143
+ include: [
144
+ path.resolve(__dirname, 'src'),
145
+ path.resolve(__dirname, 'node_modules/@shohojdhara/atomix')
146
+ ],
147
+ use: {
148
+ loader: path.resolve(__dirname, 'node_modules/@shohojdhara/atomix/build-tools/webpack-loader.js'),
149
+ options: atomixLoaderOptions
150
+ }
151
+ }
152
+ ]
153
+ }
154
+ };
155
+ ```
156
+
157
+ ### With CSS Processing
158
+
159
+ ```js
160
+ // webpack.config.js
161
+ const path = require('path');
162
+ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
163
+
164
+ module.exports = {
165
+ // ... other config
166
+ plugins: [
167
+ new MiniCssExtractPlugin({
168
+ filename: '[name].[contenthash].css'
169
+ })
170
+ ],
171
+ module: {
172
+ rules: [
173
+ {
174
+ test: /\.(js|jsx)$/,
175
+ include: [
176
+ path.resolve(__dirname, 'src'),
177
+ path.resolve(__dirname, 'node_modules/@shohojdhara/atomix')
178
+ ],
179
+ use: [
180
+ 'babel-loader',
181
+ {
182
+ loader: '@shohojdhara/atomix/build-tools/webpack-loader',
183
+ options: {
184
+ components: ['Button', 'Input', 'Card'],
185
+ includeAtoms: true
186
+ }
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ test: /\.css$/,
192
+ use: [
193
+ MiniCssExtractPlugin.loader,
194
+ 'css-loader',
195
+ 'postcss-loader'
196
+ ]
197
+ }
198
+ ]
199
+ }
200
+ };
201
+ ```
202
+
203
+ ## Rollup Integration
204
+
205
+ ### Basic Setup
206
+
207
+ ```js
208
+ // rollup.config.js
209
+ import atomixPlugin from '@shohojdhara/atomix/build-tools/rollup-plugin.js';
210
+
211
+ export default {
212
+ input: 'src/index.js',
213
+ output: {
214
+ dir: 'dist',
215
+ format: 'es'
216
+ },
217
+ plugins: [
218
+ atomixPlugin({
219
+ theme: 'light',
220
+ optimize: true,
221
+ verbose: false
222
+ })
223
+ ]
224
+ };
225
+ ```
226
+
227
+ With TypeScript:
228
+
229
+ ```ts
230
+ // rollup.config.ts
231
+ import atomixPlugin, { type AtomixRollupPluginOptions } from '@shohojdhara/atomix/build-tools/rollup-plugin.js';
232
+
233
+ const atomixOptions: AtomixRollupPluginOptions = {
234
+ theme: 'dark',
235
+ components: ['Button', 'Modal', 'Card'],
236
+ optimize: true,
237
+ includeAtoms: false,
238
+ verbose: true
239
+ };
240
+
241
+ export default {
242
+ input: 'src/main.js',
243
+ output: {
244
+ dir: 'dist',
245
+ format: 'es'
246
+ },
247
+ plugins: [atomixPlugin(atomixOptions)]
248
+ };
249
+ ```
250
+
251
+ ### Advanced Setup
252
+
253
+ ```js
254
+ // rollup.config.js
255
+ import resolve from '@rollup/plugin-node-resolve';
256
+ import commonjs from '@rollup/plugin-commonjs';
257
+ import atomix from '@shohojdhara/atomix/build-tools';
258
+
259
+ export default {
260
+ input: 'src/main.js',
261
+ output: {
262
+ dir: 'dist',
263
+ format: 'es',
264
+ assetFileNames: (assetInfo) => {
265
+ if (assetInfo.name.endsWith('.css')) {
266
+ return 'assets/[name][extname]';
267
+ }
268
+ return '[name][extname]';
269
+ }
270
+ },
271
+ plugins: [
272
+ resolve(),
273
+ commonjs(),
274
+ atomix.rollupPlugin({
275
+ theme: 'dark',
276
+ components: ['Button', 'Modal', 'Card'],
277
+ optimize: true,
278
+ includeAtoms: false,
279
+ verbose: true
280
+ })
281
+ ]
282
+ };
283
+ ```
284
+
285
+ ## Error Handling Examples
286
+
287
+ All plugins include comprehensive error handling:
288
+
289
+ ```js
290
+ import atomixPlugin from '@shohojdhara/atomix/build-tools/vite-plugin.js';
291
+
292
+ // This will throw a validation error with helpful details
293
+ try {
294
+ const plugin = atomixPlugin({
295
+ theme: 123, // Invalid type - should be string
296
+ components: 'Button' // Invalid type - should be array
297
+ });
298
+ } catch (error) {
299
+ console.error(`${error.code}: ${error.message}`);
300
+ if (error.details) {
301
+ console.error('Details:', error.details);
302
+ }
303
+ if (error.suggestions) {
304
+ console.error('Suggestions:', error.suggestions);
305
+ }
306
+ }
307
+ ```
308
+
309
+ ## Auto-Detection Integration
310
+
311
+ For simpler setups, you can use the auto-detection feature:
312
+
313
+ ```js
314
+ // vite.config.js (works similarly for webpack.config.js or rollup.config.js)
315
+ import { initAutoIntegration } from '@shohojdhara/atomix/build-tools';
316
+
317
+ const atomixIntegration = initAutoIntegration({
318
+ theme: 'default',
319
+ optimize: true
320
+ });
321
+
322
+ export default {
323
+ plugins: [
324
+ // ... other plugins
325
+ atomixIntegration
326
+ ]
327
+ };
328
+ ```
329
+
330
+ ## Environment-Specific Configurations
331
+
332
+ ### Development vs Production
333
+
334
+ ```js
335
+ // vite.config.js
336
+ import { defineConfig, loadEnv } from 'vite';
337
+ import atomix from '@shohojdhara/atomix/build-tools';
338
+
339
+ export default defineConfig(({ mode }) => {
340
+ const env = loadEnv(mode, process.cwd(), '');
341
+
342
+ return {
343
+ plugins: [
344
+ atomix.vitePlugin({
345
+ theme: env.VITE_ATOMIX_THEME || 'default',
346
+ optimizeCss: mode === 'production', // Only optimize in production
347
+ verbose: mode === 'development' // Show logs in development
348
+ })
349
+ ]
350
+ };
351
+ });
352
+ ```
353
+
354
+ ## Troubleshooting
355
+
356
+ ### Common Issues
357
+
358
+ 1. **Theme Not Applied**
359
+ - Verify the theme name is valid by checking available themes:
360
+ ```js
361
+ import { getAvailableThemes } from '@shohojdhara/atomix/build-tools';
362
+ console.log(getAvailableThemes());
363
+ ```
364
+
365
+ 2. **Components Not Optimizing**
366
+ - Make sure the component names match exactly (case-sensitive)
367
+ - Verify the components exist in the Atomix library
368
+
369
+ 3. **Performance Issues**
370
+ - Disable verbose logging in production
371
+ - Limit the components list to only what you use
372
+ - Use the optimization features appropriately
@@ -0,0 +1,242 @@
1
+ # Atomix Build Tool Integrations
2
+
3
+ This directory contains plugins and loaders for integrating the Atomix design system with popular build tools. All plugins provide comprehensive type safety, error handling, and optimization features.
4
+
5
+ ## Features
6
+
7
+ - ✅ **Full TypeScript Support**: Comprehensive type definitions included
8
+ - ✅ **Robust Error Handling**: Custom error classes with detailed diagnostics
9
+ - ✅ **Component Optimization**: Tree-shaking and selective component imports
10
+ - ✅ **Theme Integration**: Dynamic theme switching and CSS variable support
11
+ - ✅ **Validation**: Runtime validation of all configuration options
12
+ - ✅ **Verbose Logging**: Detailed logging for debugging and monitoring
13
+
14
+ ## Available Integrations
15
+
16
+ ### Vite Plugin
17
+
18
+ The Vite plugin provides seamless integration of Atomix components and styles into Vite projects.
19
+
20
+ #### Installation
21
+
22
+ The build tools are included with the main Atomix package:
23
+
24
+ ```bash
25
+ npm install @shohojdhara/atomix --save-dev
26
+ ```
27
+
28
+ #### Type Safety
29
+
30
+ TypeScript definitions are automatically included. For enhanced IDE support:
31
+
32
+ ```ts
33
+ // vite.config.ts
34
+ import { defineConfig } from 'vite';
35
+ import atomixPlugin, { type AtomixVitePluginOptions } from '@shohojdhara/atomix/build-tools';
36
+
37
+ const options: AtomixVitePluginOptions = {
38
+ theme: 'dark',
39
+ components: ['Button', 'Card'],
40
+ optimizeCss: true,
41
+ includeAtoms: false,
42
+ verbose: true,
43
+ };
44
+
45
+ export default defineConfig({
46
+ plugins: [atomixPlugin(options)],
47
+ });
48
+ ```
49
+
50
+ #### Usage
51
+
52
+ ```js
53
+ // vite.config.js
54
+ import { defineConfig } from 'vite';
55
+ import { vitePlugin as atomixPlugin } from '@shohojdhara/atomix/build-tools';
56
+
57
+ export default defineConfig({
58
+ plugins: [
59
+ atomixPlugin({
60
+ theme: 'dark', // Specify theme ('default', 'dark', 'light')
61
+ components: ['Button', 'Card'], // Specific components to optimize
62
+ optimizeCss: true, // Enable CSS optimization
63
+ includeAtoms: false, // Include atomic styles
64
+ }),
65
+ ],
66
+ });
67
+ ```
68
+
69
+ #### Features
70
+
71
+ - Automatic theme injection during development
72
+ - CSS optimization for production builds
73
+ - Component-specific imports optimization
74
+ - Hot module replacement support
75
+
76
+ ### Webpack Loader
77
+
78
+ The Webpack loader enables processing of Atomix components and styles in Webpack projects.
79
+
80
+ #### Installation
81
+
82
+ The build tools are included with the main Atomix package:
83
+
84
+ ```bash
85
+ npm install @shohojdhara/atomix --save-dev
86
+ ```
87
+
88
+ #### Type Safety
89
+
90
+ ```ts
91
+ // webpack.config.ts
92
+ import { type AtomixLoaderOptions } from '@shohojdhara/atomix/build-tools';
93
+
94
+ const atomixLoaderOptions: AtomixLoaderOptions = {
95
+ includeAtoms: false,
96
+ components: ['Button', 'Input'],
97
+ excludeUnnecessaryStyles: true,
98
+ verbose: true,
99
+ };
100
+ ```
101
+
102
+ #### Usage
103
+
104
+ ```js
105
+ // webpack.config.js
106
+ module.exports = {
107
+ module: {
108
+ rules: [
109
+ {
110
+ test: /\.(js|jsx)$/,
111
+ include: [path.resolve(__dirname, 'node_modules/@shohojdhara/atomix')],
112
+ use: {
113
+ loader: require.resolve('@shohojdhara/atomix/build-tools/webpack-loader'),
114
+ options: {
115
+ includeAtoms: false, // Include atomic styles
116
+ components: ['Button', 'Input'], // Specific components to include
117
+ excludeUnnecessaryStyles: true, // Remove unused styles
118
+ },
119
+ },
120
+ },
121
+ ],
122
+ },
123
+ };
124
+ ```
125
+
126
+ #### Features
127
+
128
+ - Component import optimization
129
+ - Tree-shaking enhancement
130
+ - Conditional atom inclusion
131
+ - Style optimization
132
+
133
+ ### Rollup Plugin
134
+
135
+ The Rollup plugin provides integration for projects using Rollup as their build tool.
136
+
137
+ #### Installation
138
+
139
+ The build tools are included with the main Atomix package:
140
+
141
+ ```bash
142
+ npm install @shohojdhara/atomix --save-dev
143
+ ```
144
+
145
+ #### Type Safety
146
+
147
+ ```ts
148
+ // rollup.config.ts
149
+ import { type AtomixRollupPluginOptions } from '@shohojdhara/atomix/build-tools';
150
+
151
+ const atomixOptions: AtomixRollupPluginOptions = {
152
+ theme: 'default',
153
+ components: [],
154
+ optimize: true,
155
+ includeAtoms: false,
156
+ verbose: false,
157
+ };
158
+ ```
159
+
160
+ #### Usage
161
+
162
+ ```js
163
+ // rollup.config.js
164
+ import { rollupPlugin as atomixPlugin } from '@shohojdhara/atomix/build-tools';
165
+
166
+ export default {
167
+ input: 'src/index.js',
168
+ output: {
169
+ dir: 'dist',
170
+ format: 'es',
171
+ },
172
+ plugins: [
173
+ atomixPlugin({
174
+ theme: 'default', // Specify theme
175
+ components: [], // Specific components to include
176
+ optimize: true, // Enable optimizations
177
+ includeAtoms: false, // Include atomic styles
178
+ verbose: false, // Enable verbose logging
179
+ }),
180
+ ],
181
+ };
182
+ ```
183
+
184
+ #### Features
185
+
186
+ - Component import resolution
187
+ - Bundle optimization
188
+ - Theme-specific CSS processing
189
+ - Virtual module generation
190
+
191
+ ## Common Options
192
+
193
+ All plugins support these common options:
194
+
195
+ - `theme`: Specifies which theme to use (default: 'default')
196
+ - `components`: Array of specific components to include (default: [])
197
+ - `optimize`: Enables optimization features (default: depends on plugin)
198
+ - `includeAtoms`: Includes atomic styles (default: false)
199
+ - `verbose`: Enable detailed logging for debugging (default: false)
200
+
201
+ ## Error Handling
202
+
203
+ All plugins include comprehensive error handling with custom error types:
204
+
205
+ ```js
206
+ try {
207
+ const plugin = atomixPlugin({
208
+ theme: 'nonexistent-theme', // This will throw a validation error
209
+ components: ['Button'],
210
+ });
211
+ } catch (error) {
212
+ if (error.code === 'THEME_NOT_FOUND') {
213
+ console.error('Theme not found:', error.message);
214
+ console.log('Available themes:', error.details.availableThemes);
215
+ }
216
+ }
217
+ ```
218
+
219
+ Common error codes:
220
+
221
+ - `INVALID_THEME_TYPE`: Theme option is not a string
222
+ - `EMPTY_THEME`: Theme option is empty
223
+ - `THEME_NOT_FOUND`: Specified theme doesn't exist
224
+ - `INVALID_COMPONENTS_TYPE`: Components option is not an array
225
+ - `INVALID_COMPONENT_NAMES`: Component names are not strings
226
+ - `COMPONENTS_NOT_FOUND`: Some requested components don't exist
227
+
228
+ ## Best Practices
229
+
230
+ 1. **Optimize for Production**: Use the optimization features to reduce bundle size
231
+ 2. **Select Components Wisely**: Only include the components you actually use
232
+ 3. **Theme Management**: Specify your theme at build time to optimize CSS delivery
233
+ 4. **Tree Shaking**: Ensure your bundler supports tree shaking to remove unused code
234
+ 5. **Validation**: Always validate your configuration in development
235
+ 6. **Logging**: Enable verbose logging during troubleshooting
236
+ 7. **Type Safety**: Use TypeScript definitions for better IDE support and early error detection
237
+
238
+ ## Troubleshooting
239
+
240
+ - If you encounter issues with theme resolution, ensure the specified theme exists in your Atomix installation
241
+ - For problems with component imports, verify that component names match exactly
242
+ - Enable verbose logging to get more information about the processing steps