@choice-ui/react 1.5.3 → 1.5.4

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.
Files changed (31) hide show
  1. package/dist/components/combobox/dist/index.d.ts +2 -1
  2. package/dist/components/combobox/dist/index.js +7 -6
  3. package/dist/components/combobox/src/combobox.d.ts +2 -1
  4. package/dist/components/combobox/src/combobox.js +7 -6
  5. package/dist/components/context-menu/dist/index.d.ts +2 -1
  6. package/dist/components/context-menu/src/context-menu.d.ts +2 -1
  7. package/dist/components/context-menu/src/context-menu.js +8 -7
  8. package/dist/components/dropdown/dist/index.d.ts +2 -1
  9. package/dist/components/dropdown/dist/index.js +8 -7
  10. package/dist/components/dropdown/src/dropdown.d.ts +2 -1
  11. package/dist/components/dropdown/src/dropdown.js +8 -7
  12. package/dist/components/menus/dist/index.d.ts +6 -1
  13. package/dist/components/menus/dist/index.js +25 -1
  14. package/dist/components/menus/src/components/index.d.ts +1 -0
  15. package/dist/components/menus/src/components/menu-empty.d.ts +4 -0
  16. package/dist/components/menus/src/components/menu-empty.js +20 -0
  17. package/dist/components/menus/src/index.d.ts +1 -1
  18. package/dist/components/menus/src/tv.d.ts +25 -0
  19. package/dist/components/menus/src/tv.js +11 -0
  20. package/dist/components/multi-select/dist/index.d.ts +2 -1
  21. package/dist/components/multi-select/dist/index.js +13 -6
  22. package/dist/components/multi-select/src/multi-select.d.ts +2 -1
  23. package/dist/components/multi-select/src/multi-select.js +8 -4
  24. package/dist/components/multi-select/src/utils/extract-options.d.ts +16 -2
  25. package/dist/components/multi-select/src/utils/extract-options.js +6 -3
  26. package/dist/components/select/dist/index.d.ts +2 -1
  27. package/dist/components/select/dist/index.js +13 -6
  28. package/dist/components/select/src/select.d.ts +2 -1
  29. package/dist/components/select/src/select.js +13 -6
  30. package/dist/index.js +2 -0
  31. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuDivider, MenuInput, MenuContextItem, MenuContextLabel, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuDivider, MenuEmpty, MenuInput, MenuContextItem, MenuContextLabel, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React, HTMLProps, ReactNode } from 'react';
4
4
  interface ComboboxTriggerProps extends Omit<HTMLProps<HTMLInputElement>, "size" | "onChange"> {
@@ -69,6 +69,7 @@ interface ComboboxComponentType extends React.ForwardRefExoticComponent<Combobox
69
69
  Button: typeof MenuButton;
70
70
  Content: typeof MenuContextContent;
71
71
  Divider: typeof MenuDivider;
72
+ Empty: typeof MenuEmpty;
72
73
  Input: typeof MenuInput;
73
74
  Item: typeof MenuContextItem;
74
75
  Label: typeof MenuContextLabel;
@@ -1,4 +1,4 @@
1
- import { MenuValue, MenuContextContent, MenuInput, MenuButton, MenuContextLabel, MenuDivider, MenuContextItem, useMenuBaseRefs, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
1
+ import { MenuValue, MenuContextLabel, MenuContextItem, MenuInput, MenuEmpty, MenuDivider, MenuContextContent, MenuButton, useMenuBaseRefs, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
2
2
  import { useFloatingParentNodeId, FloatingTree, useFloatingTree, useFloatingNodeId, useFloating, offset, flip, shift, size, autoUpdate, useRole, useDismiss, useListNavigation, useInteractions, FloatingNode, FloatingList, FloatingPortal, FloatingOverlay, FloatingFocusManager } from "@floating-ui/react";
3
3
  import { memo, forwardRef, useState, useRef, useId, useEffect, useMemo, Children, isValidElement, cloneElement } from "react";
4
4
  import { useEventCallback } from "usehooks-ts";
@@ -620,13 +620,14 @@ var BaseCombobox = memo(function Combobox(props) {
620
620
  });
621
621
  var Combobox2 = Object.assign(BaseCombobox, {
622
622
  displayName: "Combobox",
623
- Trigger: ComboboxTrigger,
624
- Item: MenuContextItem,
625
- Divider: MenuDivider,
626
- Label: MenuContextLabel,
627
623
  Button: MenuButton,
628
- Input: MenuInput,
629
624
  Content: MenuContextContent,
625
+ Divider: MenuDivider,
626
+ Empty: MenuEmpty,
627
+ Input: MenuInput,
628
+ Item: MenuContextItem,
629
+ Label: MenuContextLabel,
630
+ Trigger: ComboboxTrigger,
630
631
  Value: MenuValue
631
632
  });
632
633
  export {
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuInput, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuEmpty, MenuInput, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React } from 'react';
4
4
  import { ComboboxTrigger } from './combobox-trigger';
@@ -50,6 +50,7 @@ interface ComboboxComponentType extends React.ForwardRefExoticComponent<Combobox
50
50
  Button: typeof MenuButton;
51
51
  Content: typeof MenuContextContent;
52
52
  Divider: typeof MenuDivider;
53
+ Empty: typeof MenuEmpty;
53
54
  Input: typeof MenuInput;
54
55
  Item: typeof MenuContextItem;
55
56
  Label: typeof MenuContextLabel;
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { MenuValue, MenuContextContent, MenuInput, MenuButton, MenuContextLabel, MenuDivider, MenuContextItem, useMenuBaseRefs, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
2
+ import { MenuValue, MenuContextLabel, MenuContextItem, MenuInput, MenuEmpty, MenuDivider, MenuContextContent, MenuButton, useMenuBaseRefs, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
3
  import { useFloatingParentNodeId, FloatingTree, useFloatingTree, useFloatingNodeId, useFloating, offset, flip, shift, size, autoUpdate, useRole, useDismiss, useListNavigation, useInteractions, FloatingNode, FloatingList, FloatingPortal, FloatingOverlay, FloatingFocusManager } from "@floating-ui/react";
4
4
  import { memo, useRef, useState, useId, useEffect, useMemo, Children, isValidElement, cloneElement } from "react";
5
5
  import { useEventCallback } from "usehooks-ts";
@@ -411,13 +411,14 @@ const BaseCombobox = memo(function Combobox2(props) {
411
411
  });
412
412
  const Combobox = Object.assign(BaseCombobox, {
413
413
  displayName: "Combobox",
414
- Trigger: ComboboxTrigger,
415
- Item: MenuContextItem,
416
- Divider: MenuDivider,
417
- Label: MenuContextLabel,
418
414
  Button: MenuButton,
419
- Input: MenuInput,
420
415
  Content: MenuContextContent,
416
+ Divider: MenuDivider,
417
+ Empty: MenuEmpty,
418
+ Input: MenuInput,
419
+ Item: MenuContextItem,
420
+ Label: MenuContextLabel,
421
+ Trigger: ComboboxTrigger,
421
422
  Value: MenuValue
422
423
  });
423
424
  export {
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuDivider, MenuInput, MenuContextItem, MenuContextLabel, MenuSearch, MenuContextSubTrigger, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuDivider, MenuEmpty, MenuInput, MenuContextItem, MenuContextLabel, MenuSearch, MenuContextSubTrigger, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React, HTMLProps, ReactNode } from 'react';
4
4
  interface ContextMenuProps extends HTMLProps<HTMLDivElement> {
@@ -25,6 +25,7 @@ interface ContextMenuComponentProps extends React.ForwardRefExoticComponent<Cont
25
25
  Button: typeof MenuButton;
26
26
  Content: typeof MenuContextContent;
27
27
  Divider: typeof MenuDivider;
28
+ Empty: typeof MenuEmpty;
28
29
  Input: typeof MenuInput;
29
30
  Item: typeof MenuContextItem;
30
31
  Label: typeof MenuContextLabel;
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuContextSubTrigger, MenuDivider, MenuInput, MenuSearch, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuContextSubTrigger, MenuDivider, MenuEmpty, MenuInput, MenuSearch, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React, HTMLProps, ReactNode } from 'react';
4
4
  export interface ContextMenuProps extends HTMLProps<HTMLDivElement> {
@@ -25,6 +25,7 @@ interface ContextMenuComponentProps extends React.ForwardRefExoticComponent<Cont
25
25
  Button: typeof MenuButton;
26
26
  Content: typeof MenuContextContent;
27
27
  Divider: typeof MenuDivider;
28
+ Empty: typeof MenuEmpty;
28
29
  Input: typeof MenuInput;
29
30
  Item: typeof MenuContextItem;
30
31
  Label: typeof MenuContextLabel;
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { MenuValue, MenuContextContent, MenuInput, MenuButton, MenuSearch, MenuContextLabel, MenuDivider, MenuContextSubTrigger, MenuContextItem, useMenuBaseRefs, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
2
+ import { MenuValue, MenuContextSubTrigger, MenuSearch, MenuContextLabel, MenuContextItem, MenuInput, MenuEmpty, MenuDivider, MenuContextContent, MenuButton, useMenuBaseRefs, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
3
  import { useFloatingParentNodeId, FloatingTree, offset, flip, shift, size, useFloating, autoUpdate, useHover, safePolygon, useClick, useRole, useDismiss, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingList, FloatingPortal, FloatingOverlay, FloatingFocusManager } from "@floating-ui/react";
4
4
  import React, { memo, useContext, useCallback, useRef, useState, useId, useMemo, useEffect, cloneElement } from "react";
5
5
  import { useEventCallback } from "usehooks-ts";
@@ -382,15 +382,16 @@ const BaseContextMenu = memo(function ContextMenu2(props) {
382
382
  });
383
383
  const ContextMenu = Object.assign(BaseContextMenu, {
384
384
  displayName: "ContextMenu",
385
- Trigger: ContextMenuTrigger,
386
- Item: MenuContextItem,
387
- SubTrigger: MenuContextSubTrigger,
385
+ Button: MenuButton,
386
+ Content: MenuContextContent,
388
387
  Divider: MenuDivider,
388
+ Empty: MenuEmpty,
389
+ Input: MenuInput,
390
+ Item: MenuContextItem,
389
391
  Label: MenuContextLabel,
390
392
  Search: MenuSearch,
391
- Button: MenuButton,
392
- Input: MenuInput,
393
- Content: MenuContextContent,
393
+ SubTrigger: MenuContextSubTrigger,
394
+ Trigger: ContextMenuTrigger,
394
395
  Value: MenuValue
395
396
  });
396
397
  export {
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuDivider, MenuInput, MenuContextItem, MenuContextLabel, MenuSearch, MenuContextSubTrigger, MenuTrigger, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuDivider, MenuEmpty, MenuInput, MenuContextItem, MenuContextLabel, MenuSearch, MenuContextSubTrigger, MenuTrigger, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React } from 'react';
4
4
  interface DropdownProps {
@@ -31,6 +31,7 @@ interface DropdownComponentType extends React.ForwardRefExoticComponent<Dropdown
31
31
  Button: typeof MenuButton;
32
32
  Content: typeof MenuContextContent;
33
33
  Divider: typeof MenuDivider;
34
+ Empty: typeof MenuEmpty;
34
35
  Input: typeof MenuInput;
35
36
  Item: typeof MenuContextItem;
36
37
  Label: typeof MenuContextLabel;
@@ -1,5 +1,5 @@
1
1
  import { Slot } from "../../slot/dist/index.js";
2
- import { MenuValue, MenuContextContent, MenuInput, MenuButton, MenuSearch, MenuContextLabel, MenuDivider, MenuContextSubTrigger, MenuContextItem, MenuTrigger, useMenuBaseRefs, MenuContext, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuScrollArrow } from "../../menus/dist/index.js";
2
+ import { MenuValue, MenuTrigger, MenuContextSubTrigger, MenuSearch, MenuContextLabel, MenuContextItem, MenuInput, MenuEmpty, MenuDivider, MenuContextContent, MenuButton, useMenuBaseRefs, MenuContext, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuScrollArrow } from "../../menus/dist/index.js";
3
3
  import { useFloatingParentNodeId, FloatingTree, useFloating, offset, flip, shift, size, autoUpdate, useHover, safePolygon, useClick, useRole, useDismiss, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingList, FloatingPortal, FloatingOverlay, FloatingFocusManager } from "@floating-ui/react";
4
4
  import { memo, useState, useId, useContext, useRef, useMemo, useEffect, Children, isValidElement, cloneElement } from "react";
5
5
  import { useEventCallback } from "usehooks-ts";
@@ -383,15 +383,16 @@ var BaseDropdown = memo(function Dropdown(props) {
383
383
  });
384
384
  var Dropdown2 = Object.assign(BaseDropdown, {
385
385
  displayName: "Dropdown",
386
- Trigger: MenuTrigger,
387
- Item: MenuContextItem,
388
- SubTrigger: MenuContextSubTrigger,
386
+ Button: MenuButton,
387
+ Content: MenuContextContent,
389
388
  Divider: MenuDivider,
389
+ Empty: MenuEmpty,
390
+ Input: MenuInput,
391
+ Item: MenuContextItem,
390
392
  Label: MenuContextLabel,
391
393
  Search: MenuSearch,
392
- Button: MenuButton,
393
- Input: MenuInput,
394
- Content: MenuContextContent,
394
+ SubTrigger: MenuContextSubTrigger,
395
+ Trigger: MenuTrigger,
395
396
  Value: MenuValue
396
397
  });
397
398
  export {
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuContextSubTrigger, MenuDivider, MenuInput, MenuSearch, MenuTrigger, MenuValue } from '../../menus/src';
1
+ import { MenuButton, MenuContextContent, MenuContextItem, MenuContextLabel, MenuContextSubTrigger, MenuDivider, MenuEmpty, MenuInput, MenuSearch, MenuTrigger, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
3
3
  import { default as React } from 'react';
4
4
  export interface DropdownProps {
@@ -31,6 +31,7 @@ interface DropdownComponentType extends React.ForwardRefExoticComponent<Dropdown
31
31
  Button: typeof MenuButton;
32
32
  Content: typeof MenuContextContent;
33
33
  Divider: typeof MenuDivider;
34
+ Empty: typeof MenuEmpty;
34
35
  Input: typeof MenuInput;
35
36
  Item: typeof MenuContextItem;
36
37
  Label: typeof MenuContextLabel;
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Slot } from "../../slot/dist/index.js";
3
- import { MenuValue, MenuContextContent, MenuInput, MenuButton, MenuSearch, MenuContextLabel, MenuDivider, MenuContextSubTrigger, MenuContextItem, MenuTrigger, useMenuBaseRefs, MenuContext, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuScrollArrow } from "../../menus/dist/index.js";
3
+ import { MenuValue, MenuTrigger, MenuContextSubTrigger, MenuSearch, MenuContextLabel, MenuContextItem, MenuInput, MenuEmpty, MenuDivider, MenuContextContent, MenuButton, useMenuBaseRefs, MenuContext, useMenuTree, useMenuScrollHeight, useMenuScroll, MenuScrollArrow } from "../../menus/dist/index.js";
4
4
  import { useFloatingParentNodeId, FloatingTree, useFloating, offset, flip, shift, size, autoUpdate, useHover, safePolygon, useClick, useRole, useDismiss, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingList, FloatingPortal, FloatingOverlay, FloatingFocusManager } from "@floating-ui/react";
5
5
  import { memo, useState, useId, useContext, useRef, useMemo, useEffect, Children, isValidElement, cloneElement } from "react";
6
6
  import { useEventCallback } from "usehooks-ts";
@@ -383,15 +383,16 @@ const BaseDropdown = memo(function Dropdown2(props) {
383
383
  });
384
384
  const Dropdown = Object.assign(BaseDropdown, {
385
385
  displayName: "Dropdown",
386
- Trigger: MenuTrigger,
387
- Item: MenuContextItem,
388
- SubTrigger: MenuContextSubTrigger,
386
+ Button: MenuButton,
387
+ Content: MenuContextContent,
389
388
  Divider: MenuDivider,
389
+ Empty: MenuEmpty,
390
+ Input: MenuInput,
391
+ Item: MenuContextItem,
390
392
  Label: MenuContextLabel,
391
393
  Search: MenuSearch,
392
- Button: MenuButton,
393
- Input: MenuInput,
394
- Content: MenuContextContent,
394
+ SubTrigger: MenuContextSubTrigger,
395
+ Trigger: MenuTrigger,
395
396
  Value: MenuValue
396
397
  });
397
398
  export {
@@ -19,6 +19,11 @@ declare const MenuCheckbox: react.NamedExoticComponent<MenuCheckboxProps>;
19
19
 
20
20
  declare const MenuDivider: react.ForwardRefExoticComponent<Omit<HTMLProps<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
21
21
 
22
+ interface MenuEmptyProps extends React.HTMLAttributes<HTMLDivElement> {
23
+ children?: React.ReactNode;
24
+ }
25
+ declare const MenuEmpty: react.NamedExoticComponent<MenuEmptyProps>;
26
+
22
27
  interface MenuItemProps extends React.HTMLAttributes<HTMLButtonElement> {
23
28
  active?: boolean;
24
29
  children?: ReactNode;
@@ -480,4 +485,4 @@ declare const MenuContextLabel: react.NamedExoticComponent<MenuLabelProps>;
480
485
 
481
486
  declare const MenuContextSubTrigger: react.MemoExoticComponent<react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<HTMLButtonElement>>>;
482
487
 
483
- export { MenuButton, MenuCheckbox, type MenuCheckboxProps, MenuContext, MenuContextContent, MenuContextItem, type MenuContextItemProps, MenuContextLabel, MenuContextSubTrigger, type MenuContextType, MenuDivider, MenuInput, MenuItem, type MenuItemProps, MenuLabel, type MenuLabelProps, MenuScrollArrow, type MenuScrollArrowProps, MenuSearch, MenuSearchEmpty, MenuTrigger, type MenuTriggerProps, MenuValue, Menus, type MenusProps, useMenuBaseRefs, useMenuChildren, useMenuFloating, useMenuRefs, useMenuScroll, useMenuScrollHeight, useMenuSelection, useMenuState, useMenuTree };
488
+ export { MenuButton, MenuCheckbox, type MenuCheckboxProps, MenuContext, MenuContextContent, MenuContextItem, type MenuContextItemProps, MenuContextLabel, MenuContextSubTrigger, type MenuContextType, MenuDivider, MenuEmpty, MenuInput, MenuItem, type MenuItemProps, MenuLabel, type MenuLabelProps, MenuScrollArrow, type MenuScrollArrowProps, MenuSearch, MenuSearchEmpty, MenuTrigger, type MenuTriggerProps, MenuValue, Menus, type MenusProps, useMenuBaseRefs, useMenuChildren, useMenuFloating, useMenuRefs, useMenuScroll, useMenuScrollHeight, useMenuSelection, useMenuState, useMenuTree };
@@ -1,5 +1,5 @@
1
1
  import { Button } from "../../button/dist/index.js";
2
- import React, { forwardRef, memo, useCallback, useContext, createContext, useMemo, startTransition, useRef, Children, isValidElement, Fragment as Fragment$1, useState, useEffect } from "react";
2
+ import React, { forwardRef, memo, useContext, createContext, useMemo, startTransition, useCallback, useRef, Children, isValidElement, Fragment as Fragment$1, useState, useEffect } from "react";
3
3
  import { jsx, Fragment, jsxs } from "react/jsx-runtime";
4
4
  import { Check, ChevronRightSmall, ChevronDownSmall, ChevronUpSmall } from "@choiceform/icons-react";
5
5
  import { Kbd } from "../../kbd/dist/index.js";
@@ -192,6 +192,16 @@ var MenuSearchEmptyTv = tcv({
192
192
  text: "text-white/50"
193
193
  }
194
194
  });
195
+ var MenuEmptyTv = tcv({
196
+ slots: {
197
+ root: [
198
+ "flex items-center justify-center py-3 px-2",
199
+ "text-body-medium text-secondary-foreground",
200
+ "group-data-[variant=light]/menus:text-gray-500",
201
+ "group-data-[variant=default]/menus:text-white/50"
202
+ ]
203
+ }
204
+ });
195
205
  var MenuLabelTv = tcv({
196
206
  base: "flex h-6 w-full flex-none items-center gap-2 opacity-50",
197
207
  variants: {
@@ -322,6 +332,19 @@ var MenuDivider = forwardRef((props, ref) => {
322
332
  );
323
333
  });
324
334
  MenuDivider.displayName = "MenuDivider";
335
+ var MenuEmpty = memo(function MenuEmpty2(props) {
336
+ const { children, className, ...rest } = props;
337
+ const tv = MenuEmptyTv();
338
+ return /* @__PURE__ */ jsx(
339
+ "div",
340
+ {
341
+ ...rest,
342
+ className: tcx(tv.root(), className),
343
+ children
344
+ }
345
+ );
346
+ });
347
+ MenuEmpty.displayName = "MenuEmpty";
325
348
  var MenuItem = memo(
326
349
  forwardRef((props, ref) => {
327
350
  const {
@@ -1125,6 +1148,7 @@ export {
1125
1148
  MenuContextLabel,
1126
1149
  MenuContextSubTrigger,
1127
1150
  MenuDivider,
1151
+ MenuEmpty,
1128
1152
  MenuInput,
1129
1153
  MenuItem,
1130
1154
  MenuLabel,
@@ -1,6 +1,7 @@
1
1
  export * from './menu-button';
2
2
  export * from './menu-checkbox';
3
3
  export * from './menu-divider';
4
+ export * from './menu-empty';
4
5
  export * from './menu-item';
5
6
  export * from './menu-label';
6
7
  export * from './menu-scroll-arrow';
@@ -0,0 +1,4 @@
1
+ export interface MenuEmptyProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ children?: React.ReactNode;
3
+ }
4
+ export declare const MenuEmpty: import('react').NamedExoticComponent<MenuEmptyProps>;
@@ -0,0 +1,20 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { MenuEmptyTv } from "../tv.js";
4
+ import { tcx } from "../../../../shared/utils/tcx/tcx.js";
5
+ const MenuEmpty = memo(function MenuEmpty2(props) {
6
+ const { children, className, ...rest } = props;
7
+ const tv = MenuEmptyTv();
8
+ return /* @__PURE__ */ jsx(
9
+ "div",
10
+ {
11
+ ...rest,
12
+ className: tcx(tv.root(), className),
13
+ children
14
+ }
15
+ );
16
+ });
17
+ MenuEmpty.displayName = "MenuEmpty";
18
+ export {
19
+ MenuEmpty
20
+ };
@@ -1,4 +1,4 @@
1
- export { MenuButton, MenuCheckbox, MenuDivider, MenuInput, MenuItem, MenuLabel, MenuSearch, MenuSearchEmpty, MenuValue, MenuTrigger, MenuScrollArrow, } from './components';
1
+ export { MenuButton, MenuCheckbox, MenuDivider, MenuEmpty, MenuInput, MenuItem, MenuLabel, MenuSearch, MenuSearchEmpty, MenuValue, MenuTrigger, MenuScrollArrow, } from './components';
2
2
  export { Menus } from './menus';
3
3
  export { useMenuBaseRefs, useMenuChildren, useMenuFloating, useMenuRefs, useMenuScroll, useMenuScrollHeight, useMenuSelection, useMenuState, useMenuTree, } from './hooks';
4
4
  export { MenuContext, MenuContextSubTrigger, MenuContextContent, MenuContextItem, MenuContextLabel, } from './context';
@@ -339,6 +339,31 @@ export declare const MenuSearchEmptyTv: import('tailwind-variants').TVReturnType
339
339
  root: string;
340
340
  text: string;
341
341
  }, undefined, unknown, unknown, undefined>>;
342
+ export declare const MenuEmptyTv: import('tailwind-variants').TVReturnType<{
343
+ [key: string]: {
344
+ [key: string]: import('tailwind-merge').ClassNameValue | {
345
+ root?: import('tailwind-merge').ClassNameValue;
346
+ };
347
+ };
348
+ } | {
349
+ [x: string]: {
350
+ [x: string]: import('tailwind-merge').ClassNameValue | {
351
+ root?: import('tailwind-merge').ClassNameValue;
352
+ };
353
+ };
354
+ } | {}, {
355
+ root: string[];
356
+ }, undefined, {
357
+ [key: string]: {
358
+ [key: string]: import('tailwind-merge').ClassNameValue | {
359
+ root?: import('tailwind-merge').ClassNameValue;
360
+ };
361
+ };
362
+ } | {}, {
363
+ root: string[];
364
+ }, import('tailwind-variants').TVReturnType<unknown, {
365
+ root: string[];
366
+ }, undefined, unknown, unknown, undefined>>;
342
367
  export declare const MenuLabelTv: import('tailwind-variants').TVReturnType<{
343
368
  selection: {
344
369
  true: string;
@@ -180,6 +180,16 @@ const MenuSearchEmptyTv = tcv({
180
180
  text: "text-white/50"
181
181
  }
182
182
  });
183
+ const MenuEmptyTv = tcv({
184
+ slots: {
185
+ root: [
186
+ "flex items-center justify-center py-3 px-2",
187
+ "text-body-medium text-secondary-foreground",
188
+ "group-data-[variant=light]/menus:text-gray-500",
189
+ "group-data-[variant=default]/menus:text-white/50"
190
+ ]
191
+ }
192
+ });
183
193
  const MenuLabelTv = tcv({
184
194
  base: "flex h-6 w-full flex-none items-center gap-2 opacity-50",
185
195
  variants: {
@@ -278,6 +288,7 @@ export {
278
288
  MenuButtonTv,
279
289
  MenuCheckboxTv,
280
290
  MenuDividerTv,
291
+ MenuEmptyTv,
281
292
  MenuItemTv,
282
293
  MenuLabelTv,
283
294
  MenuScrollArrowTv,
@@ -1,5 +1,5 @@
1
1
  import { ChipProps } from '../../chip/src';
2
- import { MenuContextContent, MenuDivider, MenuContextItem, MenuContextLabel, MenuValue } from '../../menus/src';
2
+ import { MenuContextContent, MenuDivider, MenuEmpty, MenuContextItem, MenuContextLabel, MenuValue } from '../../menus/src';
3
3
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
4
4
  import { default as React__default, HTMLProps, ReactNode } from 'react';
5
5
  import * as React$1 from 'react';
@@ -67,6 +67,7 @@ interface MultiSelectProps {
67
67
  interface MultiSelectComponentType extends React__default.ForwardRefExoticComponent<MultiSelectProps & React__default.RefAttributes<HTMLDivElement>> {
68
68
  Content: typeof MenuContextContent;
69
69
  Divider: typeof MenuDivider;
70
+ Empty: typeof MenuEmpty;
70
71
  Item: typeof MenuContextItem;
71
72
  Label: typeof MenuContextLabel;
72
73
  Trigger: typeof MultiSelectTrigger;
@@ -1,5 +1,5 @@
1
1
  import { Slot } from "../../slot/dist/index.js";
2
- import { MenuValue, MenuContextContent, MenuContextLabel, MenuDivider, MenuContextItem, useMenuBaseRefs, useMenuScroll, useMenuScrollHeight, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
2
+ import { MenuValue, MenuContextLabel, MenuContextItem, MenuEmpty, MenuDivider, MenuContextContent, useMenuBaseRefs, useMenuScroll, useMenuScrollHeight, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
3
  import { useFloatingParentNodeId, FloatingTree, useFloatingNodeId, useFloatingTree, offset, flip, shift, size, useFloating, autoUpdate, useClick, useDismiss, useRole, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList } from "@floating-ui/react";
4
4
  import React, { memo, forwardRef, useRef, useCallback, useMemo, Children, isValidElement, useId, useEffect, useState, cloneElement } from "react";
5
5
  import { useEventCallback } from "usehooks-ts";
@@ -354,7 +354,7 @@ function extractItemElements(children) {
354
354
  const result = [];
355
355
  children2.forEach((child) => {
356
356
  if (!isValidElement(child)) return;
357
- if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel) {
357
+ if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel || child.type === MenuEmpty) {
358
358
  result.push(child);
359
359
  } else if (child.type === React.Fragment && child.props.children) {
360
360
  const fragmentChildren = Children.toArray(child.props.children);
@@ -375,6 +375,9 @@ function processOptions(itemElements) {
375
375
  if (child.type === MenuContextLabel) {
376
376
  return { label: true, children: child.props.children };
377
377
  }
378
+ if (child.type === MenuEmpty) {
379
+ return { empty: true, children: child.props.children, element: child };
380
+ }
378
381
  const {
379
382
  value: itemValue,
380
383
  children: itemChildren,
@@ -390,7 +393,7 @@ function processOptions(itemElements) {
390
393
  });
391
394
  }
392
395
  function filterSelectableOptions(options) {
393
- return options.filter((option) => !option.divider && !option.label);
396
+ return options.filter((option) => !option.divider && !option.label && !option.empty);
394
397
  }
395
398
  var PORTAL_ROOT_ID = "floating-menu-root";
396
399
  var MultiSelectComponent = memo(
@@ -654,6 +657,9 @@ var MultiSelectComponent = memo(
654
657
  if (option.label) {
655
658
  return /* @__PURE__ */ jsx(MenuContextLabel, { children: option.children }, `label-${index}`);
656
659
  }
660
+ if (option.empty) {
661
+ return /* @__PURE__ */ jsx(MenuEmpty, { children: option.children }, `empty-${index}`);
662
+ }
657
663
  const currentSelectableIndex = selectableIndex;
658
664
  selectableIndex++;
659
665
  const isSelected = values.includes(option.value || "");
@@ -844,11 +850,12 @@ var BaseMultiSelect = memo(function MultiSelect(props) {
844
850
  return /* @__PURE__ */ jsx(MultiSelectComponent, { ...props, children });
845
851
  });
846
852
  var MultiSelect2 = Object.assign(BaseMultiSelect, {
847
- Item: MenuContextItem,
848
- Trigger: MultiSelectTrigger,
853
+ Content: MenuContextContent,
849
854
  Divider: MenuDivider,
855
+ Empty: MenuEmpty,
856
+ Item: MenuContextItem,
850
857
  Label: MenuContextLabel,
851
- Content: MenuContextContent,
858
+ Trigger: MultiSelectTrigger,
852
859
  Value: MenuValue
853
860
  });
854
861
  MultiSelect2.displayName = "MultiSelect";
@@ -1,5 +1,5 @@
1
1
  import { ChipProps } from '../../chip/src';
2
- import { MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuValue } from '../../menus/src';
2
+ import { MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuEmpty, MenuValue } from '../../menus/src';
3
3
  import { FloatingFocusManagerProps, Placement } from '@floating-ui/react';
4
4
  import { default as React } from 'react';
5
5
  import { MultiSelectTrigger } from './components';
@@ -42,6 +42,7 @@ export interface MultiSelectProps {
42
42
  interface MultiSelectComponentType extends React.ForwardRefExoticComponent<MultiSelectProps & React.RefAttributes<HTMLDivElement>> {
43
43
  Content: typeof MenuContextContent;
44
44
  Divider: typeof MenuDivider;
45
+ Empty: typeof MenuEmpty;
45
46
  Item: typeof MenuContextItem;
46
47
  Label: typeof MenuContextLabel;
47
48
  Trigger: typeof MultiSelectTrigger;
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Slot } from "../../slot/dist/index.js";
3
- import { MenuValue, MenuContextContent, MenuContextLabel, MenuDivider, MenuContextItem, useMenuBaseRefs, useMenuScroll, useMenuScrollHeight, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
+ import { MenuValue, MenuContextLabel, MenuContextItem, MenuEmpty, MenuDivider, MenuContextContent, useMenuBaseRefs, useMenuScroll, useMenuScrollHeight, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
4
4
  import { useFloatingParentNodeId, FloatingTree, useFloatingNodeId, useFloatingTree, offset, flip, shift, size, useFloating, autoUpdate, useClick, useDismiss, useRole, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList } from "@floating-ui/react";
5
5
  import { memo, forwardRef, useMemo, Children, isValidElement, useRef, useId, useEffect, useState, cloneElement } from "react";
6
6
  import { useEventCallback } from "usehooks-ts";
@@ -272,6 +272,9 @@ const MultiSelectComponent = memo(
272
272
  if (option.label) {
273
273
  return /* @__PURE__ */ jsx(MenuContextLabel, { children: option.children }, `label-${index}`);
274
274
  }
275
+ if (option.empty) {
276
+ return /* @__PURE__ */ jsx(MenuEmpty, { children: option.children }, `empty-${index}`);
277
+ }
275
278
  const currentSelectableIndex = selectableIndex;
276
279
  selectableIndex++;
277
280
  const isSelected = values.includes(option.value || "");
@@ -462,11 +465,12 @@ const BaseMultiSelect = memo(function MultiSelect2(props) {
462
465
  return /* @__PURE__ */ jsx(MultiSelectComponent, { ...props, children });
463
466
  });
464
467
  const MultiSelect = Object.assign(BaseMultiSelect, {
465
- Item: MenuContextItem,
466
- Trigger: MultiSelectTrigger,
468
+ Content: MenuContextContent,
467
469
  Divider: MenuDivider,
470
+ Empty: MenuEmpty,
471
+ Item: MenuContextItem,
468
472
  Label: MenuContextLabel,
469
- Content: MenuContextContent,
473
+ Trigger: MultiSelectTrigger,
470
474
  Value: MenuValue
471
475
  });
472
476
  MultiSelect.displayName = "MultiSelect";
@@ -4,18 +4,29 @@ export declare function processOptions(itemElements: React.ReactNode[]): ({
4
4
  divider: boolean;
5
5
  label?: undefined;
6
6
  children?: undefined;
7
+ empty?: undefined;
8
+ element?: undefined;
7
9
  value?: undefined;
8
10
  disabled?: undefined;
9
11
  _originalIndex?: undefined;
10
- element?: undefined;
11
12
  } | {
12
13
  label: boolean;
13
14
  children: any;
14
15
  divider?: undefined;
16
+ empty?: undefined;
17
+ element?: undefined;
18
+ value?: undefined;
19
+ disabled?: undefined;
20
+ _originalIndex?: undefined;
21
+ } | {
22
+ empty: boolean;
23
+ children: any;
24
+ element: React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
25
+ divider?: undefined;
26
+ label?: undefined;
15
27
  value?: undefined;
16
28
  disabled?: undefined;
17
29
  _originalIndex?: undefined;
18
- element?: undefined;
19
30
  } | {
20
31
  value: string | undefined;
21
32
  disabled: boolean | undefined;
@@ -24,17 +35,20 @@ export declare function processOptions(itemElements: React.ReactNode[]): ({
24
35
  children: React.ReactNode;
25
36
  divider?: undefined;
26
37
  label?: undefined;
38
+ empty?: undefined;
27
39
  })[];
28
40
  export declare function filterSelectableOptions(options: Array<{
29
41
  disabled?: boolean;
30
42
  divider?: boolean;
31
43
  element?: React.ReactElement;
44
+ empty?: boolean;
32
45
  label?: boolean;
33
46
  value?: string;
34
47
  }>): {
35
48
  disabled?: boolean;
36
49
  divider?: boolean;
37
50
  element?: React.ReactElement;
51
+ empty?: boolean;
38
52
  label?: boolean;
39
53
  value?: string;
40
54
  }[];
@@ -1,4 +1,4 @@
1
- import { MenuDivider, MenuContextLabel, MenuContextItem } from "../../../menus/dist/index.js";
1
+ import { MenuDivider, MenuContextLabel, MenuEmpty, MenuContextItem } from "../../../menus/dist/index.js";
2
2
  import React, { Children, isValidElement } from "react";
3
3
  function extractItemElements(children) {
4
4
  if (!children) return [];
@@ -7,7 +7,7 @@ function extractItemElements(children) {
7
7
  const result = [];
8
8
  children2.forEach((child) => {
9
9
  if (!isValidElement(child)) return;
10
- if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel) {
10
+ if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel || child.type === MenuEmpty) {
11
11
  result.push(child);
12
12
  } else if (child.type === React.Fragment && child.props.children) {
13
13
  const fragmentChildren = Children.toArray(child.props.children);
@@ -28,6 +28,9 @@ function processOptions(itemElements) {
28
28
  if (child.type === MenuContextLabel) {
29
29
  return { label: true, children: child.props.children };
30
30
  }
31
+ if (child.type === MenuEmpty) {
32
+ return { empty: true, children: child.props.children, element: child };
33
+ }
31
34
  const {
32
35
  value: itemValue,
33
36
  children: itemChildren,
@@ -43,7 +46,7 @@ function processOptions(itemElements) {
43
46
  });
44
47
  }
45
48
  function filterSelectableOptions(options) {
46
- return options.filter((option) => !option.divider && !option.label);
49
+ return options.filter((option) => !option.divider && !option.label && !option.empty);
47
50
  }
48
51
  export {
49
52
  extractItemElements,
@@ -1,4 +1,4 @@
1
- import { MenuContextContent, MenuDivider, MenuContextItem, MenuContextLabel, MenuTrigger, MenuValue } from '../../menus/src';
1
+ import { MenuContextContent, MenuDivider, MenuEmpty, MenuContextItem, MenuContextLabel, MenuTrigger, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps } from '@floating-ui/react';
3
3
  import { default as React } from 'react';
4
4
  interface SelectProps {
@@ -22,6 +22,7 @@ interface SelectProps {
22
22
  interface SelectComponentType extends React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>> {
23
23
  Content: typeof MenuContextContent;
24
24
  Divider: typeof MenuDivider;
25
+ Empty: typeof MenuEmpty;
25
26
  Item: typeof MenuContextItem;
26
27
  Label: typeof MenuContextLabel;
27
28
  Trigger: typeof MenuTrigger;
@@ -1,5 +1,5 @@
1
1
  import { Slot } from "../../slot/dist/index.js";
2
- import { MenuValue, MenuContextContent, MenuContextLabel, MenuDivider, MenuTrigger, MenuContextItem, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
2
+ import { MenuValue, MenuTrigger, MenuContextLabel, MenuContextItem, MenuEmpty, MenuDivider, MenuContextContent, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
3
  import { useFloatingParentNodeId, FloatingTree, useFloatingNodeId, useFloating, offset, shift, flip, size, inner, autoUpdate, useClick, useDismiss, useRole, useInnerOffset, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList } from "@floating-ui/react";
4
4
  import React, { memo, useMemo, Children, isValidElement, useRef, useState, useId, useEffect, cloneElement } from "react";
5
5
  import { useEventCallback } from "usehooks-ts";
@@ -45,7 +45,7 @@ var SelectComponent = memo(function SelectComponent2(props) {
45
45
  const result = [];
46
46
  children2.forEach((child) => {
47
47
  if (!isValidElement(child)) return;
48
- if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel) {
48
+ if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel || child.type === MenuEmpty) {
49
49
  result.push(child);
50
50
  } else if (child.type === React.Fragment && child.props.children) {
51
51
  const fragmentChildren = Children.toArray(child.props.children);
@@ -67,6 +67,9 @@ var SelectComponent = memo(function SelectComponent2(props) {
67
67
  if (child.type === MenuContextLabel) {
68
68
  return { label: true, children: child.props.children };
69
69
  }
70
+ if (child.type === MenuEmpty) {
71
+ return { empty: true, children: child.props.children, element: child };
72
+ }
70
73
  const {
71
74
  value: itemValue,
72
75
  children: itemChildren,
@@ -82,7 +85,7 @@ var SelectComponent = memo(function SelectComponent2(props) {
82
85
  });
83
86
  }, [itemElements]);
84
87
  const selectableOptions = useMemo(() => {
85
- return options.filter((option) => !option.divider && !option.label);
88
+ return options.filter((option) => !option.divider && !option.label && !option.empty);
86
89
  }, [options]);
87
90
  const listRef = useRef([]);
88
91
  const listContentRef = useRef([]);
@@ -287,6 +290,9 @@ var SelectComponent = memo(function SelectComponent2(props) {
287
290
  if (option.label) {
288
291
  return /* @__PURE__ */ jsx(MenuContextLabel, { children: option.children }, `label-${index}`);
289
292
  }
293
+ if (option.empty) {
294
+ return /* @__PURE__ */ jsx(MenuEmpty, { children: option.children }, `empty-${index}`);
295
+ }
290
296
  const currentSelectableIndex = selectableIndex;
291
297
  selectableIndex++;
292
298
  const isSelected = currentSelectedIndex === currentSelectableIndex;
@@ -467,11 +473,12 @@ var BaseSelect = memo(function Select(props) {
467
473
  return /* @__PURE__ */ jsx(SelectComponent, { ...props, children });
468
474
  });
469
475
  var Select2 = Object.assign(BaseSelect, {
470
- Item: MenuContextItem,
471
- Trigger: MenuTrigger,
476
+ Content: MenuContextContent,
472
477
  Divider: MenuDivider,
478
+ Empty: MenuEmpty,
479
+ Item: MenuContextItem,
473
480
  Label: MenuContextLabel,
474
- Content: MenuContextContent,
481
+ Trigger: MenuTrigger,
475
482
  Value: MenuValue
476
483
  });
477
484
  Select2.displayName = "Select";
@@ -1,4 +1,4 @@
1
- import { MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuTrigger, MenuValue } from '../../menus/src';
1
+ import { MenuContextContent, MenuContextItem, MenuContextLabel, MenuDivider, MenuEmpty, MenuTrigger, MenuValue } from '../../menus/src';
2
2
  import { FloatingFocusManagerProps } from '@floating-ui/react';
3
3
  import { default as React } from 'react';
4
4
  export interface SelectProps {
@@ -22,6 +22,7 @@ export interface SelectProps {
22
22
  interface SelectComponentType extends React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>> {
23
23
  Content: typeof MenuContextContent;
24
24
  Divider: typeof MenuDivider;
25
+ Empty: typeof MenuEmpty;
25
26
  Item: typeof MenuContextItem;
26
27
  Label: typeof MenuContextLabel;
27
28
  Trigger: typeof MenuTrigger;
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Slot } from "../../slot/dist/index.js";
3
- import { MenuValue, MenuContextContent, MenuContextLabel, MenuDivider, MenuTrigger, MenuContextItem, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
3
+ import { MenuValue, MenuTrigger, MenuContextLabel, MenuContextItem, MenuEmpty, MenuDivider, MenuContextContent, useMenuScroll, MenuContext, MenuScrollArrow } from "../../menus/dist/index.js";
4
4
  import { useFloatingParentNodeId, FloatingTree, useFloatingNodeId, useFloating, offset, shift, flip, size, inner, autoUpdate, useClick, useDismiss, useRole, useInnerOffset, useListNavigation, useTypeahead, useInteractions, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList } from "@floating-ui/react";
5
5
  import React, { memo, useMemo, Children, isValidElement, useRef, useState, useId, useEffect, cloneElement } from "react";
6
6
  import { useEventCallback } from "usehooks-ts";
@@ -45,7 +45,7 @@ const SelectComponent = memo(function SelectComponent2(props) {
45
45
  const result = [];
46
46
  children2.forEach((child) => {
47
47
  if (!isValidElement(child)) return;
48
- if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel) {
48
+ if (child.type === MenuContextItem || child.type === MenuDivider || child.type === MenuContextLabel || child.type === MenuEmpty) {
49
49
  result.push(child);
50
50
  } else if (child.type === React.Fragment && child.props.children) {
51
51
  const fragmentChildren = Children.toArray(child.props.children);
@@ -67,6 +67,9 @@ const SelectComponent = memo(function SelectComponent2(props) {
67
67
  if (child.type === MenuContextLabel) {
68
68
  return { label: true, children: child.props.children };
69
69
  }
70
+ if (child.type === MenuEmpty) {
71
+ return { empty: true, children: child.props.children, element: child };
72
+ }
70
73
  const {
71
74
  value: itemValue,
72
75
  children: itemChildren,
@@ -82,7 +85,7 @@ const SelectComponent = memo(function SelectComponent2(props) {
82
85
  });
83
86
  }, [itemElements]);
84
87
  const selectableOptions = useMemo(() => {
85
- return options.filter((option) => !option.divider && !option.label);
88
+ return options.filter((option) => !option.divider && !option.label && !option.empty);
86
89
  }, [options]);
87
90
  const listRef = useRef([]);
88
91
  const listContentRef = useRef([]);
@@ -287,6 +290,9 @@ const SelectComponent = memo(function SelectComponent2(props) {
287
290
  if (option.label) {
288
291
  return /* @__PURE__ */ jsx(MenuContextLabel, { children: option.children }, `label-${index}`);
289
292
  }
293
+ if (option.empty) {
294
+ return /* @__PURE__ */ jsx(MenuEmpty, { children: option.children }, `empty-${index}`);
295
+ }
290
296
  const currentSelectableIndex = selectableIndex;
291
297
  selectableIndex++;
292
298
  const isSelected = currentSelectedIndex === currentSelectableIndex;
@@ -467,11 +473,12 @@ const BaseSelect = memo(function Select2(props) {
467
473
  return /* @__PURE__ */ jsx(SelectComponent, { ...props, children });
468
474
  });
469
475
  const Select = Object.assign(BaseSelect, {
470
- Item: MenuContextItem,
471
- Trigger: MenuTrigger,
476
+ Content: MenuContextContent,
472
477
  Divider: MenuDivider,
478
+ Empty: MenuEmpty,
479
+ Item: MenuContextItem,
473
480
  Label: MenuContextLabel,
474
- Content: MenuContextContent,
481
+ Trigger: MenuTrigger,
475
482
  Value: MenuValue
476
483
  });
477
484
  Select.displayName = "Select";
package/dist/index.js CHANGED
@@ -136,6 +136,7 @@ import { Menubar } from "./components/menubar/src/menubar.js";
136
136
  import { MenuButton } from "./components/menus/src/components/menu-button.js";
137
137
  import { MenuCheckbox } from "./components/menus/src/components/menu-checkbox.js";
138
138
  import { MenuDivider } from "./components/menus/src/components/menu-divider.js";
139
+ import { MenuEmpty } from "./components/menus/src/components/menu-empty.js";
139
140
  import { MenuInput } from "./components/menus/src/components/menu-input.js";
140
141
  import { MenuItem } from "./components/menus/src/components/menu-item.js";
141
142
  import { MenuLabel } from "./components/menus/src/components/menu-label.js";
@@ -346,6 +347,7 @@ export {
346
347
  MenuContextLabel,
347
348
  MenuContextSubTrigger,
348
349
  MenuDivider,
350
+ MenuEmpty,
349
351
  MenuInput,
350
352
  MenuItem,
351
353
  MenuLabel,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@choice-ui/react",
3
- "version": "1.5.3",
3
+ "version": "1.5.4",
4
4
  "description": "A desktop-first React UI component library built for professional desktop applications with comprehensive documentation",
5
5
  "sideEffects": false,
6
6
  "type": "module",