@wallarm-org/design-system 0.4.1-rc-fix-table-width.1 → 0.4.1-rc-fix-table-width.2

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.
@@ -5,6 +5,7 @@ declare const stackVariants: (props?: ({
5
5
  align?: "end" | "baseline" | "start" | "center" | "stretch" | null | undefined;
6
6
  justify?: "end" | "start" | "center" | "between" | "around" | "evenly" | null | undefined;
7
7
  wrap?: "reverse" | "wrap" | "nowrap" | null | undefined;
8
+ flexGrow?: boolean | null | undefined;
8
9
  spacing?: 0 | 1 | 2 | 4 | 6 | 8 | 12 | 16 | 20 | 32 | 24 | 28 | 36 | 40 | 44 | 48 | 56 | 64 | 80 | 96 | 112 | 128 | 144 | null | undefined;
9
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
11
  type StackNativeProps = Omit<HTMLAttributes<HTMLDivElement>, 'className'>;
@@ -4,7 +4,7 @@ import { Slot } from "@radix-ui/react-slot";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { getValidChildren } from "./utils.js";
7
- const stackVariants = cva('flex flex-1 w-full', {
7
+ const stackVariants = cva('flex w-full', {
8
8
  variants: {
9
9
  direction: {
10
10
  row: 'flex-row',
@@ -32,6 +32,9 @@ const stackVariants = cva('flex flex-1 w-full', {
32
32
  nowrap: 'flex-nowrap',
33
33
  reverse: 'flex-wrap-reverse'
34
34
  },
35
+ flexGrow: {
36
+ true: 'flex-1'
37
+ },
35
38
  spacing: {
36
39
  0: '',
37
40
  1: 'gap-1',
@@ -59,7 +62,7 @@ const stackVariants = cva('flex flex-1 w-full', {
59
62
  }
60
63
  }
61
64
  });
62
- const Stack = ({ direction = 'column', align = 'stretch', justify = 'start', wrap = 'nowrap', spacing = 4, asChild = false, children, ...props })=>{
65
+ const Stack = ({ direction = 'column', align = 'stretch', justify = 'start', wrap = 'nowrap', spacing = 4, flexGrow = true, asChild = false, children, ...props })=>{
63
66
  const clones = useMemo(()=>getValidChildren(children).map((child, index)=>{
64
67
  const key = void 0 !== child.key ? child.key : index;
65
68
  return /*#__PURE__*/ jsx(Fragment, {
@@ -76,7 +79,8 @@ const Stack = ({ direction = 'column', align = 'stretch', justify = 'start', wra
76
79
  align,
77
80
  justify,
78
81
  wrap,
79
- spacing
82
+ spacing,
83
+ flexGrow
80
84
  })),
81
85
  children: clones
82
86
  });
@@ -2,7 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { TableProvider } from "./TableContext/index.js";
3
3
  import { TableInner } from "./TableInner.js";
4
4
  const Table = (props)=>{
5
- const { data, isLoading = false, children, 'aria-label': ariaLabel, ...providerProps } = props;
5
+ const { data, isLoading = false, children, className, 'aria-label': ariaLabel, ...providerProps } = props;
6
6
  const isEmpty = 0 === data.length && !isLoading;
7
7
  const showSettings = !!props.onColumnVisibilityChange || !!props.onColumnOrderChange;
8
8
  return /*#__PURE__*/ jsx(TableProvider, {
@@ -14,6 +14,7 @@ const Table = (props)=>{
14
14
  virtualized: !!props.virtualized,
15
15
  showSettings: showSettings,
16
16
  ariaLabel: ariaLabel,
17
+ className: className,
17
18
  children: children
18
19
  })
19
20
  });
@@ -1,5 +1,6 @@
1
1
  import type { FC, ReactNode } from 'react';
2
2
  interface TableActionBarAnchorProps {
3
+ className?: string;
3
4
  children: ReactNode;
4
5
  }
5
6
  export declare const TableActionBarAnchor: FC<TableActionBarAnchorProps>;
@@ -10,12 +10,12 @@ const tableActionBarAnchorVariants = cva(cn('w-full relative outline-none'), {
10
10
  }
11
11
  }
12
12
  });
13
- const TableActionBarAnchor = ({ children })=>{
13
+ const TableActionBarAnchor = ({ className, children })=>{
14
14
  const { virtualized } = useTableContext();
15
15
  return /*#__PURE__*/ jsx(Popover.Anchor, {
16
16
  className: cn(tableActionBarAnchorVariants({
17
17
  virtualized
18
- })),
18
+ }), className),
19
19
  children: children
20
20
  });
21
21
  };
@@ -4,6 +4,7 @@ interface TableInnerProps {
4
4
  virtualized: boolean;
5
5
  showSettings: boolean;
6
6
  ariaLabel?: string;
7
+ className?: string;
7
8
  children?: ReactNode;
8
9
  }
9
10
  export declare const TableInner: FC<TableInnerProps>;
@@ -9,7 +9,7 @@ import { TableColGroup } from "./TableColGroup.js";
9
9
  import { useTableContext } from "./TableContext/index.js";
10
10
  import { TableHead } from "./TableHead.js";
11
11
  import { TableSettingsMenu } from "./TableSettingsMenu/index.js";
12
- const TableInner = ({ isEmpty, virtualized, showSettings, ariaLabel, children })=>{
12
+ const TableInner = ({ isEmpty, virtualized, showSettings, ariaLabel, className, children })=>{
13
13
  const { containerRef, table } = useTableContext();
14
14
  const scrollRootRef = useRef(null);
15
15
  const [containerWidth, setContainerWidth] = useState(0);
@@ -44,6 +44,7 @@ const TableInner = ({ isEmpty, virtualized, showSettings, ariaLabel, children })
44
44
  const tableWidth = Math.max(containerWidth, totalSize);
45
45
  return /*#__PURE__*/ jsx(TableActionBarProvider, {
46
46
  children: /*#__PURE__*/ jsxs(TableActionBarAnchor, {
47
+ className: className,
47
48
  children: [
48
49
  /*#__PURE__*/ jsxs(ScrollArea, {
49
50
  ref: scrollRootRef,
@@ -33,7 +33,7 @@ const tableHeadCellVariants = cva(cn(tableCellBase, 'pl-16 pr-4 py-8 text-left t
33
33
  draggable: false
34
34
  }
35
35
  });
36
- const tableBodyCellVariants = cva(cn(tableCellBase, 'px-16 py-8 text-sm text-text-primary', 'bg-bg-surface-2', 'align-top', 'group-hover/row:overlay-states-primary-hover group-data-[selected]/row:overlay-states-primary-active', 'has-[>_[data-state=open]]:ring-2 has-[>_[data-state=open]]:ring-inset has-[>_[data-state=open]]:ring-border-strong-brand', 'has-[>_[data-part=context-trigger]]:p-0', '[&>[data-part=context-trigger]]:px-16 [&>[data-part=context-trigger]]:py-8 [&>[data-part=context-trigger]]:text-left', '[&>[data-part=context-trigger]]:w-full [&>[data-part=context-trigger]]:outline-none'), {
36
+ const tableBodyCellVariants = cva(cn(tableCellBase, 'px-16 py-8 text-sm text-text-primary', 'bg-bg-surface-2', 'align-top', 'group-hover/row:overlay-states-primary-hover group-data-[selected]/row:overlay-states-primary-active', 'has-[>_[data-state=open][data-part=context-trigger]]:ring-2', 'has-[>_[data-state=open][data-part=context-trigger]]:ring-inset', 'has-[>_[data-state=open][data-part=context-trigger]]:ring-border-strong-brand', 'has-[>_[data-part=context-trigger]]:p-0', '[&>[data-part=context-trigger]]:w-full', '[&>[data-part=context-trigger]]:px-16 [&>[data-part=context-trigger]]:py-8', '[&>[data-part=context-trigger]]:text-left [&>[data-part=context-trigger]]:outline-none'), {
37
37
  variants: {
38
38
  pinned: {
39
39
  true: 'sticky z-10',
@@ -1,5 +1,5 @@
1
1
  export declare const TABLE_SKELETON_ROWS = 6;
2
- export declare const TABLE_SKELETON_ROWS_APPEND = 3;
2
+ export declare const TABLE_SKELETON_ROWS_APPEND = 6;
3
3
  export declare const TABLE_VIRTUALIZATION_OVERSCAN = 5;
4
4
  export declare const TABLE_MIN_COLUMN_WIDTH = 96;
5
5
  export declare const TABLE_SELECT_COLUMN_ID = "_selection";
@@ -1,5 +1,5 @@
1
1
  const TABLE_SKELETON_ROWS = 6;
2
- const TABLE_SKELETON_ROWS_APPEND = 3;
2
+ const TABLE_SKELETON_ROWS_APPEND = 6;
3
3
  const TABLE_VIRTUALIZATION_OVERSCAN = 5;
4
4
  const TABLE_MIN_COLUMN_WIDTH = 96;
5
5
  const TABLE_SELECT_COLUMN_ID = '_selection';
@@ -101,6 +101,8 @@ export interface TableProps<T> {
101
101
  getRowId?: (row: T, index: number) => string;
102
102
  /** Accessible label for the table */
103
103
  'aria-label'?: string;
104
+ /** Additional CSS class for the root container */
105
+ className?: string;
104
106
  sorting?: TableSortingState;
105
107
  onSortingChange?: TableOnChangeFn<TableSortingState>;
106
108
  rowSelection?: TableRowSelectionState;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.4.0",
3
- "generatedAt": "2026-02-24T13:58:40.318Z",
3
+ "generatedAt": "2026-02-24T14:22:47.865Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Alert",
@@ -16341,6 +16341,12 @@
16341
16341
  "required": false,
16342
16342
  "defaultValue": "nowrap"
16343
16343
  },
16344
+ {
16345
+ "name": "flexGrow",
16346
+ "type": "{ true: string; }",
16347
+ "required": false,
16348
+ "defaultValue": "true"
16349
+ },
16344
16350
  {
16345
16351
  "name": "spacing",
16346
16352
  "type": "complex",
@@ -16393,6 +16399,12 @@
16393
16399
  "reverse"
16394
16400
  ]
16395
16401
  },
16402
+ {
16403
+ "name": "flexGrow",
16404
+ "options": [
16405
+ "true"
16406
+ ]
16407
+ },
16396
16408
  {
16397
16409
  "name": "spacing",
16398
16410
  "options": [
@@ -16713,6 +16725,11 @@
16713
16725
  "type": "{ wrap: string; nowrap: string; reverse: string; }",
16714
16726
  "required": false
16715
16727
  },
16728
+ {
16729
+ "name": "flexGrow",
16730
+ "type": "{ true: string; }",
16731
+ "required": false
16732
+ },
16716
16733
  {
16717
16734
  "name": "spacing",
16718
16735
  "type": "complex",
@@ -17014,6 +17031,11 @@
17014
17031
  "type": "{ wrap: string; nowrap: string; reverse: string; }",
17015
17032
  "required": false
17016
17033
  },
17034
+ {
17035
+ "name": "flexGrow",
17036
+ "type": "{ true: string; }",
17037
+ "required": false
17038
+ },
17017
17039
  {
17018
17040
  "name": "spacing",
17019
17041
  "type": "complex",
@@ -18170,6 +18192,10 @@
18170
18192
  "name": "LoadingState",
18171
18193
  "code": "() => (\n <Table data={[]} columns={securityColumns} isLoading />\n)"
18172
18194
  },
18195
+ {
18196
+ "name": "LoadingWithData",
18197
+ "code": "() => (\n <Table\n className='h-500'\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n isLoading\n />\n)"
18198
+ },
18173
18199
  {
18174
18200
  "name": "EmptyState",
18175
18201
  "code": "() => (\n <Table data={[]} columns={securityColumns} getRowId={row => row.id}>\n <TableEmptyState>\n <VStack align='center' justify='center' spacing={8}>\n <Text size='sm' weight='medium' color='primary'>\n No results found\n </Text>\n <Text size='sm' color='secondary'>\n Try to apply different filter or reset it.\n </Text>\n </VStack>\n </TableEmptyState>\n </Table>\n)"
@@ -18180,7 +18206,7 @@
18180
18206
  },
18181
18207
  {
18182
18208
  "name": "ColumnPinning",
18183
- "code": "() => {\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <div className='max-w-800'>\n <Table\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n />\n </div>\n );\n}"
18209
+ "code": "() => {\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n\n return (\n <Table\n className='max-w-800'\n data={securityEvents}\n columns={securityColumns}\n getRowId={row => row.id}\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n />\n );\n}"
18184
18210
  },
18185
18211
  {
18186
18212
  "name": "ColumnDragAndDrop",
@@ -18212,11 +18238,11 @@
18212
18238
  },
18213
18239
  {
18214
18240
  "name": "Virtualization",
18215
- "code": "() => {\n const largeData = useMemo(() => createLargeSecurityEvents(1000), []);\n\n return (\n <div className='h-500'>\n <Table data={largeData} columns={securityColumns} getRowId={row => row.id} virtualized />\n </div>\n );\n}"
18241
+ "code": "() => {\n const largeData = useMemo(() => createLargeSecurityEvents(1000), []);\n\n return (\n <Table\n className='h-500'\n data={largeData}\n columns={securityColumns}\n getRowId={row => row.id}\n virtualized\n />\n );\n}"
18216
18242
  },
18217
18243
  {
18218
18244
  "name": "FullFeatured",
18219
- "code": "() => {\n const data = useMemo(() => createLargeGroupedData(12, 50), []);\n\n const [sorting, setSorting] = useState<TableSortingState>([{ id: 'lastEdited', desc: true }]);\n const [rowSelection, setRowSelection] = useState<TableRowSelectionState>({});\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n const [columnOrder, setColumnOrder] = useState<string[]>([]);\n const [columnVisibility, setColumnVisibility] = useState<TableVisibilityState>({});\n const [expanded, setExpanded] = useState<TableExpandedState>({\n 'group-0': true,\n 'group-1': true,\n });\n\n return (\n <div className='h-500'>\n <Table<SecurityHeaderEntry>\n data={data}\n columns={fullFeaturedColumns}\n getRowId={row => row.id}\n getSubRows={row => row.children}\n // Grouping\n expanded={expanded}\n onExpandedChange={setExpanded}\n // Sorting\n sorting={sorting}\n onSortingChange={setSorting}\n // Row selection\n rowSelection={rowSelection}\n onRowSelectionChange={setRowSelection}\n // Column resizing\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n // Column pinning\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n // Column DnD ordering\n columnOrder={columnOrder}\n onColumnOrderChange={setColumnOrder}\n // Column visibility + settings\n columnVisibility={columnVisibility}\n onColumnVisibilityChange={setColumnVisibility}\n defaultColumnVisibility={{}}\n defaultColumnOrder={headerColumnIds}\n // Virtual scrolling\n virtualized\n >\n <TableActionBar>\n <Button variant='ghost' color='neutral-alt' onClick={() => alert('Copy clicked')}>\n <Copy /> Duplicate\n </Button>\n <Button color='brand' onClick={() => alert('Delete clicked')}>\n <Trash2 /> Delete\n </Button>\n </TableActionBar>\n </Table>\n </div>\n );\n}"
18245
+ "code": "() => {\n const data = useMemo(() => createLargeGroupedData(12, 50), []);\n\n const [sorting, setSorting] = useState<TableSortingState>([{ id: 'lastEdited', desc: true }]);\n const [rowSelection, setRowSelection] = useState<TableRowSelectionState>({});\n const [columnSizing, setColumnSizing] = useState<TableColumnSizingState>({});\n const [columnPinning, setColumnPinning] = useState<TableColumnPinningState>({\n left: ['objectName'],\n });\n const [columnOrder, setColumnOrder] = useState<string[]>([]);\n const [columnVisibility, setColumnVisibility] = useState<TableVisibilityState>({});\n const [expanded, setExpanded] = useState<TableExpandedState>({\n 'group-0': true,\n 'group-1': true,\n });\n\n return (\n <Table<SecurityHeaderEntry>\n className='h-500'\n data={data}\n columns={fullFeaturedColumns}\n getRowId={row => row.id}\n getSubRows={row => row.children}\n // Grouping\n expanded={expanded}\n onExpandedChange={setExpanded}\n // Sorting\n sorting={sorting}\n onSortingChange={setSorting}\n // Row selection\n rowSelection={rowSelection}\n onRowSelectionChange={setRowSelection}\n // Column resizing\n columnSizing={columnSizing}\n onColumnSizingChange={setColumnSizing}\n // Column pinning\n columnPinning={columnPinning}\n onColumnPinningChange={setColumnPinning}\n // Column DnD ordering\n columnOrder={columnOrder}\n onColumnOrderChange={setColumnOrder}\n // Column visibility + settings\n columnVisibility={columnVisibility}\n onColumnVisibilityChange={setColumnVisibility}\n defaultColumnVisibility={{}}\n defaultColumnOrder={headerColumnIds}\n // Virtual scrolling\n virtualized\n >\n <TableActionBar>\n <Button variant='ghost' color='neutral-alt' onClick={() => alert('Copy clicked')}>\n <Copy /> Duplicate\n </Button>\n <Button color='brand' onClick={() => alert('Delete clicked')}>\n <Trash2 /> Delete\n </Button>\n </TableActionBar>\n </Table>\n );\n}"
18220
18246
  }
18221
18247
  ]
18222
18248
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "0.4.1-rc-fix-table-width.1",
3
+ "version": "0.4.1-rc-fix-table-width.2",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",