@synerise/ds-item-picker 2.1.3 → 2.2.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/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.2.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-item-picker@2.1.4...@synerise/ds-item-picker@2.2.0) (2026-10-20)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **utils:** let measured list rows shrink back to their content ([f04903d](https://github.com/Synerise/synerise-design/commit/f04903dc40ddbec33850946045c02f914569aeb7))
12
+
13
+
14
+ ### Features
15
+
16
+ * **item-picker:** info tooltip on section title rows ([ed8fb07](https://github.com/Synerise/synerise-design/commit/ed8fb0722e094c32e3ac5af2370cbb070db9f402))
17
+
18
+
19
+
20
+
21
+
22
+ ## [2.1.4](https://github.com/Synerise/synerise-design/compare/@synerise/ds-item-picker@2.1.3...@synerise/ds-item-picker@2.1.4) (2026-10-09)
23
+
24
+ **Note:** Version bump only for package @synerise/ds-item-picker
25
+
26
+
27
+
28
+
29
+
6
30
  ## [2.1.3](https://github.com/Synerise/synerise-design/compare/@synerise/ds-item-picker@2.1.2...@synerise/ds-item-picker@2.1.3) (2026-09-24)
7
31
 
8
32
  **Note:** Version bump only for package @synerise/ds-item-picker
package/CLAUDE.md CHANGED
@@ -199,7 +199,7 @@ The standalone trigger button, exported for custom dropdown implementations.
199
199
  | `ItemSelectHandler` | `onItemSelect` callback type |
200
200
  | `ItemPickerListAPI` | Ref handle type |
201
201
  | `BaseItemType` | Minimum item shape |
202
- | `BaseSectionType` | Minimum section shape |
202
+ | `BaseSectionType` | Minimum section shape; optional `tooltip` puts an info icon with that tooltip on the section's title row |
203
203
  | `BaseSectionTypeWithFolders` | Section with optional `folders` tree |
204
204
  | `ItemPickerListTexts` | All 23 localisation text keys |
205
205
  | `Action` | Union of action types |
@@ -249,7 +249,7 @@ const loaderConfig: ItemLoaderConfig<MyItem> = {
249
249
  isNewVersion
250
250
  items={loaderConfig}
251
251
  sections={[
252
- { id: 'seg', text: 'Segmentations', folders: [{ id: 'f1', text: 'Folder A' }] },
252
+ { id: 'seg', text: 'Segmentations', folders: [{ id: 'f1', text: 'Folder A', tooltip: 'What Folder A holds' }] },
253
253
  ]}
254
254
  onSectionChange={(section) => console.log('navigated to', section)}
255
255
  onChange={handleChange}
@@ -315,6 +315,8 @@ import { ItemPickerList } from '@synerise/ds-item-picker';
315
315
  - **AbortController**: each `loadItems` call gets a fresh `AbortController`; the previous one is aborted on re-trigger (section change, search, refresh).
316
316
  - **Search action trigger**: typing `/` into the search bar activates the global actions list (`listActions = searchQuery === '/'`).
317
317
  - **Infinite scroll**: only active for `ItemLoaderConfig` items in `LIST_ITEMS` render mode. Pages are tracked via `pageToLoad.current`; deduplication relies on the caller returning accurate `total`.
318
+ - **Section tooltips**: a section's `tooltip` renders on its **title row** only (an `InfoFillS` icon in `ds-tooltip`), never on the folder row that opens it. Top-level section titles take it in `LIST_FOLDERS_IN_SECTIONS`; a folder's title (or title path, e.g. "Attributes - Ready to use") takes it when its items are listed under it. The icon sits in a negative-margin wrapper so the title stays as tall as its `ITEM_SIZE.title` estimate.
319
+ - **Measured row heights**: rows report real heights through `useMeasuredRowHeights` (`@synerise/ds-utils`). Each row's floor is its **estimate** (`getMeasuredRowStyle(style, getEstimatedItemSize(index))`), never react-window's `style.height`, so a row measures shorter again when its key last stood for a taller row. Row keys are `itemKey ?? key ?? id`, falling back to the position only for rows with no id at all.
318
320
  - **Section/folder rendering modes** (`renderMode.ts`):
319
321
  - `LIST_ITEMS` — flat list
320
322
  - `LIST_ITEMS_IN_SECTIONS` — items grouped under section headers
@@ -324,6 +326,6 @@ import { ItemPickerList } from '@synerise/ds-item-picker';
324
326
  - **`isObjectDeleted` prop** (on `ItemPickerNew`, `ItemPickerLegacy`, and the shared `Trigger`) flags a selected item that no longer exists. When `true`, `Trigger.styles` renders `ValueText` in `red-600` and skips the grey-600 `Prefix` icon override so the deleted state reads visually. It only affects the selected-value display — it has no effect while showing the placeholder.
325
327
  - **Several `ItemPickerTriggerProps` fields are `@deprecated`**: `clear`, `changeButtonLabel`, `clearConfirmTitle`, `yesText`, `noText` — move to `texts` object.
326
328
  - **`Props` alias** in `Trigger.types.ts` is marked `@deprecated`; use `ItemPickerTriggerProps`.
327
- - **Tests use Jest** (`jest.config.js` present); the package has not been migrated to Vitest.
329
+ - **Tests use Vitest** (`vitest run`); the root `@testing-library/user-event` is v10, so there is no `userEvent.hover` — a `ds-tooltip` cannot be opened from these specs.
328
330
  - The search-bar `searchPlaceholder` in `ItemPickerNew` must be overridden via `texts.searchPlaceholder` (not a top-level prop), unlike `ItemPickerLegacy` where it is a direct prop.
329
331
  - `ItemPickerList` generates a unique per-instance CSS class via `uuid()` on mount; `focusWithArrowKeys` from `@synerise/ds-utils` uses this class for keyboard navigation.
@@ -156,7 +156,7 @@ const ItemPickerListInner = ({
156
156
  }
157
157
  return ITEM_SIZE[item.size || itemSizes.DEFAULT];
158
158
  }, [mergedItemsList]);
159
- const rowKeys = useMemo(() => mergedItemsList.map((item, index) => isTitle(item) ? `title-${index}` : item.itemKey ?? item.key ?? index), [mergedItemsList]);
159
+ const rowKeys = useMemo(() => mergedItemsList.map((item, index) => isTitle(item) ? `title-${index}` : item.itemKey ?? item.key ?? item.id ?? `row-${index}`), [mergedItemsList]);
160
160
  const {
161
161
  listRef,
162
162
  getItemSize,
@@ -169,6 +169,7 @@ const ItemPickerListInner = ({
169
169
  dataSource: mergedItemsList,
170
170
  classNames,
171
171
  getItemSize,
172
+ getEstimatedItemSize,
172
173
  measureRow,
173
174
  texts: allTexts,
174
175
  infiniteScroll: {
@@ -176,7 +177,7 @@ const ItemPickerListInner = ({
176
177
  hasMore: !isLoadedAll,
177
178
  hasError: isLoadingMoreError
178
179
  }
179
- }), [mergedItemsList, classNames, getItemSize, measureRow, allTexts, isLoadingMore, isLoadedAll, isLoadingMoreError]);
180
+ }), [mergedItemsList, classNames, getItemSize, getEstimatedItemSize, measureRow, allTexts, isLoadingMore, isLoadedAll, isLoadingMoreError]);
180
181
  const handleRefresh = onRefresh || refreshItems ? () => {
181
182
  changeSearchQuery("");
182
183
  setSearchByParamConfig(void 0);
@@ -26,6 +26,8 @@ export declare const SkeletonWrapper: import('styled-components').StyledComponen
26
26
  wrapperHeight?: number;
27
27
  }, never>;
28
28
  export declare const Title: import('styled-components').StyledComponent<"div", any, {}, never>;
29
+ export declare const TitleWithTooltip: import('styled-components').StyledComponent<"div", any, {}, never>;
30
+ export declare const TitleTooltipIcon: import('styled-components').StyledComponent<"div", any, {}, never>;
29
31
  export declare const SectionTitleWrapper: import('styled-components').StyledComponent<"div", any, {}, never>;
30
32
  export declare const InfiniteLoaderItemWrapper: import('styled-components').StyledComponent<"div", any, {}, never>;
31
33
  export declare const Loader: import('styled-components').StyledComponent<({ size, label, labelPosition, color, percent, percentFormatter, text, fontSize, mode, className, }: import('@synerise/ds-loader/dist/Loader.types').LoaderProps) => React.JSX.Element, any, {}, never>;
@@ -64,17 +64,25 @@ const Title = /* @__PURE__ */ styled.div.withConfig({
64
64
  displayName: "ItemPickerListstyles__Title",
65
65
  componentId: "sc-1r33ill-13"
66
66
  })(["font-size:10px;line-height:1.6;font-weight:500;text-transform:uppercase;color:", ";padding:8px 12px;"], (props) => props.theme.palette["grey-500"]);
67
+ const TitleWithTooltip = /* @__PURE__ */ styled.div.withConfig({
68
+ displayName: "ItemPickerListstyles__TitleWithTooltip",
69
+ componentId: "sc-1r33ill-14"
70
+ })(["display:flex;align-items:center;"]);
71
+ const TitleTooltipIcon = /* @__PURE__ */ styled.div.withConfig({
72
+ displayName: "ItemPickerListstyles__TitleTooltipIcon",
73
+ componentId: "sc-1r33ill-15"
74
+ })(["display:flex;margin:-4px 0;color:", ";"], (props) => props.theme.palette["grey-400"]);
67
75
  const SectionTitleWrapper = /* @__PURE__ */ styled.div.withConfig({
68
76
  displayName: "ItemPickerListstyles__SectionTitleWrapper",
69
- componentId: "sc-1r33ill-14"
77
+ componentId: "sc-1r33ill-16"
70
78
  })([""]);
71
79
  const InfiniteLoaderItemWrapper = /* @__PURE__ */ styled.div.withConfig({
72
80
  displayName: "ItemPickerListstyles__InfiniteLoaderItemWrapper",
73
- componentId: "sc-1r33ill-15"
81
+ componentId: "sc-1r33ill-17"
74
82
  })([""]);
75
83
  const Loader = /* @__PURE__ */ styled(DSLoader).withConfig({
76
84
  displayName: "ItemPickerListstyles__Loader",
77
- componentId: "sc-1r33ill-16"
85
+ componentId: "sc-1r33ill-18"
78
86
  })(["justify-content:flex-start;"]);
79
87
  export {
80
88
  EmptyStates,
@@ -93,5 +101,7 @@ export {
93
101
  SkeletonWrapper,
94
102
  StyledList,
95
103
  StyledScrollbar,
96
- Title
104
+ Title,
105
+ TitleTooltipIcon,
106
+ TitleWithTooltip
97
107
  };
@@ -1,9 +1,10 @@
1
- import { Ref } from 'react';
1
+ import { ReactNode, Ref } from 'react';
2
2
  import { ListItemProps } from '@synerise/ds-list-item';
3
3
  import { BaseItemType, BaseSectionType, BaseSectionTypeWithFolders } from '../ItemPickerNew/types/baseItemSectionType.types';
4
4
  export type ItemSelectHandler<ItemType extends BaseItemType, SectionType extends BaseSectionType | undefined> = SectionType extends BaseSectionType ? (item: ItemType, section?: BaseSectionTypeWithFolders<BaseSectionType>) => void : (item: ItemType) => void;
5
5
  export type TitleListItemProps = Omit<ListItemProps, 'type'> & {
6
6
  type: 'title';
7
+ tooltip?: ReactNode;
7
8
  };
8
9
  export type ItemPickerListAPI = {
9
10
  reloadActiveSection: () => void;
@@ -9,6 +9,7 @@ export type ItemPickerListRowProps = {
9
9
  dataSource: Array<ListItemProps | TitleListItemProps>;
10
10
  classNames: string;
11
11
  getItemSize: (index: number) => number;
12
+ getEstimatedItemSize: (index: number) => number;
12
13
  measureRow: (index: number, height: number) => void;
13
14
  texts: ItemPickerListTexts;
14
15
  infiniteScroll?: {
@@ -18,4 +19,4 @@ export type ItemPickerListRowProps = {
18
19
  };
19
20
  };
20
21
  };
21
- export declare const ItemPickerListRow: ({ index, style, data: { dataSource, classNames, getItemSize, measureRow, infiniteScroll, texts, }, }: PropsWithChildren<ItemPickerListRowProps>) => React.JSX.Element;
22
+ export declare const ItemPickerListRow: ({ index, style, data: { dataSource, classNames, getItemSize, getEstimatedItemSize, measureRow, infiniteScroll, texts, }, }: PropsWithChildren<ItemPickerListRowProps>) => React.JSX.Element;
@@ -1,8 +1,10 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useCallback } from "react";
3
+ import Icon, { InfoFillS } from "@synerise/ds-icon";
3
4
  import DSListItem from "@synerise/ds-list-item";
4
- import { useMeasuredRow } from "@synerise/ds-utils";
5
- import { InfiniteLoaderItemWrapper, Title } from "../ItemPickerList.styles.js";
5
+ import Tooltip from "@synerise/ds-tooltip";
6
+ import { useMeasuredRow, getMeasuredRowStyle } from "@synerise/ds-utils";
7
+ import { InfiniteLoaderItemWrapper, Title, TitleWithTooltip, TitleTooltipIcon } from "../ItemPickerList.styles.js";
6
8
  import { isTitle } from "../utils/typeguards.utils.js";
7
9
  import { InfiniteLoaderItem } from "./InfiniteLoaderItem.js";
8
10
  const INFINITE_LOADER_ITEM_HEIGHT = 48;
@@ -13,6 +15,7 @@ const ItemPickerListRow = ({
13
15
  dataSource,
14
16
  classNames,
15
17
  getItemSize,
18
+ getEstimatedItemSize,
16
19
  measureRow,
17
20
  infiniteScroll,
18
21
  texts
@@ -20,11 +23,7 @@ const ItemPickerListRow = ({
20
23
  }) => {
21
24
  const listItem = dataSource[index];
22
25
  const rowRef = useMeasuredRow(index, measureRow);
23
- const rowStyle = {
24
- ...style,
25
- height: "auto",
26
- minHeight: style.height
27
- };
26
+ const rowStyle = getMeasuredRowStyle(style, getEstimatedItemSize(index));
28
27
  const lastItemHeight = getItemSize(dataSource.length - 1);
29
28
  const infiniteLoaderItem = useCallback(() => {
30
29
  if (infiniteScroll) {
@@ -46,7 +45,10 @@ const ItemPickerListRow = ({
46
45
  return null;
47
46
  }, [infiniteScroll, lastItemHeight, style, texts]);
48
47
  if (isTitle(listItem)) {
49
- return /* @__PURE__ */ jsx("div", { ref: rowRef, style: rowStyle, children: /* @__PURE__ */ jsx(Title, { children: listItem.text }) });
48
+ return /* @__PURE__ */ jsx("div", { ref: rowRef, style: rowStyle, children: /* @__PURE__ */ jsx(Title, { children: listItem.tooltip ? /* @__PURE__ */ jsxs(TitleWithTooltip, { children: [
49
+ /* @__PURE__ */ jsx("span", { children: listItem.text }),
50
+ /* @__PURE__ */ jsx(Tooltip, { type: "default", trigger: "hover", title: listItem.tooltip, children: /* @__PURE__ */ jsx(TitleTooltipIcon, { children: /* @__PURE__ */ jsx(Icon, { size: 24, component: /* @__PURE__ */ jsx(InfoFillS, {}), "data-testid": "title-tooltip-icon" }) }) })
51
+ ] }) : listItem.text }) });
50
52
  }
51
53
  return /* @__PURE__ */ jsxs(Fragment, { children: [
52
54
  /* @__PURE__ */ jsx("div", { ref: rowRef, style: rowStyle, children: /* @__PURE__ */ jsx(DSListItem, { ...listItem, className: classNames }) }),
@@ -459,6 +459,7 @@ const useItemsInSections = ({
459
459
  return getItems({
460
460
  items: itemsInFolder,
461
461
  titlePath: folder.titles,
462
+ titleTooltip: folder.tooltip,
462
463
  texts,
463
464
  searchQuery,
464
465
  maxItems: itemsLimitPerSection,
@@ -3,9 +3,9 @@ import { ListItemProps } from '@synerise/ds-list-item';
3
3
  import { BaseItemType, BaseSectionType, BaseSectionTypeWithFolders } from '../../ItemPickerNew/types/baseItemSectionType.types';
4
4
  import { ItemPickerListTexts } from '../../ItemPickerNew/types/itemPickerListTexts.types';
5
5
  import { TitleListItemProps } from '../ItemPickerList.types';
6
- export declare const getFolderItem: (item: ListItemProps, onClick: ListItemProps["onClick"]) => ListItemProps;
6
+ export declare const getFolderItem: (item: ListItemProps & Pick<BaseSectionType, "tooltip">, onClick: ListItemProps["onClick"]) => ListItemProps;
7
7
  export declare const getShowMoreItem: (label: ReactNode, onClick: ListItemProps["onClick"]) => ListItemProps;
8
- export declare const getTitleItem: (titleText: ReactNode) => TitleListItemProps;
8
+ export declare const getTitleItem: (titleText: ReactNode, tooltip?: ReactNode) => TitleListItemProps;
9
9
  export declare const getListItem: <ItemType extends ListItemProps>(item: ItemType, isSelected: (item: ItemType) => boolean, searchQuery?: string, onItemSelect?: (item: ItemType) => void, renderHoverTooltip?: () => JSX.Element, isSearchParam?: boolean) => ListItemProps;
10
10
  export declare const matchesSearchQuery: (text: ReactNode, searchQuery: string) => boolean;
11
11
  export declare const getItemsSectionTitle: (texts: ItemPickerListTexts, showItemsSectionLabel: boolean, searchQuery?: string) => TitleListItemProps[];
@@ -17,9 +17,11 @@ export declare const getRecentItems: <ItemType extends BaseItemType>({ recents,
17
17
  searchQuery?: string;
18
18
  isSearchParam: boolean;
19
19
  }) => (ListItemProps | TitleListItemProps)[];
20
- export declare const getItems: <ItemType extends BaseItemType>({ items, texts, titlePath, searchQuery, isSelected, handleItemSelect, showItemsSectionLabel, showMoreOnClick, maxItems, isSearchParam, }: {
20
+ export declare const getItems: <ItemType extends BaseItemType>({ items, texts, titlePath, titleTooltip, searchQuery, isSelected, handleItemSelect, showItemsSectionLabel, showMoreOnClick, maxItems, isSearchParam, }: {
21
21
  items?: ItemType[];
22
22
  titlePath?: ReactNode[];
23
+ /** Tooltip of the folder the items belong to, shown on the `titlePath` title row. */
24
+ titleTooltip?: ReactNode;
23
25
  texts: ItemPickerListTexts;
24
26
  isSelected: (item: ItemType) => boolean;
25
27
  handleItemSelect?: (item: ItemType) => void;
@@ -4,9 +4,13 @@ import InformationCard from "@synerise/ds-information-card";
4
4
  import { createTitleFromTitlePath } from "../utils/createTitleFromTitlePath.js";
5
5
  import "../../ItemPickerNew/types/actions.types.js";
6
6
  const getFolderItem = (item, onClick) => {
7
+ const {
8
+ tooltip: _sectionTooltip,
9
+ ...folder
10
+ } = item;
7
11
  return {
8
12
  prefixel: /* @__PURE__ */ jsx(Icon, { component: /* @__PURE__ */ jsx(FolderM, {}) }),
9
- ...item,
13
+ ...folder,
10
14
  onClick
11
15
  };
12
16
  };
@@ -17,10 +21,11 @@ const getShowMoreItem = (label, onClick) => {
17
21
  onClick
18
22
  };
19
23
  };
20
- const getTitleItem = (titleText) => {
24
+ const getTitleItem = (titleText, tooltip) => {
21
25
  return {
22
26
  type: "title",
23
- text: titleText
27
+ text: titleText,
28
+ tooltip
24
29
  };
25
30
  };
26
31
  const getListItem = (item, isSelected, searchQuery, onItemSelect, renderHoverTooltip, isSearchParam) => {
@@ -55,6 +60,7 @@ const getItems = ({
55
60
  items,
56
61
  texts,
57
62
  titlePath,
63
+ titleTooltip,
58
64
  searchQuery,
59
65
  isSelected,
60
66
  handleItemSelect,
@@ -63,7 +69,7 @@ const getItems = ({
63
69
  maxItems,
64
70
  isSearchParam
65
71
  }) => {
66
- const sectionTitle = titlePath ? [getTitleItem(createTitleFromTitlePath(titlePath))] : getItemsSectionTitle(texts, showItemsSectionLabel, searchQuery);
72
+ const sectionTitle = titlePath ? [getTitleItem(createTitleFromTitlePath(titlePath), titleTooltip)] : getItemsSectionTitle(texts, showItemsSectionLabel, searchQuery);
67
73
  const results = items?.length ? [...sectionTitle, ...items.map((item) => getListItem(item, isSelected, searchQuery, handleItemSelect, getInformationCardTooltip(item), isSearchParam))] : [];
68
74
  if (maxItems) {
69
75
  const maxItemsWithTitle = maxItems + (sectionTitle.length ? 1 : 0);
@@ -79,7 +85,7 @@ const getFolderItems = ({
79
85
  sections
80
86
  }) => {
81
87
  return sections ? sections.reduce((itemsArray, section) => {
82
- const folderItemsWithTitle = section.folders?.length ? [getTitleItem(section.text), ...section.folders.map((folder) => getFolderItem(folder, () => handleSectionChange(folder)))] : [];
88
+ const folderItemsWithTitle = section.folders?.length ? [getTitleItem(section.text, section.tooltip), ...section.folders.map((folder) => getFolderItem(folder, () => handleSectionChange(folder)))] : [];
83
89
  return [...itemsArray, ...folderItemsWithTitle];
84
90
  }, []) : [];
85
91
  };
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { InformationCardProps } from '@synerise/ds-information-card';
2
3
  import { ListItemProps } from '@synerise/ds-list-item';
3
4
  import { ItemPickerListTexts } from './itemPickerListTexts.types';
@@ -5,6 +6,8 @@ export type InheritedFromListItem = Pick<ListItemProps, 'id' | 'type' | 'selecte
5
6
  export type BaseSectionType = InheritedFromListItem & {
6
7
  text: string;
7
8
  id: string | number;
9
+ /** Explains the section: an info icon with this tooltip follows the section's title row. */
10
+ tooltip?: ReactNode;
8
11
  texts?: Partial<Pick<ItemPickerListTexts, 'noResultsInSection' | 'searchAllFoldersButtonLabel'>>;
9
12
  };
10
13
  export type BaseSectionTypeWithFolders<SectionType extends BaseSectionType> = SectionType & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-item-picker",
3
- "version": "2.1.3",
3
+ "version": "2.2.0",
4
4
  "description": "ItemPicker UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -42,27 +42,27 @@
42
42
  ],
43
43
  "types": "dist/index.d.ts",
44
44
  "dependencies": {
45
- "@synerise/ds-avatar": "^2.0.6",
46
- "@synerise/ds-button": "^2.1.1",
47
- "@synerise/ds-dropdown": "^2.1.3",
48
- "@synerise/ds-empty-states": "^2.0.5",
49
- "@synerise/ds-flag": "^2.0.1",
50
- "@synerise/ds-form-field": "^2.0.6",
51
- "@synerise/ds-icon": "^2.2.0",
52
- "@synerise/ds-information-card": "^2.0.9",
53
- "@synerise/ds-inline-alert": "^2.0.5",
54
- "@synerise/ds-list-item": "^2.1.3",
45
+ "@synerise/ds-avatar": "^2.0.8",
46
+ "@synerise/ds-button": "^2.1.3",
47
+ "@synerise/ds-dropdown": "^2.1.5",
48
+ "@synerise/ds-empty-states": "^2.0.7",
49
+ "@synerise/ds-flag": "^2.0.2",
50
+ "@synerise/ds-form-field": "^2.0.8",
51
+ "@synerise/ds-icon": "^2.2.2",
52
+ "@synerise/ds-information-card": "^2.0.11",
53
+ "@synerise/ds-inline-alert": "^2.0.7",
54
+ "@synerise/ds-list-item": "^2.2.1",
55
55
  "@synerise/ds-loader": "^2.0.2",
56
- "@synerise/ds-popconfirm": "^2.0.6",
57
- "@synerise/ds-result": "^2.0.6",
58
- "@synerise/ds-scrollbar": "^2.0.5",
59
- "@synerise/ds-search": "^2.0.6",
60
- "@synerise/ds-search-bar": "^2.0.7",
61
- "@synerise/ds-short-cuts": "^2.0.6",
62
- "@synerise/ds-skeleton": "^2.0.6",
63
- "@synerise/ds-tooltip": "^2.0.6",
64
- "@synerise/ds-typography": "^2.0.6",
65
- "@synerise/ds-utils": "^2.2.0",
56
+ "@synerise/ds-popconfirm": "^2.0.8",
57
+ "@synerise/ds-result": "^2.0.8",
58
+ "@synerise/ds-scrollbar": "^2.0.7",
59
+ "@synerise/ds-search": "^2.0.8",
60
+ "@synerise/ds-search-bar": "^2.0.9",
61
+ "@synerise/ds-short-cuts": "^2.0.8",
62
+ "@synerise/ds-skeleton": "^2.0.8",
63
+ "@synerise/ds-tooltip": "^2.0.8",
64
+ "@synerise/ds-typography": "^2.0.8",
65
+ "@synerise/ds-utils": "^2.2.1",
66
66
  "lodash.debounce": "^4.0.8",
67
67
  "react-window": "^1.8.11",
68
68
  "uuid": "^8.3.2"
@@ -77,5 +77,5 @@
77
77
  "styled-components": "^5.3.3",
78
78
  "vitest": "4"
79
79
  },
80
- "gitHead": "6b725db2b0de1a2dfc6e9a3744f6c2fb2a04cc04"
80
+ "gitHead": "ac1a96b3cd66d2836b0639b3d9920fc0ebd7f8f3"
81
81
  }