@shohojdhara/atomix 0.3.13 → 0.3.14
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 +19 -0
- package/README.md +2 -0
- package/dist/atomix.css +95 -77
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +2 -2
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.d.ts +1 -1
- package/dist/charts.js +1 -1
- package/dist/core.d.ts +41 -11
- package/dist/core.js +39 -23
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +28 -11
- package/dist/forms.js +8 -5
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +15 -6
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +122 -46
- package/dist/index.esm.js +849 -182
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +854 -186
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +27 -2
- package/dist/theme.js +721 -108
- package/dist/theme.js.map +1 -1
- package/package.json +1 -1
- package/scripts/atomix-cli.js +610 -1111
- package/scripts/cli/component-generator.js +610 -0
- package/scripts/cli/documentation-sync.js +542 -0
- package/scripts/cli/interactive-init.js +84 -288
- package/scripts/cli/mappings.js +211 -0
- package/scripts/cli/migration-tools.js +95 -288
- package/scripts/cli/template-manager.js +107 -0
- package/scripts/cli/templates/README.md +123 -0
- package/scripts/cli/templates/composable-templates.js +149 -0
- package/scripts/cli/templates/config-templates.js +126 -0
- package/scripts/cli/templates/index.js +95 -0
- package/scripts/cli/templates/project-templates.js +214 -0
- package/scripts/cli/templates/react-templates.js +261 -0
- package/scripts/cli/templates/scss-templates.js +156 -0
- package/scripts/cli/templates/storybook-templates.js +236 -0
- package/scripts/cli/templates/testing-templates.js +45 -0
- package/scripts/cli/templates/token-templates.js +447 -0
- package/scripts/cli/templates/types-templates.js +133 -0
- package/scripts/cli/templates-original-backup.js +1655 -0
- package/scripts/cli/templates.js +35 -0
- package/scripts/cli/templates_backup.js +684 -0
- package/scripts/cli/theme-bridge.js +20 -14
- package/scripts/cli/token-manager.js +150 -77
- package/scripts/cli/utils.js +37 -25
- package/src/components/Accordion/Accordion.stories.tsx +5 -5
- package/src/components/Accordion/Accordion.test.tsx +57 -0
- package/src/components/Accordion/Accordion.tsx +4 -0
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +37 -37
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -51
- package/src/components/Avatar/Avatar.stories.tsx +26 -26
- package/src/components/Badge/Badge.stories.tsx +31 -31
- package/src/components/Badge/Badge.test.tsx +51 -0
- package/src/components/Badge/Badge.tsx +20 -1
- package/src/components/Block/Block.stories.tsx +5 -5
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
- package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
- package/src/components/Button/Button.stories.tsx +13 -13
- package/src/components/Button/Button.tsx +4 -4
- package/src/components/Button/ButtonGroup.stories.tsx +2 -2
- package/src/components/Button/README.md +5 -0
- package/src/components/Callout/Callout.stories.tsx +11 -11
- package/src/components/Callout/Callout.test.tsx +10 -10
- package/src/components/Callout/Callout.tsx +7 -7
- package/src/components/Callout/README.md +9 -8
- package/src/components/Card/Card.tsx +2 -2
- package/src/components/Chart/Chart.stories.tsx +6 -6
- package/src/components/Chart/Chart.tsx +1 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +1 -1
- package/src/components/DataTable/DataTable.tsx +14 -12
- package/src/components/DatePicker/DatePicker.stories.tsx +6 -6
- package/src/components/Dropdown/Dropdown.stories.tsx +4 -4
- package/src/components/Form/Checkbox.stories.tsx +3 -3
- package/src/components/Form/Checkbox.tsx +4 -2
- package/src/components/Form/Form.stories.tsx +3 -3
- package/src/components/Form/FormGroup.stories.tsx +1 -1
- package/src/components/Form/Input.stories.tsx +28 -16
- package/src/components/Form/Input.test.tsx +59 -0
- package/src/components/Form/Input.tsx +97 -95
- package/src/components/Form/Radio.stories.tsx +94 -94
- package/src/components/Form/Radio.tsx +2 -2
- package/src/components/Form/Select.stories.tsx +4 -4
- package/src/components/Form/Select.tsx +2 -2
- package/src/components/Form/Textarea.stories.tsx +22 -7
- package/src/components/Form/Textarea.test.tsx +45 -0
- package/src/components/Form/Textarea.tsx +88 -86
- package/src/components/List/List.stories.tsx +2 -2
- package/src/components/Modal/Modal.stories.tsx +4 -4
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
- package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
- package/src/components/Navigation/README.md +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +5 -2
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
- package/src/components/Popover/Popover.stories.tsx +1 -1
- package/src/components/ProductReview/ProductReview.tsx +1 -1
- package/src/components/Progress/Progress.tsx +46 -46
- package/src/components/Rating/Rating.stories.tsx +4 -4
- package/src/components/Rating/Rating.tsx +8 -8
- package/src/components/Slider/Slider.stories.tsx +63 -63
- package/src/components/Spinner/Spinner.stories.tsx +2 -2
- package/src/components/Spinner/Spinner.test.tsx +35 -0
- package/src/components/Spinner/Spinner.tsx +9 -2
- package/src/components/Testimonial/Testimonial.stories.tsx +1 -1
- package/src/components/Toggle/Toggle.stories.tsx +32 -9
- package/src/components/Toggle/Toggle.test.tsx +91 -0
- package/src/components/Toggle/Toggle.tsx +44 -27
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/layouts/Grid/Grid.stories.tsx +49 -49
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
- package/src/lib/composables/useAccordion.ts +12 -3
- package/src/lib/composables/useBreadcrumb.ts +2 -2
- package/src/lib/composables/useCallout.ts +7 -7
- package/src/lib/composables/useNavbar.ts +1 -1
- package/src/lib/constants/components.ts +1 -1
- package/src/lib/storybook/InteractiveDemo.tsx +113 -0
- package/src/lib/storybook/PreviewContainer.tsx +36 -0
- package/src/lib/storybook/VariantsGrid.tsx +21 -0
- package/src/lib/storybook/index.ts +3 -0
- package/src/lib/theme/core/createThemeObject.ts +9 -5
- package/src/lib/theme/devtools/CLI.ts +155 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
- package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
- package/src/lib/theme/devtools/index.ts +3 -0
- package/src/lib/theme/errors/errors.ts +8 -0
- package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
- package/src/lib/theme/utils/index.ts +1 -0
- package/src/lib/theme/utils/themeValidation.ts +501 -0
- package/src/lib/theme-tools.ts +32 -3
- package/src/lib/types/components.ts +81 -26
- package/src/lib/utils/themeNaming.ts +1 -1
- package/src/styles/06-components/_components.callout.scss +29 -33
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/99-utilities/_utilities.display.scss +14 -3
- package/src/styles/99-utilities/_utilities.flex.scss +10 -10
- package/src/styles/99-utilities/_utilities.text.scss +28 -8
- package/scripts/cli/__tests__/cli-commands.test.js +0 -204
- package/scripts/cli/__tests__/utils.test.js +0 -201
- package/scripts/cli/__tests__/vitest.config.js +0 -26
|
@@ -8,108 +8,110 @@ import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
|
|
|
8
8
|
*/
|
|
9
9
|
export const Input = memo(
|
|
10
10
|
forwardRef<HTMLInputElement, InputProps>(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
11
|
+
(
|
|
12
|
+
{
|
|
13
|
+
type = 'text',
|
|
14
|
+
value,
|
|
15
|
+
defaultValue,
|
|
16
|
+
onChange,
|
|
17
|
+
onBlur,
|
|
18
|
+
onFocus,
|
|
19
|
+
placeholder,
|
|
20
|
+
className = '',
|
|
21
|
+
style,
|
|
22
|
+
disabled = false,
|
|
23
|
+
required = false,
|
|
24
|
+
readOnly = false,
|
|
25
|
+
id,
|
|
26
|
+
name,
|
|
27
|
+
autoComplete,
|
|
28
|
+
autoFocus = false,
|
|
29
|
+
size = 'md',
|
|
30
|
+
variant,
|
|
31
|
+
invalid = false,
|
|
32
|
+
valid = false,
|
|
33
|
+
maxLength,
|
|
34
|
+
minLength,
|
|
35
|
+
pattern,
|
|
36
|
+
min,
|
|
37
|
+
max,
|
|
38
|
+
step,
|
|
39
|
+
'aria-label': ariaLabel,
|
|
40
|
+
'aria-describedby': ariaDescribedBy,
|
|
41
|
+
glass,
|
|
42
|
+
},
|
|
43
|
+
ref
|
|
44
|
+
) => {
|
|
45
|
+
const { generateInputClass } = useInput({
|
|
46
|
+
size,
|
|
47
|
+
variant,
|
|
48
|
+
disabled,
|
|
49
|
+
invalid,
|
|
50
|
+
valid,
|
|
51
|
+
});
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
const inputClass = generateInputClass({
|
|
54
|
+
className: `${className} ${glass ? 'c-input--glass' : ''}`.trim(),
|
|
55
|
+
size,
|
|
56
|
+
variant,
|
|
57
|
+
disabled,
|
|
58
|
+
invalid,
|
|
59
|
+
valid,
|
|
60
|
+
type,
|
|
61
|
+
});
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
// Custom styles for glass effect
|
|
64
|
+
const glassStyles = glass ? {} : {};
|
|
64
65
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
66
|
+
const inputElement = (
|
|
67
|
+
<input
|
|
68
|
+
ref={ref}
|
|
69
|
+
type={type}
|
|
70
|
+
className={inputClass}
|
|
71
|
+
value={value}
|
|
72
|
+
defaultValue={defaultValue}
|
|
73
|
+
onChange={onChange}
|
|
74
|
+
onBlur={onBlur}
|
|
75
|
+
onFocus={onFocus}
|
|
76
|
+
placeholder={placeholder}
|
|
77
|
+
disabled={disabled}
|
|
78
|
+
required={required}
|
|
79
|
+
readOnly={readOnly}
|
|
80
|
+
id={id}
|
|
81
|
+
name={name}
|
|
82
|
+
autoComplete={autoComplete}
|
|
83
|
+
autoFocus={autoFocus}
|
|
84
|
+
maxLength={maxLength}
|
|
85
|
+
minLength={minLength}
|
|
86
|
+
pattern={pattern}
|
|
87
|
+
min={min}
|
|
88
|
+
max={max}
|
|
89
|
+
step={step}
|
|
90
|
+
aria-label={ariaLabel}
|
|
91
|
+
aria-describedby={ariaDescribedBy}
|
|
92
|
+
aria-invalid={invalid}
|
|
93
|
+
style={glass ? { ...glassStyles, ...style } : style}
|
|
94
|
+
/>
|
|
95
|
+
);
|
|
94
96
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
if (glass) {
|
|
98
|
+
// Default glass settings for inputs
|
|
99
|
+
const defaultGlassProps = {
|
|
100
|
+
displacementScale: 60,
|
|
101
|
+
blurAmount: 1,
|
|
102
|
+
saturation: 180,
|
|
103
|
+
aberrationIntensity: 0.2,
|
|
104
|
+
cornerRadius: 12,
|
|
105
|
+
mode: 'shader' as const,
|
|
106
|
+
};
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
|
|
107
109
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
return <AtomixGlass {...glassProps}>{inputElement}</AtomixGlass>;
|
|
111
|
+
}
|
|
110
112
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
return inputElement;
|
|
114
|
+
}
|
|
113
115
|
)
|
|
114
116
|
);
|
|
115
117
|
|
|
@@ -52,7 +52,7 @@ export const Basic: Story = {
|
|
|
52
52
|
label: 'Option 1',
|
|
53
53
|
name: 'option',
|
|
54
54
|
value: 'option1',
|
|
55
|
-
onChange: () => {},
|
|
55
|
+
onChange: () => { },
|
|
56
56
|
},
|
|
57
57
|
};
|
|
58
58
|
|
|
@@ -63,7 +63,7 @@ export const Checked: Story = {
|
|
|
63
63
|
name: 'option',
|
|
64
64
|
value: 'option1',
|
|
65
65
|
checked: true,
|
|
66
|
-
onChange: () => {},
|
|
66
|
+
onChange: () => { },
|
|
67
67
|
},
|
|
68
68
|
};
|
|
69
69
|
|
|
@@ -71,27 +71,27 @@ export const Checked: Story = {
|
|
|
71
71
|
export const RadioGroup: Story = {
|
|
72
72
|
render: (args: any) => {
|
|
73
73
|
const [selectedValue, setSelectedValue] = React.useState('option1');
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
return (
|
|
76
|
-
<div className="u-
|
|
77
|
-
<Radio
|
|
78
|
-
label="Option 1"
|
|
79
|
-
name="radioGroup"
|
|
80
|
-
value="option1"
|
|
76
|
+
<div className="u-flex u-flex-column u-gap-2">
|
|
77
|
+
<Radio
|
|
78
|
+
label="Option 1"
|
|
79
|
+
name="radioGroup"
|
|
80
|
+
value="option1"
|
|
81
81
|
checked={selectedValue === 'option1'}
|
|
82
82
|
onChange={() => setSelectedValue('option1')}
|
|
83
83
|
/>
|
|
84
|
-
<Radio
|
|
85
|
-
label="Option 2"
|
|
86
|
-
name="radioGroup"
|
|
87
|
-
value="option2"
|
|
84
|
+
<Radio
|
|
85
|
+
label="Option 2"
|
|
86
|
+
name="radioGroup"
|
|
87
|
+
value="option2"
|
|
88
88
|
checked={selectedValue === 'option2'}
|
|
89
89
|
onChange={() => setSelectedValue('option2')}
|
|
90
90
|
/>
|
|
91
|
-
<Radio
|
|
92
|
-
label="Option 3"
|
|
93
|
-
name="radioGroup"
|
|
94
|
-
value="option3"
|
|
91
|
+
<Radio
|
|
92
|
+
label="Option 3"
|
|
93
|
+
name="radioGroup"
|
|
94
|
+
value="option3"
|
|
95
95
|
checked={selectedValue === 'option3'}
|
|
96
96
|
onChange={() => setSelectedValue('option3')}
|
|
97
97
|
/>
|
|
@@ -104,29 +104,29 @@ export const RadioGroup: Story = {
|
|
|
104
104
|
export const States: Story = {
|
|
105
105
|
render: (args: any) => {
|
|
106
106
|
const [selectedValue, setSelectedValue] = React.useState('default');
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
return (
|
|
109
|
-
<div className="u-
|
|
110
|
-
<Radio
|
|
111
|
-
label="Default radio"
|
|
112
|
-
name="states"
|
|
113
|
-
value="default"
|
|
109
|
+
<div className="u-flex u-flex-column u-gap-2">
|
|
110
|
+
<Radio
|
|
111
|
+
label="Default radio"
|
|
112
|
+
name="states"
|
|
113
|
+
value="default"
|
|
114
114
|
checked={selectedValue === 'default'}
|
|
115
|
-
onChange={() => setSelectedValue('default')}
|
|
115
|
+
onChange={() => setSelectedValue('default')}
|
|
116
116
|
/>
|
|
117
|
-
<Radio
|
|
118
|
-
label="Checked radio"
|
|
119
|
-
name="states"
|
|
120
|
-
value="checked"
|
|
117
|
+
<Radio
|
|
118
|
+
label="Checked radio"
|
|
119
|
+
name="states"
|
|
120
|
+
value="checked"
|
|
121
121
|
checked={selectedValue === 'checked'}
|
|
122
|
-
onChange={() => setSelectedValue('checked')}
|
|
122
|
+
onChange={() => setSelectedValue('checked')}
|
|
123
123
|
/>
|
|
124
|
-
<Radio
|
|
125
|
-
label="Disabled radio"
|
|
126
|
-
name="states"
|
|
127
|
-
value="disabled"
|
|
124
|
+
<Radio
|
|
125
|
+
label="Disabled radio"
|
|
126
|
+
name="states"
|
|
127
|
+
value="disabled"
|
|
128
128
|
disabled
|
|
129
|
-
onChange={() => {}}
|
|
129
|
+
onChange={() => { }}
|
|
130
130
|
/>
|
|
131
131
|
<Radio
|
|
132
132
|
label="Disabled and checked radio"
|
|
@@ -134,21 +134,21 @@ export const States: Story = {
|
|
|
134
134
|
value="disabledChecked"
|
|
135
135
|
disabled
|
|
136
136
|
checked
|
|
137
|
-
onChange={() => {}}
|
|
137
|
+
onChange={() => { }}
|
|
138
138
|
/>
|
|
139
|
-
<Radio
|
|
140
|
-
label="Valid radio"
|
|
141
|
-
name="states"
|
|
142
|
-
value="valid"
|
|
143
|
-
valid
|
|
139
|
+
<Radio
|
|
140
|
+
label="Valid radio"
|
|
141
|
+
name="states"
|
|
142
|
+
value="valid"
|
|
143
|
+
valid
|
|
144
144
|
checked={selectedValue === 'valid'}
|
|
145
145
|
onChange={() => setSelectedValue('valid')}
|
|
146
146
|
/>
|
|
147
|
-
<Radio
|
|
148
|
-
label="Invalid radio"
|
|
149
|
-
name="states"
|
|
150
|
-
value="invalid"
|
|
151
|
-
invalid
|
|
147
|
+
<Radio
|
|
148
|
+
label="Invalid radio"
|
|
149
|
+
name="states"
|
|
150
|
+
value="invalid"
|
|
151
|
+
invalid
|
|
152
152
|
checked={selectedValue === 'invalid'}
|
|
153
153
|
onChange={() => setSelectedValue('invalid')}
|
|
154
154
|
/>
|
|
@@ -162,8 +162,8 @@ export const WithoutLabel: Story = {
|
|
|
162
162
|
args: {
|
|
163
163
|
name: 'noLabel',
|
|
164
164
|
value: 'noLabel',
|
|
165
|
-
|
|
166
|
-
onChange: () => {},
|
|
165
|
+
'aria-label': 'Radio button without visible label',
|
|
166
|
+
onChange: () => { },
|
|
167
167
|
},
|
|
168
168
|
};
|
|
169
169
|
|
|
@@ -174,7 +174,7 @@ export const Glass: Story = {
|
|
|
174
174
|
name: 'glass',
|
|
175
175
|
value: 'glass',
|
|
176
176
|
glass: true,
|
|
177
|
-
onChange: () => {},
|
|
177
|
+
onChange: () => { },
|
|
178
178
|
},
|
|
179
179
|
render: (args: any) => (
|
|
180
180
|
<div
|
|
@@ -206,7 +206,7 @@ export const GlassCustom: Story = {
|
|
|
206
206
|
aberrationIntensity: 0.8,
|
|
207
207
|
cornerRadius: 12,
|
|
208
208
|
} as any,
|
|
209
|
-
onChange: () => {},
|
|
209
|
+
onChange: () => { },
|
|
210
210
|
},
|
|
211
211
|
render: (args: any) => (
|
|
212
212
|
<div
|
|
@@ -232,7 +232,7 @@ export const GlassCustom: Story = {
|
|
|
232
232
|
export const GlassGroup: Story = {
|
|
233
233
|
render: () => {
|
|
234
234
|
const [selectedValue, setSelectedValue] = React.useState('option1');
|
|
235
|
-
|
|
235
|
+
|
|
236
236
|
return (
|
|
237
237
|
<div
|
|
238
238
|
style={{
|
|
@@ -256,30 +256,30 @@ export const GlassGroup: Story = {
|
|
|
256
256
|
>
|
|
257
257
|
Glass Radio Group
|
|
258
258
|
</h3>
|
|
259
|
-
<div className="u-
|
|
260
|
-
<Radio
|
|
261
|
-
label="Glass Option 1"
|
|
262
|
-
name="glassGroup"
|
|
263
|
-
value="option1"
|
|
259
|
+
<div className="u-flex u-flex-column u-gap-2">
|
|
260
|
+
<Radio
|
|
261
|
+
label="Glass Option 1"
|
|
262
|
+
name="glassGroup"
|
|
263
|
+
value="option1"
|
|
264
264
|
checked={selectedValue === 'option1'}
|
|
265
265
|
onChange={() => setSelectedValue('option1')}
|
|
266
|
-
glass
|
|
266
|
+
glass
|
|
267
267
|
/>
|
|
268
|
-
<Radio
|
|
269
|
-
label="Glass Option 2"
|
|
270
|
-
name="glassGroup"
|
|
271
|
-
value="option2"
|
|
268
|
+
<Radio
|
|
269
|
+
label="Glass Option 2"
|
|
270
|
+
name="glassGroup"
|
|
271
|
+
value="option2"
|
|
272
272
|
checked={selectedValue === 'option2'}
|
|
273
273
|
onChange={() => setSelectedValue('option2')}
|
|
274
|
-
glass
|
|
274
|
+
glass
|
|
275
275
|
/>
|
|
276
|
-
<Radio
|
|
277
|
-
label="Glass Option 3"
|
|
278
|
-
name="glassGroup"
|
|
279
|
-
value="option3"
|
|
276
|
+
<Radio
|
|
277
|
+
label="Glass Option 3"
|
|
278
|
+
name="glassGroup"
|
|
279
|
+
value="option3"
|
|
280
280
|
checked={selectedValue === 'option3'}
|
|
281
281
|
onChange={() => setSelectedValue('option3')}
|
|
282
|
-
glass
|
|
282
|
+
glass
|
|
283
283
|
/>
|
|
284
284
|
</div>
|
|
285
285
|
</div>
|
|
@@ -292,7 +292,7 @@ export const GlassGroup: Story = {
|
|
|
292
292
|
export const GlassStates: Story = {
|
|
293
293
|
render: () => {
|
|
294
294
|
const [selectedValue, setSelectedValue] = React.useState('default');
|
|
295
|
-
|
|
295
|
+
|
|
296
296
|
return (
|
|
297
297
|
<div
|
|
298
298
|
style={{
|
|
@@ -327,31 +327,31 @@ export const GlassStates: Story = {
|
|
|
327
327
|
>
|
|
328
328
|
Glass Radio States
|
|
329
329
|
</h3>
|
|
330
|
-
<div className="u-
|
|
331
|
-
<Radio
|
|
332
|
-
label="Glass Default"
|
|
333
|
-
name="glassStates"
|
|
334
|
-
value="default"
|
|
330
|
+
<div className="u-flex u-flex-column u-gap-2">
|
|
331
|
+
<Radio
|
|
332
|
+
label="Glass Default"
|
|
333
|
+
name="glassStates"
|
|
334
|
+
value="default"
|
|
335
335
|
checked={selectedValue === 'default'}
|
|
336
336
|
onChange={() => setSelectedValue('default')}
|
|
337
|
-
glass
|
|
337
|
+
glass
|
|
338
338
|
/>
|
|
339
|
-
<Radio
|
|
340
|
-
label="Glass Checked"
|
|
341
|
-
name="glassStates"
|
|
342
|
-
value="checked"
|
|
339
|
+
<Radio
|
|
340
|
+
label="Glass Checked"
|
|
341
|
+
name="glassStates"
|
|
342
|
+
value="checked"
|
|
343
343
|
checked={selectedValue === 'checked'}
|
|
344
344
|
onChange={() => setSelectedValue('checked')}
|
|
345
|
-
glass
|
|
345
|
+
glass
|
|
346
346
|
/>
|
|
347
|
-
<Radio
|
|
348
|
-
label="Glass Disabled"
|
|
349
|
-
name="glassStates"
|
|
350
|
-
value="disabled"
|
|
347
|
+
<Radio
|
|
348
|
+
label="Glass Disabled"
|
|
349
|
+
name="glassStates"
|
|
350
|
+
value="disabled"
|
|
351
351
|
disabled
|
|
352
352
|
checked={selectedValue === 'disabled'}
|
|
353
353
|
onChange={() => setSelectedValue('disabled')}
|
|
354
|
-
glass
|
|
354
|
+
glass
|
|
355
355
|
/>
|
|
356
356
|
<Radio
|
|
357
357
|
label="Glass Disabled and Checked"
|
|
@@ -362,23 +362,23 @@ export const GlassStates: Story = {
|
|
|
362
362
|
onChange={() => setSelectedValue('disabledChecked')}
|
|
363
363
|
glass
|
|
364
364
|
/>
|
|
365
|
-
<Radio
|
|
366
|
-
label="Glass Valid"
|
|
367
|
-
name="glassStates"
|
|
368
|
-
value="valid"
|
|
369
|
-
valid
|
|
365
|
+
<Radio
|
|
366
|
+
label="Glass Valid"
|
|
367
|
+
name="glassStates"
|
|
368
|
+
value="valid"
|
|
369
|
+
valid
|
|
370
370
|
checked={selectedValue === 'valid'}
|
|
371
371
|
onChange={() => setSelectedValue('valid')}
|
|
372
|
-
glass
|
|
372
|
+
glass
|
|
373
373
|
/>
|
|
374
|
-
<Radio
|
|
375
|
-
label="Glass Invalid"
|
|
376
|
-
name="glassStates"
|
|
377
|
-
value="invalid"
|
|
378
|
-
invalid
|
|
374
|
+
<Radio
|
|
375
|
+
label="Glass Invalid"
|
|
376
|
+
name="glassStates"
|
|
377
|
+
value="invalid"
|
|
378
|
+
invalid
|
|
379
379
|
checked={selectedValue === 'invalid'}
|
|
380
380
|
onChange={() => setSelectedValue('invalid')}
|
|
381
|
-
glass
|
|
381
|
+
glass
|
|
382
382
|
/>
|
|
383
383
|
</div>
|
|
384
384
|
</div>
|
|
@@ -19,8 +19,8 @@ export const Radio: React.FC<RadioProps> = memo(({
|
|
|
19
19
|
value,
|
|
20
20
|
invalid = false,
|
|
21
21
|
valid = false,
|
|
22
|
-
ariaLabel,
|
|
23
|
-
ariaDescribedBy,
|
|
22
|
+
'aria-label': ariaLabel,
|
|
23
|
+
'aria-describedby': ariaDescribedBy,
|
|
24
24
|
glass,
|
|
25
25
|
}) => {
|
|
26
26
|
const { generateRadioClass } = useRadio({
|
|
@@ -93,7 +93,7 @@ export const Interactive: Story = {
|
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
return (
|
|
96
|
-
<div className="u-
|
|
96
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
97
97
|
<Select
|
|
98
98
|
options={countries}
|
|
99
99
|
placeholder="Select a country"
|
|
@@ -116,7 +116,7 @@ export const Sizes: Story = {
|
|
|
116
116
|
options: countries,
|
|
117
117
|
},
|
|
118
118
|
render: () => (
|
|
119
|
-
<div className="u-
|
|
119
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
120
120
|
<Select size="sm" options={countries} placeholder="Small select" />
|
|
121
121
|
<Select size="md" options={countries} placeholder="Medium select (default)" />
|
|
122
122
|
<Select size="lg" options={countries} placeholder="Large select" />
|
|
@@ -130,7 +130,7 @@ export const States: Story = {
|
|
|
130
130
|
options: countries,
|
|
131
131
|
},
|
|
132
132
|
render: () => (
|
|
133
|
-
<div className="u-
|
|
133
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
134
134
|
<Select options={countries} placeholder="Default select" />
|
|
135
135
|
<Select options={countries} placeholder="Disabled select" disabled />
|
|
136
136
|
<Select options={countries} placeholder="Valid select" valid value="us" />
|
|
@@ -272,7 +272,7 @@ export const GlassStates: Story = {
|
|
|
272
272
|
>
|
|
273
273
|
Glass Select States
|
|
274
274
|
</h3>
|
|
275
|
-
<div className="u-
|
|
275
|
+
<div className="u-flex u-flex-column u-gap-3">
|
|
276
276
|
<Select options={args.options} placeholder="Glass Select" glass />
|
|
277
277
|
<Select options={args.options} placeholder="Glass Disabled" disabled glass />
|
|
278
278
|
<Select options={args.options} placeholder="Glass Valid" valid value="us" glass />
|
|
@@ -24,8 +24,8 @@ export const Select: React.FC<SelectProps> = memo(({
|
|
|
24
24
|
invalid = false,
|
|
25
25
|
valid = false,
|
|
26
26
|
multiple = false,
|
|
27
|
-
ariaLabel,
|
|
28
|
-
ariaDescribedBy,
|
|
27
|
+
'aria-label': ariaLabel,
|
|
28
|
+
'aria-describedby': ariaDescribedBy,
|
|
29
29
|
glass,
|
|
30
30
|
}) => {
|
|
31
31
|
const { generateSelectClass } = useSelect({
|
|
@@ -58,6 +58,10 @@ const meta = {
|
|
|
58
58
|
control: 'boolean',
|
|
59
59
|
description: 'Enable glass morphism effect',
|
|
60
60
|
},
|
|
61
|
+
defaultValue: {
|
|
62
|
+
control: 'text',
|
|
63
|
+
description: 'Initial value for uncontrolled textarea',
|
|
64
|
+
},
|
|
61
65
|
},
|
|
62
66
|
} satisfies Meta<typeof Textarea>;
|
|
63
67
|
|
|
@@ -72,6 +76,17 @@ export const Basic: Story = {
|
|
|
72
76
|
},
|
|
73
77
|
};
|
|
74
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Textarea using defaultValue for uncontrolled component pattern.
|
|
81
|
+
*/
|
|
82
|
+
export const Uncontrolled: Story = {
|
|
83
|
+
args: {
|
|
84
|
+
defaultValue: 'Initial value',
|
|
85
|
+
placeholder: 'Type something...',
|
|
86
|
+
rows: 4,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
75
90
|
// With value
|
|
76
91
|
export const WithValue: Story = {
|
|
77
92
|
args: {
|
|
@@ -83,7 +98,7 @@ export const WithValue: Story = {
|
|
|
83
98
|
// Textarea sizes
|
|
84
99
|
export const Sizes: Story = {
|
|
85
100
|
render: () => (
|
|
86
|
-
<div className="u-
|
|
101
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
87
102
|
<Textarea size="sm" placeholder="Small textarea" rows={3} />
|
|
88
103
|
<Textarea size="md" placeholder="Medium textarea (default)" rows={3} />
|
|
89
104
|
<Textarea size="lg" placeholder="Large textarea" rows={3} />
|
|
@@ -94,7 +109,7 @@ export const Sizes: Story = {
|
|
|
94
109
|
// Textarea rows
|
|
95
110
|
export const Rows: Story = {
|
|
96
111
|
render: () => (
|
|
97
|
-
<div className="u-
|
|
112
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
98
113
|
<Textarea placeholder="2 rows" rows={2} />
|
|
99
114
|
<Textarea placeholder="4 rows" rows={4} />
|
|
100
115
|
<Textarea placeholder="6 rows" rows={6} />
|
|
@@ -105,7 +120,7 @@ export const Rows: Story = {
|
|
|
105
120
|
// Textarea variants
|
|
106
121
|
export const Variants: Story = {
|
|
107
122
|
render: () => (
|
|
108
|
-
<div className="u-
|
|
123
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
109
124
|
<Textarea variant="primary" placeholder="Primary textarea" rows={2} />
|
|
110
125
|
<Textarea variant="secondary" placeholder="Secondary textarea" rows={2} />
|
|
111
126
|
<Textarea variant="success" placeholder="Success textarea" rows={2} />
|
|
@@ -119,7 +134,7 @@ export const Variants: Story = {
|
|
|
119
134
|
// States
|
|
120
135
|
export const States: Story = {
|
|
121
136
|
render: () => (
|
|
122
|
-
<div className="u-
|
|
137
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
123
138
|
<Textarea placeholder="Default textarea" rows={2} />
|
|
124
139
|
<Textarea placeholder="Disabled textarea" disabled rows={2} />
|
|
125
140
|
<Textarea placeholder="Valid textarea" valid rows={2} />
|
|
@@ -171,7 +186,7 @@ export const GlassVariants: Story = {
|
|
|
171
186
|
<h3 style={{ color: 'white', marginBottom: '1rem', fontSize: '1.2rem' }}>
|
|
172
187
|
Glass Textarea Variants
|
|
173
188
|
</h3>
|
|
174
|
-
<div className="u-
|
|
189
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '400px' }}>
|
|
175
190
|
<Textarea placeholder="Small Glass" size="sm" rows={3} glass />
|
|
176
191
|
<Textarea placeholder="Medium Glass" size="md" rows={3} glass />
|
|
177
192
|
<Textarea placeholder="Large Glass" size="lg" rows={3} glass />
|
|
@@ -210,7 +225,7 @@ export const GlassShowcase: Story = {
|
|
|
210
225
|
<h3 style={{ color: 'white', marginBottom: '1rem', fontSize: '1.2rem' }}>
|
|
211
226
|
Glass Textarea on Background
|
|
212
227
|
</h3>
|
|
213
|
-
<div className="u-
|
|
228
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '400px' }}>
|
|
214
229
|
<Textarea placeholder="Write your message..." rows={4} glass />
|
|
215
230
|
<Textarea placeholder="Additional notes..." rows={3} glass />
|
|
216
231
|
</div>
|
|
@@ -225,7 +240,7 @@ export const GlassShowcase: Story = {
|
|
|
225
240
|
}}
|
|
226
241
|
>
|
|
227
242
|
<h3 style={{ color: 'white', marginBottom: '1rem', fontSize: '1.2rem' }}>Glass Modes</h3>
|
|
228
|
-
<div className="u-
|
|
243
|
+
<div className="u-flex u-flex-column u-gap-3" style={{ width: '400px' }}>
|
|
229
244
|
<Textarea placeholder="Standard Mode" rows={3} glass={{ mode: 'standard' }} />
|
|
230
245
|
<Textarea placeholder="Polar Mode" rows={3} glass={{ mode: 'polar' }} />
|
|
231
246
|
<Textarea placeholder="Prominent Mode" rows={3} glass={{ mode: 'prominent' }} />
|