@rio-cloud/rio-uikit 2.3.0-beta.3 → 2.3.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/Table.js +10 -9
- package/TableNext.js +10 -9
- package/TableRowActionsDropdown.d.ts +2 -0
- package/TableRowActionsDropdown.js +5 -0
- package/TableRowActionsDropdown.js.map +1 -0
- package/components/dropdown/ButtonDropdown.d.ts +4 -0
- package/components/dropdown/ButtonDropdown.js +82 -80
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/map/components/Map.js +199 -180
- package/components/map/components/Map.js.map +1 -1
- package/components/map/components/MapContext.d.ts +2 -0
- package/components/map/components/MapContext.js +6 -4
- package/components/map/components/MapContext.js.map +1 -1
- package/components/map/components/features/MapZoom.js +19 -19
- package/components/map/components/features/MapZoom.js.map +1 -1
- package/components/map/utils/mapTypes.d.ts +6 -0
- package/components/map/utils/mapTypes.js.map +1 -1
- package/components/map/utils/mapUtils.d.ts +2 -0
- package/components/map/utils/mapUtils.js +4 -0
- package/components/map/utils/mapUtils.js.map +1 -1
- package/components/table/Table.d.ts +3 -1
- package/components/table/Table.js +225 -205
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +49 -0
- package/components/table/TableExpandedRow.d.ts +4 -0
- package/components/table/TableExpandedRow.js +69 -66
- package/components/table/TableExpandedRow.js.map +1 -1
- package/components/table/TableGroupRow.d.ts +3 -1
- package/components/table/TableGroupRow.js +15 -14
- package/components/table/TableGroupRow.js.map +1 -1
- package/components/table/TableHeader.d.ts +1 -9
- package/components/table/TableHeader.js +83 -67
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableRow.d.ts +7 -1
- package/components/table/TableRow.js +75 -72
- package/components/table/TableRow.js.map +1 -1
- package/components/table/TableRowActionsDropdown.d.ts +11 -0
- package/components/table/TableRowActionsDropdown.js +22 -0
- package/components/table/TableRowActionsDropdown.js.map +1 -0
- package/components/table/TableStickyRowButton.d.ts +25 -0
- package/components/table/TableStickyRowButton.js +32 -0
- package/components/table/TableStickyRowButton.js.map +1 -0
- package/components/table/TableToolbar.d.ts +24 -3
- package/components/table/TableToolbar.js +78 -37
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableViewToggles.js +5 -5
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/context/TableInteractionContext.d.ts +3 -0
- package/components/table/context/TableInteractionContext.js.map +1 -1
- package/components/table/context/TableRenderContext.d.ts +1 -0
- package/components/table/context/TableRenderContext.js.map +1 -1
- package/components/table/layout/useMeasuredColumnMaxWidths.js +52 -54
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
- package/components/table/layout/useTableLayout.d.ts +4 -1
- package/components/table/layout/useTableLayout.js +54 -48
- package/components/table/layout/useTableLayout.js.map +1 -1
- package/components/table/layout/useTableVirtualization.js +51 -56
- package/components/table/layout/useTableVirtualization.js.map +1 -1
- package/components/table/model/resolveResponsiveViewType.d.ts +2 -0
- package/components/table/model/resolveResponsiveViewType.js +27 -0
- package/components/table/model/resolveResponsiveViewType.js.map +1 -0
- package/components/table/render/header/TableHeaderSelectionCell.d.ts +1 -0
- package/components/table/render/header/TableHeaderSelectionCell.js +13 -12
- package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -1
- package/components/table/runtime/useResponsiveResolvedViewType.d.ts +23 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js +22 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js.map +1 -0
- package/components/table/selection/useInternalTableSelectionState.d.ts +2 -0
- package/components/table/selection/useInternalTableSelectionState.js +27 -17
- package/components/table/selection/useInternalTableSelectionState.js.map +1 -1
- package/components/table/selection/useTableSelection.d.ts +5 -1
- package/components/table/selection/useTableSelection.js +37 -26
- package/components/table/selection/useTableSelection.js.map +1 -1
- package/components/table/shared/parsePixelSize.d.ts +2 -0
- package/components/table/shared/parsePixelSize.js +13 -0
- package/components/table/shared/parsePixelSize.js.map +1 -0
- package/hooks/useResizeObserver.d.ts +25 -6
- package/hooks/useResizeObserver.js +20 -18
- package/hooks/useResizeObserver.js.map +1 -1
- package/package.json +10 -10
- package/version.d.ts +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
|
@@ -1,120 +1,136 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useSensors as
|
|
3
|
-
import { restrictToHorizontalAxis as
|
|
4
|
-
import { SortableContext as
|
|
5
|
-
import { useRef as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { jsxs as x, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useSensors as N, useSensor as j, PointerSensor as B, DndContext as M, DragOverlay as V } from "@dnd-kit/core";
|
|
3
|
+
import { restrictToHorizontalAxis as W } from "@dnd-kit/modifiers";
|
|
4
|
+
import { SortableContext as $, horizontalListSortingStrategy as G } from "@dnd-kit/sortable";
|
|
5
|
+
import { useRef as Y, useState as b, useLayoutEffect as q } from "react";
|
|
6
|
+
import F from "../../hooks/useMergeRefs.js";
|
|
7
|
+
import J from "../../hooks/useResizeObserver.js";
|
|
8
|
+
import y from "../../utils/classNames.js";
|
|
9
|
+
import Q from "./render/header/TableHeaderDragOverlay.js";
|
|
10
|
+
import U from "./render/header/TableHeaderSelectionCell.js";
|
|
11
|
+
import { resolveColumnCollisionDetection as X } from "./render/header/resolveColumnCollisionDetection.js";
|
|
12
|
+
import { useOptionalTableInteractionContext as Z } from "./context/TableInteractionContext.js";
|
|
13
|
+
import { useOptionalTableLayoutContext as ee } from "./context/TableLayoutContext.js";
|
|
14
|
+
import { useOptionalTableRenderConfigContext as te } from "./context/TableRenderConfigContext.js";
|
|
15
|
+
import { TableSectionContext as R, TableHeaderContext as w } from "./context/TableStructureContext.js";
|
|
16
|
+
import { useOptionalTableRenderContext as oe } from "./context/TableRenderContext.js";
|
|
17
|
+
const d = "--table-sticky-header-height", Se = (D) => {
|
|
18
|
+
const { children: m, className: H, sticky: i = !1, ...T } = D, s = oe(), u = te(), t = Z(), r = ee();
|
|
19
|
+
if (!s || !u || !t || !r)
|
|
18
20
|
return null;
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const [
|
|
21
|
+
const A = N(j(B, { activationConstraint: { distance: 6 } })), n = Y(0), [g, , { blockSize: C }] = J();
|
|
22
|
+
n.current = 0;
|
|
23
|
+
const [h, f] = b(void 0), [E, v] = b(void 0), P = F(
|
|
24
|
+
r.tableHeadRowRef,
|
|
25
|
+
g
|
|
26
|
+
), I = !!r.onColumnDragEnd && (r.draggableColumnKeys?.length ?? 0) > 1, c = s.header, a = c?.rowCount ?? 1, K = c ?? {
|
|
22
27
|
rowCount: a,
|
|
23
|
-
totalColumnCount:
|
|
28
|
+
totalColumnCount: s.columns.length,
|
|
24
29
|
columns: []
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
30
|
+
}, O = h ? c?.columns.find((e) => (e.columnKey ?? String(e.key)) === h) : void 0, p = () => {
|
|
31
|
+
f(void 0), v(void 0);
|
|
32
|
+
}, k = (e) => {
|
|
33
|
+
f(String(e.active.id)), v(e.active.rect.current.initial?.width ?? void 0);
|
|
34
|
+
}, z = (e) => {
|
|
35
|
+
p();
|
|
36
|
+
}, _ = (e) => {
|
|
37
|
+
p(), r.onColumnDragEnd?.(e);
|
|
38
|
+
};
|
|
39
|
+
q(() => {
|
|
40
|
+
const e = g.current, l = e?.closest(".table");
|
|
41
|
+
if (!l)
|
|
42
|
+
return;
|
|
43
|
+
if (!i || !e) {
|
|
44
|
+
l.style.removeProperty(d);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const L = Math.max(C ?? e.getBoundingClientRect().height ?? 0, 0);
|
|
48
|
+
return l.style.setProperty(d, `${L}px`), () => {
|
|
49
|
+
l.style.removeProperty(d);
|
|
50
|
+
};
|
|
51
|
+
}, [C, i]);
|
|
52
|
+
const S = I && r.draggableColumnKeys ? /* @__PURE__ */ x(
|
|
53
|
+
M,
|
|
35
54
|
{
|
|
36
|
-
sensors:
|
|
37
|
-
collisionDetection:
|
|
38
|
-
modifiers: [
|
|
39
|
-
onDragStart:
|
|
40
|
-
onDragCancel:
|
|
41
|
-
onDragEnd:
|
|
55
|
+
sensors: A,
|
|
56
|
+
collisionDetection: X,
|
|
57
|
+
modifiers: [W],
|
|
58
|
+
onDragStart: k,
|
|
59
|
+
onDragCancel: z,
|
|
60
|
+
onDragEnd: _,
|
|
42
61
|
children: [
|
|
43
|
-
/* @__PURE__ */ o(
|
|
44
|
-
/* @__PURE__ */ o(
|
|
45
|
-
|
|
62
|
+
/* @__PURE__ */ o($, { items: r.draggableColumnKeys, strategy: G, children: m }),
|
|
63
|
+
/* @__PURE__ */ o(V, { adjustScale: !1, dropAnimation: null, children: /* @__PURE__ */ o(
|
|
64
|
+
Q,
|
|
46
65
|
{
|
|
47
|
-
column:
|
|
48
|
-
header:
|
|
66
|
+
column: O,
|
|
67
|
+
header: K,
|
|
49
68
|
showSelectionColumn: t.showSelectionColumn,
|
|
50
|
-
width:
|
|
69
|
+
width: E
|
|
51
70
|
}
|
|
52
71
|
) })
|
|
53
72
|
]
|
|
54
73
|
}
|
|
55
|
-
) :
|
|
56
|
-
return
|
|
74
|
+
) : m;
|
|
75
|
+
return u.isTableView ? /* @__PURE__ */ o(
|
|
57
76
|
"div",
|
|
58
77
|
{
|
|
59
|
-
...
|
|
60
|
-
className:
|
|
61
|
-
"table-head",
|
|
62
|
-
d && "table-head-sticky",
|
|
63
|
-
d && D && "table-head-sticky-in-container"
|
|
64
|
-
),
|
|
78
|
+
...T,
|
|
79
|
+
className: y("table-head", i && "table-head-sticky"),
|
|
65
80
|
role: "rowgroup",
|
|
66
|
-
ref:
|
|
67
|
-
children: /* @__PURE__ */ o(
|
|
68
|
-
|
|
81
|
+
ref: P,
|
|
82
|
+
children: /* @__PURE__ */ o(R.Provider, { value: "header", children: /* @__PURE__ */ o(
|
|
83
|
+
w.Provider,
|
|
69
84
|
{
|
|
70
85
|
value: {
|
|
71
86
|
nextHeaderRowIndex: () => {
|
|
72
|
-
const e =
|
|
73
|
-
return
|
|
87
|
+
const e = n.current;
|
|
88
|
+
return n.current += 1, e;
|
|
74
89
|
}
|
|
75
90
|
},
|
|
76
|
-
children: /* @__PURE__ */
|
|
91
|
+
children: /* @__PURE__ */ x(
|
|
77
92
|
"div",
|
|
78
93
|
{
|
|
79
|
-
className:
|
|
94
|
+
className: y(
|
|
80
95
|
"table-head-grid",
|
|
81
96
|
t.selectionHeaderContent && "table-head-grid-custom-selection",
|
|
82
|
-
|
|
97
|
+
H
|
|
83
98
|
),
|
|
84
99
|
role: a === 1 ? "row" : "presentation",
|
|
85
100
|
style: { gridTemplateRows: `repeat(${a}, auto)` },
|
|
86
101
|
children: [
|
|
87
102
|
t.showSelectionColumn && /* @__PURE__ */ o(
|
|
88
|
-
|
|
103
|
+
U,
|
|
89
104
|
{
|
|
90
105
|
isAllSelected: t.isAllRowsSelected,
|
|
91
106
|
isSomeRowsSelected: t.isSomeRowsSelected,
|
|
92
107
|
onToggleAllSelection: t.onToggleAllSelection,
|
|
108
|
+
disabled: !t.hasSelectableRows,
|
|
93
109
|
rowCount: a,
|
|
94
110
|
selectionHeaderContent: t.selectionHeaderContent
|
|
95
111
|
}
|
|
96
112
|
),
|
|
97
|
-
|
|
113
|
+
S
|
|
98
114
|
]
|
|
99
115
|
}
|
|
100
116
|
)
|
|
101
117
|
}
|
|
102
118
|
) })
|
|
103
119
|
}
|
|
104
|
-
) : /* @__PURE__ */ o(
|
|
105
|
-
|
|
120
|
+
) : /* @__PURE__ */ o(R.Provider, { value: "header", children: /* @__PURE__ */ o(
|
|
121
|
+
w.Provider,
|
|
106
122
|
{
|
|
107
123
|
value: {
|
|
108
124
|
nextHeaderRowIndex: () => {
|
|
109
|
-
const e =
|
|
110
|
-
return
|
|
125
|
+
const e = n.current;
|
|
126
|
+
return n.current += 1, e;
|
|
111
127
|
}
|
|
112
128
|
},
|
|
113
|
-
children:
|
|
129
|
+
children: S
|
|
114
130
|
}
|
|
115
131
|
) });
|
|
116
132
|
};
|
|
117
133
|
export {
|
|
118
|
-
|
|
134
|
+
Se as default
|
|
119
135
|
};
|
|
120
136
|
//# sourceMappingURL=TableHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeader.js","sources":["../../../src/components/table/TableHeader.tsx"],"sourcesContent":["import {\n DndContext,\n DragOverlay,\n PointerSensor,\n type DragCancelEvent,\n type DragEndEvent,\n type DragStartEvent,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport { type ReactNode, useRef, useState } from 'react';\n\nimport classNames from '../../utils/classNames';\nimport type { TableHtmlAttributes, TableRowData } from './Table.types';\nimport TableHeaderDragOverlay from './render/header/TableHeaderDragOverlay';\nimport TableHeaderSelectionCell from './render/header/TableHeaderSelectionCell';\nimport { resolveColumnCollisionDetection } from './render/header/resolveColumnCollisionDetection';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableLayoutContext } from './context/TableLayoutContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport { TableHeaderContext, TableSectionContext } from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableHeaderProps<RowType extends TableRowData> = TableHtmlAttributes & {\n /**\n * Additional class names for the header grid wrapper.\n */\n className?: string;\n\n /**\n * Keeps the table header sticky while the page scrolls.\n *\n * This applies in `TABLE` view only.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Keeps the sticky header pinned to the top edge of an explicit scroll container.\n *\n * Use this when the table sits inside a wrapper with an overflow class like `overflow-y-scroll`.\n * When omitted, sticky headers compensate the default `ApplicationLayout` body padding.\n *\n * @default false\n */\n stickyInContainer?: boolean;\n\n /**\n * Table header content.\n */\n children?: ReactNode;\n};\n\nconst TableHeader = <RowType extends TableRowData = TableRowData>(props: TableHeaderProps<RowType>) => {\n const { children, className, sticky = false, stickyInContainer = false, ...remainingProps } = props;\n\n const renderContext = useOptionalTableRenderContext<RowType>();\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const layoutContext = useOptionalTableLayoutContext();\n\n if (!renderContext || !renderConfigContext || !interactionContext || !layoutContext) {\n return null;\n }\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }));\n\n const headerRowIndexRef = useRef(0);\n headerRowIndexRef.current = 0;\n\n const [activeDraggedColumnKey, setActiveDraggedColumnKey] = useState<string | undefined>(undefined);\n const [activeDraggedColumnWidth, setActiveDraggedColumnWidth] = useState<number | undefined>(undefined);\n\n const canDragColumns = !!layoutContext.onColumnDragEnd && (layoutContext.draggableColumnKeys?.length ?? 0) > 1;\n const header = renderContext.header;\n const headerRowCount = header?.rowCount ?? 1;\n const overlayHeader = header ?? {\n rowCount: headerRowCount,\n totalColumnCount: renderContext.columns.length,\n columns: [],\n };\n\n const activeDraggedColumn = activeDraggedColumnKey\n ? header?.columns.find(column => (column.columnKey ?? String(column.key)) === activeDraggedColumnKey)\n : undefined;\n\n const clearActiveDraggedColumn = () => {\n setActiveDraggedColumnKey(undefined);\n setActiveDraggedColumnWidth(undefined);\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveDraggedColumnKey(String(event.active.id));\n setActiveDraggedColumnWidth(event.active.rect.current.initial?.width ?? undefined);\n };\n\n const handleDragCancel = (_event: DragCancelEvent) => {\n clearActiveDraggedColumn();\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n clearActiveDraggedColumn();\n layoutContext.onColumnDragEnd?.(event);\n };\n\n const content =\n canDragColumns && layoutContext.draggableColumnKeys ? (\n <DndContext\n sensors={sensors}\n collisionDetection={resolveColumnCollisionDetection}\n modifiers={[restrictToHorizontalAxis]}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={layoutContext.draggableColumnKeys} strategy={horizontalListSortingStrategy}>\n {children}\n </SortableContext>\n <DragOverlay adjustScale={false} dropAnimation={null}>\n <TableHeaderDragOverlay\n column={activeDraggedColumn}\n header={overlayHeader}\n showSelectionColumn={interactionContext.showSelectionColumn}\n width={activeDraggedColumnWidth}\n />\n </DragOverlay>\n </DndContext>\n ) : (\n children\n );\n\n if (!renderConfigContext.isTableView) {\n return (\n <TableSectionContext.Provider value='header'>\n <TableHeaderContext.Provider\n value={{\n nextHeaderRowIndex: () => {\n const nextHeaderRowIndex = headerRowIndexRef.current;\n headerRowIndexRef.current += 1;\n return nextHeaderRowIndex;\n },\n }}\n >\n {content}\n </TableHeaderContext.Provider>\n </TableSectionContext.Provider>\n );\n }\n\n return (\n <div\n {...remainingProps}\n className={classNames(\n 'table-head',\n sticky && 'table-head-sticky',\n sticky && stickyInContainer && 'table-head-sticky-in-container'\n )}\n role='rowgroup'\n ref={layoutContext.tableHeadRowRef}\n >\n <TableSectionContext.Provider value='header'>\n <TableHeaderContext.Provider\n value={{\n nextHeaderRowIndex: () => {\n const nextHeaderRowIndex = headerRowIndexRef.current;\n headerRowIndexRef.current += 1;\n return nextHeaderRowIndex;\n },\n }}\n >\n <div\n className={classNames(\n 'table-head-grid',\n interactionContext.selectionHeaderContent && 'table-head-grid-custom-selection',\n className\n )}\n role={headerRowCount === 1 ? 'row' : 'presentation'}\n style={{ gridTemplateRows: `repeat(${headerRowCount}, auto)` }}\n >\n {interactionContext.showSelectionColumn && (\n <TableHeaderSelectionCell\n isAllSelected={interactionContext.isAllRowsSelected}\n isSomeRowsSelected={interactionContext.isSomeRowsSelected}\n onToggleAllSelection={interactionContext.onToggleAllSelection}\n rowCount={headerRowCount}\n selectionHeaderContent={interactionContext.selectionHeaderContent}\n />\n )}\n {content}\n </div>\n </TableHeaderContext.Provider>\n </TableSectionContext.Provider>\n </div>\n );\n};\n\nexport default TableHeader;\n"],"names":["TableHeader","props","children","className","sticky","stickyInContainer","remainingProps","renderContext","useOptionalTableRenderContext","renderConfigContext","useOptionalTableRenderConfigContext","interactionContext","useOptionalTableInteractionContext","layoutContext","useOptionalTableLayoutContext","sensors","useSensors","useSensor","PointerSensor","headerRowIndexRef","useRef","activeDraggedColumnKey","setActiveDraggedColumnKey","useState","activeDraggedColumnWidth","setActiveDraggedColumnWidth","canDragColumns","header","headerRowCount","overlayHeader","activeDraggedColumn","column","clearActiveDraggedColumn","handleDragStart","event","handleDragCancel","_event","handleDragEnd","content","jsxs","DndContext","resolveColumnCollisionDetection","restrictToHorizontalAxis","jsx","SortableContext","horizontalListSortingStrategy","DragOverlay","TableHeaderDragOverlay","classNames","TableSectionContext","TableHeaderContext","nextHeaderRowIndex","TableHeaderSelectionCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableHeader.js","sources":["../../../src/components/table/TableHeader.tsx"],"sourcesContent":["import {\n DndContext,\n DragOverlay,\n PointerSensor,\n type DragCancelEvent,\n type DragEndEvent,\n type DragStartEvent,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport { type MutableRefObject, type ReactNode, useLayoutEffect, useRef, useState } from 'react';\n\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport useResizeObserver from '../../useResizeObserver';\nimport classNames from '../../utils/classNames';\nimport type { TableHtmlAttributes, TableRowData } from './Table.types';\nimport TableHeaderDragOverlay from './render/header/TableHeaderDragOverlay';\nimport TableHeaderSelectionCell from './render/header/TableHeaderSelectionCell';\nimport { resolveColumnCollisionDetection } from './render/header/resolveColumnCollisionDetection';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableLayoutContext } from './context/TableLayoutContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport { TableHeaderContext, TableSectionContext } from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableHeaderProps<RowType extends TableRowData> = TableHtmlAttributes & {\n /**\n * Additional class names for the header grid wrapper.\n */\n className?: string;\n\n /**\n * Keeps the table header sticky while the page scrolls.\n * The sticky top reference follows `Table.stickyReference`.\n *\n * This applies in `TABLE` view only.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Table header content.\n */\n children?: ReactNode;\n};\n\nconst TABLE_STICKY_HEADER_HEIGHT_VAR = '--table-sticky-header-height';\n\nconst TableHeader = <RowType extends TableRowData = TableRowData>(props: TableHeaderProps<RowType>) => {\n const { children, className, sticky = false, ...remainingProps } = props;\n\n const renderContext = useOptionalTableRenderContext<RowType>();\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const layoutContext = useOptionalTableLayoutContext();\n\n if (!renderContext || !renderConfigContext || !interactionContext || !layoutContext) {\n return null;\n }\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }));\n\n const headerRowIndexRef = useRef(0);\n const [headerElementRef, , { blockSize: headerBlockSize }] = useResizeObserver<HTMLDivElement>();\n headerRowIndexRef.current = 0;\n\n const [activeDraggedColumnKey, setActiveDraggedColumnKey] = useState<string | undefined>(undefined);\n const [activeDraggedColumnWidth, setActiveDraggedColumnWidth] = useState<number | undefined>(undefined);\n const mergedHeaderRefs = useMergeRefs(\n layoutContext.tableHeadRowRef as MutableRefObject<HTMLDivElement | null>,\n headerElementRef\n );\n\n const canDragColumns = !!layoutContext.onColumnDragEnd && (layoutContext.draggableColumnKeys?.length ?? 0) > 1;\n const header = renderContext.header;\n const headerRowCount = header?.rowCount ?? 1;\n const overlayHeader = header ?? {\n rowCount: headerRowCount,\n totalColumnCount: renderContext.columns.length,\n columns: [],\n };\n\n const activeDraggedColumn = activeDraggedColumnKey\n ? header?.columns.find(column => (column.columnKey ?? String(column.key)) === activeDraggedColumnKey)\n : undefined;\n\n const clearActiveDraggedColumn = () => {\n setActiveDraggedColumnKey(undefined);\n setActiveDraggedColumnWidth(undefined);\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveDraggedColumnKey(String(event.active.id));\n setActiveDraggedColumnWidth(event.active.rect.current.initial?.width ?? undefined);\n };\n\n const handleDragCancel = (_event: DragCancelEvent) => {\n clearActiveDraggedColumn();\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n clearActiveDraggedColumn();\n layoutContext.onColumnDragEnd?.(event);\n };\n\n useLayoutEffect(() => {\n const headerElement = headerElementRef.current;\n const tableElement = headerElement?.closest<HTMLElement>('.table');\n\n if (!tableElement) {\n return;\n }\n\n if (!sticky || !headerElement) {\n tableElement.style.removeProperty(TABLE_STICKY_HEADER_HEIGHT_VAR);\n return;\n }\n\n const resolvedHeight = Math.max(headerBlockSize ?? headerElement.getBoundingClientRect().height ?? 0, 0);\n\n tableElement.style.setProperty(TABLE_STICKY_HEADER_HEIGHT_VAR, `${resolvedHeight}px`);\n\n return () => {\n tableElement.style.removeProperty(TABLE_STICKY_HEADER_HEIGHT_VAR);\n };\n }, [headerBlockSize, sticky]);\n\n const content =\n canDragColumns && layoutContext.draggableColumnKeys ? (\n <DndContext\n sensors={sensors}\n collisionDetection={resolveColumnCollisionDetection}\n modifiers={[restrictToHorizontalAxis]}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={layoutContext.draggableColumnKeys} strategy={horizontalListSortingStrategy}>\n {children}\n </SortableContext>\n <DragOverlay adjustScale={false} dropAnimation={null}>\n <TableHeaderDragOverlay\n column={activeDraggedColumn}\n header={overlayHeader}\n showSelectionColumn={interactionContext.showSelectionColumn}\n width={activeDraggedColumnWidth}\n />\n </DragOverlay>\n </DndContext>\n ) : (\n children\n );\n\n if (!renderConfigContext.isTableView) {\n return (\n <TableSectionContext.Provider value='header'>\n <TableHeaderContext.Provider\n value={{\n nextHeaderRowIndex: () => {\n const nextHeaderRowIndex = headerRowIndexRef.current;\n headerRowIndexRef.current += 1;\n return nextHeaderRowIndex;\n },\n }}\n >\n {content}\n </TableHeaderContext.Provider>\n </TableSectionContext.Provider>\n );\n }\n\n return (\n <div\n {...remainingProps}\n className={classNames('table-head', sticky && 'table-head-sticky')}\n role='rowgroup'\n ref={mergedHeaderRefs}\n >\n <TableSectionContext.Provider value='header'>\n <TableHeaderContext.Provider\n value={{\n nextHeaderRowIndex: () => {\n const nextHeaderRowIndex = headerRowIndexRef.current;\n headerRowIndexRef.current += 1;\n return nextHeaderRowIndex;\n },\n }}\n >\n <div\n className={classNames(\n 'table-head-grid',\n interactionContext.selectionHeaderContent && 'table-head-grid-custom-selection',\n className\n )}\n role={headerRowCount === 1 ? 'row' : 'presentation'}\n style={{ gridTemplateRows: `repeat(${headerRowCount}, auto)` }}\n >\n {interactionContext.showSelectionColumn && (\n <TableHeaderSelectionCell\n isAllSelected={interactionContext.isAllRowsSelected}\n isSomeRowsSelected={interactionContext.isSomeRowsSelected}\n onToggleAllSelection={interactionContext.onToggleAllSelection}\n disabled={!interactionContext.hasSelectableRows}\n rowCount={headerRowCount}\n selectionHeaderContent={interactionContext.selectionHeaderContent}\n />\n )}\n {content}\n </div>\n </TableHeaderContext.Provider>\n </TableSectionContext.Provider>\n </div>\n );\n};\n\nexport default TableHeader;\n"],"names":["TABLE_STICKY_HEADER_HEIGHT_VAR","TableHeader","props","children","className","sticky","remainingProps","renderContext","useOptionalTableRenderContext","renderConfigContext","useOptionalTableRenderConfigContext","interactionContext","useOptionalTableInteractionContext","layoutContext","useOptionalTableLayoutContext","sensors","useSensors","useSensor","PointerSensor","headerRowIndexRef","useRef","headerElementRef","headerBlockSize","useResizeObserver","activeDraggedColumnKey","setActiveDraggedColumnKey","useState","activeDraggedColumnWidth","setActiveDraggedColumnWidth","mergedHeaderRefs","useMergeRefs","canDragColumns","header","headerRowCount","overlayHeader","activeDraggedColumn","column","clearActiveDraggedColumn","handleDragStart","event","handleDragCancel","_event","handleDragEnd","useLayoutEffect","headerElement","tableElement","resolvedHeight","content","jsxs","DndContext","resolveColumnCollisionDetection","restrictToHorizontalAxis","jsx","SortableContext","horizontalListSortingStrategy","DragOverlay","TableHeaderDragOverlay","classNames","TableSectionContext","TableHeaderContext","nextHeaderRowIndex","TableHeaderSelectionCell"],"mappings":"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"}
|
|
@@ -2,7 +2,9 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { TableHtmlAttributes, TableRowData } from './Table.types';
|
|
3
3
|
export type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes & Partial<RowType> & {
|
|
4
4
|
/**
|
|
5
|
-
* Keeps the row sticky at the top of
|
|
5
|
+
* Keeps the row sticky at the top of the current table scroll context.
|
|
6
|
+
* When a sticky `TableHeader` is present, the row stacks below the measured header height.
|
|
7
|
+
* `TableBody maxHeight` continues to pin the row inside the internal body scroller.
|
|
6
8
|
*
|
|
7
9
|
* @default false
|
|
8
10
|
*/
|
|
@@ -17,6 +19,10 @@ export type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes &
|
|
|
17
19
|
* Optional class names only for this row.
|
|
18
20
|
*/
|
|
19
21
|
className?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Excludes this row from table selection while keeping the row interactive.
|
|
24
|
+
*/
|
|
25
|
+
selectable?: boolean;
|
|
20
26
|
/**
|
|
21
27
|
* Disable table hover styling for this row.
|
|
22
28
|
*/
|
|
@@ -1,112 +1,115 @@
|
|
|
1
|
-
import { jsx as a, jsxs as
|
|
2
|
-
import { motion as
|
|
3
|
-
import { useRef as
|
|
4
|
-
import
|
|
1
|
+
import { jsx as a, jsxs as O, Fragment as B } from "react/jsx-runtime";
|
|
2
|
+
import { motion as H } from "motion/react";
|
|
3
|
+
import { useRef as j } from "react";
|
|
4
|
+
import F from "../checkbox/Checkbox.js";
|
|
5
5
|
import N from "../../utils/classNames.js";
|
|
6
|
-
import { resolveRowKey as
|
|
7
|
-
import { getInteractiveRowProps as
|
|
8
|
-
import { useOptionalTableInteractionContext as
|
|
9
|
-
import { useOptionalTableRenderConfigContext as
|
|
10
|
-
import { useOptionalTableSection as
|
|
11
|
-
import { useOptionalTableRenderContext as
|
|
12
|
-
const
|
|
13
|
-
const { isSelected:
|
|
6
|
+
import { resolveRowKey as E, resolveRowClassName as M } from "./model/resolveRowMeta.js";
|
|
7
|
+
import { getInteractiveRowProps as q } from "./shared/getInteractiveRowProps.js";
|
|
8
|
+
import { useOptionalTableInteractionContext as z } from "./context/TableInteractionContext.js";
|
|
9
|
+
import { useOptionalTableRenderConfigContext as G } from "./context/TableRenderConfigContext.js";
|
|
10
|
+
import { useOptionalTableSection as J, useTableBodyContext as L, extractTableHtmlAttributes as k, TableRowContext as Q } from "./context/TableStructureContext.js";
|
|
11
|
+
import { useOptionalTableRenderContext as U } from "./context/TableRenderContext.js";
|
|
12
|
+
const W = (p) => {
|
|
13
|
+
const { isSelected: R, isSelectable: r, hideSelectionControl: x, isTableView: b, onToggleSelection: g, cardCellClassName: m } = p;
|
|
14
14
|
return /* @__PURE__ */ a(
|
|
15
15
|
"div",
|
|
16
16
|
{
|
|
17
|
-
className: N("table-cell table-selection-cell", !
|
|
17
|
+
className: N("table-cell table-selection-cell", !b && m),
|
|
18
18
|
role: "cell",
|
|
19
19
|
"aria-colindex": 1,
|
|
20
|
-
style:
|
|
21
|
-
onClick: (
|
|
22
|
-
onKeyDown: (
|
|
23
|
-
children: /* @__PURE__ */ a("div", { className: "table-selection-control", children: /* @__PURE__ */ a(
|
|
20
|
+
style: b ? { gridColumn: "1 / span 1", gridRow: "1 / span 1" } : void 0,
|
|
21
|
+
onClick: (l) => l.stopPropagation(),
|
|
22
|
+
onKeyDown: (l) => l.stopPropagation(),
|
|
23
|
+
children: !x && /* @__PURE__ */ a("div", { className: "table-selection-control", children: /* @__PURE__ */ a(F, { checked: R, disabled: !r, onChange: g }) })
|
|
24
24
|
}
|
|
25
25
|
);
|
|
26
|
-
},
|
|
27
|
-
const { children:
|
|
28
|
-
if (
|
|
26
|
+
}, se = (p) => {
|
|
27
|
+
const { children: R, disabled: r, className: x, noHover: b, selectable: g, sticky: m, ...l } = p, e = G(), c = U(), o = z(), I = J(), f = L(), C = j(0);
|
|
28
|
+
if (C.current = 0, !c || !e || !o || c.columns.length === 0 || I !== "body" || !f)
|
|
29
29
|
return null;
|
|
30
|
-
const
|
|
31
|
-
isClickable: o.isClickable && !
|
|
32
|
-
onRowClick: (i,
|
|
33
|
-
o.onRowClick?.(i,
|
|
30
|
+
const d = l, n = f.nextRowIndex(), t = E(d, n, e.rowKey), h = typeof e.rowAnimationProps == "function" ? e.rowAnimationProps(d, n) : e.rowAnimationProps, s = q({
|
|
31
|
+
isClickable: o.isClickable && !r,
|
|
32
|
+
onRowClick: (i, w) => {
|
|
33
|
+
o.onRowClick?.(i, w), o.onActiveRowChange?.(
|
|
34
34
|
o.activeRowId === t ? void 0 : t,
|
|
35
35
|
i,
|
|
36
|
-
|
|
36
|
+
w
|
|
37
37
|
);
|
|
38
38
|
},
|
|
39
|
-
row:
|
|
40
|
-
rowIndex:
|
|
41
|
-
}),
|
|
42
|
-
|
|
39
|
+
row: d,
|
|
40
|
+
rowIndex: n
|
|
41
|
+
}), u = o.selectableRowIdSet.has(t), v = u && o.selectedRowIdSet.has(t), P = o.showSelectionColumn && /* @__PURE__ */ a(
|
|
42
|
+
W,
|
|
43
43
|
{
|
|
44
|
-
isSelected:
|
|
44
|
+
isSelected: v,
|
|
45
|
+
isSelectable: u,
|
|
46
|
+
hideSelectionControl: !u && o.hideSelectionCheckboxesForExcludedRows,
|
|
45
47
|
isTableView: e.isTableView,
|
|
46
48
|
onToggleSelection: () => o.onToggleRowSelection?.(t),
|
|
47
|
-
cardCellClassName: e.cardClasses.cellClassName
|
|
48
|
-
disabled: n
|
|
49
|
+
cardCellClassName: e.cardClasses.cellClassName
|
|
49
50
|
}
|
|
50
|
-
),
|
|
51
|
+
), D = !!c.renderDraft.bodyMaxHeight, y = N(
|
|
51
52
|
"table-row",
|
|
52
53
|
!e.isTableView && "divider-y-1 divider-color-lighter divider-style-solid",
|
|
53
54
|
o.activeRowId === t && "table-row-active",
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(
|
|
58
|
-
|
|
55
|
+
r && "table-row-disabled",
|
|
56
|
+
v && "table-row-selected",
|
|
57
|
+
s.isClickableClassName,
|
|
58
|
+
(r || b) && "table-row-no-hover",
|
|
59
|
+
m && "table-row-sticky",
|
|
60
|
+
m && D && "table-row-sticky-in-container",
|
|
59
61
|
!e.isTableView && e.cardClasses.rowClassName,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
),
|
|
62
|
+
x,
|
|
63
|
+
M(e.rowClassName, d, n)
|
|
64
|
+
), S = /* @__PURE__ */ O(B, { children: [
|
|
63
65
|
P,
|
|
64
|
-
|
|
65
|
-
] }),
|
|
66
|
-
...
|
|
67
|
-
className:
|
|
68
|
-
"data-index":
|
|
66
|
+
R
|
|
67
|
+
] }), K = {
|
|
68
|
+
...k(l),
|
|
69
|
+
className: y,
|
|
70
|
+
"data-index": n,
|
|
69
71
|
"data-row-id": String(t),
|
|
70
|
-
onClick:
|
|
71
|
-
onKeyDown:
|
|
72
|
+
onClick: s.onClick,
|
|
73
|
+
onKeyDown: s.onKeyDown,
|
|
72
74
|
role: "row",
|
|
73
|
-
tabIndex:
|
|
74
|
-
},
|
|
75
|
-
...
|
|
76
|
-
className:
|
|
77
|
-
"data-index":
|
|
75
|
+
tabIndex: s.tabIndex
|
|
76
|
+
}, A = {
|
|
77
|
+
...k(l),
|
|
78
|
+
className: y,
|
|
79
|
+
"data-index": n,
|
|
78
80
|
"data-row-id": String(t),
|
|
79
|
-
onClick:
|
|
80
|
-
onKeyDown:
|
|
81
|
+
onClick: s.onClick,
|
|
82
|
+
onKeyDown: s.onKeyDown,
|
|
81
83
|
role: "row",
|
|
82
|
-
tabIndex:
|
|
83
|
-
...
|
|
84
|
-
},
|
|
85
|
-
|
|
84
|
+
tabIndex: s.tabIndex,
|
|
85
|
+
...h
|
|
86
|
+
}, T = /* @__PURE__ */ a(
|
|
87
|
+
Q.Provider,
|
|
86
88
|
{
|
|
87
89
|
value: {
|
|
88
|
-
nextColumnIndex: (i,
|
|
90
|
+
nextColumnIndex: (i, w = 1) => {
|
|
89
91
|
if (i !== void 0 && i >= 0)
|
|
90
|
-
return
|
|
91
|
-
const
|
|
92
|
-
return
|
|
92
|
+
return C.current = i + w, i;
|
|
93
|
+
const V = C.current;
|
|
94
|
+
return C.current += w, V;
|
|
93
95
|
},
|
|
94
|
-
rowIndex:
|
|
96
|
+
rowIndex: n,
|
|
95
97
|
rowId: t,
|
|
96
|
-
rowData:
|
|
98
|
+
rowData: d
|
|
97
99
|
},
|
|
98
|
-
children:
|
|
100
|
+
children: h ? /* @__PURE__ */ a(H.div, { ...A, children: S }) : /* @__PURE__ */ a("div", { ...K, children: S })
|
|
99
101
|
}
|
|
100
102
|
);
|
|
101
|
-
return
|
|
103
|
+
return c.renderDraft.bodyRows.push({
|
|
102
104
|
rowId: t,
|
|
103
|
-
rowIndex:
|
|
105
|
+
rowIndex: n,
|
|
104
106
|
kind: "data",
|
|
105
|
-
disabled:
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
disabled: r,
|
|
108
|
+
selectable: !r && g !== !1,
|
|
109
|
+
render: () => T
|
|
110
|
+
}), c.isRegisteringBodyRows ? null : T;
|
|
108
111
|
};
|
|
109
112
|
export {
|
|
110
|
-
|
|
113
|
+
se as default
|
|
111
114
|
};
|
|
112
115
|
//# sourceMappingURL=TableRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","sources":["../../../src/components/table/TableRow.tsx"],"sourcesContent":["import { motion, type HTMLMotionProps } from 'motion/react';\nimport { type ReactNode, useRef } from 'react';\n\nimport Checkbox from '../checkbox/Checkbox';\nimport classNames from '../../utils/classNames';\nimport { resolveRowClassName, resolveRowKey } from './model/resolveRowMeta';\nimport { getInteractiveRowProps } from './shared/getInteractiveRowProps';\nimport type { TableHtmlAttributes, TableRowData } from './Table.types';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport {\n extractTableHtmlAttributes,\n useTableBodyContext,\n TableRowContext,\n useOptionalTableSection,\n} from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes &\n Partial<RowType> & {\n /**\n * Keeps the row sticky at the top of a scrollable table body.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Disables row interaction such as hover styles, clicks, and keyboard activation.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Optional class names only for this row.\n */\n className?: string;\n\n /**\n * Disable table hover styling for this row.\n */\n noHover?: boolean;\n\n /**\n * Table row content.\n */\n children?: ReactNode;\n };\n\ntype TableRowSelectionCellProps = {\n isSelected: boolean;\n isTableView: boolean;\n onToggleSelection?: () => void;\n cardCellClassName?: string;\n disabled?: boolean;\n};\n\nconst TableRowSelectionCell = (props: TableRowSelectionCellProps) => {\n const { isSelected, isTableView, onToggleSelection, cardCellClassName, disabled } = props;\n\n return (\n <div\n className={classNames('table-cell table-selection-cell', !isTableView && cardCellClassName)}\n role='cell'\n aria-colindex={1}\n style={isTableView ? { gridColumn: '1 / span 1', gridRow: '1 / span 1' } : undefined}\n onClick={event => event.stopPropagation()}\n onKeyDown={event => event.stopPropagation()}\n >\n <div className='table-selection-control'>\n <Checkbox checked={isSelected} disabled={disabled} onChange={onToggleSelection} />\n </div>\n </div>\n );\n};\n\nconst TableRow = <RowType extends TableRowData = TableRowData>(props: TableRowProps<RowType>) => {\n const { children, disabled, className, noHover, sticky, ...remainingProps } = props;\n\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const renderContext = useOptionalTableRenderContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const section = useOptionalTableSection();\n const bodyContext = useTableBodyContext();\n\n const cellIndexRef = useRef(0);\n cellIndexRef.current = 0;\n\n if (\n !renderContext ||\n !renderConfigContext ||\n !interactionContext ||\n renderContext.columns.length === 0 ||\n section !== 'body' ||\n !bodyContext\n ) {\n return null;\n }\n\n const rowData = remainingProps as RowType;\n const rowIndex = bodyContext.nextRowIndex();\n const rowId = resolveRowKey(rowData, rowIndex, renderConfigContext.rowKey);\n\n const resolvedRowAnimationProps =\n typeof renderConfigContext.rowAnimationProps === 'function'\n ? renderConfigContext.rowAnimationProps(rowData, rowIndex)\n : renderConfigContext.rowAnimationProps;\n\n const interactiveRowProps = getInteractiveRowProps({\n isClickable: interactionContext.isClickable && !disabled,\n onRowClick: (clickedRow, clickedRowIndex) => {\n interactionContext.onRowClick?.(clickedRow, clickedRowIndex);\n interactionContext.onActiveRowChange?.(\n interactionContext.activeRowId === rowId ? undefined : rowId,\n clickedRow,\n clickedRowIndex\n );\n },\n row: rowData,\n rowIndex,\n });\n\n const isSelected = interactionContext.selectedRowIdSet.has(rowId);\n const selectionCell = interactionContext.showSelectionColumn && (\n <TableRowSelectionCell\n isSelected={isSelected}\n isTableView={renderConfigContext.isTableView}\n onToggleSelection={() => interactionContext.onToggleRowSelection?.(rowId)}\n cardCellClassName={renderConfigContext.cardClasses.cellClassName}\n disabled={disabled}\n />\n );\n\n const rowClassName = classNames(\n 'table-row',\n !renderConfigContext.isTableView && 'divider-y-1 divider-color-lighter divider-style-solid',\n interactionContext.activeRowId === rowId && 'table-row-active',\n disabled && 'table-row-disabled',\n isSelected && 'table-row-selected',\n interactiveRowProps.isClickableClassName,\n (disabled || noHover) && 'table-row-no-hover',\n sticky && 'table-row-sticky',\n !renderConfigContext.isTableView && renderConfigContext.cardClasses.rowClassName,\n className,\n resolveRowClassName(renderConfigContext.rowClassName, rowData, rowIndex)\n );\n\n const rowContent = (\n <>\n {selectionCell}\n {children}\n </>\n );\n\n const staticRowProps = {\n ...extractTableHtmlAttributes(remainingProps),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n };\n\n const animatedRowProps = {\n ...(extractTableHtmlAttributes(remainingProps) as Omit<\n HTMLMotionProps<'div'>,\n 'children' | 'className' | 'data-index' | 'data-row-id' | 'onClick' | 'onKeyDown' | 'role' | 'tabIndex'\n >),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n ...resolvedRowAnimationProps,\n };\n\n const rowNode = (\n <TableRowContext.Provider\n value={{\n nextColumnIndex: (explicitColumnIndex, span = 1) => {\n if (explicitColumnIndex !== undefined && explicitColumnIndex >= 0) {\n cellIndexRef.current = explicitColumnIndex + span;\n return explicitColumnIndex;\n }\n\n const nextIndex = cellIndexRef.current;\n cellIndexRef.current += span;\n return nextIndex;\n },\n rowIndex,\n rowId,\n rowData,\n }}\n >\n {resolvedRowAnimationProps ? (\n <motion.div {...animatedRowProps}>{rowContent}</motion.div>\n ) : (\n <div {...staticRowProps}>{rowContent}</div>\n )}\n </TableRowContext.Provider>\n );\n\n renderContext.renderDraft.bodyRows.push({\n rowId,\n rowIndex,\n kind: 'data',\n disabled,\n render: () => rowNode,\n });\n\n return renderContext.isRegisteringBodyRows ? null : rowNode;\n};\n\nexport default TableRow;\n"],"names":["TableRowSelectionCell","props","isSelected","isTableView","onToggleSelection","cardCellClassName","disabled","jsx","classNames","event","Checkbox","TableRow","children","className","noHover","sticky","remainingProps","renderConfigContext","useOptionalTableRenderConfigContext","renderContext","useOptionalTableRenderContext","interactionContext","useOptionalTableInteractionContext","section","useOptionalTableSection","bodyContext","useTableBodyContext","cellIndexRef","useRef","rowData","rowIndex","rowId","resolveRowKey","resolvedRowAnimationProps","interactiveRowProps","getInteractiveRowProps","clickedRow","clickedRowIndex","selectionCell","rowClassName","resolveRowClassName","rowContent","jsxs","Fragment","staticRowProps","extractTableHtmlAttributes","animatedRowProps","rowNode","TableRowContext","explicitColumnIndex","span","nextIndex","motion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableRow.js","sources":["../../../src/components/table/TableRow.tsx"],"sourcesContent":["import { motion, type HTMLMotionProps } from 'motion/react';\nimport { type ReactNode, useRef } from 'react';\n\nimport Checkbox from '../checkbox/Checkbox';\nimport classNames from '../../utils/classNames';\nimport { resolveRowClassName, resolveRowKey } from './model/resolveRowMeta';\nimport { getInteractiveRowProps } from './shared/getInteractiveRowProps';\nimport type { TableHtmlAttributes, TableRowData } from './Table.types';\nimport { useOptionalTableInteractionContext } from './context/TableInteractionContext';\nimport { useOptionalTableRenderConfigContext } from './context/TableRenderConfigContext';\nimport {\n extractTableHtmlAttributes,\n useTableBodyContext,\n TableRowContext,\n useOptionalTableSection,\n} from './context/TableStructureContext';\nimport { useOptionalTableRenderContext } from './context/TableRenderContext';\n\nexport type TableRowProps<RowType extends TableRowData> = TableHtmlAttributes &\n Partial<RowType> & {\n /**\n * Keeps the row sticky at the top of the current table scroll context.\n * When a sticky `TableHeader` is present, the row stacks below the measured header height.\n * `TableBody maxHeight` continues to pin the row inside the internal body scroller.\n *\n * @default false\n */\n sticky?: boolean;\n\n /**\n * Disables row interaction such as hover styles, clicks, and keyboard activation.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Optional class names only for this row.\n */\n className?: string;\n\n /**\n * Excludes this row from table selection while keeping the row interactive.\n */\n selectable?: boolean;\n\n /**\n * Disable table hover styling for this row.\n */\n noHover?: boolean;\n\n /**\n * Table row content.\n */\n children?: ReactNode;\n };\n\ntype TableRowSelectionCellProps = {\n isSelected: boolean;\n isSelectable: boolean;\n hideSelectionControl?: boolean;\n isTableView: boolean;\n onToggleSelection?: () => void;\n cardCellClassName?: string;\n};\n\nconst TableRowSelectionCell = (props: TableRowSelectionCellProps) => {\n const { isSelected, isSelectable, hideSelectionControl, isTableView, onToggleSelection, cardCellClassName } = props;\n\n return (\n <div\n className={classNames('table-cell table-selection-cell', !isTableView && cardCellClassName)}\n role='cell'\n aria-colindex={1}\n style={isTableView ? { gridColumn: '1 / span 1', gridRow: '1 / span 1' } : undefined}\n onClick={event => event.stopPropagation()}\n onKeyDown={event => event.stopPropagation()}\n >\n {!hideSelectionControl && (\n <div className='table-selection-control'>\n <Checkbox checked={isSelected} disabled={!isSelectable} onChange={onToggleSelection} />\n </div>\n )}\n </div>\n );\n};\n\nconst TableRow = <RowType extends TableRowData = TableRowData>(props: TableRowProps<RowType>) => {\n const { children, disabled, className, noHover, selectable, sticky, ...remainingProps } = props;\n\n const renderConfigContext = useOptionalTableRenderConfigContext<RowType>();\n const renderContext = useOptionalTableRenderContext<RowType>();\n const interactionContext = useOptionalTableInteractionContext<RowType>();\n const section = useOptionalTableSection();\n const bodyContext = useTableBodyContext();\n\n const cellIndexRef = useRef(0);\n cellIndexRef.current = 0;\n\n if (\n !renderContext ||\n !renderConfigContext ||\n !interactionContext ||\n renderContext.columns.length === 0 ||\n section !== 'body' ||\n !bodyContext\n ) {\n return null;\n }\n\n const rowData = remainingProps as RowType;\n const rowIndex = bodyContext.nextRowIndex();\n const rowId = resolveRowKey(rowData, rowIndex, renderConfigContext.rowKey);\n\n const resolvedRowAnimationProps =\n typeof renderConfigContext.rowAnimationProps === 'function'\n ? renderConfigContext.rowAnimationProps(rowData, rowIndex)\n : renderConfigContext.rowAnimationProps;\n\n const interactiveRowProps = getInteractiveRowProps({\n isClickable: interactionContext.isClickable && !disabled,\n onRowClick: (clickedRow, clickedRowIndex) => {\n interactionContext.onRowClick?.(clickedRow, clickedRowIndex);\n interactionContext.onActiveRowChange?.(\n interactionContext.activeRowId === rowId ? undefined : rowId,\n clickedRow,\n clickedRowIndex\n );\n },\n row: rowData,\n rowIndex,\n });\n\n const isSelectable = interactionContext.selectableRowIdSet.has(rowId);\n const isSelected = isSelectable && interactionContext.selectedRowIdSet.has(rowId);\n const selectionCell = interactionContext.showSelectionColumn && (\n <TableRowSelectionCell\n isSelected={isSelected}\n isSelectable={isSelectable}\n hideSelectionControl={!isSelectable && interactionContext.hideSelectionCheckboxesForExcludedRows}\n isTableView={renderConfigContext.isTableView}\n onToggleSelection={() => interactionContext.onToggleRowSelection?.(rowId)}\n cardCellClassName={renderConfigContext.cardClasses.cellClassName}\n />\n );\n\n const stickyInBodyScrollContainer = !!renderContext.renderDraft.bodyMaxHeight;\n\n const rowClassName = classNames(\n 'table-row',\n !renderConfigContext.isTableView && 'divider-y-1 divider-color-lighter divider-style-solid',\n interactionContext.activeRowId === rowId && 'table-row-active',\n disabled && 'table-row-disabled',\n isSelected && 'table-row-selected',\n interactiveRowProps.isClickableClassName,\n (disabled || noHover) && 'table-row-no-hover',\n sticky && 'table-row-sticky',\n sticky && stickyInBodyScrollContainer && 'table-row-sticky-in-container',\n !renderConfigContext.isTableView && renderConfigContext.cardClasses.rowClassName,\n className,\n resolveRowClassName(renderConfigContext.rowClassName, rowData, rowIndex)\n );\n\n const rowContent = (\n <>\n {selectionCell}\n {children}\n </>\n );\n\n const staticRowProps = {\n ...extractTableHtmlAttributes(remainingProps),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n };\n\n const animatedRowProps = {\n ...(extractTableHtmlAttributes(remainingProps) as Omit<\n HTMLMotionProps<'div'>,\n 'children' | 'className' | 'data-index' | 'data-row-id' | 'onClick' | 'onKeyDown' | 'role' | 'tabIndex'\n >),\n className: rowClassName,\n 'data-index': rowIndex,\n 'data-row-id': String(rowId),\n onClick: interactiveRowProps.onClick,\n onKeyDown: interactiveRowProps.onKeyDown,\n role: 'row' as const,\n tabIndex: interactiveRowProps.tabIndex,\n ...resolvedRowAnimationProps,\n };\n\n const rowNode = (\n <TableRowContext.Provider\n value={{\n nextColumnIndex: (explicitColumnIndex, span = 1) => {\n if (explicitColumnIndex !== undefined && explicitColumnIndex >= 0) {\n cellIndexRef.current = explicitColumnIndex + span;\n return explicitColumnIndex;\n }\n\n const nextIndex = cellIndexRef.current;\n cellIndexRef.current += span;\n return nextIndex;\n },\n rowIndex,\n rowId,\n rowData,\n }}\n >\n {resolvedRowAnimationProps ? (\n <motion.div {...animatedRowProps}>{rowContent}</motion.div>\n ) : (\n <div {...staticRowProps}>{rowContent}</div>\n )}\n </TableRowContext.Provider>\n );\n\n renderContext.renderDraft.bodyRows.push({\n rowId,\n rowIndex,\n kind: 'data',\n disabled,\n selectable: !disabled && selectable !== false,\n render: () => rowNode,\n });\n\n return renderContext.isRegisteringBodyRows ? null : rowNode;\n};\n\nexport default TableRow;\n"],"names":["TableRowSelectionCell","props","isSelected","isSelectable","hideSelectionControl","isTableView","onToggleSelection","cardCellClassName","jsx","classNames","event","Checkbox","TableRow","children","disabled","className","noHover","selectable","sticky","remainingProps","renderConfigContext","useOptionalTableRenderConfigContext","renderContext","useOptionalTableRenderContext","interactionContext","useOptionalTableInteractionContext","section","useOptionalTableSection","bodyContext","useTableBodyContext","cellIndexRef","useRef","rowData","rowIndex","rowId","resolveRowKey","resolvedRowAnimationProps","interactiveRowProps","getInteractiveRowProps","clickedRow","clickedRowIndex","selectionCell","stickyInBodyScrollContainer","rowClassName","resolveRowClassName","rowContent","jsxs","Fragment","staticRowProps","extractTableHtmlAttributes","animatedRowProps","rowNode","TableRowContext","explicitColumnIndex","span","nextIndex","motion"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ButtonDropdownProps } from '../dropdown/ButtonDropdown';
|
|
2
|
+
export type TableRowActionsDropdownProps = Omit<ButtonDropdownProps, 'title' | 'bsStyle' | 'variant' | 'iconOnly' | 'iconName' | 'noCaret' | 'splitButton' | 'pullRight' | 'usePortal'> & {
|
|
3
|
+
/**
|
|
4
|
+
* Accessible label applied to the icon-only trigger button.
|
|
5
|
+
*
|
|
6
|
+
* @default 'Row actions'
|
|
7
|
+
*/
|
|
8
|
+
'aria-label'?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const TableRowActionsDropdown: ({ "aria-label": ariaLabel, ...remainingProps }: TableRowActionsDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export default TableRowActionsDropdown;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import a from "../dropdown/ButtonDropdown.js";
|
|
3
|
+
const i = ({
|
|
4
|
+
"aria-label": t = "Row actions",
|
|
5
|
+
...r
|
|
6
|
+
}) => /* @__PURE__ */ o(
|
|
7
|
+
a,
|
|
8
|
+
{
|
|
9
|
+
...r,
|
|
10
|
+
"aria-label": t,
|
|
11
|
+
title: /* @__PURE__ */ o("span", { className: "rioglyph rioglyph-option-horizontal", "aria-hidden": "true" }),
|
|
12
|
+
bsStyle: "muted",
|
|
13
|
+
iconOnly: !0,
|
|
14
|
+
noCaret: !0,
|
|
15
|
+
pullRight: !0,
|
|
16
|
+
usePortal: !0
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
export {
|
|
20
|
+
i as default
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=TableRowActionsDropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableRowActionsDropdown.js","sources":["../../../src/components/table/TableRowActionsDropdown.tsx"],"sourcesContent":["import ButtonDropdown, { type ButtonDropdownProps } from '../dropdown/ButtonDropdown';\n\nexport type TableRowActionsDropdownProps = Omit<\n ButtonDropdownProps,\n 'title' | 'bsStyle' | 'variant' | 'iconOnly' | 'iconName' | 'noCaret' | 'splitButton' | 'pullRight' | 'usePortal'\n> & {\n /**\n * Accessible label applied to the icon-only trigger button.\n *\n * @default 'Row actions'\n */\n 'aria-label'?: string;\n};\n\nconst TableRowActionsDropdown = ({\n 'aria-label': ariaLabel = 'Row actions',\n ...remainingProps\n}: TableRowActionsDropdownProps) => (\n <ButtonDropdown\n {...remainingProps}\n aria-label={ariaLabel}\n title={<span className='rioglyph rioglyph-option-horizontal' aria-hidden='true' />}\n bsStyle='muted'\n iconOnly\n noCaret\n pullRight\n usePortal\n />\n);\n\nexport default TableRowActionsDropdown;\n"],"names":["TableRowActionsDropdown","ariaLabel","remainingProps","jsx","ButtonDropdown"],"mappings":";;AAcA,MAAMA,IAA0B,CAAC;AAAA,EAC7B,cAAcC,IAAY;AAAA,EAC1B,GAAGC;AACP,MACI,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACI,GAAGF;AAAA,IACJ,cAAYD;AAAA,IACZ,OAAO,gBAAAE,EAAC,QAAA,EAAK,WAAU,uCAAsC,eAAY,QAAO;AAAA,IAChF,SAAQ;AAAA,IACR,UAAQ;AAAA,IACR,SAAO;AAAA,IACP,WAAS;AAAA,IACT,WAAS;AAAA,EAAA;AACb;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MouseEventHandler } from 'react';
|
|
2
|
+
export type TableStickyRowButtonProps = {
|
|
3
|
+
/**
|
|
4
|
+
* Controls whether the related row is currently sticky.
|
|
5
|
+
*
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
active?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Disables the sticky row button.
|
|
11
|
+
*
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Callback triggered when the sticky row button is clicked.
|
|
17
|
+
*/
|
|
18
|
+
onClick?: MouseEventHandler<HTMLButtonElement>;
|
|
19
|
+
/**
|
|
20
|
+
* Optional additional class names for the button element.
|
|
21
|
+
*/
|
|
22
|
+
className?: string;
|
|
23
|
+
};
|
|
24
|
+
declare const TableStickyRowButton: (props: TableStickyRowButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export default TableStickyRowButton;
|