@shohojdhara/atomix 0.3.15 → 0.4.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/build-tools/index.d.ts +31 -30
- package/build-tools/package.json +4 -21
- package/dist/atomix.css +20924 -2611
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +76 -2
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/index.d.ts +31 -30
- package/dist/build-tools/package.json +4 -21
- package/dist/charts.js.map +1 -1
- package/dist/core.js.map +1 -1
- package/dist/forms.js.map +1 -1
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +144 -18
- package/dist/index.esm.js +110 -55
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +110 -55
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/theme.d.ts +9 -9
- package/dist/theme.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.stories.tsx +32 -23
- package/src/components/Accordion/Accordion.test.tsx +70 -50
- package/src/components/Accordion/Accordion.tsx +99 -94
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
- package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
- package/src/components/AtomixGlass/glass-utils.ts +4 -3
- package/src/components/AtomixGlass/shader-utils.ts +128 -52
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Shaders.stories.tsx +1 -1
- package/src/components/Avatar/Avatar.stories.tsx +45 -62
- package/src/components/Avatar/Avatar.tsx +58 -56
- package/src/components/Badge/Badge.stories.tsx +20 -9
- package/src/components/Badge/Badge.test.tsx +41 -41
- package/src/components/Badge/Badge.tsx +64 -62
- package/src/components/Block/Block.stories.tsx +14 -4
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +9 -8
- package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
- package/src/components/Button/Button.stories.tsx +13 -22
- package/src/components/Button/Button.test.tsx +97 -81
- package/src/components/Button/Button.tsx +46 -14
- package/src/components/Button/ButtonGroup.stories.tsx +37 -32
- package/src/components/Button/ButtonGroup.tsx +4 -15
- package/src/components/Callout/Callout.stories.tsx +109 -16
- package/src/components/Card/Card.stories.tsx +67 -36
- package/src/components/Card/Card.tsx +30 -14
- package/src/components/Chart/AreaChart.tsx +1 -1
- package/src/components/Chart/CandlestickChart.tsx +23 -16
- package/src/components/Chart/Chart.stories.tsx +4 -9
- package/src/components/Chart/Chart.tsx +40 -44
- package/src/components/Chart/ChartRenderer.tsx +39 -12
- package/src/components/Chart/ChartToolbar.tsx +21 -5
- package/src/components/Chart/DonutChart.tsx +1 -1
- package/src/components/Chart/FunnelChart.tsx +4 -1
- package/src/components/Chart/GaugeChart.tsx +3 -1
- package/src/components/Chart/HeatmapChart.tsx +50 -37
- package/src/components/Chart/LineChart.tsx +3 -2
- package/src/components/Chart/MultiAxisChart.tsx +24 -16
- package/src/components/Chart/RadarChart.tsx +19 -17
- package/src/components/Chart/ScatterChart.tsx +29 -21
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -2
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
- package/src/components/Countdown/Countdown.stories.tsx +7 -7
- package/src/components/DataTable/DataTable.stories.tsx +43 -38
- package/src/components/DataTable/DataTable.test.tsx +26 -148
- package/src/components/DataTable/DataTable.tsx +485 -456
- package/src/components/DatePicker/DatePicker.stories.tsx +32 -47
- package/src/components/DatePicker/DatePicker.tsx +31 -26
- package/src/components/Dropdown/Dropdown.stories.tsx +2 -5
- package/src/components/Dropdown/Dropdown.tsx +313 -299
- package/src/components/EdgePanel/EdgePanel.stories.tsx +6 -19
- package/src/components/EdgePanel/EdgePanel.tsx +1 -3
- package/src/components/Footer/Footer.stories.tsx +21 -16
- package/src/components/Footer/Footer.tsx +130 -128
- package/src/components/Footer/FooterLink.tsx +2 -2
- package/src/components/Form/Checkbox.test.tsx +49 -49
- package/src/components/Form/Checkbox.tsx +108 -100
- package/src/components/Form/Form.stories.tsx +2 -10
- package/src/components/Form/Input.stories.tsx +22 -39
- package/src/components/Form/Input.test.tsx +38 -44
- package/src/components/Form/Radio.stories.tsx +6 -12
- package/src/components/Form/Radio.tsx +68 -66
- package/src/components/Form/Select.tsx +184 -182
- package/src/components/Form/Textarea.test.tsx +27 -32
- package/src/components/Hero/Hero.stories.tsx +56 -23
- package/src/components/Hero/Hero.tsx +201 -55
- package/src/components/Icon/index.ts +7 -1
- package/src/components/List/List.tsx +19 -23
- package/src/components/Modal/Modal.stories.tsx +2 -1
- package/src/components/Modal/Modal.tsx +130 -127
- package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
- package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
- package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
- package/src/components/Pagination/Pagination.stories.tsx +7 -4
- package/src/components/Pagination/Pagination.tsx +199 -202
- package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
- package/src/components/Popover/Popover.stories.tsx +99 -192
- package/src/components/Popover/Popover.tsx +41 -37
- package/src/components/Progress/Progress.stories.tsx +35 -44
- package/src/components/River/River.stories.tsx +2 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +71 -71
- package/src/components/Slider/Slider.stories.tsx +12 -4
- package/src/components/Spinner/Spinner.stories.tsx +3 -1
- package/src/components/Spinner/Spinner.test.tsx +23 -23
- package/src/components/Spinner/Spinner.tsx +43 -46
- package/src/components/Steps/Steps.stories.tsx +8 -6
- package/src/components/Tabs/Tabs.stories.tsx +12 -9
- package/src/components/Tabs/Tabs.tsx +74 -72
- package/src/components/Toggle/Toggle.stories.tsx +27 -13
- package/src/components/Toggle/Toggle.test.tsx +65 -70
- package/src/components/Toggle/Toggle.tsx +4 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +24 -20
- package/src/components/Tooltip/Tooltip.tsx +104 -106
- package/src/components/Upload/Upload.stories.tsx +129 -127
- package/src/components/Upload/Upload.tsx +287 -283
- package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
- package/src/components/index.ts +13 -2
- package/src/layouts/Grid/Grid.stories.tsx +9 -3
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
- package/src/lib/__tests__/theme-tools.test.ts +32 -6
- package/src/lib/composables/shared-mouse-tracker.ts +13 -14
- package/src/lib/composables/useAtomixGlass.ts +106 -49
- package/src/lib/composables/useChartExport.ts +1 -1
- package/src/lib/composables/useDataTable.ts +29 -17
- package/src/lib/composables/useHero.ts +58 -14
- package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
- package/src/lib/composables/useInput.ts +10 -8
- package/src/lib/composables/useSideMenu.ts +6 -5
- package/src/lib/composables/useTooltip.ts +1 -2
- package/src/lib/composables/useVideoPlayer.ts +44 -35
- package/src/lib/config/index.ts +154 -154
- package/src/lib/constants/cssVariables.ts +29 -29
- package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
- package/src/lib/hooks/index.ts +1 -1
- package/src/lib/hooks/useComponentCustomization.ts +11 -17
- package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
- package/src/lib/patterns/__tests__/slots.test.ts +1 -1
- package/src/lib/patterns/index.ts +1 -1
- package/src/lib/patterns/slots.tsx +8 -13
- package/src/lib/storybook/InteractiveDemo.tsx +13 -18
- package/src/lib/storybook/PreviewContainer.tsx +1 -1
- package/src/lib/storybook/VariantsGrid.tsx +3 -7
- package/src/lib/storybook/index.ts +1 -1
- package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
- package/src/lib/theme/adapters/index.ts +3 -9
- package/src/lib/theme/adapters/themeAdapter.ts +41 -26
- package/src/lib/theme/config/index.ts +1 -1
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +10 -5
- package/src/lib/theme/constants/constants.ts +2 -2
- package/src/lib/theme/constants/index.ts +1 -2
- package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
- package/src/lib/theme/core/composeTheme.ts +32 -26
- package/src/lib/theme/core/createTheme.ts +1 -1
- package/src/lib/theme/core/createThemeObject.ts +308 -301
- package/src/lib/theme/core/index.ts +3 -3
- package/src/lib/theme/devtools/CLI.ts +106 -104
- package/src/lib/theme/devtools/Comparator.tsx +50 -32
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
- package/src/lib/theme/devtools/Inspector.tsx +75 -60
- package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
- package/src/lib/theme/devtools/Preview.tsx +150 -106
- package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
- package/src/lib/theme/devtools/index.ts +3 -9
- package/src/lib/theme/devtools/useHistory.ts +23 -21
- package/src/lib/theme/errors/errors.ts +12 -11
- package/src/lib/theme/errors/index.ts +2 -7
- package/src/lib/theme/generators/generateCSS.ts +9 -13
- package/src/lib/theme/generators/generateCSSNested.ts +1 -6
- package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
- package/src/lib/theme/generators/index.ts +1 -4
- package/src/lib/theme/i18n/index.ts +1 -1
- package/src/lib/theme/i18n/rtl.ts +13 -13
- package/src/lib/theme/index.ts +7 -16
- package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
- package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
- package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
- package/src/lib/theme/runtime/index.ts +2 -5
- package/src/lib/theme/runtime/useTheme.ts +18 -18
- package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
- package/src/lib/theme/test/testTheme.ts +15 -16
- package/src/lib/theme/tokens/index.ts +2 -7
- package/src/lib/theme/tokens/tokens.ts +25 -24
- package/src/lib/theme/types.ts +428 -411
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
- package/src/lib/theme/utils/componentTheming.ts +18 -18
- package/src/lib/theme/utils/domUtils.ts +277 -289
- package/src/lib/theme/utils/index.ts +1 -2
- package/src/lib/theme/utils/injectCSS.ts +10 -14
- package/src/lib/theme/utils/naming.ts +20 -16
- package/src/lib/theme/utils/themeHelpers.ts +10 -12
- package/src/lib/theme/utils/themeUtils.ts +85 -86
- package/src/lib/theme/utils/themeValidation.ts +82 -33
- package/src/lib/theme-tools.ts +8 -6
- package/src/lib/types/components.ts +172 -71
- package/src/lib/types/partProps.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +1 -1
- package/src/lib/utils/componentUtils.ts +8 -12
- package/src/lib/utils/csv.ts +3 -1
- package/src/lib/utils/dataTableExport.ts +1 -5
- package/src/lib/utils/fontPreloader.ts +10 -19
- package/src/lib/utils/icons.ts +4 -1
- package/src/lib/utils/index.ts +2 -6
- package/src/lib/utils/memoryMonitor.ts +10 -8
- package/src/lib/utils/themeNaming.ts +2 -2
- package/src/styles/01-settings/_index.scss +0 -1
- package/src/styles/01-settings/_settings.colors.scss +8 -8
- package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
- package/src/styles/01-settings/_settings.navbar.scss +1 -1
- package/src/styles/01-settings/_settings.spacing.scss +3 -4
- package/src/styles/01-settings/_settings.tooltip.scss +1 -1
- package/src/styles/01-settings/_settings.typography.scss +1 -1
- package/src/styles/02-tools/_tools.button.scss +51 -21
- package/src/styles/02-tools/_tools.utility-api.scss +30 -18
- package/src/styles/03-generic/_generic.root.scss +4 -3
- package/src/styles/06-components/_components.atomix-glass.scss +13 -9
- package/src/styles/06-components/_components.button.scss +16 -4
- package/src/styles/06-components/_components.callout.scss +27 -21
- package/src/styles/06-components/_components.card.scss +5 -14
- package/src/styles/06-components/_components.chart.scss +22 -19
- package/src/styles/06-components/_components.checkbox.scss +3 -1
- package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
- package/src/styles/06-components/_components.edge-panel.scss +9 -2
- package/src/styles/06-components/_components.footer.scss +1 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -5
- package/src/styles/06-components/_components.toggle.scss +18 -0
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/06-components/old.chart.styles.scss +0 -2
- package/src/styles/99-utilities/_utilities.border.scss +69 -27
- package/src/styles/99-utilities/_utilities.display.scss +1 -1
- package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
- package/src/styles/99-utilities/_utilities.position.scss +16 -9
- package/src/styles/99-utilities/_utilities.scss +1 -1
- package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
- package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
- package/src/styles/99-utilities/_utilities.text-gradient.scss +30 -30
- package/src/styles/99-utilities/_utilities.text.scss +67 -46
|
@@ -29,10 +29,7 @@ const TestComponent = ({ onThemeChange }: { onThemeChange?: (theme: string) => v
|
|
|
29
29
|
>
|
|
30
30
|
Update Typography
|
|
31
31
|
</button>
|
|
32
|
-
<button
|
|
33
|
-
data-testid="reset-theme"
|
|
34
|
-
onClick={() => setTheme(defaultTheme)}
|
|
35
|
-
>
|
|
32
|
+
<button data-testid="reset-theme" onClick={() => setTheme(defaultTheme)}>
|
|
36
33
|
Reset Theme
|
|
37
34
|
</button>
|
|
38
35
|
</div>
|
|
@@ -40,14 +37,14 @@ const TestComponent = ({ onThemeChange }: { onThemeChange?: (theme: string) => v
|
|
|
40
37
|
};
|
|
41
38
|
|
|
42
39
|
const defaultTheme = {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
primary: '#7c3aed',
|
|
41
|
+
secondary: '#6b7280',
|
|
42
|
+
success: '#22c55e',
|
|
43
|
+
error: '#ef4444',
|
|
44
|
+
warning: '#eab308',
|
|
45
|
+
info: '#3b82f6',
|
|
46
|
+
light: '#f9fafb',
|
|
47
|
+
dark: '#1f2937',
|
|
51
48
|
'primary-rgb': '124, 58, 237',
|
|
52
49
|
'secondary-rgb': '107, 114, 128',
|
|
53
50
|
'success-rgb': '34, 197, 94',
|
|
@@ -164,9 +161,10 @@ const defaultTheme = {
|
|
|
164
161
|
'info-gradient': 'linear-gradient(135deg, #eff6ff, #dbeafe, #bfdbfe)',
|
|
165
162
|
'warning-gradient': 'linear-gradient(135deg, #fefce8, #fef9c3, #fef08a)',
|
|
166
163
|
'error-gradient': 'linear-gradient(135deg, #fef2f2, #fee2e2, #fecaca)',
|
|
167
|
-
|
|
164
|
+
gradient: 'linear-gradient(135deg, #f9fafb, #f3f4f6, #e5e7eb)',
|
|
168
165
|
'font-sans-serif': '"Roboto", sans-serif',
|
|
169
|
-
'font-monospace':
|
|
166
|
+
'font-monospace':
|
|
167
|
+
'SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',
|
|
170
168
|
'body-font-family': '"Roboto", sans-serif',
|
|
171
169
|
'body-font-size': '1rem',
|
|
172
170
|
'body-font-weight': '400',
|
|
@@ -299,7 +297,7 @@ const defaultTheme = {
|
|
|
299
297
|
|
|
300
298
|
const customTheme = {
|
|
301
299
|
...defaultTheme,
|
|
302
|
-
|
|
300
|
+
primary: '#8b5cf6',
|
|
303
301
|
'error-text-emphasis': '#7f1d1d',
|
|
304
302
|
'success-text-emphasis': '#14532d',
|
|
305
303
|
};
|
|
@@ -406,7 +404,7 @@ describe('ThemeProvider', () => {
|
|
|
406
404
|
|
|
407
405
|
it('should handle theme change callbacks', () => {
|
|
408
406
|
const onThemeChange = vi.fn();
|
|
409
|
-
|
|
407
|
+
|
|
410
408
|
render(
|
|
411
409
|
<ThemeProvider theme={defaultTheme}>
|
|
412
410
|
<TestComponent onThemeChange={onThemeChange} />
|
|
@@ -421,8 +419,8 @@ describe('ThemeProvider', () => {
|
|
|
421
419
|
expect(onThemeChange).toHaveBeenCalledWith(
|
|
422
420
|
expect.objectContaining({
|
|
423
421
|
colors: expect.objectContaining({
|
|
424
|
-
primary: '#8b5cf6'
|
|
425
|
-
})
|
|
422
|
+
primary: '#8b5cf6',
|
|
423
|
+
}),
|
|
426
424
|
})
|
|
427
425
|
);
|
|
428
426
|
});
|
|
@@ -442,10 +440,7 @@ describe('ThemeProvider', () => {
|
|
|
442
440
|
fireEvent.click(screen.getByTestId('update-primary'));
|
|
443
441
|
});
|
|
444
442
|
|
|
445
|
-
expect(setItemSpy).toHaveBeenCalledWith(
|
|
446
|
-
'atomix-theme',
|
|
447
|
-
expect.stringContaining('#8b5cf6')
|
|
448
|
-
);
|
|
443
|
+
expect(setItemSpy).toHaveBeenCalledWith('atomix-theme', expect.stringContaining('#8b5cf6'));
|
|
449
444
|
|
|
450
445
|
setItemSpy.mockRestore();
|
|
451
446
|
});
|
|
@@ -514,10 +509,10 @@ describe('ThemeProvider', () => {
|
|
|
514
509
|
// Update only part of the colors section
|
|
515
510
|
const TestPartialUpdate = () => {
|
|
516
511
|
const { updateTheme } = useTheme();
|
|
517
|
-
|
|
512
|
+
|
|
518
513
|
return (
|
|
519
|
-
<button
|
|
520
|
-
data-testid="partial-update"
|
|
514
|
+
<button
|
|
515
|
+
data-testid="partial-update"
|
|
521
516
|
onClick={() => updateTheme('colors', { secondary: '#ec4899' })}
|
|
522
517
|
>
|
|
523
518
|
Partial Update
|
|
@@ -556,10 +551,10 @@ describe('useTheme Hook Error Handling', () => {
|
|
|
556
551
|
it('should handle invalid theme sections gracefully', () => {
|
|
557
552
|
const TestInvalidUpdate = () => {
|
|
558
553
|
const { updateTheme } = useTheme();
|
|
559
|
-
|
|
554
|
+
|
|
560
555
|
return (
|
|
561
|
-
<button
|
|
562
|
-
data-testid="invalid-update"
|
|
556
|
+
<button
|
|
557
|
+
data-testid="invalid-update"
|
|
563
558
|
onClick={() => updateTheme('invalid-section' as ThemeSection, { test: 'value' })}
|
|
564
559
|
>
|
|
565
560
|
Invalid Update
|
|
@@ -585,4 +580,4 @@ describe('useTheme Hook Error Handling', () => {
|
|
|
585
580
|
|
|
586
581
|
consoleSpy.mockRestore();
|
|
587
582
|
});
|
|
588
|
-
});
|
|
583
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Theme Runtime Module
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Runtime components for theme management
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -11,7 +11,4 @@ export { useThemeTokens } from './useThemeTokens';
|
|
|
11
11
|
export { ThemeApplicator, getThemeApplicator, applyTheme } from './ThemeApplicator';
|
|
12
12
|
export type { ThemeErrorBoundaryProps } from './ThemeErrorBoundary';
|
|
13
13
|
|
|
14
|
-
export type {
|
|
15
|
-
ThemeChangeEvent,
|
|
16
|
-
ThemeLoadOptions,
|
|
17
|
-
} from '../types';
|
|
14
|
+
export type { ThemeChangeEvent, ThemeLoadOptions } from '../types';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useTheme Hook
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* React hook for accessing theme context
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -10,14 +10,14 @@ import type { UseThemeReturn } from '../types';
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* useTheme hook
|
|
13
|
-
*
|
|
13
|
+
*
|
|
14
14
|
* Access theme context and theme management functions
|
|
15
|
-
*
|
|
15
|
+
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```tsx
|
|
18
18
|
* function MyComponent() {
|
|
19
19
|
* const { theme, setTheme, availableThemes } = useTheme();
|
|
20
|
-
*
|
|
20
|
+
*
|
|
21
21
|
* return (
|
|
22
22
|
* <div>
|
|
23
23
|
* <p>Current theme: {theme}</p>
|
|
@@ -30,22 +30,22 @@ import type { UseThemeReturn } from '../types';
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
export function useTheme(): UseThemeReturn {
|
|
33
|
-
|
|
33
|
+
const context = useContext(ThemeContext);
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
if (!context) {
|
|
36
|
+
throw new Error('useTheme must be used within a ThemeProvider');
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
return {
|
|
40
|
+
theme: context.theme,
|
|
41
|
+
activeTokens: context.activeTokens,
|
|
42
|
+
setTheme: context.setTheme,
|
|
43
|
+
availableThemes: context.availableThemes,
|
|
44
|
+
isLoading: context.isLoading,
|
|
45
|
+
error: context.error,
|
|
46
|
+
isThemeLoaded: context.isThemeLoaded,
|
|
47
|
+
preloadTheme: context.preloadTheme,
|
|
48
|
+
};
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export default useTheme;
|
|
@@ -9,29 +9,29 @@ import type { DesignTokens } from '../tokens/tokens';
|
|
|
9
9
|
* and DesignTokens.
|
|
10
10
|
*/
|
|
11
11
|
type ThemeTokens = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
shadows: Record<string, string>;
|
|
33
|
-
transitions: Record<string, string>;
|
|
12
|
+
theme: string;
|
|
13
|
+
activeTokens: DesignTokens | null;
|
|
14
|
+
getToken: (tokenName: string, fallback?: string) => string;
|
|
15
|
+
colors: {
|
|
16
|
+
primary: string;
|
|
17
|
+
secondary: string;
|
|
18
|
+
error: string;
|
|
19
|
+
success: string;
|
|
20
|
+
warning: string;
|
|
21
|
+
info: string;
|
|
22
|
+
light: string;
|
|
23
|
+
dark: string;
|
|
24
|
+
};
|
|
25
|
+
spacing: Record<string, string>;
|
|
26
|
+
borderRadius: Record<string, string>;
|
|
27
|
+
typography: {
|
|
28
|
+
fontFamily: Record<string, string>;
|
|
29
|
+
fontSize: Record<string, string>;
|
|
30
|
+
fontWeight: Record<string, string>;
|
|
34
31
|
};
|
|
32
|
+
shadows: Record<string, string>;
|
|
33
|
+
transitions: Record<string, string>;
|
|
34
|
+
};
|
|
35
35
|
|
|
36
36
|
export function useThemeTokens(): ThemeTokens {
|
|
37
37
|
const { theme, activeTokens } = useTheme();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Test Theme
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Comprehensive test theme demonstrating both DesignTokens and Theme object approaches.
|
|
5
5
|
* This file can be used for testing the theme system, adapters, and generators.
|
|
6
6
|
*/
|
|
@@ -17,30 +17,30 @@ import { themeToDesignTokens, createDesignTokensFromTheme } from '../adapters/th
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Test theme using DesignTokens (flat structure)
|
|
20
|
-
*
|
|
20
|
+
*
|
|
21
21
|
* This is the recommended approach for most use cases.
|
|
22
22
|
* DesignTokens directly map to CSS variables.
|
|
23
23
|
*/
|
|
24
24
|
export const testThemeTokens: Partial<DesignTokens> = {
|
|
25
25
|
// Primary colors
|
|
26
|
-
|
|
26
|
+
primary: '#7AFFD7',
|
|
27
27
|
'primary-3': '#B3FFE9',
|
|
28
28
|
'primary-6': '#7AFFD7',
|
|
29
29
|
'primary-9': '#00E6C3',
|
|
30
30
|
'primary-rgb': '122, 255, 215',
|
|
31
31
|
|
|
32
32
|
// Secondary colors
|
|
33
|
-
|
|
33
|
+
secondary: '#FF6B9D',
|
|
34
34
|
'secondary-rgb': '255, 107, 157',
|
|
35
35
|
|
|
36
36
|
// Semantic colors
|
|
37
|
-
|
|
37
|
+
success: '#1AFF85',
|
|
38
38
|
'success-rgb': '26, 255, 133',
|
|
39
|
-
|
|
39
|
+
error: '#FF1A1A',
|
|
40
40
|
'error-rgb': '255, 26, 26',
|
|
41
|
-
|
|
41
|
+
warning: '#FFB800',
|
|
42
42
|
'warning-rgb': '255, 184, 0',
|
|
43
|
-
|
|
43
|
+
info: '#1A9FFF',
|
|
44
44
|
'info-rgb': '26, 159, 255',
|
|
45
45
|
|
|
46
46
|
// Background colors
|
|
@@ -129,7 +129,7 @@ export function generateTestThemeCSS(): string {
|
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
131
|
* Test theme using Theme object (nested structure)
|
|
132
|
-
*
|
|
132
|
+
*
|
|
133
133
|
* This approach provides more structure and computed values.
|
|
134
134
|
* Useful for advanced use cases that need theme composition.
|
|
135
135
|
*/
|
|
@@ -282,7 +282,7 @@ export function generateTestThemeCSSFromObject(): string {
|
|
|
282
282
|
* Minimal test theme for quick testing
|
|
283
283
|
*/
|
|
284
284
|
export const minimalTestTheme: Partial<DesignTokens> = {
|
|
285
|
-
|
|
285
|
+
primary: '#7AFFD7',
|
|
286
286
|
'body-bg': '#000000',
|
|
287
287
|
'body-color': '#FFFFFF',
|
|
288
288
|
'body-font-family': '"Inter", sans-serif',
|
|
@@ -301,7 +301,7 @@ export function generateMinimalTestThemeCSS(): string {
|
|
|
301
301
|
|
|
302
302
|
/**
|
|
303
303
|
* Test theme adapter conversion
|
|
304
|
-
*
|
|
304
|
+
*
|
|
305
305
|
* Converts Theme object to DesignTokens and back to verify adapter works correctly.
|
|
306
306
|
*/
|
|
307
307
|
export function testThemeAdapter(): {
|
|
@@ -322,7 +322,7 @@ export function testThemeAdapter(): {
|
|
|
322
322
|
|
|
323
323
|
/**
|
|
324
324
|
* Compare CSS output from both approaches
|
|
325
|
-
*
|
|
325
|
+
*
|
|
326
326
|
* Verifies that DesignTokens and Theme object produce similar CSS output.
|
|
327
327
|
*/
|
|
328
328
|
export function compareThemeOutputs(): {
|
|
@@ -333,7 +333,7 @@ export function compareThemeOutputs(): {
|
|
|
333
333
|
} {
|
|
334
334
|
const fromTokens = generateTestThemeCSS();
|
|
335
335
|
const fromTheme = generateTestThemeCSSFromObject();
|
|
336
|
-
|
|
336
|
+
|
|
337
337
|
const theme = createTestThemeObject();
|
|
338
338
|
const themeTokens = themeToDesignTokens(theme);
|
|
339
339
|
|
|
@@ -347,12 +347,12 @@ export function compareThemeOutputs(): {
|
|
|
347
347
|
|
|
348
348
|
/**
|
|
349
349
|
* Test theme composition
|
|
350
|
-
*
|
|
350
|
+
*
|
|
351
351
|
* Tests extending a base theme with customizations.
|
|
352
352
|
*/
|
|
353
353
|
export function testThemeComposition(): Theme {
|
|
354
354
|
const baseTheme = createTestThemeObject();
|
|
355
|
-
|
|
355
|
+
|
|
356
356
|
// Extend with custom options
|
|
357
357
|
const extendedTheme = createThemeObject(
|
|
358
358
|
{
|
|
@@ -383,4 +383,3 @@ export const testThemes = {
|
|
|
383
383
|
compareOutputs: compareThemeOutputs,
|
|
384
384
|
testComposition: testThemeComposition,
|
|
385
385
|
};
|
|
386
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Design Tokens
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Simple flat structure for design tokens.
|
|
5
5
|
* All tokens match the actual CSS variables used in Atomix.
|
|
6
6
|
* Based on docs/tokes-list.md
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Design tokens interface
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
12
|
* Flat structure - no nesting complexity.
|
|
13
13
|
* Keys use kebab-case format matching CSS variable names (without --atomix- prefix).
|
|
14
14
|
*/
|
|
@@ -16,14 +16,14 @@ export interface DesignTokens {
|
|
|
16
16
|
// ============================================================================
|
|
17
17
|
// Colors - Base
|
|
18
18
|
// ============================================================================
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
primary: string;
|
|
20
|
+
secondary: string;
|
|
21
|
+
success: string;
|
|
22
|
+
info: string;
|
|
23
|
+
warning: string;
|
|
24
|
+
error: string;
|
|
25
|
+
light: string;
|
|
26
|
+
dark: string;
|
|
27
27
|
|
|
28
28
|
// RGB versions
|
|
29
29
|
'primary-rgb': string;
|
|
@@ -186,7 +186,7 @@ export interface DesignTokens {
|
|
|
186
186
|
'info-gradient': string;
|
|
187
187
|
'warning-gradient': string;
|
|
188
188
|
'error-gradient': string;
|
|
189
|
-
|
|
189
|
+
gradient: string;
|
|
190
190
|
|
|
191
191
|
// ============================================================================
|
|
192
192
|
// Typography - Fonts
|
|
@@ -386,19 +386,19 @@ export interface DesignTokens {
|
|
|
386
386
|
|
|
387
387
|
/**
|
|
388
388
|
* Default design tokens
|
|
389
|
-
*
|
|
389
|
+
*
|
|
390
390
|
* Based on Atomix default theme values from docs/tokes-list.md (light mode)
|
|
391
391
|
*/
|
|
392
392
|
export const defaultTokens: DesignTokens = {
|
|
393
393
|
// Colors - Base
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
394
|
+
primary: '#7c3aed',
|
|
395
|
+
secondary: '#f3f4f6',
|
|
396
|
+
success: '#22c55e',
|
|
397
|
+
info: '#3b82f6',
|
|
398
|
+
warning: '#eab308',
|
|
399
|
+
error: '#ef4444',
|
|
400
|
+
light: '#f9fafb',
|
|
401
|
+
dark: '#1f2937',
|
|
402
402
|
|
|
403
403
|
// RGB versions
|
|
404
404
|
'primary-rgb': '124, 58, 237',
|
|
@@ -539,11 +539,12 @@ export const defaultTokens: DesignTokens = {
|
|
|
539
539
|
'info-gradient': 'linear-gradient(135deg, #dbeafe, #bfdbfe, #60a5fa)',
|
|
540
540
|
'warning-gradient': 'linear-gradient(135deg, #fef9c3, #fef08a, #facc15)',
|
|
541
541
|
'error-gradient': 'linear-gradient(135deg, #fef2f2, #fee2e2, #fecaca)',
|
|
542
|
-
|
|
542
|
+
gradient: 'linear-gradient(135deg, #f9fafb, #f3f4f6, #e5e7eb)',
|
|
543
543
|
|
|
544
544
|
// Typography - Fonts
|
|
545
545
|
'font-sans-serif': '"Roboto", sans-serif',
|
|
546
|
-
'font-monospace':
|
|
546
|
+
'font-monospace':
|
|
547
|
+
'SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',
|
|
547
548
|
'body-font-family': '"Roboto", sans-serif',
|
|
548
549
|
'body-font-size': '1rem',
|
|
549
550
|
'body-font-weight': '400',
|
|
@@ -704,10 +705,10 @@ export const defaultTokens: DesignTokens = {
|
|
|
704
705
|
|
|
705
706
|
/**
|
|
706
707
|
* Create tokens from defaults and overrides
|
|
707
|
-
*
|
|
708
|
+
*
|
|
708
709
|
* @param overrides - Partial tokens to override defaults
|
|
709
710
|
* @returns Complete DesignTokens object
|
|
710
|
-
*
|
|
711
|
+
*
|
|
711
712
|
* @example
|
|
712
713
|
* ```typescript
|
|
713
714
|
* const tokens = createTokens({
|