@agregio-solutions/design-system 1.102.6 → 2.1.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/dist/design-system.cjs +542 -623
- package/dist/design-system.js +7777 -27698
- package/dist/packages/components/Button/components/HoldProgress/HoldProgress.d.ts +1 -1
- package/dist/packages/components/Button/components/IconLeftElement/IconLeftElement.d.ts +1 -1
- package/dist/packages/components/Button/components/IconRightElement/IconRightElement.d.ts +1 -1
- package/dist/packages/components/Button/doc.md +33 -2
- package/dist/packages/components/ChartLegend/ChartLegend.d.ts +1 -1
- package/dist/packages/components/Combobox/Combobox.d.ts +40 -83
- package/dist/packages/components/Combobox/doc.md +362 -11
- package/dist/packages/components/DataTable/DataTable.d.ts +15 -6
- package/dist/packages/components/DataTable/DataTableRow/DataTableRow.d.ts +1 -6
- package/dist/packages/components/DataTable/doc.md +495 -389
- package/dist/packages/components/DatePicker/DatePicker.d.ts +2 -2
- package/dist/packages/components/DatePicker/doc.md +0 -1
- package/dist/packages/components/DateRangePicker/DateRangePicker.d.ts +2 -2
- package/dist/packages/components/DateRangePicker/doc.md +0 -1
- package/dist/packages/components/Drawer/Drawer.d.ts +7 -24
- package/dist/packages/components/Drawer/doc.md +136 -106
- package/dist/packages/components/Dropdown/Dropdown.d.ts +1 -7
- package/dist/packages/components/Dropdown/doc.md +2 -29
- package/dist/packages/components/FileUpload/components/FileDetails/FileDetails.d.ts +1 -1
- package/dist/packages/components/FileUpload/components/FileDetails/FileDetails.styled.d.ts +1 -1
- package/dist/packages/components/FileUpload/doc.md +0 -2
- package/dist/packages/components/Filter/Filter.d.ts +24 -10
- package/dist/packages/components/Filter/doc.md +31 -1
- package/dist/packages/components/Icon/components/access_time.d.ts +1 -1
- package/dist/packages/components/Icon/components/add.d.ts +1 -1
- package/dist/packages/components/Icon/components/add_box.d.ts +1 -1
- package/dist/packages/components/Icon/components/arrow_back.d.ts +1 -1
- package/dist/packages/components/Icon/components/arrow_downward.d.ts +1 -1
- package/dist/packages/components/Icon/components/arrow_enter.d.ts +1 -1
- package/dist/packages/components/Icon/components/arrow_forward.d.ts +1 -1
- package/dist/packages/components/Icon/components/arrow_upward.d.ts +1 -1
- package/dist/packages/components/Icon/components/back_time.d.ts +1 -1
- package/dist/packages/components/Icon/components/bar_chart.d.ts +1 -1
- package/dist/packages/components/Icon/components/bar_chart_2.d.ts +1 -1
- package/dist/packages/components/Icon/components/battery.d.ts +1 -1
- package/dist/packages/components/Icon/components/battery_alert.d.ts +1 -1
- package/dist/packages/components/Icon/components/battery_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/battery_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/battery_half.d.ts +1 -1
- package/dist/packages/components/Icon/components/bolt.d.ts +1 -1
- package/dist/packages/components/Icon/components/book.d.ts +1 -1
- package/dist/packages/components/Icon/components/business.d.ts +1 -1
- package/dist/packages/components/Icon/components/calculator.d.ts +1 -1
- package/dist/packages/components/Icon/components/calendar.d.ts +1 -1
- package/dist/packages/components/Icon/components/calendar_today.d.ts +1 -1
- package/dist/packages/components/Icon/components/calibration.d.ts +1 -1
- package/dist/packages/components/Icon/components/cancel.d.ts +1 -1
- package/dist/packages/components/Icon/components/caret.d.ts +1 -1
- package/dist/packages/components/Icon/components/change_circle.d.ts +1 -1
- package/dist/packages/components/Icon/components/change_ok.d.ts +1 -1
- package/dist/packages/components/Icon/components/chart_curves.d.ts +1 -1
- package/dist/packages/components/Icon/components/chart_curves_rounded.d.ts +1 -1
- package/dist/packages/components/Icon/components/chart_plus.d.ts +1 -1
- package/dist/packages/components/Icon/components/chart_simple.d.ts +1 -1
- package/dist/packages/components/Icon/components/chart_up.d.ts +1 -1
- package/dist/packages/components/Icon/components/check.d.ts +1 -1
- package/dist/packages/components/Icon/components/check_circle_outline.d.ts +1 -1
- package/dist/packages/components/Icon/components/chevron_left.d.ts +1 -1
- package/dist/packages/components/Icon/components/chevron_right.d.ts +1 -1
- package/dist/packages/components/Icon/components/clear.d.ts +1 -1
- package/dist/packages/components/Icon/components/close.d.ts +1 -1
- package/dist/packages/components/Icon/components/cloud.d.ts +1 -1
- package/dist/packages/components/Icon/components/cloud_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/collapse_menu.d.ts +1 -1
- package/dist/packages/components/Icon/components/content_copy.d.ts +1 -1
- package/dist/packages/components/Icon/components/cycle.d.ts +1 -1
- package/dist/packages/components/Icon/components/delete_outline.d.ts +1 -1
- package/dist/packages/components/Icon/components/dice.d.ts +1 -1
- package/dist/packages/components/Icon/components/disconnect.d.ts +1 -1
- package/dist/packages/components/Icon/components/download.d.ts +1 -1
- package/dist/packages/components/Icon/components/drag_indicator.d.ts +1 -1
- package/dist/packages/components/Icon/components/driver.d.ts +1 -1
- package/dist/packages/components/Icon/components/edit.d.ts +1 -1
- package/dist/packages/components/Icon/components/error_outline.d.ts +1 -1
- package/dist/packages/components/Icon/components/euro.d.ts +1 -1
- package/dist/packages/components/Icon/components/exit.d.ts +1 -1
- package/dist/packages/components/Icon/components/exit_to_app.d.ts +1 -1
- package/dist/packages/components/Icon/components/expand_less.d.ts +1 -1
- package/dist/packages/components/Icon/components/expand_more.d.ts +1 -1
- package/dist/packages/components/Icon/components/eye.d.ts +1 -1
- package/dist/packages/components/Icon/components/eye_off.d.ts +1 -1
- package/dist/packages/components/Icon/components/fiber_new.d.ts +1 -1
- package/dist/packages/components/Icon/components/file_download.d.ts +1 -1
- package/dist/packages/components/Icon/components/file_export.d.ts +1 -1
- package/dist/packages/components/Icon/components/file_plus.d.ts +1 -1
- package/dist/packages/components/Icon/components/filter_alt.d.ts +1 -1
- package/dist/packages/components/Icon/components/filter_list.d.ts +1 -1
- package/dist/packages/components/Icon/components/first_page.d.ts +1 -1
- package/dist/packages/components/Icon/components/flame.d.ts +1 -1
- package/dist/packages/components/Icon/components/flex.d.ts +1 -1
- package/dist/packages/components/Icon/components/folder_open.d.ts +1 -1
- package/dist/packages/components/Icon/components/gaz.d.ts +1 -1
- package/dist/packages/components/Icon/components/grid_view.d.ts +1 -1
- package/dist/packages/components/Icon/components/hand.d.ts +1 -1
- package/dist/packages/components/Icon/components/help_outline.d.ts +1 -1
- package/dist/packages/components/Icon/components/home.d.ts +1 -1
- package/dist/packages/components/Icon/components/hydraulic.d.ts +1 -1
- package/dist/packages/components/Icon/components/id.d.ts +1 -1
- package/dist/packages/components/Icon/components/industry.d.ts +1 -1
- package/dist/packages/components/Icon/components/insert_emoticon.d.ts +1 -1
- package/dist/packages/components/Icon/components/invoice.d.ts +1 -1
- package/dist/packages/components/Icon/components/invoice_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/joystick.d.ts +1 -1
- package/dist/packages/components/Icon/components/language.d.ts +1 -1
- package/dist/packages/components/Icon/components/laptop.d.ts +1 -1
- package/dist/packages/components/Icon/components/last_page.d.ts +1 -1
- package/dist/packages/components/Icon/components/leaf.d.ts +1 -1
- package/dist/packages/components/Icon/components/lines_ok.d.ts +1 -1
- package/dist/packages/components/Icon/components/lines_plus.d.ts +1 -1
- package/dist/packages/components/Icon/components/link.d.ts +1 -1
- package/dist/packages/components/Icon/components/list.d.ts +1 -1
- package/dist/packages/components/Icon/components/location.d.ts +1 -1
- package/dist/packages/components/Icon/components/location_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/location_searching.d.ts +1 -1
- package/dist/packages/components/Icon/components/logout.d.ts +1 -1
- package/dist/packages/components/Icon/components/logs.d.ts +1 -1
- package/dist/packages/components/Icon/components/magic_wand.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_off.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_ok.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_open.d.ts +1 -1
- package/dist/packages/components/Icon/components/mail_open_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/menu.d.ts +1 -1
- package/dist/packages/components/Icon/components/minimize.d.ts +1 -1
- package/dist/packages/components/Icon/components/modbus.d.ts +1 -1
- package/dist/packages/components/Icon/components/money_pig.d.ts +1 -1
- package/dist/packages/components/Icon/components/money_pig_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/monitor_heart.d.ts +1 -1
- package/dist/packages/components/Icon/components/monitoring.d.ts +1 -1
- package/dist/packages/components/Icon/components/moon.d.ts +1 -1
- package/dist/packages/components/Icon/components/more_horiz.d.ts +1 -1
- package/dist/packages/components/Icon/components/more_vert.d.ts +1 -1
- package/dist/packages/components/Icon/components/moving.d.ts +1 -1
- package/dist/packages/components/Icon/components/notifications_active.d.ts +1 -1
- package/dist/packages/components/Icon/components/notifications_none.d.ts +1 -1
- package/dist/packages/components/Icon/components/notifications_off.d.ts +1 -1
- package/dist/packages/components/Icon/components/one_single.d.ts +1 -1
- package/dist/packages/components/Icon/components/pause.d.ts +1 -1
- package/dist/packages/components/Icon/components/pause_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/payments.d.ts +1 -1
- package/dist/packages/components/Icon/components/pdf.d.ts +1 -1
- package/dist/packages/components/Icon/components/phone_1_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/phone_1_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/phone_2_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/phone_2_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/play.d.ts +1 -1
- package/dist/packages/components/Icon/components/play_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/play_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/power_off.d.ts +1 -1
- package/dist/packages/components/Icon/components/profile.d.ts +1 -1
- package/dist/packages/components/Icon/components/profile_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/progress.d.ts +1 -1
- package/dist/packages/components/Icon/components/question.d.ts +1 -1
- package/dist/packages/components/Icon/components/rain.d.ts +1 -1
- package/dist/packages/components/Icon/components/receipt_long.d.ts +1 -1
- package/dist/packages/components/Icon/components/record.d.ts +1 -1
- package/dist/packages/components/Icon/components/record_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/refresh.d.ts +1 -1
- package/dist/packages/components/Icon/components/remove.d.ts +1 -1
- package/dist/packages/components/Icon/components/remove_red_eye.d.ts +1 -1
- package/dist/packages/components/Icon/components/rename.d.ts +1 -1
- package/dist/packages/components/Icon/components/return.d.ts +1 -1
- package/dist/packages/components/Icon/components/save.d.ts +1 -1
- package/dist/packages/components/Icon/components/scan.d.ts +1 -1
- package/dist/packages/components/Icon/components/science.d.ts +1 -1
- package/dist/packages/components/Icon/components/science_2.d.ts +1 -1
- package/dist/packages/components/Icon/components/search.d.ts +1 -1
- package/dist/packages/components/Icon/components/sell.d.ts +1 -1
- package/dist/packages/components/Icon/components/sell_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/send.d.ts +1 -1
- package/dist/packages/components/Icon/components/settings.d.ts +1 -1
- package/dist/packages/components/Icon/components/sms_empty.d.ts +1 -1
- package/dist/packages/components/Icon/components/sms_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/square_plus.d.ts +1 -1
- package/dist/packages/components/Icon/components/ssid_chart.d.ts +1 -1
- package/dist/packages/components/Icon/components/stack_batch.d.ts +1 -1
- package/dist/packages/components/Icon/components/stacked_line_chart.d.ts +1 -1
- package/dist/packages/components/Icon/components/star.d.ts +1 -1
- package/dist/packages/components/Icon/components/star_outline.d.ts +1 -1
- package/dist/packages/components/Icon/components/storm.d.ts +1 -1
- package/dist/packages/components/Icon/components/sun.d.ts +1 -1
- package/dist/packages/components/Icon/components/sun_2.d.ts +1 -1
- package/dist/packages/components/Icon/components/sun_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/swap_horiz.d.ts +1 -1
- package/dist/packages/components/Icon/components/tag.d.ts +1 -1
- package/dist/packages/components/Icon/components/tag_add.d.ts +1 -1
- package/dist/packages/components/Icon/components/tag_ok.d.ts +1 -1
- package/dist/packages/components/Icon/components/tag_remove.d.ts +1 -1
- package/dist/packages/components/Icon/components/team.d.ts +1 -1
- package/dist/packages/components/Icon/components/text_snippet.d.ts +1 -1
- package/dist/packages/components/Icon/components/ticket.d.ts +1 -1
- package/dist/packages/components/Icon/components/ticket_full.d.ts +1 -1
- package/dist/packages/components/Icon/components/tools.d.ts +1 -1
- package/dist/packages/components/Icon/components/tree_item.d.ts +1 -1
- package/dist/packages/components/Icon/components/undo.d.ts +1 -1
- package/dist/packages/components/Icon/components/update.d.ts +1 -1
- package/dist/packages/components/Icon/components/update_circle.d.ts +1 -1
- package/dist/packages/components/Icon/components/upload.d.ts +1 -1
- package/dist/packages/components/Icon/components/wallet.d.ts +1 -1
- package/dist/packages/components/Icon/components/warehouse.d.ts +1 -1
- package/dist/packages/components/Icon/components/warning_amber.d.ts +1 -1
- package/dist/packages/components/Icon/components/warning_badge.d.ts +1 -1
- package/dist/packages/components/Icon/components/warning_octogone.d.ts +1 -1
- package/dist/packages/components/Icon/components/warning_shield.d.ts +1 -1
- package/dist/packages/components/Icon/components/wifi.d.ts +1 -1
- package/dist/packages/components/Icon/components/wifi_level.d.ts +1 -1
- package/dist/packages/components/Icon/components/wifi_rounded.d.ts +1 -1
- package/dist/packages/components/Icon/components/wifi_rounded_alert.d.ts +1 -1
- package/dist/packages/components/Icon/components/wifi_settings.d.ts +1 -1
- package/dist/packages/components/Icon/components/wind_turbine.d.ts +1 -1
- package/dist/packages/components/LinearProgressBar/LinearProgressBar.d.ts +1 -1
- package/dist/packages/components/List/components/ListItem/ListItem.d.ts +1 -1
- package/dist/packages/components/Loader/Loader.d.ts +1 -1
- package/dist/packages/components/MenuItem/MenuItem.d.ts +1 -1
- package/dist/packages/components/Modal/doc.md +1 -2
- package/dist/packages/components/Navigation/Navigation.d.ts +2 -1
- package/dist/packages/components/Navigation/components/AgregioSolutionsLogo.d.ts +1 -1
- package/dist/packages/components/Navigation/components/ConnectionManagementLogo.d.ts +1 -1
- package/dist/packages/components/Navigation/components/IrisLogo.d.ts +1 -1
- package/dist/packages/components/Navigation/components/OBILogo.d.ts +1 -1
- package/dist/packages/components/Navigation/components/VPPLogo.d.ts +1 -1
- package/dist/packages/components/Navigation/doc.md +14 -9
- package/dist/packages/components/NavigationItem/NavigationItem.d.ts +4 -0
- package/dist/packages/components/NavigationItem/doc.md +15 -3
- package/dist/packages/components/Notifications/components/EmptyNotifications/EmptyNotifications.d.ts +1 -1
- package/dist/packages/components/PageLayout/PageLayout.d.ts +1 -1
- package/dist/packages/components/PageLayout/doc.md +190 -149
- package/dist/packages/components/RouterProvider/RouterProvider.d.ts +1 -1
- package/dist/packages/components/Select/Select.d.ts +1 -1
- package/dist/packages/components/Select/doc.md +0 -9
- package/dist/packages/components/SelectItem/SelectItem.d.ts +2 -1
- package/dist/packages/components/Slider/Slider.d.ts +3 -9
- package/dist/packages/components/Slider/doc.md +1 -4
- package/dist/packages/components/Tabs/Tab/Tab.d.ts +0 -5
- package/dist/packages/components/TextInput/TextInput.d.ts +2 -2
- package/dist/packages/components/TextInput/doc.md +0 -22
- package/dist/packages/components/TimeField/TimeField.d.ts +2 -2
- package/dist/packages/components/TimeField/doc.md +0 -1
- package/dist/packages/components/TimePicker/TimePicker.d.ts +2 -2
- package/dist/packages/components/Timeline/Timeline.d.ts +1 -1
- package/dist/packages/components/Timeline/Timeline.styled.d.ts +15 -20
- package/dist/packages/components/Timeline/components/BlockLineContainer/BlockLineContainer.d.ts +1 -1
- package/dist/packages/components/Timeline/components/BlockLineContainer/BlockLineContainer.styled.d.ts +23 -27
- package/dist/packages/components/Timeline/components/BlockLineContainer/components/ExpandButton/ExpandButton.d.ts +1 -1
- package/dist/packages/components/Timeline/components/BlockLineContainer/components/NameBlock/NameBlock.d.ts +1 -1
- package/dist/packages/components/Timeline/components/GroupLineContainer/GroupLineContainer.d.ts +1 -1
- package/dist/packages/components/Timeline/components/GroupLineContainer/GroupLineContainer.styled.d.ts +3 -4
- package/dist/packages/components/Timeline/components/TimelineRange/TimelineRange.d.ts +1 -1
- package/dist/packages/components/Timeline/components/TimelineRange/TimelineRange.styled.d.ts +12 -16
- package/dist/packages/components/Timeline/doc.md +38 -1
- package/dist/packages/components/Toaster/Toaster.d.ts +1 -1
- package/dist/packages/components/YearMonthPicker/YearMonthPicker.d.ts +2 -2
- package/dist/packages/components/YearMonthPicker/doc.md +0 -1
- package/dist/packages/ds-design-tokens/index.d.ts +1 -2
- package/dist/packages/ds-design-tokens/src/tokens.style.d.ts +138 -135
- package/dist/packages/index.d.ts +5 -6
- package/dist/packages/internal-components/FormGroupWrapper/FormGroupWrapper.d.ts +0 -12
- package/dist/packages/internal-components/Logo/Logo.d.ts +1 -1
- package/dist/public_docs/index.md +4 -1
- package/dist/public_docs/migration-guide-v2.md +444 -0
- package/package.json +16 -18
- package/dist/packages/ds-design-tokens/src/fontSize.style.d.ts +0 -60
- package/dist/packages/mui/mui-theme.d.ts +0 -3
|
@@ -23,7 +23,6 @@ const meta: Meta<typeof Combobox> = {
|
|
|
23
23
|
argTypes: {
|
|
24
24
|
helperText: { control: { type: "text" } },
|
|
25
25
|
label: { control: { type: "text" } },
|
|
26
|
-
description: { control: { type: "text" } },
|
|
27
26
|
errorHelperText: { control: { type: "text" } },
|
|
28
27
|
successHelperText: { control: { type: "text" } },
|
|
29
28
|
items: { control: false },
|
|
@@ -60,7 +59,6 @@ export const Playground: StoryObj<typeof Combobox> = {
|
|
|
60
59
|
labelIconRight: "help_outline",
|
|
61
60
|
labelIconRightTooltip: "Additional information",
|
|
62
61
|
required: true,
|
|
63
|
-
description: "[Insert description]",
|
|
64
62
|
helperText: "[Insert helper]",
|
|
65
63
|
helperTextIcon: "help_outline",
|
|
66
64
|
fullWidth: true,
|
|
@@ -72,7 +70,6 @@ export const Playground: StoryObj<typeof Combobox> = {
|
|
|
72
70
|
const canvas = within(canvasElement);
|
|
73
71
|
await canvas.findByTitle("Required");
|
|
74
72
|
await canvas.findByText("[Insert label]");
|
|
75
|
-
await canvas.findByText("[Insert description]");
|
|
76
73
|
await canvas.findByText("[Insert helper]");
|
|
77
74
|
},
|
|
78
75
|
};
|
|
@@ -142,7 +139,6 @@ export const WithWarning: StoryObj<typeof Combobox> = {
|
|
|
142
139
|
export const Horizontal: StoryObj<typeof Combobox> = {
|
|
143
140
|
args: {
|
|
144
141
|
...Playground.args,
|
|
145
|
-
description: undefined,
|
|
146
142
|
orientation: "horizontal",
|
|
147
143
|
wrapperProps: undefined,
|
|
148
144
|
fullWidth: false,
|
|
@@ -185,12 +181,13 @@ Here are some more advanced stories with more testing coverage and examples that
|
|
|
185
181
|
import { Meta, StoryObj } from "@storybook/react-vite";
|
|
186
182
|
|
|
187
183
|
import Badge from "@packages/components/Badge/Badge";
|
|
184
|
+
import ErrorBoundary from "@packages/internal-components/ErrorBoundary/ErrorBoundary";
|
|
188
185
|
import Combobox from "../Combobox";
|
|
189
186
|
import { Playground } from "../Combobox.stories";
|
|
190
187
|
import { userEvent, within, screen, expect } from "storybook/test";
|
|
191
188
|
import { expectNotPresent } from "@internal/test-utils-storybook/test-utils-storybook";
|
|
192
189
|
import * as ComboboxStories from "../Combobox.stories";
|
|
193
|
-
import { useEffect, useState } from "react";
|
|
190
|
+
import { ComponentProps, useEffect, useState } from "react";
|
|
194
191
|
import { useController, useForm } from "react-hook-form";
|
|
195
192
|
|
|
196
193
|
const meta: Meta<typeof Combobox> = {
|
|
@@ -543,6 +540,298 @@ export const ExampleWithCustomFiltering: StoryObj<typeof Combobox> = {
|
|
|
543
540
|
};
|
|
544
541
|
|
|
545
542
|
export const MultipleSelectionExample: StoryObj<typeof Combobox> = {
|
|
543
|
+
parameters: {
|
|
544
|
+
...meta.parameters,
|
|
545
|
+
layout: "padded",
|
|
546
|
+
},
|
|
547
|
+
render: () => {
|
|
548
|
+
const data = new Array(10).fill(0).map((_, index) => ({
|
|
549
|
+
id: `${index + 1}`,
|
|
550
|
+
name: `Perimeter ${index + 1}`,
|
|
551
|
+
}));
|
|
552
|
+
|
|
553
|
+
const ParentComponent = () => {
|
|
554
|
+
// List of the selected perimeters ids
|
|
555
|
+
const [selectedPerimetersIds, setSelectedPerimetersIds] = useState<
|
|
556
|
+
Array<string>
|
|
557
|
+
>([]);
|
|
558
|
+
|
|
559
|
+
// List of the selected perimeters (derived state)
|
|
560
|
+
const selectedPerimeters = data.filter((perimeter) =>
|
|
561
|
+
selectedPerimetersIds.includes(perimeter.id),
|
|
562
|
+
);
|
|
563
|
+
|
|
564
|
+
return (
|
|
565
|
+
<div style={{ display: "flex", gap: "var(--spacing-xs)" }}>
|
|
566
|
+
<Combobox
|
|
567
|
+
id="perimeters-combobox"
|
|
568
|
+
label="Select perimeters"
|
|
569
|
+
selectionMode="multiple"
|
|
570
|
+
selectedKeys={selectedPerimetersIds}
|
|
571
|
+
onSelectionChange={setSelectedPerimetersIds}
|
|
572
|
+
defaultItems={data.map((perimeter) => ({
|
|
573
|
+
text: perimeter.name,
|
|
574
|
+
id: perimeter.id,
|
|
575
|
+
}))}
|
|
576
|
+
// Display the number of selected items inside the field
|
|
577
|
+
triggerContentRight={
|
|
578
|
+
<Badge
|
|
579
|
+
value={selectedPerimetersIds.length}
|
|
580
|
+
nature="informative"
|
|
581
|
+
/>
|
|
582
|
+
}
|
|
583
|
+
/>
|
|
584
|
+
|
|
585
|
+
<div>
|
|
586
|
+
<div>Selected perimeters:</div>
|
|
587
|
+
<ul>
|
|
588
|
+
{selectedPerimeters.map((perimeter) => (
|
|
589
|
+
<li key={perimeter.id}>{perimeter.name}</li>
|
|
590
|
+
))}
|
|
591
|
+
</ul>
|
|
592
|
+
</div>
|
|
593
|
+
</div>
|
|
594
|
+
);
|
|
595
|
+
};
|
|
596
|
+
return <ParentComponent />;
|
|
597
|
+
},
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
const MULTIPLE_LABEL = "Select perimeters";
|
|
601
|
+
|
|
602
|
+
const MULTIPLE_ITEMS = Array.from({ length: 10 }, (_, index) => ({
|
|
603
|
+
id: `${index + 1}`,
|
|
604
|
+
text: `Perimeter ${index + 1}`,
|
|
605
|
+
}));
|
|
606
|
+
|
|
607
|
+
const MultipleCombobox = (
|
|
608
|
+
props: Pick<ComponentProps<typeof Combobox>, "disabledIds" | "required">,
|
|
609
|
+
) => {
|
|
610
|
+
const [selectedKeys, setSelectedKeys] = useState<Array<string>>([]);
|
|
611
|
+
|
|
612
|
+
return (
|
|
613
|
+
<>
|
|
614
|
+
<Combobox
|
|
615
|
+
{...props}
|
|
616
|
+
id="perimeters-combobox"
|
|
617
|
+
label={MULTIPLE_LABEL}
|
|
618
|
+
selectionMode="multiple"
|
|
619
|
+
selectedKeys={selectedKeys}
|
|
620
|
+
onSelectionChange={setSelectedKeys}
|
|
621
|
+
defaultItems={MULTIPLE_ITEMS}
|
|
622
|
+
triggerContentRight={
|
|
623
|
+
<Badge value={selectedKeys.length} nature="informative" />
|
|
624
|
+
}
|
|
625
|
+
/>
|
|
626
|
+
<button type="button" onClick={() => setSelectedKeys([])}>
|
|
627
|
+
Clear selection
|
|
628
|
+
</button>
|
|
629
|
+
</>
|
|
630
|
+
);
|
|
631
|
+
};
|
|
632
|
+
|
|
633
|
+
const getMultipleField = (canvasElement: HTMLElement) => {
|
|
634
|
+
const input = within(canvasElement).getByLabelText(MULTIPLE_LABEL);
|
|
635
|
+
return { input, field: within(input.parentElement!) };
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
// The badge is the only text of the field besides the trigger icon
|
|
639
|
+
const expectSelectedCount = async (canvasElement: HTMLElement, count: number) =>
|
|
640
|
+
expect(
|
|
641
|
+
getMultipleField(canvasElement).field.getByText(String(count)),
|
|
642
|
+
).toBeInTheDocument();
|
|
643
|
+
|
|
644
|
+
const findOption = async (text: string) =>
|
|
645
|
+
(await screen.findByText(text, { selector: "span" })).closest(
|
|
646
|
+
'[role="option"]',
|
|
647
|
+
);
|
|
648
|
+
|
|
649
|
+
export const ShouldSelectMultipleValues: StoryObj<typeof Combobox> = {
|
|
650
|
+
...MultipleSelectionExample,
|
|
651
|
+
play: async ({ canvasElement }) => {
|
|
652
|
+
const user = userEvent.setup({ delay: 50 });
|
|
653
|
+
const { input, field } = getMultipleField(canvasElement);
|
|
654
|
+
const clickOption = async (text: string) =>
|
|
655
|
+
user.click(await screen.findByText(text, { selector: "span" }));
|
|
656
|
+
const selectedList = within(within(canvasElement).getByRole("list"));
|
|
657
|
+
|
|
658
|
+
// The badge renders nothing while no item is selected
|
|
659
|
+
await expectNotPresent(() => field.queryByText("0"));
|
|
660
|
+
|
|
661
|
+
// The dropdown stays open across selections
|
|
662
|
+
await user.click(field.getByRole("button"));
|
|
663
|
+
|
|
664
|
+
await clickOption("Perimeter 1");
|
|
665
|
+
await expectSelectedCount(canvasElement, 1);
|
|
666
|
+
|
|
667
|
+
await clickOption("Perimeter 2");
|
|
668
|
+
await expectSelectedCount(canvasElement, 2);
|
|
669
|
+
await expect(await findOption("Perimeter 1")).toHaveAttribute(
|
|
670
|
+
"aria-selected",
|
|
671
|
+
"true",
|
|
672
|
+
);
|
|
673
|
+
await expect(await findOption("Perimeter 2")).toHaveAttribute(
|
|
674
|
+
"aria-selected",
|
|
675
|
+
"true",
|
|
676
|
+
);
|
|
677
|
+
|
|
678
|
+
// Unselecting brings the count back down
|
|
679
|
+
await clickOption("Perimeter 1");
|
|
680
|
+
await expectSelectedCount(canvasElement, 1);
|
|
681
|
+
await expect(
|
|
682
|
+
selectedList.queryByText("Perimeter 1"),
|
|
683
|
+
).not.toBeInTheDocument();
|
|
684
|
+
await expect(selectedList.getByText("Perimeter 2")).toBeInTheDocument();
|
|
685
|
+
|
|
686
|
+
// Typing filters the options, and the input is cleared after a selection
|
|
687
|
+
await user.type(input, "10");
|
|
688
|
+
await clickOption("Perimeter 10");
|
|
689
|
+
await expect(input).toHaveValue("");
|
|
690
|
+
await expectSelectedCount(canvasElement, 2);
|
|
691
|
+
await expect(selectedList.getByText("Perimeter 10")).toBeInTheDocument();
|
|
692
|
+
},
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
export const ShouldSelectMultipleValuesWithTheKeyboard: StoryObj<
|
|
696
|
+
typeof Combobox
|
|
697
|
+
> = {
|
|
698
|
+
render: () => <MultipleCombobox />,
|
|
699
|
+
play: async ({ canvasElement }) => {
|
|
700
|
+
const user = userEvent.setup({ delay: 50 });
|
|
701
|
+
const { input } = getMultipleField(canvasElement);
|
|
702
|
+
|
|
703
|
+
await user.click(input);
|
|
704
|
+
await user.keyboard("{ArrowDown}");
|
|
705
|
+
await screen.findByRole("listbox");
|
|
706
|
+
await user.keyboard("{Enter}");
|
|
707
|
+
await expectSelectedCount(canvasElement, 1);
|
|
708
|
+
|
|
709
|
+
// The dropdown stays open, so the next option can be selected right away
|
|
710
|
+
await user.keyboard("{ArrowDown}{Enter}");
|
|
711
|
+
await expectSelectedCount(canvasElement, 2);
|
|
712
|
+
await expect(await findOption("Perimeter 1")).toHaveAttribute(
|
|
713
|
+
"aria-selected",
|
|
714
|
+
"true",
|
|
715
|
+
);
|
|
716
|
+
await expect(await findOption("Perimeter 2")).toHaveAttribute(
|
|
717
|
+
"aria-selected",
|
|
718
|
+
"true",
|
|
719
|
+
);
|
|
720
|
+
|
|
721
|
+
await user.keyboard("{Escape}");
|
|
722
|
+
await expectNotPresent(() => screen.queryByRole("listbox"));
|
|
723
|
+
},
|
|
724
|
+
};
|
|
725
|
+
|
|
726
|
+
export const ShouldResetTheMultipleSelectionFromTheParent: StoryObj<
|
|
727
|
+
typeof Combobox
|
|
728
|
+
> = {
|
|
729
|
+
render: () => <MultipleCombobox />,
|
|
730
|
+
play: async ({ canvasElement }) => {
|
|
731
|
+
const canvas = within(canvasElement);
|
|
732
|
+
const user = userEvent.setup({ delay: 50 });
|
|
733
|
+
const { field } = getMultipleField(canvasElement);
|
|
734
|
+
|
|
735
|
+
await user.click(field.getByRole("button"));
|
|
736
|
+
await user.click(
|
|
737
|
+
await screen.findByText("Perimeter 1", { selector: "span" }),
|
|
738
|
+
);
|
|
739
|
+
await expectSelectedCount(canvasElement, 1);
|
|
740
|
+
|
|
741
|
+
// The open dropdown hides the rest of the page from assistive technologies
|
|
742
|
+
await user.keyboard("{Escape}");
|
|
743
|
+
await user.click(canvas.getByRole("button", { name: "Clear selection" }));
|
|
744
|
+
await expectNotPresent(() => field.queryByText("1"));
|
|
745
|
+
|
|
746
|
+
await user.click(field.getByRole("button"));
|
|
747
|
+
await expect(await findOption("Perimeter 1")).toHaveAttribute(
|
|
748
|
+
"aria-selected",
|
|
749
|
+
"false",
|
|
750
|
+
);
|
|
751
|
+
},
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
export const ShouldNotSelectADisabledOptionInMultipleMode: StoryObj<
|
|
755
|
+
typeof Combobox
|
|
756
|
+
> = {
|
|
757
|
+
render: () => <MultipleCombobox disabledIds={["2"]} />,
|
|
758
|
+
play: async ({ canvasElement }) => {
|
|
759
|
+
const user = userEvent.setup({ delay: 50 });
|
|
760
|
+
const { field } = getMultipleField(canvasElement);
|
|
761
|
+
|
|
762
|
+
await user.click(field.getByRole("button"));
|
|
763
|
+
await user.click(
|
|
764
|
+
await screen.findByText("Perimeter 2", { selector: "span" }),
|
|
765
|
+
);
|
|
766
|
+
await expect(await findOption("Perimeter 2")).toHaveAttribute(
|
|
767
|
+
"aria-disabled",
|
|
768
|
+
"true",
|
|
769
|
+
);
|
|
770
|
+
await expectNotPresent(() => field.queryByText("1"));
|
|
771
|
+
},
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
export const ShouldBeRequiredInMultipleMode: StoryObj<typeof Combobox> = {
|
|
775
|
+
render: () => <MultipleCombobox required />,
|
|
776
|
+
play: async ({ canvasElement }) => {
|
|
777
|
+
await expect(getMultipleField(canvasElement).input).toBeRequired();
|
|
778
|
+
},
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
export const ShouldThrowWhenSelectedKeysIsNotAnArray: StoryObj<
|
|
782
|
+
typeof Combobox
|
|
783
|
+
> = {
|
|
784
|
+
decorators: [(Story) => <ErrorBoundary>{Story()}</ErrorBoundary>],
|
|
785
|
+
render: () => (
|
|
786
|
+
<Combobox
|
|
787
|
+
id="perimeters-combobox"
|
|
788
|
+
label={MULTIPLE_LABEL}
|
|
789
|
+
selectionMode="multiple"
|
|
790
|
+
// Simulates a loosely typed form value that is not initialized yet
|
|
791
|
+
selectedKeys={undefined as unknown as Array<string>}
|
|
792
|
+
onSelectionChange={() => {}}
|
|
793
|
+
defaultItems={MULTIPLE_ITEMS}
|
|
794
|
+
/>
|
|
795
|
+
),
|
|
796
|
+
play: async ({ canvasElement }) => {
|
|
797
|
+
await within(canvasElement).findByText(
|
|
798
|
+
'Error: Combobox "perimeters-combobox": `selectedKeys` must be an array, use `[]` when nothing is selected',
|
|
799
|
+
);
|
|
800
|
+
},
|
|
801
|
+
};
|
|
802
|
+
|
|
803
|
+
export const ShouldThrowWhenSelectedKeysIsUsedWithoutMultipleMode: StoryObj<
|
|
804
|
+
typeof Combobox
|
|
805
|
+
> = {
|
|
806
|
+
decorators: [(Story) => <ErrorBoundary>{Story()}</ErrorBoundary>],
|
|
807
|
+
render: () => {
|
|
808
|
+
// Bypasses the types, as a loosely typed consumer would
|
|
809
|
+
const looseProps = {
|
|
810
|
+
selectedKeys: [],
|
|
811
|
+
onSelectionChange: () => {},
|
|
812
|
+
} as unknown as ComponentProps<typeof Combobox>;
|
|
813
|
+
return (
|
|
814
|
+
<Combobox
|
|
815
|
+
{...looseProps}
|
|
816
|
+
id="perimeters-combobox"
|
|
817
|
+
label={MULTIPLE_LABEL}
|
|
818
|
+
defaultItems={MULTIPLE_ITEMS}
|
|
819
|
+
/>
|
|
820
|
+
);
|
|
821
|
+
},
|
|
822
|
+
play: async ({ canvasElement }) => {
|
|
823
|
+
await within(canvasElement).findByText(
|
|
824
|
+
'Error: Combobox "perimeters-combobox": `selectedKeys` requires `selectionMode="multiple"`',
|
|
825
|
+
);
|
|
826
|
+
},
|
|
827
|
+
};
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* @deprecated Multiple selection faked on top of a single selection.
|
|
831
|
+
* Use `selectedKeys` and `onSelectionChange` instead (see `MultipleSelectionExample`).
|
|
832
|
+
* Kept to guarantee the legacy usage keeps working.
|
|
833
|
+
*/
|
|
834
|
+
export const LegacyMultipleSelectionExample: StoryObj<typeof Combobox> = {
|
|
546
835
|
parameters: {
|
|
547
836
|
...meta.parameters,
|
|
548
837
|
layout: "padded",
|
|
@@ -709,7 +998,7 @@ export const ShouldCloseTheDropdownWhenNoOptionMatches: StoryObj<
|
|
|
709
998
|
|
|
710
999
|
Here are the notes available for the developer on the built Storybook, you can read them to understand the component and how to use it.
|
|
711
1000
|
|
|
712
|
-
|
|
1001
|
+
````mdx
|
|
713
1002
|
import {
|
|
714
1003
|
Meta,
|
|
715
1004
|
Canvas,
|
|
@@ -782,16 +1071,78 @@ Interacting with link items navigates to the provided URL and does not update th
|
|
|
782
1071
|
|
|
783
1072
|
## Multiple selection
|
|
784
1073
|
|
|
785
|
-
|
|
786
|
-
Please note that this is a temporary solution, the React Aria combobox does not support multiple selection yet.
|
|
787
|
-
The implementation details may change in the future.
|
|
1074
|
+
Set `selectionMode="multiple"` and control the selection with `selectedKeys` (the selected ids) and `onSelectionChange` (called with all the selected ids).
|
|
788
1075
|
|
|
789
|
-
|
|
1076
|
+
- The dropdown stays open after each selection, so the user can pick several items in a row.
|
|
1077
|
+
- The input is cleared after each selection, ready for the next search.
|
|
1078
|
+
- The selected items are checked in the dropdown: no need to pass `isSelected` on the items.
|
|
1079
|
+
|
|
1080
|
+
`selectedKeys` must always be an array: pass `[]` when nothing is selected (for example while a form value is not initialized yet).
|
|
1081
|
+
The combobox throws an error otherwise, or when `selectedKeys` is used without `selectionMode="multiple"`.
|
|
1082
|
+
|
|
1083
|
+
The combobox does not display the selection itself.
|
|
790
1084
|
Use the `triggerContentRight` prop to display a `Badge` with the count inside the field, on the left of the dropdown trigger.
|
|
791
1085
|
The element lays out in the flow, so the input shrinks to make room for it whatever its width, and it takes no room at all when the badge renders nothing.
|
|
792
1086
|
|
|
793
1087
|
<Source of={ComboboxTests.MultipleSelectionExample} type="code" dark />
|
|
794
1088
|
|
|
1089
|
+
### Typing a wrapper component
|
|
1090
|
+
|
|
1091
|
+
The props of the multiple selection are exported as `ComboboxMultipleProps`:
|
|
1092
|
+
|
|
1093
|
+
```tsx
|
|
1094
|
+
import {
|
|
1095
|
+
Combobox,
|
|
1096
|
+
ComboboxMultipleProps,
|
|
1097
|
+
} from "@agregio-solutions/design-system";
|
|
1098
|
+
|
|
1099
|
+
type PerimetersComboboxProps = Omit<ComboboxMultipleProps, "label">;
|
|
1100
|
+
|
|
1101
|
+
const PerimetersCombobox = (props: PerimetersComboboxProps) => (
|
|
1102
|
+
<Combobox {...props} label="Perimeters" />
|
|
1103
|
+
);
|
|
1104
|
+
```
|
|
1105
|
+
|
|
1106
|
+
`ComponentProps<typeof Combobox>` still returns the props of the single selection (with `value` and `onChange`), so the existing wrappers keep compiling unchanged.
|
|
1107
|
+
|
|
1108
|
+
### Migrating from the deprecated multiple selection
|
|
1109
|
+
|
|
1110
|
+
Before React Aria supported multiple selection, it was faked on top of a single selection: `value=""` was forced, `onChange` received the clicked id and the consumer toggled it in its own list, then marked the items with `isSelected`.
|
|
1111
|
+
|
|
1112
|
+
This workaround is **deprecated**. It still works and compiles, but your editor strikes `<Combobox>` through when it is used this way.
|
|
1113
|
+
It will be removed in a future major version. To migrate:
|
|
1114
|
+
|
|
1115
|
+
- Replace `value=""` with `selectedKeys={selectedIds}`.
|
|
1116
|
+
- Replace the `onChange` toggling logic with `onSelectionChange={setSelectedIds}`.
|
|
1117
|
+
- Remove `isSelected` from the items.
|
|
1118
|
+
|
|
1119
|
+
```tsx
|
|
1120
|
+
// Before (deprecated)
|
|
1121
|
+
<Combobox
|
|
1122
|
+
selectionMode="multiple"
|
|
1123
|
+
value=""
|
|
1124
|
+
onChange={(id) =>
|
|
1125
|
+
setSelectedIds(
|
|
1126
|
+
selectedIds.includes(id)
|
|
1127
|
+
? selectedIds.filter((selectedId) => selectedId !== id)
|
|
1128
|
+
: [...selectedIds, id],
|
|
1129
|
+
)
|
|
1130
|
+
}
|
|
1131
|
+
defaultItems={items.map((item) => ({
|
|
1132
|
+
...item,
|
|
1133
|
+
isSelected: selectedIds.includes(item.id),
|
|
1134
|
+
}))}
|
|
1135
|
+
/>
|
|
1136
|
+
|
|
1137
|
+
// After
|
|
1138
|
+
<Combobox
|
|
1139
|
+
selectionMode="multiple"
|
|
1140
|
+
selectedKeys={selectedIds}
|
|
1141
|
+
onSelectionChange={setSelectedIds}
|
|
1142
|
+
defaultItems={items}
|
|
1143
|
+
/>
|
|
1144
|
+
```
|
|
1145
|
+
|
|
795
1146
|
## How to test this component?
|
|
796
1147
|
|
|
797
1148
|
Here is a code snippet that you can use as an example to know how to test this component with react testing library:
|
|
@@ -805,4 +1156,4 @@ Here is a code snippet that you can use as an example to know how to test this c
|
|
|
805
1156
|
<Controls of={Combobox.Playground} />
|
|
806
1157
|
|
|
807
1158
|
<Stories />
|
|
808
|
-
|
|
1159
|
+
````
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
import { PaginationState, Row,
|
|
3
|
-
|
|
2
|
+
import { PaginationState, ReactTable, Row, RowData, Table_RowPagination, TableFeatures, TableState_All } from '@tanstack/react-table';
|
|
3
|
+
/** Requires `rowPaginationFeature`. */
|
|
4
|
+
type OptionalPaginationApi<TFeatures extends TableFeatures, TData extends RowData> = Partial<Pick<Table_RowPagination<TFeatures, TData>, "getRowCount" | "setPageIndex" | "setPageSize">>;
|
|
5
|
+
type Props<TFeatures extends TableFeatures, TData extends RowData> = {
|
|
4
6
|
/**
|
|
5
7
|
* The CSS className for the element.
|
|
6
8
|
*/
|
|
@@ -10,18 +12,25 @@ type Props<TData> = {
|
|
|
10
12
|
*/
|
|
11
13
|
style?: React.CSSProperties;
|
|
12
14
|
/**
|
|
13
|
-
* The table instance given by `react-table`.
|
|
15
|
+
* The table instance given by `react-table` `useTable`.
|
|
16
|
+
* The pagination and filtering APIs are read when the table registers their
|
|
17
|
+
* feature, and ignored otherwise.
|
|
18
|
+
* Call `useTable` without a state selector: `table.state` only holds the
|
|
19
|
+
* slices the selector keeps, and this component reads the filtering ones.
|
|
14
20
|
*/
|
|
15
|
-
table:
|
|
21
|
+
table: ReactTable<TFeatures, TData> & OptionalPaginationApi<TFeatures, TData> & {
|
|
22
|
+
state: TableState_All;
|
|
23
|
+
};
|
|
16
24
|
/**
|
|
17
25
|
* The pagination state given by `react-table`.
|
|
26
|
+
* Requires the table to register `rowPaginationFeature`.
|
|
18
27
|
*/
|
|
19
28
|
pagination?: PaginationState;
|
|
20
29
|
/**
|
|
21
30
|
* The function to render the sub component custom UI.
|
|
22
31
|
*/
|
|
23
32
|
renderSubComponent?: (props: {
|
|
24
|
-
row: Row<TData>;
|
|
33
|
+
row: Row<TFeatures, TData>;
|
|
25
34
|
}) => React.ReactNode;
|
|
26
35
|
/**
|
|
27
36
|
* The list of available page sizes.
|
|
@@ -33,5 +42,5 @@ type Props<TData> = {
|
|
|
33
42
|
*/
|
|
34
43
|
size?: "small" | "default" | "large";
|
|
35
44
|
};
|
|
36
|
-
export default function DataTable<TData>({ table, pagination, renderSubComponent, itemsPerPageOptions, size, ...divProps }: Props<TData>): React.JSX.Element;
|
|
45
|
+
export default function DataTable<TFeatures extends TableFeatures, TData extends RowData>({ table, pagination, renderSubComponent, itemsPerPageOptions, size, ...divProps }: Props<TFeatures, TData>): React.JSX.Element;
|
|
37
46
|
export {};
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
export type Props = {
|
|
3
|
-
/**
|
|
4
|
-
* The level of the row, mainly to change its background color. Defaults to "root".
|
|
5
|
-
* @deprecated sub rows styling are now handled internally
|
|
6
|
-
*/
|
|
7
|
-
depth?: number;
|
|
8
3
|
/**
|
|
9
4
|
* The CSS className for the element.
|
|
10
5
|
*/
|
|
@@ -15,4 +10,4 @@ export type Props = {
|
|
|
15
10
|
style?: React.CSSProperties;
|
|
16
11
|
children?: React.ReactNode;
|
|
17
12
|
};
|
|
18
|
-
export default function DataTableRow({ children,
|
|
13
|
+
export default function DataTableRow({ children, ...otherProps }: Props): React.JSX.Element;
|