@shohojdhara/atomix 0.3.14 → 0.4.0
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 +44 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +50 -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 +21044 -2618
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +77 -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 +44 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +50 -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 +152 -78
- package/dist/index.esm.js +346 -340
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +359 -353
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/theme.d.ts +9 -9
- package/dist/theme.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 +358 -850
- package/src/components/Accordion/Accordion.test.tsx +70 -50
- package/src/components/Accordion/Accordion.tsx +99 -94
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +6 -5
- package/src/components/AtomixGlass/shader-utils.ts +133 -52
- 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 +51 -36
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +195 -0
- package/src/components/Avatar/Avatar.tsx +58 -56
- package/src/components/Badge/Badge.stories.tsx +122 -352
- package/src/components/Badge/Badge.test.tsx +41 -41
- package/src/components/Badge/Badge.tsx +64 -62
- package/src/components/Block/Block.stories.tsx +30 -11
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
- package/src/components/Button/Button.stories.tsx +454 -1126
- package/src/components/Button/Button.test.tsx +123 -0
- package/src/components/Button/Button.tsx +88 -60
- package/src/components/Button/ButtonGroup.stories.tsx +376 -215
- package/src/components/Button/ButtonGroup.tsx +4 -15
- package/src/components/Callout/Callout.stories.tsx +316 -568
- package/src/components/Card/Card.stories.tsx +292 -81
- package/src/components/Card/Card.tsx +30 -14
- package/src/components/Chart/AreaChart.tsx +1 -1
- package/src/components/Chart/CandlestickChart.tsx +23 -16
- package/src/components/Chart/Chart.stories.tsx +153 -16
- package/src/components/Chart/Chart.tsx +40 -44
- package/src/components/Chart/ChartRenderer.tsx +39 -12
- package/src/components/Chart/ChartToolbar.tsx +21 -5
- package/src/components/Chart/DonutChart.tsx +1 -1
- package/src/components/Chart/FunnelChart.tsx +4 -1
- package/src/components/Chart/GaugeChart.tsx +3 -1
- package/src/components/Chart/HeatmapChart.tsx +50 -37
- package/src/components/Chart/LineChart.tsx +3 -2
- package/src/components/Chart/MultiAxisChart.tsx +24 -16
- package/src/components/Chart/RadarChart.tsx +19 -17
- package/src/components/Chart/ScatterChart.tsx +29 -21
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
- package/src/components/Countdown/Countdown.stories.tsx +114 -7
- package/src/components/DataTable/DataTable.stories.tsx +349 -144
- package/src/components/DataTable/DataTable.test.tsx +26 -148
- package/src/components/DataTable/DataTable.tsx +485 -456
- package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
- package/src/components/DatePicker/DatePicker.tsx +31 -26
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
- package/src/components/Dropdown/Dropdown.tsx +313 -299
- package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
- package/src/components/EdgePanel/EdgePanel.tsx +1 -3
- package/src/components/Footer/Footer.stories.tsx +396 -327
- package/src/components/Footer/Footer.tsx +130 -128
- package/src/components/Footer/FooterLink.tsx +2 -2
- package/src/components/Form/Checkbox.stories.tsx +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +122 -78
- package/src/components/Form/Form.stories.tsx +110 -19
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Input.stories.tsx +22 -39
- package/src/components/Form/Input.test.tsx +38 -44
- package/src/components/Form/Radio.stories.tsx +146 -17
- package/src/components/Form/Radio.tsx +68 -66
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Select.tsx +184 -182
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Form/Textarea.test.tsx +27 -32
- package/src/components/Hero/Hero.stories.tsx +372 -38
- package/src/components/Hero/Hero.tsx +201 -55
- package/src/components/Icon/index.ts +7 -1
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/List/List.tsx +19 -23
- package/src/components/Modal/Modal.stories.tsx +183 -43
- package/src/components/Modal/Modal.tsx +130 -127
- package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
- package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
- package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
- package/src/components/Pagination/Pagination.stories.tsx +7 -4
- package/src/components/Pagination/Pagination.tsx +199 -202
- package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
- package/src/components/Popover/Popover.stories.tsx +354 -97
- package/src/components/Popover/Popover.tsx +41 -37
- package/src/components/Progress/Progress.stories.tsx +160 -7
- package/src/components/River/River.stories.tsx +3 -2
- package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
- package/src/components/Slider/Slider.stories.tsx +12 -4
- package/src/components/Spinner/Spinner.stories.tsx +104 -8
- package/src/components/Spinner/Spinner.test.tsx +23 -23
- package/src/components/Spinner/Spinner.tsx +43 -46
- package/src/components/Steps/Steps.stories.tsx +173 -42
- package/src/components/Tabs/Tabs.stories.tsx +141 -12
- package/src/components/Tabs/Tabs.tsx +74 -72
- 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 +137 -36
- package/src/components/Toggle/Toggle.test.tsx +65 -70
- package/src/components/Toggle/Toggle.tsx +4 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
- package/src/components/Tooltip/Tooltip.tsx +104 -106
- package/src/components/Upload/Upload.stories.tsx +241 -150
- package/src/components/Upload/Upload.tsx +287 -283
- package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
- package/src/components/index.ts +13 -2
- package/src/layouts/Grid/Grid.stories.tsx +9 -3
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +219 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/shared-mouse-tracker.ts +13 -14
- package/src/lib/composables/useAtomixGlass.ts +126 -97
- package/src/lib/composables/useChartExport.ts +3 -8
- package/src/lib/composables/useDataTable.ts +72 -43
- package/src/lib/composables/useHero.ts +58 -14
- package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
- package/src/lib/composables/useInput.ts +10 -8
- package/src/lib/composables/useSideMenu.ts +6 -5
- package/src/lib/composables/useTooltip.ts +1 -2
- package/src/lib/composables/useVideoPlayer.ts +44 -35
- package/src/lib/config/index.ts +154 -154
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/constants/cssVariables.ts +29 -29
- package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
- package/src/lib/hooks/index.ts +1 -1
- package/src/lib/hooks/useComponentCustomization.ts +11 -17
- package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
- package/src/lib/patterns/__tests__/slots.test.ts +1 -1
- package/src/lib/patterns/index.ts +1 -1
- package/src/lib/patterns/slots.tsx +8 -13
- package/src/lib/storybook/InteractiveDemo.tsx +13 -18
- package/src/lib/storybook/PreviewContainer.tsx +1 -1
- package/src/lib/storybook/VariantsGrid.tsx +3 -7
- package/src/lib/storybook/index.ts +1 -1
- package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
- package/src/lib/theme/adapters/index.ts +3 -9
- package/src/lib/theme/adapters/themeAdapter.ts +41 -26
- package/src/lib/theme/config/index.ts +1 -1
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +10 -5
- package/src/lib/theme/constants/constants.ts +2 -2
- package/src/lib/theme/constants/index.ts +1 -2
- package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
- package/src/lib/theme/core/composeTheme.ts +32 -26
- package/src/lib/theme/core/createTheme.ts +1 -1
- package/src/lib/theme/core/createThemeObject.ts +308 -301
- package/src/lib/theme/core/index.ts +3 -3
- package/src/lib/theme/devtools/CLI.ts +107 -105
- package/src/lib/theme/devtools/Comparator.tsx +50 -32
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
- package/src/lib/theme/devtools/Inspector.tsx +75 -60
- package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
- package/src/lib/theme/devtools/Preview.tsx +150 -106
- package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
- package/src/lib/theme/devtools/index.ts +3 -9
- package/src/lib/theme/devtools/useHistory.ts +23 -21
- package/src/lib/theme/errors/errors.ts +12 -11
- package/src/lib/theme/errors/index.ts +2 -7
- package/src/lib/theme/generators/generateCSS.ts +9 -13
- package/src/lib/theme/generators/generateCSSNested.ts +1 -6
- package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
- package/src/lib/theme/generators/index.ts +1 -4
- package/src/lib/theme/i18n/index.ts +1 -1
- package/src/lib/theme/i18n/rtl.ts +13 -13
- package/src/lib/theme/index.ts +7 -16
- package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
- package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
- package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
- package/src/lib/theme/runtime/index.ts +2 -5
- package/src/lib/theme/runtime/useTheme.ts +18 -18
- package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
- package/src/lib/theme/test/testTheme.ts +15 -16
- package/src/lib/theme/tokens/index.ts +2 -7
- package/src/lib/theme/tokens/tokens.ts +25 -24
- package/src/lib/theme/types.ts +428 -411
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
- package/src/lib/theme/utils/componentTheming.ts +18 -18
- package/src/lib/theme/utils/domUtils.ts +277 -289
- package/src/lib/theme/utils/index.ts +1 -2
- package/src/lib/theme/utils/injectCSS.ts +10 -14
- package/src/lib/theme/utils/naming.ts +20 -16
- package/src/lib/theme/utils/themeHelpers.ts +10 -12
- package/src/lib/theme/utils/themeUtils.ts +85 -86
- package/src/lib/theme/utils/themeValidation.ts +82 -33
- package/src/lib/theme-tools.ts +8 -6
- package/src/lib/types/components.ts +172 -71
- package/src/lib/types/partProps.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/componentUtils.ts +8 -12
- package/src/lib/utils/csv.ts +19 -0
- package/src/lib/utils/dataTableExport.ts +2 -15
- package/src/lib/utils/fontPreloader.ts +10 -19
- package/src/lib/utils/icons.ts +4 -1
- package/src/lib/utils/index.ts +2 -6
- package/src/lib/utils/memoryMonitor.ts +10 -8
- package/src/lib/utils/themeNaming.ts +2 -2
- package/src/styles/01-settings/_index.scss +1 -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.design-tokens.scss +61 -50
- package/src/styles/01-settings/_settings.navbar.scss +1 -1
- package/src/styles/01-settings/_settings.spacing.scss +3 -4
- package/src/styles/01-settings/_settings.tooltip.scss +1 -1
- package/src/styles/01-settings/_settings.typography.scss +4 -4
- package/src/styles/02-tools/_tools.button.scss +51 -21
- package/src/styles/02-tools/_tools.utility-api.scss +38 -12
- package/src/styles/03-generic/_generic.root.scss +4 -3
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.atomix-glass.scss +13 -9
- package/src/styles/06-components/_components.button.scss +16 -4
- package/src/styles/06-components/_components.callout.scss +27 -21
- package/src/styles/06-components/_components.card.scss +5 -14
- package/src/styles/06-components/_components.chart.scss +22 -19
- package/src/styles/06-components/_components.checkbox.scss +25 -17
- package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
- package/src/styles/06-components/_components.edge-panel.scss +9 -2
- package/src/styles/06-components/_components.footer.scss +1 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -5
- package/src/styles/06-components/_components.toggle.scss +18 -0
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/06-components/old.chart.styles.scss +0 -2
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.border.scss +69 -27
- package/src/styles/99-utilities/_utilities.display.scss +1 -1
- package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
- package/src/styles/99-utilities/_utilities.position.scss +16 -9
- package/src/styles/99-utilities/_utilities.scss +2 -0
- package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
- package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +67 -46
- 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
|
@@ -20,7 +20,9 @@ vi.mock('../Pagination/Pagination', () => ({
|
|
|
20
20
|
Pagination: ({ currentPage, totalPages, onPageChange }: any) => (
|
|
21
21
|
<div data-testid="pagination">
|
|
22
22
|
<button onClick={() => onPageChange(currentPage - 1)}>Prev</button>
|
|
23
|
-
<span>
|
|
23
|
+
<span>
|
|
24
|
+
{currentPage} / {totalPages}
|
|
25
|
+
</span>
|
|
24
26
|
<button onClick={() => onPageChange(currentPage + 1)}>Next</button>
|
|
25
27
|
</div>
|
|
26
28
|
),
|
|
@@ -100,25 +102,13 @@ describe('DataTable Component', () => {
|
|
|
100
102
|
});
|
|
101
103
|
|
|
102
104
|
it('displays empty message when no data', () => {
|
|
103
|
-
render(
|
|
104
|
-
<DataTable
|
|
105
|
-
data={[]}
|
|
106
|
-
columns={sampleColumns}
|
|
107
|
-
emptyMessage="No records found"
|
|
108
|
-
/>
|
|
109
|
-
);
|
|
105
|
+
render(<DataTable data={[]} columns={sampleColumns} emptyMessage="No records found" />);
|
|
110
106
|
|
|
111
107
|
expect(screen.getByText('No records found')).toBeInTheDocument();
|
|
112
108
|
});
|
|
113
109
|
|
|
114
110
|
it('displays loading state', () => {
|
|
115
|
-
render(
|
|
116
|
-
<DataTable
|
|
117
|
-
data={sampleData}
|
|
118
|
-
columns={sampleColumns}
|
|
119
|
-
loading={true}
|
|
120
|
-
/>
|
|
121
|
-
);
|
|
111
|
+
render(<DataTable data={sampleData} columns={sampleColumns} loading={true} />);
|
|
122
112
|
|
|
123
113
|
expect(screen.getByTestId('spinner')).toBeInTheDocument();
|
|
124
114
|
});
|
|
@@ -126,13 +116,7 @@ describe('DataTable Component', () => {
|
|
|
126
116
|
|
|
127
117
|
describe('Sorting', () => {
|
|
128
118
|
it('renders sortable columns when sortable is enabled', () => {
|
|
129
|
-
render(
|
|
130
|
-
<DataTable
|
|
131
|
-
data={sampleData}
|
|
132
|
-
columns={sampleColumns}
|
|
133
|
-
sortable={true}
|
|
134
|
-
/>
|
|
135
|
-
);
|
|
119
|
+
render(<DataTable data={sampleData} columns={sampleColumns} sortable={true} />);
|
|
136
120
|
|
|
137
121
|
const nameHeader = screen.getByText('Name').closest('th');
|
|
138
122
|
expect(nameHeader).toHaveClass('c-data-table__header-cell--sortable');
|
|
@@ -141,12 +125,7 @@ describe('DataTable Component', () => {
|
|
|
141
125
|
it('calls onSort when column header is clicked', () => {
|
|
142
126
|
const handleSort = vi.fn();
|
|
143
127
|
render(
|
|
144
|
-
<DataTable
|
|
145
|
-
data={sampleData}
|
|
146
|
-
columns={sampleColumns}
|
|
147
|
-
sortable={true}
|
|
148
|
-
onSort={handleSort}
|
|
149
|
-
/>
|
|
128
|
+
<DataTable data={sampleData} columns={sampleColumns} sortable={true} onSort={handleSort} />
|
|
150
129
|
);
|
|
151
130
|
|
|
152
131
|
const nameHeader = screen.getByText('Name').closest('th');
|
|
@@ -163,26 +142,14 @@ describe('DataTable Component', () => {
|
|
|
163
142
|
|
|
164
143
|
describe('Filtering', () => {
|
|
165
144
|
it('renders search input when filterable is enabled', () => {
|
|
166
|
-
render(
|
|
167
|
-
<DataTable
|
|
168
|
-
data={sampleData}
|
|
169
|
-
columns={sampleColumns}
|
|
170
|
-
filterable={true}
|
|
171
|
-
/>
|
|
172
|
-
);
|
|
145
|
+
render(<DataTable data={sampleData} columns={sampleColumns} filterable={true} />);
|
|
173
146
|
|
|
174
147
|
const searchInput = screen.getByPlaceholderText('Search...');
|
|
175
148
|
expect(searchInput).toBeInTheDocument();
|
|
176
149
|
});
|
|
177
150
|
|
|
178
151
|
it('filters data when search query is entered', async () => {
|
|
179
|
-
render(
|
|
180
|
-
<DataTable
|
|
181
|
-
data={sampleData}
|
|
182
|
-
columns={sampleColumns}
|
|
183
|
-
filterable={true}
|
|
184
|
-
/>
|
|
185
|
-
);
|
|
152
|
+
render(<DataTable data={sampleData} columns={sampleColumns} filterable={true} />);
|
|
186
153
|
|
|
187
154
|
const searchInput = screen.getByPlaceholderText('Search...');
|
|
188
155
|
fireEvent.change(searchInput, { target: { value: 'John' } });
|
|
@@ -194,13 +161,7 @@ describe('DataTable Component', () => {
|
|
|
194
161
|
});
|
|
195
162
|
|
|
196
163
|
it('renders column filters when columnFilters is enabled', () => {
|
|
197
|
-
render(
|
|
198
|
-
<DataTable
|
|
199
|
-
data={sampleData}
|
|
200
|
-
columns={sampleColumns}
|
|
201
|
-
columnFilters={true}
|
|
202
|
-
/>
|
|
203
|
-
);
|
|
164
|
+
render(<DataTable data={sampleData} columns={sampleColumns} columnFilters={true} />);
|
|
204
165
|
|
|
205
166
|
const columnFilters = screen.getAllByPlaceholderText('Filter...');
|
|
206
167
|
expect(columnFilters.length).toBeGreaterThan(0);
|
|
@@ -209,26 +170,13 @@ describe('DataTable Component', () => {
|
|
|
209
170
|
|
|
210
171
|
describe('Pagination', () => {
|
|
211
172
|
it('renders pagination when paginated is enabled', () => {
|
|
212
|
-
render(
|
|
213
|
-
<DataTable
|
|
214
|
-
data={sampleData}
|
|
215
|
-
columns={sampleColumns}
|
|
216
|
-
paginated={true}
|
|
217
|
-
pageSize={2}
|
|
218
|
-
/>
|
|
219
|
-
);
|
|
173
|
+
render(<DataTable data={sampleData} columns={sampleColumns} paginated={true} pageSize={2} />);
|
|
220
174
|
|
|
221
175
|
expect(screen.getByTestId('pagination')).toBeInTheDocument();
|
|
222
176
|
});
|
|
223
177
|
|
|
224
178
|
it('does not render pagination when paginated is false', () => {
|
|
225
|
-
render(
|
|
226
|
-
<DataTable
|
|
227
|
-
data={sampleData}
|
|
228
|
-
columns={sampleColumns}
|
|
229
|
-
paginated={false}
|
|
230
|
-
/>
|
|
231
|
-
);
|
|
179
|
+
render(<DataTable data={sampleData} columns={sampleColumns} paginated={false} />);
|
|
232
180
|
|
|
233
181
|
expect(screen.queryByTestId('pagination')).not.toBeInTheDocument();
|
|
234
182
|
});
|
|
@@ -236,26 +184,14 @@ describe('DataTable Component', () => {
|
|
|
236
184
|
|
|
237
185
|
describe('Row Selection', () => {
|
|
238
186
|
it('renders selection checkboxes when selectionMode is multiple', () => {
|
|
239
|
-
render(
|
|
240
|
-
<DataTable
|
|
241
|
-
data={sampleData}
|
|
242
|
-
columns={sampleColumns}
|
|
243
|
-
selectionMode="multiple"
|
|
244
|
-
/>
|
|
245
|
-
);
|
|
187
|
+
render(<DataTable data={sampleData} columns={sampleColumns} selectionMode="multiple" />);
|
|
246
188
|
|
|
247
189
|
const checkboxes = screen.getAllByTestId('checkbox');
|
|
248
190
|
expect(checkboxes.length).toBeGreaterThan(0);
|
|
249
191
|
});
|
|
250
192
|
|
|
251
193
|
it('renders select all checkbox in header for multiple selection', () => {
|
|
252
|
-
render(
|
|
253
|
-
<DataTable
|
|
254
|
-
data={sampleData}
|
|
255
|
-
columns={sampleColumns}
|
|
256
|
-
selectionMode="multiple"
|
|
257
|
-
/>
|
|
258
|
-
);
|
|
194
|
+
render(<DataTable data={sampleData} columns={sampleColumns} selectionMode="multiple" />);
|
|
259
195
|
|
|
260
196
|
const checkboxes = screen.getAllByTestId('checkbox');
|
|
261
197
|
// Should have at least one checkbox (select all)
|
|
@@ -285,13 +221,7 @@ describe('DataTable Component', () => {
|
|
|
285
221
|
describe('Row Click', () => {
|
|
286
222
|
it('calls onRowClick when row is clicked', () => {
|
|
287
223
|
const handleRowClick = vi.fn();
|
|
288
|
-
render(
|
|
289
|
-
<DataTable
|
|
290
|
-
data={sampleData}
|
|
291
|
-
columns={sampleColumns}
|
|
292
|
-
onRowClick={handleRowClick}
|
|
293
|
-
/>
|
|
294
|
-
);
|
|
224
|
+
render(<DataTable data={sampleData} columns={sampleColumns} onRowClick={handleRowClick} />);
|
|
295
225
|
|
|
296
226
|
const row = screen.getByText('John Doe').closest('tr');
|
|
297
227
|
fireEvent.click(row!);
|
|
@@ -302,26 +232,14 @@ describe('DataTable Component', () => {
|
|
|
302
232
|
|
|
303
233
|
describe('Export Functionality', () => {
|
|
304
234
|
it('renders export dropdown when exportable is enabled', () => {
|
|
305
|
-
render(
|
|
306
|
-
<DataTable
|
|
307
|
-
data={sampleData}
|
|
308
|
-
columns={sampleColumns}
|
|
309
|
-
exportable={true}
|
|
310
|
-
/>
|
|
311
|
-
);
|
|
235
|
+
render(<DataTable data={sampleData} columns={sampleColumns} exportable={true} />);
|
|
312
236
|
|
|
313
237
|
const exportButton = screen.getByText('Export');
|
|
314
238
|
expect(exportButton).toBeInTheDocument();
|
|
315
239
|
});
|
|
316
240
|
|
|
317
241
|
it('does not render export when exportable is false', () => {
|
|
318
|
-
render(
|
|
319
|
-
<DataTable
|
|
320
|
-
data={sampleData}
|
|
321
|
-
columns={sampleColumns}
|
|
322
|
-
exportable={false}
|
|
323
|
-
/>
|
|
324
|
-
);
|
|
242
|
+
render(<DataTable data={sampleData} columns={sampleColumns} exportable={false} />);
|
|
325
243
|
|
|
326
244
|
expect(screen.queryByText('Export')).not.toBeInTheDocument();
|
|
327
245
|
});
|
|
@@ -329,13 +247,7 @@ describe('DataTable Component', () => {
|
|
|
329
247
|
|
|
330
248
|
describe('Column Visibility', () => {
|
|
331
249
|
it('renders column visibility dropdown when showColumnVisibility is enabled', () => {
|
|
332
|
-
render(
|
|
333
|
-
<DataTable
|
|
334
|
-
data={sampleData}
|
|
335
|
-
columns={sampleColumns}
|
|
336
|
-
showColumnVisibility={true}
|
|
337
|
-
/>
|
|
338
|
-
);
|
|
250
|
+
render(<DataTable data={sampleData} columns={sampleColumns} showColumnVisibility={true} />);
|
|
339
251
|
|
|
340
252
|
const columnsButton = screen.getByText('Columns');
|
|
341
253
|
expect(columnsButton).toBeInTheDocument();
|
|
@@ -345,11 +257,7 @@ describe('DataTable Component', () => {
|
|
|
345
257
|
describe('Styling Variants', () => {
|
|
346
258
|
it('applies striped class when striped is enabled', () => {
|
|
347
259
|
const { container } = render(
|
|
348
|
-
<DataTable
|
|
349
|
-
data={sampleData}
|
|
350
|
-
columns={sampleColumns}
|
|
351
|
-
striped={true}
|
|
352
|
-
/>
|
|
260
|
+
<DataTable data={sampleData} columns={sampleColumns} striped={true} />
|
|
353
261
|
);
|
|
354
262
|
|
|
355
263
|
const table = container.querySelector('.c-data-table');
|
|
@@ -358,11 +266,7 @@ describe('DataTable Component', () => {
|
|
|
358
266
|
|
|
359
267
|
it('applies bordered class when bordered is enabled', () => {
|
|
360
268
|
const { container } = render(
|
|
361
|
-
<DataTable
|
|
362
|
-
data={sampleData}
|
|
363
|
-
columns={sampleColumns}
|
|
364
|
-
bordered={true}
|
|
365
|
-
/>
|
|
269
|
+
<DataTable data={sampleData} columns={sampleColumns} bordered={true} />
|
|
366
270
|
);
|
|
367
271
|
|
|
368
272
|
const table = container.querySelector('.c-data-table');
|
|
@@ -371,11 +275,7 @@ describe('DataTable Component', () => {
|
|
|
371
275
|
|
|
372
276
|
it('applies dense class when dense is enabled', () => {
|
|
373
277
|
const { container } = render(
|
|
374
|
-
<DataTable
|
|
375
|
-
data={sampleData}
|
|
376
|
-
columns={sampleColumns}
|
|
377
|
-
dense={true}
|
|
378
|
-
/>
|
|
278
|
+
<DataTable data={sampleData} columns={sampleColumns} dense={true} />
|
|
379
279
|
);
|
|
380
280
|
|
|
381
281
|
const table = container.querySelector('.c-data-table');
|
|
@@ -384,11 +284,7 @@ describe('DataTable Component', () => {
|
|
|
384
284
|
|
|
385
285
|
it('applies sticky header class when stickyHeader is enabled', () => {
|
|
386
286
|
const { container } = render(
|
|
387
|
-
<DataTable
|
|
388
|
-
data={sampleData}
|
|
389
|
-
columns={sampleColumns}
|
|
390
|
-
stickyHeader={true}
|
|
391
|
-
/>
|
|
287
|
+
<DataTable data={sampleData} columns={sampleColumns} stickyHeader={true} />
|
|
392
288
|
);
|
|
393
289
|
|
|
394
290
|
const table = container.querySelector('.c-data-table');
|
|
@@ -402,16 +298,11 @@ describe('DataTable Component', () => {
|
|
|
402
298
|
{
|
|
403
299
|
key: 'name',
|
|
404
300
|
title: 'Name',
|
|
405
|
-
render:
|
|
301
|
+
render: value => <strong>{value}</strong>,
|
|
406
302
|
},
|
|
407
303
|
];
|
|
408
304
|
|
|
409
|
-
render(
|
|
410
|
-
<DataTable
|
|
411
|
-
data={[{ name: 'John Doe' }]}
|
|
412
|
-
columns={columnsWithRender}
|
|
413
|
-
/>
|
|
414
|
-
);
|
|
305
|
+
render(<DataTable data={[{ name: 'John Doe' }]} columns={columnsWithRender} />);
|
|
415
306
|
|
|
416
307
|
const strongElement = screen.getByText('John Doe').closest('strong');
|
|
417
308
|
expect(strongElement).toBeInTheDocument();
|
|
@@ -420,13 +311,7 @@ describe('DataTable Component', () => {
|
|
|
420
311
|
|
|
421
312
|
describe('Accessibility', () => {
|
|
422
313
|
it('applies correct ARIA attributes for sortable columns', () => {
|
|
423
|
-
render(
|
|
424
|
-
<DataTable
|
|
425
|
-
data={sampleData}
|
|
426
|
-
columns={sampleColumns}
|
|
427
|
-
sortable={true}
|
|
428
|
-
/>
|
|
429
|
-
);
|
|
314
|
+
render(<DataTable data={sampleData} columns={sampleColumns} sortable={true} />);
|
|
430
315
|
|
|
431
316
|
const nameHeader = screen.getByText('Name').closest('th');
|
|
432
317
|
expect(nameHeader).toHaveAttribute('aria-sort');
|
|
@@ -434,17 +319,10 @@ describe('DataTable Component', () => {
|
|
|
434
319
|
|
|
435
320
|
it('applies role="button" to clickable rows', () => {
|
|
436
321
|
const handleRowClick = vi.fn();
|
|
437
|
-
render(
|
|
438
|
-
<DataTable
|
|
439
|
-
data={sampleData}
|
|
440
|
-
columns={sampleColumns}
|
|
441
|
-
onRowClick={handleRowClick}
|
|
442
|
-
/>
|
|
443
|
-
);
|
|
322
|
+
render(<DataTable data={sampleData} columns={sampleColumns} onRowClick={handleRowClick} />);
|
|
444
323
|
|
|
445
324
|
const row = screen.getByText('John Doe').closest('tr');
|
|
446
325
|
expect(row).toHaveAttribute('role', 'button');
|
|
447
326
|
});
|
|
448
327
|
});
|
|
449
328
|
});
|
|
450
|
-
|