@sproutsocial/seeds-react-menu 0.6.0 → 1.0.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/dist/index.d.mts CHANGED
@@ -52,7 +52,10 @@ type TypeMenuGroupProps<I extends TypeMenuItemProps = TypeMenuItemProps> = TypeM
52
52
  *
53
53
  * @see {@link https://seeds.sproutsocial.com/components/menu-item/ | MenuItem}
54
54
  */
55
- declare const MenuGroup: <I extends TypeMenuItemProps = TypeMenuItemProps>({ titleAs, children: childrenProp, title, color, isSingleSelect, id, menuItems, MenuItemComponent, ...rest }: TypeMenuGroupProps<I>) => react_jsx_runtime.JSX.Element | null;
55
+ declare const MenuGroup: {
56
+ <I extends TypeMenuItemProps = TypeMenuItemProps>({ titleAs, children: childrenProp, title, color, isSingleSelect, id, menuItems, MenuItemComponent, ...rest }: TypeMenuGroupProps<I>): react_jsx_runtime.JSX.Element | null;
57
+ __MENU_PRIMITIVE_TYPE: string;
58
+ };
56
59
 
57
60
  declare const StyledMenuGroup: styled_components.StyledComponent<"li", styled_components.DefaultTheme, TypeMenuGroupBaseProps, never>;
58
61
  declare const StyledTitle: styled_components.StyledComponent<React$1.FC<_sproutsocial_seeds_react_text.TypeTextProps>, styled_components.DefaultTheme, {}, never>;
@@ -81,6 +84,7 @@ interface TypeMenuContextBaseProps {
81
84
  };
82
85
  isListbox?: boolean;
83
86
  hiddenItemsMap?: Record<string, boolean>;
87
+ hiddenItemsCount?: number;
84
88
  setHiddenItemsMap?: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
85
89
  subMenuId?: string;
86
90
  setSubMenuId?: (id: string) => void;
@@ -227,7 +231,10 @@ interface TypeMenuItemProps extends TypeMenuItemStyledProps, Omit<GetItemPropsOp
227
231
  inputLabelId?: string;
228
232
  }
229
233
 
230
- declare const MenuItem: ({ id, children, onClick, onKeyDown, disabled, active, innerRef, href, color, ...props }: TypeMenuItemProps) => react_jsx_runtime.JSX.Element;
234
+ declare const MenuItem: {
235
+ ({ id, children, onClick, onKeyDown, disabled, active, innerRef, href, color, ...props }: TypeMenuItemProps): react_jsx_runtime.JSX.Element;
236
+ __MENU_PRIMITIVE_TYPE: string;
237
+ };
231
238
 
232
239
  declare const MenuItemContainer: styled_components.StyledComponent<"li", styled_components.DefaultTheme, {}, never>;
233
240
  declare const StyledMenuItem: styled_components.StyledComponent<"button", styled_components.DefaultTheme, {
@@ -281,7 +288,10 @@ type TypeMenuContentProps<I extends TypeMenuItemProps = TypeMenuItemProps> = Omi
281
288
  * @see {@link https://seeds.sproutsocial.com/components/menu-item/ | MenuItem}
282
289
  * @see {@link https://seeds.sproutsocial.com/components/menu-group/ | MenuGroup}
283
290
  */
284
- declare const MenuContent: <I extends TypeMenuItemProps = TypeMenuItemProps>({ id, children: childrenProp, menuItems, MenuItemComponent, onKeyDown, innerRef, ...rest }: TypeMenuContentProps<I>) => react_jsx_runtime.JSX.Element | null;
291
+ declare const MenuContent: {
292
+ <I extends TypeMenuItemProps = TypeMenuItemProps>({ id, children: childrenProp, menuItems, MenuItemComponent, onKeyDown, innerRef, ...rest }: TypeMenuContentProps<I>): react_jsx_runtime.JSX.Element | null;
293
+ __MENU_PRIMITIVE_TYPE: string;
294
+ };
285
295
 
286
296
  /**
287
297
  * @link https://seeds.sproutsocial.com/components/menu-footer/
@@ -304,12 +314,20 @@ type TypeGetIsItemVisibleFn = (item: TypeMenuContext["items"][number], inputValu
304
314
  interface TypeMenuSearchInputProps extends TypeInputProps {
305
315
  getIsItemVisible?: TypeGetIsItemVisibleFn;
306
316
  }
317
+ /**
318
+ * <input
319
+ * aria-activedescendant=""
320
+ * aria-autocomplete="list"
321
+ * aria-controls="downshift-:r1:-menu"
322
+ * aria-expanded="true"
323
+ * />
324
+ */
307
325
  /**
308
326
  * @link https://seeds.sproutsocial.com/components/menu-header/
309
327
  *
310
328
  * @description MenuSearchInput is search input that can be added to the MenuHeader to filter the items.
311
329
  */
312
- declare const MenuSearchInput: ({ getIsItemVisible, ...inputProps }: TypeMenuSearchInputProps) => react_jsx_runtime.JSX.Element;
330
+ declare const MenuSearchInput: ({ getIsItemVisible, inputProps, ...restInputProps }: TypeMenuSearchInputProps) => react_jsx_runtime.JSX.Element;
313
331
 
314
332
  interface TypeMenuTokenInputProps extends TypeTokenInputProps {
315
333
  getTokenProps?: (itemId: TypeInternalItemProps["id"]) => Partial<TypeTokenSpec>;
@@ -378,7 +396,10 @@ interface TypeSubmenuItemProps<I extends TypeMenuItemProps, P extends TypeSubmen
378
396
  menuProps: Omit<P, "menuToggleElement">;
379
397
  }
380
398
 
381
- declare const SubmenuItem: <I extends TypeMenuItemProps, P extends TypeSubmenuValidMenuComponentProps<I>>({ MenuComponent, menuProps: { children: menuChildren, menuItems, MenuItemComponent, popoutProps: { popperProps, ...popoutProps }, onStateChange, ...menuProps }, id, children, ...rest }: TypeSubmenuItemProps<I, P>) => react_jsx_runtime.JSX.Element;
399
+ declare const SubmenuItem: {
400
+ <I extends TypeMenuItemProps, P extends TypeSubmenuValidMenuComponentProps<I>>({ MenuComponent, menuProps: { children: menuChildren, menuItems, MenuItemComponent, popoutProps: { popperProps, ...popoutProps }, onStateChange, ...menuProps }, id, children, ...rest }: TypeSubmenuItemProps<I, P>): react_jsx_runtime.JSX.Element;
401
+ __MENU_PRIMITIVE_TYPE: string;
402
+ };
382
403
 
383
404
  type TypeSingleAutocompleteProps<I extends TypeMenuItemProps = TypeMenuItemProps> = TypeMenuRootOwnProps & TypeChildrenOrItems<I> & TypeDownshiftComboboxProps & {
384
405
  getIsItemVisible?: TypeGetIsItemVisibleFn;
@@ -435,11 +456,17 @@ interface TypeNestedMenuProps<I extends TypeMenuItemProps = TypeNestedMenuItemPr
435
456
 
436
457
  declare const NestedMenu: <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ initialMenuId, menus, onBackButtonClick, backArrowLabel, menuToggleElement, }: TypeNestedMenuProps<I>) => react_jsx_runtime.JSX.Element;
437
458
 
438
- declare const NestedMenuItem: ({ children, childMenuId, onClick: onClickProp, ...rest }: TypeNestedMenuItemProps) => react_jsx_runtime.JSX.Element;
459
+ declare const NestedMenuItem: {
460
+ ({ children, childMenuId, onClick: onClickProp, ...rest }: TypeNestedMenuItemProps): react_jsx_runtime.JSX.Element;
461
+ __MENU_PRIMITIVE_TYPE: string;
462
+ };
439
463
 
440
464
  declare const NestedMenuHeader: ({ backArrowLabel, ...props }: TypeNestedMenuHeaderProps) => react_jsx_runtime.JSX.Element;
441
465
 
442
- declare const NestedMenuContent: <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ innerRef: innerRefProp, onKeyDown: onKeyDownProp, children, menuItems, MenuItemComponent, ...props }: TypeMenuContentProps<I>) => react_jsx_runtime.JSX.Element;
466
+ declare const NestedMenuContent: {
467
+ <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ innerRef: innerRefProp, onKeyDown: onKeyDownProp, children, menuItems, MenuItemComponent, ...props }: TypeMenuContentProps<I>): react_jsx_runtime.JSX.Element;
468
+ __MENU_PRIMITIVE_TYPE: string;
469
+ };
443
470
 
444
471
  interface TypeNestedMenuContext {
445
472
  selectedMenuPath: string[];
package/dist/index.d.ts CHANGED
@@ -52,7 +52,10 @@ type TypeMenuGroupProps<I extends TypeMenuItemProps = TypeMenuItemProps> = TypeM
52
52
  *
53
53
  * @see {@link https://seeds.sproutsocial.com/components/menu-item/ | MenuItem}
54
54
  */
55
- declare const MenuGroup: <I extends TypeMenuItemProps = TypeMenuItemProps>({ titleAs, children: childrenProp, title, color, isSingleSelect, id, menuItems, MenuItemComponent, ...rest }: TypeMenuGroupProps<I>) => react_jsx_runtime.JSX.Element | null;
55
+ declare const MenuGroup: {
56
+ <I extends TypeMenuItemProps = TypeMenuItemProps>({ titleAs, children: childrenProp, title, color, isSingleSelect, id, menuItems, MenuItemComponent, ...rest }: TypeMenuGroupProps<I>): react_jsx_runtime.JSX.Element | null;
57
+ __MENU_PRIMITIVE_TYPE: string;
58
+ };
56
59
 
57
60
  declare const StyledMenuGroup: styled_components.StyledComponent<"li", styled_components.DefaultTheme, TypeMenuGroupBaseProps, never>;
58
61
  declare const StyledTitle: styled_components.StyledComponent<React$1.FC<_sproutsocial_seeds_react_text.TypeTextProps>, styled_components.DefaultTheme, {}, never>;
@@ -81,6 +84,7 @@ interface TypeMenuContextBaseProps {
81
84
  };
82
85
  isListbox?: boolean;
83
86
  hiddenItemsMap?: Record<string, boolean>;
87
+ hiddenItemsCount?: number;
84
88
  setHiddenItemsMap?: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
85
89
  subMenuId?: string;
86
90
  setSubMenuId?: (id: string) => void;
@@ -227,7 +231,10 @@ interface TypeMenuItemProps extends TypeMenuItemStyledProps, Omit<GetItemPropsOp
227
231
  inputLabelId?: string;
228
232
  }
229
233
 
230
- declare const MenuItem: ({ id, children, onClick, onKeyDown, disabled, active, innerRef, href, color, ...props }: TypeMenuItemProps) => react_jsx_runtime.JSX.Element;
234
+ declare const MenuItem: {
235
+ ({ id, children, onClick, onKeyDown, disabled, active, innerRef, href, color, ...props }: TypeMenuItemProps): react_jsx_runtime.JSX.Element;
236
+ __MENU_PRIMITIVE_TYPE: string;
237
+ };
231
238
 
232
239
  declare const MenuItemContainer: styled_components.StyledComponent<"li", styled_components.DefaultTheme, {}, never>;
233
240
  declare const StyledMenuItem: styled_components.StyledComponent<"button", styled_components.DefaultTheme, {
@@ -281,7 +288,10 @@ type TypeMenuContentProps<I extends TypeMenuItemProps = TypeMenuItemProps> = Omi
281
288
  * @see {@link https://seeds.sproutsocial.com/components/menu-item/ | MenuItem}
282
289
  * @see {@link https://seeds.sproutsocial.com/components/menu-group/ | MenuGroup}
283
290
  */
284
- declare const MenuContent: <I extends TypeMenuItemProps = TypeMenuItemProps>({ id, children: childrenProp, menuItems, MenuItemComponent, onKeyDown, innerRef, ...rest }: TypeMenuContentProps<I>) => react_jsx_runtime.JSX.Element | null;
291
+ declare const MenuContent: {
292
+ <I extends TypeMenuItemProps = TypeMenuItemProps>({ id, children: childrenProp, menuItems, MenuItemComponent, onKeyDown, innerRef, ...rest }: TypeMenuContentProps<I>): react_jsx_runtime.JSX.Element | null;
293
+ __MENU_PRIMITIVE_TYPE: string;
294
+ };
285
295
 
286
296
  /**
287
297
  * @link https://seeds.sproutsocial.com/components/menu-footer/
@@ -304,12 +314,20 @@ type TypeGetIsItemVisibleFn = (item: TypeMenuContext["items"][number], inputValu
304
314
  interface TypeMenuSearchInputProps extends TypeInputProps {
305
315
  getIsItemVisible?: TypeGetIsItemVisibleFn;
306
316
  }
317
+ /**
318
+ * <input
319
+ * aria-activedescendant=""
320
+ * aria-autocomplete="list"
321
+ * aria-controls="downshift-:r1:-menu"
322
+ * aria-expanded="true"
323
+ * />
324
+ */
307
325
  /**
308
326
  * @link https://seeds.sproutsocial.com/components/menu-header/
309
327
  *
310
328
  * @description MenuSearchInput is search input that can be added to the MenuHeader to filter the items.
311
329
  */
312
- declare const MenuSearchInput: ({ getIsItemVisible, ...inputProps }: TypeMenuSearchInputProps) => react_jsx_runtime.JSX.Element;
330
+ declare const MenuSearchInput: ({ getIsItemVisible, inputProps, ...restInputProps }: TypeMenuSearchInputProps) => react_jsx_runtime.JSX.Element;
313
331
 
314
332
  interface TypeMenuTokenInputProps extends TypeTokenInputProps {
315
333
  getTokenProps?: (itemId: TypeInternalItemProps["id"]) => Partial<TypeTokenSpec>;
@@ -378,7 +396,10 @@ interface TypeSubmenuItemProps<I extends TypeMenuItemProps, P extends TypeSubmen
378
396
  menuProps: Omit<P, "menuToggleElement">;
379
397
  }
380
398
 
381
- declare const SubmenuItem: <I extends TypeMenuItemProps, P extends TypeSubmenuValidMenuComponentProps<I>>({ MenuComponent, menuProps: { children: menuChildren, menuItems, MenuItemComponent, popoutProps: { popperProps, ...popoutProps }, onStateChange, ...menuProps }, id, children, ...rest }: TypeSubmenuItemProps<I, P>) => react_jsx_runtime.JSX.Element;
399
+ declare const SubmenuItem: {
400
+ <I extends TypeMenuItemProps, P extends TypeSubmenuValidMenuComponentProps<I>>({ MenuComponent, menuProps: { children: menuChildren, menuItems, MenuItemComponent, popoutProps: { popperProps, ...popoutProps }, onStateChange, ...menuProps }, id, children, ...rest }: TypeSubmenuItemProps<I, P>): react_jsx_runtime.JSX.Element;
401
+ __MENU_PRIMITIVE_TYPE: string;
402
+ };
382
403
 
383
404
  type TypeSingleAutocompleteProps<I extends TypeMenuItemProps = TypeMenuItemProps> = TypeMenuRootOwnProps & TypeChildrenOrItems<I> & TypeDownshiftComboboxProps & {
384
405
  getIsItemVisible?: TypeGetIsItemVisibleFn;
@@ -435,11 +456,17 @@ interface TypeNestedMenuProps<I extends TypeMenuItemProps = TypeNestedMenuItemPr
435
456
 
436
457
  declare const NestedMenu: <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ initialMenuId, menus, onBackButtonClick, backArrowLabel, menuToggleElement, }: TypeNestedMenuProps<I>) => react_jsx_runtime.JSX.Element;
437
458
 
438
- declare const NestedMenuItem: ({ children, childMenuId, onClick: onClickProp, ...rest }: TypeNestedMenuItemProps) => react_jsx_runtime.JSX.Element;
459
+ declare const NestedMenuItem: {
460
+ ({ children, childMenuId, onClick: onClickProp, ...rest }: TypeNestedMenuItemProps): react_jsx_runtime.JSX.Element;
461
+ __MENU_PRIMITIVE_TYPE: string;
462
+ };
439
463
 
440
464
  declare const NestedMenuHeader: ({ backArrowLabel, ...props }: TypeNestedMenuHeaderProps) => react_jsx_runtime.JSX.Element;
441
465
 
442
- declare const NestedMenuContent: <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ innerRef: innerRefProp, onKeyDown: onKeyDownProp, children, menuItems, MenuItemComponent, ...props }: TypeMenuContentProps<I>) => react_jsx_runtime.JSX.Element;
466
+ declare const NestedMenuContent: {
467
+ <I extends TypeMenuItemProps = TypeNestedMenuItemProps>({ innerRef: innerRefProp, onKeyDown: onKeyDownProp, children, menuItems, MenuItemComponent, ...props }: TypeMenuContentProps<I>): react_jsx_runtime.JSX.Element;
468
+ __MENU_PRIMITIVE_TYPE: string;
469
+ };
443
470
 
444
471
  interface TypeNestedMenuContext {
445
472
  selectedMenuPath: string[];
package/dist/index.js CHANGED
@@ -203,7 +203,7 @@ var useMenu = ({
203
203
  );
204
204
  const isItemSelected = import_react.default.useCallback(
205
205
  (id) => checkIfItemSelected({ id, selectedItem, selectedItemIds }),
206
- [selectedItem, selectedItemIds]
206
+ [selectedItem?.id, selectedItemIds]
207
207
  );
208
208
  const getInputComponentProps = import_react.default.useCallback(
209
209
  ({ inputProps, ...props }) => {
@@ -1824,8 +1824,10 @@ var highlightedStyles = import_styled_components2.css`
1824
1824
  text-decoration: none;
1825
1825
  `;
1826
1826
  var activeStyles = import_styled_components2.css`
1827
- background-color: ${({ theme: theme2 }) => theme2.colors.listItem.background.active};
1828
- color: ${({ theme: theme2 }) => theme2.colors.text.inverse};
1827
+ border: 1px solid ${({ theme: theme2 }) => theme2.colors.listItem.border.base};
1828
+ background-color: ${({ theme: theme2 }) => theme2.colors.menuItem.background.active};
1829
+ color: ${({ theme: theme2 }) => theme2.colors.text.body};
1830
+ text-decoration: none;
1829
1831
  `;
1830
1832
  var MenuItemContainer = import_styled_components2.default.li`
1831
1833
  box-sizing: border-box;
@@ -1994,10 +1996,10 @@ var useOptionProps = ({
1994
1996
  inputLabelId,
1995
1997
  ...props
1996
1998
  }) => {
1997
- const { selectedItem, selectedItems, isListbox, isItemSelected } = useMenuContentContext();
1999
+ const { selectedItem, selectedItemIds, isListbox, isItemSelected } = useMenuContentContext();
1998
2000
  const selected = (0, import_react2.useMemo)(
1999
2001
  () => isItemSelected(id),
2000
- [selectedItem, selectedItems]
2002
+ [selectedItem?.id, selectedItemIds]
2001
2003
  );
2002
2004
  const label = inputLabelId || `menu-item-child-${id}`;
2003
2005
  return isListbox ? {
@@ -2072,6 +2074,7 @@ var MenuItem = ({
2072
2074
  }
2073
2075
  ) });
2074
2076
  };
2077
+ MenuItem.__MENU_PRIMITIVE_TYPE = "MenuItem";
2075
2078
 
2076
2079
  // src/MenuItem/MenuItemTypes.ts
2077
2080
  var INPUT_TYPES = {
@@ -2120,6 +2123,10 @@ var MenuTitleText = import_styled_components4.default.h3`
2120
2123
  var MenuChildrenContainer = import_styled_components4.default.div`
2121
2124
  grid-column: 1 / -1;
2122
2125
  margin-top: ${({ theme: theme2 }) => theme2.space[300]};
2126
+
2127
+ &:first-child {
2128
+ margin-top: 0;
2129
+ }
2123
2130
  `;
2124
2131
  var MenuHeaderFeatures = import_styled_components4.default.div`
2125
2132
  display: flex;
@@ -2153,8 +2160,9 @@ var MenuHeader = ({
2153
2160
  rightAction,
2154
2161
  ...rest
2155
2162
  }) => {
2163
+ const showTopRow = title || leftAction || rightAction;
2156
2164
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuHeaderContainer, { $leftAction: !!leftAction, ...rest, children: [
2157
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuHeaderFeatures, { $leftAction: !!leftAction, children: [
2165
+ showTopRow && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuHeaderFeatures, { $leftAction: !!leftAction, children: [
2158
2166
  leftAction && leftAction,
2159
2167
  title && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MenuTitleText, { $leftAction: !!leftAction, children: title }),
2160
2168
  rightAction && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "right-action", children: rightAction })
@@ -2190,8 +2198,8 @@ var walkAllChildren = (children, callback) => {
2190
2198
  });
2191
2199
  };
2192
2200
  var getComponentName = (element) => {
2193
- if (element && typeof element === "object" && "type" in element && typeof element.type !== "string" && typeof element.type.name === "string") {
2194
- return element.type.name;
2201
+ if (element && typeof element === "object" && "type" in element && (typeof element.type === "function" || typeof element.type === "object") && "__MENU_PRIMITIVE_TYPE" in element.type && typeof element.type.__MENU_PRIMITIVE_TYPE === "string") {
2202
+ return element.type.__MENU_PRIMITIVE_TYPE;
2195
2203
  }
2196
2204
  };
2197
2205
  var addMenuItem = ({
@@ -2272,8 +2280,6 @@ var setMenuItemsFromChildren = ({
2272
2280
  walkAllChildren(children, (element) => {
2273
2281
  switch (getComponentName(element)) {
2274
2282
  case "MenuItem":
2275
- case "SubmenuItem":
2276
- case "NestedMenuItem":
2277
2283
  const menuItem = element;
2278
2284
  if (menuItemsMap[`${menuItem.props.id}`]) return;
2279
2285
  addMenuItem({
@@ -2295,7 +2301,6 @@ var setMenuItemsFromChildren = ({
2295
2301
  });
2296
2302
  break;
2297
2303
  case "MenuContent":
2298
- case "NestedMenuContent":
2299
2304
  addItemsFromContent({
2300
2305
  // Cast element to the TypeMenuContentElement since we know it's a content and is needed for addItemsFromContent.
2301
2306
  contentElement: element,
@@ -2390,6 +2395,7 @@ var MenuContent = ({
2390
2395
  }
2391
2396
  );
2392
2397
  };
2398
+ MenuContent.__MENU_PRIMITIVE_TYPE = "MenuContent";
2393
2399
 
2394
2400
  // src/MenuFooter/MenuFooter.tsx
2395
2401
  var import_react7 = require("react");
@@ -2398,7 +2404,7 @@ var import_react7 = require("react");
2398
2404
  var import_styled_components6 = __toESM(require("styled-components"));
2399
2405
  var import_seeds_react_box2 = require("@sproutsocial/seeds-react-box");
2400
2406
  var StyledMenuFooterBox = (0, import_styled_components6.default)(import_seeds_react_box2.Box)`
2401
- padding: ${(p) => p.theme.space[400]};
2407
+ padding: ${({ theme: theme2 }) => theme2.space[350]} ${({ theme: theme2 }) => theme2.space[400]};
2402
2408
  border-top: 1px solid ${(p) => p.theme.colors.container.border.base};
2403
2409
  `;
2404
2410
 
@@ -2540,7 +2546,7 @@ var StyledMenuGroup = import_styled_components9.default.li`
2540
2546
  ${space}
2541
2547
  `;
2542
2548
  var StyledTitle = (0, import_styled_components9.default)(index_default.SmallSubHeadline)`
2543
- font-size: ${({ theme: theme2 }) => theme2.typography[200].fontSize};
2549
+ font-size: ${({ theme: theme2 }) => theme2.typography[100].fontSize};
2544
2550
  margin: ${({ theme: theme2 }) => theme2.space[400]} ${({ theme: theme2 }) => theme2.space[400]}
2545
2551
  0px ${({ theme: theme2 }) => theme2.space[400]};
2546
2552
  `;
@@ -2583,6 +2589,7 @@ var MenuGroup = ({
2583
2589
  }
2584
2590
  );
2585
2591
  };
2592
+ MenuGroup.__MENU_PRIMITIVE_TYPE = "MenuGroup";
2586
2593
 
2587
2594
  // src/MenuRoot/MenuRoot.tsx
2588
2595
  var import_react11 = require("react");
@@ -2601,13 +2608,26 @@ var MenuRoot = ({
2601
2608
  width: width2 = "300px",
2602
2609
  ...contextProps
2603
2610
  }) => {
2604
- const { isOpen, openMenu, closeMenu } = contextProps;
2611
+ const {
2612
+ isOpen,
2613
+ openMenu,
2614
+ closeMenu,
2615
+ inputValue,
2616
+ hiddenItemsCount = 0,
2617
+ items
2618
+ } = contextProps;
2605
2619
  const setIsOpen = (0, import_react11.useCallback)(
2606
2620
  (newIsOpen) => {
2607
2621
  newIsOpen ? openMenu?.() : closeMenu?.();
2608
2622
  },
2609
2623
  [openMenu, closeMenu]
2610
2624
  );
2625
+ (0, import_react11.useEffect)(() => {
2626
+ if (!inputValue) return;
2627
+ if (items && hiddenItemsCount >= items.length && isOpen) {
2628
+ closeMenu?.();
2629
+ }
2630
+ }, [hiddenItemsCount, items?.length, isOpen, inputValue]);
2611
2631
  const menuContext = useMenu(contextProps);
2612
2632
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2613
2633
  import_seeds_react_popout.Popout,
@@ -2712,7 +2732,8 @@ var useItemFiltering = ({
2712
2732
  var import_jsx_runtime13 = require("react/jsx-runtime");
2713
2733
  var MenuSearchInput = ({
2714
2734
  getIsItemVisible,
2715
- ...inputProps
2735
+ inputProps,
2736
+ ...restInputProps
2716
2737
  }) => {
2717
2738
  const {
2718
2739
  items,
@@ -2728,14 +2749,15 @@ var MenuSearchInput = ({
2728
2749
  setHiddenItemsMap
2729
2750
  });
2730
2751
  import_react15.default.useEffect(() => {
2731
- updateFilteredItems({ inputValue: inputProps.value || "" });
2732
- }, [isOpen, inputProps.value]);
2752
+ updateFilteredItems({ inputValue: restInputProps.value || "" });
2753
+ }, [isOpen, restInputProps.value]);
2754
+ const toggleButtonProps = getToggleButtonProps?.() || {};
2733
2755
  const handleKeyDown = import_react15.default.useCallback(
2734
2756
  (e) => {
2735
2757
  if (e.key === " ") return;
2736
- getToggleButtonProps?.()["onKeyDown"](e);
2758
+ toggleButtonProps.onKeyDown?.(e);
2737
2759
  },
2738
- [getToggleButtonProps]
2760
+ [toggleButtonProps.onKeyDown]
2739
2761
  );
2740
2762
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2741
2763
  import_seeds_react_input.Input,
@@ -2745,7 +2767,13 @@ var MenuSearchInput = ({
2745
2767
  },
2746
2768
  onKeyDown: handleKeyDown,
2747
2769
  autoComplete: false,
2748
- ...inputProps
2770
+ "aria-autocomplete": "list",
2771
+ inputProps: {
2772
+ ["aria-activedescendant"]: toggleButtonProps["aria-activedescendant"],
2773
+ ["aria-controls"]: toggleButtonProps["aria-controls"],
2774
+ ...inputProps
2775
+ },
2776
+ ...restInputProps
2749
2777
  }
2750
2778
  );
2751
2779
  };
@@ -2879,12 +2907,13 @@ var MenuSearchTokenInput = ({
2879
2907
  import_react17.default.useEffect(() => {
2880
2908
  updateFilteredState(controlledValue);
2881
2909
  }, [isOpen]);
2910
+ const toggleButtonProps = getToggleButtonProps?.() || {};
2882
2911
  const handleKeyDown = import_react17.default.useCallback(
2883
2912
  (e) => {
2884
2913
  if (e.key === " ") return;
2885
- getToggleButtonProps?.()["onKeyDown"](e);
2914
+ toggleButtonProps.onKeyDown?.(e);
2886
2915
  },
2887
- [getToggleButtonProps]
2916
+ [toggleButtonProps.onKeyDown]
2888
2917
  );
2889
2918
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2890
2919
  MenuTokenInput,
@@ -2896,6 +2925,8 @@ var MenuSearchTokenInput = ({
2896
2925
  onKeyDown: handleKeyDown,
2897
2926
  inputProps: {
2898
2927
  value: internalValue,
2928
+ ["aria-activedescendant"]: toggleButtonProps["aria-activedescendant"],
2929
+ ["aria-controls"]: toggleButtonProps["aria-controls"],
2899
2930
  ...inputProps
2900
2931
  },
2901
2932
  MenuContext: MenuContentContext,
@@ -3093,6 +3124,7 @@ var SubmenuItem = ({
3093
3124
  }
3094
3125
  );
3095
3126
  };
3127
+ SubmenuItem.__MENU_PRIMITIVE_TYPE = "MenuItem";
3096
3128
 
3097
3129
  // src/ActionMenu/ActionMenu.tsx
3098
3130
  var import_react20 = __toESM(require("react"));
@@ -3217,31 +3249,40 @@ var defaultUseSelectPropsForMulti = {
3217
3249
  var defaultUseComboboxPropsForMulti = {
3218
3250
  stateReducer: useComboboxStateReducerForMulti
3219
3251
  };
3252
+ var itemToKey2 = (item) => item?.id;
3220
3253
  var useDownshiftDefaults = ({
3221
3254
  isCombobox = false,
3222
3255
  isMulti = false,
3223
3256
  multiSelectProps = {}
3224
3257
  } = {}) => {
3225
3258
  const [hiddenItemsMap, setHiddenItemsMap] = import_react19.default.useState({});
3259
+ const hiddenItemsCount = import_react19.default.useMemo(
3260
+ () => Object.keys(hiddenItemsMap).filter(Boolean).length,
3261
+ [hiddenItemsMap]
3262
+ );
3226
3263
  const isItemDisabled = import_react19.default.useCallback(
3227
3264
  (item) => Boolean(item.disabled || hiddenItemsMap[item.id]),
3228
3265
  [hiddenItemsMap]
3229
3266
  );
3230
3267
  return {
3231
3268
  hiddenItemsMap,
3269
+ hiddenItemsCount,
3232
3270
  setHiddenItemsMap,
3233
3271
  defaultDownshiftProps: {
3234
3272
  select: !isCombobox ? {
3273
+ itemToKey: itemToKey2,
3235
3274
  // disabling while item.hidden so that hidden items are ignored by downshift
3236
3275
  isItemDisabled,
3237
3276
  ...isMulti ? defaultUseSelectPropsForMulti : defaultUseSelectProps
3238
3277
  } : {},
3239
3278
  combobox: isCombobox ? {
3279
+ itemToKey: itemToKey2,
3240
3280
  // disabling while item.hidden so that hidden items are ignored by downshift
3241
3281
  isItemDisabled,
3242
3282
  ...isMulti ? defaultUseComboboxPropsForMulti : defaultUseComboboxProps
3243
3283
  } : {},
3244
3284
  multi: isMulti ? {
3285
+ itemToKey: itemToKey2,
3245
3286
  // handles the prop name mapping for multi select
3246
3287
  ...getMultiSelectOverrides(multiSelectProps)
3247
3288
  } : {}
@@ -3549,7 +3590,7 @@ var MultiAutocomplete = ({
3549
3590
  menuItems,
3550
3591
  MenuItemComponent,
3551
3592
  itemToString: itemToString2 = itemToString,
3552
- itemToKey: itemToKey2 = itemToKey,
3593
+ itemToKey: itemToKey3 = itemToKey,
3553
3594
  getIsItemVisible = getDefaultGetIsItemVisible(itemToString2),
3554
3595
  showSelectedItemsInDropdown = false,
3555
3596
  initialSelectedItems = [],
@@ -3602,7 +3643,7 @@ var MultiAutocomplete = ({
3602
3643
  }, [selectedItemIds]);
3603
3644
  const useMultipleSelectionReturnProps = (0, import_downshift7.useMultipleSelection)({
3604
3645
  ...defaultDownshiftProps.multi,
3605
- itemToKey: itemToKey2,
3646
+ itemToKey: itemToKey3,
3606
3647
  selectedItems,
3607
3648
  onSelectedItemsChange: ({ selectedItems: selectedItems2, ...changes }) => {
3608
3649
  setSelectedItems(selectedItems2);
@@ -3614,7 +3655,7 @@ var MultiAutocomplete = ({
3614
3655
  ...defaultDownshiftProps.combobox,
3615
3656
  items: allMenuItems,
3616
3657
  itemToString: itemToString2,
3617
- itemToKey: itemToKey2,
3658
+ itemToKey: itemToKey3,
3618
3659
  stateReducer: reduceReducers(
3619
3660
  defaultDownshiftProps.combobox.stateReducer,
3620
3661
  externalStateReducer
@@ -3827,6 +3868,7 @@ var NestedMenuItem = ({
3827
3868
  childMenuId && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MenuItemActionRight, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_seeds_react_icon4.Icon, { name: "arrow-right-outline" }) })
3828
3869
  ] }) });
3829
3870
  };
3871
+ NestedMenuItem.__MENU_PRIMITIVE_TYPE = "MenuItem";
3830
3872
 
3831
3873
  // src/NestedMenu/NestedMenuContent.tsx
3832
3874
  var import_jsx_runtime27 = require("react/jsx-runtime");
@@ -3876,6 +3918,7 @@ var NestedMenuContent = ({
3876
3918
  }
3877
3919
  );
3878
3920
  };
3921
+ NestedMenuContent.__MENU_PRIMITIVE_TYPE = "MenuContent";
3879
3922
 
3880
3923
  // src/NestedMenu/NestedMenu.tsx
3881
3924
  var import_jsx_runtime28 = require("react/jsx-runtime");