@veeqo/ui 11.1.0 → 11.2.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/components/DataGrid/DataGrid.cjs +17 -3
- package/dist/components/DataGrid/DataGrid.cjs.map +1 -1
- package/dist/components/DataGrid/DataGrid.d.ts +1 -1
- package/dist/components/DataGrid/DataGrid.js +17 -3
- package/dist/components/DataGrid/DataGrid.js.map +1 -1
- package/dist/components/DataGrid/components/Body/Body.cjs +1 -1
- package/dist/components/DataGrid/components/Body/Body.cjs.map +1 -1
- package/dist/components/DataGrid/components/Body/Body.js +1 -1
- package/dist/components/DataGrid/components/Body/Body.js.map +1 -1
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.cjs +34 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.cjs.map +1 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.d.ts +24 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.js +28 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.js.map +1 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss.cjs +9 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss.cjs.map +1 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss.js +7 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss.js.map +1 -0
- package/dist/components/DataGrid/components/Body/EmptyBody/index.d.ts +1 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBody.cjs +21 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBody.cjs.map +1 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBody.d.ts +21 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBody.js +15 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBody.js.map +1 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.cjs +46 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.cjs.map +1 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.d.ts +13 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.js +40 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.js.map +1 -0
- package/dist/components/DataGrid/components/Body/LoadingBody/index.d.ts +1 -0
- package/dist/components/DataGrid/components/Body/Row/Row.cjs.map +1 -1
- package/dist/components/DataGrid/components/Body/Row/Row.d.ts +6 -3
- package/dist/components/DataGrid/components/Body/Row/Row.js.map +1 -1
- package/dist/components/DataGrid/components/Body/index.d.ts +2 -0
- package/dist/components/DataGrid/components/Footer/Footer.cjs +1 -1
- package/dist/components/DataGrid/components/Footer/Footer.cjs.map +1 -1
- package/dist/components/DataGrid/components/Footer/Footer.js +1 -1
- package/dist/components/DataGrid/components/Footer/Footer.js.map +1 -1
- package/dist/components/DataGrid/types/DataGridProps.d.ts +21 -0
- package/dist/components/DataGrid/types/EmptyState.d.ts +6 -0
- package/dist/components/DataGrid/types/index.d.ts +1 -0
- package/dist/components/Skeleton/Skeleton.cjs +7 -12
- package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +4 -4
- package/dist/components/Skeleton/Skeleton.js +6 -11
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +9 -0
- package/dist/components/Skeleton/Skeleton.module.scss.cjs.map +1 -0
- package/dist/components/Skeleton/Skeleton.module.scss.js +7 -0
- package/dist/components/Skeleton/Skeleton.module.scss.js.map +1 -0
- package/dist/utils/assignCssVars.cjs +26 -0
- package/dist/utils/assignCssVars.cjs.map +1 -0
- package/dist/utils/assignCssVars.d.ts +13 -0
- package/dist/utils/assignCssVars.js +24 -0
- package/dist/utils/assignCssVars.js.map +1 -0
- package/package.json +1 -1
|
@@ -10,6 +10,8 @@ var getAriaRoles = require('./utils/getAriaRoles.cjs');
|
|
|
10
10
|
var Columns = require('./components/Columns/Columns.cjs');
|
|
11
11
|
var Header = require('./components/Header/Header.cjs');
|
|
12
12
|
var Body = require('./components/Body/Body.cjs');
|
|
13
|
+
var LoadingBody = require('./components/Body/LoadingBody/LoadingBody.cjs');
|
|
14
|
+
var EmptyBody = require('./components/Body/EmptyBody/EmptyBody.cjs');
|
|
13
15
|
var Footer = require('./components/Footer/Footer.cjs');
|
|
14
16
|
var GridContainer = require('./components/GridContainer/GridContainer.cjs');
|
|
15
17
|
var useSortingState = require('./hooks/useSortingState.cjs');
|
|
@@ -42,13 +44,13 @@ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
|
42
44
|
*
|
|
43
45
|
* *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
|
|
44
46
|
*/
|
|
45
|
-
const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, 'aria-label': ariaLabel, }) => {
|
|
47
|
+
const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, isLoading, loadingRowCount, emptyState, emptySlot, 'aria-label': ariaLabel, }) => {
|
|
46
48
|
/**
|
|
47
49
|
* Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.
|
|
48
50
|
*/
|
|
49
51
|
const containerRef = React.useRef(null);
|
|
50
52
|
const tableRef = React.useRef(null);
|
|
51
|
-
const showFooter = React.useMemo(() => columns.some((column) => column.renderFooter), [columns]);
|
|
53
|
+
const showFooter = React.useMemo(() => !isLoading && columns.some((column) => column.renderFooter), [isLoading, columns]);
|
|
52
54
|
const ariaRoles = React.useMemo(() => getAriaRoles.getAriaRoles({ enableKeyboardNavigation, rowGrouping }), [enableKeyboardNavigation, rowGrouping]);
|
|
53
55
|
const enableColumnResizing = React.useMemo(() => resizeMode !== 'off', [resizeMode]);
|
|
54
56
|
/**
|
|
@@ -129,10 +131,22 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
|
|
|
129
131
|
*/
|
|
130
132
|
useDragToScroll.useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });
|
|
131
133
|
useKeyboardNavigation.useKeyboardNavigation({ tableRef, enableKeyboardNavigation });
|
|
134
|
+
const renderBody = () => {
|
|
135
|
+
if (isLoading) {
|
|
136
|
+
return React__default.default.createElement(LoadingBody.LoadingBody, { table: table, loadingRowCount: loadingRowCount !== null && loadingRowCount !== undefined ? loadingRowCount : 5, striped: striped });
|
|
137
|
+
}
|
|
138
|
+
if (data.length === 0) {
|
|
139
|
+
return React__default.default.createElement(EmptyBody.EmptyBody, { table: table, emptyState: emptyState, emptySlot: emptySlot });
|
|
140
|
+
}
|
|
141
|
+
if (table.getState().columnSizingInfo.isResizingColumn) {
|
|
142
|
+
return React__default.default.createElement(Body.MemoizedBody, { table: table, ariaRoles: ariaRoles, striped: striped });
|
|
143
|
+
}
|
|
144
|
+
return React__default.default.createElement(Body.Body, { table: table, ariaRoles: ariaRoles, striped: striped });
|
|
145
|
+
};
|
|
132
146
|
return (React__default.default.createElement(GridContainer.GridContainer, { containerRef: containerRef, tableRef: tableRef, borderMode: borderMode, containerStyles: { ...containerStyle, ...pinnedColumnLayoutStyles }, ariaRoles: ariaRoles, enableResizeableColumns: enableColumnResizing, density: density, table: table, "aria-label": ariaLabel },
|
|
133
147
|
enableColumnResizing && React__default.default.createElement(Columns.Columns, { table: table }),
|
|
134
148
|
React__default.default.createElement(Header.Header, { table: table }),
|
|
135
|
-
|
|
149
|
+
renderBody(),
|
|
136
150
|
showFooter && React__default.default.createElement(Footer.Footer, { table: table, ariaRoles: ariaRoles })));
|
|
137
151
|
};
|
|
138
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid.cjs","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["useRef","useMemo","getAriaRoles","useSelectionState","useSortingState","useExpandedState","useColumnState","useColumnWidthState","useReactTable","getCoreRowModel","getExpandedRowModel","usePinnedColumnLayout","useDragToScroll","useKeyboardNavigation","React","GridContainer","Columns","Header","MemoizedBody","Body","Footer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataGrid.cjs","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { EmptyBody, LoadingBody, MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n isLoading,\n loadingRowCount,\n\n emptyState,\n emptySlot,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(\n () => !isLoading && columns.some((column) => column.renderFooter),\n [isLoading, columns],\n );\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n const renderBody = () => {\n if (isLoading) {\n return <LoadingBody table={table} loadingRowCount={loadingRowCount ?? 5} striped={striped} />;\n }\n\n if (data.length === 0) {\n return <EmptyBody table={table} emptyState={emptyState} emptySlot={emptySlot} />;\n }\n\n if (table.getState().columnSizingInfo.isResizingColumn) {\n return <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />;\n }\n\n return <Body table={table} ariaRoles={ariaRoles} striped={striped} />;\n };\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {renderBody()}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["useRef","useMemo","getAriaRoles","useSelectionState","useSortingState","useExpandedState","useColumnState","useColumnWidthState","useReactTable","getCoreRowModel","getExpandedRowModel","usePinnedColumnLayout","useDragToScroll","useKeyboardNavigation","React","LoadingBody","EmptyBody","MemoizedBody","Body","GridContainer","Columns","Header","Footer"],"mappings":"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"}
|
|
@@ -18,4 +18,4 @@ import { DataGridProps } from './types';
|
|
|
18
18
|
*
|
|
19
19
|
* *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
|
|
20
20
|
*/
|
|
21
|
-
export declare const DataGrid: ({ density, striped, borderMode, resizeMode, containerStyle, enableKeyboardNavigation, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, "aria-label": ariaLabel, }: DataGridProps) => React.JSX.Element;
|
|
21
|
+
export declare const DataGrid: ({ density, striped, borderMode, resizeMode, containerStyle, enableKeyboardNavigation, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, isLoading, loadingRowCount, emptyState, emptySlot, "aria-label": ariaLabel, }: DataGridProps) => React.JSX.Element;
|
|
@@ -8,6 +8,8 @@ import { getAriaRoles } from './utils/getAriaRoles.js';
|
|
|
8
8
|
import { Columns } from './components/Columns/Columns.js';
|
|
9
9
|
import { Header } from './components/Header/Header.js';
|
|
10
10
|
import { MemoizedBody, Body } from './components/Body/Body.js';
|
|
11
|
+
import { LoadingBody } from './components/Body/LoadingBody/LoadingBody.js';
|
|
12
|
+
import { EmptyBody } from './components/Body/EmptyBody/EmptyBody.js';
|
|
11
13
|
import { Footer } from './components/Footer/Footer.js';
|
|
12
14
|
import { GridContainer } from './components/GridContainer/GridContainer.js';
|
|
13
15
|
import { useSortingState } from './hooks/useSortingState.js';
|
|
@@ -36,13 +38,13 @@ import { useExpandedState } from './hooks/useExpandedState.js';
|
|
|
36
38
|
*
|
|
37
39
|
* *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
|
|
38
40
|
*/
|
|
39
|
-
const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, 'aria-label': ariaLabel, }) => {
|
|
41
|
+
const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, isLoading, loadingRowCount, emptyState, emptySlot, 'aria-label': ariaLabel, }) => {
|
|
40
42
|
/**
|
|
41
43
|
* Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.
|
|
42
44
|
*/
|
|
43
45
|
const containerRef = useRef(null);
|
|
44
46
|
const tableRef = useRef(null);
|
|
45
|
-
const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);
|
|
47
|
+
const showFooter = useMemo(() => !isLoading && columns.some((column) => column.renderFooter), [isLoading, columns]);
|
|
46
48
|
const ariaRoles = useMemo(() => getAriaRoles({ enableKeyboardNavigation, rowGrouping }), [enableKeyboardNavigation, rowGrouping]);
|
|
47
49
|
const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);
|
|
48
50
|
/**
|
|
@@ -123,10 +125,22 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
|
|
|
123
125
|
*/
|
|
124
126
|
useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });
|
|
125
127
|
useKeyboardNavigation({ tableRef, enableKeyboardNavigation });
|
|
128
|
+
const renderBody = () => {
|
|
129
|
+
if (isLoading) {
|
|
130
|
+
return React__default.createElement(LoadingBody, { table: table, loadingRowCount: loadingRowCount !== null && loadingRowCount !== undefined ? loadingRowCount : 5, striped: striped });
|
|
131
|
+
}
|
|
132
|
+
if (data.length === 0) {
|
|
133
|
+
return React__default.createElement(EmptyBody, { table: table, emptyState: emptyState, emptySlot: emptySlot });
|
|
134
|
+
}
|
|
135
|
+
if (table.getState().columnSizingInfo.isResizingColumn) {
|
|
136
|
+
return React__default.createElement(MemoizedBody, { table: table, ariaRoles: ariaRoles, striped: striped });
|
|
137
|
+
}
|
|
138
|
+
return React__default.createElement(Body, { table: table, ariaRoles: ariaRoles, striped: striped });
|
|
139
|
+
};
|
|
126
140
|
return (React__default.createElement(GridContainer, { containerRef: containerRef, tableRef: tableRef, borderMode: borderMode, containerStyles: { ...containerStyle, ...pinnedColumnLayoutStyles }, ariaRoles: ariaRoles, enableResizeableColumns: enableColumnResizing, density: density, table: table, "aria-label": ariaLabel },
|
|
127
141
|
enableColumnResizing && React__default.createElement(Columns, { table: table }),
|
|
128
142
|
React__default.createElement(Header, { table: table }),
|
|
129
|
-
|
|
143
|
+
renderBody(),
|
|
130
144
|
showFooter && React__default.createElement(Footer, { table: table, ariaRoles: ariaRoles })));
|
|
131
145
|
};
|
|
132
146
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAG,MAAM,EAChB,OAAO,GAAG,IAAI,EACd,UAAU,GAAG,MAAM,EACnB,UAAU,GAAG,KAAK,EAClB,cAAc,EACd,wBAAwB,GAAG,KAAK,EAEhC,OAAO,EACP,aAAa,EACb,cAAc,EACd,aAAa,EAEb,IAAI,EACJ,QAAQ,EAER,SAAS,EACT,aAAa,EAEb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAElB,WAAW,EAEX,YAAY,EACZ,gBAAgB,EAEhB,YAAY,EAAE,SAAS,GACT,KAAI;AAClB;;AAEG;AACH,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;AACjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,OAAO,CACvB,MAAM,YAAY,CAAC,EAAE,wBAAwB,EAAE,WAAW,EAAE,CAAC,EAC7D,CAAC,wBAAwB,EAAE,WAAW,CAAC,CACxC;AACD,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,UAAU,KAAK,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;AAE9E;;AAEG;IACH,MAAM,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,YAAY,EAAE,oBAAoB,EAAE,GACvF,iBAAiB,CAAC;QAChB,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,kBAAkB;AACnB,KAAA,CAAC;IAEJ,MAAM,EACJ,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,eAAe,GAChB,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAE1D,IAAA,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,GAChF,gBAAgB,CAAC,WAAW,CAAC;AAE/B;;AAEG;IACH,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC;QAC/F,OAAO;QACP,aAAa;QACb,cAAc;QACd,aAAa;QACb,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;AACzC,KAAA,CAAC;AAEF,IAAA,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,mBAAmB,CAAC;QACjE,uBAAuB;QACvB,YAAY;QACZ,gBAAgB;AACjB,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,KAAK,GAAG,aAAa,CAAM;QAC/B,IAAI;AACJ,QAAA,OAAO,EAAE,uBAAuB;;QAGhC,gBAAgB,EAAE,UAAU,KAAK,KAAK,GAAG,SAAS,GAAG,UAAU;QAC/D,oBAAoB;QACpB,oBAAoB;;QAGpB,QAAQ;QACR,eAAe,EAAE,eAAe,EAAE;;QAGlC,aAAa;QACb,oBAAoB;QACpB,iBAAiB;QACjB,aAAa;QACb,eAAe;;AAGf,QAAA,mBAAmB,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;;QAG/E,kBAAkB;QAClB,uBAAuB;QACvB,oBAAoB;;QAGpB,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,eAAe;QACf,mBAAmB,EAAE,eAAe,GAAG,mBAAmB,EAAE,GAAG,SAAS;;AAGxE,QAAA,KAAK,EAAE;YACL,WAAW;YACX,gBAAgB;YAChB,aAAa;YACb,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,YAAY;AACb,SAAA;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,EAAE,wBAAwB,EAAE,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,CAAC;AAErE;;AAEG;IACH,eAAe,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,0BAA0B,EAAE,CAAC;AACzF,IAAA,qBAAqB,CAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;AAE7D,IAAA,QACEA,cAAC,CAAA,aAAA,CAAA,aAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,wBAAwB,EAAE,EACnE,SAAS,EAAE,SAAS,EACpB,uBAAuB,EAAE,oBAAoB,EAC7C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,gBACA,SAAS,EAAA;AAGpB,QAAA,oBAAoB,IAAIA,cAAC,CAAA,aAAA,CAAA,OAAO,IAAC,KAAK,EAAE,KAAK,EAAI,CAAA;AAGlD,QAAAA,cAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,KAAK,EAAE,KAAK,EAAI,CAAA;QAGvB,KAAK,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,IACjDA,cAAC,CAAA,aAAA,CAAA,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAA,CAAI,KAEtEA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAC,EAAA,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAA,CAAI,CAC/D;AAGA,QAAA,UAAU,IAAIA,cAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAI,CAAA,CAC/C;AAEpB;;;;"}
|
|
1
|
+
{"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { EmptyBody, LoadingBody, MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n isLoading,\n loadingRowCount,\n\n emptyState,\n emptySlot,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(\n () => !isLoading && columns.some((column) => column.renderFooter),\n [isLoading, columns],\n );\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n const renderBody = () => {\n if (isLoading) {\n return <LoadingBody table={table} loadingRowCount={loadingRowCount ?? 5} striped={striped} />;\n }\n\n if (data.length === 0) {\n return <EmptyBody table={table} emptyState={emptyState} emptySlot={emptySlot} />;\n }\n\n if (table.getState().columnSizingInfo.isResizingColumn) {\n return <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />;\n }\n\n return <Body table={table} ariaRoles={ariaRoles} striped={striped} />;\n };\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {renderBody()}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ const Body = ({ table, striped, ariaRoles }) => {
|
|
|
12
12
|
var _a, _b;
|
|
13
13
|
const enableExpanding = (_a = table.options.enableExpanding) !== null && _a !== undefined ? _a : false;
|
|
14
14
|
const enableRowSelection = (_b = table.options.enableRowSelection) !== null && _b !== undefined ? _b : false;
|
|
15
|
-
return (React__default.default.createElement("tbody", { className: "data-grid-body" }, table.getRowModel().rows.map((row) => (React__default.default.createElement(Row.Row, { key: row.id, row: row, striped: striped, enableExpanding: enableExpanding }, row.getVisibleCells().map((cell) => (React__default.default.createElement(BodyCell.BodyCell, { cell: cell, key: cell.id, ariaRoles: ariaRoles, enableExpanding: enableExpanding, enableRowSelection: !!enableRowSelection }))))))));
|
|
15
|
+
return (React__default.default.createElement("tbody", { className: "data-grid-body", "aria-busy": "false" }, table.getRowModel().rows.map((row) => (React__default.default.createElement(Row.Row, { key: row.id, row: row, striped: striped, enableExpanding: enableExpanding }, row.getVisibleCells().map((cell) => (React__default.default.createElement(BodyCell.BodyCell, { cell: cell, key: cell.id, ariaRoles: ariaRoles, enableExpanding: enableExpanding, enableRowSelection: !!enableRowSelection }))))))));
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
18
|
* Memoized table body, used to prevent rerenders when columns are being resized.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Body.cjs","sources":["../../../../../src/components/DataGrid/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { BodyCell } from './BodyCell';\nimport { Row } from './Row';\nimport { AriaRoles } from '../../types';\n\ntype BodyProps = {\n /**\n * TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Whether the rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * ARIA roles for the table.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Body = ({ table, striped, ariaRoles }: BodyProps) => {\n const enableExpanding = table.options.enableExpanding ?? false;\n const enableRowSelection = table.options.enableRowSelection ?? false;\n\n return (\n <tbody className=\"data-grid-body\">\n {table.getRowModel().rows.map((row) => (\n <Row key={row.id} row={row} striped={striped} enableExpanding={enableExpanding}>\n {row.getVisibleCells().map((cell) => (\n <BodyCell\n cell={cell}\n key={cell.id}\n ariaRoles={ariaRoles}\n enableExpanding={enableExpanding}\n enableRowSelection={!!enableRowSelection}\n />\n ))}\n </Row>\n ))}\n </tbody>\n );\n};\n\n/**\n * Memoized table body, used to prevent rerenders when columns are being resized.\n */\nexport const MemoizedBody = React.memo(\n Body,\n (prev, next) => prev.table.options.data === next.table.options.data,\n);\n"],"names":["React","Row","BodyCell"],"mappings":";;;;;;;;;;AAwBO,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAa,KAAI;;IAC/D,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;IAC9D,MAAM,kBAAkB,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;AAEpE,IAAA,QACEA,sBAAO,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA,
|
|
1
|
+
{"version":3,"file":"Body.cjs","sources":["../../../../../src/components/DataGrid/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { BodyCell } from './BodyCell';\nimport { Row } from './Row';\nimport { AriaRoles } from '../../types';\n\ntype BodyProps = {\n /**\n * TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Whether the rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * ARIA roles for the table.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Body = ({ table, striped, ariaRoles }: BodyProps) => {\n const enableExpanding = table.options.enableExpanding ?? false;\n const enableRowSelection = table.options.enableRowSelection ?? false;\n\n return (\n <tbody className=\"data-grid-body\" aria-busy=\"false\">\n {table.getRowModel().rows.map((row) => (\n <Row key={row.id} row={row} striped={striped} enableExpanding={enableExpanding}>\n {row.getVisibleCells().map((cell) => (\n <BodyCell\n cell={cell}\n key={cell.id}\n ariaRoles={ariaRoles}\n enableExpanding={enableExpanding}\n enableRowSelection={!!enableRowSelection}\n />\n ))}\n </Row>\n ))}\n </tbody>\n );\n};\n\n/**\n * Memoized table body, used to prevent rerenders when columns are being resized.\n */\nexport const MemoizedBody = React.memo(\n Body,\n (prev, next) => prev.table.options.data === next.table.options.data,\n);\n"],"names":["React","Row","BodyCell"],"mappings":";;;;;;;;;;AAwBO,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAa,KAAI;;IAC/D,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;IAC9D,MAAM,kBAAkB,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;AAEpE,IAAA,QACEA,sBAAO,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA,WAAA,EAAW,OAAO,EAChD,EAAA,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAChCA,sBAAA,CAAA,aAAA,CAACC,OAAG,EAAC,EAAA,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAC3E,EAAA,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAC9BD,qCAACE,iBAAQ,EAAA,EACP,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,EAAA,CACxC,CACH,CAAC,CACE,CACP,CAAC,CACI;AAEZ;AAEA;;AAEG;AACI,MAAM,YAAY,GAAGF,sBAAK,CAAC,IAAI,CACpC,IAAI,EACJ,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;;;;;"}
|
|
@@ -6,7 +6,7 @@ const Body = ({ table, striped, ariaRoles }) => {
|
|
|
6
6
|
var _a, _b;
|
|
7
7
|
const enableExpanding = (_a = table.options.enableExpanding) !== null && _a !== undefined ? _a : false;
|
|
8
8
|
const enableRowSelection = (_b = table.options.enableRowSelection) !== null && _b !== undefined ? _b : false;
|
|
9
|
-
return (React__default.createElement("tbody", { className: "data-grid-body" }, table.getRowModel().rows.map((row) => (React__default.createElement(Row, { key: row.id, row: row, striped: striped, enableExpanding: enableExpanding }, row.getVisibleCells().map((cell) => (React__default.createElement(BodyCell, { cell: cell, key: cell.id, ariaRoles: ariaRoles, enableExpanding: enableExpanding, enableRowSelection: !!enableRowSelection }))))))));
|
|
9
|
+
return (React__default.createElement("tbody", { className: "data-grid-body", "aria-busy": "false" }, table.getRowModel().rows.map((row) => (React__default.createElement(Row, { key: row.id, row: row, striped: striped, enableExpanding: enableExpanding }, row.getVisibleCells().map((cell) => (React__default.createElement(BodyCell, { cell: cell, key: cell.id, ariaRoles: ariaRoles, enableExpanding: enableExpanding, enableRowSelection: !!enableRowSelection }))))))));
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Memoized table body, used to prevent rerenders when columns are being resized.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Body.js","sources":["../../../../../src/components/DataGrid/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { BodyCell } from './BodyCell';\nimport { Row } from './Row';\nimport { AriaRoles } from '../../types';\n\ntype BodyProps = {\n /**\n * TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Whether the rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * ARIA roles for the table.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Body = ({ table, striped, ariaRoles }: BodyProps) => {\n const enableExpanding = table.options.enableExpanding ?? false;\n const enableRowSelection = table.options.enableRowSelection ?? false;\n\n return (\n <tbody className=\"data-grid-body\">\n {table.getRowModel().rows.map((row) => (\n <Row key={row.id} row={row} striped={striped} enableExpanding={enableExpanding}>\n {row.getVisibleCells().map((cell) => (\n <BodyCell\n cell={cell}\n key={cell.id}\n ariaRoles={ariaRoles}\n enableExpanding={enableExpanding}\n enableRowSelection={!!enableRowSelection}\n />\n ))}\n </Row>\n ))}\n </tbody>\n );\n};\n\n/**\n * Memoized table body, used to prevent rerenders when columns are being resized.\n */\nexport const MemoizedBody = React.memo(\n Body,\n (prev, next) => prev.table.options.data === next.table.options.data,\n);\n"],"names":["React"],"mappings":";;;;AAwBO,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAa,KAAI;;IAC/D,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;IAC9D,MAAM,kBAAkB,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;AAEpE,IAAA,QACEA,cAAO,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA,
|
|
1
|
+
{"version":3,"file":"Body.js","sources":["../../../../../src/components/DataGrid/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { BodyCell } from './BodyCell';\nimport { Row } from './Row';\nimport { AriaRoles } from '../../types';\n\ntype BodyProps = {\n /**\n * TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Whether the rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * ARIA roles for the table.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Body = ({ table, striped, ariaRoles }: BodyProps) => {\n const enableExpanding = table.options.enableExpanding ?? false;\n const enableRowSelection = table.options.enableRowSelection ?? false;\n\n return (\n <tbody className=\"data-grid-body\" aria-busy=\"false\">\n {table.getRowModel().rows.map((row) => (\n <Row key={row.id} row={row} striped={striped} enableExpanding={enableExpanding}>\n {row.getVisibleCells().map((cell) => (\n <BodyCell\n cell={cell}\n key={cell.id}\n ariaRoles={ariaRoles}\n enableExpanding={enableExpanding}\n enableRowSelection={!!enableRowSelection}\n />\n ))}\n </Row>\n ))}\n </tbody>\n );\n};\n\n/**\n * Memoized table body, used to prevent rerenders when columns are being resized.\n */\nexport const MemoizedBody = React.memo(\n Body,\n (prev, next) => prev.table.options.data === next.table.options.data,\n);\n"],"names":["React"],"mappings":";;;;AAwBO,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAa,KAAI;;IAC/D,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;IAC9D,MAAM,kBAAkB,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAK;AAEpE,IAAA,QACEA,cAAO,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA,WAAA,EAAW,OAAO,EAChD,EAAA,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAChCA,cAAA,CAAA,aAAA,CAAC,GAAG,EAAC,EAAA,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAC3E,EAAA,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAC9BA,6BAAC,QAAQ,EAAA,EACP,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,EAAA,CACxC,CACH,CAAC,CACE,CACP,CAAC,CACI;AAEZ;AAEA;;AAEG;AACI,MAAM,YAAY,GAAGA,cAAK,CAAC,IAAI,CACpC,IAAI,EACJ,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var FlexCol = require('../../../../Flex/FlexCol/FlexCol.cjs');
|
|
5
|
+
var Text = require('../../../../Text/Text.cjs');
|
|
6
|
+
var EmptyBody_module = require('./EmptyBody.module.scss.cjs');
|
|
7
|
+
var CrossIcon = require('../../../../../icons/design-system/components/CrossIcon.cjs');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
12
|
+
|
|
13
|
+
const defaultEmptyState = {
|
|
14
|
+
iconSlot: React__default.default.createElement(CrossIcon.ReactComponent, null),
|
|
15
|
+
heading: 'No results',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A body component for the DataGrid that displays an empty state when there are no rows.
|
|
19
|
+
*
|
|
20
|
+
* If no `emptyState` or `emptySlot` is provided, it will display a default message with an icon.
|
|
21
|
+
*/
|
|
22
|
+
const EmptyBody = React__default.default.memo(({ table, emptyState, emptySlot }) => {
|
|
23
|
+
const { iconSlot, heading, subHeading } = emptyState || defaultEmptyState;
|
|
24
|
+
const columnCount = table.getVisibleFlatColumns().length;
|
|
25
|
+
return (React__default.default.createElement("tbody", { "aria-busy": "false" },
|
|
26
|
+
React__default.default.createElement("tr", { "aria-rowindex": 2 },
|
|
27
|
+
React__default.default.createElement("td", { colSpan: columnCount }, emptySlot || (React__default.default.createElement(FlexCol.FlexCol, { alignItems: "center", justifyContent: "center", gap: "4", className: EmptyBody_module.contentContainer },
|
|
28
|
+
iconSlot && React__default.default.createElement("div", { className: EmptyBody_module.iconContainer }, iconSlot),
|
|
29
|
+
React__default.default.createElement(Text.Text, { variant: "headingMedium" }, heading),
|
|
30
|
+
subHeading && React__default.default.createElement(Text.Text, { variant: "subheadingMedium" }, subHeading)))))));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
exports.EmptyBody = EmptyBody;
|
|
34
|
+
//# sourceMappingURL=EmptyBody.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyBody.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/EmptyBody/EmptyBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { EmptyState } from '../../../types';\nimport { FlexCol } from '../../../../Flex/FlexCol';\nimport { Text } from '../../../../Text';\n\nimport styles from './EmptyBody.module.scss';\nimport { CrossIcon } from '../../../../../icons';\n\ntype EmptyBodyProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Optional empty state configuration.\n */\n emptyState?: EmptyState;\n\n /**\n * Optional slot for custom content in the empty body.\n */\n emptySlot?: React.ReactElement;\n};\n\nconst defaultEmptyState: EmptyState = {\n iconSlot: <CrossIcon />,\n heading: 'No results',\n};\n\n/**\n * A body component for the DataGrid that displays an empty state when there are no rows.\n *\n * If no `emptyState` or `emptySlot` is provided, it will display a default message with an icon.\n */\nexport const EmptyBody = React.memo(({ table, emptyState, emptySlot }: EmptyBodyProps) => {\n const { iconSlot, heading, subHeading } = emptyState || defaultEmptyState;\n const columnCount = table.getVisibleFlatColumns().length;\n\n return (\n <tbody aria-busy=\"false\">\n <tr aria-rowindex={2}>\n <td colSpan={columnCount}>\n {emptySlot || (\n <FlexCol\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"4\"\n className={styles.contentContainer}\n >\n {iconSlot && <div className={styles.iconContainer}>{iconSlot}</div>}\n\n <Text variant=\"headingMedium\">{heading}</Text>\n {subHeading && <Text variant=\"subheadingMedium\">{subHeading}</Text>}\n </FlexCol>\n )}\n </td>\n </tr>\n </tbody>\n );\n});\n"],"names":["React","CrossIcon","FlexCol","styles","Text"],"mappings":";;;;;;;;;;;;AA2BA,MAAM,iBAAiB,GAAe;IACpC,QAAQ,EAAEA,sBAAC,CAAA,aAAA,CAAAC,wBAAS,EAAG,IAAA,CAAA;AACvB,IAAA,OAAO,EAAE,YAAY;CACtB;AAED;;;;AAIG;AACU,MAAA,SAAS,GAAGD,sBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAkB,KAAI;IACvF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,IAAI,iBAAiB;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM;IAExD,QACEA,6DAAiB,OAAO,EAAA;AACtB,QAAAA,sBAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,eAAA,EAAmB,CAAC,EAAA;YAClBA,sBAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,OAAO,EAAE,WAAW,EACrB,EAAA,SAAS,KACRA,sBAAC,CAAA,aAAA,CAAAE,eAAO,EACN,EAAA,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,QAAQ,EACvB,GAAG,EAAC,GAAG,EACP,SAAS,EAAEC,gBAAM,CAAC,gBAAgB,EAAA;gBAEjC,QAAQ,IAAIH,8CAAK,SAAS,EAAEG,gBAAM,CAAC,aAAa,EAAG,EAAA,QAAQ,CAAO;AAEnE,gBAAAH,sBAAA,CAAA,aAAA,CAACI,SAAI,EAAC,EAAA,OAAO,EAAC,eAAe,EAAA,EAAE,OAAO,CAAQ;AAC7C,gBAAA,UAAU,IAAIJ,sBAAC,CAAA,aAAA,CAAAI,SAAI,EAAC,EAAA,OAAO,EAAC,kBAAkB,EAAA,EAAE,UAAU,CAAQ,CAC3D,CACX,CACE,CACF,CACC;AAEZ,CAAC;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Table } from '@tanstack/react-table';
|
|
3
|
+
import { EmptyState } from '../../../types';
|
|
4
|
+
type EmptyBodyProps = {
|
|
5
|
+
/**
|
|
6
|
+
* The TanStack table instance.
|
|
7
|
+
*/
|
|
8
|
+
table: Table<any>;
|
|
9
|
+
/**
|
|
10
|
+
* Optional empty state configuration.
|
|
11
|
+
*/
|
|
12
|
+
emptyState?: EmptyState;
|
|
13
|
+
/**
|
|
14
|
+
* Optional slot for custom content in the empty body.
|
|
15
|
+
*/
|
|
16
|
+
emptySlot?: React.ReactElement;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A body component for the DataGrid that displays an empty state when there are no rows.
|
|
20
|
+
*
|
|
21
|
+
* If no `emptyState` or `emptySlot` is provided, it will display a default message with an icon.
|
|
22
|
+
*/
|
|
23
|
+
export declare const EmptyBody: React.MemoExoticComponent<({ table, emptyState, emptySlot }: EmptyBodyProps) => React.JSX.Element>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { FlexCol } from '../../../../Flex/FlexCol/FlexCol.js';
|
|
3
|
+
import { Text } from '../../../../Text/Text.js';
|
|
4
|
+
import styles from './EmptyBody.module.scss.js';
|
|
5
|
+
import { ReactComponent as CrossIcon } from '../../../../../icons/design-system/components/CrossIcon.js';
|
|
6
|
+
|
|
7
|
+
const defaultEmptyState = {
|
|
8
|
+
iconSlot: React__default.createElement(CrossIcon, null),
|
|
9
|
+
heading: 'No results',
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* A body component for the DataGrid that displays an empty state when there are no rows.
|
|
13
|
+
*
|
|
14
|
+
* If no `emptyState` or `emptySlot` is provided, it will display a default message with an icon.
|
|
15
|
+
*/
|
|
16
|
+
const EmptyBody = React__default.memo(({ table, emptyState, emptySlot }) => {
|
|
17
|
+
const { iconSlot, heading, subHeading } = emptyState || defaultEmptyState;
|
|
18
|
+
const columnCount = table.getVisibleFlatColumns().length;
|
|
19
|
+
return (React__default.createElement("tbody", { "aria-busy": "false" },
|
|
20
|
+
React__default.createElement("tr", { "aria-rowindex": 2 },
|
|
21
|
+
React__default.createElement("td", { colSpan: columnCount }, emptySlot || (React__default.createElement(FlexCol, { alignItems: "center", justifyContent: "center", gap: "4", className: styles.contentContainer },
|
|
22
|
+
iconSlot && React__default.createElement("div", { className: styles.iconContainer }, iconSlot),
|
|
23
|
+
React__default.createElement(Text, { variant: "headingMedium" }, heading),
|
|
24
|
+
subHeading && React__default.createElement(Text, { variant: "subheadingMedium" }, subHeading)))))));
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export { EmptyBody };
|
|
28
|
+
//# sourceMappingURL=EmptyBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyBody.js","sources":["../../../../../../src/components/DataGrid/components/Body/EmptyBody/EmptyBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { EmptyState } from '../../../types';\nimport { FlexCol } from '../../../../Flex/FlexCol';\nimport { Text } from '../../../../Text';\n\nimport styles from './EmptyBody.module.scss';\nimport { CrossIcon } from '../../../../../icons';\n\ntype EmptyBodyProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * Optional empty state configuration.\n */\n emptyState?: EmptyState;\n\n /**\n * Optional slot for custom content in the empty body.\n */\n emptySlot?: React.ReactElement;\n};\n\nconst defaultEmptyState: EmptyState = {\n iconSlot: <CrossIcon />,\n heading: 'No results',\n};\n\n/**\n * A body component for the DataGrid that displays an empty state when there are no rows.\n *\n * If no `emptyState` or `emptySlot` is provided, it will display a default message with an icon.\n */\nexport const EmptyBody = React.memo(({ table, emptyState, emptySlot }: EmptyBodyProps) => {\n const { iconSlot, heading, subHeading } = emptyState || defaultEmptyState;\n const columnCount = table.getVisibleFlatColumns().length;\n\n return (\n <tbody aria-busy=\"false\">\n <tr aria-rowindex={2}>\n <td colSpan={columnCount}>\n {emptySlot || (\n <FlexCol\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"4\"\n className={styles.contentContainer}\n >\n {iconSlot && <div className={styles.iconContainer}>{iconSlot}</div>}\n\n <Text variant=\"headingMedium\">{heading}</Text>\n {subHeading && <Text variant=\"subheadingMedium\">{subHeading}</Text>}\n </FlexCol>\n )}\n </td>\n </tr>\n </tbody>\n );\n});\n"],"names":["React"],"mappings":";;;;;;AA2BA,MAAM,iBAAiB,GAAe;IACpC,QAAQ,EAAEA,cAAC,CAAA,aAAA,CAAA,SAAS,EAAG,IAAA,CAAA;AACvB,IAAA,OAAO,EAAE,YAAY;CACtB;AAED;;;;AAIG;AACU,MAAA,SAAS,GAAGA,cAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAkB,KAAI;IACvF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,IAAI,iBAAiB;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM;IAExD,QACEA,qDAAiB,OAAO,EAAA;AACtB,QAAAA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,eAAA,EAAmB,CAAC,EAAA;YAClBA,cAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,OAAO,EAAE,WAAW,EACrB,EAAA,SAAS,KACRA,cAAC,CAAA,aAAA,CAAA,OAAO,EACN,EAAA,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,QAAQ,EACvB,GAAG,EAAC,GAAG,EACP,SAAS,EAAE,MAAM,CAAC,gBAAgB,EAAA;gBAEjC,QAAQ,IAAIA,sCAAK,SAAS,EAAE,MAAM,CAAC,aAAa,EAAG,EAAA,QAAQ,CAAO;AAEnE,gBAAAA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAC,EAAA,OAAO,EAAC,eAAe,EAAA,EAAE,OAAO,CAAQ;AAC7C,gBAAA,UAAU,IAAIA,cAAC,CAAA,aAAA,CAAA,IAAI,EAAC,EAAA,OAAO,EAAC,kBAAkB,EAAA,EAAE,UAAU,CAAQ,CAC3D,CACX,CACE,CACF,CACC;AAEZ,CAAC;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ___$insertStyle = require('../../../../../_virtual/____insertStyle.cjs');
|
|
4
|
+
|
|
5
|
+
___$insertStyle("._contentContainer_14bns_1 {\n padding: var(--sizes-md);\n}\n\n._iconContainer_14bns_5 {\n display: flex;\n padding: var(--sizes-md);\n background-color: var(--colors-neutral-grey-light);\n border-radius: var(--radius-full);\n}\n._iconContainer_14bns_5 svg {\n width: var(--sizes-12);\n height: var(--sizes-12);\n}");
|
|
6
|
+
var styles = {"contentContainer":"_contentContainer_14bns_1","iconContainer":"_iconContainer_14bns_5"};
|
|
7
|
+
|
|
8
|
+
module.exports = styles;
|
|
9
|
+
//# sourceMappingURL=EmptyBody.module.scss.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyBody.module.scss.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss"],"sourcesContent":[".contentContainer {\n padding: var(--sizes-md);\n}\n\n.iconContainer {\n display: flex;\n\n padding: var(--sizes-md);\n background-color: var(--colors-neutral-grey-light);\n border-radius: var(--radius-full);\n\n svg {\n width: var(--sizes-12);\n height: var(--sizes-12);\n }\n}\n"],"names":[],"mappings":";;;;AACE,eAAA,CAAA,mUAAA;;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import insertStyle from '../../../../../_virtual/____insertStyle.js';
|
|
2
|
+
|
|
3
|
+
insertStyle("._contentContainer_14bns_1 {\n padding: var(--sizes-md);\n}\n\n._iconContainer_14bns_5 {\n display: flex;\n padding: var(--sizes-md);\n background-color: var(--colors-neutral-grey-light);\n border-radius: var(--radius-full);\n}\n._iconContainer_14bns_5 svg {\n width: var(--sizes-12);\n height: var(--sizes-12);\n}");
|
|
4
|
+
var styles = {"contentContainer":"_contentContainer_14bns_1","iconContainer":"_iconContainer_14bns_5"};
|
|
5
|
+
|
|
6
|
+
export { styles as default };
|
|
7
|
+
//# sourceMappingURL=EmptyBody.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyBody.module.scss.js","sources":["../../../../../../src/components/DataGrid/components/Body/EmptyBody/EmptyBody.module.scss"],"sourcesContent":[".contentContainer {\n padding: var(--sizes-md);\n}\n\n.iconContainer {\n display: flex;\n\n padding: var(--sizes-md);\n background-color: var(--colors-neutral-grey-light);\n border-radius: var(--radius-full);\n\n svg {\n width: var(--sizes-12);\n height: var(--sizes-12);\n }\n}\n"],"names":["___$insertStyle"],"mappings":";;AACEA,WAAA,CAAA,mUAAA;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EmptyBody } from './EmptyBody';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var Row = require('../Row/Row.cjs');
|
|
5
|
+
var LoadingBodyCell = require('./LoadingBodyCell.cjs');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A body component for the DataGrid that displays a set number of skeleton loading rows.
|
|
13
|
+
*/
|
|
14
|
+
const LoadingBody = React__default.default.memo(({ table, loadingRowCount, striped }) => (React__default.default.createElement("tbody", { "aria-busy": "true" }, Array.from({ length: loadingRowCount }, (_, index) => {
|
|
15
|
+
// Since we don't have actual row data, we'll just pass a placeholder row object.
|
|
16
|
+
const row = { id: `loading-row-${index}`, index, depth: 0 };
|
|
17
|
+
return (React__default.default.createElement(Row.Row, { row: row, striped: striped, key: row.id, enableExpanding: false }, table.getVisibleFlatColumns().map((column) => (React__default.default.createElement(LoadingBodyCell.LoadingBodyCell, { key: column.id, column: column })))));
|
|
18
|
+
}))));
|
|
19
|
+
|
|
20
|
+
exports.LoadingBody = LoadingBody;
|
|
21
|
+
//# sourceMappingURL=LoadingBody.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingBody.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/LoadingBody/LoadingBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { Row } from '../Row';\nimport { LoadingBodyCell } from './LoadingBodyCell';\n\ntype LoadingBodyProps = {\n /**\n * The TanStack Table instance.\n */\n table: Table<any>;\n\n /**\n * The number of loading rows to display.\n */\n loadingRowCount: number;\n\n /**\n * Whether striped rows are enabled or not.\n */\n striped: boolean;\n};\n\n/**\n * A body component for the DataGrid that displays a set number of skeleton loading rows.\n */\nexport const LoadingBody = React.memo(({ table, loadingRowCount, striped }: LoadingBodyProps) => (\n <tbody aria-busy=\"true\">\n {Array.from({ length: loadingRowCount }, (_, index) => {\n // Since we don't have actual row data, we'll just pass a placeholder row object.\n const row = { id: `loading-row-${index}`, index, depth: 0 };\n\n return (\n <Row row={row} striped={striped} key={row.id} enableExpanding={false}>\n {table.getVisibleFlatColumns().map((column) => (\n <LoadingBodyCell key={column.id} column={column} />\n ))}\n </Row>\n );\n })}\n </tbody>\n));\n"],"names":["React","Row","LoadingBodyCell"],"mappings":";;;;;;;;;;AAuBA;;AAEG;AACU,MAAA,WAAW,GAAGA,sBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAoB,MAC1FA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,WAAA,EAAiB,MAAM,EACpB,EAAA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;;AAEpD,IAAA,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,CAAe,YAAA,EAAA,KAAK,CAAE,CAAA,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAE3D,QACEA,sBAAC,CAAA,aAAA,CAAAC,OAAG,EAAC,EAAA,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAA,EACjE,KAAK,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,MACxCD,sBAAA,CAAA,aAAA,CAACE,+BAAe,EAAA,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAI,CACpD,CAAC,CACE;AAEV,CAAC,CAAC,CACI,CACT;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Table } from '@tanstack/react-table';
|
|
3
|
+
type LoadingBodyProps = {
|
|
4
|
+
/**
|
|
5
|
+
* The TanStack Table instance.
|
|
6
|
+
*/
|
|
7
|
+
table: Table<any>;
|
|
8
|
+
/**
|
|
9
|
+
* The number of loading rows to display.
|
|
10
|
+
*/
|
|
11
|
+
loadingRowCount: number;
|
|
12
|
+
/**
|
|
13
|
+
* Whether striped rows are enabled or not.
|
|
14
|
+
*/
|
|
15
|
+
striped: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A body component for the DataGrid that displays a set number of skeleton loading rows.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LoadingBody: React.MemoExoticComponent<({ table, loadingRowCount, striped }: LoadingBodyProps) => React.JSX.Element>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { Row } from '../Row/Row.js';
|
|
3
|
+
import { LoadingBodyCell } from './LoadingBodyCell.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A body component for the DataGrid that displays a set number of skeleton loading rows.
|
|
7
|
+
*/
|
|
8
|
+
const LoadingBody = React__default.memo(({ table, loadingRowCount, striped }) => (React__default.createElement("tbody", { "aria-busy": "true" }, Array.from({ length: loadingRowCount }, (_, index) => {
|
|
9
|
+
// Since we don't have actual row data, we'll just pass a placeholder row object.
|
|
10
|
+
const row = { id: `loading-row-${index}`, index, depth: 0 };
|
|
11
|
+
return (React__default.createElement(Row, { row: row, striped: striped, key: row.id, enableExpanding: false }, table.getVisibleFlatColumns().map((column) => (React__default.createElement(LoadingBodyCell, { key: column.id, column: column })))));
|
|
12
|
+
}))));
|
|
13
|
+
|
|
14
|
+
export { LoadingBody };
|
|
15
|
+
//# sourceMappingURL=LoadingBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingBody.js","sources":["../../../../../../src/components/DataGrid/components/Body/LoadingBody/LoadingBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { Row } from '../Row';\nimport { LoadingBodyCell } from './LoadingBodyCell';\n\ntype LoadingBodyProps = {\n /**\n * The TanStack Table instance.\n */\n table: Table<any>;\n\n /**\n * The number of loading rows to display.\n */\n loadingRowCount: number;\n\n /**\n * Whether striped rows are enabled or not.\n */\n striped: boolean;\n};\n\n/**\n * A body component for the DataGrid that displays a set number of skeleton loading rows.\n */\nexport const LoadingBody = React.memo(({ table, loadingRowCount, striped }: LoadingBodyProps) => (\n <tbody aria-busy=\"true\">\n {Array.from({ length: loadingRowCount }, (_, index) => {\n // Since we don't have actual row data, we'll just pass a placeholder row object.\n const row = { id: `loading-row-${index}`, index, depth: 0 };\n\n return (\n <Row row={row} striped={striped} key={row.id} enableExpanding={false}>\n {table.getVisibleFlatColumns().map((column) => (\n <LoadingBodyCell key={column.id} column={column} />\n ))}\n </Row>\n );\n })}\n </tbody>\n));\n"],"names":["React"],"mappings":";;;;AAuBA;;AAEG;AACU,MAAA,WAAW,GAAGA,cAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAoB,MAC1FA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,WAAA,EAAiB,MAAM,EACpB,EAAA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;;AAEpD,IAAA,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,CAAe,YAAA,EAAA,KAAK,CAAE,CAAA,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAE3D,QACEA,cAAC,CAAA,aAAA,CAAA,GAAG,EAAC,EAAA,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAA,EACjE,KAAK,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,MACxCA,cAAA,CAAA,aAAA,CAAC,eAAe,EAAA,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAI,CACpD,CAAC,CACE;AAEV,CAAC,CAAC,CACI,CACT;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var Skeleton = require('../../../../Skeleton/Skeleton.cjs');
|
|
5
|
+
var buildClassnames = require('../../../../../utils/buildClassnames.cjs');
|
|
6
|
+
require('uid/secure');
|
|
7
|
+
var usePinnedColumnStyles = require('../../../hooks/usePinnedColumnStyles.cjs');
|
|
8
|
+
require('@tanstack/react-table');
|
|
9
|
+
require('../../../../Stack/Stack.cjs');
|
|
10
|
+
require('../../../../Stack/types.cjs');
|
|
11
|
+
var index = require('../../../../../theme/index.cjs');
|
|
12
|
+
require('../../../../Choice/components/styled.cjs');
|
|
13
|
+
require('../../../../Text/Text.cjs');
|
|
14
|
+
require('../../../../Checkbox/styled.cjs');
|
|
15
|
+
require('../../../../Radio/Radio.cjs');
|
|
16
|
+
var CellContent = require('../../CellContent/CellContent.cjs');
|
|
17
|
+
var BodyCell_module = require('../BodyCell/BodyCell.module.scss.cjs');
|
|
18
|
+
|
|
19
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
20
|
+
|
|
21
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A cell component for the DataGrid that displays a skeleton loader.
|
|
25
|
+
*/
|
|
26
|
+
const LoadingBodyCell = ({ column }) => {
|
|
27
|
+
const { justifyContent, textAlign } = column.columnDef.meta;
|
|
28
|
+
const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles.usePinnedColumnStyles({
|
|
29
|
+
column,
|
|
30
|
+
});
|
|
31
|
+
const loadingCellClassname = buildClassnames.buildClassnames([
|
|
32
|
+
BodyCell_module.bodyCell,
|
|
33
|
+
pinnedCellClassName,
|
|
34
|
+
'data-grid-cell',
|
|
35
|
+
'data-grid-cell-loading',
|
|
36
|
+
]);
|
|
37
|
+
return (React__default.default.createElement("td", { className: loadingCellClassname, style: pinnedCellStyles, "aria-colindex": column.getIndex() + 1 },
|
|
38
|
+
React__default.default.createElement(CellContent.CellContent, { contentStyle: {
|
|
39
|
+
justifyContent,
|
|
40
|
+
textAlign,
|
|
41
|
+
} },
|
|
42
|
+
React__default.default.createElement(Skeleton.Skeleton, { width: "75%", height: index.theme.sizes[3] }))));
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.LoadingBodyCell = LoadingBodyCell;
|
|
46
|
+
//# sourceMappingURL=LoadingBodyCell.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingBodyCell.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.tsx"],"sourcesContent":["import React from 'react';\nimport { Column } from '@tanstack/react-table';\n\nimport { Skeleton } from '../../../../Skeleton';\nimport { buildClassnames } from '../../../../../utils';\nimport { usePinnedColumnStyles } from '../../../hooks';\nimport { CellContent } from '../../CellContent';\nimport { theme } from '../../../../../theme';\n\nimport styles from '../BodyCell/BodyCell.module.scss';\n\ntype LoadingBodyCellProps = {\n /**\n * The TanStack Table column instance.\n */\n column: Column<any, any>;\n};\n\n/**\n * A cell component for the DataGrid that displays a skeleton loader.\n */\nexport const LoadingBodyCell = ({ column }: LoadingBodyCellProps) => {\n const { justifyContent, textAlign } = column.columnDef.meta!;\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({\n column,\n });\n\n const loadingCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n 'data-grid-cell-loading',\n ]);\n\n return (\n <td\n className={loadingCellClassname}\n style={pinnedCellStyles}\n aria-colindex={column.getIndex() + 1}\n >\n <CellContent\n contentStyle={\n {\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n >\n <Skeleton width=\"75%\" height={theme.sizes[3]} />\n </CellContent>\n </td>\n );\n};\n"],"names":["usePinnedColumnStyles","buildClassnames","styles","React","CellContent","Skeleton","theme"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkBA;;AAEG;MACU,eAAe,GAAG,CAAC,EAAE,MAAM,EAAwB,KAAI;IAClE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAK;AAC5D,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAGA,2CAAqB,CAAC;QACtE,MAAM;AACP,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAGC,+BAAe,CAAC;AAC3C,QAAAC,eAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;QAChB,wBAAwB;AACzB,KAAA,CAAC;AAEF,IAAA,QACEC,sBAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,gBAAgB,mBACR,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAA;QAEpCA,sBAAC,CAAA,aAAA,CAAAC,uBAAW,EACV,EAAA,YAAY,EACV;gBACE,cAAc;gBACd,SAAS;AACa,aAAA,EAAA;AAG1B,YAAAD,sBAAA,CAAA,aAAA,CAACE,iBAAQ,EAAC,EAAA,KAAK,EAAC,KAAK,EAAC,MAAM,EAAEC,WAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAI,CACpC,CACX;AAET;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Column } from '@tanstack/react-table';
|
|
3
|
+
type LoadingBodyCellProps = {
|
|
4
|
+
/**
|
|
5
|
+
* The TanStack Table column instance.
|
|
6
|
+
*/
|
|
7
|
+
column: Column<any, any>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A cell component for the DataGrid that displays a skeleton loader.
|
|
11
|
+
*/
|
|
12
|
+
export declare const LoadingBodyCell: ({ column }: LoadingBodyCellProps) => React.JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { Skeleton } from '../../../../Skeleton/Skeleton.js';
|
|
3
|
+
import { buildClassnames } from '../../../../../utils/buildClassnames.js';
|
|
4
|
+
import 'uid/secure';
|
|
5
|
+
import { usePinnedColumnStyles } from '../../../hooks/usePinnedColumnStyles.js';
|
|
6
|
+
import '@tanstack/react-table';
|
|
7
|
+
import '../../../../Stack/Stack.js';
|
|
8
|
+
import '../../../../Stack/types.js';
|
|
9
|
+
import { theme } from '../../../../../theme/index.js';
|
|
10
|
+
import '../../../../Choice/components/styled.js';
|
|
11
|
+
import '../../../../Text/Text.js';
|
|
12
|
+
import '../../../../Checkbox/styled.js';
|
|
13
|
+
import '../../../../Radio/Radio.js';
|
|
14
|
+
import { CellContent } from '../../CellContent/CellContent.js';
|
|
15
|
+
import styles from '../BodyCell/BodyCell.module.scss.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A cell component for the DataGrid that displays a skeleton loader.
|
|
19
|
+
*/
|
|
20
|
+
const LoadingBodyCell = ({ column }) => {
|
|
21
|
+
const { justifyContent, textAlign } = column.columnDef.meta;
|
|
22
|
+
const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({
|
|
23
|
+
column,
|
|
24
|
+
});
|
|
25
|
+
const loadingCellClassname = buildClassnames([
|
|
26
|
+
styles.bodyCell,
|
|
27
|
+
pinnedCellClassName,
|
|
28
|
+
'data-grid-cell',
|
|
29
|
+
'data-grid-cell-loading',
|
|
30
|
+
]);
|
|
31
|
+
return (React__default.createElement("td", { className: loadingCellClassname, style: pinnedCellStyles, "aria-colindex": column.getIndex() + 1 },
|
|
32
|
+
React__default.createElement(CellContent, { contentStyle: {
|
|
33
|
+
justifyContent,
|
|
34
|
+
textAlign,
|
|
35
|
+
} },
|
|
36
|
+
React__default.createElement(Skeleton, { width: "75%", height: theme.sizes[3] }))));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { LoadingBodyCell };
|
|
40
|
+
//# sourceMappingURL=LoadingBodyCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingBodyCell.js","sources":["../../../../../../src/components/DataGrid/components/Body/LoadingBody/LoadingBodyCell.tsx"],"sourcesContent":["import React from 'react';\nimport { Column } from '@tanstack/react-table';\n\nimport { Skeleton } from '../../../../Skeleton';\nimport { buildClassnames } from '../../../../../utils';\nimport { usePinnedColumnStyles } from '../../../hooks';\nimport { CellContent } from '../../CellContent';\nimport { theme } from '../../../../../theme';\n\nimport styles from '../BodyCell/BodyCell.module.scss';\n\ntype LoadingBodyCellProps = {\n /**\n * The TanStack Table column instance.\n */\n column: Column<any, any>;\n};\n\n/**\n * A cell component for the DataGrid that displays a skeleton loader.\n */\nexport const LoadingBodyCell = ({ column }: LoadingBodyCellProps) => {\n const { justifyContent, textAlign } = column.columnDef.meta!;\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({\n column,\n });\n\n const loadingCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n 'data-grid-cell-loading',\n ]);\n\n return (\n <td\n className={loadingCellClassname}\n style={pinnedCellStyles}\n aria-colindex={column.getIndex() + 1}\n >\n <CellContent\n contentStyle={\n {\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n >\n <Skeleton width=\"75%\" height={theme.sizes[3]} />\n </CellContent>\n </td>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;AAkBA;;AAEG;MACU,eAAe,GAAG,CAAC,EAAE,MAAM,EAAwB,KAAI;IAClE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAK;AAC5D,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAAC;QACtE,MAAM;AACP,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC3C,QAAA,MAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;QAChB,wBAAwB;AACzB,KAAA,CAAC;AAEF,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,gBAAgB,mBACR,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAA;QAEpCA,cAAC,CAAA,aAAA,CAAA,WAAW,EACV,EAAA,YAAY,EACV;gBACE,cAAc;gBACd,SAAS;AACa,aAAA,EAAA;AAG1B,YAAAA,cAAA,CAAA,aAAA,CAAC,QAAQ,EAAC,EAAA,KAAK,EAAC,KAAK,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAI,CACpC,CACX;AAET;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LoadingBody } from './LoadingBody';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"Row.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../../utils';\n\ntype RowProps = {\n /**\n * Row information, including id, index, and depth (typically the TanStack table row).\n */\n row: {\n id: string;\n index: number;\n depth: number;\n };\n\n /**\n * Whether rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * Whether row expanding is enabled.\n */\n enableExpanding: boolean;\n\n /**\n * Child elements (table cells).\n */\n children: React.ReactNode;\n};\n\nexport const Row = ({ row, striped, enableExpanding, children }: RowProps) => (\n <tr\n className={buildClassnames(['data-grid-row', striped ? 'striped' : undefined])}\n key={row.id}\n // 0-based index + header row.\n aria-rowindex={row.index + 2}\n aria-level={enableExpanding ? row.depth + 1 : undefined}\n >\n {children}\n </tr>\n);\n"],"names":["React","buildClassnames"],"mappings":";;;;;;;;;;AA8BO,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAY,MACvEA,sBAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAEC,+BAAe,CAAC,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,EAC9E,GAAG,EAAE,GAAG,CAAC,EAAE,EAAA,eAAA,EAEI,GAAG,CAAC,KAAK,GAAG,CAAC,EAChB,YAAA,EAAA,eAAe,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,EAAA,EAEtD,QAAQ,CACN;;;;"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Row as RowItem } from '@tanstack/react-table';
|
|
3
2
|
type RowProps = {
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
4
|
+
* Row information, including id, index, and depth (typically the TanStack table row).
|
|
6
5
|
*/
|
|
7
|
-
row:
|
|
6
|
+
row: {
|
|
7
|
+
id: string;
|
|
8
|
+
index: number;
|
|
9
|
+
depth: number;
|
|
10
|
+
};
|
|
8
11
|
/**
|
|
9
12
|
* Whether rows should be striped or not.
|
|
10
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.js","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"Row.js","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../../utils';\n\ntype RowProps = {\n /**\n * Row information, including id, index, and depth (typically the TanStack table row).\n */\n row: {\n id: string;\n index: number;\n depth: number;\n };\n\n /**\n * Whether rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * Whether row expanding is enabled.\n */\n enableExpanding: boolean;\n\n /**\n * Child elements (table cells).\n */\n children: React.ReactNode;\n};\n\nexport const Row = ({ row, striped, enableExpanding, children }: RowProps) => (\n <tr\n className={buildClassnames(['data-grid-row', striped ? 'striped' : undefined])}\n key={row.id}\n // 0-based index + header row.\n aria-rowindex={row.index + 2}\n aria-level={enableExpanding ? row.depth + 1 : undefined}\n >\n {children}\n </tr>\n);\n"],"names":["React"],"mappings":";;;;AA8BO,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAY,MACvEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,EAC9E,GAAG,EAAE,GAAG,CAAC,EAAE,EAAA,eAAA,EAEI,GAAG,CAAC,KAAK,GAAG,CAAC,EAChB,YAAA,EAAA,eAAe,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,EAAA,EAEtD,QAAQ,CACN;;;;"}
|
|
@@ -11,7 +11,7 @@ const Footer = ({ table, ariaRoles }) => {
|
|
|
11
11
|
// We're not making use of column grouping, so we only need the first footer group.
|
|
12
12
|
const [footer] = table.getFooterGroups();
|
|
13
13
|
return (React__default.default.createElement("tfoot", { className: "data-grid-footer" },
|
|
14
|
-
React__default.default.createElement("tr", { className: "data-grid-footer-row" }, footer.headers.map((header) => (React__default.default.createElement(FooterCell.FooterCell, { key: header.id, ariaRoles: ariaRoles, header: header }))))));
|
|
14
|
+
React__default.default.createElement("tr", { className: "data-grid-footer-row", "aria-rowindex": table.getRowCount() + 1 }, footer.headers.map((header) => (React__default.default.createElement(FooterCell.FooterCell, { key: header.id, ariaRoles: ariaRoles, header: header }))))));
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
exports.Footer = Footer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.cjs","sources":["../../../../../src/components/DataGrid/components/Footer/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { AriaRoles } from '../../types';\nimport { FooterCell } from './FooterCell';\n\ntype FooterProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * ARIA roles used in the grid.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Footer = ({ table, ariaRoles }: FooterProps) => {\n // We're not making use of column grouping, so we only need the first footer group.\n const [footer] = table.getFooterGroups();\n\n return (\n <tfoot className=\"data-grid-footer\">\n <tr className=\"data-grid-footer-row\">\n {footer.headers.map((header) => (\n <FooterCell key={header.id} ariaRoles={ariaRoles} header={header} />\n ))}\n </tr>\n </tfoot>\n );\n};\n"],"names":["React","FooterCell"],"mappings":";;;;;;;;;AAkBa,MAAA,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAe,KAAI;;IAE1D,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE;AAExC,IAAA,QACEA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kBAAkB,EAAA;
|
|
1
|
+
{"version":3,"file":"Footer.cjs","sources":["../../../../../src/components/DataGrid/components/Footer/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { AriaRoles } from '../../types';\nimport { FooterCell } from './FooterCell';\n\ntype FooterProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * ARIA roles used in the grid.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Footer = ({ table, ariaRoles }: FooterProps) => {\n // We're not making use of column grouping, so we only need the first footer group.\n const [footer] = table.getFooterGroups();\n\n return (\n <tfoot className=\"data-grid-footer\">\n <tr className=\"data-grid-footer-row\" aria-rowindex={table.getRowCount() + 1}>\n {footer.headers.map((header) => (\n <FooterCell key={header.id} ariaRoles={ariaRoles} header={header} />\n ))}\n </tr>\n </tfoot>\n );\n};\n"],"names":["React","FooterCell"],"mappings":";;;;;;;;;AAkBa,MAAA,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAe,KAAI;;IAE1D,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE;AAExC,IAAA,QACEA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kBAAkB,EAAA;QACjCA,sBAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA,eAAA,EAAgB,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IACxE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MACzBA,sBAAC,CAAA,aAAA,CAAAC,qBAAU,IAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAA,CAAI,CACrE,CAAC,CACC,CACC;AAEZ;;;;"}
|
|
@@ -5,7 +5,7 @@ const Footer = ({ table, ariaRoles }) => {
|
|
|
5
5
|
// We're not making use of column grouping, so we only need the first footer group.
|
|
6
6
|
const [footer] = table.getFooterGroups();
|
|
7
7
|
return (React__default.createElement("tfoot", { className: "data-grid-footer" },
|
|
8
|
-
React__default.createElement("tr", { className: "data-grid-footer-row" }, footer.headers.map((header) => (React__default.createElement(FooterCell, { key: header.id, ariaRoles: ariaRoles, header: header }))))));
|
|
8
|
+
React__default.createElement("tr", { className: "data-grid-footer-row", "aria-rowindex": table.getRowCount() + 1 }, footer.headers.map((header) => (React__default.createElement(FooterCell, { key: header.id, ariaRoles: ariaRoles, header: header }))))));
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export { Footer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.js","sources":["../../../../../src/components/DataGrid/components/Footer/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { AriaRoles } from '../../types';\nimport { FooterCell } from './FooterCell';\n\ntype FooterProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * ARIA roles used in the grid.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Footer = ({ table, ariaRoles }: FooterProps) => {\n // We're not making use of column grouping, so we only need the first footer group.\n const [footer] = table.getFooterGroups();\n\n return (\n <tfoot className=\"data-grid-footer\">\n <tr className=\"data-grid-footer-row\">\n {footer.headers.map((header) => (\n <FooterCell key={header.id} ariaRoles={ariaRoles} header={header} />\n ))}\n </tr>\n </tfoot>\n );\n};\n"],"names":["React"],"mappings":";;;AAkBa,MAAA,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAe,KAAI;;IAE1D,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE;AAExC,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kBAAkB,EAAA;
|
|
1
|
+
{"version":3,"file":"Footer.js","sources":["../../../../../src/components/DataGrid/components/Footer/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport { Table } from '@tanstack/react-table';\n\nimport { AriaRoles } from '../../types';\nimport { FooterCell } from './FooterCell';\n\ntype FooterProps = {\n /**\n * The TanStack table instance.\n */\n table: Table<any>;\n\n /**\n * ARIA roles used in the grid.\n */\n ariaRoles: AriaRoles;\n};\n\nexport const Footer = ({ table, ariaRoles }: FooterProps) => {\n // We're not making use of column grouping, so we only need the first footer group.\n const [footer] = table.getFooterGroups();\n\n return (\n <tfoot className=\"data-grid-footer\">\n <tr className=\"data-grid-footer-row\" aria-rowindex={table.getRowCount() + 1}>\n {footer.headers.map((header) => (\n <FooterCell key={header.id} ariaRoles={ariaRoles} header={header} />\n ))}\n </tr>\n </tfoot>\n );\n};\n"],"names":["React"],"mappings":";;;AAkBa,MAAA,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAe,KAAI;;IAE1D,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE;AAExC,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kBAAkB,EAAA;QACjCA,cAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA,eAAA,EAAgB,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IACxE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MACzBA,cAAC,CAAA,aAAA,CAAA,UAAU,IAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAA,CAAI,CACrE,CAAC,CACC,CACC;AAEZ;;;;"}
|
|
@@ -6,6 +6,7 @@ import { SortState } from './SortState';
|
|
|
6
6
|
import { PinnedColumnState } from './PinnedColumnState';
|
|
7
7
|
import { RowGroupingConfiguration } from './RowGroupingConfiguration';
|
|
8
8
|
import { ColumnWidths } from './ColumnWidths';
|
|
9
|
+
import { EmptyState } from './EmptyState';
|
|
9
10
|
export type CustomState = {
|
|
10
11
|
iconSlot: ReactElement;
|
|
11
12
|
heading: string;
|
|
@@ -120,4 +121,24 @@ export type DataGridProps = Pick<AriaAttributes, 'aria-label'> & {
|
|
|
120
121
|
* Callback which is raised when the column widths change.
|
|
121
122
|
*/
|
|
122
123
|
onColumnsResized?: (columnWidths: ColumnWidths) => void;
|
|
124
|
+
/** Empty/Loading State */
|
|
125
|
+
/**
|
|
126
|
+
* Show the loading state.
|
|
127
|
+
*/
|
|
128
|
+
isLoading?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Number of rows to be rendered in the loading state.
|
|
131
|
+
* @default 5
|
|
132
|
+
*/
|
|
133
|
+
loadingRowCount?: number;
|
|
134
|
+
/**
|
|
135
|
+
* Settings for the empty state, rendered when there are no rows.
|
|
136
|
+
*
|
|
137
|
+
* If none is provided, a default empty state will be displayed.
|
|
138
|
+
*/
|
|
139
|
+
emptyState?: EmptyState;
|
|
140
|
+
/**
|
|
141
|
+
* Optional slot for custom content in the empty body, overrides empty state.
|
|
142
|
+
*/
|
|
143
|
+
emptySlot?: React.ReactElement;
|
|
123
144
|
};
|
|
@@ -5,3 +5,4 @@ export { ColumnDefinition } from './ColumnDefinition';
|
|
|
5
5
|
export { SortState } from './SortState';
|
|
6
6
|
export { PinnedColumnState } from './PinnedColumnState';
|
|
7
7
|
export { RowGroupingConfiguration, ExpandedRows } from './RowGroupingConfiguration';
|
|
8
|
+
export { EmptyState } from './EmptyState';
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var assignCssVars = require('../../utils/assignCssVars.cjs');
|
|
5
|
+
var Skeleton_module = require('./Skeleton.module.scss.cjs');
|
|
5
6
|
|
|
6
7
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
7
8
|
|
|
8
|
-
var
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
9
10
|
|
|
10
|
-
const Skeleton =
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
width: ${width || '100%'};
|
|
14
|
-
min-width: ${width};
|
|
15
|
-
height: ${height || '20px'};
|
|
16
|
-
min-height: ${height};
|
|
17
|
-
`};@media (prefers-reduced-motion: no-preference){animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:placeHolderShimmer;animation-timing-function:linear;}@keyframes placeHolderShimmer{0%{background-position:-1080px 0;}100%{background-position:1080px 0;}}`;
|
|
18
|
-
Skeleton.displayName = 'Skeleton';
|
|
11
|
+
const Skeleton = ({ width, height }) => {
|
|
12
|
+
return (React__default.default.createElement("div", { "aria-hidden": "true", style: assignCssVars.assignCssVars({ width, height }), className: Skeleton_module.skeleton }));
|
|
13
|
+
};
|
|
19
14
|
|
|
20
15
|
exports.Skeleton = Skeleton;
|
|
21
16
|
//# sourceMappingURL=Skeleton.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Skeleton.cjs","sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Skeleton.cjs","sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { assignCssVars } from '../../utils/assignCssVars';\n\nimport styles from './Skeleton.module.scss';\n\ntype SkeletonProps = {\n width?: string;\n height?: string;\n};\n\nexport const Skeleton = ({ width, height }: SkeletonProps) => {\n return (\n <div aria-hidden=\"true\" style={assignCssVars({ width, height })} className={styles.skeleton} />\n );\n};\n"],"names":["React","assignCssVars","styles"],"mappings":";;;;;;;;;;AAWa,MAAA,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAiB,KAAI;IAC3D,QACEA,6DAAiB,MAAM,EAAC,KAAK,EAAEC,2BAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAEC,eAAM,CAAC,QAAQ,EAAI,CAAA;AAEnG;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type SkeletonProps = {
|
|
2
3
|
width?: string;
|
|
3
4
|
height?: string;
|
|
4
5
|
};
|
|
5
|
-
export declare const Skeleton:
|
|
6
|
-
|
|
7
|
-
} & SkeletonProps, "aria-hidden">;
|
|
6
|
+
export declare const Skeleton: ({ width, height }: SkeletonProps) => React.JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { assignCssVars } from '../../utils/assignCssVars.js';
|
|
3
|
+
import styles from './Skeleton.module.scss.js';
|
|
3
4
|
|
|
4
|
-
const Skeleton =
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
width: ${width || '100%'};
|
|
8
|
-
min-width: ${width};
|
|
9
|
-
height: ${height || '20px'};
|
|
10
|
-
min-height: ${height};
|
|
11
|
-
`};@media (prefers-reduced-motion: no-preference){animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:placeHolderShimmer;animation-timing-function:linear;}@keyframes placeHolderShimmer{0%{background-position:-1080px 0;}100%{background-position:1080px 0;}}`;
|
|
12
|
-
Skeleton.displayName = 'Skeleton';
|
|
5
|
+
const Skeleton = ({ width, height }) => {
|
|
6
|
+
return (React__default.createElement("div", { "aria-hidden": "true", style: assignCssVars({ width, height }), className: styles.skeleton }));
|
|
7
|
+
};
|
|
13
8
|
|
|
14
9
|
export { Skeleton };
|
|
15
10
|
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Skeleton.js","sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { assignCssVars } from '../../utils/assignCssVars';\n\nimport styles from './Skeleton.module.scss';\n\ntype SkeletonProps = {\n width?: string;\n height?: string;\n};\n\nexport const Skeleton = ({ width, height }: SkeletonProps) => {\n return (\n <div aria-hidden=\"true\" style={assignCssVars({ width, height })} className={styles.skeleton} />\n );\n};\n"],"names":["React"],"mappings":";;;;AAWa,MAAA,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAiB,KAAI;IAC3D,QACEA,qDAAiB,MAAM,EAAC,KAAK,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAI,CAAA;AAEnG;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ___$insertStyle = require('../../_virtual/____insertStyle.cjs');
|
|
4
|
+
|
|
5
|
+
___$insertStyle("._skeleton_1w7c5_1 {\n box-sizing: border-box;\n position: relative;\n margin: var(--sizes-none);\n padding: var(--sizes-none);\n display: block;\n background: #f6f7f8;\n background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n background-size: 2500px 104px;\n cursor: progress;\n border-radius: var(--sizes-1);\n width: var(--width, \"100%\");\n min-width: var(--width, \"100%\");\n height: var(--height, \"20px\");\n min-height: var(--height, \"20px\");\n}\n@keyframes _placeHolderShimmer_1w7c5_1 {\n 0% {\n background-position: -1080px 0;\n }\n 100% {\n background-position: 1080px 0;\n }\n}\n@media (prefers-reduced-motion: no-preference) {\n ._skeleton_1w7c5_1 {\n animation-duration: 2s;\n animation-fill-mode: forwards;\n animation-iteration-count: infinite;\n animation-name: _placeHolderShimmer_1w7c5_1;\n animation-timing-function: linear;\n }\n}");
|
|
6
|
+
var styles = {"skeleton":"_skeleton_1w7c5_1","placeHolderShimmer":"_placeHolderShimmer_1w7c5_1"};
|
|
7
|
+
|
|
8
|
+
module.exports = styles;
|
|
9
|
+
//# sourceMappingURL=Skeleton.module.scss.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.module.scss.cjs","sources":["../../../src/components/Skeleton/Skeleton.module.scss"],"sourcesContent":[".skeleton {\n box-sizing: border-box;\n position: relative;\n margin: var(--sizes-none);\n padding: var(--sizes-none);\n\n // General\n display: block;\n background: #f6f7f8;\n background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n background-size: 2500px 104px;\n\n cursor: progress;\n\n // Sizing\n border-radius: var(--sizes-1);\n\n width: var(--width, '100%');\n min-width: var(--width, '100%');\n\n height: var(--height, '20px');\n min-height: var(--height, '20px');\n\n // Animation\n @keyframes placeHolderShimmer {\n 0% {\n background-position: -1080px 0;\n }\n 100% {\n background-position: 1080px 0;\n }\n }\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 2s;\n animation-fill-mode: forwards;\n animation-iteration-count: infinite;\n animation-name: placeHolderShimmer;\n animation-timing-function: linear;\n }\n}\n\n"],"names":[],"mappings":";;;;AACE,eAAA,CAAA,y5BAAA;AACA,aAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,oBAAA,CAAA,6BAAA;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import insertStyle from '../../_virtual/____insertStyle.js';
|
|
2
|
+
|
|
3
|
+
insertStyle("._skeleton_1w7c5_1 {\n box-sizing: border-box;\n position: relative;\n margin: var(--sizes-none);\n padding: var(--sizes-none);\n display: block;\n background: #f6f7f8;\n background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n background-size: 2500px 104px;\n cursor: progress;\n border-radius: var(--sizes-1);\n width: var(--width, \"100%\");\n min-width: var(--width, \"100%\");\n height: var(--height, \"20px\");\n min-height: var(--height, \"20px\");\n}\n@keyframes _placeHolderShimmer_1w7c5_1 {\n 0% {\n background-position: -1080px 0;\n }\n 100% {\n background-position: 1080px 0;\n }\n}\n@media (prefers-reduced-motion: no-preference) {\n ._skeleton_1w7c5_1 {\n animation-duration: 2s;\n animation-fill-mode: forwards;\n animation-iteration-count: infinite;\n animation-name: _placeHolderShimmer_1w7c5_1;\n animation-timing-function: linear;\n }\n}");
|
|
4
|
+
var styles = {"skeleton":"_skeleton_1w7c5_1","placeHolderShimmer":"_placeHolderShimmer_1w7c5_1"};
|
|
5
|
+
|
|
6
|
+
export { styles as default };
|
|
7
|
+
//# sourceMappingURL=Skeleton.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.module.scss.js","sources":["../../../src/components/Skeleton/Skeleton.module.scss"],"sourcesContent":[".skeleton {\n box-sizing: border-box;\n position: relative;\n margin: var(--sizes-none);\n padding: var(--sizes-none);\n\n // General\n display: block;\n background: #f6f7f8;\n background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);\n background-size: 2500px 104px;\n\n cursor: progress;\n\n // Sizing\n border-radius: var(--sizes-1);\n\n width: var(--width, '100%');\n min-width: var(--width, '100%');\n\n height: var(--height, '20px');\n min-height: var(--height, '20px');\n\n // Animation\n @keyframes placeHolderShimmer {\n 0% {\n background-position: -1080px 0;\n }\n 100% {\n background-position: 1080px 0;\n }\n }\n\n @media (prefers-reduced-motion: no-preference) {\n animation-duration: 2s;\n animation-fill-mode: forwards;\n animation-iteration-count: infinite;\n animation-name: placeHolderShimmer;\n animation-timing-function: linear;\n }\n}\n\n"],"names":["___$insertStyle"],"mappings":";;AACEA,WAAA,CAAA,y5BAAA;AACA,aAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,oBAAA,CAAA,6BAAA;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('../components/ThemeInjector/utils.cjs');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Utility function which converts an object of properties into a style object with CSS variables, for use when
|
|
7
|
+
* working with CSS modules.
|
|
8
|
+
*
|
|
9
|
+
* Property names are converted from camelCase to kebab-case.
|
|
10
|
+
*
|
|
11
|
+
* @param props An object containing props to pass though as CSS variables.
|
|
12
|
+
* @returns A style object containing the CSS variables.
|
|
13
|
+
*/
|
|
14
|
+
const assignCssVars = (props) => {
|
|
15
|
+
const styleObject = {};
|
|
16
|
+
Object.entries(props).forEach(([propName, value]) => {
|
|
17
|
+
if (value === undefined) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
styleObject[`--${utils.camelToKebab(propName)}`] = value.toString();
|
|
21
|
+
});
|
|
22
|
+
return styleObject;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.assignCssVars = assignCssVars;
|
|
26
|
+
//# sourceMappingURL=assignCssVars.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignCssVars.cjs","sources":["../../src/utils/assignCssVars.ts"],"sourcesContent":["import { CSSProperties } from 'react';\nimport { camelToKebab } from '../components/ThemeInjector/utils';\n\ntype ValidCssVariableType = string | number | undefined;\n\n/**\n * Utility function which converts an object of properties into a style object with CSS variables, for use when\n * working with CSS modules.\n *\n * Property names are converted from camelCase to kebab-case.\n *\n * @param props An object containing props to pass though as CSS variables.\n * @returns A style object containing the CSS variables.\n */\nexport const assignCssVars = (props: Record<string, ValidCssVariableType>) => {\n const styleObject: Record<string, string> = {};\n\n Object.entries(props).forEach(([propName, value]) => {\n if (value === undefined) {\n return;\n }\n\n styleObject[`--${camelToKebab(propName)}`] = value.toString();\n });\n\n return styleObject as CSSProperties;\n};\n"],"names":["camelToKebab"],"mappings":";;;;AAKA;;;;;;;;AAQG;AACU,MAAA,aAAa,GAAG,CAAC,KAA2C,KAAI;IAC3E,MAAM,WAAW,GAA2B,EAAE;AAE9C,IAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAI;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB;AACD;AAED,QAAA,WAAW,CAAC,CAAA,EAAA,EAAKA,kBAAY,CAAC,QAAQ,CAAC,CAAE,CAAA,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC/D,KAAC,CAAC;AAEF,IAAA,OAAO,WAA4B;AACrC;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
type ValidCssVariableType = string | number | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Utility function which converts an object of properties into a style object with CSS variables, for use when
|
|
5
|
+
* working with CSS modules.
|
|
6
|
+
*
|
|
7
|
+
* Property names are converted from camelCase to kebab-case.
|
|
8
|
+
*
|
|
9
|
+
* @param props An object containing props to pass though as CSS variables.
|
|
10
|
+
* @returns A style object containing the CSS variables.
|
|
11
|
+
*/
|
|
12
|
+
export declare const assignCssVars: (props: Record<string, ValidCssVariableType>) => CSSProperties;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { camelToKebab } from '../components/ThemeInjector/utils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Utility function which converts an object of properties into a style object with CSS variables, for use when
|
|
5
|
+
* working with CSS modules.
|
|
6
|
+
*
|
|
7
|
+
* Property names are converted from camelCase to kebab-case.
|
|
8
|
+
*
|
|
9
|
+
* @param props An object containing props to pass though as CSS variables.
|
|
10
|
+
* @returns A style object containing the CSS variables.
|
|
11
|
+
*/
|
|
12
|
+
const assignCssVars = (props) => {
|
|
13
|
+
const styleObject = {};
|
|
14
|
+
Object.entries(props).forEach(([propName, value]) => {
|
|
15
|
+
if (value === undefined) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
styleObject[`--${camelToKebab(propName)}`] = value.toString();
|
|
19
|
+
});
|
|
20
|
+
return styleObject;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { assignCssVars };
|
|
24
|
+
//# sourceMappingURL=assignCssVars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignCssVars.js","sources":["../../src/utils/assignCssVars.ts"],"sourcesContent":["import { CSSProperties } from 'react';\nimport { camelToKebab } from '../components/ThemeInjector/utils';\n\ntype ValidCssVariableType = string | number | undefined;\n\n/**\n * Utility function which converts an object of properties into a style object with CSS variables, for use when\n * working with CSS modules.\n *\n * Property names are converted from camelCase to kebab-case.\n *\n * @param props An object containing props to pass though as CSS variables.\n * @returns A style object containing the CSS variables.\n */\nexport const assignCssVars = (props: Record<string, ValidCssVariableType>) => {\n const styleObject: Record<string, string> = {};\n\n Object.entries(props).forEach(([propName, value]) => {\n if (value === undefined) {\n return;\n }\n\n styleObject[`--${camelToKebab(propName)}`] = value.toString();\n });\n\n return styleObject as CSSProperties;\n};\n"],"names":[],"mappings":";;AAKA;;;;;;;;AAQG;AACU,MAAA,aAAa,GAAG,CAAC,KAA2C,KAAI;IAC3E,MAAM,WAAW,GAA2B,EAAE;AAE9C,IAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAI;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB;AACD;AAED,QAAA,WAAW,CAAC,CAAA,EAAA,EAAK,YAAY,CAAC,QAAQ,CAAC,CAAE,CAAA,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC/D,KAAC,CAAC;AAEF,IAAA,OAAO,WAA4B;AACrC;;;;"}
|