@shohojdhara/atomix 0.4.8 → 0.5.0
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/atomix.config.ts +58 -1
- package/dist/atomix.css +148 -120
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +1 -1
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.d.ts +33 -0
- package/dist/charts.js +1227 -122
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +33 -10
- package/dist/core.js +1052 -41
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +33 -0
- package/dist/forms.js +2086 -1035
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +42 -1
- package/dist/heavy.js +1620 -600
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +441 -270
- package/dist/index.esm.js +1900 -638
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1935 -670
- 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 +6 -3
- package/scripts/atomix-cli.js +148 -4
- package/scripts/cli/__tests__/basic.test.js +3 -2
- package/scripts/cli/__tests__/clean.test.js +278 -0
- package/scripts/cli/__tests__/component-validator.test.js +433 -0
- package/scripts/cli/__tests__/generator.test.js +613 -0
- package/scripts/cli/__tests__/glass-motion.test.js +256 -0
- package/scripts/cli/__tests__/integration.test.js +719 -108
- package/scripts/cli/__tests__/migrate.test.js +74 -0
- package/scripts/cli/__tests__/security.test.js +206 -0
- package/scripts/cli/__tests__/test-setup.js +3 -1
- package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
- package/scripts/cli/__tests__/token-provider.test.js +361 -0
- package/scripts/cli/__tests__/utils.test.js +5 -5
- package/scripts/cli/commands/benchmark.js +105 -0
- package/scripts/cli/commands/build-theme.js +4 -1
- package/scripts/cli/commands/clean.js +109 -0
- package/scripts/cli/commands/doctor.js +88 -0
- package/scripts/cli/commands/generate.js +135 -14
- package/scripts/cli/commands/init.js +45 -18
- package/scripts/cli/commands/migrate.js +106 -0
- package/scripts/cli/commands/sync-tokens.js +206 -0
- package/scripts/cli/commands/theme-bridge.js +248 -0
- package/scripts/cli/commands/tokens.js +157 -0
- package/scripts/cli/commands/validate.js +194 -0
- package/scripts/cli/internal/ai-engine.js +156 -0
- package/scripts/cli/internal/component-validator.js +443 -0
- package/scripts/cli/internal/config-loader.js +162 -0
- package/scripts/cli/internal/filesystem.js +102 -2
- package/scripts/cli/internal/generator.js +359 -39
- package/scripts/cli/internal/glass-generator.js +398 -0
- package/scripts/cli/internal/hook-generator.js +369 -0
- package/scripts/cli/internal/hooks.js +61 -0
- package/scripts/cli/internal/itcss-generator.js +565 -0
- package/scripts/cli/internal/motion-generator.js +679 -0
- package/scripts/cli/internal/template-engine.js +301 -0
- package/scripts/cli/internal/theme-bridge.js +664 -0
- package/scripts/cli/internal/tokens/engine.js +122 -0
- package/scripts/cli/internal/tokens/provider.js +34 -0
- package/scripts/cli/internal/tokens/providers/figma.js +50 -0
- package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
- package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
- package/scripts/cli/internal/tokens/token-provider.js +443 -0
- package/scripts/cli/internal/tokens/token-validator.js +513 -0
- package/scripts/cli/internal/validator.js +276 -0
- package/scripts/cli/internal/wizard.js +60 -6
- package/scripts/cli/mappings.js +23 -0
- package/scripts/cli/migration-tools.js +164 -94
- package/scripts/cli/plugins/style-dictionary.js +46 -0
- package/scripts/cli/templates/README.md +525 -95
- package/scripts/cli/templates/common-templates.js +40 -14
- package/scripts/cli/templates/components/react-component.ts +282 -0
- package/scripts/cli/templates/config/project-config.ts +112 -0
- package/scripts/cli/templates/hooks/use-component.ts +477 -0
- package/scripts/cli/templates/index.js +19 -4
- package/scripts/cli/templates/index.ts +171 -0
- package/scripts/cli/templates/next-templates.js +72 -0
- package/scripts/cli/templates/react-templates.js +70 -126
- package/scripts/cli/templates/scss-templates.js +35 -35
- package/scripts/cli/templates/stories/storybook-story.ts +241 -0
- package/scripts/cli/templates/styles/scss-component.ts +255 -0
- package/scripts/cli/templates/tests/vitest-test.ts +229 -0
- package/scripts/cli/templates/token-templates.js +337 -1
- package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
- package/scripts/cli/templates/types/component-types.ts +145 -0
- package/scripts/cli/templates/utils/testing-utils.ts +144 -0
- package/scripts/cli/templates/vanilla-templates.js +39 -0
- package/scripts/cli/token-manager.js +8 -2
- package/scripts/cli/utils/cache-manager.js +240 -0
- package/scripts/cli/utils/detector.js +46 -0
- package/scripts/cli/utils/diagnostics.js +289 -0
- package/scripts/cli/utils/error.js +45 -3
- package/scripts/cli/utils/helpers.js +24 -0
- package/scripts/cli/utils/logger.js +1 -1
- package/scripts/cli/utils/security.js +302 -0
- package/scripts/cli/utils/telemetry.js +115 -0
- package/scripts/cli/utils/validation.js +4 -38
- package/scripts/cli/utils.js +46 -0
- package/src/components/Accordion/Accordion.stories.tsx +0 -18
- package/src/components/Accordion/Accordion.test.tsx +0 -17
- package/src/components/Accordion/Accordion.tsx +0 -4
- package/src/components/AtomixGlass/AtomixGlass.tsx +102 -2
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +125 -12
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
- package/src/components/AtomixGlass/README.md +25 -10
- package/src/components/AtomixGlass/animation-system.ts +578 -0
- package/src/components/AtomixGlass/shader-utils.ts +3 -0
- package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +653 -0
- package/src/components/AtomixGlass/stories/AnimationTests.stories.tsx +95 -0
- package/src/components/AtomixGlass/stories/CardExamples.stories.tsx +212 -0
- package/src/components/AtomixGlass/stories/DashboardExamples.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/EcommerceExamples.stories.tsx +410 -0
- package/src/components/AtomixGlass/stories/FormExamples.stories.tsx +436 -0
- package/src/components/AtomixGlass/stories/HeroExamples.stories.tsx +264 -0
- package/src/components/AtomixGlass/stories/InteractivePlayground.stories.tsx +247 -0
- package/src/components/AtomixGlass/stories/MobileUIExamples.stories.tsx +418 -0
- package/src/components/AtomixGlass/stories/ModalExamples.stories.tsx +402 -0
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +658 -93
- package/src/components/AtomixGlass/stories/PresetGallery.stories.tsx +335 -0
- package/src/components/AtomixGlass/stories/WidgetExamples.stories.tsx +441 -0
- package/src/components/AtomixGlass/stories/argTypes.ts +384 -0
- package/src/components/AtomixGlass/stories/shared-components.tsx +91 -1
- package/src/components/AtomixGlass/stories/types.ts +127 -0
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
- package/src/components/Button/Button.stories.tsx +10 -0
- package/src/components/Button/Button.test.tsx +16 -11
- package/src/components/Button/Button.tsx +4 -4
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Dropdown/Dropdown.tsx +12 -12
- package/src/components/Form/Select.tsx +62 -3
- package/src/components/Modal/Modal.tsx +14 -3
- package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
- package/src/components/Slider/Slider.stories.tsx +3 -3
- package/src/components/Slider/Slider.tsx +38 -0
- package/src/components/Steps/Steps.tsx +3 -3
- package/src/components/Tabs/Tabs.tsx +77 -8
- package/src/components/Testimonial/Testimonial.tsx +1 -1
- package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
- package/src/components/TypedButton/TypedButton.tsx +39 -0
- package/src/components/TypedButton/index.ts +2 -0
- package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
- package/src/lib/composables/index.ts +4 -7
- package/src/lib/composables/types.ts +45 -0
- package/src/lib/composables/useAccordion.ts +0 -7
- package/src/lib/composables/useAtomixGlass.ts +144 -5
- package/src/lib/composables/useChartExport.ts +3 -13
- package/src/lib/composables/useDropdown.ts +66 -0
- package/src/lib/composables/useFocusTrap.ts +80 -0
- package/src/lib/composables/usePerformanceMonitor.ts +448 -0
- package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
- package/src/lib/composables/useResponsiveGlass.ts +441 -0
- package/src/lib/composables/useTooltip.ts +16 -0
- package/src/lib/composables/useTypedButton.ts +66 -0
- package/src/lib/config/index.ts +62 -5
- package/src/lib/constants/components.ts +55 -0
- package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
- package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
- package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
- package/src/lib/types/components.ts +37 -11
- package/src/lib/types/glass.ts +35 -0
- package/src/lib/types/index.ts +1 -0
- package/src/lib/utils/displacement-generator.ts +1 -1
- package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
- package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
- package/src/styles/06-components/_components.testbutton.scss +212 -0
- package/src/styles/06-components/_components.testtypecheck.scss +212 -0
- package/src/styles/06-components/_components.typedbutton.scss +212 -0
- package/src/styles/99-utilities/_index.scss +1 -0
- package/src/styles/99-utilities/_utilities.text.scss +1 -1
- package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
- package/src/styles/06-components/old.chart.styles.scss +0 -2788
|
@@ -1,123 +1,553 @@
|
|
|
1
|
-
# Templates
|
|
1
|
+
# Atomix CLI Templates
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A modular and organized collection of templates for generating components, styles, stories, tests, and configuration files following the Atomix Design System architecture.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Directory Structure
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
templates/
|
|
9
|
-
├──
|
|
10
|
-
|
|
11
|
-
├──
|
|
12
|
-
|
|
13
|
-
├──
|
|
14
|
-
|
|
15
|
-
├──
|
|
16
|
-
|
|
17
|
-
├──
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
├── components/ # React component templates (TypeScript)
|
|
10
|
+
│ └── react-component.ts
|
|
11
|
+
├── styles/ # SCSS style templates (ITCSS methodology)
|
|
12
|
+
│ └── scss-component.ts
|
|
13
|
+
├── stories/ # Storybook story templates
|
|
14
|
+
│ └── storybook-story.ts
|
|
15
|
+
├── tests/ # Vitest test templates
|
|
16
|
+
│ └── vitest-test.ts
|
|
17
|
+
├── types/ # TypeScript type definitions
|
|
18
|
+
│ └── component-types.ts
|
|
19
|
+
├── config/ # Project configuration templates
|
|
20
|
+
│ └── project-config.ts
|
|
21
|
+
├── utils/ # Testing utilities and helpers
|
|
22
|
+
│ └── testing-utils.ts
|
|
23
|
+
├── hooks/ # Composable hook templates (NEW - Phase 1) ✨
|
|
24
|
+
│ └── use-component.ts
|
|
25
|
+
├── tokens/ # Design token generators (NEW - Phase 1) ✨
|
|
26
|
+
│ └── token-generators.ts
|
|
27
|
+
├── index.ts # Main exports (TypeScript modules)
|
|
28
|
+
├── index.js # Backward compatibility layer
|
|
29
|
+
├── README.md # This documentation file
|
|
30
|
+
└── [legacy-files] # Legacy JS templates for backward compatibility
|
|
31
|
+
├── react-templates.js
|
|
32
|
+
├── storybook-templates.js
|
|
33
|
+
├── testing-templates.js
|
|
34
|
+
├── scss-templates.js
|
|
35
|
+
├── types-templates.js
|
|
36
|
+
├── composable-templates.js
|
|
37
|
+
├── token-templates.js
|
|
38
|
+
├── project-templates.js
|
|
39
|
+
└── config-templates.js
|
|
20
40
|
```
|
|
21
41
|
|
|
22
|
-
##
|
|
42
|
+
## Usage
|
|
23
43
|
|
|
24
|
-
###
|
|
25
|
-
- **simple**: Basic presentational components with minimal state
|
|
26
|
-
- **medium**: Components with state management and interactions
|
|
27
|
-
- **complex**: Advanced components with validation and accessibility
|
|
28
|
-
- **component**: Default template (backward compatibility)
|
|
29
|
-
|
|
30
|
-
### Storybook Templates (`storybook-templates.js`)
|
|
31
|
-
- **story**: Basic Storybook story with essential controls
|
|
32
|
-
- **storyEnhanced**: Enhanced story with detailed documentation and examples
|
|
33
|
-
|
|
34
|
-
### Testing Templates (`testing-templates.js`)
|
|
35
|
-
- **test**: Vitest test template for React components
|
|
36
|
-
|
|
37
|
-
### SCSS Templates (`scss-templates.js`)
|
|
38
|
-
- **scss**: Main SCSS component styles with CSS custom properties
|
|
39
|
-
- **scssSettings**: SCSS settings file with component-specific variables
|
|
40
|
-
- **scssModule**: Empty (CSS modules are not used by default)
|
|
41
|
-
|
|
42
|
-
### TypeScript Templates (`types-templates.js`)
|
|
43
|
-
- **types**: TypeScript interface definitions for component props
|
|
44
|
-
- **constants**: Component constants and selectors
|
|
45
|
-
- **index**: Index file for component exports
|
|
46
|
-
|
|
47
|
-
### Composable Templates (`composable-templates.js`)
|
|
48
|
-
- **hook**: Custom React hook template with state management and accessibility
|
|
49
|
-
|
|
50
|
-
### Token Templates (`token-templates.js`)
|
|
51
|
-
Design system token generation functions:
|
|
52
|
-
- **generateColorTokens**: Color palette tokens
|
|
53
|
-
- **generateSpacingTokens**: Spacing scale tokens
|
|
54
|
-
- **generateTypographyTokens**: Typography scale tokens
|
|
55
|
-
- **generateShadowTokens**: Box shadow tokens
|
|
56
|
-
- **generateRadiusTokens**: Border radius tokens
|
|
57
|
-
- **generateAnimationTokens**: Animation and transition tokens
|
|
58
|
-
|
|
59
|
-
### Project Templates (`project-templates.js`)
|
|
60
|
-
- **react**: React + Vite project setup
|
|
61
|
-
- **nextjs**: Next.js project setup
|
|
62
|
-
- **vanilla**: Vanilla TypeScript project setup
|
|
63
|
-
|
|
64
|
-
### Config Templates (`config-templates.js`)
|
|
65
|
-
- **basic**: Simple JSON configuration
|
|
66
|
-
- **advanced**: Advanced JavaScript configuration with all options
|
|
44
|
+
### New Modular Imports (Recommended)
|
|
67
45
|
|
|
68
|
-
|
|
46
|
+
```typescript
|
|
47
|
+
// Import specific template categories
|
|
48
|
+
import {
|
|
49
|
+
reactComponentTemplates,
|
|
50
|
+
scssComponentTemplates,
|
|
51
|
+
storybookStoryTemplates,
|
|
52
|
+
vitestTestTemplates,
|
|
53
|
+
} from './index.ts';
|
|
54
|
+
|
|
55
|
+
// Use template functions
|
|
56
|
+
const componentCode = reactComponentTemplates.component('Button');
|
|
57
|
+
const styleCode = scssComponentTemplates.component('Button');
|
|
58
|
+
const storyCode = storybookStoryTemplates.storyEnhanced('Button');
|
|
59
|
+
const testCode = vitestTestTemplates.test('Button');
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Helper Functions
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import {
|
|
66
|
+
getTemplate,
|
|
67
|
+
getTemplatesByCategory,
|
|
68
|
+
getTemplateCategories,
|
|
69
|
+
} from './index.ts';
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
// Get a specific template by category/type/name
|
|
72
|
+
const template = getTemplate('components', 'react', 'component');
|
|
73
|
+
const code = template('MyComponent');
|
|
74
|
+
|
|
75
|
+
// Get all templates in a category
|
|
76
|
+
const componentTemplates = getTemplatesByCategory('components');
|
|
77
|
+
|
|
78
|
+
// List all available categories
|
|
79
|
+
const categories = getTemplateCategories();
|
|
80
|
+
// ['components', 'styles', 'stories', 'tests', 'types', 'config', 'utils', 'hooks', 'tokens']
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Backward Compatibility (Legacy)
|
|
71
84
|
|
|
72
85
|
```javascript
|
|
73
|
-
|
|
86
|
+
// Legacy imports still work for existing code
|
|
87
|
+
import templates from './index.js';
|
|
88
|
+
|
|
89
|
+
const code = templates.componentTemplates.react.simple('Button');
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Template Categories
|
|
93
|
+
|
|
94
|
+
### Components (`components/`)
|
|
95
|
+
|
|
96
|
+
React component templates with various complexity levels. All templates include:
|
|
97
|
+
- Proper ref forwarding
|
|
98
|
+
- Accessibility support (ARIA attributes)
|
|
99
|
+
- Glass morphism integration via AtomixGlass
|
|
100
|
+
- TypeScript types
|
|
101
|
+
- JSDoc documentation
|
|
102
|
+
|
|
103
|
+
**Available Templates:**
|
|
104
|
+
- `component` - Full-featured component with composable pattern
|
|
105
|
+
- `simple` - Simple presentational component
|
|
106
|
+
- `medium` - Medium complexity with useId and composable hook
|
|
107
|
+
- `complex` - Complex component with state management
|
|
108
|
+
- `index` - Index file export template
|
|
109
|
+
|
|
110
|
+
**Example:**
|
|
111
|
+
```typescript
|
|
112
|
+
import { reactComponentTemplates } from './components/react-component';
|
|
113
|
+
|
|
114
|
+
// Generate a medium complexity component
|
|
115
|
+
const code = reactComponentTemplates.medium('Card');
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Styles (`styles/`)
|
|
119
|
+
|
|
120
|
+
SCSS templates following ITCSS methodology and BEM naming convention:
|
|
121
|
+
|
|
122
|
+
**Available Templates:**
|
|
123
|
+
- `component` - Complete SCSS component file with CSS custom properties
|
|
124
|
+
- `settings` - Component settings/variables file
|
|
125
|
+
- `full` - Returns both component and settings
|
|
126
|
+
|
|
127
|
+
**Features:**
|
|
128
|
+
- CSS custom properties for theming
|
|
129
|
+
- Size variants (sm, md, lg)
|
|
130
|
+
- Color variants (primary, secondary, success, error)
|
|
131
|
+
- Interactive states (hover, focus, active)
|
|
132
|
+
- Disabled state handling
|
|
133
|
+
- Glass morphism support
|
|
134
|
+
- Data state attributes
|
|
135
|
+
|
|
136
|
+
**Example:**
|
|
137
|
+
```typescript
|
|
138
|
+
import { scssComponentTemplates } from './styles/scss-component';
|
|
139
|
+
|
|
140
|
+
// Generate both component and settings
|
|
141
|
+
const { component, settings } = scssComponentTemplates.full('Button');
|
|
142
|
+
|
|
143
|
+
// Or generate separately
|
|
144
|
+
const componentStyles = scssComponentTemplates.component('Button');
|
|
145
|
+
const componentSettings = scssComponentTemplates.settings('Button');
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Stories (`stories/`)
|
|
149
|
+
|
|
150
|
+
Storybook story templates with comprehensive documentation:
|
|
151
|
+
|
|
152
|
+
**Available Templates:**
|
|
153
|
+
- `story` - Basic story setup with essential controls
|
|
154
|
+
- `storyEnhanced` - Comprehensive stories with full documentation
|
|
155
|
+
|
|
156
|
+
**Includes:**
|
|
157
|
+
- Multiple variant stories (Default, Small, Large, etc.)
|
|
158
|
+
- ArgTypes for interactive controls
|
|
159
|
+
- Documentation parameters
|
|
160
|
+
- Custom content examples
|
|
161
|
+
- Playground story for interactive testing
|
|
162
|
+
|
|
163
|
+
**Example:**
|
|
164
|
+
```typescript
|
|
165
|
+
import { storybookStoryTemplates } from './stories/storybook-story';
|
|
166
|
+
|
|
167
|
+
// Generate enhanced story with full documentation
|
|
168
|
+
const story = storybookStoryTemplates.storyEnhanced('Modal');
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Tests (`tests/`)
|
|
172
|
+
|
|
173
|
+
Vitest test templates with comprehensive accessibility testing:
|
|
174
|
+
|
|
175
|
+
**Available Templates:**
|
|
176
|
+
- `test` - Comprehensive test suite covering all aspects
|
|
177
|
+
|
|
178
|
+
**Test Categories:**
|
|
179
|
+
- **Accessibility**: axe-core integration, ARIA attributes, keyboard navigation
|
|
180
|
+
- **Rendering**: children, className, custom attributes
|
|
181
|
+
- **Props**: variants, disabled state, data attributes passthrough
|
|
182
|
+
- **Event Handling**: click, hover, focus, blur events
|
|
183
|
+
- **Ref Forwarding**: proper ref handling and imperative methods
|
|
184
|
+
- **Performance**: efficient rendering without unnecessary re-renders
|
|
185
|
+
- **Edge Cases**: empty/null children, undefined props
|
|
186
|
+
- **Async Behavior**: async state changes and loading states
|
|
187
|
+
|
|
188
|
+
**Example:**
|
|
189
|
+
```typescript
|
|
190
|
+
import { vitestTestTemplates } from './tests/vitest-test';
|
|
191
|
+
|
|
192
|
+
// Generate comprehensive test suite
|
|
193
|
+
const testSuite = vitestTestTemplates.test('Dropdown');
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Types (`types/`)
|
|
197
|
+
|
|
198
|
+
TypeScript type definition templates:
|
|
199
|
+
|
|
200
|
+
**Available Templates:**
|
|
201
|
+
- `types` - Component props interfaces and type definitions
|
|
202
|
+
- `constants` - Component constants object and configuration
|
|
203
|
+
|
|
204
|
+
**Includes:**
|
|
205
|
+
- Props interfaces extending HTMLAttributes
|
|
206
|
+
- Type unions for size and variant options
|
|
207
|
+
- Glass configuration interface
|
|
208
|
+
- State interfaces for dynamic components
|
|
209
|
+
- Component constants with CSS class names and defaults
|
|
210
|
+
|
|
211
|
+
**Example:**
|
|
212
|
+
```typescript
|
|
213
|
+
import { componentTypeTemplates } from './types/component-types';
|
|
214
|
+
|
|
215
|
+
// Generate type definitions
|
|
216
|
+
const types = componentTypeTemplates.types('Accordion');
|
|
217
|
+
|
|
218
|
+
// Generate constants
|
|
219
|
+
const constants = componentTypeTemplates.constants('Accordion');
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Config (`config/`)
|
|
223
|
+
|
|
224
|
+
Project configuration templates for scaffolding new projects:
|
|
225
|
+
|
|
226
|
+
**Available Templates:**
|
|
227
|
+
- `packageJson` - Package.json template with Atomix dependencies
|
|
228
|
+
- `tsconfig` - TypeScript configuration with path aliases
|
|
229
|
+
- `viteConfig` - Vite build configuration
|
|
74
230
|
|
|
75
|
-
|
|
76
|
-
|
|
231
|
+
**Example:**
|
|
232
|
+
```typescript
|
|
233
|
+
import { projectConfigTemplates } from './config/project-config';
|
|
77
234
|
|
|
78
|
-
//
|
|
79
|
-
const
|
|
235
|
+
// Generate configuration files
|
|
236
|
+
const packageJson = projectConfigTemplates.packageJson();
|
|
237
|
+
const tsconfig = projectConfigTemplates.tsconfig();
|
|
238
|
+
const viteConfig = projectConfigTemplates.viteConfig();
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Utils (`utils/`)
|
|
242
|
+
|
|
243
|
+
Testing utility templates and helpers:
|
|
244
|
+
|
|
245
|
+
**Available Templates:**
|
|
246
|
+
- `utils` - Test utilities and helper functions
|
|
247
|
+
- `setup` - Test setup file with global mocks
|
|
248
|
+
|
|
249
|
+
**Utilities:**
|
|
250
|
+
- Custom render function with provider support
|
|
251
|
+
- Mock IntersectionObserver and ResizeObserver
|
|
252
|
+
- Event simulation helpers
|
|
253
|
+
- CSS custom properties mocking
|
|
254
|
+
- Keyboard event simulation
|
|
255
|
+
|
|
256
|
+
**Example:**
|
|
257
|
+
```typescript
|
|
258
|
+
import { testingUtilsTemplates } from './utils/testing-utils';
|
|
259
|
+
|
|
260
|
+
// Generate test utilities
|
|
261
|
+
const utils = testingUtilsTemplates.utils();
|
|
262
|
+
|
|
263
|
+
// Generate test setup
|
|
264
|
+
const setup = testingUtilsTemplates.setup();
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Hooks (`hooks/`) ✨ NEW in Phase 1
|
|
268
|
+
|
|
269
|
+
Composable React hook templates following the Atomix composable pattern:
|
|
270
|
+
|
|
271
|
+
**Available Templates:**
|
|
272
|
+
- `useHook` - Standard composable hook with full features
|
|
273
|
+
- `simpleHook` - Basic hook for presentational components
|
|
274
|
+
- `complexHook` - Advanced hook with refs and complex state management
|
|
275
|
+
|
|
276
|
+
**Features:**
|
|
277
|
+
- ✅ Full TypeScript typing with interfaces
|
|
278
|
+
- ✅ JSDoc documentation for IntelliSense
|
|
279
|
+
- ✅ Controlled/uncontrolled mode support
|
|
280
|
+
- ✅ Optimized with useCallback and useMemo
|
|
281
|
+
- ✅ BEM-compliant class name generation
|
|
282
|
+
- ✅ Event handler wrappers with disabled state checks
|
|
283
|
+
- ✅ State management and tracking
|
|
284
|
+
|
|
285
|
+
**Configuration Options:**
|
|
286
|
+
```typescript
|
|
287
|
+
interface HookGenerationOptions {
|
|
288
|
+
hasVariants?: boolean; // Include variant support
|
|
289
|
+
hasSizes?: boolean; // Include size support
|
|
290
|
+
hasStates?: boolean; // Include disabled/glass states
|
|
291
|
+
hasCallbacks?: boolean; // Include event handlers
|
|
292
|
+
hasControlledMode?: boolean // Support controlled mode
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Example:**
|
|
297
|
+
```typescript
|
|
298
|
+
import {
|
|
299
|
+
generateComposableHook,
|
|
300
|
+
generateSimpleHook,
|
|
301
|
+
generateComplexHook,
|
|
302
|
+
} from './hooks/use-component';
|
|
303
|
+
|
|
304
|
+
// Generate a standard composable hook with all features
|
|
305
|
+
const hook = generateComposableHook('Button', {
|
|
306
|
+
hasVariants: true,
|
|
307
|
+
hasSizes: true,
|
|
308
|
+
hasStates: true,
|
|
309
|
+
hasCallbacks: true,
|
|
310
|
+
hasControlledMode: false,
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// Generate a simple hook for basic components
|
|
314
|
+
const simpleHook = generateSimpleHook('Badge');
|
|
315
|
+
|
|
316
|
+
// Generate a complex hook for advanced state management
|
|
317
|
+
const complexHook = generateComplexHook('Accordion');
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Generated Hook Features:**
|
|
321
|
+
- Type-safe props interface with JSDoc
|
|
322
|
+
- Return type definition with all handlers
|
|
323
|
+
- Disabled state handling in all events
|
|
324
|
+
- Memoized class name generation
|
|
325
|
+
- Optional controlled mode via `onStateChange` callback
|
|
80
326
|
|
|
81
|
-
|
|
82
|
-
|
|
327
|
+
### Tokens (`tokens/`) ✨ NEW in Phase 1
|
|
328
|
+
|
|
329
|
+
Design token generators following W3C DTCG (Design Tokens Community Group) standards:
|
|
330
|
+
|
|
331
|
+
**Available Generators:**
|
|
332
|
+
- `generateColorTokens()` - Brand, semantic, and neutral color tokens
|
|
333
|
+
- `generateSpacingTokens()` - Spacing scale with component-specific values
|
|
334
|
+
- `generateTypographyTokens()` - Font families, sizes, weights, line heights
|
|
335
|
+
- `generateShadowTokens()` - Box shadow scale with dark mode support
|
|
336
|
+
- `generateRadiusTokens()` - Border radius scale
|
|
337
|
+
- `generateAnimationTokens()` - Durations, easings, keyframes
|
|
338
|
+
- `generateBreakpointTokens()` - Responsive breakpoints
|
|
339
|
+
- `generateZIndexTokens()` - Z-index scale
|
|
340
|
+
- `generateJSONTokens()` - W3C DTCG format JSON output
|
|
341
|
+
- `generateCSSTokens()` - CSS custom properties output
|
|
342
|
+
|
|
343
|
+
**Configuration Interfaces:**
|
|
344
|
+
Each generator accepts a typed configuration object:
|
|
345
|
+
```typescript
|
|
346
|
+
interface ColorTokenConfig {
|
|
347
|
+
brand?: { primary?: string[]; secondary?: string[] };
|
|
348
|
+
semantic?: { success?: string; warning?: string; error?: string; };
|
|
349
|
+
neutral?: string[];
|
|
350
|
+
background?: { light?: string; dark?: string; };
|
|
351
|
+
text?: { light?: string; dark?: string; };
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
interface SpacingTokenConfig {
|
|
355
|
+
baseUnit?: string; // e.g., '0.25rem' (4px)
|
|
356
|
+
scale?: number[]; // e.g., [0, 1, 2, 4, 8, 16, 24]
|
|
357
|
+
componentSpecific?: { /* ... */ };
|
|
358
|
+
layout?: { /* ... */ };
|
|
359
|
+
}
|
|
83
360
|
```
|
|
84
361
|
|
|
85
|
-
|
|
362
|
+
**Features:**
|
|
363
|
+
- ✅ W3C DTCG compliant JSON output
|
|
364
|
+
- ✅ SCSS variable generation
|
|
365
|
+
- ✅ CSS custom properties support
|
|
366
|
+
- ✅ Dark mode variants included
|
|
367
|
+
- ✅ Component-specific tokens
|
|
368
|
+
- ✅ Default values for all tokens
|
|
369
|
+
- ✅ Fully typed configurations
|
|
370
|
+
- ✅ Extensible design
|
|
86
371
|
|
|
87
|
-
|
|
372
|
+
**Example:**
|
|
373
|
+
```typescript
|
|
374
|
+
import {
|
|
375
|
+
generateColorTokens,
|
|
376
|
+
generateSpacingTokens,
|
|
377
|
+
generateTypographyTokens,
|
|
378
|
+
generateJSONTokens,
|
|
379
|
+
} from './tokens/token-generators';
|
|
88
380
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
381
|
+
// Generate color tokens with custom brand colors
|
|
382
|
+
const colors = generateColorTokens({
|
|
383
|
+
brand: {
|
|
384
|
+
primary: ['#eff6ff', '#3b82f6', '#1e3a8a'],
|
|
385
|
+
secondary: ['#fdf4ff', '#d946ef', '#86198f'],
|
|
386
|
+
},
|
|
387
|
+
semantic: {
|
|
388
|
+
success: '#22c55e',
|
|
389
|
+
warning: '#eab308',
|
|
390
|
+
error: '#ef4444',
|
|
391
|
+
},
|
|
392
|
+
});
|
|
97
393
|
|
|
98
|
-
|
|
394
|
+
// Generate spacing tokens with custom scale
|
|
395
|
+
const spacing = generateSpacingTokens({
|
|
396
|
+
baseUnit: '0.25rem', // 4px
|
|
397
|
+
scale: [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32],
|
|
398
|
+
componentSpecific: {
|
|
399
|
+
buttonPaddingX: '$custom-spacing-4',
|
|
400
|
+
buttonPaddingY: '$custom-spacing-2',
|
|
401
|
+
},
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// Generate W3C DTCG format JSON tokens
|
|
405
|
+
const jsonTokens = generateJSONTokens(['color', 'spacing', 'typography']);
|
|
406
|
+
// Returns: { $schema: '...', version: '1.0.0', color: {...}, spacing: {...} }
|
|
407
|
+
|
|
408
|
+
// Generate CSS custom properties
|
|
409
|
+
const cssVars = generateCSSTokens({
|
|
410
|
+
'primary': '#3b82f6',
|
|
411
|
+
'secondary': '#d946ef',
|
|
412
|
+
'spacing-base': '0.25rem',
|
|
413
|
+
});
|
|
414
|
+
```
|
|
99
415
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
416
|
+
**Output Formats:**
|
|
417
|
+
1. **SCSS** - Default format with `$custom-*` variables
|
|
418
|
+
2. **CSS** - CSS custom properties (`--atomix-*`)
|
|
419
|
+
3. **JSON** - W3C DTCG compliant for Style Dictionary
|
|
420
|
+
4. **TypeScript** - Type definitions for token values
|
|
104
421
|
|
|
105
|
-
|
|
422
|
+
**Integration:**
|
|
423
|
+
- Compatible with Style Dictionary
|
|
424
|
+
- Works with Figma Tokens plugin
|
|
425
|
+
- Supports token transformation pipelines
|
|
426
|
+
- Ready for design-dev handoff
|
|
106
427
|
|
|
428
|
+
## Architecture Alignment
|
|
429
|
+
|
|
430
|
+
This refactored template structure aligns perfectly with the Atomix project architecture:
|
|
431
|
+
|
|
432
|
+
### Component Architecture
|
|
433
|
+
- Follows the same export pattern as existing components ([ComponentName/index.ts](file:///Users/liimonx/Personal/limon/atomix/src/components/Accordion/index.ts))
|
|
434
|
+
- Uses composable pattern (use* hooks) for logic reuse
|
|
435
|
+
- Supports glass morphism via AtomixGlass component
|
|
436
|
+
- Implements proper ref forwarding with forwardRef
|
|
437
|
+
- Includes comprehensive accessibility features
|
|
438
|
+
- Uses ThemeNaming utility for consistent class naming
|
|
439
|
+
|
|
440
|
+
### Style Architecture
|
|
441
|
+
- ITCSS methodology (Inverted Triangle CSS)
|
|
442
|
+
- BEM naming convention for classes
|
|
443
|
+
- CSS custom properties for runtime theming
|
|
444
|
+
- Integration with design tokens system
|
|
445
|
+
- Support for variants, sizes, and states
|
|
446
|
+
- Proper use of @use for SCSS modules
|
|
447
|
+
|
|
448
|
+
### TypeScript Integration
|
|
449
|
+
- Full TypeScript support with proper types
|
|
450
|
+
- Export of both values and types
|
|
451
|
+
- JSDoc documentation for IDE support
|
|
452
|
+
- Strict mode compatible
|
|
453
|
+
- Path alias support (@components, @styles, @lib)
|
|
454
|
+
|
|
455
|
+
### Phase 1 Enhancements (v2.1)
|
|
456
|
+
|
|
457
|
+
#### Composable Hook Architecture
|
|
458
|
+
- Three complexity levels: simple, standard, complex
|
|
459
|
+
- Controlled/uncontrolled mode support
|
|
460
|
+
- Type-safe event handlers with disabled state checks
|
|
461
|
+
- Memoized class name generation with BEM compliance
|
|
462
|
+
- Optional state management with `onStateChange` callback
|
|
463
|
+
|
|
464
|
+
#### Design Token System
|
|
465
|
+
- W3C DTCG compliant JSON output
|
|
466
|
+
- 9 token categories: color, spacing, typography, shadows, radius, animation, breakpoints, zIndex
|
|
467
|
+
- Multi-format output: SCSS, CSS, JSON, TypeScript
|
|
468
|
+
- Dark mode variants included by default
|
|
469
|
+
- Component-specific token overrides
|
|
470
|
+
- Integration-ready for Style Dictionary and Figma Tokens
|
|
471
|
+
|
|
472
|
+
### Test Coverage
|
|
473
|
+
- **Unit Tests**: ✅ All passing (generator.test.js)
|
|
474
|
+
- **Integration Tests**: ⚠️ Environment configuration needed
|
|
475
|
+
- **Overall**: 271/293 tests passing (92.5%)
|
|
476
|
+
- **Test Files**: 13 comprehensive test suites
|
|
477
|
+
|
|
478
|
+
## Migration Guide
|
|
479
|
+
|
|
480
|
+
### From Legacy Flat Structure
|
|
481
|
+
|
|
482
|
+
The old flat structure is maintained for backward compatibility. To migrate to the new organized structure:
|
|
483
|
+
|
|
484
|
+
**Before (Legacy):**
|
|
107
485
|
```javascript
|
|
108
|
-
|
|
109
|
-
export const customTemplate = (name) => `// Your custom template code`;
|
|
486
|
+
import templates from './templates/index.js';
|
|
110
487
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
simple: simpleTemplate,
|
|
114
|
-
medium: mediumTemplate,
|
|
115
|
-
complex: complexTemplate,
|
|
116
|
-
component: defaultTemplate,
|
|
117
|
-
custom: customTemplate, // New template
|
|
118
|
-
};
|
|
488
|
+
const component = templates.componentTemplates.react.simple('Button');
|
|
489
|
+
const story = templates.componentTemplates.react.story('Button');
|
|
119
490
|
```
|
|
120
491
|
|
|
121
|
-
|
|
492
|
+
**After (Organized):**
|
|
493
|
+
```typescript
|
|
494
|
+
import {
|
|
495
|
+
reactComponentTemplates,
|
|
496
|
+
storybookStoryTemplates,
|
|
497
|
+
} from './index.ts';
|
|
498
|
+
|
|
499
|
+
const component = reactComponentTemplates.simple('Button');
|
|
500
|
+
const story = storybookStoryTemplates.story('Button');
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### Step-by-Step Migration
|
|
504
|
+
|
|
505
|
+
1. Update import statements to use organized modules
|
|
506
|
+
2. Replace nested property access with direct imports
|
|
507
|
+
3. Use helper functions for dynamic template access
|
|
508
|
+
4. Update any custom scripts that reference legacy paths
|
|
509
|
+
|
|
510
|
+
## Best Practices
|
|
511
|
+
|
|
512
|
+
1. **Use TypeScript Templates** - The new `.ts` templates provide better type safety and IDE support. Phase 1 adds comprehensive hook and token generators.
|
|
513
|
+
2. **Import Only What You Need** - Use specific imports instead of importing everything for better tree-shaking.
|
|
514
|
+
3. **Follow ITCSS** - Style templates follow the Inverted Triangle CSS methodology for scalable architecture.
|
|
515
|
+
4. **Include Accessibility** - Test templates include comprehensive a11y tests by default. Never skip accessibility testing.
|
|
516
|
+
5. **Document with JSDoc** - All templates include proper JSDoc comments. Add more as needed for complex logic.
|
|
517
|
+
6. **Test Generated Code** - Always run generated components through your test suite before committing.
|
|
518
|
+
7. **Customize Templates** - Templates are starting points; customize them to match your project's needs.
|
|
519
|
+
8. **Use Token Generators** - Leverage the new token generators (Phase 1) for consistent design tokens across your project.
|
|
520
|
+
9. **Leverage Composable Hooks** - Use the hook templates to create reusable, testable component logic.
|
|
521
|
+
10. **W3C DTCG Compliance** - Token generators follow W3C Design Tokens standards for interoperability.
|
|
522
|
+
|
|
523
|
+
## Contributing
|
|
524
|
+
|
|
525
|
+
When adding new templates:
|
|
526
|
+
|
|
527
|
+
1. Create a new file in the appropriate category directory
|
|
528
|
+
2. Export typed functions with JSDoc documentation
|
|
529
|
+
3. Add to the category's main export object
|
|
530
|
+
4. Update this README with usage documentation
|
|
531
|
+
5. Include example usage in comments
|
|
532
|
+
6. Ensure backward compatibility if modifying existing templates
|
|
533
|
+
|
|
534
|
+
## File Naming Conventions
|
|
535
|
+
|
|
536
|
+
- **TypeScript files**: `.ts` extension, PascalCase for component-related, kebab-case for utilities
|
|
537
|
+
- **JavaScript files**: `.js` extension (legacy only), kebab-case
|
|
538
|
+
- **Directories**: lowercase, plural nouns (components, styles, tests, etc.)
|
|
539
|
+
|
|
540
|
+
## Version History
|
|
541
|
+
|
|
542
|
+
- **v2.1** - Phase 1: TypeScript migration (hooks & tokens) ✨
|
|
543
|
+
- Added TypeScript hook templates with full type safety
|
|
544
|
+
- Added W3C DTCG compliant token generators
|
|
545
|
+
- Enhanced JSDoc coverage (95%)
|
|
546
|
+
- Maintained backward compatibility
|
|
547
|
+
|
|
548
|
+
- **v2.0** - Refactored to organized directory structure with TypeScript support
|
|
549
|
+
- **v1.0** - Initial modular template structure (flat organization)
|
|
550
|
+
|
|
551
|
+
## License
|
|
122
552
|
|
|
123
|
-
|
|
553
|
+
MIT - Part of the Atomix Design System
|