@wallarm-org/design-system 0.85.1 → 0.87.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.
@@ -20,6 +20,14 @@ interface DropdownMenuProps extends TestableProps {
20
20
  onHighlightChange?: (details: Menu.HighlightChangeDetails) => void;
21
21
  /** Whether selecting an item closes the menu (default true) */
22
22
  closeOnSelect?: boolean;
23
+ /**
24
+ * Override the trigger element's id. Pass the same id to another
25
+ * compound component's `ids.trigger` (e.g. `Tooltip`, `Popover`) to
26
+ * compose their triggers on one element via nested `asChild` without an
27
+ * extra wrapper node — otherwise the outer trigger's id wins and the
28
+ * other component can't find its own anchor.
29
+ */
30
+ ids?: Menu.RootProps['ids'];
23
31
  }
24
32
  export declare const DropdownMenu: FC<DropdownMenuProps>;
25
33
  export {};
@@ -15,7 +15,7 @@ const SUB_POSITIONING = {
15
15
  crossAxis: -9
16
16
  }
17
17
  };
18
- const DropdownMenu = ({ children, open, defaultOpen, onOpenChange, anchorPoint, positioning, highlightedValue, onHighlightChange, closeOnSelect, 'data-testid': testIdProp, ...props })=>{
18
+ const DropdownMenu = ({ children, open, defaultOpen, onOpenChange, anchorPoint, positioning, highlightedValue, onHighlightChange, closeOnSelect, ids, 'data-testid': testIdProp, ...props })=>{
19
19
  const inheritedTestId = useTestId();
20
20
  const testId = testIdProp ?? inheritedTestId;
21
21
  const parent = useDropdownMenuContext();
@@ -45,6 +45,7 @@ const DropdownMenu = ({ children, open, defaultOpen, onOpenChange, anchorPoint,
45
45
  open: open,
46
46
  defaultOpen: defaultOpen,
47
47
  onOpenChange: handleOpenChange,
48
+ ids: ids,
48
49
  lazyMount: true,
49
50
  unmountOnExit: true,
50
51
  children: children
@@ -1,8 +1,17 @@
1
1
  import type { FC, ReactNode } from 'react';
2
+ import { Popover as ArkUiPopover } from '@ark-ui/react';
2
3
  import { type TestableProps } from '../../utils/testId';
3
4
  export interface PopoverProps extends TestableProps {
4
5
  children: ReactNode;
5
6
  open?: boolean;
6
7
  onOpenChange?: (open: boolean) => void;
8
+ /**
9
+ * Override the trigger element's id. Pass the same id to another
10
+ * compound component's `ids.trigger` (e.g. `Tooltip`, `DropdownMenu`) to
11
+ * compose their triggers on one element via nested `asChild` without an
12
+ * extra wrapper node — otherwise the outer trigger's id wins and the
13
+ * other component can't find its own anchor.
14
+ */
15
+ ids?: ArkUiPopover.RootProps['ids'];
7
16
  }
8
17
  export declare const Popover: FC<PopoverProps>;
@@ -7,7 +7,7 @@ const POPOVER_POSITIONING_DEFAULT = {
7
7
  mainAxis: 12
8
8
  }
9
9
  };
10
- const Popover_Popover = ({ children, open, onOpenChange, 'data-testid': testIdProp })=>{
10
+ const Popover_Popover = ({ children, open, onOpenChange, ids, 'data-testid': testIdProp })=>{
11
11
  const inheritedTestId = useTestId();
12
12
  const testId = testIdProp ?? inheritedTestId;
13
13
  const handleOpenChange = ({ open })=>{
@@ -19,6 +19,7 @@ const Popover_Popover = ({ children, open, onOpenChange, 'data-testid': testIdPr
19
19
  positioning: POPOVER_POSITIONING_DEFAULT,
20
20
  open: open,
21
21
  onOpenChange: handleOpenChange,
22
+ ids: ids,
22
23
  lazyMount: true,
23
24
  unmountOnExit: true,
24
25
  children: children
@@ -1,2 +1,5 @@
1
- import type { FC } from 'react';
2
- export declare const SelectEmptyState: FC;
1
+ import type { FC, ReactNode } from 'react';
2
+ export interface SelectEmptyStateProps {
3
+ description?: ReactNode;
4
+ }
5
+ export declare const SelectEmptyState: FC<SelectEmptyStateProps>;
@@ -1,10 +1,10 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { EmptyState, EmptyStateDescription, EmptyStateMessage } from "../EmptyState/index.js";
3
- const SelectEmptyState = ()=>/*#__PURE__*/ jsx(EmptyState, {
3
+ const SelectEmptyState = ({ description = 'No results' })=>/*#__PURE__*/ jsx(EmptyState, {
4
4
  type: "no-results",
5
5
  children: /*#__PURE__*/ jsx(EmptyStateMessage, {
6
6
  children: /*#__PURE__*/ jsx(EmptyStateDescription, {
7
- children: "No results"
7
+ children: description
8
8
  })
9
9
  })
10
10
  });
@@ -4,6 +4,7 @@ export { SelectButton } from './SelectButton';
4
4
  export { SelectButtonTag, SelectButtonTagValue } from './SelectButtonTag';
5
5
  export { SelectClearTrigger } from './SelectClearTrigger';
6
6
  export { SelectContent } from './SelectContent';
7
+ export { SelectEmptyState, type SelectEmptyStateProps } from './SelectEmptyState';
7
8
  export { SelectFooter } from './SelectFooter';
8
9
  export { SelectGroup } from './SelectGroup';
9
10
  export { SelectGroupLabel } from './SelectGroupLabel';
@@ -17,3 +18,4 @@ export { SelectPositioner } from './SelectPositioner';
17
18
  export { SelectSearchInput, type SelectSearchInputProps } from './SelectSearchInput';
18
19
  export { SelectSeparator, type SelectSeparatorProps } from './SelectSeparator';
19
20
  export type { SelectDataItem } from './types';
21
+ export { type UseSelectSearchOptions, type UseSelectSearchResult, useSelectSearch, } from './useSelectSearch';
@@ -4,6 +4,7 @@ export { SelectButton } from "./SelectButton.js";
4
4
  export { SelectButtonTag, SelectButtonTagValue } from "./SelectButtonTag/index.js";
5
5
  export { SelectClearTrigger } from "./SelectClearTrigger.js";
6
6
  export { SelectContent } from "./SelectContent.js";
7
+ export { SelectEmptyState } from "./SelectEmptyState.js";
7
8
  export { SelectFooter } from "./SelectFooter.js";
8
9
  export { SelectGroup } from "./SelectGroup.js";
9
10
  export { SelectGroupLabel } from "./SelectGroupLabel.js";
@@ -16,3 +17,4 @@ export { SelectOptionText } from "./SelectOptionText.js";
16
17
  export { SelectPositioner } from "./SelectPositioner.js";
17
18
  export { SelectSearchInput } from "./SelectSearchInput.js";
18
19
  export { SelectSeparator } from "./SelectSeparator.js";
20
+ export { useSelectSearch } from "./useSelectSearch.js";
@@ -0,0 +1,16 @@
1
+ import type { CollectionItem, ListCollection } from '@ark-ui/react/collection';
2
+ export interface UseSelectSearchOptions<T extends CollectionItem> {
3
+ /**
4
+ * Overrides the default case-insensitive substring match against the
5
+ * item's stringified label. Receives the same `itemString` `collection`
6
+ * already computes via `itemToString`, plus the raw item for matching on
7
+ * other fields (e.g. `description`).
8
+ */
9
+ filterFn?: (itemString: string, item: T, query: string) => boolean;
10
+ }
11
+ export interface UseSelectSearchResult<T extends CollectionItem> {
12
+ searchValue: string;
13
+ onSearchChange: (value: string) => void;
14
+ filteredCollection: ListCollection<T>;
15
+ }
16
+ export declare const useSelectSearch: <T extends CollectionItem>(collection: ListCollection<T>, options?: UseSelectSearchOptions<T>) => UseSelectSearchResult<T>;
@@ -0,0 +1,20 @@
1
+ import { useMemo, useState } from "react";
2
+ const defaultFilterFn = (itemString, query)=>itemString.toLowerCase().includes(query.toLowerCase());
3
+ const useSelectSearch = (collection, options)=>{
4
+ const [searchValue, setSearchValue] = useState('');
5
+ const filterFn = options?.filterFn;
6
+ const filteredCollection = useMemo(()=>{
7
+ if (!searchValue) return collection;
8
+ return collection.filter((itemString, _index, item)=>filterFn ? filterFn(itemString, item, searchValue) : defaultFilterFn(itemString, searchValue));
9
+ }, [
10
+ collection,
11
+ searchValue,
12
+ filterFn
13
+ ]);
14
+ return {
15
+ searchValue,
16
+ onSearchChange: setSearchValue,
17
+ filteredCollection
18
+ };
19
+ };
20
+ export { useSelectSearch };
@@ -1,5 +1,5 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { createContext, useContext, useState } from "react";
2
+ import { createContext, useContext, useId, useState } from "react";
3
3
  import { Check, ChevronsDown, Ellipsis } from "../../../icons/index.js";
4
4
  import { cn } from "../../../utils/cn.js";
5
5
  import { useTestId } from "../../../utils/testId.js";
@@ -22,6 +22,7 @@ const TableColumnMenu = ({ column, children, className, 'data-testid': testIdPro
22
22
  const ctx = useTableContext();
23
23
  const testId = useTestId('column-menu', testIdProp);
24
24
  const [menuOpen, setMenuOpen] = useState(false);
25
+ const triggerId = useId();
25
26
  const isAlwaysPinned = ctx.alwaysPinnedLeft.includes(column.id);
26
27
  const canSort = ctx.sortingEnabled && column.getCanSort();
27
28
  const canPin = ctx.pinningEnabled && column.getCanPin() && !isAlwaysPinned;
@@ -36,9 +37,15 @@ const TableColumnMenu = ({ column, children, className, 'data-testid': testIdPro
36
37
  className: "shrink-0 inline-flex opacity-0 group-hover:opacity-100 has-[>_[data-state=open]]:opacity-100 transition-opacity",
37
38
  children: /*#__PURE__*/ jsxs(Tooltip, {
38
39
  disabled: menuOpen,
40
+ ids: {
41
+ trigger: triggerId
42
+ },
39
43
  children: [
40
44
  /*#__PURE__*/ jsxs(DropdownMenu, {
41
45
  onOpenChange: setMenuOpen,
46
+ ids: {
47
+ trigger: triggerId
48
+ },
42
49
  children: [
43
50
  /*#__PURE__*/ jsx(DropdownMenuTrigger, {
44
51
  asChild: true,
@@ -14,5 +14,13 @@ export interface TooltipProps extends TestableProps {
14
14
  interactive?: boolean;
15
15
  disabled?: boolean;
16
16
  positioning?: ArkUiTooltip.RootProps['positioning'];
17
+ /**
18
+ * Override the trigger element's id. Pass the same id to another
19
+ * compound component's `ids.trigger` (e.g. `Popover`, `DropdownMenu`) to
20
+ * compose their triggers on one element via nested `asChild` without an
21
+ * extra wrapper node — otherwise the outer trigger's id wins and this
22
+ * tooltip can't find its anchor, mispositioning at the viewport origin.
23
+ */
24
+ ids?: ArkUiTooltip.RootProps['ids'];
17
25
  }
18
26
  export declare const Tooltip: FC<TooltipProps>;
@@ -7,7 +7,7 @@ const TOOLTIP_POSITIONING_DEFAULT = {
7
7
  },
8
8
  overflowPadding: 8
9
9
  };
10
- const Tooltip_Tooltip = ({ children, open, defaultOpen, onOpenChange, openDelay, closeDelay, closeOnPointerDown, closeOnEscape, closeOnScroll, interactive, disabled, positioning, 'data-testid': testIdProp })=>{
10
+ const Tooltip_Tooltip = ({ children, open, defaultOpen, onOpenChange, openDelay, closeDelay, closeOnPointerDown, closeOnEscape, closeOnScroll, interactive, disabled, positioning, ids, 'data-testid': testIdProp })=>{
11
11
  const inheritedTestId = useTestId();
12
12
  const testId = testIdProp ?? inheritedTestId;
13
13
  const handleOpenChange = (details)=>{
@@ -27,6 +27,7 @@ const Tooltip_Tooltip = ({ children, open, defaultOpen, onOpenChange, openDelay,
27
27
  interactive: interactive,
28
28
  disabled: disabled,
29
29
  positioning: positioning ?? TOOLTIP_POSITIONING_DEFAULT,
30
+ ids: ids,
30
31
  lazyMount: true,
31
32
  unmountOnExit: true,
32
33
  children: children
package/dist/index.d.ts CHANGED
@@ -62,7 +62,7 @@ export { getResponseCodeCategory, RESPONSE_CODE_COLOR, ResponseCode, type Respon
62
62
  export { ScrollArea, ScrollAreaContent, type ScrollAreaContentProps, ScrollAreaCorner, type ScrollAreaProps, ScrollAreaScrollbar, type ScrollAreaScrollbarProps, ScrollAreaViewport, type ScrollAreaViewportProps, } from './components/ScrollArea';
63
63
  export { SegmentedControl, SegmentedControlButton, type SegmentedControlButtonProps, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, SegmentedControlSeparator, type SegmentedControlSeparatorProps, } from './components/SegmentedControl';
64
64
  export { SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton, } from './components/SegmentedTabs';
65
- export { createListCollection, Select, SelectButton, SelectClearTrigger, SelectContent, type SelectDataItem, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, } from './components/Select';
65
+ export { createListCollection, Select, SelectButton, SelectClearTrigger, SelectContent, type SelectDataItem, SelectEmptyState, type SelectEmptyStateProps, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, type UseSelectSearchOptions, type UseSelectSearchResult, useSelectSearch, } from './components/Select';
66
66
  export { Selection, SelectionAll, type SelectionAllProps, SelectionBulkBar, type SelectionBulkBarPlacement, type SelectionBulkBarProps, type SelectionContextValue, SelectionItem, type SelectionItemProps, type SelectionProps, useSelectionContext, } from './components/Selection';
67
67
  export { Separator, type SeparatorProps } from './components/Separator';
68
68
  export { Skeleton, type SkeletonProps } from './components/Skeleton';
package/dist/index.js CHANGED
@@ -51,7 +51,7 @@ export { RESPONSE_CODE_COLOR, ResponseCode, getResponseCodeCategory } from "./co
51
51
  export { ScrollArea, ScrollAreaContent, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaViewport } from "./components/ScrollArea/index.js";
52
52
  export { SegmentedControl, SegmentedControlButton, SegmentedControlItem, SegmentedControlSeparator } from "./components/SegmentedControl/index.js";
53
53
  export { SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton } from "./components/SegmentedTabs/index.js";
54
- export { Select, SelectButton, SelectClearTrigger, SelectContent, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, createListCollection } from "./components/Select/index.js";
54
+ export { Select, SelectButton, SelectClearTrigger, SelectContent, SelectEmptyState, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, createListCollection, useSelectSearch } from "./components/Select/index.js";
55
55
  export { Selection, SelectionAll, SelectionBulkBar, SelectionItem, useSelectionContext } from "./components/Selection/index.js";
56
56
  export { Separator } from "./components/Separator/index.js";
57
57
  export { Skeleton } from "./components/Skeleton/index.js";
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.85.0",
3
- "generatedAt": "2026-08-06T10:28:02.611Z",
2
+ "version": "0.86.0",
3
+ "generatedAt": "2026-08-07T08:01:47.254Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Accordion",
@@ -5665,6 +5665,12 @@
5665
5665
  "type": "boolean | undefined",
5666
5666
  "required": false,
5667
5667
  "description": "Whether selecting an item closes the menu (default true)"
5668
+ },
5669
+ {
5670
+ "name": "ids",
5671
+ "type": "complex",
5672
+ "required": false,
5673
+ "description": "Override the trigger element's id. Pass the same id to another\ncompound component's `ids.trigger` (e.g. `Tooltip`, `Popover`) to\ncompose their triggers on one element via nested `asChild` without an\nextra wrapper node — otherwise the outer trigger's id wins and the\nother component can't find its own anchor."
5668
5674
  }
5669
5675
  ]
5670
5676
  },
@@ -48333,6 +48339,10 @@
48333
48339
  "name": "Basic",
48334
48340
  "code": "() => (\n <Popover data-testid='popover'>\n <PopoverTrigger asChild>\n <Button variant='outline' color='neutral'>\n Click me\n </Button>\n </PopoverTrigger>\n <PopoverContent>\n <VStack gap={12}>\n <Text size='sm'>This action will remove all and every bit!</Text>\n\n <Alert color='warning'>\n <AlertIcon />\n <AlertContent>\n <AlertTitle>Message goes here</AlertTitle>\n <AlertDescription>\n {'Description goes here \\nDescription goes here \\nDescription goes here'}\n </AlertDescription>\n <AlertControls>\n <Button variant='secondary' color='neutral' size='small'>\n Button\n </Button>\n <Button variant='secondary' color='neutral' size='small'>\n Button\n </Button>\n </AlertControls>\n </AlertContent>\n </Alert>\n </VStack>\n </PopoverContent>\n </Popover>\n)"
48335
48341
  },
48342
+ {
48343
+ "name": "WithTooltip",
48344
+ "code": "() => {\n const triggerId = useId();\n const [open, setOpen] = useState(false);\n\n return (\n <Popover\n data-testid='with-tooltip-popover'\n open={open}\n onOpenChange={setOpen}\n ids={{ trigger: triggerId }}\n >\n {/* Sharing `ids.trigger` lets both machines resolve the same DOM node as\n their own anchor, so the tooltip positions correctly with no wrapper. */}\n <Tooltip data-testid='with-tooltip-tooltip' disabled={open} ids={{ trigger: triggerId }}>\n <PopoverTrigger asChild>\n <TooltipTrigger asChild>\n <Button data-testid='popover-tooltip-trigger' variant='outline' color='neutral'>\n Actions\n </Button>\n </TooltipTrigger>\n </PopoverTrigger>\n <TooltipContent>More actions</TooltipContent>\n </Tooltip>\n <PopoverContent>\n <Text size='sm'>Popover content</Text>\n </PopoverContent>\n </Popover>\n );\n}"
48345
+ },
48336
48346
  {
48337
48347
  "name": "MinMaxWidth",
48338
48348
  "code": "() => (\n <VStack gap={32}>\n <Popover>\n <PopoverTrigger asChild>\n <Button variant='outline' color='neutral'>\n Min Width\n </Button>\n </PopoverTrigger>\n <PopoverContent>\n <Text size='xs' weight='medium'>\n Lorem Ipsum\n </Text>\n </PopoverContent>\n </Popover>\n\n <Popover>\n <PopoverTrigger asChild>\n <Button variant='outline' color='neutral'>\n Max Width\n </Button>\n </PopoverTrigger>\n <PopoverContent>\n <Text size='xs' weight='medium'>\n Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has\n been the industry's standard dummy text ever since the 1500s, when an unknown printer took\n a galley of type and scrambled it to make a type specimen book. It has survived not only\n five centuries, but also the leap into electronic typesetting, remaining essentially\n unchanged. It was popularised in the 1960s with the release of Letraset sheets containing\n Lorem Ipsum passages, and more recently with desktop publishing software like Aldus\n PageMaker including versions of Lorem Ipsum. Why do we use it? It is a long established\n fact that a reader will be distracted by the readable content of a page when looking at\n its layout.\n </Text>\n </PopoverContent>\n </Popover>\n </VStack>\n)"
@@ -53942,6 +53952,17 @@
53942
53952
  "props": [],
53943
53953
  "variants": [],
53944
53954
  "subComponents": [
53955
+ {
53956
+ "name": "SelectEmptyState",
53957
+ "props": [
53958
+ {
53959
+ "name": "description",
53960
+ "type": "ReactNode",
53961
+ "required": false,
53962
+ "defaultValue": "No results"
53963
+ }
53964
+ ]
53965
+ },
53945
53966
  {
53946
53967
  "name": "SelectSearchInput",
53947
53968
  "props": [
@@ -54544,7 +54565,7 @@
54544
54565
  },
54545
54566
  {
54546
54567
  "name": "WithSearch",
54547
- "code": "() => {\n const [searchValue, setSearchValue] = useState<string>('');\n\n const collection = createListCollection({\n items: skillsWithoutIcons,\n groupBy: item => item.category ?? '',\n itemToString: item => item.label,\n });\n\n return (\n <div className='w-300'>\n <Select collection={collection}>\n <SelectButton />\n\n <SelectPositioner>\n <SelectHeader>\n <SelectSearchInput value={searchValue} onChange={setSearchValue} />\n </SelectHeader>\n\n <SelectContent>\n {collection\n .filter(skill => skill.toLowerCase().includes(searchValue.toLowerCase()))\n .group()\n .map(([category, group], index) => (\n <SelectGroup key={category}>\n <SelectGroupLabel>\n {category}\n {index === 0 && <SelectClearTrigger>Clear all</SelectClearTrigger>}\n </SelectGroupLabel>\n {group.map(skill => (\n <SelectOption key={skill.value} item={skill}>\n <SelectOptionText>{skill.label}</SelectOptionText>\n {skill.description && (\n <SelectOptionDescription>{skill.description}</SelectOptionDescription>\n )}\n <SelectOptionIndicator />\n </SelectOption>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n\n <SelectFooter>\n <HStack justify='between'>\n <Button variant='ghost' color='neutral' size='small'>\n <SquareArrowOutUpRight />\n See all\n </Button>\n\n <HStack justify='end'>\n <Button variant='ghost' color='neutral' size='small'>\n Cancel\n </Button>\n\n <Button variant='primary' color='brand' size='small'>\n Apply\n </Button>\n </HStack>\n </HStack>\n </SelectFooter>\n </SelectPositioner>\n </Select>\n </div>\n );\n}"
54568
+ "code": "() => {\n const collection = createListCollection({\n items: skillsWithoutIcons,\n groupBy: item => item.category ?? '',\n itemToString: item => item.label,\n });\n\n const { searchValue, onSearchChange, filteredCollection } = useSelectSearch(collection);\n\n return (\n <div className='w-300'>\n <Select collection={collection}>\n <SelectButton />\n\n <SelectPositioner>\n <SelectHeader>\n <SelectSearchInput value={searchValue} onChange={onSearchChange} />\n </SelectHeader>\n\n <SelectContent>\n {filteredCollection.size === 0 ? (\n <SelectEmptyState description={`No results for \"${searchValue}\"`} />\n ) : (\n filteredCollection.group().map(([category, group], index) => (\n <SelectGroup key={category}>\n <SelectGroupLabel>\n {category}\n {index === 0 && <SelectClearTrigger>Clear all</SelectClearTrigger>}\n </SelectGroupLabel>\n {group.map(skill => (\n <SelectOption key={skill.value} item={skill}>\n <SelectOptionText>{skill.label}</SelectOptionText>\n {skill.description && (\n <SelectOptionDescription>{skill.description}</SelectOptionDescription>\n )}\n <SelectOptionIndicator />\n </SelectOption>\n ))}\n </SelectGroup>\n ))\n )}\n </SelectContent>\n\n <SelectFooter>\n <HStack justify='between'>\n <Button variant='ghost' color='neutral' size='small'>\n <SquareArrowOutUpRight />\n See all\n </Button>\n\n <HStack justify='end'>\n <Button variant='ghost' color='neutral' size='small'>\n Cancel\n </Button>\n\n <Button variant='primary' color='brand' size='small'>\n Apply\n </Button>\n </HStack>\n </HStack>\n </SelectFooter>\n </SelectPositioner>\n </Select>\n </div>\n );\n}"
54548
54569
  },
54549
54570
  {
54550
54571
  "name": "WithFormField",
@@ -82150,6 +82171,12 @@
82150
82171
  "name": "positioning",
82151
82172
  "type": "PositioningOptions | undefined",
82152
82173
  "required": false
82174
+ },
82175
+ {
82176
+ "name": "ids",
82177
+ "type": "Partial<{ trigger: string | ((value?: string | undefined) => string); content: string; arrow: string; positioner: string; }> | undefined",
82178
+ "required": false,
82179
+ "description": "Override the trigger element's id. Pass the same id to another\ncompound component's `ids.trigger` (e.g. `Popover`, `DropdownMenu`) to\ncompose their triggers on one element via nested `asChild` without an\nextra wrapper node — otherwise the outer trigger's id wins and this\ntooltip can't find its anchor, mispositioning at the viewport origin."
82153
82180
  }
82154
82181
  ],
82155
82182
  "variants": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "0.85.1",
3
+ "version": "0.87.0",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",