@shohojdhara/atomix 0.3.14 → 0.3.15

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 (173) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build-tools/EXAMPLES.md +372 -0
  3. package/build-tools/README.md +242 -0
  4. package/build-tools/__tests__/error-handler.test.js +230 -0
  5. package/build-tools/__tests__/index.test.js +141 -0
  6. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  7. package/build-tools/__tests__/utils.test.js +161 -0
  8. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  9. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  10. package/build-tools/error-handler.js +308 -0
  11. package/build-tools/index.d.ts +43 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +67 -0
  14. package/build-tools/rollup-plugin.js +236 -0
  15. package/build-tools/types.d.ts +163 -0
  16. package/build-tools/utils.js +203 -0
  17. package/build-tools/vite-plugin.js +161 -0
  18. package/build-tools/webpack-loader.js +123 -0
  19. package/dist/atomix.css +203 -90
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +3 -3
  22. package/dist/atomix.min.css.map +1 -1
  23. package/dist/build-tools/EXAMPLES.md +372 -0
  24. package/dist/build-tools/README.md +242 -0
  25. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  26. package/dist/build-tools/__tests__/index.test.js +141 -0
  27. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  28. package/dist/build-tools/__tests__/utils.test.js +161 -0
  29. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  30. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  31. package/dist/build-tools/error-handler.js +308 -0
  32. package/dist/build-tools/index.d.ts +43 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +67 -0
  35. package/dist/build-tools/rollup-plugin.js +236 -0
  36. package/dist/build-tools/types.d.ts +163 -0
  37. package/dist/build-tools/utils.js +203 -0
  38. package/dist/build-tools/vite-plugin.js +161 -0
  39. package/dist/build-tools/webpack-loader.js +123 -0
  40. package/dist/charts.d.ts +1 -1
  41. package/dist/charts.js +86 -57
  42. package/dist/charts.js.map +1 -1
  43. package/dist/core.d.ts +1 -1
  44. package/dist/core.js +136 -112
  45. package/dist/core.js.map +1 -1
  46. package/dist/forms.d.ts +2 -5
  47. package/dist/forms.js +140 -128
  48. package/dist/forms.js.map +1 -1
  49. package/dist/heavy.d.ts +1 -1
  50. package/dist/heavy.js +136 -112
  51. package/dist/heavy.js.map +1 -1
  52. package/dist/index.d.ts +9 -61
  53. package/dist/index.esm.js +237 -286
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +250 -299
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.min.js +1 -1
  58. package/dist/index.min.js.map +1 -1
  59. package/package.json +23 -8
  60. package/scripts/atomix-cli.js +170 -73
  61. package/scripts/cli/__tests__/README.md +81 -0
  62. package/scripts/cli/__tests__/basic.test.js +115 -0
  63. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  64. package/scripts/cli/__tests__/integration.test.js +327 -0
  65. package/scripts/cli/__tests__/test-setup.js +133 -0
  66. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  67. package/scripts/cli/__tests__/utils.test.js +161 -0
  68. package/scripts/cli/component-generator.js +253 -299
  69. package/scripts/cli/dependency-checker.js +355 -0
  70. package/scripts/cli/interactive-init.js +46 -5
  71. package/scripts/cli/template-manager.js +0 -2
  72. package/scripts/cli/templates/common-templates.js +636 -0
  73. package/scripts/cli/templates/composable-templates.js +148 -126
  74. package/scripts/cli/templates/index.js +23 -16
  75. package/scripts/cli/templates/project-templates.js +151 -23
  76. package/scripts/cli/templates/react-templates.js +280 -210
  77. package/scripts/cli/templates/scss-templates.js +90 -91
  78. package/scripts/cli/templates/testing-templates.js +206 -27
  79. package/scripts/cli/templates/testing-utils.js +278 -0
  80. package/scripts/cli/templates/types-templates.js +70 -56
  81. package/scripts/cli/theme-bridge.js +8 -2
  82. package/scripts/cli/token-manager.js +318 -206
  83. package/scripts/cli/utils.js +0 -1
  84. package/src/components/Accordion/Accordion.stories.tsx +369 -870
  85. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  86. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  87. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  88. package/src/components/AtomixGlass/glass-utils.ts +2 -2
  89. package/src/components/AtomixGlass/shader-utils.ts +5 -0
  90. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  91. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  92. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  93. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  94. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  95. package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -35
  96. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
  97. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  98. package/src/components/Avatar/Avatar.stories.tsx +213 -1
  99. package/src/components/Badge/Badge.stories.tsx +121 -362
  100. package/src/components/Block/Block.stories.tsx +21 -12
  101. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
  102. package/src/components/Button/Button.stories.tsx +463 -1126
  103. package/src/components/Button/Button.test.tsx +107 -0
  104. package/src/components/Button/Button.tsx +46 -50
  105. package/src/components/Button/ButtonGroup.stories.tsx +373 -217
  106. package/src/components/Callout/Callout.stories.tsx +289 -634
  107. package/src/components/Card/Card.stories.tsx +248 -68
  108. package/src/components/Chart/Chart.stories.tsx +150 -8
  109. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
  110. package/src/components/Countdown/Countdown.stories.tsx +115 -8
  111. package/src/components/DataTable/DataTable.stories.tsx +346 -146
  112. package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
  113. package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
  114. package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
  115. package/src/components/Footer/Footer.stories.tsx +392 -328
  116. package/src/components/Form/Checkbox.stories.tsx +140 -6
  117. package/src/components/Form/Checkbox.test.tsx +63 -0
  118. package/src/components/Form/Checkbox.tsx +87 -51
  119. package/src/components/Form/Form.stories.tsx +119 -20
  120. package/src/components/Form/FormGroup.stories.tsx +127 -4
  121. package/src/components/Form/Radio.stories.tsx +140 -5
  122. package/src/components/Form/Select.stories.tsx +140 -8
  123. package/src/components/Form/Textarea.stories.tsx +149 -6
  124. package/src/components/Hero/Hero.stories.tsx +333 -32
  125. package/src/components/List/List.stories.tsx +141 -3
  126. package/src/components/Modal/Modal.stories.tsx +181 -42
  127. package/src/components/Popover/Popover.stories.tsx +448 -98
  128. package/src/components/Progress/Progress.stories.tsx +167 -5
  129. package/src/components/River/River.stories.tsx +1 -1
  130. package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
  131. package/src/components/Spinner/Spinner.stories.tsx +102 -8
  132. package/src/components/Steps/Steps.stories.tsx +172 -43
  133. package/src/components/Tabs/Tabs.stories.tsx +136 -10
  134. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  135. package/src/components/Todo/Todo.stories.tsx +198 -9
  136. package/src/components/Toggle/Toggle.stories.tsx +126 -39
  137. package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
  138. package/src/components/Upload/Upload.stories.tsx +113 -24
  139. package/src/lib/README.md +2 -2
  140. package/src/lib/__tests__/theme-tools.test.ts +193 -0
  141. package/src/lib/composables/index.ts +2 -2
  142. package/src/lib/composables/useAtomixGlass.ts +28 -56
  143. package/src/lib/composables/useChartExport.ts +2 -7
  144. package/src/lib/composables/useDataTable.ts +46 -29
  145. package/src/lib/constants/components.ts +9 -32
  146. package/src/lib/theme/devtools/CLI.ts +1 -1
  147. package/src/lib/types/components.ts +1 -1
  148. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  149. package/src/lib/utils/csv.ts +17 -0
  150. package/src/lib/utils/dataTableExport.ts +1 -10
  151. package/src/styles/01-settings/_index.scss +2 -1
  152. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  153. package/src/styles/01-settings/_settings.colors.scss +11 -11
  154. package/src/styles/01-settings/_settings.typography.scss +5 -5
  155. package/src/styles/02-tools/_tools.utility-api.scss +14 -0
  156. package/src/styles/06-components/_components.accordion.scss +56 -14
  157. package/src/styles/06-components/_components.checkbox.scss +23 -17
  158. package/src/styles/99-utilities/_index.scss +2 -0
  159. package/src/styles/99-utilities/_utilities.scss +3 -1
  160. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  161. package/themes/dark-complementary/README.md +98 -0
  162. package/themes/dark-complementary/index.scss +158 -0
  163. package/themes/default-light/README.md +81 -0
  164. package/themes/default-light/index.scss +154 -0
  165. package/themes/high-contrast/README.md +105 -0
  166. package/themes/high-contrast/index.scss +172 -0
  167. package/themes/test-theme/README.md +38 -0
  168. package/themes/test-theme/index.scss +47 -0
  169. package/scripts/cli/templates-original-backup.js +0 -1655
  170. package/scripts/cli/templates_backup.js +0 -684
  171. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  172. package/src/lib/composables/useButton.ts +0 -93
  173. package/src/lib/composables/useCheckbox.ts +0 -70
@@ -1,261 +1,331 @@
1
+ // Creating react-templates.js since it doesn't exist yet but is referenced in the modular templates
2
+
1
3
  /**
2
4
  * React Component Templates
3
- * Different complexity levels for React components
5
+ * Templates for React component generation
4
6
  */
5
7
 
6
8
  /**
7
- * Simple React component template
8
- * Basic presentational component with minimal state
9
+ * Default component template that matches existing components
9
10
  */
10
- export const simpleTemplate = (name) => `import React, { memo, forwardRef } from 'react';
11
- import { cn } from '../../lib/utils';
12
- import { ACCORDION } from '../../lib/constants/components';
11
+ export const componentTemplate = (name) => {
12
+ const componentPrefix = name.toLowerCase().replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');
13
+
14
+ return `import React, { forwardRef, useCallback, memo } from 'react';
15
+ import { use${name} } from '../../lib/composables/use${name}';
16
+ import { ${name.toUpperCase()}, THEME_NAMING } from '../../lib/constants/components';
17
+ import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
18
+ import { ThemeNaming } from '../../lib/utils/themeNaming';
13
19
  import type { ${name}Props } from '../../lib/types/components';
14
20
 
15
- /**
16
- * ${name} component - Simple variant
17
- * Basic presentational component with minimal state
18
- *
19
- * @example
20
- * \`\`\`tsx
21
- * <${name}>Hello World</${name}>
22
- * \`\`\`
23
- */
24
- export const ${name} = memo(
21
+ export const ${name} = React.memo(
25
22
  forwardRef<HTMLDivElement, ${name}Props>(
26
- ({
27
- children,
28
- className,
29
- ...props
30
- }, ref) => {
31
- const componentClass = cn(
32
- ACCORDION.SELECTORS.ACCORDION.replace('.', ''),
33
- className
23
+ (
24
+ {
25
+ children,
26
+ className = '',
27
+ disabled = false,
28
+ variant = 'primary',
29
+ size = 'md',
30
+ glass,
31
+ onClick,
32
+ onHover,
33
+ onFocus,
34
+ onBlur,
35
+ 'aria-label': ariaLabel,
36
+ 'aria-describedby': ariaDescribedBy,
37
+ tabIndex,
38
+ style,
39
+ ...props
40
+ },
41
+ ref
42
+ ) => {
43
+ const { generateClassNames, handleClick } = use${name}({
44
+ variant,
45
+ size,
46
+ disabled,
47
+ glass,
48
+ });
49
+
50
+ const componentClass = [
51
+ ${name.toUpperCase()}.BASE_CLASS,
52
+ ThemeNaming.variantClass('${componentPrefix}', variant),
53
+ size !== 'md' ? ThemeNaming.sizeClass('${componentPrefix}', size) : '',
54
+ disabled ? ThemeNaming.stateClass('${componentPrefix}', 'disabled') : '',
55
+ glass ? ThemeNaming.stateClass('${componentPrefix}', 'glass') : '',
56
+ className,
57
+ ]
58
+ .filter(Boolean)
59
+ .join(' ');
60
+
61
+ // Handle click event
62
+ const handleClickEvent = useCallback(
63
+ (event: React.MouseEvent<HTMLDivElement>) => {
64
+ if (disabled) {
65
+ event.preventDefault();
66
+ return;
67
+ }
68
+ onClick?.(event);
69
+ },
70
+ [disabled, onClick]
34
71
  );
35
72
 
36
- return (
37
- <div
38
- ref={ref}
39
- className={componentClass}
40
- {...props}
41
- >
42
- {children}
43
- </div>
73
+ // Handle hover
74
+ const handleMouseEnter = useCallback(
75
+ (event: React.MouseEvent<HTMLDivElement>) => {
76
+ if (!disabled) {
77
+ onHover?.(event);
78
+ }
79
+ },
80
+ [disabled, onHover]
44
81
  );
45
- }
46
- )
47
- );
48
82
 
49
- ${name}.displayName = '${name}';`;
83
+ // Handle focus
84
+ const handleFocusEvent = useCallback(
85
+ (event: React.FocusEvent<HTMLDivElement>) => {
86
+ if (!disabled) {
87
+ onFocus?.(event);
88
+ }
89
+ },
90
+ [disabled, onFocus]
91
+ );
50
92
 
51
- /**
52
- * Medium React component template
53
- * Component with state management and interactions
54
- */
55
- export const mediumTemplate = (name) => `import React, { memo, forwardRef } from 'react';
56
- import { cn } from '../../lib/utils';
57
- import { ACCORDION } from '../../lib/constants/components';
58
- import type { ${name}Props } from '../../lib/types/components';
59
- import { use${name} } from '../../lib/composables/use${name}';
93
+ // Handle blur
94
+ const handleBlurEvent = useCallback(
95
+ (event: React.FocusEvent<HTMLDivElement>) => {
96
+ if (!disabled) {
97
+ onBlur?.(event);
98
+ }
99
+ },
100
+ [disabled, onBlur]
101
+ );
60
102
 
61
- /**
62
- * ${name} component - Medium variant
63
- * Component with state management and interactions
64
- *
65
- * @example
66
- * \`\`\`tsx
67
- * <${name}>Hello World</${name}>
68
- * \`\`\`
69
- */
70
- export const ${name} = memo(
71
- forwardRef<HTMLDivElement, ${name}Props>(
72
- ({
73
- children,
74
- className,
75
- ...props
76
- }, ref) => {
77
- const {
78
- state,
79
- toggle,
80
- isOpen,
81
- setIsOpen,
82
- getTriggerProps,
83
- getPanelProps
84
- } = use${name}({
85
- // Initial props can be passed here
86
- });
103
+ // Component props
104
+ const componentProps = {
105
+ ref,
106
+ className: componentClass,
107
+ onClick: handleClickEvent,
108
+ onMouseEnter: onHover ? handleMouseEnter : undefined,
109
+ onFocus: onFocus ? handleFocusEvent : undefined,
110
+ onBlur: onBlur ? handleBlurEvent : undefined,
111
+ 'aria-disabled': disabled,
112
+ 'aria-label': ariaLabel,
113
+ 'aria-describedby': ariaDescribedBy,
114
+ tabIndex: tabIndex !== undefined ? tabIndex : (disabled ? -1 : 0),
115
+ style,
116
+ ...props,
117
+ };
87
118
 
88
- const componentClass = cn(
89
- ACCORDION.SELECTORS.ACCORDION.replace('.', ''),
90
- className
91
- );
119
+ // Default glass props
120
+ const defaultGlassProps = {
121
+ displacementScale: 20,
122
+ blurAmount: 0,
123
+ saturation: 200,
124
+ elasticity: 0,
125
+ };
126
+ const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
92
127
 
93
- return (
94
- <div
95
- ref={ref}
96
- className={componentClass}
97
- data-state={state}
98
- {...props}
99
- >
128
+ // Component content
129
+ const componentContent = (
130
+ <div {...componentProps}>
100
131
  {children}
101
132
  </div>
102
133
  );
134
+
135
+ return glass ? <AtomixGlass {...glassProps}>{componentContent}</AtomixGlass> : componentContent;
103
136
  }
104
137
  )
105
138
  );
106
139
 
107
- ${name}.displayName = '${name}';`;
140
+ ${name}.displayName = '${name}';
141
+
142
+ export default ${name};`;
143
+ };
108
144
 
109
145
  /**
110
- * Complex React component template
111
- * Advanced component with validation, accessibility, and state management
146
+ * Simple component template
112
147
  */
113
- export const complexTemplate = (name) => `import React, { memo, forwardRef } from 'react';
114
- import { cn } from '../../lib/utils';
115
- import { ACCORDION } from '../../lib/constants/components';
116
- import type { ${name}Props, ${name}State } from '../../lib/types/components';
117
- import { use${name} } from '../../lib/composables/use${name}';
148
+ export const simpleTemplate = (name) => `import React, { forwardRef } from 'react';
149
+ import type { ${name}Props } from './${name}.types';
118
150
 
119
151
  /**
120
- * ${name} component - Complex variant
121
- * Advanced component with validation, accessibility, and state management
152
+ * ${name} - Simple Presentational Component
122
153
  *
123
- * @example
124
- * \`\`\`tsx
125
- * <${name} validationRules={rules}>
126
- * Trigger content
127
- * <${name}.Panel>Panel content</${name}.Panel>
128
- * </${name}>
129
- * \`\`\`
154
+ * A basic component for rendering content with minimal overhead.
130
155
  */
131
- export const ${name} = memo(
132
- forwardRef<HTMLDivElement, ${name}Props>(
133
- ({
134
- children,
135
- className,
136
- validationRules,
137
- onValidationChange,
138
- ...props
139
- }, ref) => {
140
- const {
141
- state,
142
- toggle,
143
- isOpen,
144
- setIsOpen,
145
- isControlled,
146
- isValid,
147
- validationMessage,
148
- getTriggerProps,
149
- getPanelProps,
150
- getHeaderProps,
151
- getContentProps
152
- } = use${name}({
153
- validationRules,
154
- onValidationChange
155
- });
156
-
157
- const componentClass = cn(
158
- ACCORDION.SELECTORS.ACCORDION.replace('.', ''),
159
- {
160
- 'is-valid': isValid,
161
- 'is-invalid': !isValid && validationMessage,
162
- 'is-controlled': isControlled
163
- },
164
- className
165
- );
166
-
167
- return (
168
- <div
169
- ref={ref}
170
- className={componentClass}
171
- data-state={state}
172
- data-valid={isValid}
173
- {...getTriggerProps()}
174
- >
175
- {children}
176
-
177
- {!isValid && validationMessage && (
178
- <div
179
- id={\`${name.toLowerCase()}-error\`}
180
- className="c-${name.toLowerCase()}__error"
181
- role="alert"
182
- aria-live="polite"
183
- >
184
- {validationMessage}
185
- </div>
186
- )}
187
- </div>
188
- );
189
- }
190
- )
156
+ export const ${name} = forwardRef<HTMLDivElement, ${name}Props>(
157
+ ({ children, className, ...props }, ref) => {
158
+ return (
159
+ <div ref={ref} className={\`c-${name.toLowerCase()} \${className || ''}\`} {...props}>
160
+ {children}
161
+ </div>
162
+ );
163
+ }
191
164
  );
192
165
 
193
- ${name}.displayName = '${name}';`;
166
+ ${name}.displayName = '${name}';
167
+ `;
194
168
 
195
169
  /**
196
- * Default React component template (backward compatibility)
170
+ * Medium complexity template
197
171
  */
198
- export const defaultTemplate = (name) => `import React, { memo, forwardRef } from 'react';
199
- import { cn } from '../../lib/utils';
200
- import { ACCORDION } from '../../lib/constants/components';
201
- import type { ${name}Props } from '../../lib/types/components';
172
+ export const mediumTemplate = (name) => `import React, { forwardRef, useId, memo } from 'react';
173
+ import { ${name.toUpperCase()} } from '../../lib/constants/components';
202
174
  import { use${name} } from '../../lib/composables/use${name}';
175
+ import type { ${name}Props, ${name}State } from '../../lib/types/components';
176
+
177
+ export interface ${name}Props {
178
+ /**
179
+ * Content to be rendered
180
+ */
181
+ children?: React.ReactNode;
182
+
183
+ /**
184
+ * Additional CSS classes
185
+ */
186
+ className?: string;
187
+
188
+ /**
189
+ * Disabled state
190
+ */
191
+ disabled?: boolean;
192
+
193
+ /**
194
+ * Inline styles
195
+ */
196
+ style?: React.CSSProperties;
197
+
198
+ /**
199
+ * Other component-specific props would go here
200
+ */
201
+ }
202
+
203
+ export interface ${name}State {
204
+ // Define state interface for the component
205
+ }
206
+
207
+ export const ${name}: React.FC<${name}Props> = memo(({
208
+ children,
209
+ className = '',
210
+ disabled = false,
211
+ style,
212
+ ...props
213
+ }) => {
214
+ const instanceId = useId();
215
+ const { generateClassNames } = use${name}({ disabled });
216
+
217
+ return (
218
+ <div
219
+ className={generateClassNames(className)}
220
+ style={style}
221
+ {...props}
222
+ >
223
+ {children}
224
+ </div>
225
+ );
226
+ });
227
+
228
+ ${name}.displayName = '${name}';
229
+
230
+ export default ${name};
231
+ `;
203
232
 
204
233
  /**
205
- * ${name} component
206
- *
207
- * @example
208
- * \`\`\`tsx
209
- * <${name}>Hello World</${name}>
210
- * \`\`\`
234
+ * Complex template
211
235
  */
212
- export const ${name} = memo(
213
- forwardRef<HTMLDivElement, ${name}Props>(
214
- ({
215
- children,
216
- className,
217
- ...props
218
- }, ref) => {
219
- const {
220
- state,
221
- toggle,
222
- isOpen,
223
- setIsOpen,
224
- getTriggerProps,
225
- getPanelProps,
226
- getHeaderProps,
227
- getContentProps
228
- } = use${name}({
229
- // Initial props can be passed here
230
- });
236
+ export const complexTemplate = (name) => `import React, { forwardRef, useId, memo } from 'react';
237
+ import { ${name.toUpperCase()} } from '../../lib/constants/components';
238
+ import { use${name} } from '../../lib/composables/use${name}';
239
+ import type { ${name}Props, ${name}State } from '../../lib/types/components';
240
+ import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
241
+ import type { AtomixGlassProps } from '../AtomixGlass/AtomixGlass';
231
242
 
232
- const componentClass = cn(
233
- ACCORDION.SELECTORS.ACCORDION.replace('.', ''),
234
- className
235
- );
243
+ export interface ${name}Props {
244
+ /**
245
+ * Content to be rendered
246
+ */
247
+ children?: React.ReactNode;
248
+
249
+ /**
250
+ * Additional CSS classes
251
+ */
252
+ className?: string;
253
+
254
+ /**
255
+ * Disabled state
256
+ */
257
+ disabled?: boolean;
236
258
 
237
- return (
238
- <div
239
- ref={ref}
240
- className={componentClass}
241
- data-state={state}
242
- {...props}
243
- >
244
- {children}
245
- </div>
246
- );
247
- }
248
- )
249
- );
259
+ /**
260
+ * Glass effect options
261
+ */
262
+ glass?: boolean | AtomixGlassProps;
250
263
 
251
- ${name}.displayName = '${name}';`;
264
+ /**
265
+ * Inline styles
266
+ */
267
+ style?: React.CSSProperties;
268
+
269
+ /**
270
+ * Callback when component state changes
271
+ */
272
+ onStateChange?: (state: ${name}State) => void;
273
+ }
274
+
275
+ export interface ${name}State {
276
+ // Define state interface for the component
277
+ }
278
+
279
+ export const ${name}: React.FC<${name}Props> = memo(({
280
+ children,
281
+ className = '',
282
+ disabled = false,
283
+ glass,
284
+ style,
285
+ onStateChange,
286
+ ...props
287
+ }) => {
288
+ const instanceId = useId();
289
+ const { generateClassNames } = use${name}({ disabled, onStateChange });
290
+
291
+ const componentContent = (
292
+ <div
293
+ className={generateClassNames(className)}
294
+ style={style}
295
+ {...props}
296
+ >
297
+ {children}
298
+ </div>
299
+ );
300
+
301
+ if (glass) {
302
+ const defaultGlassProps = {
303
+ // Default glass settings specific to this component
304
+ };
305
+
306
+ const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
307
+
308
+ return <AtomixGlass {...glassProps}>{componentContent}</AtomixGlass>;
309
+ }
310
+
311
+ return componentContent;
312
+ });
313
+
314
+ ${name}.displayName = '${name}';
315
+
316
+ export default ${name};
317
+ `;
252
318
 
253
319
  /**
254
- * React component templates object
320
+ * Index template
255
321
  */
322
+ export const indexTemplate = (name) => `export { default as ${name} } from './${name}';
323
+ export type { ${name}Props } from './${name}';`;
324
+
256
325
  export const reactTemplates = {
326
+ component: componentTemplate,
257
327
  simple: simpleTemplate,
258
328
  medium: mediumTemplate,
259
329
  complex: complexTemplate,
260
- component: defaultTemplate,
330
+ index: indexTemplate,
261
331
  };