@sproutsocial/seeds-react-menu 0.4.0 → 0.5.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.
Files changed (37) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/CHANGELOG.md +35 -0
  3. package/dist/esm/index.js +221 -137
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/index.d.mts +126 -101
  6. package/dist/index.d.ts +126 -101
  7. package/dist/index.js +236 -151
  8. package/dist/index.js.map +1 -1
  9. package/package.json +12 -12
  10. package/src/ActionMenu/ActionMenu.tsx +10 -3
  11. package/src/ActionMenu/ActionMenuTypes.ts +10 -6
  12. package/src/ActionMenu/__tests__/ActionMenu.test.tsx +0 -22
  13. package/src/ActionMenu/__tests__/ActionMenu.typetest.tsx +32 -3
  14. package/src/Autocomplete/Autocomplete.stories.tsx +24 -0
  15. package/src/Autocomplete/Autocomplete.tsx +10 -4
  16. package/src/Autocomplete/AutocompleteTypes.ts +6 -3
  17. package/src/Autocomplete/__tests__/Autocomplete.typetest.tsx +34 -3
  18. package/src/MenuContent/MenuContent.tsx +14 -1
  19. package/src/MenuContent/MenuContentTypes.ts +5 -5
  20. package/src/MenuContent/__tests__/MenuContent.typetest.tsx +17 -1
  21. package/src/MenuGroup/MenuGroup.feature +6 -6
  22. package/src/MenuGroup/MenuGroup.tsx +2 -1
  23. package/src/MenuGroup/MenuGroupTypes.ts +4 -6
  24. package/src/MenuGroup/__tests__/MenuGroup.typetest.tsx +23 -4
  25. package/src/MenuItem/MenuItem.tsx +0 -1
  26. package/src/MultiSelectMenu/MultiSelectMenu.tsx +10 -3
  27. package/src/MultiSelectMenu/MultiSelectMenuTypes.ts +8 -6
  28. package/src/MultiSelectMenu/__tests__/MultiSelectMenu.test.tsx +0 -43
  29. package/src/MultiSelectMenu/__tests__/MultiSelectMenu.typetest.tsx +29 -2
  30. package/src/SingleSelectMenu/SingleSelectMenu.tsx +10 -3
  31. package/src/SingleSelectMenu/SingleSelectMenuTypes.ts +7 -5
  32. package/src/SingleSelectMenu/__tests__/SingleSelectMenu.typetest.tsx +32 -2
  33. package/src/__tests__/Menu.test.tsx +38 -0
  34. package/src/hooks/useMenuChildren.tsx +210 -0
  35. package/src/index.ts +1 -1
  36. package/src/types.ts +26 -1
  37. package/src/hooks/useItemsFromChildren.tsx +0 -131
package/dist/index.js CHANGED
@@ -128,16 +128,14 @@ __export(index_exports, {
128
128
  StyledMenuItem: () => StyledMenuItem,
129
129
  StyledTitle: () => StyledTitle,
130
130
  defaultUseSelectProps: () => defaultUseSelectProps,
131
- useItemsFromChildren: () => useItemsFromChildren,
131
+ mapMenuItems: () => mapMenuItems,
132
132
  useMenu: () => useMenu,
133
+ useMenuChildren: () => useMenuChildren,
133
134
  useMenuContext: () => useMenuContext,
134
135
  useSelectStateReducer: () => useSelectStateReducer
135
136
  });
136
137
  module.exports = __toCommonJS(index_exports);
137
138
 
138
- // src/MenuItem/MenuItem.tsx
139
- var import_react3 = require("react");
140
-
141
139
  // src/MenuContext.tsx
142
140
  var import_react = require("react");
143
141
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -1960,7 +1958,7 @@ var INPUT_TYPES = {
1960
1958
  };
1961
1959
 
1962
1960
  // src/MenuHeader/MenuHeader.tsx
1963
- var import_react4 = require("react");
1961
+ var import_react3 = require("react");
1964
1962
 
1965
1963
  // src/MenuHeader/styles.tsx
1966
1964
  var import_styled_components4 = __toESM(require("styled-components"));
@@ -2039,21 +2037,179 @@ var MenuHeader = ({
2039
2037
 
2040
2038
  // src/MenuContent/styles.tsx
2041
2039
  var import_styled_components5 = __toESM(require("styled-components"));
2042
- var import_react5 = require("motion/react");
2043
- var StyledMenuContent = (0, import_styled_components5.default)(import_react5.motion.ul)`
2040
+ var import_react4 = require("motion/react");
2041
+ var StyledMenuContent = (0, import_styled_components5.default)(import_react4.motion.ul)`
2044
2042
  margin: 0;
2045
2043
  padding: 0;
2046
2044
  `;
2047
2045
 
2048
- // src/MenuContent/MenuContent.tsx
2046
+ // src/hooks/useMenuChildren.tsx
2047
+ var import_react5 = __toESM(require("react"));
2049
2048
  var import_jsx_runtime5 = require("react/jsx-runtime");
2049
+ var walkAllChildren = (children, callback) => {
2050
+ const walk = (element, parents2) => {
2051
+ if (element === null || element === void 0) return;
2052
+ callback(element, parents2);
2053
+ const newParents = [...parents2, element];
2054
+ const children2 = element.props?.children;
2055
+ import_react5.default.Children.toArray(children2).forEach((child) => {
2056
+ walk(child, newParents);
2057
+ });
2058
+ };
2059
+ const parents = [];
2060
+ import_react5.default.Children.toArray(children).forEach((child) => {
2061
+ walk(child, parents);
2062
+ });
2063
+ };
2064
+ var getComponentName = (element) => {
2065
+ if (element && typeof element === "object" && "type" in element && typeof element.type !== "string" && typeof element.type.name === "string") {
2066
+ return element.type.name;
2067
+ }
2068
+ };
2069
+ var getAllMenuItems = (children) => {
2070
+ const orderedElements = [];
2071
+ walkAllChildren(children, (element) => {
2072
+ switch (getComponentName(element)) {
2073
+ case "MenuItem":
2074
+ orderedElements.push({
2075
+ type: "item",
2076
+ element
2077
+ });
2078
+ break;
2079
+ case "MenuGroup":
2080
+ orderedElements.push({
2081
+ type: "group",
2082
+ element
2083
+ });
2084
+ break;
2085
+ case "MenuContent":
2086
+ orderedElements.push({
2087
+ type: "content",
2088
+ element
2089
+ });
2090
+ break;
2091
+ default:
2092
+ break;
2093
+ }
2094
+ });
2095
+ return { orderedElements };
2096
+ };
2097
+ var mapMenuItems = ({
2098
+ items,
2099
+ MenuItemComponent
2100
+ }) => {
2101
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: items.map((menuItem) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MenuItemComponent, { ...menuItem }, menuItem.id)) });
2102
+ };
2103
+ var useMenuChildren = ({
2104
+ children: childrenProp,
2105
+ items,
2106
+ MenuItemComponent = MenuItem
2107
+ }) => {
2108
+ const { allMenuItems, menuItemsMap, children } = (0, import_react5.useMemo)(() => {
2109
+ let children2 = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, {});
2110
+ let index = 0;
2111
+ const menuItemsMap2 = {};
2112
+ const allMenuItems2 = [];
2113
+ if (items && items.length) {
2114
+ items.forEach((menuItem) => {
2115
+ const item = {
2116
+ id: menuItem.id,
2117
+ index: index++,
2118
+ disabled: menuItem.disabled,
2119
+ menuItemProps: menuItem
2120
+ };
2121
+ allMenuItems2.push(item);
2122
+ menuItemsMap2[`${item.id}`] = item;
2123
+ });
2124
+ children2 = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MenuContent, { children: mapMenuItems({ items, MenuItemComponent }) });
2125
+ } else if (childrenProp) {
2126
+ children2 = childrenProp;
2127
+ const { orderedElements } = getAllMenuItems(childrenProp);
2128
+ orderedElements.forEach(({ type, element }) => {
2129
+ if (type === "content") {
2130
+ const menuContent = element;
2131
+ const items2 = menuContent.props.items;
2132
+ if (items2) {
2133
+ items2.forEach((menuItem) => {
2134
+ const item = {
2135
+ id: menuItem.id,
2136
+ index: index++,
2137
+ children: menuItem.children,
2138
+ disabled: menuItem.disabled,
2139
+ menuItemProps: menuItem
2140
+ };
2141
+ allMenuItems2.push(item);
2142
+ menuItemsMap2[`${item.id}`] = item;
2143
+ });
2144
+ }
2145
+ } else if (type === "group") {
2146
+ const menuGroup = element;
2147
+ const items2 = menuGroup.props.items;
2148
+ if (items2) {
2149
+ items2.forEach((menuItem) => {
2150
+ const item = {
2151
+ id: menuItem.id,
2152
+ index: index++,
2153
+ children: menuItem.children,
2154
+ disabled: menuItem.disabled,
2155
+ menuItemProps: menuItem,
2156
+ menuGroupProps: element.props
2157
+ };
2158
+ allMenuItems2.push(item);
2159
+ menuItemsMap2[`${item.id}`] = item;
2160
+ });
2161
+ } else if (menuGroup.props.children) {
2162
+ let children3 = menuGroup.props.children;
2163
+ if (!Array.isArray(children3)) {
2164
+ children3 = [children3];
2165
+ }
2166
+ children3.forEach((menuItem) => {
2167
+ const item = {
2168
+ id: menuItem.props.id,
2169
+ index: index++,
2170
+ children: menuItem.props.children,
2171
+ disabled: menuItem.props.disabled,
2172
+ menuItemProps: menuItem.props,
2173
+ menuGroupProps: element.props
2174
+ };
2175
+ allMenuItems2.push(item);
2176
+ menuItemsMap2[`${item.id}`] = item;
2177
+ });
2178
+ }
2179
+ } else {
2180
+ if (menuItemsMap2[`${element.props.id}`]) return;
2181
+ const menuItem = element;
2182
+ const item = {
2183
+ id: menuItem.props.id,
2184
+ index: index++,
2185
+ disabled: menuItem.props.disabled,
2186
+ menuItemProps: menuItem.props
2187
+ };
2188
+ allMenuItems2.push(item);
2189
+ menuItemsMap2[`${item.id}`] = item;
2190
+ }
2191
+ });
2192
+ }
2193
+ return { allMenuItems: allMenuItems2, menuItemsMap: menuItemsMap2, children: children2 };
2194
+ }, [childrenProp, items, MenuItemComponent]);
2195
+ return { allMenuItems, menuItemsMap, children };
2196
+ };
2197
+
2198
+ // src/MenuContent/MenuContent.tsx
2199
+ var import_jsx_runtime6 = require("react/jsx-runtime");
2050
2200
  var MenuContent = ({
2051
2201
  id = "menu_content",
2052
- children,
2202
+ children: childrenProp,
2203
+ items,
2204
+ MenuItemComponent = MenuItem,
2053
2205
  ...rest
2054
2206
  }) => {
2055
2207
  const { getToggleButtonProps, getMenuProps, isListbox } = useMenuContext();
2056
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2208
+ const children = childrenProp || !items || !items.length ? childrenProp : mapMenuItems({ items, MenuItemComponent });
2209
+ if (!children) {
2210
+ return null;
2211
+ }
2212
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2057
2213
  StyledMenuContent,
2058
2214
  {
2059
2215
  autoFocus: true,
@@ -2086,9 +2242,9 @@ var StyledMenuFooterBox = (0, import_styled_components6.default)(import_seeds_re
2086
2242
  `;
2087
2243
 
2088
2244
  // src/MenuFooter/MenuFooter.tsx
2089
- var import_jsx_runtime6 = require("react/jsx-runtime");
2245
+ var import_jsx_runtime7 = require("react/jsx-runtime");
2090
2246
  var MenuFooter = ({ children, ...rest }) => {
2091
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(StyledMenuFooterBox, { ...rest, children });
2247
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(StyledMenuFooterBox, { ...rest, children });
2092
2248
  };
2093
2249
 
2094
2250
  // src/MenuGroup/MenuGroup.tsx
@@ -2102,7 +2258,7 @@ var import_react7 = require("react");
2102
2258
  var import_styled_components7 = __toESM(require("styled-components"));
2103
2259
  var import_styled_components8 = __toESM(require("styled-components"));
2104
2260
  var import_seeds_react_system_props = require("@sproutsocial/seeds-react-system-props");
2105
- var import_jsx_runtime7 = require("react/jsx-runtime");
2261
+ var import_jsx_runtime8 = require("react/jsx-runtime");
2106
2262
  var import_react8 = require("react");
2107
2263
  var Container = import_styled_components8.default.span`
2108
2264
  margin: 0;
@@ -2163,7 +2319,7 @@ var SmallBodyCopy = (0, import_styled_components7.default)(styles_default)`
2163
2319
  `;
2164
2320
  var Text = ({ fontSize: fontSize2, children, qa, color: color2, ...rest }) => {
2165
2321
  const qaText = typeof children === "string" ? children : void 0;
2166
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2322
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2167
2323
  styles_default,
2168
2324
  {
2169
2325
  typeScale: fontSize2,
@@ -2178,7 +2334,7 @@ var Text = ({ fontSize: fontSize2, children, qa, color: color2, ...rest }) => {
2178
2334
  var withTextLogic = (Component) => {
2179
2335
  return ({ children, ...props }) => {
2180
2336
  const qaText = typeof children === "string" ? children : void 0;
2181
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Component, { "data-qa-text": qaText, ...props, children });
2337
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Component, { "data-qa-text": qaText, ...props, children });
2182
2338
  };
2183
2339
  };
2184
2340
  var HeadlineWithLogic = withTextLogic(Headline);
@@ -2232,7 +2388,7 @@ var StyledMenuGroupUl = import_styled_components9.default.ul`
2232
2388
  `;
2233
2389
 
2234
2390
  // src/MenuGroup/MenuGroup.tsx
2235
- var import_jsx_runtime8 = require("react/jsx-runtime");
2391
+ var import_jsx_runtime9 = require("react/jsx-runtime");
2236
2392
  var MenuGroup = ({
2237
2393
  titleAs = "h3",
2238
2394
  children: childrenProp,
@@ -2245,11 +2401,11 @@ var MenuGroup = ({
2245
2401
  ...rest
2246
2402
  }) => {
2247
2403
  const titleId = `menu-group-title-${Math.random().toString(36).slice(2, 11)}`;
2248
- const children = childrenProp || !items || !items.length ? childrenProp : items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(MenuItemComponent, { ...item }, item.id));
2404
+ const children = childrenProp || !items || !items.length ? childrenProp : mapMenuItems({ items, MenuItemComponent });
2249
2405
  if (!children) {
2250
2406
  return null;
2251
2407
  }
2252
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2408
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
2253
2409
  StyledMenuGroup,
2254
2410
  {
2255
2411
  role: "group",
@@ -2259,8 +2415,8 @@ var MenuGroup = ({
2259
2415
  color: color2,
2260
2416
  ...rest,
2261
2417
  children: [
2262
- title && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(StyledTitle, { role: "heading", as: titleAs, id: titleId, children: title }),
2263
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(StyledMenuGroupUl, { children })
2418
+ title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(StyledTitle, { role: "heading", as: titleAs, id: titleId, children: title }),
2419
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(StyledMenuGroupUl, { children })
2264
2420
  ]
2265
2421
  }
2266
2422
  );
@@ -2270,7 +2426,7 @@ var MenuGroup = ({
2270
2426
  var import_react10 = require("react");
2271
2427
  var import_styled_components10 = __toESM(require("styled-components"));
2272
2428
  var import_seeds_react_popout = require("@sproutsocial/seeds-react-popout");
2273
- var import_jsx_runtime9 = require("react/jsx-runtime");
2429
+ var import_jsx_runtime10 = require("react/jsx-runtime");
2274
2430
  var CustomPopoutContent = (0, import_styled_components10.default)(import_seeds_react_popout.Popout.Content)`
2275
2431
  padding: 0;
2276
2432
  margin-left: 0;
@@ -2290,13 +2446,13 @@ var MenuRoot = ({
2290
2446
  },
2291
2447
  [openMenu, closeMenu]
2292
2448
  );
2293
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MenuProvider, { menuProps: contextProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2449
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MenuProvider, { menuProps: contextProps, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2294
2450
  import_seeds_react_popout.Popout,
2295
2451
  {
2296
2452
  menuPopout: true,
2297
2453
  isOpen: !!isOpen,
2298
2454
  setIsOpen,
2299
- content: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CustomPopoutContent, { width: width2, children }),
2455
+ content: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CustomPopoutContent, { width: width2, children }),
2300
2456
  focusLockProps: {
2301
2457
  // correct jerking motion when scrolling while the Popout is open
2302
2458
  // returnFocus: false,
@@ -2313,22 +2469,22 @@ var MenuRoot = ({
2313
2469
  // src/MenuLabel.tsx
2314
2470
  var import_react11 = require("react");
2315
2471
  var import_seeds_react_label = require("@sproutsocial/seeds-react-label");
2316
- var import_jsx_runtime10 = require("react/jsx-runtime");
2472
+ var import_jsx_runtime11 = require("react/jsx-runtime");
2317
2473
  var MenuLabel = ({ children, ...rest }) => {
2318
2474
  const { getLabelProps } = useMenuContext();
2319
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_seeds_react_label.Label, { htmlFor: "fallback_menu_label", ...getLabelProps?.(), ...rest, children });
2475
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_seeds_react_label.Label, { htmlFor: "fallback_menu_label", ...getLabelProps?.(), ...rest, children });
2320
2476
  };
2321
2477
 
2322
2478
  // src/MenuToggleButton.tsx
2323
2479
  var import_react12 = require("react");
2324
2480
  var import_seeds_react_button = require("@sproutsocial/seeds-react-button");
2325
- var import_jsx_runtime11 = require("react/jsx-runtime");
2481
+ var import_jsx_runtime12 = require("react/jsx-runtime");
2326
2482
  var MenuToggleButton = ({
2327
2483
  children,
2328
2484
  ...rest
2329
2485
  }) => {
2330
2486
  const { getToggleButtonProps, isListbox, getDropdownProps } = (0, import_react12.useContext)(MenuContext);
2331
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2487
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2332
2488
  import_seeds_react_button.Button,
2333
2489
  {
2334
2490
  appearance: "secondary",
@@ -2345,104 +2501,8 @@ var MenuToggleButton = ({
2345
2501
  };
2346
2502
 
2347
2503
  // src/ActionMenu/ActionMenu.tsx
2348
- var import_react14 = __toESM(require("react"));
2349
- var import_downshift2 = require("downshift");
2350
-
2351
- // src/hooks/useItemsFromChildren.tsx
2352
2504
  var import_react13 = __toESM(require("react"));
2353
- var walkAllChildren = (children, callback) => {
2354
- const walk = (element, parents2) => {
2355
- if (element === null || element === void 0) return;
2356
- callback(element, parents2);
2357
- const newParents = [...parents2, element];
2358
- const children2 = element.props?.children;
2359
- import_react13.default.Children.toArray(children2).forEach((child) => {
2360
- walk(child, newParents);
2361
- });
2362
- };
2363
- const parents = [];
2364
- import_react13.default.Children.toArray(children).forEach((child) => {
2365
- walk(child, parents);
2366
- });
2367
- };
2368
- var checkIfIsElement = (element, name) => {
2369
- return !!(element && typeof element === "object" && "type" in element && typeof element.type !== "string" && typeof element.type.name === "string" && element.type.name === name);
2370
- };
2371
- var getAllMenuItems = (children) => {
2372
- const orderedElements = [];
2373
- walkAllChildren(children, (element) => {
2374
- if (checkIfIsElement(element, "MenuItem")) {
2375
- orderedElements.push({
2376
- type: "item",
2377
- element
2378
- });
2379
- } else if (checkIfIsElement(element, "MenuGroup")) {
2380
- orderedElements.push({
2381
- type: "group",
2382
- element
2383
- });
2384
- }
2385
- });
2386
- return { orderedElements };
2387
- };
2388
- var useItemsFromChildren = ({
2389
- children
2390
- }) => {
2391
- const { allMenuItems, menuItemsMap } = (0, import_react13.useMemo)(() => {
2392
- const { orderedElements } = getAllMenuItems(children);
2393
- const menuItemsMap2 = {};
2394
- const allMenuItems2 = [];
2395
- let index = 0;
2396
- orderedElements.forEach(({ type, element }) => {
2397
- if (type === "group") {
2398
- const menuGroup = element;
2399
- const items = menuGroup.props.items;
2400
- if (items) {
2401
- items.forEach((menuItem) => {
2402
- const item = {
2403
- id: menuItem.id,
2404
- index: index++,
2405
- disabled: menuItem.disabled,
2406
- menuItemProps: menuItem,
2407
- menuGroupProps: element.props
2408
- };
2409
- allMenuItems2.push(item);
2410
- menuItemsMap2[`${item.id}`] = item;
2411
- });
2412
- } else if (menuGroup.props.children) {
2413
- let children2 = menuGroup.props.children;
2414
- if (!Array.isArray(children2)) {
2415
- children2 = [children2];
2416
- }
2417
- children2.forEach((menuItem) => {
2418
- const item = {
2419
- id: menuItem.props.id,
2420
- index: index++,
2421
- disabled: menuItem.props.disabled,
2422
- menuItemProps: menuItem.props,
2423
- menuGroupProps: element.props
2424
- };
2425
- allMenuItems2.push(item);
2426
- menuItemsMap2[`${item.id}`] = item;
2427
- });
2428
- }
2429
- } else {
2430
- if (menuItemsMap2[`${element.props.id}`]) return;
2431
- const menuItem = element;
2432
- const item = {
2433
- id: menuItem.props.id,
2434
- index: index++,
2435
- disabled: menuItem.props.disabled,
2436
- menuItemProps: menuItem.props
2437
- };
2438
- allMenuItems2.push(item);
2439
- menuItemsMap2[`${item.id}`] = item;
2440
- }
2441
- });
2442
- return { allMenuItems: allMenuItems2, menuItemsMap: menuItemsMap2 };
2443
- }, [children]);
2444
- return { allMenuItems, menuItemsMap };
2445
- };
2505
+ var import_downshift2 = require("downshift");
2446
2506
 
2447
2507
  // src/reducers/useSelectStateReducer.tsx
2448
2508
  var import_downshift = require("downshift");
@@ -2472,7 +2532,7 @@ var itemToString = (item) => {
2472
2532
  };
2473
2533
 
2474
2534
  // src/ActionMenu/ActionMenu.tsx
2475
- var import_jsx_runtime12 = require("react/jsx-runtime");
2535
+ var import_jsx_runtime13 = require("react/jsx-runtime");
2476
2536
  var handleStateChange = (changes, currentSelectedItem) => {
2477
2537
  if (!(changes.type === import_downshift2.useSelect.stateChangeTypes.ToggleButtonKeyDownEnter || changes.type === import_downshift2.useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton)) {
2478
2538
  return;
@@ -2505,12 +2565,18 @@ var handleStateChange = (changes, currentSelectedItem) => {
2505
2565
  }
2506
2566
  };
2507
2567
  var ActionMenu = ({
2508
- children,
2568
+ children: childrenProp,
2569
+ items,
2570
+ MenuItemComponent = MenuItem,
2509
2571
  stateReducer: externalStateReducer,
2510
2572
  ...useSelectProps
2511
2573
  }) => {
2512
- const { allMenuItems, menuItemsMap } = useItemsFromChildren({ children });
2513
- const [currentSelectedItem, setCurrentSelectedItem] = import_react14.default.useState(null);
2574
+ const { allMenuItems, menuItemsMap, children } = useMenuChildren({
2575
+ children: childrenProp,
2576
+ items,
2577
+ MenuItemComponent
2578
+ });
2579
+ const [currentSelectedItem, setCurrentSelectedItem] = import_react13.default.useState(null);
2514
2580
  const { isOpen, ...useSelectReturnProps } = (0, import_downshift2.useSelect)({
2515
2581
  ...defaultUseSelectProps,
2516
2582
  items: allMenuItems,
@@ -2526,10 +2592,10 @@ var ActionMenu = ({
2526
2592
  },
2527
2593
  ...useSelectProps
2528
2594
  });
2529
- (0, import_react14.useEffect)(() => {
2595
+ (0, import_react13.useEffect)(() => {
2530
2596
  setCurrentSelectedItem(useSelectReturnProps.selectedItem);
2531
2597
  }, [useSelectReturnProps.selectedItem]);
2532
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2598
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2533
2599
  MenuRoot,
2534
2600
  {
2535
2601
  ...{
@@ -2547,15 +2613,21 @@ var ActionMenu = ({
2547
2613
  };
2548
2614
 
2549
2615
  // src/SingleSelectMenu/SingleSelectMenu.tsx
2550
- var import_react15 = require("react");
2616
+ var import_react14 = require("react");
2551
2617
  var import_downshift3 = require("downshift");
2552
- var import_jsx_runtime13 = require("react/jsx-runtime");
2618
+ var import_jsx_runtime14 = require("react/jsx-runtime");
2553
2619
  var SingleSelectMenu = ({
2554
- children,
2620
+ children: childrenProp,
2555
2621
  stateReducer: externalStateReducer,
2622
+ items,
2623
+ MenuItemComponent = MenuItem,
2556
2624
  ...useSelectProps
2557
2625
  }) => {
2558
- const { allMenuItems, menuItemsMap } = useItemsFromChildren({ children });
2626
+ const { allMenuItems, menuItemsMap, children } = useMenuChildren({
2627
+ children: childrenProp,
2628
+ items,
2629
+ MenuItemComponent
2630
+ });
2559
2631
  const { isOpen, ...useSelectReturnProps } = (0, import_downshift3.useSelect)({
2560
2632
  ...defaultUseSelectProps,
2561
2633
  items: allMenuItems,
@@ -2570,7 +2642,7 @@ var SingleSelectMenu = ({
2570
2642
  },
2571
2643
  ...useSelectProps
2572
2644
  });
2573
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2645
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2574
2646
  MenuRoot,
2575
2647
  {
2576
2648
  ...{
@@ -2588,9 +2660,9 @@ var SingleSelectMenu = ({
2588
2660
  };
2589
2661
 
2590
2662
  // src/MultiSelectMenu/MultiSelectMenu.tsx
2591
- var import_react16 = require("react");
2663
+ var import_react15 = require("react");
2592
2664
  var import_downshift4 = require("downshift");
2593
- var import_jsx_runtime14 = require("react/jsx-runtime");
2665
+ var import_jsx_runtime15 = require("react/jsx-runtime");
2594
2666
  var selectReducerForMultiSelect = (state, actionAndChanges) => {
2595
2667
  const { changes, type } = actionAndChanges;
2596
2668
  switch (type) {
@@ -2610,14 +2682,20 @@ var selectReducerForMultiSelect = (state, actionAndChanges) => {
2610
2682
  return changes;
2611
2683
  };
2612
2684
  var MultiSelectMenu = ({
2613
- children,
2685
+ children: childrenProp,
2686
+ items,
2687
+ MenuItemComponent = MenuItem,
2614
2688
  stateReducer: externalStateReducer,
2615
2689
  getA11yMultiStatusMessage,
2616
2690
  onMultiSelectStateChange,
2617
2691
  multiSelectStateReducer,
2618
2692
  ...useSelectProps
2619
2693
  }) => {
2620
- const { allMenuItems, menuItemsMap } = useItemsFromChildren({ children });
2694
+ const { allMenuItems, menuItemsMap, children } = useMenuChildren({
2695
+ children: childrenProp,
2696
+ items,
2697
+ MenuItemComponent
2698
+ });
2621
2699
  const multiSelectOverrides = Object.entries({
2622
2700
  ...useSelectProps,
2623
2701
  getA11yStatusMessage: getA11yMultiStatusMessage,
@@ -2677,7 +2755,7 @@ var MultiSelectMenu = ({
2677
2755
  },
2678
2756
  ...useSelectProps
2679
2757
  });
2680
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2758
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2681
2759
  MenuRoot,
2682
2760
  {
2683
2761
  ...{
@@ -2704,7 +2782,7 @@ var MultiSelectMenu = ({
2704
2782
  };
2705
2783
 
2706
2784
  // src/Autocomplete/Autocomplete.tsx
2707
- var import_react17 = __toESM(require("react"));
2785
+ var import_react16 = __toESM(require("react"));
2708
2786
  var import_downshift6 = require("downshift");
2709
2787
 
2710
2788
  // src/reducers/useComboboxStateReducer.tsx
@@ -2730,16 +2808,22 @@ var defaultUseComboboxProps = {
2730
2808
  };
2731
2809
 
2732
2810
  // src/Autocomplete/Autocomplete.tsx
2733
- var import_jsx_runtime15 = require("react/jsx-runtime");
2811
+ var import_jsx_runtime16 = require("react/jsx-runtime");
2734
2812
  var Autocomplete = ({
2735
- children,
2813
+ children: childrenProp,
2736
2814
  stateReducer: externalStateReducer,
2815
+ items: itemsProp,
2816
+ MenuItemComponent = MenuItem,
2737
2817
  itemToString: itemToString2 = itemToString,
2738
2818
  getIsItemVisible = (item, inputValue) => itemToString2(item).toLowerCase().startsWith(inputValue.toLowerCase()),
2739
2819
  ...useComboboxProps
2740
2820
  }) => {
2741
- const { allMenuItems } = useItemsFromChildren({ children });
2742
- const [items, setItems] = import_react17.default.useState(allMenuItems);
2821
+ const { allMenuItems, children } = useMenuChildren({
2822
+ children: childrenProp,
2823
+ items: itemsProp,
2824
+ MenuItemComponent
2825
+ });
2826
+ const [items, setItems] = import_react16.default.useState(allMenuItems);
2743
2827
  const { isOpen, ...useComboboxReturnProps } = (0, import_downshift6.useCombobox)({
2744
2828
  ...defaultUseComboboxProps,
2745
2829
  items,
@@ -2765,7 +2849,7 @@ var Autocomplete = ({
2765
2849
  },
2766
2850
  ...useComboboxProps
2767
2851
  });
2768
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2852
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2769
2853
  MenuRoot,
2770
2854
  {
2771
2855
  ...{
@@ -2785,9 +2869,9 @@ var Autocomplete = ({
2785
2869
  };
2786
2870
 
2787
2871
  // src/Autocomplete/AutocompleteInput.tsx
2788
- var import_react18 = require("react");
2872
+ var import_react17 = require("react");
2789
2873
  var import_seeds_react_input = require("@sproutsocial/seeds-react-input");
2790
- var import_jsx_runtime16 = require("react/jsx-runtime");
2874
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2791
2875
  var AutocompleteInput = ({
2792
2876
  onKeyDown,
2793
2877
  onChange,
@@ -2797,8 +2881,8 @@ var AutocompleteInput = ({
2797
2881
  inputProps,
2798
2882
  ...rest
2799
2883
  }) => {
2800
- const { getInputProps, inputValue } = (0, import_react18.useContext)(MenuContext);
2801
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2884
+ const { getInputProps, inputValue } = (0, import_react17.useContext)(MenuContext);
2885
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2802
2886
  import_seeds_react_input.Input,
2803
2887
  {
2804
2888
  id: "autocomplete_input",
@@ -2848,8 +2932,9 @@ var AutocompleteInput = ({
2848
2932
  StyledMenuItem,
2849
2933
  StyledTitle,
2850
2934
  defaultUseSelectProps,
2851
- useItemsFromChildren,
2935
+ mapMenuItems,
2852
2936
  useMenu,
2937
+ useMenuChildren,
2853
2938
  useMenuContext,
2854
2939
  useSelectStateReducer
2855
2940
  });