@wallarm-org/design-system 0.14.2 → 0.14.3

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.
@@ -1,13 +1,13 @@
1
1
  import { cva } from "class-variance-authority";
2
- const chipVariants = cva('group/chip relative flex items-center justify-center pl-4 pr-0 py-0 min-h-[20px] border border-solid rounded-8', {
2
+ const chipVariants = cva('group/chip relative flex items-center justify-center pl-4 pr-0 py-0 border border-solid rounded-8', {
3
3
  variants: {
4
4
  error: {
5
5
  true: 'bg-bg-light-danger border-border-danger',
6
6
  false: 'bg-badge-badge-bg border-border-primary'
7
7
  },
8
8
  interactive: {
9
- true: 'cursor-pointer px-4',
10
- false: ''
9
+ true: 'cursor-pointer px-4 h-24',
10
+ false: 'h-[22px]'
11
11
  }
12
12
  },
13
13
  defaultVariants: {
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Maximize2 } from "../../../icons/Maximize2.js";
3
3
  import { Minimize2 } from "../../../icons/Minimize2.js";
4
4
  import { X } from "../../../icons/X.js";
@@ -14,46 +14,53 @@ const FilterInputFieldActions = ({ isExpanded, isOverflowing, onToggleExpand })=
14
14
  const hasChips = chips.length > 0;
15
15
  const hasContent = hasChips || null != buildingChipData;
16
16
  const showExpandCollapse = isOverflowing || isExpanded;
17
- return /*#__PURE__*/ jsxs("div", {
18
- className: "absolute right-8 top-0 z-10 flex items-center gap-8 pt-8",
17
+ return /*#__PURE__*/ jsxs(Fragment, {
19
18
  children: [
20
- showKeyboardHint && !hasContent && /*#__PURE__*/ jsxs(KbdGroup, {
21
- children: [
22
- /*#__PURE__*/ jsx(Kbd, {
23
- children: "⌘"
24
- }),
25
- /*#__PURE__*/ jsx(Kbd, {
26
- children: "K"
27
- })
28
- ]
19
+ showKeyboardHint && !hasContent && /*#__PURE__*/ jsx("div", {
20
+ className: "absolute right-8 top-0 bottom-0 z-10 flex items-center",
21
+ children: /*#__PURE__*/ jsxs(KbdGroup, {
22
+ children: [
23
+ /*#__PURE__*/ jsx(Kbd, {
24
+ children: "⌘"
25
+ }),
26
+ /*#__PURE__*/ jsx(Kbd, {
27
+ children: "K"
28
+ })
29
+ ]
30
+ })
29
31
  }),
30
- showExpandCollapse && /*#__PURE__*/ jsxs(Tooltip, {
32
+ (showExpandCollapse || hasChips) && /*#__PURE__*/ jsxs("div", {
33
+ className: "absolute right-8 top-0 z-10 flex items-center gap-8 pt-8",
31
34
  children: [
32
- /*#__PURE__*/ jsx(TooltipTrigger, {
33
- asChild: true,
34
- children: /*#__PURE__*/ jsx(Button, {
35
- variant: "ghost",
36
- color: "neutral",
37
- size: "small",
38
- onClick: onToggleExpand,
39
- "aria-label": isExpanded ? 'Collapse' : 'Expand',
40
- className: "text-icon-secondary",
41
- children: isExpanded ? /*#__PURE__*/ jsx(Minimize2, {}) : /*#__PURE__*/ jsx(Maximize2, {})
42
- })
35
+ showExpandCollapse && /*#__PURE__*/ jsxs(Tooltip, {
36
+ children: [
37
+ /*#__PURE__*/ jsx(TooltipTrigger, {
38
+ asChild: true,
39
+ children: /*#__PURE__*/ jsx(Button, {
40
+ variant: "ghost",
41
+ color: "neutral",
42
+ size: "small",
43
+ onClick: onToggleExpand,
44
+ "aria-label": isExpanded ? 'Collapse' : 'Expand',
45
+ className: "text-icon-secondary",
46
+ children: isExpanded ? /*#__PURE__*/ jsx(Minimize2, {}) : /*#__PURE__*/ jsx(Maximize2, {})
47
+ })
48
+ }),
49
+ /*#__PURE__*/ jsx(TooltipContent, {
50
+ children: isExpanded ? 'Collapse' : 'Expand'
51
+ })
52
+ ]
43
53
  }),
44
- /*#__PURE__*/ jsx(TooltipContent, {
45
- children: isExpanded ? 'Collapse' : 'Expand'
54
+ hasChips && /*#__PURE__*/ jsx(Button, {
55
+ variant: "ghost",
56
+ color: "neutral",
57
+ size: "small",
58
+ onClick: onClear,
59
+ "aria-label": "Clear all filters",
60
+ className: "text-icon-secondary",
61
+ children: /*#__PURE__*/ jsx(X, {})
46
62
  })
47
63
  ]
48
- }),
49
- hasChips && /*#__PURE__*/ jsx(Button, {
50
- variant: "ghost",
51
- color: "neutral",
52
- size: "small",
53
- onClick: onClear,
54
- "aria-label": "Clear all filters",
55
- className: "text-icon-secondary",
56
- children: /*#__PURE__*/ jsx(X, {})
57
64
  })
58
65
  ]
59
66
  });
@@ -12,7 +12,7 @@ export declare const filterInputInnerVariants: (props?: ({
12
12
  hasContent?: boolean | null | undefined;
13
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
14
  /** Wrapper that visually groups the building chip and the filter input */
15
- export declare const buildingChipWrapperClass = "flex items-center min-w-0 rounded-8 border border-solid border-border-strong-primary bg-badge-badge-bg ml-8";
15
+ export declare const buildingChipWrapperClass = "flex items-center min-w-0 h-24 rounded-8 border border-solid border-border-strong-primary bg-badge-badge-bg ml-8";
16
16
  /** Native input element inside the query bar */
17
17
  export declare const filterInputInputVariants: (props?: ({
18
18
  hasContent?: boolean | null | undefined;
@@ -1,18 +1,17 @@
1
1
  import { cva } from "class-variance-authority";
2
2
  const VISIBLE_ROWS = 3;
3
- const CHIP_ROW_HEIGHT = 22;
3
+ const CHIP_ROW_HEIGHT = 24;
4
4
  const ROW_GAP = 4;
5
- const PADDING_Y = 8;
5
+ const PADDING_Y = 16;
6
6
  const EDGE_GAP = 8;
7
7
  const CONTAINER_BORDER = 2;
8
- const BOTTOM_REVEAL = 6;
9
- const COLLAPSED_MAX_HEIGHT = VISIBLE_ROWS * CHIP_ROW_HEIGHT + (VISIBLE_ROWS - 1) * ROW_GAP + PADDING_Y + EDGE_GAP + CONTAINER_BORDER + BOTTOM_REVEAL;
8
+ const COLLAPSED_MAX_HEIGHT = VISIBLE_ROWS * CHIP_ROW_HEIGHT + (VISIBLE_ROWS - 1) * ROW_GAP + PADDING_Y + EDGE_GAP + CONTAINER_BORDER;
10
9
  const BUTTON_SIZE = 24;
11
10
  const BUTTON_COUNT = 2;
12
11
  const BUTTON_GAP = 8;
13
12
  const ACTIONS_RIGHT = 8;
14
13
  const ACTIONS_PADDING = BUTTON_COUNT * BUTTON_SIZE + BUTTON_GAP + ACTIONS_RIGHT;
15
- const filterInputContainerVariants = cva('relative flex min-h-40 w-full overflow-hidden px-0 focus-within:outline-none focus-within:ring-3', {
14
+ const filterInputContainerVariants = cva('relative flex box-border min-h-40 w-full overflow-hidden px-0 focus-within:outline-none focus-within:ring-3', {
16
15
  variants: {
17
16
  error: {
18
17
  true: 'focus-within:ring-focus-destructive',
@@ -28,10 +27,10 @@ const filterInputContainerVariants = cva('relative flex min-h-40 w-full overflow
28
27
  multiRow: false
29
28
  }
30
29
  });
31
- const filterInputInnerVariants = cva('flex min-h-full w-full cursor-text flex-wrap items-center gap-y-4 py-8', {
30
+ const filterInputInnerVariants = cva('flex min-h-[40px] w-full cursor-text flex-wrap items-center gap-y-4 py-[8px]', {
32
31
  variants: {
33
32
  hasContent: {
34
- true: 'pl-4',
33
+ true: 'pl-8',
35
34
  false: 'pl-12 pr-4'
36
35
  }
37
36
  },
@@ -39,7 +38,7 @@ const filterInputInnerVariants = cva('flex min-h-full w-full cursor-text flex-wr
39
38
  hasContent: false
40
39
  }
41
40
  });
42
- const buildingChipWrapperClass = 'flex items-center min-w-0 rounded-8 border border-solid border-border-strong-primary bg-badge-badge-bg ml-8';
41
+ const buildingChipWrapperClass = 'flex items-center min-w-0 h-24 rounded-8 border border-solid border-border-strong-primary bg-badge-badge-bg ml-8';
43
42
  const filterInputInputVariants = cva('h-auto border-none bg-transparent p-0 text-sm shadow-none outline-none ring-0', {
44
43
  variants: {
45
44
  hasContent: {
@@ -7,10 +7,10 @@ import { KbdGroup } from "../../Kbd/KbdGroup.js";
7
7
  import { OPERATORS_BY_TYPE, OPERATOR_SYMBOLS, getOperatorLabel } from "../lib/index.js";
8
8
  import { useKeyboardNav } from "./hooks/useKeyboardNav.js";
9
9
  import { MenuEmptyState } from "./MenuEmptyState.js";
10
- function filterOperatorGroups(groups, operators) {
10
+ const filterOperatorGroups = (groups, operators)=>{
11
11
  const allowed = new Set(operators);
12
12
  return groups.map((group)=>group.filter((op)=>allowed.has(op))).filter((group)=>group.length > 0);
13
- }
13
+ };
14
14
  const HIDE_SYMBOLS_FOR = new Set([
15
15
  'boolean'
16
16
  ]);
@@ -3,17 +3,9 @@ import { useCallback, useRef } from "react";
3
3
  import { useWindowVirtualizer } from "@tanstack/react-virtual";
4
4
  import { TABLE_VIRTUALIZATION_OVERSCAN } from "../lib/index.js";
5
5
  import { useTableContext } from "../TableContext/index.js";
6
+ import { getDocumentOffsetTop } from "./lib/getDocumentOffsetTop.js";
6
7
  import { TableBodyVirtualizedCore } from "./TableBodyVirtualizedCore.js";
7
8
  import { useSmoothScrollOnSort } from "./useSmoothScrollOnSort.js";
8
- function getDocumentOffsetTop(el) {
9
- let offset = 0;
10
- let current = el;
11
- while(current){
12
- offset += current.offsetTop;
13
- current = current.offsetParent;
14
- }
15
- return offset;
16
- }
17
9
  const TableBodyVirtualizedWindow = ()=>{
18
10
  const { table, estimateRowHeight, overscan } = useTableContext();
19
11
  const tbodyRef = useRef(null);
@@ -0,0 +1,2 @@
1
+ /** Walk up the offsetParent chain to get absolute offset from document top. */
2
+ export declare const getDocumentOffsetTop: (el: HTMLElement) => number;
@@ -0,0 +1,10 @@
1
+ const getDocumentOffsetTop = (el)=>{
2
+ let offset = 0;
3
+ let current = el;
4
+ while(current){
5
+ offset += current.offsetTop;
6
+ current = current.offsetParent;
7
+ }
8
+ return offset;
9
+ };
10
+ export { getDocumentOffsetTop };
@@ -4,4 +4,4 @@ import type { Table as TanStackTable } from '@tanstack/react-table';
4
4
  * Prevents the jarring jump that occurs when the virtualizer
5
5
  * recalculates row positions after a sort.
6
6
  */
7
- export declare function useSmoothScrollOnSort<T>(table: TanStackTable<T>, getScrollTarget: () => HTMLElement | Window | null): void;
7
+ export declare const useSmoothScrollOnSort: <T>(table: TanStackTable<T>, getScrollTarget: () => HTMLElement | Window | null) => void;
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef } from "react";
2
- function useSmoothScrollOnSort(table, getScrollTarget) {
2
+ const useSmoothScrollOnSort = (table, getScrollTarget)=>{
3
3
  const prevSortingRef = useRef(table.getState().sorting);
4
4
  const sorting = table.getState().sorting;
5
5
  useEffect(()=>{
@@ -15,5 +15,5 @@ function useSmoothScrollOnSort(table, getScrollTarget) {
15
15
  sorting,
16
16
  getScrollTarget
17
17
  ]);
18
- }
18
+ };
19
19
  export { useSmoothScrollOnSort };
@@ -15,5 +15,5 @@ interface UseEndReachedOptions {
15
15
  * A cooldown guard prevents rapid re-fires that can occur when new rows
16
16
  * are appended (scrollHeight grows → firedRef resets → still at bottom).
17
17
  */
18
- export declare function useEndReached({ mode, scrollRef, onEndReached, threshold, }: UseEndReachedOptions): void;
18
+ export declare const useEndReached: ({ mode, scrollRef, onEndReached, threshold, }: UseEndReachedOptions) => void;
19
19
  export {};
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useRef } from "react";
2
2
  import { TABLE_END_REACHED_THRESHOLD } from "../lib/index.js";
3
3
  const COOLDOWN_MS = 200;
4
- function useEndReached({ mode, scrollRef, onEndReached, threshold = TABLE_END_REACHED_THRESHOLD }) {
4
+ const useEndReached = ({ mode, scrollRef, onEndReached, threshold = TABLE_END_REACHED_THRESHOLD })=>{
5
5
  const firedRef = useRef(false);
6
6
  const lastFiredAtRef = useRef(0);
7
7
  useEffect(()=>{
@@ -46,5 +46,5 @@ function useEndReached({ mode, scrollRef, onEndReached, threshold = TABLE_END_RE
46
46
  onEndReached,
47
47
  threshold
48
48
  ]);
49
- }
49
+ };
50
50
  export { useEndReached };
@@ -3,4 +3,4 @@ export interface TableColumnHelper<T> {
3
3
  accessor: <K extends keyof T & string>(key: K, options?: Omit<TableAccessorColumnDef<T, T[K]>, 'accessorKey'>) => TableAccessorColumnDef<T, T[K]>;
4
4
  display: (options: Omit<TableDisplayColumnDef<T>, 'accessorKey'>) => TableDisplayColumnDef<T>;
5
5
  }
6
- export declare function createTableColumnHelper<T>(): TableColumnHelper<T>;
6
+ export declare const createTableColumnHelper: <T>() => TableColumnHelper<T>;
@@ -1,5 +1,4 @@
1
- function createTableColumnHelper() {
2
- return {
1
+ const createTableColumnHelper = ()=>({
3
2
  accessor: (key, options = {})=>({
4
3
  ...options,
5
4
  accessorKey: key
@@ -8,6 +7,5 @@ function createTableColumnHelper() {
8
7
  ...options,
9
8
  accessorKey: void 0
10
9
  })
11
- };
12
- }
10
+ });
13
11
  export { createTableColumnHelper };
@@ -3,4 +3,4 @@ import type { Column } from '@tanstack/react-table';
3
3
  /**
4
4
  * Gets pinning-related CSS properties for a cell/header.
5
5
  */
6
- export declare function getPinningStyles<T>(column: Column<T>): CSSProperties;
6
+ export declare const getPinningStyles: <T>(column: Column<T>) => CSSProperties;
@@ -1,4 +1,4 @@
1
- function getPinningStyles(column) {
1
+ const getPinningStyles = (column)=>{
2
2
  const isPinned = column.getIsPinned();
3
3
  if (!isPinned) return {};
4
4
  if ('left' !== isPinned) return {};
@@ -6,5 +6,5 @@ function getPinningStyles(column) {
6
6
  left: `${column.getStart('left')}px`,
7
7
  position: 'sticky'
8
8
  };
9
- }
9
+ };
10
10
  export { getPinningStyles };
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Checks if a column is the last pinned column on the left side.
3
3
  */
4
- export declare function isLastPinnedLeft(column: {
5
- getIsPinned: () => false | 'left' | 'right';
4
+ export declare const isLastPinnedLeft: (column: {
5
+ getIsPinned: () => false | "left" | "right";
6
6
  }, allColumns: {
7
- getIsPinned: () => false | 'left' | 'right';
7
+ getIsPinned: () => false | "left" | "right";
8
8
  id: string;
9
- }[], columnId: string): boolean;
9
+ }[], columnId: string) => boolean;
@@ -1,6 +1,6 @@
1
- function isLastPinnedLeft(column, allColumns, columnId) {
1
+ const isLastPinnedLeft = (column, allColumns, columnId)=>{
2
2
  if ('left' !== column.getIsPinned()) return false;
3
3
  const leftPinned = allColumns.filter((c)=>'left' === c.getIsPinned());
4
4
  return leftPinned[leftPinned.length - 1]?.id === columnId;
5
- }
5
+ };
6
6
  export { isLastPinnedLeft };
@@ -39,10 +39,10 @@ export declare const groupedHeaderData: SecurityHeaderEntry[];
39
39
  export declare const headerColumnHelper: import(".").TableColumnHelper<SecurityHeaderEntry>;
40
40
  export declare const headerColumns: TableColumnDef<SecurityHeaderEntry>[];
41
41
  export declare const headerColumnIds: string[];
42
- export declare function createLargeGroupedData(groupCount?: number, childrenPerGroup?: number): SecurityHeaderEntry[];
43
- export declare function createLargeSecurityEvents(count?: number): SecurityEvent[];
42
+ export declare const createLargeGroupedData: (groupCount?: number, childrenPerGroup?: number) => SecurityHeaderEntry[];
43
+ export declare const createLargeSecurityEvents: (count?: number) => SecurityEvent[];
44
44
  export declare const fullFeaturedColumns: TableColumnDef<SecurityHeaderEntry>[];
45
- export declare function useInfiniteData(): {
45
+ export declare const useInfiniteData: () => {
46
46
  data: SecurityEvent[];
47
47
  isFetching: boolean;
48
48
  hasMore: boolean;
@@ -593,8 +593,7 @@ const ENDPOINTS = [
593
593
  '/v1/webhooks/process/{event_type}',
594
594
  '/v1/analytics/track/{metric}'
595
595
  ];
596
- function createLargeGroupedData(groupCount = 12, childrenPerGroup = 50) {
597
- return Array.from({
596
+ const createLargeGroupedData = (groupCount = 12, childrenPerGroup = 50)=>Array.from({
598
597
  length: groupCount
599
598
  }, (_, gi)=>{
600
599
  const groupName = HEADER_GROUPS.at(gi % HEADER_GROUPS.length);
@@ -626,9 +625,7 @@ function createLargeGroupedData(groupCount = 12, childrenPerGroup = 50) {
626
625
  }))
627
626
  };
628
627
  });
629
- }
630
- function createLargeSecurityEvents(count = 1000) {
631
- return Array.from({
628
+ const createLargeSecurityEvents = (count = 1000)=>Array.from({
632
629
  length: count
633
630
  }, (_, i)=>{
634
631
  const base = securityEvents.at(i % securityEvents.length);
@@ -639,7 +636,6 @@ function createLargeSecurityEvents(count = 1000) {
639
636
  firstDetected: `2026-01-${String(i % 28 + 1).padStart(2, '0')}T${String(i % 24).padStart(2, '0')}:00:00`
640
637
  };
641
638
  });
642
- }
643
639
  const fullFeaturedColumns = headerColumns.map((col)=>{
644
640
  const key = 'accessorKey' in col ? col.accessorKey : void 0;
645
641
  if ('objectName' === key) return {
@@ -852,7 +848,7 @@ const fullFeaturedColumns = headerColumns.map((col)=>{
852
848
  });
853
849
  const INFINITE_PAGE_SIZE = 50;
854
850
  const INFINITE_MAX_ITEMS = 500;
855
- function useInfiniteData() {
851
+ const useInfiniteData = ()=>{
856
852
  const allData = useMemo(()=>createLargeSecurityEvents(INFINITE_MAX_ITEMS), []);
857
853
  const [data, setData] = useState(()=>allData.slice(0, INFINITE_PAGE_SIZE));
858
854
  const [isFetching, setIsFetching] = useState(false);
@@ -876,5 +872,5 @@ function useInfiniteData() {
876
872
  totalItems: INFINITE_MAX_ITEMS,
877
873
  fetchNextPage
878
874
  };
879
- }
875
+ };
880
876
  export { METHOD_COLORS, createLargeGroupedData, createLargeSecurityEvents, fullFeaturedColumns, groupedHeaderData, headerColumnHelper, headerColumnIds, headerColumns, securityColumnHelper, securityColumnIds, securityColumns, securityEvents, useInfiniteData };
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.14.1",
3
- "generatedAt": "2026-03-20T04:01:58.193Z",
2
+ "version": "0.14.2",
3
+ "generatedAt": "2026-03-23T08:20:42.578Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Alert",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",