@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.
Files changed (67) hide show
  1. package/README.md +510 -106
  2. package/dist/atomix.css +30 -24
  3. package/dist/atomix.css.map +1 -1
  4. package/dist/atomix.min.css +6 -6
  5. package/dist/atomix.min.css.map +1 -1
  6. package/dist/atomix.umd.js +1 -1
  7. package/dist/atomix.umd.js.map +1 -1
  8. package/dist/atomix.umd.min.js +1 -1
  9. package/dist/charts.d.ts +11 -2
  10. package/dist/charts.js +294 -139
  11. package/dist/charts.js.map +1 -1
  12. package/dist/core.d.ts +14 -39
  13. package/dist/core.js +297 -145
  14. package/dist/core.js.map +1 -1
  15. package/dist/forms.d.ts +11 -1
  16. package/dist/forms.js +385 -185
  17. package/dist/forms.js.map +1 -1
  18. package/dist/heavy.d.ts +9 -0
  19. package/dist/heavy.js +297 -143
  20. package/dist/heavy.js.map +1 -1
  21. package/dist/index.d.ts +156 -164
  22. package/dist/index.esm.js +391 -203
  23. package/dist/index.esm.js.map +1 -1
  24. package/dist/index.js +391 -203
  25. package/dist/index.js.map +1 -1
  26. package/dist/index.min.js +1 -1
  27. package/dist/index.min.js.map +1 -1
  28. package/dist/theme.d.ts +14 -6
  29. package/dist/theme.js +2 -9
  30. package/dist/theme.js.map +1 -1
  31. package/package.json +26 -26
  32. package/src/components/AtomixGlass/AtomixGlass.tsx +1 -1
  33. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +8 -1
  34. package/src/components/AtomixGlass/deprecated/AtomixGlass.deprecated.tsx +390 -0
  35. package/src/components/AtomixGlass/glass-utils.ts +29 -0
  36. package/src/components/AtomixGlass/stories/Playground.stories.tsx +32 -1
  37. package/src/components/Button/Button.stories.tsx +1 -1
  38. package/src/components/Button/Button.tsx +6 -5
  39. package/src/components/Card/Card.tsx +2 -2
  40. package/src/components/Dropdown/Dropdown.tsx +1 -0
  41. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  42. package/src/components/Form/Select.test.tsx +75 -0
  43. package/src/components/Form/Select.tsx +348 -252
  44. package/src/components/Form/SelectOption.tsx +16 -10
  45. package/src/components/index.ts +1 -1
  46. package/src/layouts/CssGrid/index.ts +1 -0
  47. package/src/lib/composables/shared-mouse-tracker.ts +62 -6
  48. package/src/lib/composables/useAtomixGlass.ts +241 -139
  49. package/src/lib/composables/useAtomixGlassStyles.ts +201 -149
  50. package/src/lib/constants/components.ts +54 -35
  51. package/src/lib/theme/config/configLoader.ts +1 -1
  52. package/src/lib/theme/test/testTheme.ts +2 -2
  53. package/src/lib/theme/utils/themeUtils.ts +98 -110
  54. package/src/lib/types/components.ts +29 -65
  55. package/src/styles/01-settings/_settings.spacing.scss +6 -1
  56. package/src/styles/03-generic/_generic.reset.scss +1 -1
  57. package/src/styles/06-components/_components.atomix-glass.scss +20 -29
  58. package/src/styles/06-components/_components.data-table.scss +5 -4
  59. package/src/styles/06-components/_components.dynamic-background.scss +9 -8
  60. package/src/styles/06-components/_components.footer.scss +8 -7
  61. package/src/styles/06-components/_components.hero.scss +2 -2
  62. package/src/styles/06-components/_components.messages.scss +16 -16
  63. package/src/styles/06-components/_components.navbar.scss +2 -0
  64. package/src/styles/06-components/_components.select.scss +15 -2
  65. package/src/styles/06-components/_components.upload.scss +3 -3
  66. package/CHANGELOG.md +0 -165
  67. 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
  });