@wallarm-org/design-system 0.62.0 → 0.63.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/Breadcrumbs/BreadcrumbsItem.js +1 -0
- package/dist/components/BulkBar/BulkBarSummary.d.ts +4 -14
- package/dist/components/BulkBar/BulkBarSummary.js +15 -46
- package/dist/components/BulkBar/BulkBarSummaryClear.d.ts +7 -0
- package/dist/components/BulkBar/BulkBarSummaryClear.js +25 -0
- package/dist/components/BulkBar/BulkBarSummaryCount.d.ts +13 -0
- package/dist/components/BulkBar/BulkBarSummaryCount.js +18 -0
- package/dist/components/BulkBar/BulkBarSummarySelectAll.d.ts +7 -0
- package/dist/components/BulkBar/BulkBarSummarySelectAll.js +25 -0
- package/dist/components/BulkBar/BulkBarSummarySeparator.d.ts +8 -0
- package/dist/components/BulkBar/BulkBarSummarySeparator.js +12 -0
- package/dist/components/BulkBar/index.d.ts +5 -0
- package/dist/components/BulkBar/index.js +6 -0
- package/dist/components/Calendar/CalendarPresetItem.d.ts +9 -3
- package/dist/components/Calendar/CalendarPresetItem.js +8 -5
- package/dist/components/Calendar/CalendarTrigger.d.ts +12 -3
- package/dist/components/Calendar/CalendarTrigger.js +3 -3
- package/dist/components/Calendar/index.d.ts +1 -1
- package/dist/components/Card/Card.js +2 -0
- package/dist/components/CodeSnippet/CodeSnippetCode.js +9 -2
- package/dist/components/CodeSnippet/CodeSnippetCopyButton.js +1 -1
- package/dist/components/CodeSnippet/CodeSnippetFullscreenButton.js +0 -1
- package/dist/components/CodeSnippet/CodeSnippetRoot.d.ts +8 -1
- package/dist/components/CodeSnippet/CodeSnippetRoot.js +5 -3
- package/dist/components/CodeSnippet/CodeSnippetShowMoreButton.d.ts +12 -0
- package/dist/components/CodeSnippet/{internal/ShowMoreButton.js → CodeSnippetShowMoreButton.js} +15 -9
- package/dist/components/CodeSnippet/CodeSnippetTab.d.ts +3 -6
- package/dist/components/CodeSnippet/CodeSnippetTab.js +5 -7
- package/dist/components/CodeSnippet/CodeSnippetWrapButton.js +0 -1
- package/dist/components/CodeSnippet/InlineCodeSnippet.d.ts +4 -2
- package/dist/components/CodeSnippet/InlineCodeSnippet.js +14 -7
- package/dist/components/CodeSnippet/index.d.ts +2 -1
- package/dist/components/CodeSnippet/index.js +2 -1
- package/dist/components/CodeSnippet/internal/FoldToggle.js +9 -2
- package/dist/components/CodeSnippet/lib/foldUtils.d.ts +6 -0
- package/dist/components/DateRangeInput/DateRangeEndValue.d.ts +9 -2
- package/dist/components/DateRangeInput/DateRangeEndValue.js +3 -2
- package/dist/components/DateRangeInput/DateRangeSegmentGroup.d.ts +12 -1
- package/dist/components/DateRangeInput/DateRangeSegmentGroup.js +24 -6
- package/dist/components/DateRangeInput/DateRangeStartValue.d.ts +11 -4
- package/dist/components/DateRangeInput/DateRangeStartValue.js +3 -2
- package/dist/components/DateRangeInput/index.d.ts +2 -2
- package/dist/components/Drawer/Drawer.d.ts +5 -0
- package/dist/components/Drawer/Drawer.js +3 -1
- package/dist/components/Drawer/DrawerClose.d.ts +3 -2
- package/dist/components/Drawer/DrawerClose.js +6 -3
- package/dist/components/Drawer/DrawerHeader.d.ts +1 -1
- package/dist/components/Drawer/DrawerHeader.js +4 -1
- package/dist/components/Drawer/DrawerResizeHandle.d.ts +7 -2
- package/dist/components/Drawer/DrawerResizeHandle.js +31 -6
- package/dist/components/Drawer/DrawerRoot.d.ts +3 -0
- package/dist/components/Drawer/DrawerRoot.js +3 -1
- package/dist/components/Drawer/DrawerTrigger.d.ts +3 -2
- package/dist/components/Drawer/DrawerTrigger.js +3 -2
- package/dist/components/Drawer/index.d.ts +1 -0
- package/dist/components/DropdownMenu/DropdownMenuCheckboxItem.d.ts +2 -1
- package/dist/components/DropdownMenu/DropdownMenuCheckboxItem.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenuContextTrigger.d.ts +3 -5
- package/dist/components/DropdownMenu/DropdownMenuContextTrigger.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenuItem.d.ts +2 -1
- package/dist/components/DropdownMenu/DropdownMenuItem.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenuRadioGroup.d.ts +2 -1
- package/dist/components/DropdownMenu/DropdownMenuRadioGroup.js +4 -4
- package/dist/components/DropdownMenu/DropdownMenuRadioItem.d.ts +2 -1
- package/dist/components/DropdownMenu/DropdownMenuRadioItem.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenuTrigger.d.ts +3 -5
- package/dist/components/DropdownMenu/DropdownMenuTrigger.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenuTriggerItem.d.ts +4 -4
- package/dist/components/DropdownMenu/DropdownMenuTriggerItem.js +4 -3
- package/dist/components/DropdownMenu/index.d.ts +4 -4
- package/dist/components/NavRail/NavRailItem.d.ts +2 -1
- package/dist/components/NavRail/NavRailItem.js +6 -4
- package/dist/components/Popover/PopoverContent.d.ts +3 -3
- package/dist/components/Popover/PopoverContent.js +4 -8
- package/dist/components/Popover/PopoverTrigger.d.ts +3 -5
- package/dist/components/Popover/PopoverTrigger.js +3 -7
- package/dist/components/Popover/index.d.ts +2 -2
- package/dist/components/SegmentedControl/SegmentedControlItem.d.ts +6 -4
- package/dist/components/SegmentedControl/SegmentedControlItem.js +5 -2
- package/dist/components/SegmentedTabs/SegmentedTabsTrigger.d.ts +5 -3
- package/dist/components/SegmentedTabs/SegmentedTabsTrigger.js +5 -3
- package/dist/components/SegmentedTabs/SegmentedTabsTriggerButton.js +2 -2
- package/dist/components/Select/SelectButton.js +2 -2
- package/dist/components/Select/SelectClearTrigger.d.ts +2 -1
- package/dist/components/Select/SelectClearTrigger.js +2 -2
- package/dist/components/Select/SelectInput/SelectInput.d.ts +4 -1
- package/dist/components/Select/SelectInput/SelectInput.js +3 -2
- package/dist/components/Select/SelectOption.d.ts +2 -1
- package/dist/components/Select/SelectOption.js +2 -2
- package/dist/components/Select/SelectSearchInput.d.ts +3 -2
- package/dist/components/Select/SelectSearchInput.js +3 -2
- package/dist/components/Select/index.d.ts +1 -1
- package/dist/components/Selection/SelectionBulkBar/SelectionBulkBar.d.ts +1 -1
- package/dist/components/Selection/SelectionBulkBar/SelectionBulkBar.js +44 -5
- package/dist/components/Selection/index.d.ts +2 -0
- package/dist/components/Selection/index.js +2 -1
- package/dist/components/Table/Table.js +7 -0
- package/dist/components/Table/TableActionBar/TableActionBar.d.ts +7 -1
- package/dist/components/Table/TableActionBar/TableActionBar.js +6 -2
- package/dist/components/Table/TableActionBar/TableActionBarSelection.d.ts +16 -2
- package/dist/components/Table/TableActionBar/TableActionBarSelection.js +52 -10
- package/dist/components/Table/TableActionBar/index.d.ts +1 -0
- package/dist/components/Table/TableActionBar/index.js +2 -1
- package/dist/components/Table/TableColumnMenu/TableColumnMenu.d.ts +37 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenu.js +139 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuHideItem.d.ts +8 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuHideItem.js +27 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveLeftItem.d.ts +8 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveLeftItem.js +38 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveRightItem.d.ts +8 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveRightItem.js +39 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuPinItem.d.ts +10 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuPinItem.js +31 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuSortItem.d.ts +17 -0
- package/dist/components/Table/TableColumnMenu/TableColumnMenuSortItem.js +33 -0
- package/dist/components/Table/TableColumnMenu/index.d.ts +6 -0
- package/dist/components/Table/TableColumnMenu/index.js +7 -0
- package/dist/components/Table/TableHeadCell.js +17 -18
- package/dist/components/Table/TableInner/TableInner.d.ts +2 -0
- package/dist/components/Table/TableInner/TableInner.js +21 -12
- package/dist/components/Table/TableInner/TableInnerContainer.d.ts +1 -0
- package/dist/components/Table/TableInner/TableInnerContainer.js +5 -3
- package/dist/components/Table/TableInner/TableInnerWindow.d.ts +1 -0
- package/dist/components/Table/TableInner/TableInnerWindow.js +5 -3
- package/dist/components/Table/TableScrollHandler.d.ts +27 -4
- package/dist/components/Table/TableScrollHandler.js +99 -68
- package/dist/components/Table/TableScrollHandlerContext.d.ts +19 -0
- package/dist/components/Table/TableScrollHandlerContext.js +24 -0
- package/dist/components/Table/TableScrollHandlerSlot.d.ts +8 -0
- package/dist/components/Table/TableScrollHandlerSlot.js +18 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenu.d.ts +18 -2
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenu.js +105 -95
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.d.ts +7 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.js +9 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContext.d.ts +15 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContext.js +21 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuItem.d.ts +8 -6
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuItem.js +17 -11
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuReset.d.ts +5 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuReset.js +34 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSearch.d.ts +5 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSearch.js +17 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSlot.d.ts +11 -0
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSlot.js +16 -0
- package/dist/components/Table/TableSettingsMenu/index.d.ts +6 -1
- package/dist/components/Table/TableSettingsMenu/index.js +6 -1
- package/dist/components/Table/TableSortTrigger.d.ts +39 -0
- package/dist/components/Table/TableSortTrigger.js +86 -0
- package/dist/components/Table/index.d.ts +6 -2
- package/dist/components/Table/index.js +7 -3
- package/dist/components/Table/lib/collectDirectChildren.d.ts +8 -0
- package/dist/components/Table/lib/collectDirectChildren.js +13 -0
- package/dist/components/Table/lib/containsDirectChild.d.ts +12 -0
- package/dist/components/Table/lib/containsDirectChild.js +12 -0
- package/dist/components/Table/lib/index.d.ts +2 -0
- package/dist/components/Table/lib/index.js +3 -1
- package/dist/components/Tabs/TabsTrigger.d.ts +5 -4
- package/dist/components/Tabs/TabsTrigger.js +3 -2
- package/dist/components/Tag/Tag.js +2 -1
- package/dist/components/Tag/TagClose.d.ts +5 -3
- package/dist/components/Tag/TagClose.js +13 -9
- package/dist/components/Tag/index.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.js +4 -2
- package/dist/components/Tooltip/TooltipContent.d.ts +4 -4
- package/dist/components/Tooltip/TooltipContent.js +3 -3
- package/dist/components/Tooltip/TooltipTrigger.d.ts +4 -4
- package/dist/components/Tooltip/TooltipTrigger.js +2 -2
- package/dist/components/Tooltip/index.d.ts +2 -2
- package/dist/components/Tour/Tour.d.ts +7 -1
- package/dist/components/Tour/Tour.js +8 -2
- package/dist/components/Tour/TourClose.d.ts +6 -2
- package/dist/components/Tour/TourClose.js +6 -6
- package/dist/components/Tour/TourFooter.js +8 -3
- package/dist/components/Tour/TourInner.d.ts +7 -1
- package/dist/components/Tour/TourInner.js +2 -2
- package/dist/components/Tour/index.d.ts +1 -0
- package/dist/components/Tour/index.js +2 -1
- package/dist/components/Tour/types.d.ts +12 -1
- package/dist/hooks/useCopyTooltip.d.ts +1 -3
- package/dist/hooks/useCopyTooltip.js +1 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/metadata/components.json +30183 -16896
- package/dist/utils/testId.d.ts +4 -1
- package/dist/utils/testId.js +2 -1
- package/package.json +1 -1
- package/dist/components/CodeSnippet/internal/ShowMoreButton.d.ts +0 -2
- package/dist/components/Selection/SelectionBulkBar/SelectionBulkBarSummary.d.ts +0 -2
- package/dist/components/Selection/SelectionBulkBar/SelectionBulkBarSummary.js +0 -18
- package/dist/components/Table/TableHeadCellMenu.d.ts +0 -9
- package/dist/components/Table/TableHeadCellMenu.js +0 -174
|
@@ -6,13 +6,14 @@ import { HStack, VStack } from "../Stack/index.js";
|
|
|
6
6
|
import { Text } from "../Text/index.js";
|
|
7
7
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../Tooltip/index.js";
|
|
8
8
|
import { useHorizontalScrollState } from "./hooks/index.js";
|
|
9
|
-
import { TABLE_EXPAND_COLUMN_ID, TABLE_SELECT_COLUMN_ID, getAlignClass, getPinningStyles, isLastPinnedLeft, useColumnDnd } from "./lib/index.js";
|
|
9
|
+
import { TABLE_EXPAND_COLUMN_ID, TABLE_SELECT_COLUMN_ID, containsDirectChild, getAlignClass, getPinningStyles, isLastPinnedLeft, useColumnDnd } from "./lib/index.js";
|
|
10
10
|
import { Th } from "./primitives/index.js";
|
|
11
|
+
import { TableColumnMenu } from "./TableColumnMenu/index.js";
|
|
11
12
|
import { useTableContext } from "./TableContext/index.js";
|
|
12
|
-
import { TableHeadCellMenu } from "./TableHeadCellMenu.js";
|
|
13
13
|
import { TableResizeHandler } from "./TableResizeHandler.js";
|
|
14
|
-
import {
|
|
14
|
+
import { TableScrollHandlerSlot } from "./TableScrollHandlerSlot.js";
|
|
15
15
|
import { TableSortHandler } from "./TableSortHandler.js";
|
|
16
|
+
import { TableSortTrigger } from "./TableSortTrigger.js";
|
|
16
17
|
const TableHeadCell = ({ header, hasTextDescription })=>{
|
|
17
18
|
const ctx = useTableContext();
|
|
18
19
|
const testId = useTestId('head-cell');
|
|
@@ -33,8 +34,12 @@ const TableHeadCell = ({ header, hasTextDescription })=>{
|
|
|
33
34
|
const pinningStyles = getPinningStyles(column);
|
|
34
35
|
const lastLeft = isLastPinnedLeft(column, allLeafColumns, column.id);
|
|
35
36
|
const { canDnd, setNodeRef, dndStyle, attributes, listeners } = useColumnDnd(column);
|
|
36
|
-
const { hasOverflow
|
|
37
|
-
const
|
|
37
|
+
const { hasOverflow } = useHorizontalScrollState(containerRef, isMasterColumn);
|
|
38
|
+
const headerDef = header.column.columnDef.header;
|
|
39
|
+
const headerCtx = header.getContext();
|
|
40
|
+
const content = 'function' == typeof headerDef ? headerDef(headerCtx) : flexRender(headerDef, headerCtx);
|
|
41
|
+
const hasCustomSortTrigger = containsDirectChild(content, TableSortTrigger);
|
|
42
|
+
const hasCustomColumnMenu = containsDirectChild(content, TableColumnMenu);
|
|
38
43
|
const alignClass = getAlignClass(meta);
|
|
39
44
|
const isRightAligned = 'text-right' === alignClass;
|
|
40
45
|
const description = meta?.description;
|
|
@@ -79,17 +84,14 @@ const TableHeadCell = ({ header, hasTextDescription })=>{
|
|
|
79
84
|
align: isTextDescription ? 'start' : 'center',
|
|
80
85
|
justify: isRightAligned ? hasMenu ? 'between' : 'end' : void 0,
|
|
81
86
|
children: [
|
|
82
|
-
isRightAligned && hasMenu && /*#__PURE__*/ jsx(
|
|
83
|
-
|
|
84
|
-
children: /*#__PURE__*/ jsx(TableHeadCellMenu, {
|
|
85
|
-
column: column
|
|
86
|
-
})
|
|
87
|
+
isRightAligned && hasMenu && !hasCustomColumnMenu && /*#__PURE__*/ jsx(TableColumnMenu, {
|
|
88
|
+
column: column
|
|
87
89
|
}),
|
|
88
90
|
/*#__PURE__*/ jsxs(VStack, {
|
|
89
91
|
gap: 0,
|
|
90
92
|
align: isRightAligned ? 'end' : void 0,
|
|
91
93
|
children: [
|
|
92
|
-
/*#__PURE__*/ jsxs(HStack, {
|
|
94
|
+
hasCustomSortTrigger || hasCustomColumnMenu ? content : /*#__PURE__*/ jsxs(HStack, {
|
|
93
95
|
gap: 2,
|
|
94
96
|
children: [
|
|
95
97
|
isRightAligned && canSort && /*#__PURE__*/ jsx(TableSortHandler, {
|
|
@@ -120,16 +122,13 @@ const TableHeadCell = ({ header, hasTextDescription })=>{
|
|
|
120
122
|
})
|
|
121
123
|
]
|
|
122
124
|
}),
|
|
123
|
-
!isRightAligned && hasMenu && /*#__PURE__*/ jsx("span", {
|
|
124
|
-
className: "
|
|
125
|
-
children: /*#__PURE__*/ jsx(
|
|
125
|
+
!isRightAligned && hasMenu && !hasCustomColumnMenu && /*#__PURE__*/ jsx("span", {
|
|
126
|
+
className: "ml-auto inline-flex",
|
|
127
|
+
children: /*#__PURE__*/ jsx(TableColumnMenu, {
|
|
126
128
|
column: column
|
|
127
129
|
})
|
|
128
130
|
}),
|
|
129
|
-
isMasterColumn && hasOverflow && /*#__PURE__*/ jsx(
|
|
130
|
-
atStart: atStart,
|
|
131
|
-
atEnd: atEnd
|
|
132
|
-
})
|
|
131
|
+
isMasterColumn && hasOverflow && /*#__PURE__*/ jsx(TableScrollHandlerSlot, {})
|
|
133
132
|
]
|
|
134
133
|
}),
|
|
135
134
|
canResize && /*#__PURE__*/ jsx(TableResizeHandler, {
|
|
@@ -5,6 +5,8 @@ interface TableInnerProps extends TestableProps {
|
|
|
5
5
|
isEmpty: boolean;
|
|
6
6
|
virtualized?: TableVirtualized;
|
|
7
7
|
showSettings: boolean;
|
|
8
|
+
hasConsumerSettingsMenu: boolean;
|
|
9
|
+
hasConsumerScrollHandler: boolean;
|
|
8
10
|
ariaLabel?: string;
|
|
9
11
|
className?: string;
|
|
10
12
|
children?: ReactNode;
|
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { TableActionBarAnchor, TableActionBarProvider } from "../TableActionBar/index.js";
|
|
3
|
+
import { TableScrollHandlerProvider } from "../TableScrollHandlerContext.js";
|
|
4
|
+
import { TableSettingsMenuProvider } from "../TableSettingsMenu/index.js";
|
|
3
5
|
import { TableInnerContainer } from "./TableInnerContainer.js";
|
|
4
6
|
import { TableInnerWindow } from "./TableInnerWindow.js";
|
|
5
|
-
const TableInner = ({ isEmpty, virtualized, showSettings, ariaLabel, className, 'data-testid': testId, children })=>/*#__PURE__*/ jsx(TableActionBarProvider, {
|
|
7
|
+
const TableInner = ({ isEmpty, virtualized, showSettings, hasConsumerSettingsMenu, hasConsumerScrollHandler, ariaLabel, className, 'data-testid': testId, children })=>/*#__PURE__*/ jsx(TableActionBarProvider, {
|
|
6
8
|
children: /*#__PURE__*/ jsx(TableActionBarAnchor, {
|
|
7
9
|
className: className,
|
|
8
10
|
"data-testid": testId,
|
|
9
|
-
children:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
children: /*#__PURE__*/ jsx(TableSettingsMenuProvider, {
|
|
12
|
+
children: /*#__PURE__*/ jsx(TableScrollHandlerProvider, {
|
|
13
|
+
hasConsumerScrollHandler: hasConsumerScrollHandler,
|
|
14
|
+
children: 'window' === virtualized ? /*#__PURE__*/ jsx(TableInnerWindow, {
|
|
15
|
+
isEmpty: isEmpty,
|
|
16
|
+
showSettings: showSettings,
|
|
17
|
+
hasConsumerSettingsMenu: hasConsumerSettingsMenu,
|
|
18
|
+
ariaLabel: ariaLabel,
|
|
19
|
+
children: children
|
|
20
|
+
}) : /*#__PURE__*/ jsx(TableInnerContainer, {
|
|
21
|
+
isEmpty: isEmpty,
|
|
22
|
+
virtualized: virtualized,
|
|
23
|
+
showSettings: showSettings,
|
|
24
|
+
hasConsumerSettingsMenu: hasConsumerSettingsMenu,
|
|
25
|
+
ariaLabel: ariaLabel,
|
|
26
|
+
children: children
|
|
27
|
+
})
|
|
28
|
+
})
|
|
20
29
|
})
|
|
21
30
|
})
|
|
22
31
|
});
|
|
@@ -10,8 +10,8 @@ import { TableBody } from "../TableBody/index.js";
|
|
|
10
10
|
import { TableColGroup } from "../TableColGroup.js";
|
|
11
11
|
import { useTableContext } from "../TableContext/index.js";
|
|
12
12
|
import { TableHead } from "../TableHead.js";
|
|
13
|
-
import {
|
|
14
|
-
const TableInnerContainer = ({ isEmpty, virtualized, showSettings, ariaLabel, children })=>{
|
|
13
|
+
import { TableSettingsMenuSlot } from "../TableSettingsMenu/index.js";
|
|
14
|
+
const TableInnerContainer = ({ isEmpty, virtualized, showSettings, hasConsumerSettingsMenu, ariaLabel, children })=>{
|
|
15
15
|
const { containerRef, table, virtualizerRef, tbodyRef, onEndReached, onEndReachedThreshold, onStartReached, onStartReachedThreshold, initialScrollToRowId } = useTableContext();
|
|
16
16
|
const testId = useTestId('container');
|
|
17
17
|
const scrollRootRef = useRef(null);
|
|
@@ -85,7 +85,9 @@ const TableInnerContainer = ({ isEmpty, virtualized, showSettings, ariaLabel, ch
|
|
|
85
85
|
/*#__PURE__*/ jsx(ScrollAreaCorner, {})
|
|
86
86
|
]
|
|
87
87
|
}),
|
|
88
|
-
showSettings && /*#__PURE__*/ jsx(
|
|
88
|
+
showSettings && /*#__PURE__*/ jsx(TableSettingsMenuSlot, {
|
|
89
|
+
hasConsumerMenu: hasConsumerSettingsMenu
|
|
90
|
+
})
|
|
89
91
|
]
|
|
90
92
|
});
|
|
91
93
|
};
|
|
@@ -8,8 +8,8 @@ import { TableBody } from "../TableBody/index.js";
|
|
|
8
8
|
import { TableColGroup } from "../TableColGroup.js";
|
|
9
9
|
import { useTableContext } from "../TableContext/index.js";
|
|
10
10
|
import { TableHead } from "../TableHead.js";
|
|
11
|
-
import {
|
|
12
|
-
const TableInnerWindow = ({ isEmpty, showSettings, ariaLabel, children })=>{
|
|
11
|
+
import { TableSettingsMenuSlot } from "../TableSettingsMenu/index.js";
|
|
12
|
+
const TableInnerWindow = ({ isEmpty, showSettings, hasConsumerSettingsMenu, ariaLabel, children })=>{
|
|
13
13
|
const { table, virtualizerRef, tbodyRef, onEndReached, onEndReachedThreshold, onStartReached, onStartReachedThreshold, initialScrollToRowId } = useTableContext();
|
|
14
14
|
const testId = useTestId('window');
|
|
15
15
|
const rootRef = useRef(null);
|
|
@@ -93,7 +93,9 @@ const TableInnerWindow = ({ isEmpty, showSettings, ariaLabel, children })=>{
|
|
|
93
93
|
})
|
|
94
94
|
]
|
|
95
95
|
}),
|
|
96
|
-
showSettings && /*#__PURE__*/ jsx(
|
|
96
|
+
showSettings && /*#__PURE__*/ jsx(TableSettingsMenuSlot, {
|
|
97
|
+
hasConsumerMenu: hasConsumerSettingsMenu
|
|
98
|
+
})
|
|
97
99
|
]
|
|
98
100
|
});
|
|
99
101
|
};
|
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import { type FC } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { type ButtonHTMLAttributes, type FC, type ReactNode } from 'react';
|
|
2
|
+
type ScrollButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'type' | 'children'>;
|
|
3
|
+
export type TableScrollHandlerLeftProps = ScrollButtonProps;
|
|
4
|
+
export type TableScrollHandlerRightProps = ScrollButtonProps;
|
|
5
|
+
/**
|
|
6
|
+
* "Scroll left" control. All native button attributes (`data-analytics-id`,
|
|
7
|
+
* `data-analytics-props`, `aria-*`, `id`, `ref`, any `data-*`) reach the
|
|
8
|
+
* underlying `<button>`. Consumer `onClick` runs first; calling
|
|
9
|
+
* `event.preventDefault()` skips the internal scroll. Must be a child of
|
|
10
|
+
* `<TableScrollHandler>`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TableScrollHandlerLeft: FC<TableScrollHandlerLeftProps>;
|
|
13
|
+
/** "Scroll right" control. Same pass-through contract as `TableScrollHandlerLeft`. */
|
|
14
|
+
export declare const TableScrollHandlerRight: FC<TableScrollHandlerRightProps>;
|
|
15
|
+
export interface TableScrollHandlerProps {
|
|
16
|
+
/**
|
|
17
|
+
* Override the default controls — typically the exported
|
|
18
|
+
* `TableScrollHandlerLeft` / `TableScrollHandlerRight` sub-components carrying
|
|
19
|
+
* per-control analytics attributes. When omitted, both default controls
|
|
20
|
+
* render.
|
|
21
|
+
*
|
|
22
|
+
* Render `<TableScrollHandler>` as a direct child of `<Table>` (like
|
|
23
|
+
* `<TableActionBar>` / `<TableSettingsMenu>`). The DS portals it into the
|
|
24
|
+
* scroll slot in the master column header and shows it only on horizontal
|
|
25
|
+
* overflow — no column selection or manual positioning required.
|
|
26
|
+
*/
|
|
27
|
+
children?: ReactNode;
|
|
5
28
|
}
|
|
6
29
|
export declare const TableScrollHandler: FC<TableScrollHandlerProps>;
|
|
7
30
|
export {};
|
|
@@ -1,82 +1,113 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
3
4
|
import { ArrowLeft, ArrowRight } from "../../icons/index.js";
|
|
4
5
|
import { Button } from "../Button/index.js";
|
|
5
6
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../Tooltip/index.js";
|
|
7
|
+
import { useHorizontalScrollState } from "./hooks/index.js";
|
|
6
8
|
import { useTableContext } from "./TableContext/index.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
9
|
+
import { useTableScrollHandlerContext } from "./TableScrollHandlerContext.js";
|
|
10
|
+
const TableScrollStateContext = /*#__PURE__*/ createContext(null);
|
|
11
|
+
const useTableScrollStateContext = ()=>{
|
|
12
|
+
const ctx = useContext(TableScrollStateContext);
|
|
13
|
+
if (!ctx) throw new Error('TableScrollHandlerLeft / TableScrollHandlerRight must be rendered inside <TableScrollHandler>');
|
|
14
|
+
return ctx;
|
|
15
|
+
};
|
|
16
|
+
const TableScrollHandlerLeft = ({ onClick, disabled, 'aria-label': ariaLabel, ...rest })=>{
|
|
17
|
+
const { atStart, scrollLeft } = useTableScrollStateContext();
|
|
18
|
+
const isDisabled = disabled ?? atStart;
|
|
19
|
+
const handleClick = (e)=>{
|
|
20
|
+
onClick?.(e);
|
|
21
|
+
if (e.defaultPrevented) return;
|
|
22
|
+
scrollLeft();
|
|
23
|
+
};
|
|
24
|
+
return /*#__PURE__*/ jsxs(Tooltip, {
|
|
25
|
+
disabled: isDisabled,
|
|
26
|
+
children: [
|
|
27
|
+
/*#__PURE__*/ jsx(TooltipTrigger, {
|
|
28
|
+
asChild: true,
|
|
29
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
30
|
+
...rest,
|
|
31
|
+
type: "button",
|
|
32
|
+
variant: "ghost",
|
|
33
|
+
color: "neutral",
|
|
34
|
+
size: "small",
|
|
35
|
+
disabled: isDisabled,
|
|
36
|
+
onClick: handleClick,
|
|
37
|
+
"aria-label": ariaLabel ?? 'Scroll left',
|
|
38
|
+
children: /*#__PURE__*/ jsx(ArrowLeft, {})
|
|
39
|
+
})
|
|
40
|
+
}),
|
|
41
|
+
/*#__PURE__*/ jsx(TooltipContent, {
|
|
42
|
+
children: "Scroll left"
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
TableScrollHandlerLeft.displayName = 'TableScrollHandlerLeft';
|
|
48
|
+
const TableScrollHandlerRight = ({ onClick, disabled, 'aria-label': ariaLabel, ...rest })=>{
|
|
49
|
+
const { atEnd, scrollRight } = useTableScrollStateContext();
|
|
50
|
+
const isDisabled = disabled ?? atEnd;
|
|
51
|
+
const handleClick = (e)=>{
|
|
52
|
+
onClick?.(e);
|
|
53
|
+
if (e.defaultPrevented) return;
|
|
54
|
+
scrollRight();
|
|
55
|
+
};
|
|
56
|
+
return /*#__PURE__*/ jsxs(Tooltip, {
|
|
57
|
+
disabled: isDisabled,
|
|
58
|
+
children: [
|
|
59
|
+
/*#__PURE__*/ jsx(TooltipTrigger, {
|
|
60
|
+
asChild: true,
|
|
61
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
62
|
+
...rest,
|
|
63
|
+
type: "button",
|
|
64
|
+
variant: "ghost",
|
|
65
|
+
color: "neutral",
|
|
66
|
+
size: "small",
|
|
67
|
+
disabled: isDisabled,
|
|
68
|
+
onClick: handleClick,
|
|
69
|
+
"aria-label": ariaLabel ?? 'Scroll right',
|
|
70
|
+
children: /*#__PURE__*/ jsx(ArrowRight, {})
|
|
71
|
+
})
|
|
72
|
+
}),
|
|
73
|
+
/*#__PURE__*/ jsx(TooltipContent, {
|
|
74
|
+
children: "Scroll right"
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
TableScrollHandlerRight.displayName = 'TableScrollHandlerRight';
|
|
80
|
+
const TableScrollHandler = ({ children })=>{
|
|
81
|
+
const { anchorNode } = useTableScrollHandlerContext();
|
|
82
|
+
const { allLeafColumns, containerRef } = useTableContext();
|
|
83
|
+
const { atStart, atEnd } = useHorizontalScrollState(containerRef, true);
|
|
84
|
+
const getScrollPageSize = ()=>{
|
|
11
85
|
const pinnedLeftWidth = allLeafColumns.filter((c)=>'left' === c.getIsPinned()).reduce((sum, c)=>sum + c.getSize(), 0);
|
|
12
86
|
return Math.max((containerRef.current?.clientWidth ?? 0) - pinnedLeftWidth, 0);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
containerRef
|
|
16
|
-
]);
|
|
17
|
-
const handleScrollLeft = useCallback(()=>{
|
|
18
|
-
containerRef.current?.scrollBy({
|
|
87
|
+
};
|
|
88
|
+
const scrollLeft = ()=>containerRef.current?.scrollBy({
|
|
19
89
|
left: -getScrollPageSize(),
|
|
20
90
|
behavior: 'smooth'
|
|
21
91
|
});
|
|
22
|
-
|
|
23
|
-
containerRef,
|
|
24
|
-
getScrollPageSize
|
|
25
|
-
]);
|
|
26
|
-
const handleScrollRight = useCallback(()=>{
|
|
27
|
-
containerRef.current?.scrollBy({
|
|
92
|
+
const scrollRight = ()=>containerRef.current?.scrollBy({
|
|
28
93
|
left: getScrollPageSize(),
|
|
29
94
|
behavior: 'smooth'
|
|
30
95
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
size: "small",
|
|
47
|
-
disabled: atStart,
|
|
48
|
-
onClick: handleScrollLeft,
|
|
49
|
-
"aria-label": "Scroll left",
|
|
50
|
-
children: /*#__PURE__*/ jsx(ArrowLeft, {})
|
|
51
|
-
})
|
|
52
|
-
}),
|
|
53
|
-
/*#__PURE__*/ jsx(TooltipContent, {
|
|
54
|
-
children: "Scroll left"
|
|
55
|
-
})
|
|
56
|
-
]
|
|
57
|
-
}),
|
|
58
|
-
/*#__PURE__*/ jsxs(Tooltip, {
|
|
59
|
-
disabled: atEnd,
|
|
60
|
-
children: [
|
|
61
|
-
/*#__PURE__*/ jsx(TooltipTrigger, {
|
|
62
|
-
asChild: true,
|
|
63
|
-
children: /*#__PURE__*/ jsx(Button, {
|
|
64
|
-
variant: "ghost",
|
|
65
|
-
color: "neutral",
|
|
66
|
-
size: "small",
|
|
67
|
-
disabled: atEnd,
|
|
68
|
-
onClick: handleScrollRight,
|
|
69
|
-
"aria-label": "Scroll right",
|
|
70
|
-
children: /*#__PURE__*/ jsx(ArrowRight, {})
|
|
71
|
-
})
|
|
72
|
-
}),
|
|
73
|
-
/*#__PURE__*/ jsx(TooltipContent, {
|
|
74
|
-
children: "Scroll right"
|
|
75
|
-
})
|
|
76
|
-
]
|
|
77
|
-
})
|
|
78
|
-
]
|
|
79
|
-
});
|
|
96
|
+
if (!anchorNode) return null;
|
|
97
|
+
return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(TableScrollStateContext.Provider, {
|
|
98
|
+
value: {
|
|
99
|
+
atStart,
|
|
100
|
+
atEnd,
|
|
101
|
+
scrollLeft,
|
|
102
|
+
scrollRight
|
|
103
|
+
},
|
|
104
|
+
children: children ?? /*#__PURE__*/ jsxs(Fragment, {
|
|
105
|
+
children: [
|
|
106
|
+
/*#__PURE__*/ jsx(TableScrollHandlerLeft, {}),
|
|
107
|
+
/*#__PURE__*/ jsx(TableScrollHandlerRight, {})
|
|
108
|
+
]
|
|
109
|
+
})
|
|
110
|
+
}), anchorNode);
|
|
80
111
|
};
|
|
81
112
|
TableScrollHandler.displayName = 'TableScrollHandler';
|
|
82
|
-
export { TableScrollHandler };
|
|
113
|
+
export { TableScrollHandler, TableScrollHandlerLeft, TableScrollHandlerRight };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FC, type ReactNode } from 'react';
|
|
2
|
+
interface TableScrollHandlerContextValue {
|
|
3
|
+
anchorNode: HTMLElement | null;
|
|
4
|
+
setAnchorNode: (node: HTMLElement | null) => void;
|
|
5
|
+
/** Whether the consumer rendered their own <TableScrollHandler> in Table children. */
|
|
6
|
+
hasConsumerScrollHandler: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Holds the DOM node of the internal scroll-controls anchor slot (in the master
|
|
10
|
+
* column header) so a consumer-rendered `<TableScrollHandler>` (declared in
|
|
11
|
+
* `Table` children) can portal into the correct location. Mirrors
|
|
12
|
+
* `TableSettingsMenuProvider`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const TableScrollHandlerProvider: FC<{
|
|
15
|
+
hasConsumerScrollHandler: boolean;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const useTableScrollHandlerContext: () => TableScrollHandlerContextValue;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo, useState } from "react";
|
|
3
|
+
const TableScrollHandlerContext = /*#__PURE__*/ createContext({
|
|
4
|
+
anchorNode: null,
|
|
5
|
+
setAnchorNode: ()=>{},
|
|
6
|
+
hasConsumerScrollHandler: false
|
|
7
|
+
});
|
|
8
|
+
const TableScrollHandlerProvider = ({ hasConsumerScrollHandler, children })=>{
|
|
9
|
+
const [anchorNode, setAnchorNode] = useState(null);
|
|
10
|
+
const value = useMemo(()=>({
|
|
11
|
+
anchorNode,
|
|
12
|
+
setAnchorNode,
|
|
13
|
+
hasConsumerScrollHandler
|
|
14
|
+
}), [
|
|
15
|
+
anchorNode,
|
|
16
|
+
hasConsumerScrollHandler
|
|
17
|
+
]);
|
|
18
|
+
return /*#__PURE__*/ jsx(TableScrollHandlerContext.Provider, {
|
|
19
|
+
value: value,
|
|
20
|
+
children: children
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const useTableScrollHandlerContext = ()=>useContext(TableScrollHandlerContext);
|
|
24
|
+
export { TableScrollHandlerProvider, useTableScrollHandlerContext };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Internal anchor for the horizontal scroll controls. Registers its DOM node so
|
|
4
|
+
* a consumer-rendered `<TableScrollHandler>` (declared in `Table` children) can
|
|
5
|
+
* portal into it, and renders the default controls when the consumer did not
|
|
6
|
+
* supply one. Mounted in the master column header, gated by overflow.
|
|
7
|
+
*/
|
|
8
|
+
export declare const TableScrollHandlerSlot: FC;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/cn.js";
|
|
3
|
+
import { TableScrollHandler } from "./TableScrollHandler.js";
|
|
4
|
+
import { useTableScrollHandlerContext } from "./TableScrollHandlerContext.js";
|
|
5
|
+
const TableScrollHandlerSlot = ()=>{
|
|
6
|
+
const { setAnchorNode, hasConsumerScrollHandler } = useTableScrollHandlerContext();
|
|
7
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
8
|
+
children: [
|
|
9
|
+
/*#__PURE__*/ jsx("div", {
|
|
10
|
+
ref: setAnchorNode,
|
|
11
|
+
className: cn('shrink-0 ml-auto flex items-center gap-4')
|
|
12
|
+
}),
|
|
13
|
+
!hasConsumerScrollHandler && /*#__PURE__*/ jsx(TableScrollHandler, {})
|
|
14
|
+
]
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
TableScrollHandlerSlot.displayName = 'TableScrollHandlerSlot';
|
|
18
|
+
export { TableScrollHandlerSlot };
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
import { type FC } from 'react';
|
|
2
|
-
|
|
1
|
+
import { type ButtonHTMLAttributes, type FC, type ReactNode, type Ref } from 'react';
|
|
2
|
+
import { type TestableProps } from '../../../utils/testId';
|
|
3
|
+
export interface TableSettingsMenuProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'color' | 'type'>, TestableProps {
|
|
4
|
+
/**
|
|
5
|
+
* Forwarded to the trigger `<button>` (focus management, measurement,
|
|
6
|
+
* ref-based instrumentation). `ButtonHTMLAttributes` does not carry `ref`, so
|
|
7
|
+
* it is declared explicitly; it flows through `{...rest}` to `<Button>`.
|
|
8
|
+
*/
|
|
9
|
+
ref?: Ref<HTMLButtonElement>;
|
|
10
|
+
/**
|
|
11
|
+
* Optional override sub-components — `TableSettingsMenuItem` (addressed by
|
|
12
|
+
* `columnId`), `TableSettingsMenuReset`, `TableSettingsMenuSearch`. Each one
|
|
13
|
+
* supplied replaces only its own slot; every other item renders the DS
|
|
14
|
+
* default. DnD, grouping, and filtering remain DS-owned.
|
|
15
|
+
*/
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare const TableSettingsMenu: FC<TableSettingsMenuProps>;
|