@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.
- package/CHANGELOG.md +20 -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 +203 -90
- 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 +1 -1
- package/dist/charts.js +86 -57
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +136 -112
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +2 -5
- package/dist/forms.js +140 -128
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +136 -112
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +9 -61
- package/dist/index.esm.js +237 -286
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +250 -299
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +170 -73
- 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 +161 -0
- package/scripts/cli/component-generator.js +253 -299
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/interactive-init.js +46 -5
- package/scripts/cli/template-manager.js +0 -2
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +148 -126
- package/scripts/cli/templates/index.js +23 -16
- package/scripts/cli/templates/project-templates.js +151 -23
- package/scripts/cli/templates/react-templates.js +280 -210
- package/scripts/cli/templates/scss-templates.js +90 -91
- package/scripts/cli/templates/testing-templates.js +206 -27
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/types-templates.js +70 -56
- package/scripts/cli/theme-bridge.js +8 -2
- package/scripts/cli/token-manager.js +318 -206
- package/scripts/cli/utils.js +0 -1
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- 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 +2957 -2853
- 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 +50 -35
- 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 +213 -1
- package/src/components/Badge/Badge.stories.tsx +121 -362
- package/src/components/Block/Block.stories.tsx +21 -12
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +46 -50
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Callout/Callout.stories.tsx +289 -634
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Chart/Chart.stories.tsx +150 -8
- 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/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
- 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 +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +87 -51
- package/src/components/Form/Form.stories.tsx +119 -20
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Radio.stories.tsx +140 -5
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/Modal/Modal.stories.tsx +181 -42
- package/src/components/Popover/Popover.stories.tsx +448 -98
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Spinner/Spinner.stories.tsx +102 -8
- 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 +120 -3
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +126 -39
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Upload/Upload.stories.tsx +113 -24
- 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/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/theme/devtools/CLI.ts +1 -1
- package/src/lib/types/components.ts +1 -1
- 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/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.checkbox.scss +23 -17
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- 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/templates-original-backup.js +0 -1655
- package/scripts/cli/templates_backup.js +0 -684
- 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
|
+
* 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
|
+
});
|