@shohojdhara/atomix 0.4.7 → 0.4.9

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 (176) hide show
  1. package/atomix.config.ts +58 -1
  2. package/dist/atomix.css +172 -157
  3. package/dist/atomix.css.map +1 -1
  4. package/dist/atomix.min.css +4 -4
  5. package/dist/atomix.min.css.map +1 -1
  6. package/dist/charts.d.ts +33 -0
  7. package/dist/charts.js +1274 -164
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.d.ts +33 -10
  10. package/dist/core.js +1099 -83
  11. package/dist/core.js.map +1 -1
  12. package/dist/forms.d.ts +33 -0
  13. package/dist/forms.js +2106 -1050
  14. package/dist/forms.js.map +1 -1
  15. package/dist/heavy.d.ts +42 -1
  16. package/dist/heavy.js +1663 -638
  17. package/dist/heavy.js.map +1 -1
  18. package/dist/index.d.ts +442 -270
  19. package/dist/index.esm.js +1947 -680
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +1982 -712
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.min.js +1 -1
  24. package/dist/index.min.js.map +1 -1
  25. package/package.json +6 -3
  26. package/scripts/atomix-cli.js +136 -1827
  27. package/scripts/cli/__tests__/basic.test.js +3 -2
  28. package/scripts/cli/__tests__/clean.test.js +278 -0
  29. package/scripts/cli/__tests__/component-validator.test.js +433 -0
  30. package/scripts/cli/__tests__/generator.test.js +613 -0
  31. package/scripts/cli/__tests__/glass-motion.test.js +256 -0
  32. package/scripts/cli/__tests__/integration.test.js +719 -108
  33. package/scripts/cli/__tests__/migrate.test.js +74 -0
  34. package/scripts/cli/__tests__/security.test.js +206 -0
  35. package/scripts/cli/__tests__/test-setup.js +3 -1
  36. package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
  37. package/scripts/cli/__tests__/token-provider.test.js +361 -0
  38. package/scripts/cli/__tests__/utils.test.js +5 -5
  39. package/scripts/cli/commands/benchmark.js +105 -0
  40. package/scripts/cli/commands/build-theme.js +115 -0
  41. package/scripts/cli/commands/clean.js +109 -0
  42. package/scripts/cli/commands/doctor.js +88 -0
  43. package/scripts/cli/commands/generate.js +218 -0
  44. package/scripts/cli/commands/init.js +73 -0
  45. package/scripts/cli/commands/migrate.js +106 -0
  46. package/scripts/cli/commands/sync-tokens.js +206 -0
  47. package/scripts/cli/commands/theme-bridge.js +248 -0
  48. package/scripts/cli/commands/tokens.js +157 -0
  49. package/scripts/cli/commands/validate.js +194 -0
  50. package/scripts/cli/internal/ai-engine.js +156 -0
  51. package/scripts/cli/internal/compiler.js +114 -0
  52. package/scripts/cli/internal/component-validator.js +443 -0
  53. package/scripts/cli/internal/config-loader.js +162 -0
  54. package/scripts/cli/internal/filesystem.js +158 -0
  55. package/scripts/cli/internal/generator.js +430 -0
  56. package/scripts/cli/internal/glass-generator.js +398 -0
  57. package/scripts/cli/internal/hook-generator.js +369 -0
  58. package/scripts/cli/internal/hooks.js +61 -0
  59. package/scripts/cli/internal/itcss-generator.js +565 -0
  60. package/scripts/cli/internal/motion-generator.js +679 -0
  61. package/scripts/cli/internal/template-engine.js +301 -0
  62. package/scripts/cli/internal/theme-bridge.js +664 -0
  63. package/scripts/cli/internal/tokens/engine.js +122 -0
  64. package/scripts/cli/internal/tokens/provider.js +34 -0
  65. package/scripts/cli/internal/tokens/providers/figma.js +50 -0
  66. package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
  67. package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
  68. package/scripts/cli/internal/tokens/token-provider.js +443 -0
  69. package/scripts/cli/internal/tokens/token-validator.js +513 -0
  70. package/scripts/cli/internal/validator.js +276 -0
  71. package/scripts/cli/internal/wizard.js +115 -0
  72. package/scripts/cli/mappings.js +23 -0
  73. package/scripts/cli/migration-tools.js +164 -94
  74. package/scripts/cli/plugins/style-dictionary.js +46 -0
  75. package/scripts/cli/templates/README.md +525 -95
  76. package/scripts/cli/templates/common-templates.js +40 -14
  77. package/scripts/cli/templates/components/react-component.ts +282 -0
  78. package/scripts/cli/templates/config/project-config.ts +112 -0
  79. package/scripts/cli/templates/hooks/use-component.ts +477 -0
  80. package/scripts/cli/templates/index.js +19 -4
  81. package/scripts/cli/templates/index.ts +171 -0
  82. package/scripts/cli/templates/next-templates.js +72 -0
  83. package/scripts/cli/templates/react-templates.js +70 -126
  84. package/scripts/cli/templates/scss-templates.js +35 -35
  85. package/scripts/cli/templates/stories/storybook-story.ts +241 -0
  86. package/scripts/cli/templates/styles/scss-component.ts +255 -0
  87. package/scripts/cli/templates/tests/vitest-test.ts +229 -0
  88. package/scripts/cli/templates/token-templates.js +337 -1
  89. package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
  90. package/scripts/cli/templates/types/component-types.ts +145 -0
  91. package/scripts/cli/templates/utils/testing-utils.ts +144 -0
  92. package/scripts/cli/templates/vanilla-templates.js +39 -0
  93. package/scripts/cli/token-manager.js +8 -2
  94. package/scripts/cli/utils/cache-manager.js +240 -0
  95. package/scripts/cli/utils/detector.js +46 -0
  96. package/scripts/cli/utils/diagnostics.js +289 -0
  97. package/scripts/cli/utils/error.js +89 -0
  98. package/scripts/cli/utils/helpers.js +67 -0
  99. package/scripts/cli/utils/logger.js +75 -0
  100. package/scripts/cli/utils/security.js +302 -0
  101. package/scripts/cli/utils/telemetry.js +115 -0
  102. package/scripts/cli/utils/validation.js +37 -0
  103. package/scripts/cli/utils.js +28 -341
  104. package/src/components/Accordion/Accordion.stories.tsx +0 -18
  105. package/src/components/Accordion/Accordion.test.tsx +0 -17
  106. package/src/components/Accordion/Accordion.tsx +0 -4
  107. package/src/components/AtomixGlass/AtomixGlass.test.tsx +37 -3
  108. package/src/components/AtomixGlass/AtomixGlass.tsx +143 -31
  109. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +129 -31
  110. package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
  111. package/src/components/AtomixGlass/README.md +25 -10
  112. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +216 -0
  113. package/src/components/AtomixGlass/animation-system.ts +578 -0
  114. package/src/components/AtomixGlass/shader-utils.ts +4 -1
  115. package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
  116. package/src/components/AtomixGlass/stories/Phase1-Animation.stories.tsx +653 -0
  117. package/src/components/AtomixGlass/stories/Phase1-Test.stories.tsx +95 -0
  118. package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -51
  119. package/src/components/AtomixGlass/stories/shared-components.tsx +6 -0
  120. package/src/components/Avatar/Avatar.tsx +1 -1
  121. package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
  122. package/src/components/Button/Button.stories.tsx +10 -0
  123. package/src/components/Button/Button.test.tsx +16 -11
  124. package/src/components/Button/Button.tsx +4 -4
  125. package/src/components/Card/Card.tsx +1 -1
  126. package/src/components/Dropdown/Dropdown.tsx +12 -12
  127. package/src/components/Form/Select.tsx +62 -3
  128. package/src/components/Modal/Modal.tsx +14 -3
  129. package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
  130. package/src/components/Slider/Slider.stories.tsx +3 -3
  131. package/src/components/Slider/Slider.tsx +38 -0
  132. package/src/components/Steps/Steps.tsx +3 -3
  133. package/src/components/Tabs/Tabs.tsx +77 -8
  134. package/src/components/Testimonial/Testimonial.tsx +1 -1
  135. package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
  136. package/src/components/TypedButton/TypedButton.tsx +39 -0
  137. package/src/components/TypedButton/index.ts +2 -0
  138. package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
  139. package/src/lib/composables/index.ts +4 -7
  140. package/src/lib/composables/types.ts +45 -0
  141. package/src/lib/composables/useAccordion.ts +0 -7
  142. package/src/lib/composables/useAtomixGlass.ts +148 -6
  143. package/src/lib/composables/useAtomixGlassStyles.ts +9 -7
  144. package/src/lib/composables/useChartExport.ts +3 -13
  145. package/src/lib/composables/useDropdown.ts +66 -0
  146. package/src/lib/composables/useFocusTrap.ts +80 -0
  147. package/src/lib/composables/usePerformanceMonitor.ts +448 -0
  148. package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
  149. package/src/lib/composables/useResponsiveGlass.ts +441 -0
  150. package/src/lib/composables/useTooltip.ts +16 -0
  151. package/src/lib/composables/useTypedButton.ts +66 -0
  152. package/src/lib/config/index.ts +62 -5
  153. package/src/lib/constants/components.ts +62 -7
  154. package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
  155. package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
  156. package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
  157. package/src/lib/types/components.ts +37 -11
  158. package/src/lib/types/glass.ts +35 -0
  159. package/src/lib/types/index.ts +1 -0
  160. package/src/lib/utils/displacement-generator.ts +1 -1
  161. package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
  162. package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
  163. package/src/styles/06-components/_components.atomix-glass.scss +17 -21
  164. package/src/styles/06-components/_components.edge-panel.scss +1 -5
  165. package/src/styles/06-components/_components.modal.scss +1 -4
  166. package/src/styles/06-components/_components.navbar.scss +1 -1
  167. package/src/styles/06-components/_components.testbutton.scss +212 -0
  168. package/src/styles/06-components/_components.testtypecheck.scss +212 -0
  169. package/src/styles/06-components/_components.tooltip.scss +9 -5
  170. package/src/styles/06-components/_components.typedbutton.scss +212 -0
  171. package/src/styles/99-utilities/_index.scss +1 -0
  172. package/src/styles/99-utilities/_utilities.text.scss +1 -1
  173. package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
  174. package/scripts/cli/component-generator.js +0 -564
  175. package/scripts/cli/interactive-init.js +0 -357
  176. package/src/styles/06-components/old.chart.styles.scss +0 -2788
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Glassmorphism & Motion Generator Tests
3
+ * Tests for Phase 3: Premium UI & Animation System
4
+ */
5
+
6
+ import { describe, it, expect, beforeEach } from 'vitest';
7
+ import {
8
+ GLASS_PRESETS,
9
+ generateGlassStyles,
10
+ getGlassPresets,
11
+ validateGlassConfig
12
+ } from '../internal/glass-generator.js';
13
+
14
+ import {
15
+ ANIMATION_PRESETS,
16
+ generateMotionTokens,
17
+ getAnimationPresets
18
+ } from '../internal/motion-generator.js';
19
+
20
+ describe('Glass Generator', () => {
21
+ describe('Glass Presets', () => {
22
+ it('should have all predefined presets', () => {
23
+ const presets = getGlassPresets();
24
+
25
+ expect(presets).toContain('subtle');
26
+ expect(presets).toContain('default');
27
+ expect(presets).toContain('strong');
28
+ expect(presets).toContain('frost');
29
+ expect(presets).toContain('crystal');
30
+ });
31
+
32
+ it('should have valid preset configurations', () => {
33
+ for (const [name, config] of Object.entries(GLASS_PRESETS)) {
34
+ expect(config).toHaveProperty('displacementScale');
35
+ expect(config).toHaveProperty('blurAmount');
36
+ expect(config).toHaveProperty('saturation');
37
+ expect(config).toHaveProperty('opacity');
38
+ expect(config).toHaveProperty('borderOpacity');
39
+
40
+ // Validate ranges
41
+ expect(config.displacementScale).toBeGreaterThanOrEqual(0);
42
+ expect(config.displacementScale).toBeLessThanOrEqual(100);
43
+ expect(config.blurAmount).toBeGreaterThanOrEqual(0);
44
+ expect(config.blurAmount).toBeLessThanOrEqual(50);
45
+ expect(config.opacity).toBeGreaterThanOrEqual(0);
46
+ expect(config.opacity).toBeLessThanOrEqual(1);
47
+ }
48
+ });
49
+ });
50
+
51
+ describe('Glass Styles Generation', () => {
52
+ it('should generate glass styles with default preset', () => {
53
+ const styles = generateGlassStyles('Button', 'default');
54
+
55
+ expect(styles).toContain('.button--glass');
56
+ expect(styles).toContain('backdrop-filter');
57
+ expect(styles).toContain('background: rgba');
58
+ expect(styles).toContain('&:hover');
59
+ });
60
+
61
+ it('should include dark mode styles', () => {
62
+ const styles = generateGlassStyles('Card', 'strong');
63
+
64
+ expect(styles).toContain('.dark .card--glass');
65
+ });
66
+
67
+ it('should include accessibility features', () => {
68
+ const styles = generateGlassStyles('Modal', 'subtle');
69
+
70
+ expect(styles).toContain('prefers-reduced-transparency');
71
+ expect(styles).toContain('prefers-reduced-motion');
72
+ });
73
+
74
+ it('should generate different styles for different presets', () => {
75
+ const subtleStyles = generateGlassStyles('Button', 'subtle');
76
+ const crystalStyles = generateGlassStyles('Button', 'crystal');
77
+
78
+ expect(subtleStyles).not.toBe(crystalStyles);
79
+ expect(crystalStyles).toContain('blur(40px)');
80
+ expect(subtleStyles).toContain('blur(5px)');
81
+ });
82
+ });
83
+
84
+ describe('Glass Config Validation', () => {
85
+ it('should validate correct configuration', () => {
86
+ const result = validateGlassConfig({
87
+ displacementScale: 20,
88
+ blurAmount: 10,
89
+ saturation: 200,
90
+ opacity: 0.15
91
+ });
92
+
93
+ expect(result.valid).toBe(true);
94
+ expect(result.issues).toHaveLength(0);
95
+ });
96
+
97
+ it('should reject invalid displacement scale', () => {
98
+ const result = validateGlassConfig({
99
+ displacementScale: 150 // Out of range
100
+ });
101
+
102
+ expect(result.valid).toBe(false);
103
+ expect(result.issues).toContain('displacementScale must be between 0 and 100');
104
+ });
105
+
106
+ it('should reject invalid blur amount', () => {
107
+ const result = validateGlassConfig({
108
+ blurAmount: -5 // Negative
109
+ });
110
+
111
+ expect(result.valid).toBe(false);
112
+ expect(result.issues).toContain('blurAmount must be between 0 and 50');
113
+ });
114
+
115
+ it('should reject invalid opacity', () => {
116
+ const result = validateGlassConfig({
117
+ opacity: 1.5 // > 1
118
+ });
119
+
120
+ expect(result.valid).toBe(false);
121
+ expect(result.issues).toContain('opacity must be between 0 and 1');
122
+ });
123
+
124
+ it('should accept multiple validation errors', () => {
125
+ const result = validateGlassConfig({
126
+ displacementScale: 200,
127
+ blurAmount: 100,
128
+ opacity: 2
129
+ });
130
+
131
+ expect(result.valid).toBe(false);
132
+ expect(result.issues.length).toBeGreaterThan(2);
133
+ });
134
+ });
135
+ });
136
+
137
+ describe('Motion Generator', () => {
138
+ describe('Animation Presets', () => {
139
+ it('should have all animation presets', () => {
140
+ const presets = getAnimationPresets();
141
+
142
+ expect(presets).toContain('fade');
143
+ expect(presets).toContain('fadeIn');
144
+ expect(presets).toContain('fadeOut');
145
+ expect(presets).toContain('slideInUp');
146
+ expect(presets).toContain('slideInDown');
147
+ expect(presets).toContain('scaleIn');
148
+ expect(presets).toContain('bounce');
149
+ expect(presets).toContain('spin');
150
+ expect(presets).toContain('shake');
151
+ expect(presets).toContain('pulse');
152
+ expect(presets).toContain('shimmer');
153
+ });
154
+
155
+ it('should have valid preset structure', () => {
156
+ for (const [name, preset] of Object.entries(ANIMATION_PRESETS)) {
157
+ expect(preset).toHaveProperty('keyframes');
158
+ expect(preset).toHaveProperty('duration');
159
+ expect(preset).toHaveProperty('easing');
160
+
161
+ // Keyframes should be non-empty string
162
+ expect(typeof preset.keyframes).toBe('string');
163
+ expect(preset.keyframes.length).toBeGreaterThan(0);
164
+ }
165
+ });
166
+ });
167
+
168
+ describe('Motion Tokens Generation', () => {
169
+ it('should generate duration scale tokens', () => {
170
+ const tokens = generateMotionTokens();
171
+
172
+ expect(tokens).toContain('--atomix-duration-instant');
173
+ expect(tokens).toContain('--atomix-duration-fast');
174
+ expect(tokens).toContain('--atomix-duration-base');
175
+ expect(tokens).toContain('--atomix-duration-slow');
176
+ });
177
+
178
+ it('should generate easing tokens', () => {
179
+ const tokens = generateMotionTokens();
180
+
181
+ expect(tokens).toContain('--atomix-easing-linear');
182
+ expect(tokens).toContain('--atomix-ease-in');
183
+ expect(tokens).toContain('--atomix-ease-out');
184
+ expect(tokens).toContain('--atomix-ease-in-out');
185
+ expect(tokens).toContain('--atomix-easing-smooth');
186
+ });
187
+
188
+ it('should generate keyframe definitions', () => {
189
+ const tokens = generateMotionTokens();
190
+
191
+ expect(tokens).toContain('@keyframes atomix-fade-in');
192
+ expect(tokens).toContain('@keyframes atomix-slide-in-up');
193
+ expect(tokens).toContain('@keyframes atomix-scale-in');
194
+ expect(tokens).toContain('@keyframes atomix-bounce');
195
+ expect(tokens).toContain('@keyframes atomix-spin');
196
+ });
197
+
198
+ it('should generate utility classes', () => {
199
+ const tokens = generateMotionTokens();
200
+
201
+ expect(tokens).toContain('.atomix-animate-fade-in');
202
+ expect(tokens).toContain('.atomix-animate-slide-in-up');
203
+ expect(tokens).toContain('.atomix-animate-scale-in');
204
+ expect(tokens).toContain('.atomix-animate-spin');
205
+ });
206
+
207
+ it('should include reduced motion media query', () => {
208
+ const tokens = generateMotionTokens();
209
+
210
+ expect(tokens).toContain('@media (prefers-reduced-motion: reduce)');
211
+ expect(tokens).toContain('animation-duration: 0.01ms !important');
212
+ });
213
+
214
+ it('should generate transition presets', () => {
215
+ const tokens = generateMotionTokens();
216
+
217
+ expect(tokens).toContain('--atomix-transition-fast');
218
+ expect(tokens).toContain('--atomix-transition-base');
219
+ expect(tokens).toContain('--atomix-transition-colors');
220
+ expect(tokens).toContain('--atomix-transition-opacity');
221
+ });
222
+ });
223
+
224
+ describe('Component Animation Generation', () => {
225
+ it('should generate component-specific animation config', () => {
226
+ // This would be tested through generateComponentAnimation
227
+ // which is exported but we're testing the pattern here
228
+ expect(ANIMATION_PRESETS.fade).toBeDefined();
229
+ expect(ANIMATION_PRESETS.fade.duration).toBe('var(--atomix-duration-base)');
230
+ });
231
+ });
232
+ });
233
+
234
+ describe('Integration Tests', () => {
235
+ it('should work together for premium components', () => {
236
+ // Verify both generators can be used together
237
+ const glassStyles = generateGlassStyles('PremiumCard', 'crystal');
238
+ const motionTokens = generateMotionTokens();
239
+
240
+ expect(glassStyles).toBeDefined();
241
+ expect(motionTokens).toBeDefined();
242
+
243
+ // Both should include accessibility features
244
+ expect(glassStyles).toContain('prefers-reduced');
245
+ expect(motionTokens).toContain('prefers-reduced-motion');
246
+ });
247
+
248
+ it('should provide consistent design tokens', () => {
249
+ const glassConfig = GLASS_PRESETS.default;
250
+ const fadeAnimation = ANIMATION_PRESETS.fade;
251
+
252
+ // Both should use CSS custom properties for theming
253
+ expect(fadeAnimation.duration).toContain('var(--');
254
+ expect(fadeAnimation.easing).toContain('var(--');
255
+ });
256
+ });