@shohojdhara/atomix 0.3.13 → 0.3.14

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 (151) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +2 -0
  3. package/dist/atomix.css +95 -77
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +2 -2
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/charts.d.ts +1 -1
  8. package/dist/charts.js +1 -1
  9. package/dist/core.d.ts +41 -11
  10. package/dist/core.js +39 -23
  11. package/dist/core.js.map +1 -1
  12. package/dist/forms.d.ts +28 -11
  13. package/dist/forms.js +8 -5
  14. package/dist/forms.js.map +1 -1
  15. package/dist/heavy.d.ts +1 -1
  16. package/dist/heavy.js +15 -6
  17. package/dist/heavy.js.map +1 -1
  18. package/dist/index.d.ts +122 -46
  19. package/dist/index.esm.js +849 -182
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +854 -186
  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/dist/theme.d.ts +27 -2
  26. package/dist/theme.js +721 -108
  27. package/dist/theme.js.map +1 -1
  28. package/package.json +1 -1
  29. package/scripts/atomix-cli.js +610 -1111
  30. package/scripts/cli/component-generator.js +610 -0
  31. package/scripts/cli/documentation-sync.js +542 -0
  32. package/scripts/cli/interactive-init.js +84 -288
  33. package/scripts/cli/mappings.js +211 -0
  34. package/scripts/cli/migration-tools.js +95 -288
  35. package/scripts/cli/template-manager.js +107 -0
  36. package/scripts/cli/templates/README.md +123 -0
  37. package/scripts/cli/templates/composable-templates.js +149 -0
  38. package/scripts/cli/templates/config-templates.js +126 -0
  39. package/scripts/cli/templates/index.js +95 -0
  40. package/scripts/cli/templates/project-templates.js +214 -0
  41. package/scripts/cli/templates/react-templates.js +261 -0
  42. package/scripts/cli/templates/scss-templates.js +156 -0
  43. package/scripts/cli/templates/storybook-templates.js +236 -0
  44. package/scripts/cli/templates/testing-templates.js +45 -0
  45. package/scripts/cli/templates/token-templates.js +447 -0
  46. package/scripts/cli/templates/types-templates.js +133 -0
  47. package/scripts/cli/templates-original-backup.js +1655 -0
  48. package/scripts/cli/templates.js +35 -0
  49. package/scripts/cli/templates_backup.js +684 -0
  50. package/scripts/cli/theme-bridge.js +20 -14
  51. package/scripts/cli/token-manager.js +150 -77
  52. package/scripts/cli/utils.js +37 -25
  53. package/src/components/Accordion/Accordion.stories.tsx +5 -5
  54. package/src/components/Accordion/Accordion.test.tsx +57 -0
  55. package/src/components/Accordion/Accordion.tsx +4 -0
  56. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -1
  57. package/src/components/AtomixGlass/stories/Examples.stories.tsx +37 -37
  58. package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -51
  59. package/src/components/Avatar/Avatar.stories.tsx +26 -26
  60. package/src/components/Badge/Badge.stories.tsx +31 -31
  61. package/src/components/Badge/Badge.test.tsx +51 -0
  62. package/src/components/Badge/Badge.tsx +20 -1
  63. package/src/components/Block/Block.stories.tsx +5 -5
  64. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  65. package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
  66. package/src/components/Button/Button.stories.tsx +13 -13
  67. package/src/components/Button/Button.tsx +4 -4
  68. package/src/components/Button/ButtonGroup.stories.tsx +2 -2
  69. package/src/components/Button/README.md +5 -0
  70. package/src/components/Callout/Callout.stories.tsx +11 -11
  71. package/src/components/Callout/Callout.test.tsx +10 -10
  72. package/src/components/Callout/Callout.tsx +7 -7
  73. package/src/components/Callout/README.md +9 -8
  74. package/src/components/Card/Card.tsx +2 -2
  75. package/src/components/Chart/Chart.stories.tsx +6 -6
  76. package/src/components/Chart/Chart.tsx +1 -1
  77. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +1 -1
  78. package/src/components/DataTable/DataTable.tsx +14 -12
  79. package/src/components/DatePicker/DatePicker.stories.tsx +6 -6
  80. package/src/components/Dropdown/Dropdown.stories.tsx +4 -4
  81. package/src/components/Form/Checkbox.stories.tsx +3 -3
  82. package/src/components/Form/Checkbox.tsx +4 -2
  83. package/src/components/Form/Form.stories.tsx +3 -3
  84. package/src/components/Form/FormGroup.stories.tsx +1 -1
  85. package/src/components/Form/Input.stories.tsx +28 -16
  86. package/src/components/Form/Input.test.tsx +59 -0
  87. package/src/components/Form/Input.tsx +97 -95
  88. package/src/components/Form/Radio.stories.tsx +94 -94
  89. package/src/components/Form/Radio.tsx +2 -2
  90. package/src/components/Form/Select.stories.tsx +4 -4
  91. package/src/components/Form/Select.tsx +2 -2
  92. package/src/components/Form/Textarea.stories.tsx +22 -7
  93. package/src/components/Form/Textarea.test.tsx +45 -0
  94. package/src/components/Form/Textarea.tsx +88 -86
  95. package/src/components/List/List.stories.tsx +2 -2
  96. package/src/components/Modal/Modal.stories.tsx +4 -4
  97. package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
  98. package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
  99. package/src/components/Navigation/README.md +1 -1
  100. package/src/components/Pagination/Pagination.stories.tsx +5 -2
  101. package/src/components/Pagination/Pagination.tsx +1 -1
  102. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
  103. package/src/components/Popover/Popover.stories.tsx +1 -1
  104. package/src/components/ProductReview/ProductReview.tsx +1 -1
  105. package/src/components/Progress/Progress.tsx +46 -46
  106. package/src/components/Rating/Rating.stories.tsx +4 -4
  107. package/src/components/Rating/Rating.tsx +8 -8
  108. package/src/components/Slider/Slider.stories.tsx +63 -63
  109. package/src/components/Spinner/Spinner.stories.tsx +2 -2
  110. package/src/components/Spinner/Spinner.test.tsx +35 -0
  111. package/src/components/Spinner/Spinner.tsx +9 -2
  112. package/src/components/Testimonial/Testimonial.stories.tsx +1 -1
  113. package/src/components/Toggle/Toggle.stories.tsx +32 -9
  114. package/src/components/Toggle/Toggle.test.tsx +91 -0
  115. package/src/components/Toggle/Toggle.tsx +44 -27
  116. package/src/components/Tooltip/Tooltip.tsx +1 -1
  117. package/src/layouts/Grid/Grid.stories.tsx +49 -49
  118. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
  119. package/src/lib/composables/useAccordion.ts +12 -3
  120. package/src/lib/composables/useBreadcrumb.ts +2 -2
  121. package/src/lib/composables/useCallout.ts +7 -7
  122. package/src/lib/composables/useNavbar.ts +1 -1
  123. package/src/lib/constants/components.ts +1 -1
  124. package/src/lib/storybook/InteractiveDemo.tsx +113 -0
  125. package/src/lib/storybook/PreviewContainer.tsx +36 -0
  126. package/src/lib/storybook/VariantsGrid.tsx +21 -0
  127. package/src/lib/storybook/index.ts +3 -0
  128. package/src/lib/theme/core/createThemeObject.ts +9 -5
  129. package/src/lib/theme/devtools/CLI.ts +155 -0
  130. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
  131. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
  132. package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
  133. package/src/lib/theme/devtools/index.ts +3 -0
  134. package/src/lib/theme/errors/errors.ts +8 -0
  135. package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
  136. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
  137. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
  138. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
  139. package/src/lib/theme/utils/index.ts +1 -0
  140. package/src/lib/theme/utils/themeValidation.ts +501 -0
  141. package/src/lib/theme-tools.ts +32 -3
  142. package/src/lib/types/components.ts +81 -26
  143. package/src/lib/utils/themeNaming.ts +1 -1
  144. package/src/styles/06-components/_components.callout.scss +29 -33
  145. package/src/styles/06-components/_index.scss +1 -1
  146. package/src/styles/99-utilities/_utilities.display.scss +14 -3
  147. package/src/styles/99-utilities/_utilities.flex.scss +10 -10
  148. package/src/styles/99-utilities/_utilities.text.scss +28 -8
  149. package/scripts/cli/__tests__/cli-commands.test.js +0 -204
  150. package/scripts/cli/__tests__/utils.test.js +0 -201
  151. package/scripts/cli/__tests__/vitest.config.js +0 -26
@@ -0,0 +1,684 @@
1
+ /**
2
+ * Atomix CLI - Templates and Data
3
+ * Stores component templates and token generation functions
4
+ */
5
+
6
+ /**
7
+ * Component templates for design system
8
+ */
9
+ export const componentTemplates = {
10
+ react: {
11
+ component: (name, options = {}) => `import React, { forwardRef, memo } from 'react';
12
+ import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
13
+
14
+ export interface ${name}Props {
15
+ /**
16
+ * Content to be rendered
17
+ */
18
+ children?: React.ReactNode;
19
+
20
+ /**
21
+ * Additional CSS classes
22
+ */
23
+ className?: string;
24
+
25
+ /**
26
+ * Size variant
27
+ */
28
+ size?: 'sm' | 'md' | 'lg';
29
+
30
+ /**
31
+ * Color variant
32
+ */
33
+ variant?: 'primary' | 'secondary' | 'success' | 'error';
34
+
35
+ /**
36
+ * Disabled state
37
+ */
38
+ disabled?: boolean;
39
+
40
+ /**
41
+ * Glass effect options
42
+ */
43
+ glass?: boolean | object;
44
+
45
+ /**
46
+ * Inline styles
47
+ */
48
+ style?: React.CSSProperties;
49
+ }
50
+
51
+ /**
52
+ * ${name} component
53
+ */
54
+ export const ${name} = memo(
55
+ forwardRef<HTMLDivElement, ${name}Props>(
56
+ ({
57
+ children,
58
+ className = '',
59
+ size = 'md',
60
+ variant = 'primary',
61
+ disabled = false,
62
+ glass,
63
+ style,
64
+ ...props
65
+ }, ref) => {
66
+
67
+ const componentClass = [
68
+ 'c-${name.toLowerCase()}',
69
+ \`c-${name.toLowerCase()}--\${size}\`,
70
+ \`c-${name.toLowerCase()}--\${variant}\`,
71
+ disabled && 'is-disabled',
72
+ glass && \`c-${name.toLowerCase()}--glass\`,
73
+ className
74
+ ].filter(Boolean).join(' ');
75
+
76
+ const content = (
77
+ <div
78
+ ref={ref}
79
+ className={componentClass}
80
+ aria-disabled={disabled}
81
+ style={style}
82
+ {...props}
83
+ >
84
+ {children}
85
+ </div>
86
+ );
87
+
88
+ if (glass) {
89
+ return (
90
+ <AtomixGlass
91
+ className={\`c-${name.toLowerCase()}--glass\`}
92
+ {...(typeof glass === 'object' ? glass : {})}
93
+ >
94
+ {content}
95
+ </AtomixGlass>
96
+ );
97
+ }
98
+
99
+ return content;
100
+ }
101
+ )
102
+ );
103
+
104
+ ${name}.displayName = '${name}';
105
+
106
+ export default ${name};`,
107
+
108
+ index: (name) => `export { default as ${name} } from './${name}';
109
+ export type { ${name}Props } from './${name}';`,
110
+
111
+ story: (name) => `import type { Meta, StoryObj } from '@storybook/react';
112
+ import { ${name} } from './${name}';
113
+
114
+ const meta: Meta<typeof ${name}> = {
115
+ title: 'Components/${name}',
116
+ component: ${name},
117
+ parameters: {
118
+ layout: 'centered',
119
+ },
120
+ tags: ['autodocs'],
121
+ argTypes: {
122
+ size: {
123
+ control: 'select',
124
+ options: ['sm', 'md', 'lg'],
125
+ },
126
+ variant: {
127
+ control: 'select',
128
+ options: ['primary', 'secondary', 'success', 'error'],
129
+ },
130
+ disabled: {
131
+ control: 'boolean',
132
+ },
133
+ glass: {
134
+ control: 'boolean',
135
+ },
136
+ },
137
+ };
138
+
139
+ export default meta;
140
+ type Story = StoryObj<typeof meta>;
141
+
142
+ export const Default: Story = {
143
+ args: {
144
+ children: '${name} Component',
145
+ size: 'md',
146
+ variant: 'primary',
147
+ },
148
+ };
149
+
150
+ export const Small: Story = {
151
+ args: {
152
+ ...Default.args,
153
+ size: 'sm',
154
+ },
155
+ };
156
+
157
+ export const Large: Story = {
158
+ args: {
159
+ ...Default.args,
160
+ size: 'lg',
161
+ },
162
+ };
163
+
164
+ export const Glass: Story = {
165
+ args: {
166
+ ...Default.args,
167
+ glass: true,
168
+ },
169
+ };
170
+ `,
171
+
172
+ test: (name) => `import { describe, it, expect } from 'vitest';
173
+ import { render, screen } from '@testing-library/react';
174
+ import { ${name} } from './${name}';
175
+
176
+ describe('${name}', () => {
177
+ it('renders children correctly', () => {
178
+ render(<${name}>Test Content</${name}>);
179
+ expect(screen.getByText('Test Content')).toBeInTheDocument();
180
+ });
181
+
182
+ it('applies size variant classes', () => {
183
+ const { container } = render(<${name} size="lg">Content</${name}>);
184
+ const element = container.firstChild;
185
+ expect(element).toHaveClass('c-${name.toLowerCase()}--lg');
186
+ });
187
+
188
+ it('handles disabled state', () => {
189
+ const { container } = render(<${name} disabled>Content</${name}>);
190
+ const element = container.firstChild;
191
+ expect(element).toHaveAttribute('aria-disabled', 'true');
192
+ expect(element).toHaveClass('is-disabled');
193
+ });
194
+
195
+ it('forwards ref correctly', () => {
196
+ const ref = React.createRef<HTMLDivElement>();
197
+ render(<${name} ref={ref}>Content</${name}>);
198
+ expect(ref.current).toBeInstanceOf(HTMLDivElement);
199
+ });
200
+ });`,
201
+
202
+ scss: (name) => `// =============================================================================
203
+ // ${name.toUpperCase()}
204
+ // =============================================================================
205
+
206
+ .c-${name.toLowerCase()} {
207
+ // Layout
208
+ display: flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+
212
+ // Spacing
213
+ padding: spacing(3) spacing(4);
214
+ gap: spacing(2);
215
+
216
+ // Theme
217
+ background-color: var(--atomix-bg-surface);
218
+ color: var(--atomix-text-primary);
219
+ border: 1px solid var(--atomix-border-default);
220
+ border-radius: radius('md');
221
+
222
+ // Typography
223
+ @include font-size('base');
224
+
225
+ // Interactions
226
+ transition: all 0.2s ease;
227
+
228
+ // Themes
229
+ &--primary {
230
+ background-color: var(--atomix-primary);
231
+ color: var(--atomix-primary-content);
232
+ border-color: var(--atomix-primary-dark);
233
+ }
234
+
235
+ &--secondary {
236
+ background-color: var(--atomix-secondary);
237
+ color: var(--atomix-secondary-content);
238
+ border-color: var(--atomix-secondary-dark);
239
+ }
240
+
241
+ // Sizes
242
+ &--sm {
243
+ padding: spacing(2) spacing(3);
244
+ @include font-size('sm');
245
+ }
246
+
247
+ &--lg {
248
+ padding: spacing(4) spacing(5);
249
+ @include font-size('lg');
250
+ }
251
+
252
+ // State
253
+ &.is-disabled {
254
+ opacity: 0.6;
255
+ pointer-events: none;
256
+ cursor: not-allowed;
257
+ }
258
+
259
+ // Glass variant
260
+ &--glass {
261
+ background: rgba(255, 255, 255, 0.1);
262
+ backdrop-filter: blur(10px);
263
+ border: 1px solid rgba(255, 255, 255, 0.2);
264
+ }
265
+ }
266
+ `,
267
+
268
+ scssModule: (name) => `` // Disabled/Empty as we prefer global SCSS
269
+ }
270
+ };
271
+
272
+ // Token generation functions
273
+ export function generateColorTokens() {
274
+ return `// Custom Color Tokens
275
+ // Generated by Atomix CLI
276
+ // =============================================================================
277
+
278
+ // Brand Colors
279
+ // Customize these to match your brand identity
280
+ $custom-primary-1: #fff9e6 !default;
281
+ $custom-primary-2: #fff4cc !default;
282
+ $custom-primary-3: #ffe699 !default;
283
+ $custom-primary-4: #ffd966 !default;
284
+ $custom-primary-5: #ffcc33 !default;
285
+ $custom-primary-6: #ffb800 !default; // Main brand color
286
+ $custom-primary-7: #e6a600 !default;
287
+ $custom-primary-8: #cc9400 !default;
288
+ $custom-primary-9: #b38200 !default;
289
+ $custom-primary-10: #997000 !default;
290
+
291
+ // Semantic Colors
292
+ $custom-success: #22c55e !default;
293
+ $custom-warning: #eab308 !default;
294
+ $custom-error: #ef4444 !default;
295
+ $custom-info: #3b82f6 !default;
296
+
297
+ // Neutral Colors
298
+ $custom-gray-1: #f9fafb !default;
299
+ $custom-gray-2: #f3f4f6 !default;
300
+ $custom-gray-3: #e5e7eb !default;
301
+ $custom-gray-4: #d1d5db !default;
302
+ $custom-gray-5: #9ca3af !default;
303
+ $custom-gray-6: #6b7280 !default;
304
+ $custom-gray-7: #4b5563 !default;
305
+ $custom-gray-8: #374151 !default;
306
+ $custom-gray-9: #1f2937 !default;
307
+ $custom-gray-10: #111827 !default;
308
+
309
+ // Background Colors
310
+ $custom-body-bg: #ffffff !default;
311
+ $custom-body-bg-dark: #1f2937 !default;
312
+
313
+ // Text Colors
314
+ $custom-body-color: $custom-gray-10 !default;
315
+ $custom-body-color-dark: #ffffff !default;
316
+
317
+ // Link Colors
318
+ $custom-link-color: $custom-primary-6 !default;
319
+ $custom-link-hover-color: $custom-primary-7 !default;
320
+
321
+ // Border Colors
322
+ $custom-border-color: $custom-gray-3 !default;
323
+ $custom-border-color-dark: $custom-gray-7 !default;
324
+
325
+ // Focus Colors
326
+ $custom-focus-color: $custom-primary-5 !default;
327
+ $custom-focus-color-dark: $custom-primary-4 !default;
328
+
329
+ // Export custom colors to override defaults
330
+ $primary: $custom-primary-6 !default;
331
+ $success: $custom-success !default;
332
+ $warning: $custom-warning !default;
333
+ $error: $custom-error !default;
334
+ $info: $custom-info !default;
335
+
336
+ // Dark mode overrides
337
+ $body-bg-dark: $custom-body-bg-dark !default;
338
+ $body-color-dark: $custom-body-color-dark !default;
339
+ $border-color-dark: $custom-border-color-dark !default;
340
+ `;
341
+ }
342
+
343
+ export function generateSpacingTokens() {
344
+ return `// Custom Spacing Tokens
345
+ // Generated by Atomix CLI
346
+ // =============================================================================
347
+
348
+ // Base spacing unit (change this to scale all spacing)
349
+ $custom-spacing-base: 0.25rem !default; // 4px
350
+
351
+ // Spacing scale
352
+ $custom-spacing-0: 0 !default;
353
+ $custom-spacing-1: $custom-spacing-base !default; // 4px
354
+ $custom-spacing-2: calc($custom-spacing-base * 2) !default; // 8px
355
+ $custom-spacing-3: calc($custom-spacing-base * 3) !default; // 12px
356
+ $custom-spacing-4: calc($custom-spacing-base * 4) !default; // 16px
357
+ $custom-spacing-5: calc($custom-spacing-base * 5) !default; // 20px
358
+ $custom-spacing-6: calc($custom-spacing-base * 6) !default; // 24px
359
+ $custom-spacing-7: calc($custom-spacing-base * 7) !default; // 28px
360
+ $custom-spacing-8: calc($custom-spacing-base * 8) !default; // 32px
361
+ $custom-spacing-9: calc($custom-spacing-base * 9) !default; // 36px
362
+ $custom-spacing-10: calc($custom-spacing-base * 10) !default; // 40px
363
+ $custom-spacing-11: calc($custom-spacing-base * 11) !default; // 44px
364
+ $custom-spacing-12: calc($custom-spacing-base * 12) !default; // 48px
365
+ $custom-spacing-14: calc($custom-spacing-base * 14) !default; // 56px
366
+ $custom-spacing-16: calc($custom-spacing-base * 16) !default; // 64px
367
+ $custom-spacing-20: calc($custom-spacing-base * 20) !default; // 80px
368
+ $custom-spacing-24: calc($custom-spacing-base * 24) !default; // 96px
369
+ $custom-spacing-28: calc($custom-spacing-base * 28) !default; // 112px
370
+ $custom-spacing-32: calc($custom-spacing-base * 32) !default; // 128px
371
+ $custom-spacing-36: calc($custom-spacing-base * 36) !default; // 144px
372
+ $custom-spacing-40: calc($custom-spacing-base * 40) !default; // 160px
373
+ $custom-spacing-44: calc($custom-spacing-base * 44) !default; // 176px
374
+ $custom-spacing-48: calc($custom-spacing-base * 48) !default; // 192px
375
+ $custom-spacing-52: calc($custom-spacing-base * 52) !default; // 208px
376
+ $custom-spacing-56: calc($custom-spacing-base * 56) !default; // 224px
377
+ $custom-spacing-60: calc($custom-spacing-base * 60) !default; // 240px
378
+ $custom-spacing-64: calc($custom-spacing-base * 64) !default; // 256px
379
+
380
+ // Component-specific spacing
381
+ $custom-button-padding-x: $custom-spacing-4 !default;
382
+ $custom-button-padding-y: $custom-spacing-2 !default;
383
+ $custom-card-padding: $custom-spacing-6 !default;
384
+ $custom-modal-padding: $custom-spacing-8 !default;
385
+
386
+ // Layout spacing
387
+ $custom-container-padding: $custom-spacing-4 !default;
388
+ $custom-grid-gap: $custom-spacing-6 !default;
389
+ $custom-section-spacing: $custom-spacing-16 !default;
390
+
391
+ // Export to override defaults
392
+ $spacing-sizes: (
393
+ 0: $custom-spacing-0,
394
+ 1: $custom-spacing-1,
395
+ 2: $custom-spacing-2,
396
+ 3: $custom-spacing-3,
397
+ 4: $custom-spacing-4,
398
+ 5: $custom-spacing-5,
399
+ 6: $custom-spacing-6,
400
+ 7: $custom-spacing-7,
401
+ 8: $custom-spacing-8,
402
+ 9: $custom-spacing-9,
403
+ 10: $custom-spacing-10,
404
+ 12: $custom-spacing-12,
405
+ 16: $custom-spacing-16,
406
+ 20: $custom-spacing-20,
407
+ 24: $custom-spacing-24,
408
+ 32: $custom-spacing-32,
409
+ 40: $custom-spacing-40,
410
+ 48: $custom-spacing-48,
411
+ 56: $custom-spacing-56,
412
+ 64: $custom-spacing-64,
413
+ ) !default;
414
+ `;
415
+ }
416
+
417
+ export function generateTypographyTokens() {
418
+ return `// Custom Typography Tokens
419
+ // Generated by Atomix CLI
420
+ // =============================================================================
421
+
422
+ // Font Families
423
+ $custom-font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !default;
424
+ $custom-font-family-serif: Georgia, "Times New Roman", Times, serif !default;
425
+ $custom-font-family-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
426
+
427
+ // Font Size Scale
428
+ $custom-font-size-xs: 0.75rem !default; // 12px
429
+ $custom-font-size-sm: 0.875rem !default; // 14px
430
+ $custom-font-size-base: 1rem !default; // 16px
431
+ $custom-font-size-lg: 1.125rem !default; // 18px
432
+ $custom-font-size-xl: 1.25rem !default; // 20px
433
+ $custom-font-size-2xl: 1.5rem !default; // 24px
434
+ $custom-font-size-3xl: 1.875rem !default; // 30px
435
+ $custom-font-size-4xl: 2.25rem !default; // 36px
436
+ $custom-font-size-5xl: 3rem !default; // 48px
437
+ $custom-font-size-6xl: 3.75rem !default; // 60px
438
+ $custom-font-size-7xl: 4.5rem !default; // 72px
439
+ $custom-font-size-8xl: 6rem !default; // 96px
440
+
441
+ // Line Heights
442
+ $custom-line-height-tight: 1.2 !default;
443
+ $custom-line-height-base: 1.5 !default;
444
+ $custom-line-height-relaxed: 1.75 !default;
445
+ $custom-line-height-loose: 2 !default;
446
+
447
+ // Font Weights
448
+ $custom-font-weight-light: 300 !default;
449
+ $custom-font-weight-normal: 400 !default;
450
+ $custom-font-weight-medium: 500 !default;
451
+ $custom-font-weight-semibold: 600 !default;
452
+ $custom-font-weight-bold: 700 !default;
453
+ $custom-font-weight-heavy: 800 !default;
454
+ $custom-font-weight-black: 900 !default;
455
+
456
+ // Letter Spacing
457
+ $custom-letter-spacing-tight: -0.05em !default;
458
+ $custom-letter-spacing-normal: 0 !default;
459
+ $custom-letter-spacing-wide: 0.025em !default;
460
+ $custom-letter-spacing-wider: 0.05em !default;
461
+ $custom-letter-spacing-widest: 0.1em !default;
462
+
463
+ // Heading Sizes
464
+ $custom-h1-font-size: $custom-font-size-5xl !default;
465
+ $custom-h2-font-size: $custom-font-size-4xl !default;
466
+ $custom-h3-font-size: $custom-font-size-3xl !default;
467
+ $custom-h4-font-size: $custom-font-size-2xl !default;
468
+ $custom-h5-font-size: $custom-font-size-xl !default;
469
+ $custom-h6-font-size: $custom-font-size-lg !default;
470
+
471
+ // Export to override defaults
472
+ $font-family-base: $custom-font-family-sans !default;
473
+ $font-family-monospace: $custom-font-family-mono !default;
474
+ $font-size-base: $custom-font-size-base !default;
475
+ $font-size-sm: $custom-font-size-sm !default;
476
+ $font-size-lg: $custom-font-size-lg !default;
477
+ $line-height-base: $custom-line-height-base !default;
478
+ $font-weight-base: $custom-font-weight-normal !default;
479
+
480
+ // Heading overrides
481
+ $h1-font-size: $custom-h1-font-size !default;
482
+ $h2-font-size: $custom-h2-font-size !default;
483
+ $h3-font-size: $custom-h3-font-size !default;
484
+ $h4-font-size: $custom-h4-font-size !default;
485
+ $h5-font-size: $custom-h5-font-size !default;
486
+ $h6-font-size: $custom-h6-font-size !default;
487
+ `;
488
+ }
489
+
490
+ export function generateShadowTokens() {
491
+ return `// Custom Box Shadow Tokens
492
+ // Generated by Atomix CLI
493
+ // =============================================================================
494
+
495
+ // Shadow Colors
496
+ $custom-shadow-color: rgba(0, 0, 0, 0.1) !default;
497
+ $custom-shadow-color-dark: rgba(0, 0, 0, 0.2) !default;
498
+
499
+ // Shadow Sizes
500
+ $custom-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !default;
501
+ $custom-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06) !default;
502
+ $custom-shadow-base: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !default;
503
+ $custom-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) !default;
504
+ $custom-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !default;
505
+ $custom-shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !default;
506
+ $custom-shadow-2xl: 0 35px 60px -15px rgba(0, 0, 0, 0.3) !default;
507
+ $custom-shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06) !default;
508
+ $custom-shadow-none: none !default;
509
+
510
+ // Component-specific shadows
511
+ $custom-button-shadow: $custom-shadow-sm !default;
512
+ $custom-button-shadow-hover: $custom-shadow-md !default;
513
+ $custom-card-shadow: $custom-shadow-base !default;
514
+ $custom-dropdown-shadow: $custom-shadow-lg !default;
515
+ $custom-modal-shadow: $custom-shadow-xl !default;
516
+ $custom-popover-shadow: $custom-shadow-lg !default;
517
+ $custom-tooltip-shadow: $custom-shadow-md !default;
518
+
519
+ // Dark mode shadows
520
+ $custom-shadow-xs-dark: 0 1px 2px 0 rgba(0, 0, 0, 0.3) !default;
521
+ $custom-shadow-sm-dark: 0 1px 3px 0 rgba(0, 0, 0, 0.4), 0 1px 2px 0 rgba(0, 0, 0, 0.3) !default;
522
+ $custom-shadow-base-dark: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3) !default;
523
+ $custom-shadow-lg-dark: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4) !default;
524
+ $custom-shadow-xl-dark: 0 25px 50px -12px rgba(0, 0, 0, 0.6) !default;
525
+
526
+ // Export to override defaults
527
+ $box-shadow: $custom-shadow-base !default;
528
+ $box-shadow-xs: $custom-shadow-xs !default;
529
+ $box-shadow-sm: $custom-shadow-sm !default;
530
+ $box-shadow-lg: $custom-shadow-lg !default;
531
+ $box-shadow-xl: $custom-shadow-xl !default;
532
+ $box-shadow-inset: $custom-shadow-inner !default;
533
+
534
+ // Dark mode exports
535
+ $box-shadow-dark: $custom-shadow-base-dark !default;
536
+ $box-shadow-xs-dark: $custom-shadow-xs-dark !default;
537
+ $box-shadow-sm-dark: $custom-shadow-sm-dark !default;
538
+ $box-shadow-lg-dark: $custom-shadow-lg-dark !default;
539
+ $box-shadow-xl-dark: $custom-shadow-xl-dark !default;
540
+ `;
541
+ }
542
+
543
+ export function generateRadiusTokens() {
544
+ return `// Custom Border Radius Tokens
545
+ // Generated by Atomix CLI
546
+ // =============================================================================
547
+
548
+ // Base radius unit
549
+ $custom-radius-base: 0.25rem !default; // 4px
550
+
551
+ // Radius Scale
552
+ $custom-radius-none: 0 !default;
553
+ $custom-radius-sm: calc($custom-radius-base * 0.5) !default; // 2px
554
+ $custom-radius-base: $custom-radius-base !default; // 4px
555
+ $custom-radius-md: calc($custom-radius-base * 1.5) !default; // 6px
556
+ $custom-radius-lg: calc($custom-radius-base * 2) !default; // 8px
557
+ $custom-radius-xl: calc($custom-radius-base * 3) !default; // 12px
558
+ $custom-radius-2xl: calc($custom-radius-base * 4) !default; // 16px
559
+ $custom-radius-3xl: calc($custom-radius-base * 6) !default; // 24px
560
+ $custom-radius-4xl: calc($custom-radius-base * 8) !default; // 32px
561
+ $custom-radius-full: 9999px !default; // Fully rounded
562
+
563
+ // Component-specific radius
564
+ $custom-button-radius: $custom-radius-md !default;
565
+ $custom-button-radius-sm: $custom-radius-sm !default;
566
+ $custom-button-radius-lg: $custom-radius-lg !default;
567
+ $custom-card-radius: $custom-radius-lg !default;
568
+ $custom-input-radius: $custom-radius-md !default;
569
+ $custom-badge-radius: $custom-radius-full !default;
570
+ $custom-chip-radius: $custom-radius-full !default;
571
+ $custom-tooltip-radius: $custom-radius-md !default;
572
+ $custom-modal-radius: $custom-radius-xl !default;
573
+ $custom-dropdown-radius: $custom-radius-lg !default;
574
+
575
+ // Export to override defaults
576
+ $border-radius: $custom-radius-md !default;
577
+ $border-radius-sm: $custom-radius-sm !default;
578
+ $border-radius-lg: $custom-radius-lg !default;
579
+ $border-radius-xl: $custom-radius-xl !default;
580
+ $border-radius-xxl: $custom-radius-2xl !default;
581
+ $border-radius-3xl: $custom-radius-3xl !default;
582
+ $border-radius-4xl: $custom-radius-4xl !default;
583
+ $border-radius-pill: $custom-radius-full !default;
584
+
585
+ // Component radius exports
586
+ $btn-border-radius: $custom-button-radius !default;
587
+ $btn-border-radius-sm: $custom-button-radius-sm !default;
588
+ $btn-border-radius-lg: $custom-button-radius-lg !default;
589
+ $card-border-radius: $custom-card-radius !default;
590
+ $input-border-radius: $custom-input-radius !default;
591
+ $badge-border-radius: $custom-badge-radius !default;
592
+ `;
593
+ }
594
+
595
+ export function generateAnimationTokens() {
596
+ return `// Custom Animation Tokens
597
+ // Generated by Atomix CLI
598
+ // =============================================================================
599
+
600
+ // Transition Durations
601
+ $custom-duration-instant: 0s !default;
602
+ $custom-duration-fast: 0.15s !default;
603
+ $custom-duration-base: 0.3s !default;
604
+ $custom-duration-slow: 0.5s !default;
605
+ $custom-duration-slower: 0.7s !default;
606
+ $custom-duration-slowest: 1s !default;
607
+
608
+ // Easing Functions
609
+ $custom-ease-linear: linear !default;
610
+ $custom-ease-in: cubic-bezier(0.4, 0, 1, 1) !default;
611
+ $custom-ease-out: cubic-bezier(0, 0, 0.2, 1) !default;
612
+ $custom-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1) !default;
613
+ $custom-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55) !default;
614
+ $custom-ease-smooth: cubic-bezier(0.23, 1, 0.32, 1) !default;
615
+
616
+ // Transition Properties
617
+ $custom-transition-all: all $custom-duration-base $custom-ease-smooth !default;
618
+ $custom-transition-colors: background-color $custom-duration-base $custom-ease-smooth,
619
+ border-color $custom-duration-base $custom-ease-smooth,
620
+ color $custom-duration-base $custom-ease-smooth,
621
+ fill $custom-duration-base $custom-ease-smooth,
622
+ stroke $custom-duration-base $custom-ease-smooth !default;
623
+ $custom-transition-opacity: opacity $custom-duration-base $custom-ease-smooth !default;
624
+ $custom-transition-shadow: box-shadow $custom-duration-base $custom-ease-smooth !default;
625
+ $custom-transition-transform: transform $custom-duration-base $custom-ease-smooth !default;
626
+
627
+ // Component-specific transitions
628
+ $custom-button-transition: $custom-transition-colors, $custom-transition-shadow, $custom-transition-transform !default;
629
+ $custom-link-transition: $custom-transition-colors, text-decoration-color $custom-duration-base $custom-ease-smooth !default;
630
+ $custom-input-transition: $custom-transition-colors, $custom-transition-shadow !default;
631
+ $custom-card-transition: $custom-transition-shadow, $custom-transition-transform !default;
632
+ $custom-modal-transition: $custom-transition-opacity, $custom-transition-transform !default;
633
+ $custom-dropdown-transition: $custom-transition-opacity, $custom-transition-transform !default;
634
+
635
+ // Animation Keyframes (examples)
636
+ @keyframes custom-fade-in {
637
+ from { opacity: 0; }
638
+ to { opacity: 1; }
639
+ }
640
+
641
+ @keyframes custom-slide-in-up {
642
+ from {
643
+ transform: translateY(10px);
644
+ opacity: 0;
645
+ }
646
+ to {
647
+ transform: translateY(0);
648
+ opacity: 1;
649
+ }
650
+ }
651
+
652
+ @keyframes custom-scale-in {
653
+ from {
654
+ transform: scale(0.95);
655
+ opacity: 0;
656
+ }
657
+ to {
658
+ transform: scale(1);
659
+ opacity: 1;
660
+ }
661
+ }
662
+
663
+ @keyframes custom-spin {
664
+ from { transform: rotate(0deg); }
665
+ to { transform: rotate(360deg); }
666
+ }
667
+
668
+ // Export to override defaults
669
+ $transition-fast: $custom-transition-all !default;
670
+ $transition-base: $custom-transition-all !default;
671
+ $transition-slow: all $custom-duration-slow $custom-ease-smooth !default;
672
+
673
+ // Duration exports
674
+ $transition-duration-fast: $custom-duration-fast !default;
675
+ $transition-duration-base: $custom-duration-base !default;
676
+ $transition-duration-slow: $custom-duration-slow !default;
677
+
678
+ // Easing exports
679
+ $easing-base: $custom-ease-smooth !default;
680
+ $easing-ease-in-out: $custom-ease-in-out !default;
681
+ $easing-ease-out: $custom-ease-out !default;
682
+ $easing-ease-in: $custom-ease-in !default;
683
+ `;
684
+ }