@wallarm-org/design-system 0.16.5 → 0.16.6-rc-fix-AS-582-table-experience.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Table/TableBody/TableBodyCell.js +2 -2
- package/dist/components/Table/TableHead.js +2 -1
- package/dist/components/Table/TableMasterCellActions.js +1 -1
- package/dist/components/Table/TableSettingsMenu/TableSettingsMenu.js +5 -16
- package/dist/components/Table/mocks.js +11 -6
- package/dist/metadata/components.json +5 -5
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { Td } from "../primitives/index.js";
|
|
|
9
9
|
import { useTableContext } from "../TableContext/index.js";
|
|
10
10
|
import { TableMasterCellActions } from "../TableMasterCellActions.js";
|
|
11
11
|
const TableBodyCell = ({ cell, colSpan, className, disablePinnedShadow })=>{
|
|
12
|
-
const { allLeafColumns } = useTableContext();
|
|
12
|
+
const { allLeafColumns, masterColumnId } = useTableContext();
|
|
13
13
|
const testId = useTestId('body-cell');
|
|
14
14
|
const column = cell.column;
|
|
15
15
|
const isPinned = column.getIsPinned();
|
|
@@ -19,7 +19,7 @@ const TableBodyCell = ({ cell, colSpan, className, disablePinnedShadow })=>{
|
|
|
19
19
|
const { canDnd, setNodeRef, dndStyle } = useColumnDnd(column);
|
|
20
20
|
const pinningStyles = getPinningStyles(column);
|
|
21
21
|
const lastLeft = isLastPinnedLeft(column, allLeafColumns, column.id);
|
|
22
|
-
const isCut = meta?.resizeType === 'cut';
|
|
22
|
+
const isCut = column.id === masterColumnId || meta?.resizeType === 'cut';
|
|
23
23
|
const content = flexRender(cell.column.columnDef.cell, cell.getContext());
|
|
24
24
|
const hasActions = !!meta?.renderActions;
|
|
25
25
|
const [actionsWidth, setActionsWidth] = useState(0);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/cn.js";
|
|
2
3
|
import { useTestId } from "../../utils/testId.js";
|
|
3
4
|
import { THead, Tr } from "./primitives/index.js";
|
|
4
5
|
import { useTableContext } from "./TableContext/index.js";
|
|
@@ -8,7 +9,7 @@ const TableHead = ()=>{
|
|
|
8
9
|
const testId = useTestId('head');
|
|
9
10
|
const hasTextDescription = table.getAllLeafColumns().some((col)=>col.columnDef.meta?.description?.type === 'text');
|
|
10
11
|
return /*#__PURE__*/ jsx(THead, {
|
|
11
|
-
className:
|
|
12
|
+
className: cn('sticky top-0 z-30', hasTextDescription ? 'h-48' : 'h-32'),
|
|
12
13
|
"data-testid": testId,
|
|
13
14
|
children: table.getHeaderGroups().map((headerGroup)=>/*#__PURE__*/ jsx(Tr, {
|
|
14
15
|
children: headerGroup.headers.map((header)=>/*#__PURE__*/ jsx(TableHeadCell, {
|
|
@@ -17,7 +17,7 @@ const TableMasterCellActions = ({ children, onWidthChange })=>{
|
|
|
17
17
|
]);
|
|
18
18
|
return /*#__PURE__*/ jsx("div", {
|
|
19
19
|
ref: ref,
|
|
20
|
-
className: cn('absolute top-0 right-0 h-full', 'flex items-start pt-6 pr-6 pl-4 gap-2'),
|
|
20
|
+
className: cn('absolute top-0 right-0 h-full bg-bg-surface-2', 'before:absolute before:inset-0 before:pointer-events-none before:transition-colors', 'group-hover/row:before:bg-states-primary-hover', 'group-data-[selected]/row:before:bg-states-primary-active', 'group-data-[selected]/row:group-hover/row:before:bg-states-primary-hover', 'flex items-start pt-6 pr-6 pl-4 gap-2'),
|
|
21
21
|
children: children
|
|
22
22
|
});
|
|
23
23
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
3
|
import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
|
|
4
4
|
import { SortableContext, arrayMove, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
5
5
|
import { isEqual } from "lodash-es";
|
|
@@ -15,25 +15,14 @@ import { TABLE_EXPAND_COLUMN_ID, TABLE_SELECT_COLUMN_ID } from "../lib/index.js"
|
|
|
15
15
|
import { useTableContext } from "../TableContext/index.js";
|
|
16
16
|
import { TableSettingsMenuItem } from "./TableSettingsMenuItem.js";
|
|
17
17
|
const DEFAULT_HEADER_HEIGHT = 34;
|
|
18
|
+
const HEADER_HEIGHT_WITH_DESCRIPTION = 50;
|
|
18
19
|
const TableSettingsMenu = ()=>{
|
|
19
20
|
const testId = useTestId('settings-menu');
|
|
20
21
|
const ctx = useTableContext();
|
|
21
|
-
const { table, visibilityEnabled, columnDndEnabled, defaultColumnVisibility, defaultColumnOrder, alwaysPinnedLeft, masterColumnId
|
|
22
|
+
const { table, visibilityEnabled, columnDndEnabled, defaultColumnVisibility, defaultColumnOrder, alwaysPinnedLeft, masterColumnId } = ctx;
|
|
23
|
+
const hasTextDescription = table.getAllLeafColumns().some((col)=>col.columnDef.meta?.description?.type === 'text');
|
|
22
24
|
const [search, setSearch] = useState('');
|
|
23
25
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
24
|
-
const [theadHeight, setTheadHeight] = useState(void 0);
|
|
25
|
-
useEffect(()=>{
|
|
26
|
-
const el = theadRef.current;
|
|
27
|
-
if (!el) return;
|
|
28
|
-
const ro = new ResizeObserver((entries)=>{
|
|
29
|
-
const entry = entries[0];
|
|
30
|
-
if (entry) setTheadHeight(entry.contentRect.height);
|
|
31
|
-
});
|
|
32
|
-
ro.observe(el);
|
|
33
|
-
return ()=>ro.disconnect();
|
|
34
|
-
}, [
|
|
35
|
-
theadRef
|
|
36
|
-
]);
|
|
37
26
|
const allColumns = table.getAllLeafColumns().filter((col)=>col.id !== TABLE_SELECT_COLUMN_ID && col.id !== TABLE_EXPAND_COLUMN_ID);
|
|
38
27
|
const filteredColumns = useMemo(()=>{
|
|
39
28
|
if (!search) return allColumns;
|
|
@@ -88,7 +77,7 @@ const TableSettingsMenu = ()=>{
|
|
|
88
77
|
"data-testid": testId,
|
|
89
78
|
className: cn('absolute top-0 right-0 z-30', 'flex items-start', 'bg-bg-light-primary border rounded-tr-12 border-border-primary-light', 'pl-6 pr-4 py-4', 'rounded-tr-12'),
|
|
90
79
|
style: {
|
|
91
|
-
height:
|
|
80
|
+
height: hasTextDescription ? HEADER_HEIGHT_WITH_DESCRIPTION : DEFAULT_HEADER_HEIGHT
|
|
92
81
|
},
|
|
93
82
|
children: /*#__PURE__*/ jsxs(Tooltip, {
|
|
94
83
|
disabled: menuOpen,
|
|
@@ -236,9 +236,10 @@ const securityColumns = [
|
|
|
236
236
|
/*#__PURE__*/ jsx(OverflowTooltipTrigger, {
|
|
237
237
|
asChild: true,
|
|
238
238
|
children: /*#__PURE__*/ jsx(Link, {
|
|
239
|
-
size: "
|
|
239
|
+
size: "sm",
|
|
240
240
|
type: "table",
|
|
241
|
-
weight: "
|
|
241
|
+
weight: "regular",
|
|
242
|
+
href: "#",
|
|
242
243
|
children: row.original.objectName
|
|
243
244
|
})
|
|
244
245
|
}),
|
|
@@ -283,7 +284,8 @@ const securityColumns = [
|
|
|
283
284
|
size: 220,
|
|
284
285
|
enableSorting: true,
|
|
285
286
|
meta: {
|
|
286
|
-
sortType: 'text'
|
|
287
|
+
sortType: 'text',
|
|
288
|
+
resizeType: 'cut'
|
|
287
289
|
},
|
|
288
290
|
cell: ({ getValue })=>/*#__PURE__*/ jsx(InlineCodeSnippet, {
|
|
289
291
|
code: getValue(),
|
|
@@ -296,7 +298,8 @@ const securityColumns = [
|
|
|
296
298
|
size: 130,
|
|
297
299
|
enableSorting: true,
|
|
298
300
|
meta: {
|
|
299
|
-
sortType: 'text'
|
|
301
|
+
sortType: 'text',
|
|
302
|
+
resizeType: 'cut'
|
|
300
303
|
},
|
|
301
304
|
cell: ({ getValue })=>{
|
|
302
305
|
const status = getValue();
|
|
@@ -314,7 +317,8 @@ const securityColumns = [
|
|
|
314
317
|
size: 160,
|
|
315
318
|
enableSorting: true,
|
|
316
319
|
meta: {
|
|
317
|
-
sortType: 'date'
|
|
320
|
+
sortType: 'date',
|
|
321
|
+
resizeType: 'cut'
|
|
318
322
|
},
|
|
319
323
|
cell: ({ getValue })=>/*#__PURE__*/ jsx(FormatDateTime, {
|
|
320
324
|
value: getValue(),
|
|
@@ -341,7 +345,8 @@ const securityColumns = [
|
|
|
341
345
|
size: 120,
|
|
342
346
|
enableSorting: true,
|
|
343
347
|
meta: {
|
|
344
|
-
sortType: 'date'
|
|
348
|
+
sortType: 'date',
|
|
349
|
+
resizeType: 'cut'
|
|
345
350
|
},
|
|
346
351
|
cell: ({ getValue })=>/*#__PURE__*/ jsx(Text, {
|
|
347
352
|
size: "sm",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.16.
|
|
3
|
-
"generatedAt": "2026-03-
|
|
2
|
+
"version": "0.16.5",
|
|
3
|
+
"generatedAt": "2026-03-31T14:32:34.371Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"name": "Alert",
|
|
@@ -24111,11 +24111,11 @@
|
|
|
24111
24111
|
},
|
|
24112
24112
|
{
|
|
24113
24113
|
"name": "ColumnResizingWithPinning",
|
|
24114
|
-
"code": "() => {\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <Table\n className='max-w-
|
|
24114
|
+
"code": "() => {\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <Table\n className='max-w-920'\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n />\n );\n}"
|
|
24115
24115
|
},
|
|
24116
24116
|
{
|
|
24117
24117
|
"name": "ColumnPinning",
|
|
24118
|
-
"code": "() => {\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <Table\n className='max-w-
|
|
24118
|
+
"code": "() => {\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <Table\n className='max-w-920'\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n />\n );\n}"
|
|
24119
24119
|
},
|
|
24120
24120
|
{
|
|
24121
24121
|
"name": "ColumnDragAndDrop",
|
|
@@ -24167,7 +24167,7 @@
|
|
|
24167
24167
|
},
|
|
24168
24168
|
{
|
|
24169
24169
|
"name": "MasterCellWithActions",
|
|
24170
|
-
"code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n\n const columns = useMemo<TableColumnDef<SecurityEvent>[]>(\n () =>\n securityColumns.map((col, i) =>\n i === 0\n ? {\n ...col,\n meta: {\n ...col.meta,\n size: 400,\n resizeType: 'resize',\n renderActions: (row: { original: SecurityEvent }) => (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant='ghost'\n color='neutral'\n size='small'\n onClick={() => alert(`Preview: ${row.original.objectName}`)}\n aria-label='Preview'\n >\n <PanelRight />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' color='neutral' size='small' aria-label='More'>\n <Ellipsis />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuItem\n onSelect={() => navigator.clipboard.writeText(row.original.objectName)}\n >\n <DropdownMenuItemIcon>\n <Copy />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Copy name</DropdownMenuItemText>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={() => alert(`Filter: ${row.original.objectName}`)}\n >\n <DropdownMenuItemIcon>\n <Filter />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Show only</DropdownMenuItemText>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => alert(`Exclude: ${row.original.objectName}`)}\n >\n <DropdownMenuItemIcon>\n <FilterX />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Exclude</DropdownMenuItemText>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n ),\n },\n }\n : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-
|
|
24170
|
+
"code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n\n const columns = useMemo<TableColumnDef<SecurityEvent>[]>(\n () =>\n securityColumns.map((col, i) =>\n i === 0\n ? {\n ...col,\n meta: {\n ...col.meta,\n size: 400,\n resizeType: 'resize',\n renderActions: (row: { original: SecurityEvent }) => (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant='ghost'\n color='neutral'\n size='small'\n onClick={() => alert(`Preview: ${row.original.objectName}`)}\n aria-label='Preview'\n >\n <PanelRight />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' color='neutral' size='small' aria-label='More'>\n <Ellipsis />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuItem\n onSelect={() => navigator.clipboard.writeText(row.original.objectName)}\n >\n <DropdownMenuItemIcon>\n <Copy />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Copy name</DropdownMenuItemText>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={() => alert(`Filter: ${row.original.objectName}`)}\n >\n <DropdownMenuItemIcon>\n <Filter />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Show only</DropdownMenuItemText>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => alert(`Exclude: ${row.original.objectName}`)}\n >\n <DropdownMenuItemIcon>\n <FilterX />\n </DropdownMenuItemIcon>\n <DropdownMenuItemText>Exclude</DropdownMenuItemText>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n ),\n },\n }\n : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-920'\n data={securityEvents}\n columns={columns}\n getRowId={row => row.id}\n sorting={sorting}\n onSortingChange={setSorting}\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n />\n );\n}"
|
|
24171
24171
|
},
|
|
24172
24172
|
{
|
|
24173
24173
|
"name": "FullFeatured",
|
package/package.json
CHANGED