@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
+ * CLI Utilities Tests
3
+ */
4
+
5
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
6
+ import {
7
+ validatePath,
8
+ validateComponentName,
9
+ validateThemeName,
10
+ sanitizeInput,
11
+ fileExists,
12
+ AtomixCLIError
13
+ } from '../utils.js';
14
+ import { mkdtemp, rm, writeFile } from 'fs/promises';
15
+ import { join } from 'path';
16
+ import { tmpdir } from 'os';
17
+
18
+ describe('CLI Utils', () => {
19
+ let tempDir;
20
+
21
+ beforeEach(async () => {
22
+ tempDir = await mkdtemp(join(tmpdir(), 'atomix-test-'));
23
+ });
24
+
25
+ afterEach(async () => {
26
+ await rm(tempDir, { recursive: true, force: true });
27
+ });
28
+
29
+ describe('validatePath', () => {
30
+ it('should accept valid relative paths', () => {
31
+ const result = validatePath('./src/components', tempDir);
32
+ expect(result.isValid).toBe(true);
33
+ expect(result.safePath).toContain('src/components');
34
+ });
35
+
36
+ it('should reject paths outside project directory', () => {
37
+ const result = validatePath('../../etc/passwd', tempDir);
38
+ expect(result.isValid).toBe(false);
39
+ expect(result.error).toContain('outside the project directory');
40
+ });
41
+
42
+ it('should reject sensitive files', () => {
43
+ const result = validatePath('.env', tempDir);
44
+ expect(result.isValid).toBe(false);
45
+ expect(result.error).toContain('sensitive path');
46
+ });
47
+
48
+ it('should handle absolute paths within project', () => {
49
+ const validPath = join(tempDir, 'src', 'components');
50
+ const result = validatePath(validPath, tempDir);
51
+ expect(result.isValid).toBe(true);
52
+ });
53
+
54
+ it('should normalize paths correctly', () => {
55
+ const result = validatePath('./src/../src/components', tempDir);
56
+ expect(result.isValid).toBe(true);
57
+ expect(result.safePath).toContain('src/components');
58
+ });
59
+ });
60
+
61
+ describe('validateComponentName', () => {
62
+ it('should accept valid PascalCase names', () => {
63
+ const validNames = ['Button', 'CardHeader', 'ModalDialog', 'FormInput'];
64
+
65
+ validNames.forEach(name => {
66
+ const result = validateComponentName(name);
67
+ expect(result.isValid).toBe(true);
68
+ });
69
+ });
70
+
71
+ it('should reject invalid names', () => {
72
+ const invalidNames = ['button', 'button-primary', 'Button-Primary', '123Button', ''];
73
+
74
+ invalidNames.forEach(name => {
75
+ const result = validateComponentName(name);
76
+ expect(result.isValid).toBe(false);
77
+ });
78
+ });
79
+
80
+ it('should reject reserved words', () => {
81
+ const reservedWords = ['Component', 'React', 'Fragment', 'Suspense'];
82
+
83
+ reservedWords.forEach(name => {
84
+ const result = validateComponentName(name);
85
+ expect(result.isValid).toBe(false);
86
+ });
87
+ });
88
+ });
89
+
90
+ describe('validateThemeName', () => {
91
+ it('should accept valid kebab-case names', () => {
92
+ const validNames = ['dark-theme', 'light', 'high-contrast', 'custom-brand'];
93
+
94
+ validNames.forEach(name => {
95
+ const result = validateThemeName(name);
96
+ expect(result.isValid).toBe(true);
97
+ });
98
+ });
99
+
100
+ it('should reject invalid theme names', () => {
101
+ const invalidNames = ['DarkTheme', 'theme_dark', 'Theme-Dark', '123theme', ''];
102
+
103
+ invalidNames.forEach(name => {
104
+ const result = validateThemeName(name);
105
+ expect(result.isValid).toBe(false);
106
+ });
107
+ });
108
+ });
109
+
110
+ describe('sanitizeInput', () => {
111
+ it('should remove dangerous shell characters', () => {
112
+ const dangerousInputs = [
113
+ 'test; rm -rf /',
114
+ 'input && malicious-command',
115
+ 'command | pipe',
116
+ '`substitution`',
117
+ '$(command)',
118
+ 'input > /dev/null'
119
+ ];
120
+
121
+ dangerousInputs.forEach(input => {
122
+ const sanitized = sanitizeInput(input);
123
+ expect(sanitized).not.toMatch(/[;&|`$<>]/);
124
+ });
125
+ });
126
+
127
+ it('should preserve safe characters', () => {
128
+ const safeInput = 'Button-Component_123';
129
+ const sanitized = sanitizeInput(safeInput);
130
+ expect(sanitized).toBe(safeInput);
131
+ });
132
+ });
133
+
134
+ describe('fileExists', () => {
135
+ it('should return true for existing files', async () => {
136
+ const testFile = join(tempDir, 'test.txt');
137
+ await writeFile(testFile, 'test content');
138
+
139
+ const exists = await fileExists(testFile);
140
+ expect(exists).toBe(true);
141
+ });
142
+
143
+ it('should return false for non-existing files', async () => {
144
+ const nonExistent = join(tempDir, 'nonexistent.txt');
145
+ const exists = await fileExists(nonExistent);
146
+ expect(exists).toBe(false);
147
+ });
148
+ });
149
+
150
+ describe('AtomixCLIError', () => {
151
+ it('should create error with code and suggestions', () => {
152
+ const suggestions = ['Use PascalCase', 'Start with letter'];
153
+ const error = new AtomixCLIError('Invalid name', 'INVALID_NAME', suggestions);
154
+
155
+ expect(error.message).toBe('Invalid name');
156
+ expect(error.code).toBe('INVALID_NAME');
157
+ expect(error.suggestions).toEqual(suggestions);
158
+ expect(error.name).toBe('AtomixCLIError');
159
+ });
160
+ });
161
+ });