@shohojdhara/atomix 0.3.5 → 0.3.7

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 (182) hide show
  1. package/README.md +101 -199
  2. package/atomix.config.ts +241 -0
  3. package/dist/atomix.css +260 -179
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +250 -179
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/charts.js +69 -166
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.js +184 -263
  10. package/dist/core.js.map +1 -1
  11. package/dist/forms.js +55 -131
  12. package/dist/forms.js.map +1 -1
  13. package/dist/heavy.js +184 -263
  14. package/dist/heavy.js.map +1 -1
  15. package/dist/index.d.ts +1831 -1657
  16. package/dist/index.esm.js +4497 -4318
  17. package/dist/index.esm.js.map +1 -1
  18. package/dist/index.js +4510 -4328
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.min.js +1 -1
  21. package/dist/index.min.js.map +1 -1
  22. package/dist/theme.d.ts +1431 -1472
  23. package/dist/theme.js +4175 -4138
  24. package/dist/theme.js.map +1 -1
  25. package/package.json +6 -20
  26. package/src/components/Accordion/Accordion.stories.tsx +50 -17
  27. package/src/components/AtomixGlass/AtomixGlass.tsx +128 -322
  28. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +12 -5
  29. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -32
  30. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2 -2
  31. package/src/components/AtomixGlass/stories/shared-components.tsx +0 -31
  32. package/src/components/Avatar/Avatar.stories.tsx +7 -0
  33. package/src/components/Badge/Badge.stories.tsx +91 -13
  34. package/src/components/Block/Block.stories.tsx +7 -23
  35. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +7 -0
  36. package/src/components/Button/Button.stories.tsx +141 -22
  37. package/src/components/Button/Button.tsx +85 -167
  38. package/src/components/Button/ButtonGroup.stories.tsx +315 -0
  39. package/src/components/Button/ButtonGroup.tsx +67 -0
  40. package/src/components/Button/index.ts +2 -0
  41. package/src/components/Callout/Callout.stories.tsx +8 -6
  42. package/src/components/Card/Card.stories.tsx +82 -28
  43. package/src/components/Chart/AnimatedChart.tsx +0 -1
  44. package/src/components/Chart/AreaChart.tsx +0 -1
  45. package/src/components/Chart/BarChart.tsx +0 -1
  46. package/src/components/Chart/BubbleChart.tsx +0 -1
  47. package/src/components/Chart/CandlestickChart.tsx +0 -1
  48. package/src/components/Chart/Chart.stories.tsx +5 -7
  49. package/src/components/Chart/Chart.tsx +0 -16
  50. package/src/components/Chart/ChartRenderer.tsx +1 -1
  51. package/src/components/Chart/DonutChart.tsx +0 -1
  52. package/src/components/Chart/FunnelChart.tsx +0 -1
  53. package/src/components/Chart/GaugeChart.tsx +0 -1
  54. package/src/components/Chart/HeatmapChart.tsx +0 -1
  55. package/src/components/Chart/LineChart.tsx +0 -1
  56. package/src/components/Chart/MultiAxisChart.tsx +0 -1
  57. package/src/components/Chart/PieChart.tsx +0 -1
  58. package/src/components/Chart/RadarChart.tsx +0 -1
  59. package/src/components/Chart/ScatterChart.tsx +0 -1
  60. package/src/components/Chart/WaterfallChart.tsx +0 -1
  61. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +7 -0
  62. package/src/components/DataTable/DataTable.stories.tsx +23 -16
  63. package/src/components/DatePicker/DatePicker.stories.tsx +27 -19
  64. package/src/components/Dropdown/Dropdown.stories.tsx +11 -19
  65. package/src/components/EdgePanel/EdgePanel.stories.tsx +1 -0
  66. package/src/components/Footer/Footer.stories.tsx +8 -6
  67. package/src/components/Footer/FooterLink.tsx +9 -2
  68. package/src/components/Form/Checkbox.stories.tsx +7 -0
  69. package/src/components/Form/Form.stories.tsx +7 -0
  70. package/src/components/Form/FormGroup.stories.tsx +9 -1
  71. package/src/components/Form/Input.stories.tsx +69 -16
  72. package/src/components/Form/Radio.stories.tsx +9 -1
  73. package/src/components/Form/Select.stories.tsx +9 -1
  74. package/src/components/Form/Textarea.stories.tsx +10 -2
  75. package/src/components/Hero/Hero.stories.tsx +7 -0
  76. package/src/components/List/List.stories.tsx +7 -0
  77. package/src/components/Messages/Messages.stories.tsx +8 -7
  78. package/src/components/Modal/Modal.stories.tsx +17 -6
  79. package/src/components/Navigation/Menu/Menu.stories.tsx +7 -0
  80. package/src/components/Navigation/Nav/Nav.stories.tsx +7 -0
  81. package/src/components/Navigation/Navbar/Navbar.stories.tsx +1 -0
  82. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +1 -1
  83. package/src/components/Pagination/Pagination.stories.tsx +188 -111
  84. package/src/components/Pagination/Pagination.tsx +83 -3
  85. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -5
  86. package/src/components/Popover/Popover.stories.tsx +191 -115
  87. package/src/components/ProductReview/ProductReview.stories.tsx +80 -58
  88. package/src/components/Progress/Progress.stories.tsx +79 -49
  89. package/src/components/Rating/Rating.stories.tsx +109 -84
  90. package/src/components/River/River.stories.tsx +194 -114
  91. package/src/components/SectionIntro/SectionIntro.stories.tsx +19 -9
  92. package/src/components/Slider/Slider.stories.tsx +7 -0
  93. package/src/components/Spinner/Spinner.stories.tsx +15 -11
  94. package/src/components/Steps/Steps.stories.tsx +132 -98
  95. package/src/components/Tabs/Tabs.stories.tsx +163 -112
  96. package/src/components/Testimonial/Testimonial.stories.tsx +114 -68
  97. package/src/components/Todo/Todo.stories.tsx +38 -12
  98. package/src/components/Toggle/Toggle.stories.tsx +61 -28
  99. package/src/components/Tooltip/Tooltip.stories.tsx +318 -200
  100. package/src/components/Upload/Upload.stories.tsx +122 -84
  101. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +7 -24
  102. package/src/components/index.ts +1 -0
  103. package/src/lib/composables/useAtomixGlass.ts +9 -10
  104. package/src/lib/composables/useNavbar.ts +0 -10
  105. package/src/lib/config/loader.ts +4 -4
  106. package/src/lib/constants/components.ts +17 -0
  107. package/src/lib/hooks/useComponentCustomization.ts +1 -1
  108. package/src/lib/hooks/usePerformanceMonitor.ts +1 -1
  109. package/src/lib/hooks/useThemeTokens.ts +105 -0
  110. package/src/lib/theme/README.md +174 -0
  111. package/src/lib/theme/adapters/index.ts +31 -0
  112. package/src/lib/theme/adapters/themeAdapter.ts +287 -0
  113. package/src/lib/theme/config/__tests__/configLoader.test.ts +207 -0
  114. package/src/lib/theme/config/configLoader.ts +95 -0
  115. package/src/lib/theme/config/loader.ts +37 -54
  116. package/src/lib/theme/config/types.ts +2 -2
  117. package/src/lib/theme/config/validator.ts +15 -91
  118. package/src/lib/theme/{constants.ts → constants/constants.ts} +1 -19
  119. package/src/lib/theme/constants/index.ts +8 -0
  120. package/src/lib/theme/core/ThemeRegistry.ts +75 -266
  121. package/src/lib/theme/core/__tests__/createTheme.test.ts +132 -0
  122. package/src/lib/theme/core/composeTheme.ts +105 -0
  123. package/src/lib/theme/core/createTheme.ts +108 -0
  124. package/src/lib/theme/{createTheme.ts → core/createThemeObject.ts} +12 -8
  125. package/src/lib/theme/core/index.ts +19 -19
  126. package/src/lib/theme/devtools/Comparator.tsx +346 -22
  127. package/src/lib/theme/devtools/IMPROVEMENTS.md +139 -38
  128. package/src/lib/theme/devtools/Inspector.tsx +335 -51
  129. package/src/lib/theme/devtools/LiveEditor.tsx +478 -107
  130. package/src/lib/theme/devtools/Preview.tsx +471 -221
  131. package/src/lib/theme/{core → devtools}/ThemeValidator.ts +1 -1
  132. package/src/lib/theme/devtools/index.ts +14 -4
  133. package/src/lib/theme/devtools/useHistory.ts +130 -0
  134. package/src/lib/theme/{errors.ts → errors/errors.ts} +1 -1
  135. package/src/lib/theme/errors/index.ts +12 -0
  136. package/src/lib/theme/generators/cssFile.ts +79 -0
  137. package/src/lib/theme/generators/generateCSS.ts +89 -0
  138. package/src/lib/theme/generators/generateCSSNested.ts +130 -0
  139. package/src/lib/theme/{generateCSSVariables.ts → generators/generateCSSVariables.ts} +3 -13
  140. package/src/lib/theme/generators/index.ts +25 -0
  141. package/src/lib/theme/i18n/rtl.ts +5 -6
  142. package/src/lib/theme/index.ts +149 -19
  143. package/src/lib/theme/runtime/ThemeApplicator.ts +53 -112
  144. package/src/lib/theme/{ThemeContext.tsx → runtime/ThemeContext.tsx} +1 -1
  145. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +5 -5
  146. package/src/lib/theme/runtime/ThemeProvider.tsx +266 -282
  147. package/src/lib/theme/runtime/index.ts +2 -2
  148. package/src/lib/theme/runtime/useTheme.ts +1 -2
  149. package/src/lib/theme/runtime/useThemeTokens.ts +131 -0
  150. package/src/lib/theme/test/testTheme.ts +385 -0
  151. package/src/lib/theme/tokens/index.ts +12 -0
  152. package/src/lib/theme/tokens/tokens.ts +721 -0
  153. package/src/lib/theme/types.ts +6 -42
  154. package/src/lib/theme/utils/componentTheming.ts +132 -0
  155. package/src/lib/theme/{utils.ts → utils/domUtils.ts} +2 -2
  156. package/src/lib/theme/utils/index.ts +11 -0
  157. package/src/lib/theme/utils/injectCSS.ts +90 -0
  158. package/src/lib/theme/utils/naming.ts +100 -0
  159. package/src/lib/theme/utils/themeHelpers.ts +78 -0
  160. package/src/lib/theme/{themeUtils.ts → utils/themeUtils.ts} +7 -7
  161. package/src/lib/theme-tools.ts +7 -8
  162. package/src/lib/types/components.ts +40 -130
  163. package/src/lib/utils/componentUtils.ts +2 -2
  164. package/src/lib/utils/memoryMonitor.ts +3 -3
  165. package/src/lib/utils/themeNaming.ts +135 -0
  166. package/src/styles/01-settings/_settings.design-tokens.scss +4 -1
  167. package/src/styles/02-tools/_tools.button.scss +66 -79
  168. package/src/styles/06-components/_components.atomix-glass.scss +13 -3
  169. package/src/styles/06-components/_components.pagination.scss +88 -0
  170. package/scripts/sync-theme-config.js +0 -309
  171. package/src/lib/theme/composeTheme.ts +0 -370
  172. package/src/lib/theme/core/ThemeCache.ts +0 -283
  173. package/src/lib/theme/core/ThemeEngine.test.ts +0 -146
  174. package/src/lib/theme/core/ThemeEngine.ts +0 -665
  175. package/src/lib/theme/createThemeFromConfig.ts +0 -132
  176. package/src/lib/theme/devtools/CLI.ts +0 -364
  177. package/src/lib/theme/runtime/ThemeManager.test.ts +0 -192
  178. package/src/lib/theme/runtime/ThemeManager.ts +0 -446
  179. package/src/styles/03-generic/_generated-root.css +0 -26
  180. package/src/themes/README.md +0 -442
  181. package/src/themes/themes.config.js +0 -68
  182. /package/src/lib/theme/{cssVariableMapper.ts → adapters/cssVariableMapper.ts} +0 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Core Theme Functions
3
+ *
4
+ * Simplified theme system that handles both DesignTokens and Theme objects.
5
+ * Config-first approach: loads from atomix.config.ts when no input is provided.
6
+ * Config file is required for automatic loading.
7
+ */
8
+
9
+ import type { DesignTokens } from '../tokens/tokens';
10
+ import type { Theme } from '../types';
11
+ import type { GenerateCSSVariablesOptions } from '../generators/generateCSS';
12
+ import { createTokens } from '../tokens/tokens';
13
+ import { generateCSSVariables } from '../generators/generateCSS';
14
+ import { themeToDesignTokens } from '../adapters/themeAdapter';
15
+
16
+ /**
17
+ * Create theme CSS from tokens or Theme object
18
+ *
19
+ * **Config-First Approach**: If no input is provided, loads from `atomix.config.ts`.
20
+ * Config file is required for automatic loading.
21
+ *
22
+ * @param input - DesignTokens (partial), Theme object, or undefined (loads from config)
23
+ * @param options - CSS generation options (prefix is automatically read from config if not provided)
24
+ * @returns CSS string with custom properties
25
+ * @throws Error if config loading fails when no input is provided
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Loads from atomix.config.ts (config file required)
30
+ * const css = createTheme();
31
+ *
32
+ * // Using DesignTokens
33
+ * const css = createTheme({
34
+ * 'primary': '#7c3aed',
35
+ * 'spacing-4': '1rem',
36
+ * });
37
+ *
38
+ * // Using Theme object
39
+ * const theme = createThemeObject({ palette: { primary: { main: '#7c3aed' } } });
40
+ * const css = createTheme(theme);
41
+ *
42
+ * // With custom options
43
+ * const css = createTheme(undefined, { prefix: 'myapp', selector: ':root' });
44
+ * ```
45
+ */
46
+ export function createTheme(
47
+ input?: Partial<DesignTokens> | Theme,
48
+ options?: GenerateCSSVariablesOptions
49
+ ): string {
50
+ // Determine tokens based on input
51
+ let tokens: Partial<DesignTokens>;
52
+
53
+ if (!input) {
54
+ // Check if we're in a browser environment
55
+ if (typeof window !== 'undefined') {
56
+ throw new Error('createTheme: No input provided and config loading is not available in browser environment. Please provide tokens explicitly or use Node.js/SSR environment.');
57
+ }
58
+
59
+ // Load from config when no input provided
60
+ // Using dynamic import in a way that's more compatible with bundlers
61
+ let loadThemeFromConfigSync: any;
62
+ let loadAtomixConfig: any;
63
+
64
+ try {
65
+ // Use dynamic require but only in Node.js environments
66
+ // This approach allows bundlers to properly handle external dependencies
67
+ const configLoaderModule = require('../config/configLoader');
68
+ const loaderModule = require('../../config/loader');
69
+
70
+ loadThemeFromConfigSync = configLoaderModule.loadThemeFromConfigSync;
71
+ loadAtomixConfig = loaderModule.loadAtomixConfig;
72
+
73
+ tokens = loadThemeFromConfigSync();
74
+
75
+ // Get prefix from config if needed
76
+ if (!options?.prefix) {
77
+ try {
78
+ const config = loadAtomixConfig({ configPath: 'atomix.config.ts', required: false });
79
+ options = { ...options, prefix: config?.prefix || 'atomix' };
80
+ } catch (error) {
81
+ // If config loading fails, use default prefix
82
+ options = { ...options, prefix: 'atomix' };
83
+ }
84
+ }
85
+ } catch (error) {
86
+ throw new Error('createTheme: No input provided and config loading is not available in this environment. Please provide tokens explicitly.');
87
+ }
88
+ } else if (isThemeObject(input)) {
89
+ // Convert Theme object to DesignTokens
90
+ tokens = themeToDesignTokens(input);
91
+ } else {
92
+ // Use DesignTokens directly
93
+ tokens = input;
94
+ }
95
+
96
+ // Merge with defaults and generate CSS
97
+ const allTokens = createTokens(tokens);
98
+
99
+ // Get prefix from options or use default
100
+ const prefix = options?.prefix ?? 'atomix';
101
+
102
+ return generateCSSVariables(allTokens, { ...options, prefix });
103
+ }
104
+
105
+ // Helper functions to simplify main function
106
+ function isThemeObject(input: any): input is Theme {
107
+ return input?.__isJSTheme === true || (input?.palette && input?.typography);
108
+ }
@@ -1,12 +1,16 @@
1
1
  /**
2
- * createTheme - Create a theme object with computed values
2
+ * createThemeObject - Create a theme object with computed values
3
3
  *
4
4
  * Similar to Material-UI's createTheme, this function accepts theme configuration
5
5
  * options and returns a complete theme object with computed values.
6
6
  *
7
+ * NOTE: For most use cases, use the simple theme system's `createTheme` instead,
8
+ * which generates CSS from DesignTokens. This function is for advanced use cases
9
+ * that need the full Theme object structure.
10
+ *
7
11
  * @example
8
12
  * ```typescript
9
- * const theme = createTheme({
13
+ * const theme = createThemeObject({
10
14
  * palette: {
11
15
  * primary: { main: '#7AFFD7' },
12
16
  * secondary: { main: '#FF5733' },
@@ -31,8 +35,8 @@ import type {
31
35
  TransitionOptions,
32
36
  ZIndexOptions,
33
37
  BorderRadiusOptions,
34
- } from './types';
35
- import { hexToRgb, getLuminance, getContrastText, lighten, darken, createSpacing } from './themeUtils';
38
+ } from '../types';
39
+ import { hexToRgb, getLuminance, getContrastText, lighten, darken, createSpacing } from '../utils/themeUtils';
36
40
  import { deepMerge } from './composeTheme';
37
41
 
38
42
  // ============================================================================
@@ -291,7 +295,7 @@ function createBreakpoints(breakpointsInput?: BreakpointsOptions): Theme['breakp
291
295
  * @param options - Theme configuration options
292
296
  * @returns Complete theme object
293
297
  */
294
- export function createTheme(...options: ThemeOptions[]): Theme {
298
+ export function createThemeObject(...options: ThemeOptions[]): Theme {
295
299
  // Merge all options
296
300
  const mergedOptions = options.reduce((acc, option) => deepMerge(acc, option), {} as ThemeOptions);
297
301
 
@@ -323,8 +327,8 @@ export function createTheme(...options: ThemeOptions[]): Theme {
323
327
 
324
328
  // Create typography
325
329
  const typography: Theme['typography'] = deepMerge(
326
- { ...DEFAULT_TYPOGRAPHY } as any,
327
- (mergedOptions.typography || {}) as any
330
+ { ...DEFAULT_TYPOGRAPHY } as Partial<Theme['typography']>,
331
+ (mergedOptions.typography || {}) as Partial<Theme['typography']>
328
332
  ) as Theme['typography'];
329
333
 
330
334
  // Create spacing
@@ -385,4 +389,4 @@ export function createTheme(...options: ThemeOptions[]): Theme {
385
389
  return theme;
386
390
  }
387
391
 
388
- export default createTheme;
392
+ export default createThemeObject;
@@ -1,24 +1,24 @@
1
1
  /**
2
- * Theme Core Module
2
+ * Core Theme Engine
3
3
  *
4
- * Core engine components for theme management
4
+ * Core theme creation, composition, and registry functionality
5
5
  */
6
6
 
7
- export { ThemeEngine } from './ThemeEngine';
8
- export { ThemeRegistry } from './ThemeRegistry';
9
- export { ThemeCache } from './ThemeCache';
10
- export { ThemeValidator } from './ThemeValidator';
7
+ export { createTheme } from './createTheme';
8
+ export { createThemeObject } from './createThemeObject';
9
+ export { deepMerge, mergeTheme, extendTheme } from './composeTheme';
11
10
 
12
- export type {
13
- ThemeChangeEvent,
14
- ThemeLoadOptions,
15
- ThemeChangeListener,
16
- ThemeLoadListener,
17
- ThemeErrorListener,
18
- ThemeEngineConfig,
19
- } from './ThemeEngine';
20
-
21
- export type {
22
- ValidationResult,
23
- A11yIssue,
24
- } from './ThemeValidator';
11
+ // Simplified Theme Registry API
12
+ export {
13
+ createThemeRegistry,
14
+ registerTheme,
15
+ unregisterTheme,
16
+ hasTheme,
17
+ getTheme,
18
+ getAllThemes,
19
+ getThemeIds,
20
+ clearThemes,
21
+ getThemeCount,
22
+ type ThemeRegistry,
23
+ type ThemeMetadata
24
+ } from './ThemeRegistry';