@shohojdhara/atomix 0.6.1 → 0.6.3
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/README.md +510 -106
- package/dist/atomix.css +30 -24
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +6 -6
- package/dist/atomix.min.css.map +1 -1
- package/dist/atomix.umd.js +1 -1
- package/dist/atomix.umd.js.map +1 -1
- package/dist/atomix.umd.min.js +1 -1
- package/dist/charts.d.ts +11 -2
- package/dist/charts.js +294 -139
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +14 -39
- package/dist/core.js +297 -145
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +11 -1
- package/dist/forms.js +385 -185
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +9 -0
- package/dist/heavy.js +297 -143
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +156 -164
- package/dist/index.esm.js +391 -203
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +391 -203
- 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 +14 -6
- package/dist/theme.js +2 -9
- package/dist/theme.js.map +1 -1
- package/package.json +26 -26
- package/src/components/AtomixGlass/AtomixGlass.tsx +1 -1
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +8 -1
- package/src/components/AtomixGlass/deprecated/AtomixGlass.deprecated.tsx +390 -0
- package/src/components/AtomixGlass/glass-utils.ts +29 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +32 -1
- package/src/components/Button/Button.stories.tsx +1 -1
- package/src/components/Button/Button.tsx +6 -5
- package/src/components/Card/Card.tsx +2 -2
- package/src/components/Dropdown/Dropdown.tsx +1 -0
- package/src/components/EdgePanel/EdgePanel.tsx +1 -3
- package/src/components/Form/Select.test.tsx +75 -0
- package/src/components/Form/Select.tsx +348 -252
- package/src/components/Form/SelectOption.tsx +16 -10
- package/src/components/index.ts +1 -1
- package/src/layouts/CssGrid/index.ts +1 -0
- package/src/lib/composables/shared-mouse-tracker.ts +62 -6
- package/src/lib/composables/useAtomixGlass.ts +241 -139
- package/src/lib/composables/useAtomixGlassStyles.ts +201 -149
- package/src/lib/constants/components.ts +54 -35
- package/src/lib/theme/config/configLoader.ts +1 -1
- package/src/lib/theme/test/testTheme.ts +2 -2
- package/src/lib/theme/utils/themeUtils.ts +98 -110
- package/src/lib/types/components.ts +29 -65
- package/src/styles/01-settings/_settings.spacing.scss +6 -1
- package/src/styles/03-generic/_generic.reset.scss +1 -1
- package/src/styles/06-components/_components.atomix-glass.scss +20 -29
- package/src/styles/06-components/_components.data-table.scss +5 -4
- package/src/styles/06-components/_components.dynamic-background.scss +9 -8
- package/src/styles/06-components/_components.footer.scss +8 -7
- package/src/styles/06-components/_components.hero.scss +2 -2
- package/src/styles/06-components/_components.messages.scss +16 -16
- package/src/styles/06-components/_components.navbar.scss +2 -0
- package/src/styles/06-components/_components.select.scss +15 -2
- package/src/styles/06-components/_components.upload.scss +3 -3
- package/CHANGELOG.md +0 -165
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +0 -215
|
@@ -96,4 +96,79 @@ describe('Select Component', () => {
|
|
|
96
96
|
expect(handleChange).toHaveBeenCalled();
|
|
97
97
|
expect(handleChange.mock.calls[0][0].target.value).toBe('2');
|
|
98
98
|
});
|
|
99
|
+
it('handles multiple selection correctly', async () => {
|
|
100
|
+
const handleChange = vi.fn();
|
|
101
|
+
const options = [
|
|
102
|
+
{ value: '1', label: 'Option 1' },
|
|
103
|
+
{ value: '2', label: 'Option 2' },
|
|
104
|
+
{ value: '3', label: 'Option 3' },
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
// Initial selection is '1'
|
|
108
|
+
const { rerender } = render(<Select multiple options={options} value={['1']} onChange={handleChange} />);
|
|
109
|
+
|
|
110
|
+
// Check display label
|
|
111
|
+
const selectedText = document.querySelector('.c-select__selected-text');
|
|
112
|
+
expect(selectedText).toHaveTextContent('Option 1');
|
|
113
|
+
|
|
114
|
+
// Open dropdown
|
|
115
|
+
const trigger = document.querySelector('.c-select__selected');
|
|
116
|
+
fireEvent.click(trigger!);
|
|
117
|
+
|
|
118
|
+
// Click item '2'
|
|
119
|
+
const item2 = document.querySelector('.c-select__item[data-value="2"]');
|
|
120
|
+
fireEvent.click(item2!);
|
|
121
|
+
|
|
122
|
+
expect(handleChange).toHaveBeenCalled();
|
|
123
|
+
// The handler should receive an array with both '1' and '2'
|
|
124
|
+
// Since Select.tsx calls onChange with the new value array
|
|
125
|
+
const event = handleChange.mock.calls[0][0];
|
|
126
|
+
expect(event.target.value).toEqual(['1', '2']);
|
|
127
|
+
|
|
128
|
+
// Rerender with both selected
|
|
129
|
+
rerender(<Select multiple options={options} value={['1', '2']} onChange={handleChange} />);
|
|
130
|
+
expect(selectedText).toHaveTextContent('Option 1, Option 2');
|
|
131
|
+
|
|
132
|
+
// Click item '1' to deselect it
|
|
133
|
+
const item1 = document.querySelector('.c-select__item[data-value="1"]');
|
|
134
|
+
fireEvent.click(item1!);
|
|
135
|
+
|
|
136
|
+
expect(handleChange.mock.calls[1][0].target.value).toEqual(['2']);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('supports keyboard navigation', () => {
|
|
140
|
+
const handleChange = vi.fn();
|
|
141
|
+
const options = [
|
|
142
|
+
{ value: '1', label: 'Option 1' },
|
|
143
|
+
{ value: '2', label: 'Option 2' },
|
|
144
|
+
];
|
|
145
|
+
render(<Select options={options} value="" onChange={handleChange} />);
|
|
146
|
+
|
|
147
|
+
const trigger = document.querySelector('.c-select__selected');
|
|
148
|
+
|
|
149
|
+
// Focus and open with Enter - should focus first item if none selected
|
|
150
|
+
fireEvent.keyDown(trigger!, { key: 'Enter' });
|
|
151
|
+
expect(document.querySelector('.c-select')).toHaveClass('is-open');
|
|
152
|
+
|
|
153
|
+
const item1 = document.querySelector('.c-select__item[data-value="1"]');
|
|
154
|
+
expect(item1).toHaveClass('is-focused');
|
|
155
|
+
|
|
156
|
+
// Press ArrowDown to move to second option
|
|
157
|
+
fireEvent.keyDown(trigger!, { key: 'ArrowDown' });
|
|
158
|
+
const item2 = document.querySelector('.c-select__item[data-value="2"]');
|
|
159
|
+
expect(item2).toHaveClass('is-focused');
|
|
160
|
+
expect(item1).not.toHaveClass('is-focused');
|
|
161
|
+
|
|
162
|
+
// Select with Enter
|
|
163
|
+
fireEvent.keyDown(trigger!, { key: 'Enter' });
|
|
164
|
+
expect(handleChange).toHaveBeenCalled();
|
|
165
|
+
expect(handleChange.mock.calls[0][0].target.value).toBe('2');
|
|
166
|
+
expect(document.querySelector('.c-select')).not.toHaveClass('is-open');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('handles empty state and placeholder', () => {
|
|
170
|
+
render(<Select options={[]} value="" placeholder="Select something..." onChange={() => {}} />);
|
|
171
|
+
const selectedText = document.querySelector('.c-select__selected-text');
|
|
172
|
+
expect(selectedText).toHaveTextContent('Select something...');
|
|
173
|
+
});
|
|
99
174
|
});
|