@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.
Files changed (245) hide show
  1. package/build-tools/index.d.ts +31 -30
  2. package/build-tools/package.json +4 -21
  3. package/dist/atomix.css +20924 -2611
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +76 -2
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/build-tools/index.d.ts +31 -30
  8. package/dist/build-tools/package.json +4 -21
  9. package/dist/charts.js.map +1 -1
  10. package/dist/core.js.map +1 -1
  11. package/dist/forms.js.map +1 -1
  12. package/dist/heavy.js.map +1 -1
  13. package/dist/index.d.ts +144 -18
  14. package/dist/index.esm.js +110 -55
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/index.js +110 -55
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.min.js +1 -1
  19. package/dist/index.min.js.map +1 -1
  20. package/dist/layout.js.map +1 -1
  21. package/dist/theme.d.ts +9 -9
  22. package/dist/theme.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/components/Accordion/Accordion.stories.tsx +32 -23
  25. package/src/components/Accordion/Accordion.test.tsx +70 -50
  26. package/src/components/Accordion/Accordion.tsx +99 -94
  27. package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
  28. package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
  29. package/src/components/AtomixGlass/glass-utils.ts +4 -3
  30. package/src/components/AtomixGlass/shader-utils.ts +128 -52
  31. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1 -1
  32. package/src/components/AtomixGlass/stories/Shaders.stories.tsx +1 -1
  33. package/src/components/Avatar/Avatar.stories.tsx +45 -62
  34. package/src/components/Avatar/Avatar.tsx +58 -56
  35. package/src/components/Badge/Badge.stories.tsx +20 -9
  36. package/src/components/Badge/Badge.test.tsx +41 -41
  37. package/src/components/Badge/Badge.tsx +64 -62
  38. package/src/components/Block/Block.stories.tsx +14 -4
  39. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +9 -8
  40. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
  41. package/src/components/Button/Button.stories.tsx +13 -22
  42. package/src/components/Button/Button.test.tsx +97 -81
  43. package/src/components/Button/Button.tsx +46 -14
  44. package/src/components/Button/ButtonGroup.stories.tsx +37 -32
  45. package/src/components/Button/ButtonGroup.tsx +4 -15
  46. package/src/components/Callout/Callout.stories.tsx +109 -16
  47. package/src/components/Card/Card.stories.tsx +67 -36
  48. package/src/components/Card/Card.tsx +30 -14
  49. package/src/components/Chart/AreaChart.tsx +1 -1
  50. package/src/components/Chart/CandlestickChart.tsx +23 -16
  51. package/src/components/Chart/Chart.stories.tsx +4 -9
  52. package/src/components/Chart/Chart.tsx +40 -44
  53. package/src/components/Chart/ChartRenderer.tsx +39 -12
  54. package/src/components/Chart/ChartToolbar.tsx +21 -5
  55. package/src/components/Chart/DonutChart.tsx +1 -1
  56. package/src/components/Chart/FunnelChart.tsx +4 -1
  57. package/src/components/Chart/GaugeChart.tsx +3 -1
  58. package/src/components/Chart/HeatmapChart.tsx +50 -37
  59. package/src/components/Chart/LineChart.tsx +3 -2
  60. package/src/components/Chart/MultiAxisChart.tsx +24 -16
  61. package/src/components/Chart/RadarChart.tsx +19 -17
  62. package/src/components/Chart/ScatterChart.tsx +29 -21
  63. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -2
  64. package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
  65. package/src/components/Countdown/Countdown.stories.tsx +7 -7
  66. package/src/components/DataTable/DataTable.stories.tsx +43 -38
  67. package/src/components/DataTable/DataTable.test.tsx +26 -148
  68. package/src/components/DataTable/DataTable.tsx +485 -456
  69. package/src/components/DatePicker/DatePicker.stories.tsx +32 -47
  70. package/src/components/DatePicker/DatePicker.tsx +31 -26
  71. package/src/components/Dropdown/Dropdown.stories.tsx +2 -5
  72. package/src/components/Dropdown/Dropdown.tsx +313 -299
  73. package/src/components/EdgePanel/EdgePanel.stories.tsx +6 -19
  74. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  75. package/src/components/Footer/Footer.stories.tsx +21 -16
  76. package/src/components/Footer/Footer.tsx +130 -128
  77. package/src/components/Footer/FooterLink.tsx +2 -2
  78. package/src/components/Form/Checkbox.test.tsx +49 -49
  79. package/src/components/Form/Checkbox.tsx +108 -100
  80. package/src/components/Form/Form.stories.tsx +2 -10
  81. package/src/components/Form/Input.stories.tsx +22 -39
  82. package/src/components/Form/Input.test.tsx +38 -44
  83. package/src/components/Form/Radio.stories.tsx +6 -12
  84. package/src/components/Form/Radio.tsx +68 -66
  85. package/src/components/Form/Select.tsx +184 -182
  86. package/src/components/Form/Textarea.test.tsx +27 -32
  87. package/src/components/Hero/Hero.stories.tsx +56 -23
  88. package/src/components/Hero/Hero.tsx +201 -55
  89. package/src/components/Icon/index.ts +7 -1
  90. package/src/components/List/List.tsx +19 -23
  91. package/src/components/Modal/Modal.stories.tsx +2 -1
  92. package/src/components/Modal/Modal.tsx +130 -127
  93. package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
  94. package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
  95. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
  96. package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
  97. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
  98. package/src/components/Pagination/Pagination.stories.tsx +7 -4
  99. package/src/components/Pagination/Pagination.tsx +199 -202
  100. package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
  101. package/src/components/Popover/Popover.stories.tsx +99 -192
  102. package/src/components/Popover/Popover.tsx +41 -37
  103. package/src/components/Progress/Progress.stories.tsx +35 -44
  104. package/src/components/River/River.stories.tsx +2 -1
  105. package/src/components/SectionIntro/SectionIntro.stories.tsx +71 -71
  106. package/src/components/Slider/Slider.stories.tsx +12 -4
  107. package/src/components/Spinner/Spinner.stories.tsx +3 -1
  108. package/src/components/Spinner/Spinner.test.tsx +23 -23
  109. package/src/components/Spinner/Spinner.tsx +43 -46
  110. package/src/components/Steps/Steps.stories.tsx +8 -6
  111. package/src/components/Tabs/Tabs.stories.tsx +12 -9
  112. package/src/components/Tabs/Tabs.tsx +74 -72
  113. package/src/components/Toggle/Toggle.stories.tsx +27 -13
  114. package/src/components/Toggle/Toggle.test.tsx +65 -70
  115. package/src/components/Toggle/Toggle.tsx +4 -1
  116. package/src/components/Tooltip/Tooltip.stories.tsx +24 -20
  117. package/src/components/Tooltip/Tooltip.tsx +104 -106
  118. package/src/components/Upload/Upload.stories.tsx +129 -127
  119. package/src/components/Upload/Upload.tsx +287 -283
  120. package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
  121. package/src/components/index.ts +13 -2
  122. package/src/layouts/Grid/Grid.stories.tsx +9 -3
  123. package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
  124. package/src/lib/__tests__/theme-tools.test.ts +32 -6
  125. package/src/lib/composables/shared-mouse-tracker.ts +13 -14
  126. package/src/lib/composables/useAtomixGlass.ts +106 -49
  127. package/src/lib/composables/useChartExport.ts +1 -1
  128. package/src/lib/composables/useDataTable.ts +29 -17
  129. package/src/lib/composables/useHero.ts +58 -14
  130. package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
  131. package/src/lib/composables/useInput.ts +10 -8
  132. package/src/lib/composables/useSideMenu.ts +6 -5
  133. package/src/lib/composables/useTooltip.ts +1 -2
  134. package/src/lib/composables/useVideoPlayer.ts +44 -35
  135. package/src/lib/config/index.ts +154 -154
  136. package/src/lib/constants/cssVariables.ts +29 -29
  137. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
  138. package/src/lib/hooks/index.ts +1 -1
  139. package/src/lib/hooks/useComponentCustomization.ts +11 -17
  140. package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
  141. package/src/lib/patterns/__tests__/slots.test.ts +1 -1
  142. package/src/lib/patterns/index.ts +1 -1
  143. package/src/lib/patterns/slots.tsx +8 -13
  144. package/src/lib/storybook/InteractiveDemo.tsx +13 -18
  145. package/src/lib/storybook/PreviewContainer.tsx +1 -1
  146. package/src/lib/storybook/VariantsGrid.tsx +3 -7
  147. package/src/lib/storybook/index.ts +1 -1
  148. package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
  149. package/src/lib/theme/adapters/index.ts +3 -9
  150. package/src/lib/theme/adapters/themeAdapter.ts +41 -26
  151. package/src/lib/theme/config/index.ts +1 -1
  152. package/src/lib/theme/config/types.ts +2 -2
  153. package/src/lib/theme/config/validator.ts +10 -5
  154. package/src/lib/theme/constants/constants.ts +2 -2
  155. package/src/lib/theme/constants/index.ts +1 -2
  156. package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
  157. package/src/lib/theme/core/composeTheme.ts +32 -26
  158. package/src/lib/theme/core/createTheme.ts +1 -1
  159. package/src/lib/theme/core/createThemeObject.ts +308 -301
  160. package/src/lib/theme/core/index.ts +3 -3
  161. package/src/lib/theme/devtools/CLI.ts +106 -104
  162. package/src/lib/theme/devtools/Comparator.tsx +50 -32
  163. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
  164. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
  165. package/src/lib/theme/devtools/Inspector.tsx +75 -60
  166. package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
  167. package/src/lib/theme/devtools/Preview.tsx +150 -106
  168. package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
  169. package/src/lib/theme/devtools/index.ts +3 -9
  170. package/src/lib/theme/devtools/useHistory.ts +23 -21
  171. package/src/lib/theme/errors/errors.ts +12 -11
  172. package/src/lib/theme/errors/index.ts +2 -7
  173. package/src/lib/theme/generators/generateCSS.ts +9 -13
  174. package/src/lib/theme/generators/generateCSSNested.ts +1 -6
  175. package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
  176. package/src/lib/theme/generators/index.ts +1 -4
  177. package/src/lib/theme/i18n/index.ts +1 -1
  178. package/src/lib/theme/i18n/rtl.ts +13 -13
  179. package/src/lib/theme/index.ts +7 -16
  180. package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
  181. package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
  182. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
  183. package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
  184. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
  185. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
  186. package/src/lib/theme/runtime/index.ts +2 -5
  187. package/src/lib/theme/runtime/useTheme.ts +18 -18
  188. package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
  189. package/src/lib/theme/test/testTheme.ts +15 -16
  190. package/src/lib/theme/tokens/index.ts +2 -7
  191. package/src/lib/theme/tokens/tokens.ts +25 -24
  192. package/src/lib/theme/types.ts +428 -411
  193. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
  194. package/src/lib/theme/utils/componentTheming.ts +18 -18
  195. package/src/lib/theme/utils/domUtils.ts +277 -289
  196. package/src/lib/theme/utils/index.ts +1 -2
  197. package/src/lib/theme/utils/injectCSS.ts +10 -14
  198. package/src/lib/theme/utils/naming.ts +20 -16
  199. package/src/lib/theme/utils/themeHelpers.ts +10 -12
  200. package/src/lib/theme/utils/themeUtils.ts +85 -86
  201. package/src/lib/theme/utils/themeValidation.ts +82 -33
  202. package/src/lib/theme-tools.ts +8 -6
  203. package/src/lib/types/components.ts +172 -71
  204. package/src/lib/types/partProps.ts +1 -1
  205. package/src/lib/utils/__tests__/csv.test.ts +1 -1
  206. package/src/lib/utils/componentUtils.ts +8 -12
  207. package/src/lib/utils/csv.ts +3 -1
  208. package/src/lib/utils/dataTableExport.ts +1 -5
  209. package/src/lib/utils/fontPreloader.ts +10 -19
  210. package/src/lib/utils/icons.ts +4 -1
  211. package/src/lib/utils/index.ts +2 -6
  212. package/src/lib/utils/memoryMonitor.ts +10 -8
  213. package/src/lib/utils/themeNaming.ts +2 -2
  214. package/src/styles/01-settings/_index.scss +0 -1
  215. package/src/styles/01-settings/_settings.colors.scss +8 -8
  216. package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
  217. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  218. package/src/styles/01-settings/_settings.spacing.scss +3 -4
  219. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  220. package/src/styles/01-settings/_settings.typography.scss +1 -1
  221. package/src/styles/02-tools/_tools.button.scss +51 -21
  222. package/src/styles/02-tools/_tools.utility-api.scss +30 -18
  223. package/src/styles/03-generic/_generic.root.scss +4 -3
  224. package/src/styles/06-components/_components.atomix-glass.scss +13 -9
  225. package/src/styles/06-components/_components.button.scss +16 -4
  226. package/src/styles/06-components/_components.callout.scss +27 -21
  227. package/src/styles/06-components/_components.card.scss +5 -14
  228. package/src/styles/06-components/_components.chart.scss +22 -19
  229. package/src/styles/06-components/_components.checkbox.scss +3 -1
  230. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
  231. package/src/styles/06-components/_components.edge-panel.scss +9 -2
  232. package/src/styles/06-components/_components.footer.scss +1 -1
  233. package/src/styles/06-components/_components.side-menu.scss +5 -5
  234. package/src/styles/06-components/_components.toggle.scss +18 -0
  235. package/src/styles/06-components/_index.scss +1 -1
  236. package/src/styles/06-components/old.chart.styles.scss +0 -2
  237. package/src/styles/99-utilities/_utilities.border.scss +69 -27
  238. package/src/styles/99-utilities/_utilities.display.scss +1 -1
  239. package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
  240. package/src/styles/99-utilities/_utilities.position.scss +16 -9
  241. package/src/styles/99-utilities/_utilities.scss +1 -1
  242. package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
  243. package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
  244. package/src/styles/99-utilities/_utilities.text-gradient.scss +30 -30
  245. package/src/styles/99-utilities/_utilities.text.scss +67 -46
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Component Customization Hook
3
- *
3
+ *
4
4
  * Merges theme-level component overrides with component-level props
5
5
  * for comprehensive customization support.
6
6
  */
@@ -23,7 +23,7 @@ export type ComponentName = keyof ComponentPartsMap;
23
23
  */
24
24
  export interface CustomizableComponentProps<T extends ComponentName> {
25
25
  /** CSS variable overrides */
26
- cssVars?: T extends keyof ComponentCSSVariables
26
+ cssVars?: T extends keyof ComponentCSSVariables
27
27
  ? Partial<Record<ComponentCSSVariables[T], string | number>>
28
28
  : Record<string, string | number>;
29
29
  /** Part-based styling */
@@ -52,13 +52,13 @@ export interface ComponentCustomization<T extends ComponentName> {
52
52
 
53
53
  /**
54
54
  * Hook to merge theme overrides with component props
55
- *
55
+ *
56
56
  * @example
57
57
  * function Button(props: ButtonProps) {
58
58
  * const customization = useComponentCustomization('Button', props);
59
- *
59
+ *
60
60
  * return (
61
- * <button
61
+ * <button
62
62
  * className={customization.className}
63
63
  * style={customization.style}
64
64
  * >
@@ -84,18 +84,12 @@ export function useComponentCustomization<T extends ComponentName>(
84
84
  const parts = useMemo(() => {
85
85
  const themeParts = (theme as any)?.components?.[component]?.parts || {};
86
86
  const propParts = (props.parts || {}) as Record<string, any>;
87
-
87
+
88
88
  const merged: Record<string, any> = {};
89
- const allPartNames = new Set([
90
- ...Object.keys(themeParts),
91
- ...Object.keys(propParts),
92
- ]);
93
-
94
- allPartNames.forEach((partName) => {
95
- merged[partName] = mergePartStyles(
96
- themeParts[partName] as any,
97
- propParts[partName] as any
98
- );
89
+ const allPartNames = new Set([...Object.keys(themeParts), ...Object.keys(propParts)]);
90
+
91
+ allPartNames.forEach(partName => {
92
+ merged[partName] = mergePartStyles(themeParts[partName] as any, propParts[partName] as any);
99
93
  });
100
94
 
101
95
  return merged as ComponentPartsMap[T];
@@ -137,7 +131,7 @@ export function useComponentDefaultProps<T extends ComponentName>(
137
131
  component: T
138
132
  ): Record<string, any> {
139
133
  const { theme } = useTheme();
140
-
134
+
141
135
  return useMemo(() => {
142
136
  return (theme as any)?.components?.[component]?.defaultProps || {};
143
137
  }, [theme, component]);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Performance Monitoring Hook
3
- *
3
+ *
4
4
  * Tracks component render times and re-render counts
5
5
  * for performance analysis and optimization
6
6
  */
@@ -58,10 +58,10 @@ export interface UsePerformanceMonitorOptions {
58
58
 
59
59
  /**
60
60
  * Hook to monitor component performance
61
- *
61
+ *
62
62
  * @param options - Performance monitoring options
63
63
  * @returns Performance metrics
64
- *
64
+ *
65
65
  * @example
66
66
  * ```tsx
67
67
  * function MyComponent() {
@@ -69,7 +69,7 @@ export interface UsePerformanceMonitorOptions {
69
69
  * componentName: 'MyComponent',
70
70
  * warnThreshold: 16, // Warn if render takes > 16ms (1 frame)
71
71
  * });
72
- *
72
+ *
73
73
  * return <div>Content</div>;
74
74
  * }
75
75
  * ```
@@ -77,7 +77,7 @@ export interface UsePerformanceMonitorOptions {
77
77
  export function usePerformanceMonitor(options: UsePerformanceMonitorOptions) {
78
78
  const {
79
79
  componentName,
80
- logToConsole = (typeof process === 'undefined' || process.env?.NODE_ENV === 'development'),
80
+ logToConsole = typeof process === 'undefined' || process.env?.NODE_ENV === 'development',
81
81
  warnThreshold = 16,
82
82
  onMetrics,
83
83
  } = options;
@@ -114,7 +114,7 @@ export function usePerformanceMonitor(options: UsePerformanceMonitorOptions) {
114
114
  if (renderTime > warnThreshold && logToConsole) {
115
115
  console.warn(
116
116
  `[Performance] ${componentName} render took ${renderTime.toFixed(2)}ms ` +
117
- `(threshold: ${warnThreshold}ms)`
117
+ `(threshold: ${warnThreshold}ms)`
118
118
  );
119
119
  }
120
120
 
@@ -146,4 +146,3 @@ export function getPerformanceMetrics(): PerformanceMetrics[] {
146
146
  // For now, this is a placeholder
147
147
  return [];
148
148
  }
149
-
@@ -24,7 +24,7 @@ describe('slots', () => {
24
24
  it('should render with component', () => {
25
25
  const CustomComponent = ({ text }: { text: string }) =>
26
26
  React.createElement('span', null, `Component: ${text}`);
27
-
27
+
28
28
  const slot = {
29
29
  component: CustomComponent,
30
30
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Pattern System Exports
3
- *
3
+ *
4
4
  * Slot and render prop patterns for advanced component customization
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Slot Pattern System
3
- *
3
+ *
4
4
  * Provides render props and slot-based customization for components.
5
5
  * Allows complete control over component rendering and structure.
6
6
  */
@@ -21,13 +21,13 @@ export interface SlotProps<T = any> {
21
21
 
22
22
  /**
23
23
  * Render a slot with the given props
24
- *
24
+ *
25
25
  * Priority order:
26
26
  * 1. render function
27
27
  * 2. component
28
28
  * 3. children
29
29
  * 4. fallback
30
- *
30
+ *
31
31
  * @example
32
32
  * renderSlot(
33
33
  * { render: (props) => <CustomButton {...props} /> },
@@ -87,11 +87,9 @@ export function isSlot<T>(value: any): value is SlotProps<T> {
87
87
  * Merge multiple slot configurations
88
88
  * Later slots override earlier ones
89
89
  */
90
- export function mergeSlots<T>(
91
- ...slots: Array<SlotProps<T> | undefined>
92
- ): SlotProps<T> | undefined {
90
+ export function mergeSlots<T>(...slots: Array<SlotProps<T> | undefined>): SlotProps<T> | undefined {
93
91
  const filtered = slots.filter((s): s is SlotProps<T> => s !== undefined);
94
-
92
+
95
93
  if (filtered.length === 0) return undefined;
96
94
  if (filtered.length === 1) return filtered[0];
97
95
 
@@ -103,10 +101,10 @@ export function mergeSlots<T>(
103
101
 
104
102
  /**
105
103
  * Create a slot wrapper component
106
- *
104
+ *
107
105
  * @example
108
106
  * const ButtonSlot = createSlotComponent<ButtonSlotProps>('button')
109
- *
107
+ *
110
108
  * <ButtonSlot slot={customSlot} {...props}>
111
109
  * Default content
112
110
  * </ButtonSlot>
@@ -414,8 +412,5 @@ export function useSlot<T>(
414
412
  props: T,
415
413
  fallback?: React.ReactNode
416
414
  ): React.ReactNode {
417
- return React.useMemo(
418
- () => renderSlot(slot, props, fallback),
419
- [slot, props, fallback]
420
- );
415
+ return React.useMemo(() => renderSlot(slot, props, fallback), [slot, props, fallback]);
421
416
  }
@@ -16,13 +16,10 @@ interface InteractiveDemoProps {
16
16
  children: React.ReactNode;
17
17
  }
18
18
 
19
- export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
20
- controls,
21
- children,
22
- }) => {
19
+ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({ controls, children }) => {
23
20
  const renderControl = (control: ControlOption, index: number) => {
24
21
  const baseId = `control-${index}`;
25
-
22
+
26
23
  switch (control.type) {
27
24
  case 'select':
28
25
  return (
@@ -33,10 +30,10 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
33
30
  <select
34
31
  id={baseId}
35
32
  value={control.value}
36
- onChange={(e) => control.onChange(e.target.value)}
33
+ onChange={e => control.onChange(e.target.value)}
37
34
  className="w-full px-3 py-2 border rounded-lg"
38
35
  >
39
- {control.options?.map((option) => (
36
+ {control.options?.map(option => (
40
37
  <option key={option} value={option}>
41
38
  {option}
42
39
  </option>
@@ -44,7 +41,7 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
44
41
  </select>
45
42
  </div>
46
43
  );
47
-
44
+
48
45
  case 'slider':
49
46
  return (
50
47
  <div key={baseId} className="mb-4">
@@ -58,12 +55,12 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
58
55
  max={control.max}
59
56
  step={control.step}
60
57
  value={control.value}
61
- onChange={(e) => control.onChange(Number(e.target.value))}
58
+ onChange={e => control.onChange(Number(e.target.value))}
62
59
  className="w-full"
63
60
  />
64
61
  </div>
65
62
  );
66
-
63
+
67
64
  case 'text':
68
65
  return (
69
66
  <div key={baseId} className="mb-4">
@@ -74,12 +71,12 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
74
71
  id={baseId}
75
72
  type="text"
76
73
  value={control.value}
77
- onChange={(e) => control.onChange(e.target.value)}
74
+ onChange={e => control.onChange(e.target.value)}
78
75
  className="w-full px-3 py-2 border rounded-lg"
79
76
  />
80
77
  </div>
81
78
  );
82
-
79
+
83
80
  case 'checkbox':
84
81
  return (
85
82
  <div key={baseId} className="mb-4">
@@ -87,14 +84,14 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
87
84
  <input
88
85
  type="checkbox"
89
86
  checked={control.value}
90
- onChange={(e) => control.onChange(e.target.checked)}
87
+ onChange={e => control.onChange(e.target.checked)}
91
88
  className="rounded"
92
89
  />
93
90
  <span className="text-sm font-medium">{control.label}</span>
94
91
  </label>
95
92
  </div>
96
93
  );
97
-
94
+
98
95
  default:
99
96
  return null;
100
97
  }
@@ -105,9 +102,7 @@ export const InteractiveDemo: React.FC<InteractiveDemoProps> = ({
105
102
  <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6">
106
103
  {controls.map(renderControl)}
107
104
  </div>
108
- <div className="border-t pt-6">
109
- {children}
110
- </div>
105
+ <div className="border-t pt-6">{children}</div>
111
106
  </div>
112
107
  );
113
- };
108
+ };
@@ -33,4 +33,4 @@ export const PreviewContainer: React.FC<PreviewContainerProps> = ({
33
33
  </div>
34
34
  </div>
35
35
  );
36
- };
36
+ };
@@ -12,10 +12,6 @@ export const VariantsGrid: React.FC<VariantsGridProps> = ({
12
12
  gap = 'gap-4',
13
13
  }) => {
14
14
  const gridClass = `grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-${columns} ${gap}`;
15
-
16
- return (
17
- <div className={gridClass}>
18
- {children}
19
- </div>
20
- );
21
- };
15
+
16
+ return <div className={gridClass}>{children}</div>;
17
+ };
@@ -1,3 +1,3 @@
1
1
  export { PreviewContainer } from './PreviewContainer';
2
2
  export { VariantsGrid } from './VariantsGrid';
3
- export { InteractiveDemo } from './InteractiveDemo';
3
+ export { InteractiveDemo } from './InteractiveDemo';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * CSS Variable Mapper
3
- *
3
+ *
4
4
  * Utilities for generating and managing CSS custom properties from SCSS tokens
5
5
  * and component configurations.
6
6
  */
@@ -35,7 +35,7 @@ export interface CSSVariableNamingOptions {
35
35
 
36
36
  /**
37
37
  * Generate CSS variable name from parts
38
- *
38
+ *
39
39
  * @example
40
40
  * generateCSSVariableName('button', 'bg', { prefix: 'atomix' })
41
41
  * // Returns: '--atomix-button-bg'
@@ -45,26 +45,22 @@ export function generateCSSVariableName(
45
45
  property: string,
46
46
  options: CSSVariableNamingOptions = {}
47
47
  ): string {
48
- const {
49
- prefix = 'atomix',
50
- separator = '-',
51
- includeComponent = true,
52
- } = options;
48
+ const { prefix = 'atomix', separator = '-', includeComponent = true } = options;
53
49
 
54
50
  const parts = [prefix];
55
-
51
+
56
52
  if (includeComponent) {
57
53
  parts.push(component);
58
54
  }
59
-
55
+
60
56
  parts.push(property);
61
-
57
+
62
58
  return `--${parts.join(separator)}`;
63
59
  }
64
60
 
65
61
  /**
66
62
  * Generate CSS variables object from configuration
67
- *
63
+ *
68
64
  * @example
69
65
  * const vars = generateComponentCSSVars({
70
66
  * component: 'button',
@@ -89,11 +85,7 @@ export function generateComponentCSSVars(
89
85
  if (parts) {
90
86
  Object.entries(parts).forEach(([partName, partProps]) => {
91
87
  Object.entries(partProps).forEach(([key, value]) => {
92
- const varName = generateCSSVariableName(
93
- component,
94
- `${partName}-${key}`,
95
- options
96
- );
88
+ const varName = generateCSSVariableName(component, `${partName}-${key}`, options);
97
89
  vars[varName] = String(value);
98
90
  });
99
91
  });
@@ -103,11 +95,7 @@ export function generateComponentCSSVars(
103
95
  if (states) {
104
96
  Object.entries(states).forEach(([stateName, stateProps]) => {
105
97
  Object.entries(stateProps).forEach(([key, value]) => {
106
- const varName = generateCSSVariableName(
107
- component,
108
- `${stateName}-${key}`,
109
- options
110
- );
98
+ const varName = generateCSSVariableName(component, `${stateName}-${key}`, options);
111
99
  vars[varName] = String(value);
112
100
  });
113
101
  });
@@ -117,11 +105,7 @@ export function generateComponentCSSVars(
117
105
  if (variants) {
118
106
  Object.entries(variants).forEach(([variantName, variantProps]) => {
119
107
  Object.entries(variantProps).forEach(([key, value]) => {
120
- const varName = generateCSSVariableName(
121
- component,
122
- `${variantName}-${key}`,
123
- options
124
- );
108
+ const varName = generateCSSVariableName(component, `${variantName}-${key}`, options);
125
109
  vars[varName] = String(value);
126
110
  });
127
111
  });
@@ -132,7 +116,7 @@ export function generateComponentCSSVars(
132
116
 
133
117
  /**
134
118
  * Map SCSS tokens to CSS custom properties
135
- *
119
+ *
136
120
  * @example
137
121
  * const tokens = { '$primary-color': '#7AFFD7', '$spacing-md': '16px' }
138
122
  * const vars = mapSCSSTokensToCSSVars(tokens)
@@ -148,13 +132,13 @@ export function mapSCSSTokensToCSSVars(
148
132
  Object.entries(tokens).forEach(([key, value]) => {
149
133
  // Remove $ prefix from SCSS variables
150
134
  const cleanKey = key.startsWith('$') ? key.slice(1) : key;
151
-
135
+
152
136
  // Convert underscores to separators
153
137
  const normalizedKey = cleanKey.replace(/_/g, separator);
154
-
138
+
155
139
  // Generate variable name
156
140
  const varName = `--${prefix}${separator}${normalizedKey}`;
157
-
141
+
158
142
  vars[varName] = String(value);
159
143
  });
160
144
 
@@ -163,74 +147,66 @@ export function mapSCSSTokensToCSSVars(
163
147
 
164
148
  /**
165
149
  * Apply CSS variables to an element
166
- *
150
+ *
167
151
  * @param vars - CSS variables to apply
168
152
  * @param element - Target element (defaults to document.documentElement)
169
153
  */
170
154
  export function applyCSSVariables(
171
- vars: Record<string, string | number>,
172
- element?: HTMLElement
155
+ vars: Record<string, string | number>,
156
+ element?: HTMLElement
173
157
  ): void {
174
- if (typeof window === 'undefined') {
175
- return; // SSR safety
176
- }
177
-
178
- const target = element || document.documentElement;
179
- Object.entries(vars).forEach(([key, value]) => {
180
- target.style.setProperty(key, String(value));
181
- });
158
+ if (typeof window === 'undefined') {
159
+ return; // SSR safety
160
+ }
161
+
162
+ const target = element || document.documentElement;
163
+ Object.entries(vars).forEach(([key, value]) => {
164
+ target.style.setProperty(key, String(value));
165
+ });
182
166
  }
183
167
 
184
168
  /**
185
169
  * Remove CSS variables from an element
186
- *
170
+ *
187
171
  * @param varNames - Variable names to remove
188
172
  * @param element - Target element (defaults to document.documentElement)
189
173
  */
190
- export function removeCSSVariables(
191
- varNames: string[],
192
- element?: HTMLElement
193
- ): void {
194
- if (typeof window === 'undefined') {
195
- return; // SSR safety
196
- }
197
-
198
- const target = element || document.documentElement;
199
- varNames.forEach((varName) => {
200
- target.style.removeProperty(varName);
201
- });
174
+ export function removeCSSVariables(varNames: string[], element?: HTMLElement): void {
175
+ if (typeof window === 'undefined') {
176
+ return; // SSR safety
177
+ }
178
+
179
+ const target = element || document.documentElement;
180
+ varNames.forEach(varName => {
181
+ target.style.removeProperty(varName);
182
+ });
202
183
  }
203
184
 
204
185
  /**
205
186
  * Get CSS variable value from an element
206
- *
187
+ *
207
188
  * @param varName - Variable name to get
208
189
  * @param element - Target element (defaults to document.documentElement)
209
190
  * @returns Variable value or null if not found
210
191
  */
211
- export function getCSSVariable(
212
- varName: string,
213
- element?: HTMLElement
214
- ): string | null {
215
- if (typeof window === 'undefined') {
216
- return null; // SSR safety
217
- }
218
-
219
- const target = element || document.documentElement;
220
- return getComputedStyle(target).getPropertyValue(varName).trim() || null;
192
+ export function getCSSVariable(varName: string, element?: HTMLElement): string | null {
193
+ if (typeof window === 'undefined') {
194
+ return null; // SSR safety
195
+ }
196
+
197
+ const target = element || document.documentElement;
198
+ return getComputedStyle(target).getPropertyValue(varName).trim() || null;
221
199
  }
222
200
 
223
201
  /**
224
202
  * Convert CSS variable object to inline style object
225
- *
203
+ *
226
204
  * @example
227
205
  * const vars = { '--atomix-button-bg': '#000' }
228
206
  * const style = cssVarsToStyle(vars)
229
207
  * // Returns: { '--atomix-button-bg': '#000' } as React.CSSProperties
230
208
  */
231
- export function cssVarsToStyle(
232
- vars: Record<string, string | number>
233
- ): React.CSSProperties {
209
+ export function cssVarsToStyle(vars: Record<string, string | number>): React.CSSProperties {
234
210
  return Object.entries(vars).reduce((acc, [key, value]) => {
235
211
  (acc as any)[key] = typeof value === 'number' ? `${value}px` : value;
236
212
  return acc;
@@ -261,15 +237,12 @@ export function isValidCSSVariableName(name: string): boolean {
261
237
 
262
238
  /**
263
239
  * Extract component name from CSS variable name
264
- *
240
+ *
265
241
  * @example
266
242
  * extractComponentName('--atomix-button-bg')
267
243
  * // Returns: 'button'
268
244
  */
269
- export function extractComponentName(
270
- varName: string,
271
- prefix: string = 'atomix'
272
- ): string | null {
245
+ export function extractComponentName(varName: string, prefix: string = 'atomix'): string | null {
273
246
  const regex = new RegExp(`^--${prefix}-([a-z0-9]+)-`);
274
247
  const match = varName.match(regex);
275
248
  return match ? (match[1] ?? null) : null;
@@ -1,12 +1,10 @@
1
1
  /**
2
2
  * Theme Adapters
3
- *
3
+ *
4
4
  * Adapters for working with DesignTokens and CSS variables
5
5
  */
6
6
 
7
- export {
8
- designTokensToCSSVars,
9
- } from './themeAdapter';
7
+ export { designTokensToCSSVars } from './themeAdapter';
10
8
 
11
9
  export {
12
10
  generateCSSVariableName,
@@ -21,8 +19,4 @@ export {
21
19
  extractComponentName,
22
20
  } from './cssVariableMapper';
23
21
 
24
- export type {
25
- CSSVariableConfig,
26
- CSSVariableNamingOptions,
27
- } from './cssVariableMapper';
28
-
22
+ export type { CSSVariableConfig, CSSVariableNamingOptions } from './cssVariableMapper';