@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.
- package/CHANGELOG.md +20 -0
- package/build-tools/EXAMPLES.md +372 -0
- package/build-tools/README.md +242 -0
- package/build-tools/__tests__/error-handler.test.js +230 -0
- package/build-tools/__tests__/index.test.js +141 -0
- package/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/build-tools/__tests__/utils.test.js +161 -0
- package/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/build-tools/error-handler.js +308 -0
- package/build-tools/index.d.ts +43 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +67 -0
- package/build-tools/rollup-plugin.js +236 -0
- package/build-tools/types.d.ts +163 -0
- package/build-tools/utils.js +203 -0
- package/build-tools/vite-plugin.js +161 -0
- package/build-tools/webpack-loader.js +123 -0
- package/dist/atomix.css +203 -90
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +3 -3
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/EXAMPLES.md +372 -0
- package/dist/build-tools/README.md +242 -0
- package/dist/build-tools/__tests__/error-handler.test.js +230 -0
- package/dist/build-tools/__tests__/index.test.js +141 -0
- package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/dist/build-tools/__tests__/utils.test.js +161 -0
- package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/dist/build-tools/error-handler.js +308 -0
- package/dist/build-tools/index.d.ts +43 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +67 -0
- package/dist/build-tools/rollup-plugin.js +236 -0
- package/dist/build-tools/types.d.ts +163 -0
- package/dist/build-tools/utils.js +203 -0
- package/dist/build-tools/vite-plugin.js +161 -0
- package/dist/build-tools/webpack-loader.js +123 -0
- package/dist/charts.d.ts +1 -1
- package/dist/charts.js +86 -57
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +136 -112
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +2 -5
- package/dist/forms.js +140 -128
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +136 -112
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +9 -61
- package/dist/index.esm.js +237 -286
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +250 -299
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +170 -73
- package/scripts/cli/__tests__/README.md +81 -0
- package/scripts/cli/__tests__/basic.test.js +115 -0
- package/scripts/cli/__tests__/component-generator.test.js +332 -0
- package/scripts/cli/__tests__/integration.test.js +327 -0
- package/scripts/cli/__tests__/test-setup.js +133 -0
- package/scripts/cli/__tests__/token-manager.test.js +251 -0
- package/scripts/cli/__tests__/utils.test.js +161 -0
- package/scripts/cli/component-generator.js +253 -299
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/interactive-init.js +46 -5
- package/scripts/cli/template-manager.js +0 -2
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +148 -126
- package/scripts/cli/templates/index.js +23 -16
- package/scripts/cli/templates/project-templates.js +151 -23
- package/scripts/cli/templates/react-templates.js +280 -210
- package/scripts/cli/templates/scss-templates.js +90 -91
- package/scripts/cli/templates/testing-templates.js +206 -27
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/types-templates.js +70 -56
- package/scripts/cli/theme-bridge.js +8 -2
- package/scripts/cli/token-manager.js +318 -206
- package/scripts/cli/utils.js +0 -1
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +2 -2
- package/src/components/AtomixGlass/shader-utils.ts +5 -0
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -35
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +213 -1
- package/src/components/Badge/Badge.stories.tsx +121 -362
- package/src/components/Block/Block.stories.tsx +21 -12
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +46 -50
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Callout/Callout.stories.tsx +289 -634
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Chart/Chart.stories.tsx +150 -8
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
- package/src/components/Countdown/Countdown.stories.tsx +115 -8
- package/src/components/DataTable/DataTable.stories.tsx +346 -146
- package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
- package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
- package/src/components/Footer/Footer.stories.tsx +392 -328
- package/src/components/Form/Checkbox.stories.tsx +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +87 -51
- package/src/components/Form/Form.stories.tsx +119 -20
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Radio.stories.tsx +140 -5
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/Modal/Modal.stories.tsx +181 -42
- package/src/components/Popover/Popover.stories.tsx +448 -98
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Spinner/Spinner.stories.tsx +102 -8
- package/src/components/Steps/Steps.stories.tsx +172 -43
- package/src/components/Tabs/Tabs.stories.tsx +136 -10
- package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +126 -39
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Upload/Upload.stories.tsx +113 -24
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +193 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/theme/devtools/CLI.ts +1 -1
- package/src/lib/types/components.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/csv.ts +17 -0
- package/src/lib/utils/dataTableExport.ts +1 -10
- package/src/styles/01-settings/_index.scss +2 -1
- package/src/styles/01-settings/_settings.accordion.scss +28 -7
- package/src/styles/01-settings/_settings.colors.scss +11 -11
- package/src/styles/01-settings/_settings.typography.scss +5 -5
- package/src/styles/02-tools/_tools.utility-api.scss +14 -0
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.checkbox.scss +23 -17
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/themes/dark-complementary/README.md +98 -0
- package/themes/dark-complementary/index.scss +158 -0
- package/themes/default-light/README.md +81 -0
- package/themes/default-light/index.scss +154 -0
- package/themes/high-contrast/README.md +105 -0
- package/themes/high-contrast/index.scss +172 -0
- package/themes/test-theme/README.md +38 -0
- package/themes/test-theme/index.scss +47 -0
- package/scripts/cli/templates-original-backup.js +0 -1655
- package/scripts/cli/templates_backup.js +0 -684
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
- package/src/lib/composables/useButton.ts +0 -93
- 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
|
-
*
|
|
5
|
+
* Templates for React component generation
|
|
4
6
|
*/
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
8
|
-
* Basic presentational component with minimal state
|
|
9
|
+
* Default component template that matches existing components
|
|
9
10
|
*/
|
|
10
|
-
export const
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
*
|
|
111
|
-
* Advanced component with validation, accessibility, and state management
|
|
146
|
+
* Simple component template
|
|
112
147
|
*/
|
|
113
|
-
export const
|
|
114
|
-
import {
|
|
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}
|
|
121
|
-
* Advanced component with validation, accessibility, and state management
|
|
152
|
+
* ${name} - Simple Presentational Component
|
|
122
153
|
*
|
|
123
|
-
*
|
|
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} =
|
|
132
|
-
|
|
133
|
-
(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
*
|
|
170
|
+
* Medium complexity template
|
|
197
171
|
*/
|
|
198
|
-
export const
|
|
199
|
-
import {
|
|
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
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* @example
|
|
208
|
-
* \`\`\`tsx
|
|
209
|
-
* <${name}>Hello World</${name}>
|
|
210
|
-
* \`\`\`
|
|
234
|
+
* Complex template
|
|
211
235
|
*/
|
|
212
|
-
export const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
330
|
+
index: indexTemplate,
|
|
261
331
|
};
|