@wallarm-org/design-system 0.19.0 → 0.19.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.
@@ -8,7 +8,7 @@ const DrawerHeader = ({ children, ref })=>{
8
8
  ref: ref,
9
9
  "data-testid": testId,
10
10
  "data-slot": "drawer-header",
11
- className: cn('relative shrink-0 w-full', 'bg-bg-surface-2', 'flex items-center justify-between gap-12', 'pt-16 pb-12 pl-24 pr-16', 'rounded-t-12', 'outline-none'),
11
+ className: cn('relative shrink-0 w-full', 'bg-bg-surface-2', 'flex items-start justify-between gap-12', 'pt-16 pb-12 pl-24 pr-16', 'rounded-t-12', 'outline-none'),
12
12
  children: [
13
13
  children,
14
14
  /*#__PURE__*/ jsx(DrawerClose, {})
@@ -2,6 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { flexRender } from "@tanstack/react-table";
3
3
  import { cn } from "../../../utils/cn.js";
4
4
  import { useTestId } from "../../../utils/testId.js";
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from "../../Tooltip/index.js";
5
6
  import { usePreviewCell } from "../hooks/index.js";
6
7
  import { TABLE_EXPAND_COLUMN_ID, getAlignClass, getExpandBorderClass, getPinningStyles, isLastPinnedLeft, useColumnDnd } from "../lib/index.js";
7
8
  import { Td } from "../primitives/index.js";
@@ -19,18 +20,32 @@ const TableBodyCell = ({ cell, colSpan, className, disablePinnedShadow })=>{
19
20
  const { canDnd, setNodeRef, dndStyle } = useColumnDnd(column);
20
21
  const pinningStyles = getPinningStyles(column);
21
22
  const lastLeft = isLastPinnedLeft(column, allLeafColumns, column.id);
22
- const { isMasterTrigger, isButtonTrigger, isActive, togglePreview } = usePreviewCell(column.id, cell.row.id);
23
+ const { isMasterTrigger, isButtonTrigger, isActive, togglePreview, tooltipText } = usePreviewCell(column.id, cell.row.id);
23
24
  const isCut = column.id === masterColumnId || meta?.resizeType === 'cut';
24
25
  const content = flexRender(cell.column.columnDef.cell, cell.getContext());
25
26
  const hasActions = isButtonTrigger || !!meta?.renderPreviewAction || !!meta?.renderMenuAction;
26
27
  const renderContent = ()=>{
28
+ const wrappedContent = tooltipText ? /*#__PURE__*/ jsxs(Tooltip, {
29
+ children: [
30
+ /*#__PURE__*/ jsx(TooltipTrigger, {
31
+ asChild: true,
32
+ children: /*#__PURE__*/ jsx("span", {
33
+ className: "min-w-0 [&>*]:block [&>*]:truncate",
34
+ children: content
35
+ })
36
+ }),
37
+ /*#__PURE__*/ jsx(TooltipContent, {
38
+ children: tooltipText
39
+ })
40
+ ]
41
+ }) : /*#__PURE__*/ jsx("span", {
42
+ className: "min-w-0 [&>*]:block [&>*]:truncate",
43
+ children: content
44
+ });
27
45
  if (isCut && hasActions) return /*#__PURE__*/ jsxs("div", {
28
46
  className: "flex items-center justify-between gap-2",
29
47
  children: [
30
- /*#__PURE__*/ jsx("span", {
31
- className: "min-w-0 [&>*]:block [&>*]:truncate",
32
- children: content
33
- }),
48
+ wrappedContent,
34
49
  /*#__PURE__*/ jsxs(TableMasterCellActions, {
35
50
  children: [
36
51
  isButtonTrigger && /*#__PURE__*/ jsx(TablePreviewToggle, {
@@ -48,13 +63,13 @@ const TableBodyCell = ({ cell, colSpan, className, disablePinnedShadow })=>{
48
63
  style: {
49
64
  minWidth: column.columnDef.size
50
65
  },
51
- children: content
66
+ children: tooltipText ? wrappedContent : content
52
67
  });
53
- return content;
68
+ return tooltipText ? wrappedContent : content;
54
69
  };
55
70
  return /*#__PURE__*/ jsx(Td, {
56
71
  "data-testid": testId,
57
- className: cn(getAlignClass(meta), getExpandBorderClass(isExpandColumn, cell.row.depth), isCut && 'pr-0', isMasterTrigger && 'cursor-pointer', meta?.cellClassName, className),
72
+ className: cn(getAlignClass(meta), getExpandBorderClass(isExpandColumn, cell.row.depth), isCut && 'pr-0', (isMasterTrigger || tooltipText) && 'cursor-pointer', meta?.cellClassName, className),
58
73
  pinned: 'left' === isPinned,
59
74
  lastPinnedLeft: disablePinnedShadow ? false : lastLeft,
60
75
  expanded: isExpandedToggle,
@@ -8,7 +8,13 @@ import { useTableState } from "../hooks/index.js";
8
8
  import { TABLE_EXPAND_COLUMN_ID, TABLE_MIN_COLUMN_WIDTH, TABLE_SELECT_COLUMN_ID, TABLE_SKELETON_ROWS, TABLE_VIRTUALIZATION_OVERSCAN, createExpandColumn, createSelectionColumn } from "../lib/index.js";
9
9
  import { TableContext } from "./TableContext.js";
10
10
  const TableProvider = (props)=>{
11
- const { data, columns, isLoading = false, skeletonCount = TABLE_SKELETON_ROWS, children, getRowId, sorting: sortingProp, onSortingChange, rowSelection: rowSelectionProp, onRowSelectionChange, columnSizing: columnSizingProp, onColumnSizingChange, columnPinning: columnPinningProp, onColumnPinningChange, columnOrder: columnOrderProp, onColumnOrderChange, grouping: groupingProp, onGroupingChange, expanded: expandedProp, onExpandedChange, renderGroupRow, getSubRows, renderExpandedRow, columnVisibility: columnVisibilityProp, onColumnVisibilityChange, defaultColumnVisibility, defaultColumnOrder, virtualized, estimateRowHeight, overscan = TABLE_VIRTUALIZATION_OVERSCAN, onEndReached, onEndReachedThreshold, renderPreviewContent, previewTrigger = 'master', previewRowId: previewRowIdProp, onPreviewRowChange } = props;
11
+ const { data, columns, isLoading = false, skeletonCount = TABLE_SKELETON_ROWS, children, getRowId, sorting: sortingProp, onSortingChange, rowSelection: rowSelectionProp, onRowSelectionChange, columnSizing: columnSizingProp, onColumnSizingChange, columnPinning: columnPinningProp, onColumnPinningChange, columnOrder: columnOrderProp, onColumnOrderChange, grouping: groupingProp, onGroupingChange, expanded: expandedProp, onExpandedChange, renderGroupRow, getSubRows, renderExpandedRow, columnVisibility: columnVisibilityProp, onColumnVisibilityChange, defaultColumnVisibility, defaultColumnOrder, virtualized, estimateRowHeight, overscan = TABLE_VIRTUALIZATION_OVERSCAN, onEndReached, onEndReachedThreshold, preview } = props;
12
+ const renderPreviewHeader = preview?.renderHeader;
13
+ const renderPreviewContent = preview?.renderContent;
14
+ const previewTrigger = preview?.trigger ?? 'master';
15
+ const previewTooltipText = preview?.tooltipText ?? 'Open preview';
16
+ const previewRowIdProp = preview?.rowId;
17
+ const onPreviewRowChange = preview?.onRowChange;
12
18
  const sortingEnabled = !!onSortingChange;
13
19
  const selectionEnabled = !!onRowSelectionChange;
14
20
  const resizingEnabled = !!onColumnSizingChange;
@@ -220,10 +226,14 @@ const TableProvider = (props)=>{
220
226
  containerRef,
221
227
  onEndReached,
222
228
  onEndReachedThreshold,
223
- previewRowId,
224
- setPreviewRowId,
225
- renderPreviewContent: renderPreviewContent,
226
- previewTrigger
229
+ preview: {
230
+ rowId: previewRowId,
231
+ setRowId: setPreviewRowId,
232
+ renderHeader: renderPreviewHeader,
233
+ renderContent: renderPreviewContent,
234
+ trigger: previewTrigger,
235
+ tooltipText: previewTooltipText
236
+ }
227
237
  }), [
228
238
  table,
229
239
  isLoading,
@@ -249,8 +259,11 @@ const TableProvider = (props)=>{
249
259
  onEndReached,
250
260
  onEndReachedThreshold,
251
261
  previewRowId,
262
+ setPreviewRowId,
263
+ renderPreviewHeader,
252
264
  renderPreviewContent,
253
- previewTrigger
265
+ previewTrigger,
266
+ previewTooltipText
254
267
  ]);
255
268
  useEffect(()=>{
256
269
  if (!selectionEnabled) return;
@@ -28,10 +28,14 @@ export interface TableContextValue<T> {
28
28
  containerRef: RefObject<HTMLDivElement | null>;
29
29
  onEndReached?: () => void;
30
30
  onEndReachedThreshold?: number;
31
- previewRowId: string | null;
32
- setPreviewRowId: (id: string | null) => void;
33
- renderPreviewContent?: (row: Row<T>) => ReactNode;
34
- previewTrigger: 'master' | 'button';
31
+ preview: {
32
+ rowId: string | null;
33
+ setRowId: (id: string | null) => void;
34
+ renderHeader?: (row: Row<T>) => ReactNode;
35
+ renderContent?: (row: Row<T>) => ReactNode;
36
+ trigger: 'master' | 'button';
37
+ tooltipText: string;
38
+ };
35
39
  }
36
40
  export interface TableProviderProps<T> extends Omit<TableProps<T>, 'children' | 'aria-label'> {
37
41
  children: ReactNode;
@@ -3,17 +3,21 @@ import { useRef } from "react";
3
3
  import { Drawer, DrawerBody, DrawerContent, DrawerHeader } from "../Drawer/index.js";
4
4
  import { useTableContext } from "./TableContext/index.js";
5
5
  const TablePreviewDrawer = ()=>{
6
- const { table, previewRowId, setPreviewRowId, renderPreviewContent } = useTableContext();
7
- const row = previewRowId ? table.getRowModel().rowsById[previewRowId] : void 0;
8
- const preview = row && renderPreviewContent ? renderPreviewContent(row) : void 0;
9
- const lastPreviewRef = useRef(null);
10
- if (preview) lastPreviewRef.current = preview;
11
- const displayPreview = preview ?? lastPreviewRef.current;
12
- if (!renderPreviewContent) return null;
6
+ const { table, preview: previewCtx } = useTableContext();
7
+ const row = previewCtx.rowId ? table.getRowModel().rowsById[previewCtx.rowId] : void 0;
8
+ const header = row && previewCtx.renderHeader ? previewCtx.renderHeader(row) : void 0;
9
+ const content = row && previewCtx.renderContent ? previewCtx.renderContent(row) : void 0;
10
+ const lastHeaderRef = useRef(null);
11
+ const lastContentRef = useRef(null);
12
+ if (header) lastHeaderRef.current = header;
13
+ if (content) lastContentRef.current = content;
14
+ const displayHeader = header ?? lastHeaderRef.current;
15
+ const displayContent = content ?? lastContentRef.current;
16
+ if (!previewCtx.renderContent) return null;
13
17
  return /*#__PURE__*/ jsx(Drawer, {
14
18
  open: !!row,
15
19
  onOpenChange: (open)=>{
16
- if (!open) setPreviewRowId(null);
20
+ if (!open) previewCtx.setRowId(null);
17
21
  },
18
22
  modal: false,
19
23
  overlay: false,
@@ -21,11 +25,11 @@ const TablePreviewDrawer = ()=>{
21
25
  width: 960,
22
26
  children: /*#__PURE__*/ jsxs(DrawerContent, {
23
27
  children: [
24
- /*#__PURE__*/ jsx(DrawerHeader, {
28
+ displayHeader ?? /*#__PURE__*/ jsx(DrawerHeader, {
25
29
  children: /*#__PURE__*/ jsx("span", {})
26
30
  }),
27
31
  /*#__PURE__*/ jsx(DrawerBody, {
28
- children: displayPreview
32
+ children: displayContent
29
33
  })
30
34
  ]
31
35
  })
@@ -12,11 +12,11 @@ const SYSTEM_COLUMN_IDS = new Set([
12
12
  TABLE_SELECT_COLUMN_ID
13
13
  ]);
14
14
  const TableRowInner = ({ row, ref, 'data-index': dataIndex })=>{
15
- const { expandingEnabled, previewRowId } = useTableContext();
15
+ const { expandingEnabled, preview } = useTableContext();
16
16
  const testId = useTestId('row');
17
17
  const isGroupParent = row.subRows.length > 0;
18
18
  const isSelected = isGroupParent ? row.getIsAllSubRowsSelected() : row.getIsSelected();
19
- const isPreviewActive = previewRowId === row.id;
19
+ const isPreviewActive = preview.rowId === row.id;
20
20
  if (isGroupParent) {
21
21
  const cells = row.getVisibleCells();
22
22
  const systemCells = cells.filter((c)=>SYSTEM_COLUMN_IDS.has(c.column.id));
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Encapsulates preview drawer logic for a body cell.
3
- * Returns flags and a click handler based on `previewTrigger` mode.
3
+ * Returns flags and a click handler based on `preview.trigger` mode.
4
4
  */
5
5
  export declare const usePreviewCell: <T>(columnId: string, rowId: string) => {
6
6
  /** Preview opens by clicking the master cell */
@@ -11,4 +11,6 @@ export declare const usePreviewCell: <T>(columnId: string, rowId: string) => {
11
11
  isActive: boolean;
12
12
  /** Toggle preview for this row (open/close) */
13
13
  togglePreview: () => void;
14
+ /** Tooltip text for master cell hover */
15
+ tooltipText: string | undefined;
14
16
  };
@@ -1,16 +1,16 @@
1
1
  import { useCallback } from "react";
2
2
  import { useTableContext } from "../TableContext/index.js";
3
3
  const usePreviewCell = (columnId, rowId)=>{
4
- const { masterColumnId, previewRowId, setPreviewRowId, renderPreviewContent, previewTrigger } = useTableContext();
4
+ const { masterColumnId, preview } = useTableContext();
5
5
  const isMasterColumn = columnId === masterColumnId;
6
- const hasPreview = isMasterColumn && !!renderPreviewContent;
7
- const isMasterTrigger = hasPreview && 'master' === previewTrigger;
8
- const isButtonTrigger = hasPreview && 'button' === previewTrigger;
9
- const isActive = previewRowId === rowId;
6
+ const hasPreview = isMasterColumn && !!preview.renderContent;
7
+ const isMasterTrigger = hasPreview && 'master' === preview.trigger;
8
+ const isButtonTrigger = hasPreview && 'button' === preview.trigger;
9
+ const isActive = preview.rowId === rowId;
10
10
  const togglePreview = useCallback(()=>{
11
- setPreviewRowId(isActive ? null : rowId);
11
+ preview.setRowId(isActive ? null : rowId);
12
12
  }, [
13
- setPreviewRowId,
13
+ preview.setRowId,
14
14
  isActive,
15
15
  rowId
16
16
  ]);
@@ -18,7 +18,8 @@ const usePreviewCell = (columnId, rowId)=>{
18
18
  isMasterTrigger,
19
19
  isButtonTrigger,
20
20
  isActive,
21
- togglePreview
21
+ togglePreview,
22
+ tooltipText: hasPreview ? preview.tooltipText : void 0
22
23
  };
23
24
  };
24
25
  export { usePreviewCell };
@@ -5,4 +5,4 @@ export { TableActionBar } from './TableActionBar';
5
5
  export { TableEmptyState } from './TableEmptyState';
6
6
  export { TablePreviewToggle, type TablePreviewToggleProps } from './TablePreviewToggle';
7
7
  export { TableSettingsMenu } from './TableSettingsMenu';
8
- export type { TableAccessorColumnDef, TableCellContext, TableColumnBase, TableColumnDef, TableColumnMeta, TableColumnPinningState, TableColumnSizingState, TableDisplayColumnDef, TableExpandedState, TableGroupingState, TableOnChangeFn, TableProps, TableRow, TableRowSelectionState, TableSortingState, TableUpdater, TableVirtualized, TableVisibilityState, } from './types';
8
+ export type { TableAccessorColumnDef, TableCellContext, TableColumnBase, TableColumnDef, TableColumnMeta, TableColumnPinningState, TableColumnSizingState, TableDisplayColumnDef, TableExpandedState, TableGroupingState, TableOnChangeFn, TablePreview, TableProps, TableRow, TableRowSelectionState, TableSortingState, TableUpdater, TableVirtualized, TableVisibilityState, } from './types';
@@ -40,10 +40,18 @@ export declare const headerColumnHelper: import(".").TableColumnHelper<SecurityH
40
40
  export declare const headerColumns: TableColumnDef<SecurityHeaderEntry>[];
41
41
  export declare const headerColumnIds: string[];
42
42
  export declare const createLargeGroupedData: (groupCount?: number, childrenPerGroup?: number) => SecurityHeaderEntry[];
43
- /** Shared preview drawer content for security events */
43
+ /** Shared preview drawer header for security events */
44
+ export declare const renderSecurityPreviewHeader: (row: {
45
+ original: SecurityEvent;
46
+ }) => import("react/jsx-runtime").JSX.Element;
47
+ /** Preview content for use with header (objectName shown in header) */
44
48
  export declare const renderSecurityPreview: (row: {
45
49
  original: SecurityEvent;
46
50
  }) => import("react/jsx-runtime").JSX.Element;
51
+ /** Preview content for use without header (includes objectName) */
52
+ export declare const renderSecurityPreviewWithTitle: (row: {
53
+ original: SecurityEvent;
54
+ }) => import("react/jsx-runtime").JSX.Element;
47
55
  /** Duplicate securityEvents N times with unique IDs */
48
56
  export declare const multiplySecurityEvents: (times?: number) => SecurityEvent[];
49
57
  export declare const createLargeSecurityEvents: (count?: number) => SecurityEvent[];
@@ -4,6 +4,7 @@ import { Check, Copy, Filter, FilterX } from "../../icons/index.js";
4
4
  import { abbreviateNumber } from "../../utils/abbreviateNumber.js";
5
5
  import { Badge } from "../Badge/index.js";
6
6
  import { InlineCodeSnippet } from "../CodeSnippet/index.js";
7
+ import { DrawerHeader } from "../Drawer/index.js";
7
8
  import { DropdownMenu, DropdownMenuContent, DropdownMenuContextTrigger, DropdownMenuItem, DropdownMenuItemContent, DropdownMenuItemDescription, DropdownMenuItemIcon, DropdownMenuItemText, DropdownMenuSeparator } from "../DropdownMenu/index.js";
8
9
  import { FormatDateTime } from "../FormatDateTime/index.js";
9
10
  import { Ip, IpAddress, IpCountry, IpProvider, sourceLabels } from "../Ip/index.js";
@@ -630,10 +631,17 @@ const createLargeGroupedData = (groupCount = 12, childrenPerGroup = 50)=>Array.f
630
631
  }))
631
632
  };
632
633
  });
633
- const renderSecurityPreview = (row)=>/*#__PURE__*/ jsxs(VStack, {
634
+ const renderSecurityPreviewHeader = (row)=>/*#__PURE__*/ jsx(DrawerHeader, {
635
+ children: /*#__PURE__*/ jsx(Text, {
636
+ size: "lg",
637
+ weight: "medium",
638
+ children: row.original.objectName
639
+ })
640
+ });
641
+ const SecurityPreviewContent = ({ row, showTitle })=>/*#__PURE__*/ jsxs(VStack, {
634
642
  gap: 16,
635
643
  children: [
636
- /*#__PURE__*/ jsx(Text, {
644
+ showTitle && /*#__PURE__*/ jsx(Text, {
637
645
  size: "lg",
638
646
  weight: "medium",
639
647
  children: row.original.objectName
@@ -696,6 +704,14 @@ const renderSecurityPreview = (row)=>/*#__PURE__*/ jsxs(VStack, {
696
704
  })
697
705
  ]
698
706
  });
707
+ SecurityPreviewContent.displayName = 'SecurityPreviewContent';
708
+ const renderSecurityPreview = (row)=>/*#__PURE__*/ jsx(SecurityPreviewContent, {
709
+ row: row
710
+ });
711
+ const renderSecurityPreviewWithTitle = (row)=>/*#__PURE__*/ jsx(SecurityPreviewContent, {
712
+ row: row,
713
+ showTitle: true
714
+ });
699
715
  const multiplySecurityEvents = (times = 4)=>Array.from({
700
716
  length: times
701
717
  }, (_, batch)=>securityEvents.map((row)=>({
@@ -951,4 +967,4 @@ const useInfiniteData = ()=>{
951
967
  fetchNextPage
952
968
  };
953
969
  };
954
- export { METHOD_COLORS, createLargeGroupedData, createLargeSecurityEvents, fullFeaturedColumns, groupedHeaderData, headerColumnHelper, headerColumnIds, headerColumns, multiplySecurityEvents, renderSecurityPreview, securityColumnHelper, securityColumnIds, securityColumns, securityEvents, useInfiniteData };
970
+ export { METHOD_COLORS, createLargeGroupedData, createLargeSecurityEvents, fullFeaturedColumns, groupedHeaderData, headerColumnHelper, headerColumnIds, headerColumns, multiplySecurityEvents, renderSecurityPreview, renderSecurityPreviewHeader, renderSecurityPreviewWithTitle, securityColumnHelper, securityColumnIds, securityColumns, securityEvents, useInfiniteData };
@@ -164,14 +164,23 @@ export interface TableProps<T> extends TestableProps {
164
164
  onEndReached?: () => void;
165
165
  /** Distance from the bottom (in px) to trigger onEndReached (default: 200) */
166
166
  onEndReachedThreshold?: number;
167
- /** Render preview drawer content for a row. */
168
- renderPreviewContent?: (row: TableRow<T>) => ReactNode;
167
+ /** Preview drawer configuration */
168
+ preview?: TablePreview<T>;
169
+ }
170
+ /** Preview drawer configuration */
171
+ export interface TablePreview<T> {
172
+ /** Render drawer header for a row */
173
+ renderHeader?: (row: TableRow<T>) => ReactNode;
174
+ /** Render drawer content for a row */
175
+ renderContent: (row: TableRow<T>) => ReactNode;
169
176
  /** How the preview drawer is triggered:
170
177
  * - `'master'` — clicking the master cell toggles the drawer (default)
171
178
  * - `'button'` — a toggle button appears in master cell actions on hover */
172
- previewTrigger?: 'master' | 'button';
179
+ trigger?: 'master' | 'button';
180
+ /** Tooltip text on master cell hover (default: 'Open preview') */
181
+ tooltipText?: string;
173
182
  /** Controlled preview row ID. Pass `null` to close. */
174
- previewRowId?: string | null;
183
+ rowId?: string | null;
175
184
  /** Callback when preview row changes (open/close/swap). */
176
- onPreviewRowChange?: (rowId: string | null) => void;
185
+ onRowChange?: (rowId: string | null) => void;
177
186
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.18.0",
3
- "generatedAt": "2026-04-03T10:04:38.346Z",
2
+ "version": "0.19.0",
3
+ "generatedAt": "2026-04-03T12:16:12.332Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Alert",
@@ -24039,22 +24039,10 @@
24039
24039
  "required": false
24040
24040
  },
24041
24041
  {
24042
- "name": "renderPreviewContent",
24043
- "type": "((row: TableRow<T>) => ReactNode) | undefined",
24044
- "required": false,
24045
- "description": "Render preview drawer content for a row."
24046
- },
24047
- {
24048
- "name": "previewTrigger",
24049
- "type": "\"master\" | \"button\" | undefined",
24050
- "required": false,
24051
- "description": "How the preview drawer is triggered:\n - `'master'` — clicking the master cell toggles the drawer (default)\n - `'button'` — a toggle button appears in master cell actions on hover"
24052
- },
24053
- {
24054
- "name": "previewRowId",
24055
- "type": "string | null | undefined",
24042
+ "name": "preview",
24043
+ "type": "TablePreview<T> | undefined",
24056
24044
  "required": false,
24057
- "description": "Controlled preview row ID. Pass `null` to close."
24045
+ "description": "Preview drawer configuration"
24058
24046
  }
24059
24047
  ],
24060
24048
  "variants": [
@@ -24211,11 +24199,11 @@
24211
24199
  },
24212
24200
  {
24213
24201
  "name": "MasterCellWithActions",
24214
- "code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n\n const data = useMemo(() => multiplySecurityEvents(), []);\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 renderMenuAction: (row: { original: SecurityEvent }) => (\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 : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-920'\n data={data}\n columns={columns}\n getRowId={row => row.id}\n sorting={sorting}\n onSortingChange={setSorting}\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n previewTrigger='button'\n renderPreviewContent={renderSecurityPreview}\n />\n );\n}"
24202
+ "code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n\n const data = useMemo(() => multiplySecurityEvents(), []);\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 renderMenuAction: (row: { original: SecurityEvent }) => (\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 : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-920'\n data={data}\n columns={columns}\n getRowId={row => row.id}\n sorting={sorting}\n onSortingChange={setSorting}\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n preview={{\n trigger: 'button',\n renderHeader: renderSecurityPreviewHeader,\n renderContent: renderSecurityPreview,\n }}\n />\n );\n}"
24215
24203
  },
24216
24204
  {
24217
24205
  "name": "MasterCellWithPreviewDrawer",
24218
- "code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n\n const data = useMemo(\n () =>\n Array.from({ length: 4 }, (_, batch) =>\n securityEvents.map(row => ({\n ...row,\n id: `${row.id}-${batch}`,\n objectName: batch === 0 ? row.objectName : `${row.objectName} (${batch + 1})`,\n })),\n ).flat(),\n [],\n );\n\n const columns = useMemo<TableColumnDef<SecurityEvent>[]>(\n () =>\n securityColumns.map((col, i) =>\n i === 0\n ? {\n ...col,\n cell: ({ row }: { row: { original: SecurityEvent } }) => (\n <Text size='xs'>{row.original.objectName}</Text>\n ),\n }\n : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-920'\n data={data}\n columns={columns}\n getRowId={row => row.id}\n sorting={sorting}\n onSortingChange={setSorting}\n renderPreviewContent={renderSecurityPreview}\n />\n );\n}"
24206
+ "code": "() => {\n const [sorting, setSorting] = useState<TableSortingState>([]);\n\n const data = useMemo(\n () =>\n Array.from({ length: 4 }, (_, batch) =>\n securityEvents.map(row => ({\n ...row,\n id: `${row.id}-${batch}`,\n objectName: batch === 0 ? row.objectName : `${row.objectName} (${batch + 1})`,\n })),\n ).flat(),\n [],\n );\n\n const columns = useMemo<TableColumnDef<SecurityEvent>[]>(\n () =>\n securityColumns.map((col, i) =>\n i === 0\n ? {\n ...col,\n cell: ({ row }: { row: { original: SecurityEvent } }) => (\n <Text size='xs'>{row.original.objectName}</Text>\n ),\n }\n : col,\n ),\n [],\n );\n\n return (\n <Table\n className='max-w-920'\n data={data}\n columns={columns}\n getRowId={row => row.id}\n sorting={sorting}\n onSortingChange={setSorting}\n preview={{ renderContent: renderSecurityPreviewWithTitle }}\n />\n );\n}"
24219
24207
  },
24220
24208
  {
24221
24209
  "name": "FullFeatured",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",