@amboss/design-system 4.5.0 → 4.6.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/build/cjs/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/cjs/components/DataTable/DataTable.d.ts +18 -8
- package/build/cjs/components/DataTable/DataTable.js +1 -1
- package/build/cjs/components/DataTable/DataTableToolbar/DataTableToolbar.d.ts +97 -0
- package/build/cjs/components/DataTable/DataTableToolbar/DataTableToolbar.js +1 -0
- package/build/cjs/components/DataTable/TableCell.js +1 -1
- package/build/cjs/components/DataTable/TableColumnGroups.d.ts +15 -0
- package/build/cjs/components/DataTable/TableColumnGroups.js +1 -0
- package/build/cjs/components/DataTable/header/DataTableHeaderLabel.d.ts +28 -0
- package/build/cjs/components/DataTable/header/DataTableHeaderLabel.js +1 -0
- package/build/cjs/components/DataTable/header/TableHeader.js +1 -1
- package/build/cjs/components/DataTable/index.d.ts +1 -1
- package/build/cjs/components/DataTable/internal/buildColumnSegments.d.ts +18 -0
- package/build/cjs/components/DataTable/internal/buildColumnSegments.js +1 -0
- package/build/cjs/components/DataTable/internal/buildInternalColumns.d.ts +2 -2
- package/build/cjs/components/DataTable/internal/buildInternalColumns.js +1 -1
- package/build/cjs/components/DataTable/internal/getColumnSticky.js +1 -1
- package/build/cjs/components/DataTable/internal/types.d.ts +7 -2
- package/build/cjs/components/DataTable/isDataTableColumnGroup.d.ts +2 -0
- package/build/cjs/components/DataTable/isDataTableColumnGroup.js +1 -0
- package/build/cjs/components/DataTable/types.d.ts +52 -8
- package/build/cjs/components/DataTable/useDataTableSort.d.ts +4 -4
- package/build/cjs/components/DataTable/useDataTableSort.js +1 -1
- package/build/cjs/components/FilterToolbar/FilterToolbar.d.ts +103 -0
- package/build/cjs/components/FilterToolbar/FilterToolbar.js +1 -0
- package/build/cjs/components/Internal/Panel/Panel.d.ts +22 -1
- package/build/cjs/components/Internal/Panel/Panel.js +1 -1
- package/build/cjs/components/Internal/ToolbarItemCount/ToolbarItemCount.d.ts +16 -0
- package/build/cjs/components/Internal/ToolbarItemCount/ToolbarItemCount.js +1 -0
- package/build/cjs/components/Kbd/Kbd.d.ts +118 -0
- package/build/cjs/components/Kbd/Kbd.js +1 -0
- package/build/cjs/components/KbdGroup/KbdGroup.d.ts +7 -0
- package/build/cjs/components/KbdGroup/KbdGroup.js +1 -0
- package/build/cjs/components/Layout/-types.d.ts +6 -1
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/cjs/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/cjs/components/Layout/registry.d.ts +4 -0
- package/build/cjs/components/Layout/registry.js +1 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.d.ts +4 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/cjs/components/RangePopover/RangePopover.d.ts +7 -1
- package/build/cjs/components/RangePopover/RangePopover.js +1 -1
- package/build/cjs/components/Tooltip/BaseTooltip.js +1 -1
- package/build/cjs/components/Tooltip/Tooltip.d.ts +3 -1
- package/build/cjs/components/Tooltip/Tooltip.js +1 -1
- package/build/cjs/index.d.ts +1 -0
- package/build/cjs/index.js +1 -1
- package/build/cjs/shared/useIsMacOs.d.ts +1 -0
- package/build/cjs/shared/useIsMacOs.js +1 -0
- package/build/cjs/web-tokens/_colors.json +26 -0
- package/build/cjs/web-tokens/_sizes.json +10 -0
- package/build/cjs/web-tokens/visualConfig.d.ts +25 -0
- package/build/cjs/web-tokens/visualConfig.js +1 -1
- package/build/esm/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/esm/components/DataTable/DataTable.d.ts +18 -8
- package/build/esm/components/DataTable/DataTable.js +1 -1
- package/build/esm/components/DataTable/DataTableToolbar/DataTableToolbar.d.ts +97 -0
- package/build/esm/components/DataTable/DataTableToolbar/DataTableToolbar.js +1 -0
- package/build/esm/components/DataTable/TableCell.js +1 -1
- package/build/esm/components/DataTable/TableColumnGroups.d.ts +15 -0
- package/build/esm/components/DataTable/TableColumnGroups.js +1 -0
- package/build/esm/components/DataTable/header/DataTableHeaderLabel.d.ts +28 -0
- package/build/esm/components/DataTable/header/DataTableHeaderLabel.js +1 -0
- package/build/esm/components/DataTable/header/TableHeader.js +1 -1
- package/build/esm/components/DataTable/index.d.ts +1 -1
- package/build/esm/components/DataTable/internal/buildColumnSegments.d.ts +18 -0
- package/build/esm/components/DataTable/internal/buildColumnSegments.js +1 -0
- package/build/esm/components/DataTable/internal/buildInternalColumns.d.ts +2 -2
- package/build/esm/components/DataTable/internal/buildInternalColumns.js +1 -1
- package/build/esm/components/DataTable/internal/getColumnSticky.js +1 -1
- package/build/esm/components/DataTable/internal/types.d.ts +7 -2
- package/build/esm/components/DataTable/isDataTableColumnGroup.d.ts +2 -0
- package/build/esm/components/DataTable/isDataTableColumnGroup.js +1 -0
- package/build/esm/components/DataTable/types.d.ts +52 -8
- package/build/esm/components/DataTable/useDataTableSort.d.ts +4 -4
- package/build/esm/components/DataTable/useDataTableSort.js +1 -1
- package/build/esm/components/FilterToolbar/FilterToolbar.d.ts +103 -0
- package/build/esm/components/FilterToolbar/FilterToolbar.js +1 -0
- package/build/esm/components/Internal/Panel/Panel.d.ts +22 -1
- package/build/esm/components/Internal/Panel/Panel.js +1 -1
- package/build/esm/components/Internal/ToolbarItemCount/ToolbarItemCount.d.ts +16 -0
- package/build/esm/components/Internal/ToolbarItemCount/ToolbarItemCount.js +1 -0
- package/build/esm/components/Kbd/Kbd.d.ts +118 -0
- package/build/esm/components/Kbd/Kbd.js +1 -0
- package/build/esm/components/KbdGroup/KbdGroup.d.ts +7 -0
- package/build/esm/components/KbdGroup/KbdGroup.js +1 -0
- package/build/esm/components/Layout/-types.d.ts +6 -1
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/esm/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/esm/components/Layout/registry.d.ts +4 -0
- package/build/esm/components/Layout/registry.js +1 -1
- package/build/esm/components/Layout/usePanelDockedSlide.d.ts +4 -1
- package/build/esm/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/esm/components/RangePopover/RangePopover.d.ts +7 -1
- package/build/esm/components/RangePopover/RangePopover.js +1 -1
- package/build/esm/components/Tooltip/BaseTooltip.js +1 -1
- package/build/esm/components/Tooltip/Tooltip.d.ts +3 -1
- package/build/esm/components/Tooltip/Tooltip.js +1 -1
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -1
- package/build/esm/shared/useIsMacOs.d.ts +1 -0
- package/build/esm/shared/useIsMacOs.js +1 -0
- package/build/esm/web-tokens/_colors.json +26 -0
- package/build/esm/web-tokens/_sizes.json +10 -0
- package/build/esm/web-tokens/visualConfig.d.ts +25 -0
- package/build/esm/web-tokens/visualConfig.js +1 -1
- package/build/scss/_dark.scss +3 -0
- package/build/scss/_light.scss +3 -0
- package/build/scss/_variables.scss +4 -0
- package/build/scss/subthemes/_inverted.scss +6 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"BulkActionsToolbar",{enumerable:!0,get:function(){return BulkActionsToolbar}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_breakpointsjson=/*#__PURE__*/_interop_require_default._(require("../../web-tokens/_breakpoints.json")),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"BulkActionsToolbar",{enumerable:!0,get:function(){return BulkActionsToolbar}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_breakpointsjson=/*#__PURE__*/_interop_require_default._(require("../../web-tokens/_breakpoints.json")),_ToolbarItemCount=require("../Internal/ToolbarItemCount/ToolbarItemCount"),_Button=require("../Button/Button"),_Inline=require("../Inline/Inline"),_Divider=require("../Divider/Divider"),_Checkbox=require("../Form/Checkbox/Checkbox"),_SearchInput=require("../Form/SearchInput/SearchInput"),_useBulkActionsToolbar=require("./useBulkActionsToolbar"),containerSmallSize=_breakpointsjson.default.s.value,toolbarContainerName="bulkActionsToolbar",containerSmall=`@container ${toolbarContainerName} (min-width: 0px) and (max-width:${containerSmallSize}px)`,containerLarge=`@container ${toolbarContainerName} (min-width: ${containerSmallSize}px)`,StyledBulkActionsToolbarContainer=(0,_styled.default)("div",{target:"e1072qx30",label:"StyledBulkActionsToolbarContainer"})({containerType:"inline-size",containerName:toolbarContainerName}),InlineContainer=(0,_styled.default)("div",{target:"e1072qx31",label:"InlineContainer"})(({theme})=>({display:"flex",padding:theme.variables.size.spacing.xs,gap:theme.variables.size.spacing.xs,[containerSmall]:{display:"flex",flexDirection:"column"},[containerLarge]:{paddingLeft:theme.variables.size.spacing.m}})),ToolbarInner=(0,_styled.default)("div",{target:"e1072qx32",label:"ToolbarInner"})(({theme})=>({display:"flex",alignItems:"center",gap:theme.variables.size.spacing.xs,flexGrow:1,[containerSmall]:{display:"contents"}})),ToolbarControls=(0,_styled.default)("div",{target:"e1072qx33",label:"ToolbarControls"})(({theme})=>({display:"flex",alignItems:"center",gap:theme.variables.size.spacing.xs,[containerSmall]:{order:3,justifyContent:"space-between"}})),StyledSearch=(0,_styled.default)("div",{target:"e1072qx34",label:"StyledSearch"})({[containerSmall]:{order:1}}),StyledRightSlot=(0,_styled.default)("div",{target:"e1072qx35",label:"StyledRightSlot"})(({theme,rightContentNoWrapOnMobile})=>({display:"flex",justifyContent:"flex-end",alignItems:"center",flex:1,gap:theme.variables.size.spacing.xs,[containerSmall]:{order:2,flex:"none",...!rightContentNoWrapOnMobile&&{flexWrap:"wrap"}}})),StyledRightContent=(0,_styled.default)("div",{target:"e1072qx36",label:"StyledRightContent"})(({rightContentNoWrapOnMobile})=>({...!rightContentNoWrapOnMobile&&{[containerSmall]:{flexGrow:1}}})),CustomInline=(0,_styled.default)(_Inline.Inline,{target:"e1072qx37",label:"CustomInline"})(({theme})=>({[containerSmall]:{gap:theme.variables.size.spacing.xxs},[containerLarge]:{gap:theme.variables.size.spacing.m}})),CheckboxStyled=(0,_styled.default)("label",{target:"e1072qx38",label:"CheckboxStyled"})(({theme})=>({display:"block",paddingLeft:theme.variables.size.spacing.xs,[containerLarge]:{paddingRight:theme.variables.size.spacing.xxs}})),CustomToolbarItemCount=(0,_styled.default)(_ToolbarItemCount.ToolbarItemCount,{target:"e1072qx39",label:"CustomToolbarItemCount"})(({theme})=>({[containerSmall]:{padding:theme.variables.size.spacing.xs}})),BulkActionsToolbar=_react.default.memo(function({actions,checkboxProps,totalItems,searchInputProps,renderRightContent,rightContentNoWrapOnMobile,hideDivider,"data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let id=(0,_react.useId)(),{toolbarId,toolbarRef,onBlur,onFocus}=(0,_useBulkActionsToolbar.useBulkActionsToolbar)(),hasSelectionControls=!!(checkboxProps||searchInputProps);return _react.default.createElement(StyledBulkActionsToolbarContainer,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Toolbar"},_react.default.createElement(InlineContainer,null,_react.default.createElement(ToolbarInner,{role:"toolbar","aria-describedby":hasSelectionControls?void 0:id,"aria-orientation":"horizontal",id:toolbarId,ref:toolbarRef,onBlur:onBlur,onFocus:onFocus,...ariaAttributes},_react.default.createElement(ToolbarControls,null,checkboxProps?_react.default.createElement(CustomInline,{vAlignItems:"center"},_react.default.createElement(CheckboxStyled,null,_react.default.createElement(_Checkbox.CheckboxRaw,{...checkboxProps,size:"s","aria-labelledby":id})),_react.default.createElement(CustomToolbarItemCount,{id:id},totalItems)):_react.default.createElement(CustomToolbarItemCount,{id:id},totalItems),_react.default.createElement(_Inline.Inline,{noWrap:!0},actions?.map(({variant="secondary",label,...buttonProps})=>_react.default.createElement(_Button.Button,{...buttonProps,key:`action-${label}`,size:"s",variant:variant,"aria-describedby":id},label)))),renderRightContent&&_react.default.createElement(StyledRightSlot,{rightContentNoWrapOnMobile:rightContentNoWrapOnMobile},_react.default.createElement(StyledRightContent,{rightContentNoWrapOnMobile:rightContentNoWrapOnMobile},renderRightContent({toolbarId:toolbarId})))),searchInputProps&&_react.default.createElement(StyledSearch,null,_react.default.createElement(_SearchInput.SearchInput,{...searchInputProps,"aria-describedby":id}))),!hideDivider&&_react.default.createElement(_Divider.Divider,null))});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode } from "react";
|
|
2
2
|
import type { MQ } from "../../types";
|
|
3
|
-
import type { DataTableColumn, DataTableRow, DataTableRowProps, DataTableSlotProps } from "./types";
|
|
3
|
+
import type { DataTableColumn, DataTableColumnOrGroup, DataTableRow, DataTableRowProps, DataTableSlotProps } from "./types";
|
|
4
|
+
import { DataTableToolbar } from "./DataTableToolbar/DataTableToolbar";
|
|
4
5
|
type DataTablePropsBase = {
|
|
5
6
|
/** Screen reader text for table caption */
|
|
6
7
|
caption: string;
|
|
@@ -15,8 +16,10 @@ type DataTablePropsBase = {
|
|
|
15
16
|
/** Footer element */
|
|
16
17
|
footer?: ReactElement;
|
|
17
18
|
/**
|
|
18
|
-
* Meta data for columns
|
|
19
|
-
*
|
|
19
|
+
* Meta data for columns. An entry with `kind: "group"` and `children` is a
|
|
20
|
+
* group: the children become the columns, and the group renders a shared label
|
|
21
|
+
* above them. A column leaves `kind` out.
|
|
22
|
+
* @param DataTableColumn[].name - Column name, and the key read from each row
|
|
20
23
|
* @param DataTableColumn[].label - Column label for display
|
|
21
24
|
* @param DataTableColumn[].align - Align cell content, 'left' | 'right' | 'center'
|
|
22
25
|
* @param DataTableColumn[].width - Column width
|
|
@@ -26,7 +29,7 @@ type DataTablePropsBase = {
|
|
|
26
29
|
* @param DataTableColumn[].isSortable - Is table sortable by column
|
|
27
30
|
* @param DataTableColumn[].sortDirection - Sorted as 'asc' | 'desc'
|
|
28
31
|
*/
|
|
29
|
-
columns:
|
|
32
|
+
columns: DataTableColumnOrGroup[];
|
|
30
33
|
/**
|
|
31
34
|
* Table content as an array of objects with values for each column
|
|
32
35
|
* @param DataTableRow[].id - Unique id
|
|
@@ -49,11 +52,13 @@ type DataTablePropsBase = {
|
|
|
49
52
|
* rendered when `isEmpty` is true. */
|
|
50
53
|
slotProps?: DataTableSlotProps;
|
|
51
54
|
/**
|
|
52
|
-
* Is first column sticky on horizontal scroll
|
|
55
|
+
* Is first column sticky on horizontal scroll. Ignored when that column
|
|
56
|
+
* belongs to a group, because a group label cannot pin with it.
|
|
53
57
|
*/
|
|
54
58
|
isFirstColumnSticky?: boolean;
|
|
55
59
|
/**
|
|
56
|
-
* Is
|
|
60
|
+
* Is last column sticky on horizontal scroll. Ignored when that column
|
|
61
|
+
* belongs to a group, because a group label cannot pin with it.
|
|
57
62
|
*/
|
|
58
63
|
isLastColumnSticky?: boolean;
|
|
59
64
|
"data-e2e-test-id"?: string;
|
|
@@ -80,8 +85,12 @@ type DataTablePropsBase = {
|
|
|
80
85
|
};
|
|
81
86
|
type DataTableSelectableProps = {
|
|
82
87
|
/** Renders selectable rows */
|
|
83
|
-
isSelectable:
|
|
84
|
-
/**
|
|
88
|
+
isSelectable: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Accessible name for the header select-all checkbox. Required as soon as
|
|
91
|
+
* `isSelectable` can be `true`, a runtime boolean included. It renders
|
|
92
|
+
* nothing while selection is off.
|
|
93
|
+
*/
|
|
85
94
|
selectAllRowsCheckboxAriaLabel: string;
|
|
86
95
|
/** Array of selected row ids */
|
|
87
96
|
selectedRowIds?: DataTableRow["id"][];
|
|
@@ -135,5 +144,6 @@ export declare function BaseDataTable({ caption, columns, rows, footer, currentl
|
|
|
135
144
|
export declare function DataTable({ children, ...rest }: DataTableProps): ReactElement;
|
|
136
145
|
export declare namespace DataTable {
|
|
137
146
|
var sortCompareFn: (a: DataTableRow, b: DataTableRow, columnName: DataTableColumn["name"], desiredSortDirection: DataTableColumn["sortDirection"]) => number;
|
|
147
|
+
var Toolbar: typeof DataTableToolbar;
|
|
138
148
|
}
|
|
139
149
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get BaseDataTable(){return BaseDataTable},get DataTable(){return DataTable}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_interop_require_wildcard=require("@swc/helpers/_/_interop_require_wildcard"),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_react=/*#__PURE__*/_interop_require_wildcard._(require("react")),_mediaQueries=require("../../shared/mediaQueries"),_Container=require("../Container/Container"),_ScreenReaderText=require("../Utilities/ScreenReaderText/ScreenReaderText"),_buildInternalColumns=require("./internal/buildInternalColumns"),_TableHeader=/*#__PURE__*/_interop_require_default._(require("./header/TableHeader")),_TableBody=/*#__PURE__*/_interop_require_default._(require("./TableBody")),_useDataTableScrollContainer=require("./useDataTableScrollContainer"),_useDataTableSort=require("./useDataTableSort");function getTableScrolledToRight(elm){let elmRect=elm.getBoundingClientRect();return elm.scrollLeft+elmRect.width>=elm.scrollWidth}const TableContainer=(0,_styled.default)("div",{target:"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get BaseDataTable(){return BaseDataTable},get DataTable(){return DataTable}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_interop_require_wildcard=require("@swc/helpers/_/_interop_require_wildcard"),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_react=/*#__PURE__*/_interop_require_wildcard._(require("react")),_mediaQueries=require("../../shared/mediaQueries"),_Container=require("../Container/Container"),_ScreenReaderText=require("../Utilities/ScreenReaderText/ScreenReaderText"),_buildColumnSegments=require("./internal/buildColumnSegments"),_buildInternalColumns=require("./internal/buildInternalColumns"),_TableHeader=/*#__PURE__*/_interop_require_default._(require("./header/TableHeader")),_TableBody=/*#__PURE__*/_interop_require_default._(require("./TableBody")),_TableColumnGroups=/*#__PURE__*/_interop_require_default._(require("./TableColumnGroups")),_useDataTableScrollContainer=require("./useDataTableScrollContainer"),_useDataTableSort=require("./useDataTableSort"),_DataTableToolbar=require("./DataTableToolbar/DataTableToolbar");function getTableScrolledToRight(elm){let elmRect=elm.getBoundingClientRect();return elm.scrollLeft+elmRect.width>=elm.scrollWidth}const TableContainer=(0,_styled.default)("div",{target:"e1eldv6n0",label:"TableContainer"})(({theme,footer,maxHeight})=>({position:"relative",zIndex:0,overflow:"auto",backgroundColor:theme.values.color.background.primary.default,borderRadius:"inherit",...(0,_mediaQueries.useResponsiveValue)({maxHeight}),...footer&&{borderBottomLeftRadius:0,borderBottomRightRadius:0}})),StyledTable=(0,_styled.default)("table",{target:"e1eldv6n1",label:"StyledTable"})(({layout,tableWidth})=>({borderSpacing:0,tableLayout:layout,...(0,_mediaQueries.useResponsiveValue)({width:tableWidth})})),StyledFooter=(0,_styled.default)("div",{target:"e1eldv6n2",label:"StyledFooter"})(({theme})=>({padding:theme.variables.size.spacing.xs,backgroundColor:theme.values.color.background.primary.default,borderBottomLeftRadius:"inherit",borderBottomRightRadius:"inherit"})),NO_SELECTED_ROW_IDS=[];function BaseDataTable({caption,columns,rows=[],footer,currentlySortedByColumn,isFirstColumnSticky=!0,isLastColumnSticky=!1,"data-e2e-test-id":dataE2eTestId,isLoading=!1,loadingStateScreenReaderText="Loading",isEmpty=!1,slotProps,children,emptyTableContentHeight="15rem",layout="auto",width="100%",bodyCellVerticalPadding="m",emptyCellContent="--",maxHeight,isSelectable,selectedRowIds=NO_SELECTED_ROW_IDS,allRowsSelected,selectAllRowsCheckboxAriaLabel,getRowProps=()=>({}),onRowSelectionChange,onAllRowsSelectionChange,isExpandable,expandedRowIds:expandedRowIdsProp,onRowExpansionChange,expandRowAriaLabel,collapseRowAriaLabel,onSort,...ariaAttributes}){let[isScrolledToRight,setIsScrolledToRight]=(0,_react.useState)(isLastColumnSticky),[isScrolledToLeft,setIsScrolledToLeft]=(0,_react.useState)(isFirstColumnSticky),[uncontrolledExpandedRowIds,setUncontrolledExpandedRowIds]=(0,_react.useState)([]),tableRef=(0,_react.useRef)(null),containerRef=(0,_react.useRef)(null),containerWidth=(0,_useDataTableScrollContainer.useDataTableScrollContainerWidth)(containerRef),isExpandedControlled=void 0!==expandedRowIdsProp,expandedRowIds=isExpandedControlled?expandedRowIdsProp:uncontrolledExpandedRowIds,activeSelectedRowIds=isSelectable?selectedRowIds:NO_SELECTED_ROW_IDS,internalColumns=(0,_buildInternalColumns.buildInternalColumns)({columns,features:{selectable:isSelectable,expandable:isExpandable}}),columnSegments=(0,_buildColumnSegments.buildColumnSegments)(internalColumns),hasColumnGroups=columnSegments.some(({group})=>group),handleRowExpansionChange=(0,_react.useCallback)(nextExpandedRowIds=>{isExpandedControlled||setUncontrolledExpandedRowIds(nextExpandedRowIds),onRowExpansionChange?.(nextExpandedRowIds)},[isExpandedControlled,onRowExpansionChange]),handleScroll=(0,_react.useCallback)(evt=>{let elm=evt.currentTarget;setIsScrolledToLeft(0===elm.scrollLeft),setIsScrolledToRight(getTableScrolledToRight(elm))},[]);(0,_react.useEffect)(()=>{if("undefined"==typeof ResizeObserver||!containerRef.current)return;let elm=containerRef.current,observer=new ResizeObserver(()=>{setIsScrolledToLeft(0===elm.scrollLeft),setIsScrolledToRight(getTableScrolledToRight(elm))});return observer.observe(elm),()=>observer.disconnect()},[]);let footerElm=footer?_react.default.createElement(StyledFooter,null,footer):null;return _react.default.createElement(_react.default.Fragment,null,_react.default.createElement(TableContainer,{ref:containerRef,footer:footer,maxHeight:maxHeight,onScroll:handleScroll},_react.default.createElement(StyledTable,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"DataTable",ref:tableRef,layout:layout,tableWidth:width,"aria-busy":isLoading||void 0,...ariaAttributes},_react.default.createElement(_ScreenReaderText.ScreenReaderText,{as:"caption"},caption),hasColumnGroups&&_react.default.createElement(_TableColumnGroups.default,{segments:columnSegments}),_react.default.createElement(_TableHeader.default,{columns:internalColumns,isFirstColumnSticky:isFirstColumnSticky,isLastColumnSticky:isLastColumnSticky,currentlySortedByColumn:currentlySortedByColumn,isTableScrolledToLeft:isScrolledToLeft,isTableScrolledToRight:isScrolledToRight,maxHeight:maxHeight,allRowsSelected:allRowsSelected,selectedRowIds:activeSelectedRowIds,onAllRowsSelectionChange:onAllRowsSelectionChange,selectAllRowsCheckboxAriaLabel:selectAllRowsCheckboxAriaLabel,onSort:onSort}),_react.default.createElement(_TableBody.default,{columns:internalColumns,rows:rows,bodyCellVerticalPadding:bodyCellVerticalPadding,isTableScrolledToLeft:isScrolledToLeft,isTableScrolledToRight:isScrolledToRight,isEmpty:isEmpty,emptyState:slotProps?.emptyState,isLoading:isLoading,loadingStateScreenReaderText:loadingStateScreenReaderText,emptyTableContentHeight:emptyTableContentHeight,containerWidth:containerWidth,footer:footer,isFirstColumnSticky:isFirstColumnSticky,isLastColumnSticky:isLastColumnSticky,emptyCellContent:emptyCellContent,selectedRowIds:activeSelectedRowIds,onRowSelectionChange:onRowSelectionChange,getRowProps:getRowProps,expandedRowIds:expandedRowIds,isTableExpandable:isExpandable,expandRowAriaLabel:expandRowAriaLabel,collapseRowAriaLabel:collapseRowAriaLabel,onRowExpansionChange:handleRowExpansionChange},children))),footerElm)}function DataTable({children,...rest}){return _react.default.createElement(_Container.Container,{elevation:1},_react.default.createElement(BaseDataTable,rest,children))}DataTable.sortCompareFn=_useDataTableSort.defaultSortCompareFn,DataTable.Toolbar=_DataTableToolbar.DataTableToolbar;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import type { ConditionalAccessibleName } from "../../../types/a11y";
|
|
3
|
+
import type { ForbiddenProp } from "../../../types/type-helpers";
|
|
4
|
+
import type { SlotProps } from "../../../shared/slotProps";
|
|
5
|
+
import type { BulkActionsToolbarProps } from "../../BulkActionsToolbar/BulkActionsToolbar";
|
|
6
|
+
import type { FilterToolbarContentProps } from "../../FilterToolbar/FilterToolbar";
|
|
7
|
+
type DataTableToolbarFilterContent = Omit<FilterToolbarContentProps, "totalItems" | "searchInputProps">;
|
|
8
|
+
type NoAccessibleName = {
|
|
9
|
+
"aria-label"?: ForbiddenProp<"Fix: isSelectable={false} renders no toolbar row for aria-label to name. Remove it.">;
|
|
10
|
+
"aria-labelledby"?: ForbiddenProp<"Fix: isSelectable={false} renders no toolbar row for aria-labelledby to name. Remove it.">;
|
|
11
|
+
};
|
|
12
|
+
type DataTableToolbarFilterSlotProps = Required<SlotProps<{
|
|
13
|
+
/** Accessible name of the filter row's control group. */
|
|
14
|
+
filterToolbar: {
|
|
15
|
+
"aria-label": string;
|
|
16
|
+
};
|
|
17
|
+
}>>;
|
|
18
|
+
/**
|
|
19
|
+
* Each row keeps its own accessible name, required only while that row
|
|
20
|
+
* renders: `slotProps.filterToolbar` for the filter row's `role="group"` (an
|
|
21
|
+
* unnamed group is worse than none), and `aria-label`/`aria-labelledby` for
|
|
22
|
+
* the bulk row's `role="toolbar"`. The second arm drops the toolbar name
|
|
23
|
+
* because that row never renders there.
|
|
24
|
+
*
|
|
25
|
+
* The first arm keeps `isSelectable` a plain `boolean` on purpose: a caller
|
|
26
|
+
* deciding selection at runtime can't prove the bulk row is gone, so it still
|
|
27
|
+
* owes a name and still type-checks without branching its JSX.
|
|
28
|
+
*/
|
|
29
|
+
type DataTableToolbarFilterSlice = ({
|
|
30
|
+
slotProps: DataTableToolbarFilterSlotProps;
|
|
31
|
+
/**
|
|
32
|
+
* Whether the rows can be selected. When `false`, the bulk-actions row is
|
|
33
|
+
* hidden and the filter row takes over the item count.
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
isSelectable?: boolean;
|
|
37
|
+
} & DataTableToolbarFilterContent & ConditionalAccessibleName) | ({
|
|
38
|
+
slotProps: DataTableToolbarFilterSlotProps;
|
|
39
|
+
isSelectable: false;
|
|
40
|
+
} & NoAccessibleName & DataTableToolbarFilterContent) | ({
|
|
41
|
+
slotProps?: never;
|
|
42
|
+
isSelectable?: true;
|
|
43
|
+
segmentedControlProps?: never;
|
|
44
|
+
filters?: never;
|
|
45
|
+
} & ConditionalAccessibleName);
|
|
46
|
+
/**
|
|
47
|
+
* Forwarded to `BulkActionsToolbar`. Each prop keeps that component's own type,
|
|
48
|
+
* so the two cannot drift.
|
|
49
|
+
*/
|
|
50
|
+
type DataTableToolbarBulkActionsSlice = {
|
|
51
|
+
/** Bulk action buttons, e.g. "Edit", "Export", "Delete". */
|
|
52
|
+
actions?: BulkActionsToolbarProps["actions"];
|
|
53
|
+
/**
|
|
54
|
+
* Select-all checkbox shown at the start of the bulk row. Omit it when the
|
|
55
|
+
* table renders its own select-all checkbox, to avoid a duplicate control.
|
|
56
|
+
*/
|
|
57
|
+
checkboxProps?: BulkActionsToolbarProps["checkboxProps"];
|
|
58
|
+
/**
|
|
59
|
+
* Item count, e.g. `"50 items"`. Shown in the bulk row, or in the filter row
|
|
60
|
+
* when `isSelectable` is `false`. It is the toolbar's single live region.
|
|
61
|
+
*/
|
|
62
|
+
totalItems: BulkActionsToolbarProps["totalItems"];
|
|
63
|
+
/** Content rendered at the end of the bulk row. Receives the toolbar's own id. */
|
|
64
|
+
renderRightContent?: BulkActionsToolbarProps["renderRightContent"];
|
|
65
|
+
/** Keeps the right content on one line on narrow viewports. */
|
|
66
|
+
rightContentNoWrapOnMobile?: BulkActionsToolbarProps["rightContentNoWrapOnMobile"];
|
|
67
|
+
/** Hides the divider below the toolbar, whichever row is the last one. */
|
|
68
|
+
hideDivider?: BulkActionsToolbarProps["hideDivider"];
|
|
69
|
+
};
|
|
70
|
+
export type DataTableToolbarProps = DataTableToolbarFilterSlice & DataTableToolbarBulkActionsSlice & {
|
|
71
|
+
/**
|
|
72
|
+
* Search field. It renders in the filter row when that row exists, and in
|
|
73
|
+
* the bulk row otherwise.
|
|
74
|
+
*/
|
|
75
|
+
searchInputProps?: FilterToolbarContentProps["searchInputProps"];
|
|
76
|
+
"data-e2e-test-id"?: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The controls above a `DataTable`: a `FilterToolbar` (segmented control,
|
|
80
|
+
* filter and column triggers, search) above the existing `BulkActionsToolbar`
|
|
81
|
+
* row.
|
|
82
|
+
*
|
|
83
|
+
* - `isSelectable` (default `true`) decides whether the bulk-actions row
|
|
84
|
+
* renders. The item count sits in that row when it renders, and in the
|
|
85
|
+
* filter row otherwise.
|
|
86
|
+
* - The search field sits in the filter row when that row renders, and in the
|
|
87
|
+
* bulk-actions row otherwise.
|
|
88
|
+
*
|
|
89
|
+
* For a filter row on its own, import `FilterToolbar` directly. It has no
|
|
90
|
+
* dependency on `DataTable`.
|
|
91
|
+
*
|
|
92
|
+
* Render as a sibling of `BaseDataTable` inside a shared
|
|
93
|
+
* `<Container elevation={1}>`, never as a child of `<DataTable>`. `DataTable`
|
|
94
|
+
* renders its `children` inside the `<table>` itself.
|
|
95
|
+
*/
|
|
96
|
+
export declare function DataTableToolbar({ slotProps, isSelectable, segmentedControlProps, filters, searchInputProps, actions, checkboxProps, totalItems, renderRightContent, rightContentNoWrapOnMobile, hideDivider, "data-e2e-test-id": dataE2eTestId, ...ariaAttributes }: DataTableToolbarProps): ReactElement;
|
|
97
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"DataTableToolbar",{enumerable:!0,get:function(){return DataTableToolbar}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_Divider=require("../../Divider/Divider"),_BulkActionsToolbar=require("../../BulkActionsToolbar/BulkActionsToolbar"),_FilterToolbar=require("../../FilterToolbar/FilterToolbar"),hasAccessibleName=ariaAttributes=>"aria-label"in ariaAttributes||"aria-labelledby"in ariaAttributes,StyledToolbar=(0,_styled.default)("div",{target:"e116raau0",label:"StyledToolbar"})(({theme,hasFilterRow})=>({borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit",backgroundColor:hasFilterRow?theme.values.color.background.secondary.default:theme.values.color.background.primary.default}));function DataTableToolbar({slotProps,isSelectable=!0,segmentedControlProps,filters,searchInputProps,actions,checkboxProps,totalItems,renderRightContent,rightContentNoWrapOnMobile,hideDivider,"data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let showFilterRow=!!segmentedControlProps||!!filters?.length||!isSelectable;return _react.default.createElement(StyledToolbar,{hasFilterRow:showFilterRow,"data-ds-id":"DataTableToolbar","data-e2e-test-id":dataE2eTestId},showFilterRow&&void 0!==slotProps&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_FilterToolbar.FilterToolbar,{"aria-label":slotProps.filterToolbar["aria-label"],totalItems:isSelectable?void 0:totalItems,segmentedControlProps:segmentedControlProps,filters:filters,searchInputProps:searchInputProps}),(isSelectable||!hideDivider)&&_react.default.createElement(_Divider.Divider,null)),isSelectable&&hasAccessibleName(ariaAttributes)&&_react.default.createElement(_BulkActionsToolbar.BulkActionsToolbar,{actions:actions,checkboxProps:checkboxProps,totalItems:totalItems,searchInputProps:showFilterRow?void 0:searchInputProps,renderRightContent:renderRightContent,rightContentNoWrapOnMobile:rightContentNoWrapOnMobile,hideDivider:hideDivider,...ariaAttributes}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _default}});const _styled=/*#__PURE__*/require("@swc/helpers/_/_interop_require_default")._(require("@emotion/styled")),_mediaQueries=require("../../shared/mediaQueries"),_default=(0,_styled.default)("td",{target:"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _default}});const _styled=/*#__PURE__*/require("@swc/helpers/_/_interop_require_default")._(require("@emotion/styled")),_mediaQueries=require("../../shared/mediaQueries"),_default=(0,_styled.default)("td",{target:"e1tso8ln0",label:"TableCell"})(({theme,sticky,isTableScrolledToLeft,isTableScrolledToRight,alignColumn,columnWidth,isActive,isSelected})=>({borderBottom:`1px solid ${theme.values.color.divider.primary}`,backgroundColor:theme.values.color.background.primary.default,...isActive&&{backgroundColor:theme.values.color.background.secondary.default},...isSelected&&{backgroundColor:theme.values.color.background.accentSubtle.default},...(0,_mediaQueries.useResponsiveValue)({width:columnWidth,textAlign:alignColumn}),..."left"===sticky&&{borderRight:"1px solid transparent",...!isTableScrolledToLeft&&{position:"sticky",left:0,borderRightColor:theme.values.color.divider.primary,zIndex:1}},..."right"===sticky&&{borderLeft:"1px solid transparent",...!isTableScrolledToRight&&{position:"sticky",right:0,borderLeftColor:theme.values.color.divider.primary,zIndex:1}}}));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ColumnSegment } from "./internal/buildColumnSegments";
|
|
3
|
+
type TableColumnGroupsProps = {
|
|
4
|
+
segments: ColumnSegment[];
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* The `<colgroup>` elements that back the header, one per segment.
|
|
8
|
+
*
|
|
9
|
+
* A group header carries `scope="colgroup"`, which names a real column group and
|
|
10
|
+
* nothing else — `colspan` alone does not create one. The `<col>` widths also give
|
|
11
|
+
* a grouped column a width under `layout="fixed"`, where a fixed layout reads the
|
|
12
|
+
* first header row and the grouped column sits in the second.
|
|
13
|
+
*/
|
|
14
|
+
declare function TableColumnGroups({ segments, }: TableColumnGroupsProps): React.ReactElement;
|
|
15
|
+
export default TableColumnGroups;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _default}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_mediaQueries=require("../../shared/mediaQueries"),StyledCol=(0,_styled.default)("col",{target:"e12f45xj0",label:"StyledCol"})(({columnWidth})=>({...(0,_mediaQueries.useResponsiveValue)({width:columnWidth})})),_default=function({segments}){return _react.default.createElement(_react.default.Fragment,null,segments.map(segment=>_react.default.createElement("colgroup",{key:segment.columns[0].column.name},segment.columns.map(({column})=>_react.default.createElement(StyledCol,{key:column.name,columnWidth:column.width})))))};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import type { SlotProps } from "../../../shared/slotProps";
|
|
4
|
+
import type { DataTableColumn, DataTableColumnDefinition, DataTableColumnGroup } from "../types";
|
|
5
|
+
/**
|
|
6
|
+
* `aria-label` is required inside the slot because the toggletip trigger is an
|
|
7
|
+
* icon-only button, which needs an accessible name (WCAG 2.1 SC 4.1.2).
|
|
8
|
+
*/
|
|
9
|
+
type DataTableHeaderLabelSlotProps = SlotProps<{
|
|
10
|
+
toggletip: {
|
|
11
|
+
content: ReactElement;
|
|
12
|
+
"aria-label": string;
|
|
13
|
+
};
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Builds the slot in one place, so both header call sites pair `content` with
|
|
17
|
+
* its `aria-label` the same way. The project runs without `strictNullChecks`,
|
|
18
|
+
* so nothing here would flag an `aria-label` that arrives undefined.
|
|
19
|
+
*/
|
|
20
|
+
export declare const toToggletipSlotProps: (source: DataTableColumnDefinition | DataTableColumnGroup) => DataTableHeaderLabelSlotProps | undefined;
|
|
21
|
+
type DataTableHeaderLabelProps = {
|
|
22
|
+
label: string;
|
|
23
|
+
align: DataTableColumn["align"];
|
|
24
|
+
/** Props forwarded to internal sub-components */
|
|
25
|
+
slotProps?: DataTableHeaderLabelSlotProps;
|
|
26
|
+
};
|
|
27
|
+
export declare function DataTableHeaderLabel({ label, align, slotProps, }: Readonly<DataTableHeaderLabelProps>): React.ReactElement;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get DataTableHeaderLabel(){return DataTableHeaderLabel},get toToggletipSlotProps(){return toToggletipSlotProps}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_default")._(require("react")),_Inline=require("../../Inline/Inline"),_SortableCellContent=require("./SortableCellContent"),_DataTableHeaderToggletip=require("./DataTableHeaderToggletip"),toToggletipSlotProps=source=>source.toggletipContent?{toggletip:{content:source.toggletipContent,"aria-label":source.toggletipAriaLabel}}:void 0;function DataTableHeaderLabel({label,align,slotProps}){return _react.default.createElement(_Inline.Inline,{space:"xs",noWrap:!0,vAlignItems:"center",alignItems:align},_react.default.createElement(_SortableCellContent.StyledLabel,{as:"span",size:"s",alignColumn:align,color:"tertiary",normalizeHeight:!0},label),slotProps?.toggletip&&_react.default.createElement(_DataTableHeaderToggletip.DataTableHeaderToggletip,{content:slotProps.toggletip.content,"aria-label":slotProps.toggletip["aria-label"]}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _default}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_TableCell=/*#__PURE__*/_interop_require_default._(require("../TableCell")),_getColumnSticky=require("../internal/getColumnSticky"),_types=require("../internal/types"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _default}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_TableCell=/*#__PURE__*/_interop_require_default._(require("../TableCell")),_getColumnSticky=require("../internal/getColumnSticky"),_types=require("../internal/types"),_buildColumnSegments=require("../internal/buildColumnSegments"),_SortableCellContent=require("./SortableCellContent"),_DataTableHeaderLabel=require("./DataTableHeaderLabel"),SORT_DIRECTION_TEXT={asc:"ascending",desc:"descending"},StyledThead=(0,_styled.default)("thead",{target:"elv391v0",label:"StyledThead"})(({maxHeight})=>({...maxHeight&&{position:"sticky",top:0,zIndex:2}})),StyledTh=(0,_styled.default)(_TableCell.default,{target:"elv391v1",label:"StyledTh"})(({theme,hasDivider})=>({padding:`${theme.variables.size.spacing.s} ${theme.variables.size.spacing.m}`,whiteSpace:"nowrap",backgroundColor:theme.values.color.background.primary.default,...hasDivider&&{borderRight:`1px solid ${theme.values.color.divider.primary}`}})),_default=_react.default.memo(function({className,columns,isFirstColumnSticky,isLastColumnSticky,currentlySortedByColumn,isTableScrolledToLeft,isTableScrolledToRight,maxHeight,allRowsSelected,selectedRowIds,selectAllRowsCheckboxAriaLabel,onAllRowsSelectionChange,onSort}){let headerContext={onSort,currentlySortedByColumn,allRowsSelected,selectedRowIds,selectAllRowsCheckboxAriaLabel,onAllRowsSelectionChange},renderColumnCell=({column,columnIndex},rowSpan)=>{let headerElm,isLastColumn=columnIndex===columns.length-1,sticky=(0,_getColumnSticky.getColumnSticky)({column,columnIndex,columns,isFirstColumnSticky,isLastColumnSticky});if((0,_types.isControlColumn)(column))return _react.default.createElement(StyledTh,{as:"th",alignColumn:"left",columnWidth:column.width,key:column.name,rowSpan:rowSpan,sticky:sticky,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!1,scope:"col"},column.renderHeader(headerContext));let{isSortable,label,align="left",width,name,sortDirection,toggletipContent,toggletipAriaLabel}=column;headerElm=isSortable?_react.default.createElement(_SortableCellContent.SortableCellContent,{onSort:onSort,name:name,label:label,sortDirection:sortDirection,align:align,currentlySortedByColumn:currentlySortedByColumn,toggletipContent:toggletipContent,toggletipAriaLabel:toggletipAriaLabel}):_react.default.createElement(_DataTableHeaderLabel.DataTableHeaderLabel,{label:label,align:align,slotProps:(0,_DataTableHeaderLabel.toToggletipSlotProps)(column)});let ariaSortAttr=currentlySortedByColumn===name&&{"aria-sort":SORT_DIRECTION_TEXT[sortDirection]};return _react.default.createElement(StyledTh,{as:"th",alignColumn:align,columnWidth:width,key:name,rowSpan:rowSpan,sticky:sticky,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!isLastColumn,scope:"col",...ariaSortAttr},headerElm)},renderGroupCell=(group,groupColumns)=>{let{name,label,align="center"}=group,isLastColumn=groupColumns[groupColumns.length-1].columnIndex===columns.length-1;return _react.default.createElement(StyledTh,{as:"th",alignColumn:align,key:name,colSpan:groupColumns.length,sticky:!1,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!isLastColumn,scope:"colgroup"},_react.default.createElement(_DataTableHeaderLabel.DataTableHeaderLabel,{label:label,align:align,slotProps:(0,_DataTableHeaderLabel.toToggletipSlotProps)(group)}))},segments=(0,_buildColumnSegments.buildColumnSegments)(columns),hasColumnGroups=segments.some(({group})=>group),ungroupedRowSpan=hasColumnGroups?2:void 0;return _react.default.createElement(StyledThead,{className:className,maxHeight:maxHeight},_react.default.createElement("tr",null,segments.map(segment=>segment.group?renderGroupCell(segment.group,segment.columns):renderColumnCell(segment.columns[0],ungroupedRowSpan))),hasColumnGroups&&_react.default.createElement("tr",null,segments.flatMap(segment=>segment.group?segment.columns.map(indexed=>renderColumnCell(indexed)):[])))});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { DataTableColumn, DataTableRow, DataTableSlotProps, } from "./types";
|
|
1
|
+
export type { DataTableColumn, DataTableColumnGroup, DataTableColumnOrGroup, DataTableRow, DataTableSlotProps, } from "./types";
|
|
2
2
|
export { DataTable, BaseDataTable } from "./DataTable";
|
|
3
3
|
export type { DataTableProps } from "./DataTable";
|
|
4
4
|
export { useDataTableSort } from "./useDataTableSort";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DataTableColumnGroup } from "../types";
|
|
2
|
+
import type { InternalColumn } from "./types";
|
|
3
|
+
export type IndexedColumn = {
|
|
4
|
+
column: InternalColumn;
|
|
5
|
+
columnIndex: number;
|
|
6
|
+
};
|
|
7
|
+
export type ColumnSegment = {
|
|
8
|
+
/** Set when the segment's columns share one `DataTableColumnGroup`. */
|
|
9
|
+
group?: DataTableColumnGroup;
|
|
10
|
+
columns: IndexedColumn[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Splits the flat column list into segments: one segment per group, and a
|
|
14
|
+
* segment of one for every column that has no group. A segment is both a
|
|
15
|
+
* cell of the first header row and a `<colgroup>`, so the two always agree
|
|
16
|
+
* on where a group starts and ends.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildColumnSegments(columns: InternalColumn[]): ColumnSegment[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"buildColumnSegments",{enumerable:!0,get:function(){return buildColumnSegments}});const _types=require("./types");function buildColumnSegments(columns){let segments=[];return columns.forEach((column,columnIndex)=>{let group=(0,_types.isDataColumn)(column)?column.group:void 0,currentSegment=segments[segments.length-1];if(group&¤tSegment?.group===group)return void currentSegment.columns.push({column,columnIndex});segments.push({group,columns:[{column,columnIndex}]})}),segments}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DataTableColumnOrGroup } from "../types";
|
|
2
2
|
import type { InternalColumn } from "./types";
|
|
3
3
|
export type DataTableFeatures = {
|
|
4
4
|
selectable?: boolean;
|
|
5
5
|
expandable?: boolean;
|
|
6
6
|
};
|
|
7
7
|
export declare function buildInternalColumns({ columns, features: { selectable, expandable }, }: {
|
|
8
|
-
columns:
|
|
8
|
+
columns: DataTableColumnOrGroup[];
|
|
9
9
|
features: DataTableFeatures;
|
|
10
10
|
}): InternalColumn[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"buildInternalColumns",{enumerable:!0,get:function(){return buildInternalColumns}});const _checkboxColumn=require("./controlColumns/checkboxColumn"),_expandColumn=require("./controlColumns/expandColumn");function buildInternalColumns({columns,features:{selectable,expandable}}){let dataColumns=columns.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"buildInternalColumns",{enumerable:!0,get:function(){return buildInternalColumns}});const _isDataTableColumnGroup=require("../isDataTableColumnGroup"),_checkboxColumn=require("./controlColumns/checkboxColumn"),_expandColumn=require("./controlColumns/expandColumn"),toDataColumns=column=>(0,_isDataTableColumnGroup.isDataTableColumnGroup)(column)?column.children.map(child=>({...child,kind:"data",group:column})):[{...column,kind:"data"}];function buildInternalColumns({columns,features:{selectable,expandable}}){let dataColumns=columns.flatMap(toDataColumns),controlColumns=[];return expandable&&controlColumns.push((0,_expandColumn.createExpandColumn)()),selectable&&controlColumns.push((0,_checkboxColumn.createCheckboxColumn)()),[...controlColumns,...dataColumns]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"getColumnSticky",{enumerable:!0,get:function(){return getColumnSticky}});const _types=require("./types");function getColumnSticky({column,columnIndex,columns,isFirstColumnSticky,isLastColumnSticky}){if((0,_types.isControlColumn)(column))return!1;let dataColumnIndices=columns.reduce((indices,col,index)=>((0,_types.isDataColumn)(col)&&indices.push(index),indices),[]),firstDataIndex=dataColumnIndices[0],lastDataIndex=dataColumnIndices[dataColumnIndices.length-1];return isFirstColumnSticky&&columnIndex===firstDataIndex?"left":!!isLastColumnSticky&&columnIndex===lastDataIndex&&"right"}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"getColumnSticky",{enumerable:!0,get:function(){return getColumnSticky}});const _types=require("./types");function getColumnSticky({column,columnIndex,columns,isFirstColumnSticky,isLastColumnSticky}){if((0,_types.isControlColumn)(column)||column.group)return!1;let dataColumnIndices=columns.reduce((indices,col,index)=>((0,_types.isDataColumn)(col)&&indices.push(index),indices),[]),firstDataIndex=dataColumnIndices[0],lastDataIndex=dataColumnIndices[dataColumnIndices.length-1];return isFirstColumnSticky&&columnIndex===firstDataIndex?"left":!!isLastColumnSticky&&columnIndex===lastDataIndex&&"right"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import type { DataTableProps } from "../DataTable";
|
|
3
|
-
import type {
|
|
3
|
+
import type { DataTableColumnDefinition, DataTableColumnGroup, DataTableRow, DataTableRowProps } from "../types";
|
|
4
4
|
export type ControlColumnKind = "checkbox" | "expand";
|
|
5
5
|
export type HeaderRenderContext = Pick<DataTableProps, "onSort" | "currentlySortedByColumn" | "allRowsSelected" | "selectedRowIds" | "selectAllRowsCheckboxAriaLabel" | "onAllRowsSelectionChange">;
|
|
6
6
|
export type RowCellRenderContext = {
|
|
@@ -14,8 +14,13 @@ export type RowCellRenderContext = {
|
|
|
14
14
|
onRowExpansionChange: (expandedRowIds: DataTableRow["id"][]) => void;
|
|
15
15
|
emptyCellContent: string;
|
|
16
16
|
};
|
|
17
|
-
export type DataColumn =
|
|
17
|
+
export type DataColumn = DataTableColumnDefinition & {
|
|
18
18
|
kind: "data";
|
|
19
|
+
/**
|
|
20
|
+
* Set when the column came from a `DataTableColumnGroup`. The header collapses
|
|
21
|
+
* neighbours that share this reference into one spanning cell.
|
|
22
|
+
*/
|
|
23
|
+
group?: DataTableColumnGroup;
|
|
19
24
|
};
|
|
20
25
|
export type ControlColumn = {
|
|
21
26
|
kind: ControlColumnKind;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function isDataTableColumnGroup(column){return"group"===column.kind}Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"isDataTableColumnGroup",{enumerable:!0,get:function(){return isDataTableColumnGroup}});
|
|
@@ -7,6 +7,16 @@ export type DataTableRow = {
|
|
|
7
7
|
id: string;
|
|
8
8
|
[key: string]: any;
|
|
9
9
|
};
|
|
10
|
+
/** A toggletip needs both fields or neither. A column and a group share the pair. */
|
|
11
|
+
type WithToggletip = {
|
|
12
|
+
toggletipContent: ReactElement;
|
|
13
|
+
/** Accessible name for the toggletip trigger button. Required when `toggletipContent` is set. */
|
|
14
|
+
toggletipAriaLabel: string;
|
|
15
|
+
};
|
|
16
|
+
type WithoutToggletip = {
|
|
17
|
+
toggletipContent?: never;
|
|
18
|
+
toggletipAriaLabel?: never;
|
|
19
|
+
};
|
|
10
20
|
type DataTableColumnBase = {
|
|
11
21
|
name: string;
|
|
12
22
|
label: string;
|
|
@@ -16,16 +26,50 @@ type DataTableColumnBase = {
|
|
|
16
26
|
sortDirection?: "asc" | "desc";
|
|
17
27
|
renderCell?: (row: DataTableRow) => React.ReactElement;
|
|
18
28
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
/**
|
|
30
|
+
* A column before a discriminant marks it public or internal. The public
|
|
31
|
+
* `DataTableColumn` adds `kind?: "column"`; the internal `DataColumn` adds
|
|
32
|
+
* `kind: "data"`. Each adds its own, so neither has to strip the other's.
|
|
33
|
+
*/
|
|
34
|
+
export type DataTableColumnDefinition = (DataTableColumnBase & WithToggletip) | (DataTableColumnBase & WithoutToggletip);
|
|
35
|
+
export type DataTableColumn = DataTableColumnDefinition & {
|
|
36
|
+
/** Leave it out on a column. Only a group sets it, to `"group"`. */
|
|
37
|
+
kind?: "column";
|
|
38
|
+
/** Not on a column — `children` makes a group, and a group is one level deep. */
|
|
39
|
+
children?: never;
|
|
23
40
|
};
|
|
24
|
-
type
|
|
25
|
-
|
|
26
|
-
|
|
41
|
+
type DataTableColumnGroupBase = {
|
|
42
|
+
/**
|
|
43
|
+
* Marks the entry as a group. Required: it also makes TypeScript match the
|
|
44
|
+
* literal against the group alone, so a rejected field is reported where you
|
|
45
|
+
* wrote it instead of blaming `children`.
|
|
46
|
+
*/
|
|
47
|
+
kind: "group";
|
|
48
|
+
name: string;
|
|
49
|
+
label: string;
|
|
50
|
+
/** Defaults to `"center"`. It aligns the group label only, not the children. */
|
|
51
|
+
align?: TextAlignment | MQ<TextAlignment>;
|
|
52
|
+
/** The columns under the shared label. One level only — a column cannot itself be a group. */
|
|
53
|
+
children: DataTableColumn[];
|
|
54
|
+
/** Not on a group — a group spans its children and has no width of its own. */
|
|
55
|
+
width?: never;
|
|
56
|
+
/** Not on a group — a group label has no sort control. Sort a child instead. */
|
|
57
|
+
isSortable?: never;
|
|
58
|
+
/** Not on a group — sorting belongs to a child column. */
|
|
59
|
+
sortDirection?: never;
|
|
60
|
+
/** Not on a group — a group renders a label, not a cell of data. */
|
|
61
|
+
renderCell?: never;
|
|
27
62
|
};
|
|
28
|
-
|
|
63
|
+
/**
|
|
64
|
+
* A shared label above its `children`, rendered in the first header row.
|
|
65
|
+
*
|
|
66
|
+
* A group labels columns and owns no data, so it rejects `width`,
|
|
67
|
+
* `isSortable`, `sortDirection` and `renderCell`. Passing one is a type error
|
|
68
|
+
* rather than a silent no-op. They stay readable on `DataTableColumnOrGroup`,
|
|
69
|
+
* so reading a column field off the union still needs no narrowing step.
|
|
70
|
+
*/
|
|
71
|
+
export type DataTableColumnGroup = (DataTableColumnGroupBase & WithToggletip) | (DataTableColumnGroupBase & WithoutToggletip);
|
|
72
|
+
export type DataTableColumnOrGroup = DataTableColumn | DataTableColumnGroup;
|
|
29
73
|
export type DataTableRowProps = {
|
|
30
74
|
verticalAlign?: Property.VerticalAlign;
|
|
31
75
|
isActive?: boolean;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from "react";
|
|
2
|
-
import type { DataTableColumn, DataTableRow } from "./types";
|
|
2
|
+
import type { DataTableColumn, DataTableColumnOrGroup, DataTableRow } from "./types";
|
|
3
3
|
import type { DataTableProps } from "./DataTable";
|
|
4
4
|
type SortCompareFn = (a: DataTableRow, b: DataTableRow, columnName: DataTableColumn["name"], desiredSortDirection: DataTableColumn["sortDirection"]) => number;
|
|
5
5
|
export declare const defaultSortCompareFn: (a: DataTableRow, b: DataTableRow, columnName: DataTableColumn["name"], desiredSortDirection: DataTableColumn["sortDirection"]) => number;
|
|
6
|
-
export declare function useDataTableSort(initialColumns:
|
|
7
|
-
columns:
|
|
6
|
+
export declare function useDataTableSort(initialColumns: DataTableColumnOrGroup[], initialRows: DataTableRow[], initialSortedByColumn?: DataTableColumn["name"], sortCompareFn?: SortCompareFn): {
|
|
7
|
+
columns: DataTableColumnOrGroup[];
|
|
8
8
|
rows: DataTableRow[];
|
|
9
9
|
currentlySortedByColumn: DataTableColumn["name"];
|
|
10
10
|
handleSort: DataTableProps["onSort"];
|
|
11
11
|
resetColumns: VoidFunction;
|
|
12
|
-
setColumns: Dispatch<SetStateAction<
|
|
12
|
+
setColumns: Dispatch<SetStateAction<DataTableColumnOrGroup[]>>;
|
|
13
13
|
setRows: Dispatch<SetStateAction<DataTableRow[]>>;
|
|
14
14
|
setCurrentlySortedByColumn: Dispatch<SetStateAction<DataTableColumn["name"]>>;
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get defaultSortCompareFn(){return defaultSortCompareFn},get useDataTableSort(){return useDataTableSort}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=require("react"),defaultSortCompareFn=(a,b,columnName,desiredSortDirection)=>a[columnName]<b[columnName]?"asc"===desiredSortDirection?-1:1:a[columnName]>b[columnName]?"asc"===desiredSortDirection?1:-1:0;function useDataTableSort(initialColumns,initialRows,initialSortedByColumn,sortCompareFn=defaultSortCompareFn){let[columns,setColumns]=(0,_react.useState)(initialColumns),[currentlySortedByColumn,setCurrentlySortedByColumn]=(0,_react.useState)(initialSortedByColumn),[rows,setRows]=(0,_react.useState)(initialRows);return{columns,rows,currentlySortedByColumn,handleSort:(columnName,desiredSortDirection)=>{let newColumns=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get defaultSortCompareFn(){return defaultSortCompareFn},get useDataTableSort(){return useDataTableSort}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=require("react"),_isDataTableColumnGroup=require("./isDataTableColumnGroup"),defaultSortCompareFn=(a,b,columnName,desiredSortDirection)=>a[columnName]<b[columnName]?"asc"===desiredSortDirection?-1:1:a[columnName]>b[columnName]?"asc"===desiredSortDirection?1:-1:0,withUpdatedSortDirection=({columns,columnName,desiredSortDirection})=>{let updateColumn=column=>column.name===columnName?{...column,sortDirection:desiredSortDirection}:column;return columns.map(column=>(0,_isDataTableColumnGroup.isDataTableColumnGroup)(column)?{...column,children:column.children.map(updateColumn)}:updateColumn(column))};function useDataTableSort(initialColumns,initialRows,initialSortedByColumn,sortCompareFn=defaultSortCompareFn){let[columns,setColumns]=(0,_react.useState)(initialColumns),[currentlySortedByColumn,setCurrentlySortedByColumn]=(0,_react.useState)(initialSortedByColumn),[rows,setRows]=(0,_react.useState)(initialRows);return{columns,rows,currentlySortedByColumn,handleSort:(columnName,desiredSortDirection)=>{let newColumns=withUpdatedSortDirection({columns,columnName,desiredSortDirection}),newRows=[...rows];newRows.sort((a,b)=>sortCompareFn(a,b,columnName,desiredSortDirection)),setRows(newRows),setColumns(newColumns),setCurrentlySortedByColumn(columnName)},setColumns,resetColumns:()=>{setColumns(initialColumns),setCurrentlySortedByColumn(initialSortedByColumn)},setRows,setCurrentlySortedByColumn}}
|