@tecsinapse/react-web-kit 1.3.2 → 1.6.1
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 +98 -0
- package/dist/components/atoms/Accordion/Accordion.d.ts +9 -0
- package/dist/components/atoms/Accordion/Accordion.js +85 -0
- package/dist/components/atoms/Accordion/Accordion.js.map +1 -0
- package/dist/components/atoms/Accordion/animations.d.ts +41 -0
- package/dist/components/atoms/Accordion/animations.js +65 -0
- package/dist/components/atoms/Accordion/animations.js.map +1 -0
- package/dist/components/atoms/Accordion/index.d.ts +1 -0
- package/dist/components/atoms/Accordion/index.js +24 -0
- package/dist/components/atoms/Accordion/index.js.map +1 -0
- package/dist/components/atoms/Accordion/styled.d.ts +8 -0
- package/dist/components/atoms/Accordion/styled.js +53 -0
- package/dist/components/atoms/Accordion/styled.js.map +1 -0
- package/dist/components/atoms/Badge/index.js +2 -2
- package/dist/components/atoms/Button/index.js +2 -2
- package/dist/components/atoms/Button/styled.js +14 -5
- package/dist/components/atoms/Button/styled.js.map +1 -1
- package/dist/components/atoms/Input/index.js +2 -2
- package/dist/components/atoms/Modal/Modal.d.ts +8 -0
- package/dist/components/atoms/Modal/Modal.js +43 -0
- package/dist/components/atoms/Modal/Modal.js.map +1 -0
- package/dist/components/atoms/Modal/animations.d.ts +23 -0
- package/dist/components/atoms/Modal/animations.js +32 -0
- package/dist/components/atoms/Modal/animations.js.map +1 -0
- package/dist/components/atoms/Modal/index.d.ts +1 -0
- package/dist/components/atoms/Modal/index.js +24 -0
- package/dist/components/atoms/Modal/index.js.map +1 -0
- package/dist/components/atoms/Modal/styled.d.ts +2 -0
- package/dist/components/atoms/Modal/styled.js +39 -0
- package/dist/components/atoms/Modal/styled.js.map +1 -0
- package/dist/components/atoms/Overlay/Overlay.d.ts +10 -0
- package/dist/components/atoms/Overlay/Overlay.js +40 -0
- package/dist/components/atoms/Overlay/Overlay.js.map +1 -0
- package/dist/components/atoms/Overlay/animations.d.ts +18 -0
- package/dist/components/atoms/Overlay/animations.js +27 -0
- package/dist/components/atoms/Overlay/animations.js.map +1 -0
- package/dist/components/atoms/Overlay/index.d.ts +1 -0
- package/dist/components/atoms/Overlay/index.js +16 -0
- package/dist/components/atoms/Overlay/index.js.map +1 -0
- package/dist/components/atoms/Overlay/styled.d.ts +2 -0
- package/dist/components/atoms/Overlay/styled.js +36 -0
- package/dist/components/atoms/Overlay/styled.js.map +1 -0
- package/dist/components/atoms/Skeleton/Skeleton.d.ts +10 -0
- package/dist/components/atoms/Skeleton/Skeleton.js +35 -0
- package/dist/components/atoms/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/atoms/Skeleton/index.d.ts +1 -0
- package/dist/components/atoms/Skeleton/index.js +24 -0
- package/dist/components/atoms/Skeleton/index.js.map +1 -0
- package/dist/components/atoms/Skeleton/styled.d.ts +5 -0
- package/dist/components/atoms/Skeleton/styled.js +79 -0
- package/dist/components/atoms/Skeleton/styled.js.map +1 -0
- package/dist/components/atoms/Table/Body/TBody.d.ts +3 -0
- package/dist/components/atoms/Table/Body/TBody.js +22 -0
- package/dist/components/atoms/Table/Body/TBody.js.map +1 -0
- package/dist/components/atoms/Table/Body/index.d.ts +1 -0
- package/dist/components/atoms/Table/Body/index.js +16 -0
- package/dist/components/atoms/Table/Body/index.js.map +1 -0
- package/dist/components/atoms/Table/Cell/Td.d.ts +3 -0
- package/dist/components/atoms/Table/Cell/Td.js +23 -0
- package/dist/components/atoms/Table/Cell/Td.js.map +1 -0
- package/dist/components/atoms/Table/Cell/index.d.ts +1 -0
- package/dist/components/atoms/Table/Cell/index.js +16 -0
- package/dist/components/atoms/Table/Cell/index.js.map +1 -0
- package/dist/components/atoms/Table/Cell/styled.d.ts +2 -0
- package/dist/components/atoms/Table/Cell/styled.js +34 -0
- package/dist/components/atoms/Table/Cell/styled.js.map +1 -0
- package/dist/components/atoms/Table/Container/TableContainer.d.ts +3 -0
- package/dist/components/atoms/Table/Container/TableContainer.js +23 -0
- package/dist/components/atoms/Table/Container/TableContainer.js.map +1 -0
- package/dist/components/atoms/Table/Container/index.d.ts +1 -0
- package/dist/components/atoms/Table/Container/index.js +16 -0
- package/dist/components/atoms/Table/Container/index.js.map +1 -0
- package/dist/components/atoms/Table/Container/styled.d.ts +2 -0
- package/dist/components/atoms/Table/Container/styled.js +30 -0
- package/dist/components/atoms/Table/Container/styled.js.map +1 -0
- package/dist/components/atoms/Table/Footer/TFoot.d.ts +3 -0
- package/dist/components/atoms/Table/Footer/TFoot.js +24 -0
- package/dist/components/atoms/Table/Footer/TFoot.js.map +1 -0
- package/dist/components/atoms/Table/Footer/index.d.ts +1 -0
- package/dist/components/atoms/Table/Footer/index.js +16 -0
- package/dist/components/atoms/Table/Footer/index.js.map +1 -0
- package/dist/components/atoms/Table/Footer/styled.d.ts +5 -0
- package/dist/components/atoms/Table/Footer/styled.js +19 -0
- package/dist/components/atoms/Table/Footer/styled.js.map +1 -0
- package/dist/components/atoms/Table/Header/THead.d.ts +3 -0
- package/dist/components/atoms/Table/Header/THead.js +27 -0
- package/dist/components/atoms/Table/Header/THead.js.map +1 -0
- package/dist/components/atoms/Table/Header/Th.d.ts +3 -0
- package/dist/components/atoms/Table/Header/Th.js +24 -0
- package/dist/components/atoms/Table/Header/Th.js.map +1 -0
- package/dist/components/atoms/Table/Header/index.d.ts +2 -0
- package/dist/components/atoms/Table/Header/index.js +24 -0
- package/dist/components/atoms/Table/Header/index.js.map +1 -0
- package/dist/components/atoms/Table/Header/styled.d.ts +4 -0
- package/dist/components/atoms/Table/Header/styled.js +54 -0
- package/dist/components/atoms/Table/Header/styled.js.map +1 -0
- package/dist/components/atoms/Table/Row/Tr.d.ts +3 -0
- package/dist/components/atoms/Table/Row/Tr.js +24 -0
- package/dist/components/atoms/Table/Row/Tr.js.map +1 -0
- package/dist/components/atoms/Table/Row/index.d.ts +1 -0
- package/dist/components/atoms/Table/Row/index.js +16 -0
- package/dist/components/atoms/Table/Row/index.js.map +1 -0
- package/dist/components/atoms/Table/Row/styled.d.ts +2 -0
- package/dist/components/atoms/Table/Row/styled.js +24 -0
- package/dist/components/atoms/Table/Row/styled.js.map +1 -0
- package/dist/components/atoms/Table/Table.d.ts +3 -0
- package/dist/components/atoms/Table/Table.js +24 -0
- package/dist/components/atoms/Table/Table.js.map +1 -0
- package/dist/components/atoms/Table/Toolbar/TableToolbar.d.ts +8 -0
- package/dist/components/atoms/Table/Toolbar/TableToolbar.js +30 -0
- package/dist/components/atoms/Table/Toolbar/TableToolbar.js.map +1 -0
- package/dist/components/atoms/Table/Toolbar/index.d.ts +1 -0
- package/dist/components/atoms/Table/Toolbar/index.js +24 -0
- package/dist/components/atoms/Table/Toolbar/index.js.map +1 -0
- package/dist/components/atoms/Table/Toolbar/styled.d.ts +5 -0
- package/dist/components/atoms/Table/Toolbar/styled.js +19 -0
- package/dist/components/atoms/Table/Toolbar/styled.js.map +1 -0
- package/dist/components/atoms/Table/index.d.ts +8 -0
- package/dist/components/atoms/Table/index.js +84 -0
- package/dist/components/atoms/Table/index.js.map +1 -0
- package/dist/components/atoms/Table/styled.d.ts +2 -0
- package/dist/components/atoms/Table/styled.js +20 -0
- package/dist/components/atoms/Table/styled.js.map +1 -0
- package/dist/components/atoms/Tag/index.js +2 -2
- package/dist/components/molecules/Breadcrumbs/BreadcrumbItem/index.js +2 -2
- package/dist/components/molecules/Breadcrumbs/index.js +2 -2
- package/dist/components/molecules/Drawer/Drawer.js +33 -3
- package/dist/components/molecules/Drawer/Drawer.js.map +1 -1
- package/dist/components/molecules/Drawer/animations.d.ts +42 -0
- package/dist/components/molecules/Drawer/animations.js +77 -0
- package/dist/components/molecules/Drawer/animations.js.map +1 -0
- package/dist/components/molecules/Drawer/index.js +2 -2
- package/dist/components/molecules/Drawer/styled.d.ts +0 -1
- package/dist/components/molecules/Drawer/styled.js +4 -19
- package/dist/components/molecules/Drawer/styled.js.map +1 -1
- package/dist/components/molecules/InputPassword/InputPassword.js +2 -2
- package/dist/components/molecules/InputPassword/index.js +2 -2
- package/dist/components/molecules/Menubar/MenuBlock/MenuBlock.d.ts +4 -3
- package/dist/components/molecules/Menubar/MenuBlock/MenuBlock.js +14 -5
- package/dist/components/molecules/Menubar/MenuBlock/MenuBlock.js.map +1 -1
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/MenuItem.d.ts +1 -0
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/MenuItem.js +6 -3
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/MenuItem.js.map +1 -1
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/SubMenuBlock/SubMenuBlock.d.ts +1 -0
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/SubMenuBlock/SubMenuBlock.js +4 -2
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/SubMenuBlock/SubMenuBlock.js.map +1 -1
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/styled.js +3 -0
- package/dist/components/molecules/Menubar/MenuBlock/MenuItem/styled.js.map +1 -1
- package/dist/components/molecules/Menubar/Menubar.d.ts +3 -2
- package/dist/components/molecules/Menubar/Menubar.js +33 -21
- package/dist/components/molecules/Menubar/Menubar.js.map +1 -1
- package/dist/components/molecules/Menubar/MostUsed/MostUsed.d.ts +3 -2
- package/dist/components/molecules/Menubar/MostUsed/MostUsed.js +6 -3
- package/dist/components/molecules/Menubar/MostUsed/MostUsed.js.map +1 -1
- package/dist/components/molecules/Menubar/animations.d.ts +4 -0
- package/dist/components/molecules/Menubar/animations.js +63 -0
- package/dist/components/molecules/Menubar/animations.js.map +1 -0
- package/dist/components/molecules/Menubar/index.js +2 -2
- package/dist/components/molecules/Menubar/styled.js +14 -1
- package/dist/components/molecules/Menubar/styled.js.map +1 -1
- package/dist/components/molecules/Menubar/types.js +4 -0
- package/dist/components/molecules/Select/Dropdown/Dropdown.d.ts +7 -0
- package/dist/components/molecules/Select/Dropdown/Dropdown.js +90 -0
- package/dist/components/molecules/Select/Dropdown/Dropdown.js.map +1 -0
- package/dist/components/molecules/Select/Dropdown/index.d.ts +1 -0
- package/dist/components/molecules/Select/Dropdown/index.js +16 -0
- package/dist/components/molecules/Select/Dropdown/index.js.map +1 -0
- package/dist/components/molecules/Select/Dropdown/styled.d.ts +13 -0
- package/dist/components/molecules/Select/Dropdown/styled.js +113 -0
- package/dist/components/molecules/Select/Dropdown/styled.js.map +1 -0
- package/dist/components/molecules/Select/Select.d.ts +15 -0
- package/dist/components/molecules/Select/Select.js +85 -0
- package/dist/components/molecules/Select/Select.js.map +1 -0
- package/dist/components/molecules/Select/SelectItem/SelectItem.d.ts +16 -0
- package/dist/components/molecules/Select/SelectItem/SelectItem.js +76 -0
- package/dist/components/molecules/Select/SelectItem/SelectItem.js.map +1 -0
- package/dist/components/molecules/Select/SelectItem/index.d.ts +1 -0
- package/dist/components/molecules/Select/SelectItem/index.js +16 -0
- package/dist/components/molecules/Select/SelectItem/index.js.map +1 -0
- package/dist/components/molecules/Select/SelectItem/styled.d.ts +4 -0
- package/dist/components/molecules/Select/SelectItem/styled.js +54 -0
- package/dist/components/molecules/Select/SelectItem/styled.js.map +1 -0
- package/dist/components/molecules/Select/animations.d.ts +27 -0
- package/dist/components/molecules/Select/animations.js +36 -0
- package/dist/components/molecules/Select/animations.js.map +1 -0
- package/dist/components/molecules/Select/functions.d.ts +1 -0
- package/dist/components/molecules/Select/functions.js +21 -0
- package/dist/components/molecules/Select/functions.js.map +1 -0
- package/dist/components/molecules/Select/index.d.ts +1 -0
- package/dist/components/molecules/Select/index.js +24 -0
- package/dist/components/molecules/Select/index.js.map +1 -0
- package/dist/components/molecules/Select/styled.d.ts +3 -0
- package/dist/components/molecules/Select/styled.js +28 -0
- package/dist/components/molecules/Select/styled.js.map +1 -0
- package/dist/components/molecules/Snackbar/index.js +2 -2
- package/dist/components/molecules/Snackbar/styled.js +2 -2
- package/dist/components/organisms/DataGrid/DataGrid.d.ts +28 -0
- package/dist/components/organisms/DataGrid/DataGrid.js +121 -0
- package/dist/components/organisms/DataGrid/DataGrid.js.map +1 -0
- package/dist/components/organisms/DataGrid/Footer/Footer.d.ts +15 -0
- package/dist/components/organisms/DataGrid/Footer/Footer.js +107 -0
- package/dist/components/organisms/DataGrid/Footer/Footer.js.map +1 -0
- package/dist/components/organisms/DataGrid/Footer/index.d.ts +1 -0
- package/dist/components/organisms/DataGrid/Footer/index.js +16 -0
- package/dist/components/organisms/DataGrid/Footer/index.js.map +1 -0
- package/dist/components/organisms/DataGrid/Footer/styled.d.ts +35 -0
- package/dist/components/organisms/DataGrid/Footer/styled.js +91 -0
- package/dist/components/organisms/DataGrid/Footer/styled.js.map +1 -0
- package/dist/components/organisms/DataGrid/Header/Header.d.ts +12 -0
- package/dist/components/organisms/DataGrid/Header/Header.js +88 -0
- package/dist/components/organisms/DataGrid/Header/Header.js.map +1 -0
- package/dist/components/organisms/DataGrid/Header/index.d.ts +1 -0
- package/dist/components/organisms/DataGrid/Header/index.js +16 -0
- package/dist/components/organisms/DataGrid/Header/index.js.map +1 -0
- package/dist/components/organisms/DataGrid/Header/styled.d.ts +1 -0
- package/dist/components/organisms/DataGrid/Header/styled.js +23 -0
- package/dist/components/organisms/DataGrid/Header/styled.js.map +1 -0
- package/dist/components/organisms/DataGrid/Header/utils.d.ts +10 -0
- package/dist/components/organisms/DataGrid/Header/utils.js +30 -0
- package/dist/components/organisms/DataGrid/Header/utils.js.map +1 -0
- package/dist/components/organisms/DataGrid/Row/Row.d.ts +10 -0
- package/dist/components/organisms/DataGrid/Row/Row.js +42 -0
- package/dist/components/organisms/DataGrid/Row/Row.js.map +1 -0
- package/dist/components/organisms/DataGrid/Row/index.d.ts +1 -0
- package/dist/components/organisms/DataGrid/Row/index.js +16 -0
- package/dist/components/organisms/DataGrid/Row/index.js.map +1 -0
- package/dist/components/organisms/DataGrid/index.d.ts +2 -0
- package/dist/components/organisms/DataGrid/index.js +42 -0
- package/dist/components/organisms/DataGrid/index.js.map +1 -0
- package/dist/components/organisms/DataGrid/styled.d.ts +1 -0
- package/dist/components/organisms/DataGrid/styled.js +23 -0
- package/dist/components/organisms/DataGrid/styled.js.map +1 -0
- package/dist/components/organisms/DataGrid/types.d.ts +7 -0
- package/dist/components/organisms/DataGrid/types.js +6 -0
- package/dist/components/organisms/DataGrid/types.js.map +1 -0
- package/dist/components/organisms/DataGrid/utils.d.ts +2 -0
- package/dist/components/organisms/DataGrid/utils.js +18 -0
- package/dist/components/organisms/DataGrid/utils.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +14 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useClickAwayListener.d.ts +2 -0
- package/dist/hooks/useClickAwayListener.js +28 -0
- package/dist/hooks/useClickAwayListener.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +104 -3
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
- package/src/components/atoms/Accordion/Accordion.stories.tsx +35 -0
- package/src/components/atoms/Accordion/Accordion.tsx +99 -0
- package/src/components/atoms/Accordion/animations.ts +51 -0
- package/src/components/atoms/Accordion/index.ts +1 -0
- package/src/components/atoms/Accordion/styled.ts +35 -0
- package/src/components/atoms/Button/styled.ts +11 -1
- package/src/components/atoms/Modal/Modal.stories.tsx +55 -0
- package/src/components/atoms/Modal/Modal.tsx +34 -0
- package/src/components/atoms/Modal/animations.ts +12 -0
- package/src/components/atoms/Modal/index.ts +1 -0
- package/src/components/atoms/Modal/styled.ts +17 -0
- package/src/components/atoms/Overlay/Overlay.tsx +40 -0
- package/src/components/atoms/Overlay/animations.ts +11 -0
- package/src/components/atoms/Overlay/index.ts +1 -0
- package/src/components/atoms/Overlay/styled.ts +20 -0
- package/src/components/atoms/Skeleton/Skeleton.stories.tsx +15 -0
- package/src/components/atoms/Skeleton/Skeleton.tsx +37 -0
- package/src/components/atoms/Skeleton/index.ts +1 -0
- package/src/components/atoms/Skeleton/styled.ts +68 -0
- package/src/components/atoms/Table/Body/TBody.tsx +10 -0
- package/src/components/atoms/Table/Body/index.ts +1 -0
- package/src/components/atoms/Table/Cell/Td.tsx +11 -0
- package/src/components/atoms/Table/Cell/index.ts +1 -0
- package/src/components/atoms/Table/Cell/styled.ts +12 -0
- package/src/components/atoms/Table/Container/TableContainer.tsx +11 -0
- package/src/components/atoms/Table/Container/index.ts +1 -0
- package/src/components/atoms/Table/Container/styled.ts +10 -0
- package/src/components/atoms/Table/Footer/TFoot.tsx +11 -0
- package/src/components/atoms/Table/Footer/index.ts +1 -0
- package/src/components/atoms/Table/Footer/styled.ts +8 -0
- package/src/components/atoms/Table/Header/THead.tsx +21 -0
- package/src/components/atoms/Table/Header/Th.tsx +10 -0
- package/src/components/atoms/Table/Header/index.ts +2 -0
- package/src/components/atoms/Table/Header/styled.ts +30 -0
- package/src/components/atoms/Table/Row/Tr.tsx +11 -0
- package/src/components/atoms/Table/Row/index.ts +1 -0
- package/src/components/atoms/Table/Row/styled.ts +8 -0
- package/src/components/atoms/Table/Table.stories.tsx +96 -0
- package/src/components/atoms/Table/Table.tsx +11 -0
- package/src/components/atoms/Table/Toolbar/TableToolbar.tsx +31 -0
- package/src/components/atoms/Table/Toolbar/index.ts +1 -0
- package/src/components/atoms/Table/Toolbar/styled.ts +8 -0
- package/src/components/atoms/Table/index.ts +8 -0
- package/src/components/atoms/Table/styled.ts +9 -0
- package/src/components/molecules/Drawer/Drawer.stories.tsx +19 -21
- package/src/components/molecules/Drawer/Drawer.tsx +34 -6
- package/src/components/molecules/Drawer/animations.ts +50 -0
- package/src/components/molecules/Drawer/styled.ts +3 -12
- package/src/components/molecules/InputPassword/InputPassword.stories.tsx +1 -1
- package/src/components/molecules/Menubar/MenuBlock/MenuBlock.tsx +38 -31
- package/src/components/molecules/Menubar/MenuBlock/MenuItem/MenuItem.tsx +4 -2
- package/src/components/molecules/Menubar/MenuBlock/MenuItem/SubMenuBlock/SubMenuBlock.tsx +3 -2
- package/src/components/molecules/Menubar/MenuBlock/MenuItem/styled.ts +3 -0
- package/src/components/molecules/Menubar/Menubar.stories.tsx +20 -13
- package/src/components/molecules/Menubar/Menubar.tsx +65 -51
- package/src/components/molecules/Menubar/MostUsed/MostUsed.tsx +4 -2
- package/src/components/molecules/Menubar/animations.ts +64 -0
- package/src/components/molecules/Menubar/styled.ts +8 -1
- package/src/components/molecules/Select/Dropdown/Dropdown.tsx +106 -0
- package/src/components/molecules/Select/Dropdown/index.ts +1 -0
- package/src/components/molecules/Select/Dropdown/styled.ts +77 -0
- package/src/components/molecules/Select/Select.stories.tsx +108 -0
- package/src/components/molecules/Select/Select.tsx +92 -0
- package/src/components/molecules/Select/SelectItem/SelectItem.tsx +88 -0
- package/src/components/molecules/Select/SelectItem/index.ts +1 -0
- package/src/components/molecules/Select/SelectItem/styled.ts +34 -0
- package/src/components/molecules/Select/animations.ts +18 -0
- package/src/components/molecules/Select/functions.ts +32 -0
- package/src/components/molecules/Select/index.ts +1 -0
- package/src/components/molecules/Select/styled.ts +16 -0
- package/src/components/molecules/Snackbar/Snackbar.stories.tsx +24 -0
- package/src/components/organisms/DataGrid/DatGrid.stories.tsx +216 -0
- package/src/components/organisms/DataGrid/DataGrid.tsx +183 -0
- package/src/components/organisms/DataGrid/Footer/Footer.tsx +137 -0
- package/src/components/organisms/DataGrid/Footer/index.ts +1 -0
- package/src/components/organisms/DataGrid/Footer/styled.ts +59 -0
- package/src/components/organisms/DataGrid/Header/Header.tsx +111 -0
- package/src/components/organisms/DataGrid/Header/index.ts +1 -0
- package/src/components/organisms/DataGrid/Header/styled.ts +10 -0
- package/src/components/organisms/DataGrid/Header/utils.ts +28 -0
- package/src/components/organisms/DataGrid/Row/Row.tsx +33 -0
- package/src/components/organisms/DataGrid/Row/index.ts +1 -0
- package/src/components/organisms/DataGrid/index.ts +2 -0
- package/src/components/organisms/DataGrid/styled.ts +10 -0
- package/src/components/organisms/DataGrid/types.ts +11 -0
- package/src/components/organisms/DataGrid/utils.ts +15 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useClickAwayListener.ts +18 -0
- package/src/index.ts +10 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import React, { CSSProperties } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Table,
|
|
4
|
+
TableToolbar,
|
|
5
|
+
TableContainer,
|
|
6
|
+
Tr,
|
|
7
|
+
Td,
|
|
8
|
+
TBody,
|
|
9
|
+
} from '../../atoms/Table';
|
|
10
|
+
import { Header } from './Header';
|
|
11
|
+
import { Row } from './Row';
|
|
12
|
+
import { HeadersType } from './types';
|
|
13
|
+
import { Footer } from './Footer';
|
|
14
|
+
import { Skeleton } from '../../atoms/Skeleton';
|
|
15
|
+
import { getData, removeElement } from './utils';
|
|
16
|
+
|
|
17
|
+
export interface DataGridProps<Data> {
|
|
18
|
+
headers: HeadersType<Data>[];
|
|
19
|
+
data: Data[];
|
|
20
|
+
/** Unique identifier for row data */
|
|
21
|
+
rowKeyExtractor: (data: Data) => string;
|
|
22
|
+
toolbarRightIcons?: React.ReactNode;
|
|
23
|
+
toolbarFooter?: React.ReactNode;
|
|
24
|
+
toolbarTitle: string;
|
|
25
|
+
/** Enable rows selection */
|
|
26
|
+
selectable?: boolean;
|
|
27
|
+
/** Selected items */
|
|
28
|
+
selectedRows?: Data[];
|
|
29
|
+
/** Selection handler */
|
|
30
|
+
onSelectedRows?: (data: Data[] | ((prevState: Data[]) => Data[])) => void;
|
|
31
|
+
/** Shows pagination controls */
|
|
32
|
+
pagination?: boolean;
|
|
33
|
+
/** Results per page */
|
|
34
|
+
rowsPerPage?: number;
|
|
35
|
+
/** Results per page handler */
|
|
36
|
+
onRowsPerPageChange?: (value: number) => void;
|
|
37
|
+
rowsPerPageOptions?: number[];
|
|
38
|
+
rowsPerPageLabel?: (value: number) => string;
|
|
39
|
+
/** Export button label */
|
|
40
|
+
exportLabel?: string;
|
|
41
|
+
exportFunction?: () => void;
|
|
42
|
+
/** Total data elements. Only specify this property if your data is server-side */
|
|
43
|
+
rowsCount?: number;
|
|
44
|
+
/** Current page. Always start in 0 */
|
|
45
|
+
page?: number;
|
|
46
|
+
/** Current page handler */
|
|
47
|
+
onPageChange?: (page: number) => void;
|
|
48
|
+
/** Loading state. The amount of skeleton rows is based on current rowsPerPage */
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
/** Custom skeleton component for better visual */
|
|
51
|
+
skeletonComponent?: React.ReactNode;
|
|
52
|
+
/** CSS style spread to TableContainer */
|
|
53
|
+
style?: CSSProperties;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Note: Consider memoizing functions for a better performance */
|
|
57
|
+
const DataGrid = <Data extends unknown>({
|
|
58
|
+
headers,
|
|
59
|
+
data,
|
|
60
|
+
rowKeyExtractor,
|
|
61
|
+
toolbarTitle,
|
|
62
|
+
toolbarFooter,
|
|
63
|
+
toolbarRightIcons,
|
|
64
|
+
selectable = false,
|
|
65
|
+
selectedRows = [],
|
|
66
|
+
onSelectedRows,
|
|
67
|
+
pagination = false,
|
|
68
|
+
rowsPerPage = 10,
|
|
69
|
+
onRowsPerPageChange,
|
|
70
|
+
rowsPerPageOptions: _rowsPerPageOptions,
|
|
71
|
+
rowsPerPageLabel: _rowsPerPageLabel,
|
|
72
|
+
exportLabel = 'Exportar',
|
|
73
|
+
exportFunction,
|
|
74
|
+
rowsCount,
|
|
75
|
+
page = 0,
|
|
76
|
+
onPageChange,
|
|
77
|
+
loading = false,
|
|
78
|
+
skeletonComponent,
|
|
79
|
+
style,
|
|
80
|
+
}: DataGridProps<Data>): JSX.Element => {
|
|
81
|
+
if (selectable && (!selectedRows || !onSelectedRows)) {
|
|
82
|
+
throw new Error(
|
|
83
|
+
'[DataGrid] You should specify selection handlers (selectedRows, onSelectedRows)'
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const rowsPerPageLabel = React.useCallback(
|
|
88
|
+
value =>
|
|
89
|
+
_rowsPerPageLabel
|
|
90
|
+
? _rowsPerPageLabel(value)
|
|
91
|
+
: `Exibir por página: ${value} itens`,
|
|
92
|
+
[_rowsPerPageLabel]
|
|
93
|
+
);
|
|
94
|
+
const rowsPerPageOptions = React.useMemo(
|
|
95
|
+
() => _rowsPerPageOptions ?? [10, 25, 50],
|
|
96
|
+
[_rowsPerPageOptions]
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const handleSelect = React.useCallback(
|
|
100
|
+
(current, checked) => {
|
|
101
|
+
if (checked) {
|
|
102
|
+
onSelectedRows?.(prevState => [...prevState, current]);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
onSelectedRows?.(prevState => {
|
|
107
|
+
const idx = prevState.findIndex(
|
|
108
|
+
el => rowKeyExtractor(el) === rowKeyExtractor(current)
|
|
109
|
+
);
|
|
110
|
+
return [...removeElement(prevState, idx)];
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
[onSelectedRows, rowKeyExtractor]
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<TableContainer style={style}>
|
|
118
|
+
<TableToolbar
|
|
119
|
+
title={toolbarTitle}
|
|
120
|
+
rightIcons={toolbarRightIcons}
|
|
121
|
+
footer={toolbarFooter}
|
|
122
|
+
/>
|
|
123
|
+
<Table>
|
|
124
|
+
<Header
|
|
125
|
+
selectable={selectable}
|
|
126
|
+
headers={headers}
|
|
127
|
+
data={data}
|
|
128
|
+
rowsCount={rowsCount ?? data.length}
|
|
129
|
+
rowKeyExtractor={rowKeyExtractor}
|
|
130
|
+
selectedRows={selectedRows}
|
|
131
|
+
onSelected={onSelectedRows}
|
|
132
|
+
/>
|
|
133
|
+
|
|
134
|
+
{!loading ? (
|
|
135
|
+
<TBody>
|
|
136
|
+
{getData(data, rowsCount, page, rowsPerPage).map(item => (
|
|
137
|
+
<Row
|
|
138
|
+
key={rowKeyExtractor(item)}
|
|
139
|
+
rowKeyExtractor={rowKeyExtractor}
|
|
140
|
+
handleSelect={handleSelect}
|
|
141
|
+
selectable={selectable}
|
|
142
|
+
headers={headers}
|
|
143
|
+
data={item}
|
|
144
|
+
checked={selectedRows?.some(
|
|
145
|
+
sel => rowKeyExtractor(sel) === rowKeyExtractor(item)
|
|
146
|
+
)}
|
|
147
|
+
/>
|
|
148
|
+
))}
|
|
149
|
+
</TBody>
|
|
150
|
+
) : (
|
|
151
|
+
<TBody>
|
|
152
|
+
{[...Array(rowsPerPage).keys()].map(idx => (
|
|
153
|
+
<Tr key={`skeleton-${idx}`}>
|
|
154
|
+
<Td colSpan={99} style={{ padding: 0 }}>
|
|
155
|
+
{skeletonComponent ?? (
|
|
156
|
+
<Skeleton height={55} radius="mili" animation="wave">
|
|
157
|
+
<div style={{ width: '100%' }} />
|
|
158
|
+
</Skeleton>
|
|
159
|
+
)}
|
|
160
|
+
</Td>
|
|
161
|
+
</Tr>
|
|
162
|
+
))}
|
|
163
|
+
</TBody>
|
|
164
|
+
)}
|
|
165
|
+
|
|
166
|
+
<Footer
|
|
167
|
+
exportFunction={exportFunction}
|
|
168
|
+
exportLabel={exportLabel}
|
|
169
|
+
rowsPerPageLabel={rowsPerPageLabel}
|
|
170
|
+
rowsPerPage={rowsPerPage}
|
|
171
|
+
onRowsPerPageChange={onRowsPerPageChange}
|
|
172
|
+
rowsPerPageOptions={rowsPerPageOptions}
|
|
173
|
+
rowsCount={rowsCount ?? data.length}
|
|
174
|
+
page={page}
|
|
175
|
+
onPageChange={onPageChange}
|
|
176
|
+
pagination={pagination}
|
|
177
|
+
/>
|
|
178
|
+
</Table>
|
|
179
|
+
</TableContainer>
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
export default DataGrid;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Button, Icon, Select, Text } from '@tecsinapse/react-web-kit';
|
|
3
|
+
import { TFoot, Tr } from '../../../atoms/Table';
|
|
4
|
+
import {
|
|
5
|
+
FooterContainer,
|
|
6
|
+
FooterContainerEnd,
|
|
7
|
+
FooterContainerStart,
|
|
8
|
+
HoveredText,
|
|
9
|
+
NavigationButton,
|
|
10
|
+
PageButton,
|
|
11
|
+
PagesContainer,
|
|
12
|
+
SelectContainer,
|
|
13
|
+
TdFooterStyled,
|
|
14
|
+
} from './styled';
|
|
15
|
+
|
|
16
|
+
interface DataGridFooterProps {
|
|
17
|
+
rowsPerPage: number;
|
|
18
|
+
onRowsPerPageChange?: (value: number) => void;
|
|
19
|
+
rowsPerPageOptions: number[];
|
|
20
|
+
rowsPerPageLabel: (value: number) => string;
|
|
21
|
+
exportLabel?: string;
|
|
22
|
+
exportFunction?: () => void;
|
|
23
|
+
/** Total data elements */
|
|
24
|
+
rowsCount: number;
|
|
25
|
+
page: number;
|
|
26
|
+
onPageChange?: (page: number) => void;
|
|
27
|
+
pagination: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const Footer: React.FC<DataGridFooterProps> = ({
|
|
31
|
+
rowsPerPage,
|
|
32
|
+
onRowsPerPageChange,
|
|
33
|
+
rowsPerPageOptions,
|
|
34
|
+
rowsPerPageLabel,
|
|
35
|
+
exportFunction,
|
|
36
|
+
exportLabel,
|
|
37
|
+
rowsCount,
|
|
38
|
+
page,
|
|
39
|
+
onPageChange,
|
|
40
|
+
pagination,
|
|
41
|
+
}) => {
|
|
42
|
+
if (pagination && (!onPageChange || !onRowsPerPageChange)) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
'[DataGrid] You should specify pagination handlers (onPageChange, onRowsPerPageChange)'
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const getPaginationSlice = (): { start: number; end: number } => {
|
|
49
|
+
const totalPages = Math.ceil(rowsCount / rowsPerPage);
|
|
50
|
+
if (totalPages < 4) {
|
|
51
|
+
return { start: 0, end: totalPages };
|
|
52
|
+
}
|
|
53
|
+
if (page === 0) {
|
|
54
|
+
return { start: page, end: page + 3 };
|
|
55
|
+
}
|
|
56
|
+
if (page === totalPages - 1) {
|
|
57
|
+
return { start: page - 2, end: page + 1 };
|
|
58
|
+
}
|
|
59
|
+
return { start: page - 1, end: page + 2 };
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<TFoot>
|
|
64
|
+
<Tr>
|
|
65
|
+
<TdFooterStyled colSpan={99}>
|
|
66
|
+
<FooterContainer>
|
|
67
|
+
<FooterContainerStart>
|
|
68
|
+
{pagination && (
|
|
69
|
+
<SelectContainer>
|
|
70
|
+
<Select
|
|
71
|
+
options={rowsPerPageOptions}
|
|
72
|
+
onSelect={value => onRowsPerPageChange?.(value as number)}
|
|
73
|
+
value={rowsPerPage}
|
|
74
|
+
type={'single'}
|
|
75
|
+
keyExtractor={value => String(value)}
|
|
76
|
+
labelExtractor={rowsPerPageLabel}
|
|
77
|
+
/>
|
|
78
|
+
</SelectContainer>
|
|
79
|
+
)}
|
|
80
|
+
{exportFunction && (
|
|
81
|
+
<HoveredText>
|
|
82
|
+
<Button variant="outlined" onPress={() => exportFunction()}>
|
|
83
|
+
<Text fontColor="orange" fontWeight="bold">
|
|
84
|
+
{exportLabel}
|
|
85
|
+
</Text>
|
|
86
|
+
</Button>
|
|
87
|
+
</HoveredText>
|
|
88
|
+
)}
|
|
89
|
+
</FooterContainerStart>
|
|
90
|
+
{pagination && (
|
|
91
|
+
<FooterContainerEnd>
|
|
92
|
+
<NavigationButton
|
|
93
|
+
onPress={() => onPageChange?.(page - 1)}
|
|
94
|
+
disabled={page === 0}
|
|
95
|
+
>
|
|
96
|
+
<Icon
|
|
97
|
+
name={'chevron-left'}
|
|
98
|
+
type={'material-community'}
|
|
99
|
+
fontColor={'light'}
|
|
100
|
+
/>
|
|
101
|
+
</NavigationButton>
|
|
102
|
+
<PagesContainer>
|
|
103
|
+
{[...Array(Math.ceil(rowsCount / rowsPerPage)).keys()]
|
|
104
|
+
.slice(getPaginationSlice().start, getPaginationSlice().end)
|
|
105
|
+
.map(value => (
|
|
106
|
+
<HoveredText key={`page-${value}`}>
|
|
107
|
+
<PageButton
|
|
108
|
+
variant={page === value ? 'outlined' : 'text'}
|
|
109
|
+
onPress={() => onPageChange?.(value)}
|
|
110
|
+
>
|
|
111
|
+
<Text fontColor="medium" fontWeight="bold">
|
|
112
|
+
{value + 1}
|
|
113
|
+
</Text>
|
|
114
|
+
</PageButton>
|
|
115
|
+
</HoveredText>
|
|
116
|
+
))}
|
|
117
|
+
</PagesContainer>
|
|
118
|
+
<NavigationButton
|
|
119
|
+
onPress={() => onPageChange?.(page + 1)}
|
|
120
|
+
disabled={page === Math.ceil(rowsCount / rowsPerPage) - 1}
|
|
121
|
+
>
|
|
122
|
+
<Icon
|
|
123
|
+
name={'chevron-right'}
|
|
124
|
+
type={'material-community'}
|
|
125
|
+
fontColor={'light'}
|
|
126
|
+
/>
|
|
127
|
+
</NavigationButton>
|
|
128
|
+
</FooterContainerEnd>
|
|
129
|
+
)}
|
|
130
|
+
</FooterContainer>
|
|
131
|
+
</TdFooterStyled>
|
|
132
|
+
</Tr>
|
|
133
|
+
</TFoot>
|
|
134
|
+
);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export default React.memo(Footer);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Footer } from './Footer';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import styled from '@emotion/styled';
|
|
2
|
+
import { default as nativeStyled } from '@emotion/native';
|
|
3
|
+
import { StyleProps } from '@tecsinapse/react-core';
|
|
4
|
+
import { Td } from '../../../atoms/Table';
|
|
5
|
+
import { Button } from '../../../atoms/Button';
|
|
6
|
+
|
|
7
|
+
export const TdFooterStyled = styled(Td)<Partial<StyleProps>>`
|
|
8
|
+
padding: ${({ theme }) => theme.spacing.centi} 0 0 0;
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
export const FlexContainer = styled('div')`
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-grow: 1;
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
export const FooterContainer = styled(FlexContainer)`
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
align-items: center;
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
export const FooterContainerStart = styled(FlexContainer)`
|
|
22
|
+
justify-content: flex-start;
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
export const FooterContainerEnd = styled(FlexContainer)`
|
|
26
|
+
justify-content: flex-end;
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
export const SelectContainer = styled('div')<Partial<StyleProps>>`
|
|
30
|
+
margin-right: ${({ theme }) => theme.spacing.deca};
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export const NavigationButton = nativeStyled(Button)<Partial<StyleProps>>`
|
|
34
|
+
padding: ${({ theme }) => theme.spacing.centi};
|
|
35
|
+
border-radius: ${({ theme }) => theme.borderRadius.mili};
|
|
36
|
+
justify-content: center;
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
// Se o botão estiver ativo, renderizar outlined, caso contrario o botão é text
|
|
40
|
+
export const PageButton = nativeStyled(NavigationButton)<Partial<StyleProps>>`
|
|
41
|
+
padding-right: ${({ theme }) => theme.spacing.deca};
|
|
42
|
+
padding-left: ${({ theme }) => theme.spacing.deca};
|
|
43
|
+
border-radius: ${({ theme }) => theme.borderRadius.mili};
|
|
44
|
+
justify-content: center;
|
|
45
|
+
margin-left: ${({ theme }) => theme.spacing.micro};
|
|
46
|
+
margin-right: ${({ theme }) => theme.spacing.micro};
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
export const PagesContainer = styled('div')<Partial<StyleProps>>`
|
|
50
|
+
margin: 0 20px;
|
|
51
|
+
display: flex;
|
|
52
|
+
`;
|
|
53
|
+
|
|
54
|
+
export const HoveredText = styled('div')<Partial<StyleProps>>`
|
|
55
|
+
user-select: none;
|
|
56
|
+
&:hover * {
|
|
57
|
+
color: ${({ theme }) => theme.font.color.light};
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Checkbox, Icon, PressableSurface } from '@tecsinapse/react-core';
|
|
3
|
+
import { Th, THead, Tr } from '../../../atoms/Table';
|
|
4
|
+
import { CheckboxHeader } from './styled';
|
|
5
|
+
import { HeadersType } from '../types';
|
|
6
|
+
import {
|
|
7
|
+
findCurrentItemsOnData,
|
|
8
|
+
findUnselectedItemsOnData,
|
|
9
|
+
getIconColor,
|
|
10
|
+
getIconSuffix,
|
|
11
|
+
NEXT_STATE,
|
|
12
|
+
} from './utils';
|
|
13
|
+
|
|
14
|
+
export interface DataGridHeaderProps<Data> {
|
|
15
|
+
headers: HeadersType<Data>[];
|
|
16
|
+
data: Data[];
|
|
17
|
+
selectedRows: Data[];
|
|
18
|
+
onSelected?: (data: Data[]) => void;
|
|
19
|
+
rowKeyExtractor: (data: Data) => string;
|
|
20
|
+
rowsCount: number;
|
|
21
|
+
selectable?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const Header = <Data extends unknown>({
|
|
25
|
+
selectable,
|
|
26
|
+
rowsCount,
|
|
27
|
+
headers,
|
|
28
|
+
data,
|
|
29
|
+
rowKeyExtractor,
|
|
30
|
+
selectedRows,
|
|
31
|
+
onSelected,
|
|
32
|
+
}: DataGridHeaderProps<Data>): JSX.Element => {
|
|
33
|
+
const [sortDirection, setSortDirection] = React.useState<string>(
|
|
34
|
+
NEXT_STATE.initial
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const handleSortDirection = sort => {
|
|
38
|
+
sort(NEXT_STATE[sortDirection]);
|
|
39
|
+
setSortDirection(NEXT_STATE[sortDirection]);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const handleSelectAll = checked => {
|
|
43
|
+
if (!checked) {
|
|
44
|
+
onSelected?.([]);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const currentItemsOnData = findCurrentItemsOnData(
|
|
49
|
+
selectedRows,
|
|
50
|
+
data,
|
|
51
|
+
rowKeyExtractor
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const unselectedItemsOnData = findUnselectedItemsOnData(
|
|
55
|
+
selectedRows,
|
|
56
|
+
data,
|
|
57
|
+
rowKeyExtractor
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (checked && selectedRows.length < 1) {
|
|
61
|
+
onSelected?.(data);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (checked && currentItemsOnData.length < 1) {
|
|
65
|
+
onSelected?.(unselectedItemsOnData.concat(selectedRows));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
onSelected?.(selectedRows.concat(unselectedItemsOnData));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<THead>
|
|
73
|
+
<Tr>
|
|
74
|
+
{selectable && (
|
|
75
|
+
<CheckboxHeader>
|
|
76
|
+
<Checkbox
|
|
77
|
+
checked={rowsCount === selectedRows?.length}
|
|
78
|
+
onChange={handleSelectAll}
|
|
79
|
+
/>
|
|
80
|
+
</CheckboxHeader>
|
|
81
|
+
)}
|
|
82
|
+
{headers.map(({ label, sort, justifyContent = 'flex-start' }) => (
|
|
83
|
+
<Th key={label}>
|
|
84
|
+
<div
|
|
85
|
+
style={{
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent,
|
|
89
|
+
}}
|
|
90
|
+
>
|
|
91
|
+
{label}
|
|
92
|
+
{sort && (
|
|
93
|
+
<div style={{ marginLeft: 8 }}>
|
|
94
|
+
<PressableSurface onPress={() => handleSortDirection(sort)}>
|
|
95
|
+
<Icon
|
|
96
|
+
name={`sort-alphabetical-${getIconSuffix(sortDirection)}`}
|
|
97
|
+
type={'material-community'}
|
|
98
|
+
fontColor={getIconColor(sortDirection)}
|
|
99
|
+
/>
|
|
100
|
+
</PressableSurface>
|
|
101
|
+
</div>
|
|
102
|
+
)}
|
|
103
|
+
</div>
|
|
104
|
+
</Th>
|
|
105
|
+
))}
|
|
106
|
+
</Tr>
|
|
107
|
+
</THead>
|
|
108
|
+
);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export default Header;
|