@navikt/ds-react 8.10.4 → 8.10.5
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/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -12
- package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
- package/cjs/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.d.ts +5 -5
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +49 -28
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/cjs/data/drag-and-drop/types.d.ts +0 -4
- package/cjs/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts} +3 -3
- package/cjs/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js} +5 -5
- package/cjs/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +27 -0
- package/cjs/data/{drag-and-drop-old/item/DataDragAndDropItem.js → drag-and-drop-legacy/item/DragAndDropItemLegacy.js} +12 -12
- package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +5 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +6 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +24 -0
- package/cjs/data/{drag-and-drop-old/root/DataDragAndDropRoot.js → drag-and-drop-legacy/root/DragAndDropLegacyRoot.js} +10 -10
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +1 -0
- package/cjs/data/stories/Data.test-data.js +0 -1
- package/cjs/data/stories/Data.test-data.js.map +1 -1
- package/cjs/data/table/column-header/DataTableColumnHeader.js +2 -2
- package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
- package/cjs/data/table/helpers/collectTableRowEntries.d.ts +7 -5
- package/cjs/data/table/helpers/collectTableRowEntries.js +18 -10
- package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/cjs/data/table/helpers/table-focus.d.ts +0 -3
- package/cjs/data/table/helpers/table-focus.js +38 -8
- package/cjs/data/table/helpers/table-focus.js.map +1 -1
- package/cjs/data/table/hooks/useGridCache.js +2 -2
- package/cjs/data/table/hooks/useGridCache.js.map +1 -1
- package/cjs/data/table/hooks/useTableDetailsPanel.js +1 -1
- package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/cjs/data/table/hooks/useTableItems.d.ts +4 -4
- package/cjs/data/table/hooks/useTableItems.js +8 -8
- package/cjs/data/table/hooks/useTableItems.js.map +1 -1
- package/cjs/data/table/hooks/useTableKeyboardNav.js +5 -1
- package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/cjs/data/table/root/DataTable.types.d.ts +0 -3
- package/cjs/data/table/root/DataTableRoot.d.ts +1 -1
- package/cjs/data/table/root/DataTableRoot.js +7 -11
- package/cjs/data/table/root/DataTableRoot.js.map +1 -1
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -12
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/esm/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
- package/esm/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
- package/esm/data/drag-and-drop/root/DragAndDropRoot.d.ts +5 -5
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js +49 -28
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/esm/data/drag-and-drop/types.d.ts +0 -4
- package/esm/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts} +3 -3
- package/esm/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js} +4 -4
- package/esm/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +27 -0
- package/esm/data/{drag-and-drop-old/item/DataDragAndDropItem.js → drag-and-drop-legacy/item/DragAndDropItemLegacy.js} +11 -11
- package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +5 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +3 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +24 -0
- package/esm/data/{drag-and-drop-old/root/DataDragAndDropRoot.js → drag-and-drop-legacy/root/DragAndDropLegacyRoot.js} +8 -8
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +1 -0
- package/esm/data/stories/Data.test-data.js +0 -1
- package/esm/data/stories/Data.test-data.js.map +1 -1
- package/esm/data/table/column-header/DataTableColumnHeader.js +2 -2
- package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
- package/esm/data/table/helpers/collectTableRowEntries.d.ts +7 -5
- package/esm/data/table/helpers/collectTableRowEntries.js +18 -10
- package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/esm/data/table/helpers/table-focus.d.ts +0 -3
- package/esm/data/table/helpers/table-focus.js +38 -8
- package/esm/data/table/helpers/table-focus.js.map +1 -1
- package/esm/data/table/hooks/useGridCache.js +2 -2
- package/esm/data/table/hooks/useGridCache.js.map +1 -1
- package/esm/data/table/hooks/useTableDetailsPanel.js +1 -1
- package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/esm/data/table/hooks/useTableItems.d.ts +4 -4
- package/esm/data/table/hooks/useTableItems.js +8 -8
- package/esm/data/table/hooks/useTableItems.js.map +1 -1
- package/esm/data/table/hooks/useTableKeyboardNav.js +6 -2
- package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/esm/data/table/root/DataTable.types.d.ts +0 -3
- package/esm/data/table/root/DataTableRoot.d.ts +1 -1
- package/esm/data/table/root/DataTableRoot.js +7 -11
- package/esm/data/table/root/DataTableRoot.js.map +1 -1
- package/package.json +8 -7
- package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +11 -16
- package/src/data/drag-and-drop/root/DragAndDrop.context.tsx +4 -2
- package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +85 -40
- package/src/data/drag-and-drop/types.ts +0 -5
- package/src/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.tsx → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.tsx} +5 -5
- package/src/data/{drag-and-drop-old/item/DataDragAndDropItem.tsx → drag-and-drop-legacy/item/DragAndDropItemLegacy.tsx} +13 -13
- package/src/data/{drag-and-drop-old/root/DataDragAndDrop.context.tsx → drag-and-drop-legacy/root/DragAndDropLegacy.context.tsx} +3 -3
- package/src/data/{drag-and-drop-old/root/DataDragAndDropRoot.tsx → drag-and-drop-legacy/root/DragAndDropLegacyRoot.tsx} +19 -21
- package/src/data/stories/Data.test-data.tsx +0 -1
- package/src/data/table/column-header/DataTableColumnHeader.tsx +2 -0
- package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +5 -1
- package/src/data/table/helpers/collectTableRowEntries.ts +31 -17
- package/src/data/table/helpers/table-focus.ts +63 -9
- package/src/data/table/hooks/__tests__/useTableItems.test.ts +46 -7
- package/src/data/table/hooks/useGridCache.ts +3 -2
- package/src/data/table/hooks/useTableDetailsPanel.tsx +5 -2
- package/src/data/table/hooks/useTableItems.ts +20 -19
- package/src/data/table/hooks/useTableKeyboardNav.ts +6 -2
- package/src/data/table/root/DataTable.types.ts +0 -3
- package/src/data/table/root/DataTableRoot.tsx +34 -34
- package/src/data/table/root/agent-feature-gap.md +96 -0
- package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
- package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
- package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -6
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
- package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
- package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
- package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
- package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
- package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -3
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
- package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
- package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
2
|
import { useEventCallback } from "../../../utils/hooks/index.js";
|
|
3
3
|
import { focusInitialTableTarget } from "../helpers/table-cell.js";
|
|
4
|
-
import { focusCellAndUpdateTabIndex } from "../helpers/table-focus.js";
|
|
4
|
+
import { focusCell, focusCellAndUpdateTabIndex } from "../helpers/table-focus.js";
|
|
5
5
|
import { findFirstCell, findFirstCellInRow, findLastCell, findLastCellInRow, findNextFocusableCell, } from "../helpers/table-grid-nav.js";
|
|
6
6
|
import { getNavigationAction, shouldBlockNavigation, } from "../helpers/table-keyboard.js";
|
|
7
7
|
import { useGridCache } from "./useGridCache.js";
|
|
@@ -87,6 +87,10 @@ function useTableKeyboardNav({ enabled, shouldBlockNavigation: customBlockFn, })
|
|
|
87
87
|
var _a;
|
|
88
88
|
const target = event.target;
|
|
89
89
|
if (tableRef && target === tableRef) {
|
|
90
|
+
if (activeCell) {
|
|
91
|
+
focusCell(activeCell);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
90
94
|
focusInitialTableTarget(tableRef);
|
|
91
95
|
return;
|
|
92
96
|
}
|
|
@@ -117,7 +121,7 @@ function useTableKeyboardNav({ enabled, shouldBlockNavigation: customBlockFn, })
|
|
|
117
121
|
}, [tableRef, handleTableKeyDown, handleTableFocusIn, enabled]);
|
|
118
122
|
return {
|
|
119
123
|
/* Table should only have tabIndex until the focus is moved inside and is enabled */
|
|
120
|
-
tabIndex: enabled ?
|
|
124
|
+
tabIndex: enabled ? 0 : undefined,
|
|
121
125
|
setTableRef,
|
|
122
126
|
};
|
|
123
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableKeyboardNav.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableKeyboardNav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"useTableKeyboardNav.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableKeyboardNav.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,6 @@ type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<ResizeProps, "re
|
|
|
18
18
|
* Assigned to the cell's `th` element instead of `td` if true.
|
|
19
19
|
*
|
|
20
20
|
* Should be used for cells that act as row headers. Each row should have one rowheader, and only have one cell with `isRowHeader: true`,
|
|
21
|
-
*
|
|
22
|
-
* TODO: Not implemented
|
|
23
|
-
* - Add a generic tablecell component that can render either a td or th based on context or this prop.
|
|
24
21
|
*/
|
|
25
22
|
isRowHeader?: boolean;
|
|
26
23
|
/**
|
|
@@ -70,7 +70,7 @@ interface DataTableProps<T> extends React.HTMLAttributes<HTMLTableElement>, Tabl
|
|
|
70
70
|
*
|
|
71
71
|
* If not provided, the row index will be used as id. This can cause issues if your data changes dynamically, so it's recommended to provide a stable id if possible.
|
|
72
72
|
*/
|
|
73
|
-
getRowId?: (rowData: T
|
|
73
|
+
getRowId?: (rowData: T) => string | number;
|
|
74
74
|
/**
|
|
75
75
|
* Sticky columns that remain visible when horizontally scrolling the table.
|
|
76
76
|
*
|
|
@@ -39,14 +39,9 @@ function DataTableInner(_a, forwardedRef) {
|
|
|
39
39
|
onSortChange,
|
|
40
40
|
sort: sortProp,
|
|
41
41
|
});
|
|
42
|
-
/**
|
|
43
|
-
* TODO:
|
|
44
|
-
* - If user currently does not give a getRowsId function, and data is nested (getSubRows)
|
|
45
|
-
* we end up in an infinite loop since the index based ids repeat for children and causes chaos.
|
|
46
|
-
*/
|
|
47
42
|
const tableItems = useTableItems({
|
|
48
43
|
items: data,
|
|
49
|
-
getRowId
|
|
44
|
+
getRowId,
|
|
50
45
|
subRows,
|
|
51
46
|
});
|
|
52
47
|
const tableSelectionState = useTableSelection({
|
|
@@ -72,7 +67,7 @@ function DataTableInner(_a, forwardedRef) {
|
|
|
72
67
|
]);
|
|
73
68
|
const tableId = useId(id);
|
|
74
69
|
return (React.createElement(DataTableContextProvider, { layout: layout, withKeyboardNav: withKeyboardNav, selectionState: tableSelectionState, stickySelection: stickySelection, stickyHeader: stickyHeader, tableId: tableId, showLoadingSkeletons: isLoading && loadingState == null, onRowClick: onRowClick, isLoading: isLoading, showLoadingOverlay: isLoading && !loadingState && !loadingRows, columns: columns, fullWidthColSpan: fullWidthColSpan },
|
|
75
|
-
React.createElement(TableItemsProvider, { itemDetails: tableItems.itemDetails, items: tableItems.items, onExpandedRowIdsChange: tableItems.onExpandedRowIdsChange, isSubRowExpanded: tableItems.isSubRowExpanded },
|
|
70
|
+
React.createElement(TableItemsProvider, { itemDetails: tableItems.itemDetails, items: tableItems.items, visibleRowIds: tableItems.visibleRowIds, onExpandedRowIdsChange: tableItems.onExpandedRowIdsChange, isSubRowExpanded: tableItems.isSubRowExpanded },
|
|
76
71
|
React.createElement(DataTableDetailsPanelProvider, { detailsPanel: detailsPanel },
|
|
77
72
|
React.createElement(TableElementWrapper, { shouldBlockNavigation: shouldBlockNavigation, enabled: withKeyboardNav },
|
|
78
73
|
React.createElement("table", Object.assign({}, rest, { ref: forwardedRef, className: cl("aksel-data-table", className), "data-zebra-stripes": zebraStripes, "data-truncate-content": truncateContent, "data-density": rowDensity, "data-layout": layout, "data-loading": isLoading || undefined, "aria-busy": isLoading || undefined }),
|
|
@@ -115,7 +110,7 @@ function TableElementWrapper({ children, enabled, shouldBlockNavigation, }) {
|
|
|
115
110
|
updateStickyStyles();
|
|
116
111
|
});
|
|
117
112
|
}, [updateStickyStyles]);
|
|
118
|
-
useEffect(()
|
|
113
|
+
useEffect(function observeAndUpdateStickyStyles() {
|
|
119
114
|
const tableWrapperElement = tableWrapperRef.current;
|
|
120
115
|
if (!tableWrapperElement) {
|
|
121
116
|
return;
|
|
@@ -147,7 +142,7 @@ function TableElementWrapper({ children, enabled, shouldBlockNavigation, }) {
|
|
|
147
142
|
ref: mergedTableRefs, "data-scroll": applyStickyStyles ? "true" : undefined }, children))));
|
|
148
143
|
}
|
|
149
144
|
function DataTableTBodyContent({ loadingState, loadingRows, loadingLabel, emptyState, }) {
|
|
150
|
-
const { items, itemDetails } = useTableItemsContext();
|
|
145
|
+
const { items, itemDetails, visibleRowIds } = useTableItemsContext();
|
|
151
146
|
const { columns, isLoading, fullWidthColSpan } = useDataTableContext();
|
|
152
147
|
if (isLoading && loadingState != null) {
|
|
153
148
|
return (React.createElement(DataTableLoadingState, { colSpan: fullWidthColSpan }, loadingState));
|
|
@@ -169,8 +164,9 @@ function DataTableTBodyContent({ loadingState, loadingRows, loadingLabel, emptyS
|
|
|
169
164
|
return (React.createElement(React.Fragment, null,
|
|
170
165
|
renderLoadingAnnouncement && (React.createElement("tr", null,
|
|
171
166
|
React.createElement("td", { colSpan: fullWidthColSpan, className: "aksel-sr-only" }, loadingLabel))),
|
|
172
|
-
items.map((rowData) => {
|
|
173
|
-
const
|
|
167
|
+
items.map((rowData, rowIndex) => {
|
|
168
|
+
const rowId = visibleRowIds[rowIndex];
|
|
169
|
+
const details = rowId != null ? itemDetails.get(rowId) : undefined;
|
|
174
170
|
/* Should in theory be impossible. Look about typing this? */
|
|
175
171
|
if (!details) {
|
|
176
172
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableRoot.js","sourceRoot":"","sources":["../../../../src/data/table/root/DataTableRoot.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,mHAAmH;AACnH,OAAO,KAAK,EAAE,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,6BAA6B,GAE9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAEL,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAyB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AA0IjC,SAAS,cAAc,CACrB,EAwBoB,EACpB,YAAkD;QAzBlD,EACE,SAAS,EACT,EAAE,EACF,UAAU,GAAG,QAAQ,EACrB,eAAe,GAAG,IAAI,EACtB,YAAY,GAAG,KAAK,EACpB,eAAe,GAAG,IAAI,EACtB,qBAAqB,EACrB,MAAM,GAAG,OAAO,EAChB,SAAS,EACT,IAAI,EACJ,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,YAAY,GAAG,IAAI,EACnB,IAAI,EAAE,QAAQ,EACd,WAAW,GAAG,EAAE,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,EACZ,OAAO,OAEW,EADf,IAAI,cAvBT,0TAwBC,CADQ;IAIT,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAC9C,WAAW;QACX,YAAY;QACZ,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH
|
|
1
|
+
{"version":3,"file":"DataTableRoot.js","sourceRoot":"","sources":["../../../../src/data/table/root/DataTableRoot.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "8.10.
|
|
3
|
+
"version": "8.10.5",
|
|
4
4
|
"description": "React components from the Norwegian Labour and Welfare Administration.",
|
|
5
5
|
"author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -698,16 +698,16 @@
|
|
|
698
698
|
"clean": "rimraf cjs esm",
|
|
699
699
|
"build": "yarn i18n-jsdoc && concurrently \"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json\" \"tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json && yarn write-packagejson\" && yarn i18n-jsdoc --cleanup && yarn copy-types",
|
|
700
700
|
"watch": "tsc --watch -p tsconfig.esm.json",
|
|
701
|
-
"test": "concurrently \"TZ=UTC vitest run -c tests/vitest.config.ts\" \"yarn test-sb-build\"",
|
|
701
|
+
"test": "concurrently \"cross-env TZ=UTC vitest run -c tests/vitest.config.ts\" \"yarn test-sb-build\"",
|
|
702
702
|
"test-sb-build": "tsc -p tsconfig.sb.json",
|
|
703
703
|
"test:watch": "TZ=UTC vitest watch -c tests/vitest.config.ts",
|
|
704
704
|
"copy-types": "copyfiles -f ./src/types/theme.d.ts ./esm/types"
|
|
705
705
|
},
|
|
706
706
|
"dependencies": {
|
|
707
|
-
"@floating-ui/react": "0.27.
|
|
707
|
+
"@floating-ui/react": "0.27.19",
|
|
708
708
|
"@floating-ui/react-dom": "^2.1.8",
|
|
709
|
-
"@navikt/aksel-icons": "^8.10.
|
|
710
|
-
"@navikt/ds-tokens": "^8.10.
|
|
709
|
+
"@navikt/aksel-icons": "^8.10.5",
|
|
710
|
+
"@navikt/ds-tokens": "^8.10.5",
|
|
711
711
|
"date-fns": "^4.0.0",
|
|
712
712
|
"react-day-picker": "9.14.0"
|
|
713
713
|
},
|
|
@@ -723,6 +723,7 @@
|
|
|
723
723
|
"aksel": "workspace:^",
|
|
724
724
|
"concurrently": "9.2.1",
|
|
725
725
|
"copyfiles": "^2.4.1",
|
|
726
|
+
"cross-env": "^10.1.0",
|
|
726
727
|
"fast-glob": "3.3.3",
|
|
727
728
|
"jscodeshift": "17.3.0",
|
|
728
729
|
"jsdom": "27.1.0",
|
|
@@ -733,8 +734,8 @@
|
|
|
733
734
|
"swr": "^2.4.1",
|
|
734
735
|
"tsc-alias": "1.8.16",
|
|
735
736
|
"tsx": "^4.20.6",
|
|
736
|
-
"typescript": "6.0.
|
|
737
|
-
"vitest": "4.1.
|
|
737
|
+
"typescript": "6.0.3",
|
|
738
|
+
"vitest": "4.1.5"
|
|
738
739
|
},
|
|
739
740
|
"peerDependencies": {
|
|
740
741
|
"@types/react": "^17.0.30 || ^18 || ^19",
|
|
@@ -49,7 +49,7 @@ export const DragAndDropDragHandler = React.forwardRef<
|
|
|
49
49
|
<button
|
|
50
50
|
className="aksel-data-drag-and-drop__drag-handler__arrow"
|
|
51
51
|
data-direction="up"
|
|
52
|
-
onClick={() => context?.onKeyboardDragEnd(-1)}
|
|
52
|
+
onClick={() => context?.onKeyboardDragEnd(-1, itemLabel)}
|
|
53
53
|
onMouseDown={(e) => e.preventDefault()}
|
|
54
54
|
disabled={context?.dragHandlerActive?.index === 0}
|
|
55
55
|
type="button"
|
|
@@ -58,13 +58,7 @@ export const DragAndDropDragHandler = React.forwardRef<
|
|
|
58
58
|
</button>
|
|
59
59
|
)}
|
|
60
60
|
<button
|
|
61
|
-
|
|
62
|
-
//aria-label={`Flytt element ${item.index + 1}. Trykk Enter eller Mellomrom for å aktivere, deretter piltastene for å flytte elementet.`}
|
|
63
|
-
aria-label={
|
|
64
|
-
active
|
|
65
|
-
? `Flytt element ${itemLabel || item.index + 1}. Bruk piltastene for å flytte elementet.`
|
|
66
|
-
: `Flytt element ${itemLabel || item.index + 1}. Trykk Enter eller Mellomrom for å aktivere flytting.`
|
|
67
|
-
}
|
|
61
|
+
aria-label={`${itemLabel}. Plass ${item.index + 1}.`}
|
|
68
62
|
aria-pressed={Boolean(active)}
|
|
69
63
|
aria-roledescription="draggable"
|
|
70
64
|
type="button"
|
|
@@ -77,18 +71,18 @@ export const DragAndDropDragHandler = React.forwardRef<
|
|
|
77
71
|
}}
|
|
78
72
|
onClick={(event) => {
|
|
79
73
|
if (!active) {
|
|
80
|
-
context?.
|
|
74
|
+
context?.onKeyboardDragStart(item);
|
|
81
75
|
event.currentTarget.focus();
|
|
82
76
|
} else {
|
|
83
|
-
context?.
|
|
77
|
+
context?.onKeyboardDragStart(null);
|
|
84
78
|
}
|
|
85
79
|
}}
|
|
86
|
-
onBlur={() => context?.
|
|
80
|
+
onBlur={() => context?.cancelDrag()}
|
|
87
81
|
onKeyDown={(event) => {
|
|
88
82
|
if (event.key === "Enter" || event.key === " ") {
|
|
89
83
|
// Enter or space, currently active item - end keyboard dragging
|
|
90
84
|
event.preventDefault();
|
|
91
|
-
context?.
|
|
85
|
+
context?.onKeyboardDragStart(active ? null : item);
|
|
92
86
|
return;
|
|
93
87
|
}
|
|
94
88
|
|
|
@@ -98,17 +92,18 @@ export const DragAndDropDragHandler = React.forwardRef<
|
|
|
98
92
|
// Cancel dragging
|
|
99
93
|
// TODO Handle reset
|
|
100
94
|
event.preventDefault();
|
|
101
|
-
context?.
|
|
95
|
+
context?.setAnnouncer(`Flytting av ${itemLabel} avbrutt.`);
|
|
96
|
+
context?.cancelDrag(true);
|
|
102
97
|
return;
|
|
103
98
|
} else if (event.key === "ArrowUp") {
|
|
104
99
|
// Move item up
|
|
105
100
|
event.preventDefault();
|
|
106
|
-
context?.onKeyboardDragEnd(-1);
|
|
101
|
+
context?.onKeyboardDragEnd(-1, itemLabel);
|
|
107
102
|
return;
|
|
108
103
|
} else if (event.key === "ArrowDown") {
|
|
109
104
|
// Move item down
|
|
110
105
|
event.preventDefault();
|
|
111
|
-
context?.onKeyboardDragEnd(1);
|
|
106
|
+
context?.onKeyboardDragEnd(1, itemLabel);
|
|
112
107
|
return;
|
|
113
108
|
}
|
|
114
109
|
}}
|
|
@@ -120,7 +115,7 @@ export const DragAndDropDragHandler = React.forwardRef<
|
|
|
120
115
|
className="aksel-data-drag-and-drop__drag-handler__arrow"
|
|
121
116
|
data-direction="down"
|
|
122
117
|
type="button"
|
|
123
|
-
onClick={() => context?.onKeyboardDragEnd(1)}
|
|
118
|
+
onClick={() => context?.onKeyboardDragEnd(1, itemLabel)}
|
|
124
119
|
onMouseDown={(e) => e.preventDefault()}
|
|
125
120
|
disabled={
|
|
126
121
|
context?.dragHandlerActive?.index === context?.itemAmount - 1
|
|
@@ -7,14 +7,16 @@ interface DragAndDropContextType {
|
|
|
7
7
|
dropTarget: DragAndDropElement | null;
|
|
8
8
|
setDropTarget: (id: DragAndDropElement | null) => void;
|
|
9
9
|
dragHandlerActive: DragAndDropElement | null;
|
|
10
|
-
|
|
11
|
-
onKeyboardDragEnd: (diff: number) => void;
|
|
10
|
+
onKeyboardDragStart: (active: DragAndDropElement | null) => void;
|
|
11
|
+
onKeyboardDragEnd: (diff: number, label: string) => void;
|
|
12
12
|
startPendingDrag: (
|
|
13
13
|
event: React.PointerEvent,
|
|
14
14
|
item: DragAndDropElement,
|
|
15
15
|
element?: HTMLElement | null,
|
|
16
16
|
) => void;
|
|
17
17
|
itemAmount: number;
|
|
18
|
+
cancelDrag: (resetOrder?: boolean) => void;
|
|
19
|
+
setAnnouncer: (message: string) => void;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
export const {
|
|
@@ -15,10 +15,18 @@ import DragAndDropItem, { DragAndDropItemProps } from "../item/DragAndDropItem";
|
|
|
15
15
|
import { DragAndDropElement } from "../types";
|
|
16
16
|
import { DragAndDropProvider } from "./DragAndDrop.context";
|
|
17
17
|
|
|
18
|
-
interface DragAndDropProps<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
interface DragAndDropProps<
|
|
19
|
+
T,
|
|
20
|
+
DetailsT extends Record<string, any>,
|
|
21
|
+
> extends React.HTMLAttributes<HTMLUListElement> {
|
|
22
|
+
items: ColumnDefinitions<T, DetailsT>;
|
|
23
|
+
setItems: React.Dispatch<
|
|
24
|
+
React.SetStateAction<ColumnDefinitions<T, DetailsT>>
|
|
25
|
+
>;
|
|
26
|
+
renderItem: (
|
|
27
|
+
item: ColumnDefinition<T, DetailsT>,
|
|
28
|
+
index: number,
|
|
29
|
+
) => React.ReactNode;
|
|
22
30
|
}
|
|
23
31
|
|
|
24
32
|
/**
|
|
@@ -28,7 +36,7 @@ interface DragAndDropProps<T> extends React.HTMLAttributes<HTMLUListElement> {
|
|
|
28
36
|
* [x] pointer over listener / state, onPointerEnter, onPointerLeave
|
|
29
37
|
* [x] Overlay - Use floating component
|
|
30
38
|
* [x] Keyboard navigation
|
|
31
|
-
* [
|
|
39
|
+
* [x] UU - announce on drag start, item moved, drag end
|
|
32
40
|
* [x] Make overlay same width as the OG item, currently jumps to content width
|
|
33
41
|
* [x] Look into adding a cancel listener event
|
|
34
42
|
* [x] Make onClick work on drag handler button, currently blocked by pointer down/up listeners
|
|
@@ -36,23 +44,28 @@ interface DragAndDropProps<T> extends React.HTMLAttributes<HTMLUListElement> {
|
|
|
36
44
|
* [x] Make arrow icons into buttons that react to keyboard events, currently just decorative
|
|
37
45
|
* [x] Keep handler focus after clicking arrows for dragging
|
|
38
46
|
* [x] Look into data-based API vs component-based API
|
|
39
|
-
* [
|
|
47
|
+
* [x] Should we have hidden instructions for screen readers on how to use the drag and drop, and should we announce the position of the item while dragging?
|
|
40
48
|
* [x] Discuss if this component should be generic for drag and drop, or if it should be specifically for tables - just for table for now
|
|
41
49
|
* [x] Discuss items type
|
|
42
|
-
* [
|
|
50
|
+
* [x] Discuss how to implement label best
|
|
43
51
|
* [ ] Quick nav (< > samtidig) - få piltastene til å fungere
|
|
44
52
|
* [x] Implement new type for items - ColumnDefinitions<T>
|
|
45
|
-
* [
|
|
46
|
-
* [
|
|
47
|
-
* [
|
|
53
|
+
* [x] Remove announcer div and use a live region component instead
|
|
54
|
+
* [x] Make ESC reset position, not just cancel dragging
|
|
55
|
+
* [x] Make instructions for keyboard users (visible?)
|
|
48
56
|
* [ ] Ask design about visible keyboard instructions
|
|
57
|
+
* [ ] Update design from Figma
|
|
58
|
+
* [ ] Look at instructions text
|
|
59
|
+
* [x] Remove default ul styling
|
|
60
|
+
* [x] Fix setItems type
|
|
49
61
|
*
|
|
50
62
|
*/
|
|
51
63
|
|
|
52
64
|
const DRAG_THRESHOLD = 4; // Minimum movement in pixels to start dragging
|
|
65
|
+
const SR_INSTRUCTIONS_ID = "drag-and-drop-instructions-id";
|
|
53
66
|
|
|
54
|
-
function DragAndDropInner<T
|
|
55
|
-
{ items, setItems, renderItem }: DragAndDropProps<T>,
|
|
67
|
+
function DragAndDropInner<T, DetailsT extends Record<string, any>>(
|
|
68
|
+
{ items, setItems, renderItem }: DragAndDropProps<T, DetailsT>,
|
|
56
69
|
forwardedRef: React.ForwardedRef<HTMLUListElement>,
|
|
57
70
|
) {
|
|
58
71
|
const [activeItem, setActiveItem] = useState<DragAndDropElement | null>(null);
|
|
@@ -60,7 +73,8 @@ function DragAndDropInner<T>(
|
|
|
60
73
|
const [dragHandlerActive, setDragHandlerActive] =
|
|
61
74
|
useState<DragAndDropElement | null>(null);
|
|
62
75
|
const [overlayWidth, setOverlayWidth] = useState<number | null>(null);
|
|
63
|
-
const [
|
|
76
|
+
const [announcer, setAnnouncer] = useState("");
|
|
77
|
+
const initialItemsRef = useRef<ColumnDefinitions<T, DetailsT> | null>(null);
|
|
64
78
|
const activeData = items.find((item) => item.id === activeItem?.id);
|
|
65
79
|
|
|
66
80
|
const activeItemRef = useRef<DragAndDropElement | null>(null);
|
|
@@ -79,6 +93,19 @@ function DragAndDropInner<T>(
|
|
|
79
93
|
startY: number;
|
|
80
94
|
} | null>(null);
|
|
81
95
|
|
|
96
|
+
const saveInitialItems = useCallback(() => {
|
|
97
|
+
initialItemsRef.current = items;
|
|
98
|
+
}, [items]);
|
|
99
|
+
|
|
100
|
+
const keyboardDragStart = (item: DragAndDropElement | null) => {
|
|
101
|
+
if (item) {
|
|
102
|
+
saveInitialItems();
|
|
103
|
+
} else {
|
|
104
|
+
initialItemsRef.current = null;
|
|
105
|
+
}
|
|
106
|
+
setDragHandlerActive(item);
|
|
107
|
+
};
|
|
108
|
+
|
|
82
109
|
const startPendingDrag = (
|
|
83
110
|
event: React.PointerEvent,
|
|
84
111
|
item: DragAndDropElement,
|
|
@@ -121,6 +148,21 @@ function DragAndDropInner<T>(
|
|
|
121
148
|
[setItems],
|
|
122
149
|
);
|
|
123
150
|
|
|
151
|
+
const cancelDrag = useCallback(
|
|
152
|
+
(resetOrder = false) => {
|
|
153
|
+
if (resetOrder && initialItemsRef.current) {
|
|
154
|
+
setItems(initialItemsRef.current);
|
|
155
|
+
}
|
|
156
|
+
setOverlayWidth(null);
|
|
157
|
+
setDragHandlerActive(null);
|
|
158
|
+
setCombinedActiveItem(null);
|
|
159
|
+
setCombinedDropTarget(null);
|
|
160
|
+
pendingDragStartRef.current = null;
|
|
161
|
+
initialItemsRef.current = null;
|
|
162
|
+
},
|
|
163
|
+
[setItems, setCombinedActiveItem, setCombinedDropTarget],
|
|
164
|
+
);
|
|
165
|
+
|
|
124
166
|
useEffect(() => {
|
|
125
167
|
/* This useEffect is used to toggle a class on the html element when dragging,
|
|
126
168
|
to prevent cursor issues when dragging over interactive elements,
|
|
@@ -156,6 +198,7 @@ function DragAndDropInner<T>(
|
|
|
156
198
|
}
|
|
157
199
|
|
|
158
200
|
setOverlayWidth(element?.getBoundingClientRect().width ?? null);
|
|
201
|
+
saveInitialItems();
|
|
159
202
|
setCombinedActiveItem(pendingStart.item);
|
|
160
203
|
setCombinedDropTarget(pendingStart.item);
|
|
161
204
|
pendingDragStartRef.current = null;
|
|
@@ -221,25 +264,12 @@ function DragAndDropInner<T>(
|
|
|
221
264
|
|
|
222
265
|
if (active && target && active.id !== target.id) {
|
|
223
266
|
reorderItems(active.index, target.index);
|
|
224
|
-
setAnnouncement(
|
|
225
|
-
`Element flyttet til posisjon ${target?.index + 1} av ${items.length}`,
|
|
226
|
-
); // TODO - Bedre formulering?
|
|
227
267
|
}
|
|
228
268
|
|
|
229
|
-
|
|
230
|
-
setDragHandlerActive(null);
|
|
231
|
-
setCombinedActiveItem(null);
|
|
232
|
-
setCombinedDropTarget(null);
|
|
233
|
-
pendingDragStartRef.current = null;
|
|
269
|
+
cancelDrag();
|
|
234
270
|
};
|
|
235
271
|
|
|
236
|
-
const handlePointerCancel = () =>
|
|
237
|
-
setOverlayWidth(null);
|
|
238
|
-
setDragHandlerActive(null);
|
|
239
|
-
setCombinedActiveItem(null);
|
|
240
|
-
setCombinedDropTarget(null);
|
|
241
|
-
pendingDragStartRef.current = null;
|
|
242
|
-
};
|
|
272
|
+
const handlePointerCancel = () => cancelDrag(true);
|
|
243
273
|
|
|
244
274
|
window.addEventListener("pointermove", handlePointerMove);
|
|
245
275
|
window.addEventListener("pointerup", handlePointerUp);
|
|
@@ -254,10 +284,11 @@ function DragAndDropInner<T>(
|
|
|
254
284
|
setCombinedDropTarget,
|
|
255
285
|
setCombinedActiveItem,
|
|
256
286
|
reorderItems,
|
|
257
|
-
|
|
287
|
+
saveInitialItems,
|
|
288
|
+
cancelDrag,
|
|
258
289
|
]);
|
|
259
290
|
|
|
260
|
-
const onKeyboardDragEnd = (diff: number) => {
|
|
291
|
+
const onKeyboardDragEnd = (diff: number, label: string) => {
|
|
261
292
|
if (!dragHandlerActive) return;
|
|
262
293
|
|
|
263
294
|
const targetIndex = dragHandlerActive.index + diff;
|
|
@@ -265,11 +296,9 @@ function DragAndDropInner<T>(
|
|
|
265
296
|
return;
|
|
266
297
|
}
|
|
267
298
|
|
|
299
|
+
setAnnouncer(`${label}. Plass ${targetIndex + 1} av ${items.length}.`);
|
|
268
300
|
reorderItems(dragHandlerActive.index, targetIndex);
|
|
269
301
|
setDragHandlerActive({ ...dragHandlerActive, index: targetIndex });
|
|
270
|
-
setAnnouncement(
|
|
271
|
-
`Element flyttet til posisjon ${targetIndex + 1} av ${items.length}`,
|
|
272
|
-
); // TODO - Bedre formulering?
|
|
273
302
|
};
|
|
274
303
|
|
|
275
304
|
return (
|
|
@@ -279,12 +308,27 @@ function DragAndDropInner<T>(
|
|
|
279
308
|
dropTarget={dropTarget}
|
|
280
309
|
setDropTarget={setCombinedDropTarget}
|
|
281
310
|
dragHandlerActive={dragHandlerActive}
|
|
282
|
-
|
|
311
|
+
onKeyboardDragStart={keyboardDragStart}
|
|
283
312
|
onKeyboardDragEnd={onKeyboardDragEnd}
|
|
284
313
|
startPendingDrag={startPendingDrag}
|
|
314
|
+
cancelDrag={cancelDrag}
|
|
315
|
+
setAnnouncer={setAnnouncer}
|
|
285
316
|
itemAmount={items.length}
|
|
286
317
|
>
|
|
287
|
-
<
|
|
318
|
+
<span id={SR_INSTRUCTIONS_ID} className="sr-only">
|
|
319
|
+
Bruk Tab for å fokusere på en kolonne. Trykk mellomrom eller enter for å
|
|
320
|
+
starte flytting, bruk piltastene for å flytte kolonnen, trykk mellomrom
|
|
321
|
+
eller enter for å slippe, eller Escape for å avbryte.
|
|
322
|
+
</span>
|
|
323
|
+
<div aria-live="assertive" className="sr-only" aria-atomic>
|
|
324
|
+
{announcer}
|
|
325
|
+
</div>
|
|
326
|
+
<ul
|
|
327
|
+
ref={forwardedRef}
|
|
328
|
+
aria-label="Kolonneinnstillinger"
|
|
329
|
+
aria-describedby={SR_INSTRUCTIONS_ID}
|
|
330
|
+
className="aksel-data-table__drag-and-drop-root"
|
|
331
|
+
>
|
|
288
332
|
{items.map((item, index) => {
|
|
289
333
|
return (
|
|
290
334
|
<DragAndDropItem
|
|
@@ -306,6 +350,7 @@ function DragAndDropInner<T>(
|
|
|
306
350
|
<Floating.Content
|
|
307
351
|
align="start"
|
|
308
352
|
updatePositionStrategy="always"
|
|
353
|
+
aria-hidden
|
|
309
354
|
style={{
|
|
310
355
|
pointerEvents: "none",
|
|
311
356
|
boxSizing: "border-box",
|
|
@@ -323,15 +368,15 @@ function DragAndDropInner<T>(
|
|
|
323
368
|
</Floating.Content>
|
|
324
369
|
</Floating>
|
|
325
370
|
)}
|
|
326
|
-
<div aria-live="assertive" className="sr-only" aria-atomic="true">
|
|
327
|
-
{announcement}
|
|
328
|
-
</div>
|
|
329
371
|
</DragAndDropProvider>
|
|
330
372
|
);
|
|
331
373
|
}
|
|
332
374
|
|
|
333
|
-
const DragAndDrop = forwardRef(DragAndDropInner) as <
|
|
334
|
-
|
|
375
|
+
const DragAndDrop = forwardRef(DragAndDropInner) as <
|
|
376
|
+
T,
|
|
377
|
+
DetailsT extends Record<string, any>,
|
|
378
|
+
>(
|
|
379
|
+
props: DragAndDropProps<T, DetailsT> & React.RefAttributes<HTMLUListElement>,
|
|
335
380
|
) => React.ReactElement | null;
|
|
336
381
|
|
|
337
382
|
export { DragAndDrop, DragAndDropItem };
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "@navikt/aksel-icons";
|
|
7
7
|
import { Floating } from "../../../utils/components/floating/Floating";
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface DragAndDropDragHandlerLegacyProps {
|
|
10
10
|
/**
|
|
11
11
|
* Whether the drag handler is disabled
|
|
12
12
|
*/
|
|
@@ -24,18 +24,18 @@ export interface DataDragAndDropDragHandlerProps {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* DragAndDropDragHandlerLegacy
|
|
28
28
|
*
|
|
29
29
|
* A button component that serves as a drag handle for drag and drop operations.
|
|
30
30
|
* Can be used to initiate dragging of elements in a data table or list.
|
|
31
31
|
*/
|
|
32
|
-
export const
|
|
32
|
+
export const DragAndDropDragHandlerLegacy = React.forwardRef<
|
|
33
33
|
HTMLButtonElement,
|
|
34
|
-
|
|
34
|
+
DragAndDropDragHandlerLegacyProps
|
|
35
35
|
>(({ keyboardDragging, handleRef, alt }) => {
|
|
36
36
|
if (alt) {
|
|
37
37
|
return (
|
|
38
|
-
<div className="aksel-data-drag-and-drop__drag-
|
|
38
|
+
<div className="aksel-data-drag-and-drop__drag-handler__legacy">
|
|
39
39
|
{keyboardDragging && (
|
|
40
40
|
<span
|
|
41
41
|
className="aksel-data-drag-and-drop__drag-handler__arrow"
|