@sproutsocial/seeds-react-menu 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +86 -10
- package/CHANGELOG.md +44 -0
- package/dist/esm/index.js +537 -126
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +47 -16
- package/dist/index.d.ts +47 -16
- package/dist/index.js +602 -184
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/ActionMenu/ActionMenu.tsx +4 -3
- package/src/ActionMenu/ActionMenuTypes.ts +5 -4
- package/src/ActionMenu/__tests__/ActionMenu.test.tsx +1 -1
- package/src/Autocomplete/Autocomplete.stories.tsx +124 -32
- package/src/Autocomplete/AutocompleteSelect.tsx +24 -0
- package/src/Autocomplete/AutocompleteTypes.ts +5 -2
- package/src/Autocomplete/MultiAutocomplete.tsx +3 -2
- package/src/Autocomplete/SingleAutocomplete.tsx +4 -4
- package/src/Autocomplete/index.ts +2 -0
- package/src/ListboxToggleButton.tsx +65 -0
- package/src/MenuContent/MenuContentTypes.ts +1 -2
- package/src/MenuContent/styles.tsx +6 -9
- package/src/MenuGroup/__tests__/MenuGroup.test.tsx +1 -1
- package/src/MenuItem/__tests__/MenuItem.test.tsx +1 -3
- package/src/MenuRoot/MenuRoot.tsx +95 -15
- package/src/MultiSelectMenu/MultiSelectMenu.stories.tsx +0 -1
- package/src/MultiSelectMenu/MultiSelectMenu.tsx +3 -2
- package/src/MultiSelectMenu/MultiSelectMenuTypes.ts +5 -3
- package/src/NestedMenu/NestedMenu.feature +1 -1
- package/src/NestedMenu/NestedMenu.stories.tsx +25 -7
- package/src/NestedMenu/NestedMenu.tsx +217 -43
- package/src/NestedMenu/NestedMenuContext.tsx +16 -0
- package/src/NestedMenu/NestedMenuHeader.tsx +19 -6
- package/src/NestedMenu/NestedMenuItem.tsx +11 -8
- package/src/NestedMenu/NestedMenuPopout.tsx +55 -0
- package/src/NestedMenu/NestedMenuRoot.tsx +27 -0
- package/src/NestedMenu/NestedMenuTypes.ts +3 -2
- package/src/NestedMenu/__tests__/NestedMenu.test.tsx +210 -19
- package/src/SingleSelectMenu/SingleSelectMenu.stories.tsx +0 -1
- package/src/SingleSelectMenu/SingleSelectMenu.tsx +3 -2
- package/src/SingleSelectMenu/SingleSelectMenuTypes.ts +5 -3
- package/src/__tests__/Menu.test.tsx +1 -1
- package/src/index.ts +1 -0
- package/src/storybookUtilities/menu-storybook-components.tsx +11 -31
- package/src/types.ts +5 -1
package/dist/index.js
CHANGED
|
@@ -106,7 +106,11 @@ __export(index_exports, {
|
|
|
106
106
|
ActionMenu: () => ActionMenu,
|
|
107
107
|
Autocomplete: () => Autocomplete,
|
|
108
108
|
AutocompleteInput: () => AutocompleteInput,
|
|
109
|
+
AutocompleteSelect: () => AutocompleteSelect,
|
|
110
|
+
AutocompleteTokenInput: () => AutocompleteTokenInput,
|
|
111
|
+
CustomPopoutContent: () => CustomPopoutContent,
|
|
109
112
|
INPUT_TYPES: () => INPUT_TYPES,
|
|
113
|
+
ListboxToggleButton: () => ListboxToggleButton,
|
|
110
114
|
MenuContent: () => MenuContent,
|
|
111
115
|
MenuContentContext: () => MenuContentContext,
|
|
112
116
|
MenuContentProvider: () => MenuContentProvider,
|
|
@@ -121,7 +125,9 @@ __export(index_exports, {
|
|
|
121
125
|
MenuItemRow: () => MenuItemRow,
|
|
122
126
|
MenuItemText: () => MenuItemText,
|
|
123
127
|
MenuLabel: () => MenuLabel,
|
|
128
|
+
MenuPopout: () => MenuPopout,
|
|
124
129
|
MenuRoot: () => MenuRoot,
|
|
130
|
+
MenuRootNoPopout: () => MenuRootNoPopout,
|
|
125
131
|
MenuSearchInput: () => MenuSearchInput,
|
|
126
132
|
MenuSearchTokenInput: () => MenuSearchTokenInput,
|
|
127
133
|
MenuToggleButton: () => MenuToggleButton,
|
|
@@ -136,6 +142,7 @@ __export(index_exports, {
|
|
|
136
142
|
NestedMenuItem: () => NestedMenuItem,
|
|
137
143
|
NestedMenuProvider: () => NestedMenuProvider,
|
|
138
144
|
SingleSelectMenu: () => SingleSelectMenu,
|
|
145
|
+
StyledListboxToggleButton: () => StyledListboxToggleButton,
|
|
139
146
|
StyledMenuGroup: () => StyledMenuGroup,
|
|
140
147
|
StyledMenuGroupUl: () => StyledMenuGroupUl,
|
|
141
148
|
StyledMenuItem: () => StyledMenuItem,
|
|
@@ -2173,14 +2180,18 @@ var MenuHeader = ({
|
|
|
2173
2180
|
|
|
2174
2181
|
// src/MenuContent/styles.tsx
|
|
2175
2182
|
var import_styled_components5 = __toESM(require("styled-components"));
|
|
2176
|
-
var
|
|
2177
|
-
var StyledMenuContent = (0, import_styled_components5.default)(import_react4.motion.ul)`
|
|
2183
|
+
var StyledMenuContent = import_styled_components5.default.ul`
|
|
2178
2184
|
margin: 0;
|
|
2179
2185
|
padding: 0;
|
|
2186
|
+
|
|
2187
|
+
&:focus {
|
|
2188
|
+
outline: none;
|
|
2189
|
+
box-shadow: none;
|
|
2190
|
+
}
|
|
2180
2191
|
`;
|
|
2181
2192
|
|
|
2182
2193
|
// src/hooks/useMenuChildren.tsx
|
|
2183
|
-
var
|
|
2194
|
+
var import_react4 = __toESM(require("react"));
|
|
2184
2195
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
2185
2196
|
var walkAllChildren = (children, callback) => {
|
|
2186
2197
|
const walk = (element, parents2) => {
|
|
@@ -2188,12 +2199,12 @@ var walkAllChildren = (children, callback) => {
|
|
|
2188
2199
|
callback(element, parents2);
|
|
2189
2200
|
const newParents = [...parents2, element];
|
|
2190
2201
|
const children2 = element.props?.children;
|
|
2191
|
-
|
|
2202
|
+
import_react4.default.Children.toArray(children2).forEach((child) => {
|
|
2192
2203
|
walk(child, newParents);
|
|
2193
2204
|
});
|
|
2194
2205
|
};
|
|
2195
2206
|
const parents = [];
|
|
2196
|
-
|
|
2207
|
+
import_react4.default.Children.toArray(children).forEach((child) => {
|
|
2197
2208
|
walk(child, parents);
|
|
2198
2209
|
});
|
|
2199
2210
|
};
|
|
@@ -2328,7 +2339,7 @@ var useMenuChildren = ({
|
|
|
2328
2339
|
menuItems,
|
|
2329
2340
|
MenuItemComponent
|
|
2330
2341
|
}) => {
|
|
2331
|
-
const { allMenuItems, menuItemsMap, children } = (0,
|
|
2342
|
+
const { allMenuItems, menuItemsMap, children } = (0, import_react4.useMemo)(() => {
|
|
2332
2343
|
let children2 = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, {});
|
|
2333
2344
|
const menuItemsMap2 = {};
|
|
2334
2345
|
const allMenuItems2 = [];
|
|
@@ -2351,7 +2362,7 @@ var useMenuChildren = ({
|
|
|
2351
2362
|
};
|
|
2352
2363
|
|
|
2353
2364
|
// src/MenuContent/MenuContent.tsx
|
|
2354
|
-
var
|
|
2365
|
+
var import_react5 = require("react");
|
|
2355
2366
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
2356
2367
|
var MenuContent = ({
|
|
2357
2368
|
id = "menu_content",
|
|
@@ -2368,7 +2379,7 @@ var MenuContent = ({
|
|
|
2368
2379
|
if (!children) {
|
|
2369
2380
|
return null;
|
|
2370
2381
|
}
|
|
2371
|
-
const handleKeyDown = (0,
|
|
2382
|
+
const handleKeyDown = (0, import_react5.useCallback)(
|
|
2372
2383
|
(e) => {
|
|
2373
2384
|
toggleButtonProps?.["onKeyDown"]?.(e);
|
|
2374
2385
|
onKeyDown?.(e);
|
|
@@ -2398,7 +2409,7 @@ var MenuContent = ({
|
|
|
2398
2409
|
MenuContent.__MENU_PRIMITIVE_TYPE = "MenuContent";
|
|
2399
2410
|
|
|
2400
2411
|
// src/MenuFooter/MenuFooter.tsx
|
|
2401
|
-
var
|
|
2412
|
+
var import_react6 = require("react");
|
|
2402
2413
|
|
|
2403
2414
|
// src/MenuFooter/styles.tsx
|
|
2404
2415
|
var import_styled_components6 = __toESM(require("styled-components"));
|
|
@@ -2415,18 +2426,18 @@ var MenuFooter = ({ children, ...rest }) => {
|
|
|
2415
2426
|
};
|
|
2416
2427
|
|
|
2417
2428
|
// src/MenuGroup/MenuGroup.tsx
|
|
2418
|
-
var
|
|
2429
|
+
var import_react9 = require("react");
|
|
2419
2430
|
|
|
2420
2431
|
// src/MenuGroup/styles.tsx
|
|
2421
2432
|
var import_styled_components9 = __toESM(require("styled-components"));
|
|
2422
2433
|
|
|
2423
2434
|
// ../seeds-react-text/dist/esm/index.js
|
|
2424
|
-
var
|
|
2435
|
+
var import_react7 = require("react");
|
|
2425
2436
|
var import_styled_components7 = __toESM(require("styled-components"));
|
|
2426
2437
|
var import_styled_components8 = __toESM(require("styled-components"));
|
|
2427
2438
|
var import_seeds_react_system_props = require("@sproutsocial/seeds-react-system-props");
|
|
2428
2439
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
2429
|
-
var
|
|
2440
|
+
var import_react8 = require("react");
|
|
2430
2441
|
var Container = import_styled_components8.default.span`
|
|
2431
2442
|
margin: 0;
|
|
2432
2443
|
padding-left: 0;
|
|
@@ -2592,15 +2603,81 @@ var MenuGroup = ({
|
|
|
2592
2603
|
MenuGroup.__MENU_PRIMITIVE_TYPE = "MenuGroup";
|
|
2593
2604
|
|
|
2594
2605
|
// src/MenuRoot/MenuRoot.tsx
|
|
2595
|
-
var
|
|
2606
|
+
var import_react10 = require("react");
|
|
2596
2607
|
var import_styled_components10 = __toESM(require("styled-components"));
|
|
2597
2608
|
var import_seeds_react_popout = require("@sproutsocial/seeds-react-popout");
|
|
2609
|
+
|
|
2610
|
+
// ../../seeds-design-tokens/seeds-motion/dist/seeds-motion-unitless.esm.js
|
|
2611
|
+
var MOTION_DURATION_FAST = 0.15;
|
|
2612
|
+
|
|
2613
|
+
// src/MenuRoot/MenuRoot.tsx
|
|
2598
2614
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
2599
2615
|
var CustomPopoutContent = (0, import_styled_components10.default)(import_seeds_react_popout.Popout.Content)`
|
|
2600
2616
|
padding: 0;
|
|
2601
2617
|
margin-left: 0;
|
|
2602
2618
|
margin-right: 0;
|
|
2603
2619
|
`;
|
|
2620
|
+
var menuAnimationConfig = {
|
|
2621
|
+
initial: {
|
|
2622
|
+
scale: 0,
|
|
2623
|
+
opacity: 0,
|
|
2624
|
+
originX: 0,
|
|
2625
|
+
originY: 0
|
|
2626
|
+
},
|
|
2627
|
+
animate: {
|
|
2628
|
+
opacity: 1,
|
|
2629
|
+
scale: 1,
|
|
2630
|
+
originX: 0,
|
|
2631
|
+
originY: 0,
|
|
2632
|
+
transition: {
|
|
2633
|
+
type: "tween",
|
|
2634
|
+
duration: MOTION_DURATION_FAST,
|
|
2635
|
+
ease: "circOut"
|
|
2636
|
+
}
|
|
2637
|
+
},
|
|
2638
|
+
exit: {
|
|
2639
|
+
opacity: 0,
|
|
2640
|
+
scale: 1,
|
|
2641
|
+
transition: {
|
|
2642
|
+
type: "tween",
|
|
2643
|
+
duration: MOTION_DURATION_FAST,
|
|
2644
|
+
ease: "circIn"
|
|
2645
|
+
}
|
|
2646
|
+
}
|
|
2647
|
+
};
|
|
2648
|
+
var MenuPopout = ({
|
|
2649
|
+
content,
|
|
2650
|
+
width: width2 = "300px",
|
|
2651
|
+
isOpen,
|
|
2652
|
+
openMenu,
|
|
2653
|
+
closeMenu,
|
|
2654
|
+
focusLockProps,
|
|
2655
|
+
...popoutProps
|
|
2656
|
+
}) => {
|
|
2657
|
+
const setIsOpen = (0, import_react10.useCallback)(
|
|
2658
|
+
(newIsOpen) => {
|
|
2659
|
+
newIsOpen ? openMenu?.() : closeMenu?.();
|
|
2660
|
+
},
|
|
2661
|
+
[openMenu, closeMenu]
|
|
2662
|
+
);
|
|
2663
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2664
|
+
import_seeds_react_popout.Popout,
|
|
2665
|
+
{
|
|
2666
|
+
isOpen: !!isOpen,
|
|
2667
|
+
setIsOpen,
|
|
2668
|
+
content: (props) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CustomPopoutContent, { width: popoutProps.fullWidth ? "initial" : width2, children: typeof content === "function" ? content(props) : content }),
|
|
2669
|
+
focusLockProps: {
|
|
2670
|
+
// correct jerking motion when scrolling while the Popout is open
|
|
2671
|
+
// returnFocus: false,
|
|
2672
|
+
crossFrame: false,
|
|
2673
|
+
...focusLockProps
|
|
2674
|
+
},
|
|
2675
|
+
disableWrapperAria: true,
|
|
2676
|
+
animationConfig: menuAnimationConfig,
|
|
2677
|
+
...popoutProps
|
|
2678
|
+
}
|
|
2679
|
+
);
|
|
2680
|
+
};
|
|
2604
2681
|
var MenuRoot = ({
|
|
2605
2682
|
children,
|
|
2606
2683
|
menuToggleElement,
|
|
@@ -2616,13 +2693,13 @@ var MenuRoot = ({
|
|
|
2616
2693
|
hiddenItemsCount = 0,
|
|
2617
2694
|
items
|
|
2618
2695
|
} = contextProps;
|
|
2619
|
-
const setIsOpen = (0,
|
|
2696
|
+
const setIsOpen = (0, import_react10.useCallback)(
|
|
2620
2697
|
(newIsOpen) => {
|
|
2621
2698
|
newIsOpen ? openMenu?.() : closeMenu?.();
|
|
2622
2699
|
},
|
|
2623
2700
|
[openMenu, closeMenu]
|
|
2624
2701
|
);
|
|
2625
|
-
(0,
|
|
2702
|
+
(0, import_react10.useEffect)(() => {
|
|
2626
2703
|
if (!inputValue) return;
|
|
2627
2704
|
if (items && hiddenItemsCount >= items.length && isOpen) {
|
|
2628
2705
|
closeMenu?.();
|
|
@@ -2630,28 +2707,29 @@ var MenuRoot = ({
|
|
|
2630
2707
|
}, [hiddenItemsCount, items?.length, isOpen, inputValue]);
|
|
2631
2708
|
const menuContext = useMenu(contextProps);
|
|
2632
2709
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2633
|
-
|
|
2710
|
+
MenuPopout,
|
|
2634
2711
|
{
|
|
2635
|
-
menuPopout: true,
|
|
2636
2712
|
placement,
|
|
2637
2713
|
isOpen: !!isOpen,
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
// correct jerking motion when scrolling while the Popout is open
|
|
2642
|
-
// returnFocus: false,
|
|
2643
|
-
crossFrame: false,
|
|
2644
|
-
...focusLockProps
|
|
2645
|
-
},
|
|
2646
|
-
disableWrapperAria: true,
|
|
2714
|
+
openMenu,
|
|
2715
|
+
closeMenu,
|
|
2716
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MenuContentProvider, { menuContext, children }),
|
|
2647
2717
|
...popoutProps,
|
|
2648
2718
|
children: (toggleProps) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MenuToggleProvider, { menuContext: { ...menuContext, ...toggleProps }, children: menuToggleElement })
|
|
2649
2719
|
}
|
|
2650
2720
|
);
|
|
2651
2721
|
};
|
|
2722
|
+
var MenuRootNoPopout = ({
|
|
2723
|
+
children,
|
|
2724
|
+
menuToggleElement,
|
|
2725
|
+
...contextProps
|
|
2726
|
+
}) => {
|
|
2727
|
+
const menuContext = useMenu(contextProps);
|
|
2728
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MenuContentProvider, { menuContext, children });
|
|
2729
|
+
};
|
|
2652
2730
|
|
|
2653
2731
|
// src/MenuLabel.tsx
|
|
2654
|
-
var
|
|
2732
|
+
var import_react11 = require("react");
|
|
2655
2733
|
var import_seeds_react_label = require("@sproutsocial/seeds-react-label");
|
|
2656
2734
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
2657
2735
|
var MenuLabel = ({ children, ...rest }) => {
|
|
@@ -2660,7 +2738,7 @@ var MenuLabel = ({ children, ...rest }) => {
|
|
|
2660
2738
|
};
|
|
2661
2739
|
|
|
2662
2740
|
// src/MenuToggleButton/MenuToggleButton.tsx
|
|
2663
|
-
var
|
|
2741
|
+
var import_react12 = require("react");
|
|
2664
2742
|
var import_seeds_react_button = require("@sproutsocial/seeds-react-button");
|
|
2665
2743
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
2666
2744
|
var MenuToggleButton = ({
|
|
@@ -2686,11 +2764,11 @@ var MenuToggleButton = ({
|
|
|
2686
2764
|
};
|
|
2687
2765
|
|
|
2688
2766
|
// src/MenuSearchInput/MenuSearchInput.tsx
|
|
2689
|
-
var
|
|
2767
|
+
var import_react14 = __toESM(require("react"));
|
|
2690
2768
|
var import_seeds_react_input = require("@sproutsocial/seeds-react-input");
|
|
2691
2769
|
|
|
2692
2770
|
// src/hooks/useItemFiltering.tsx
|
|
2693
|
-
var
|
|
2771
|
+
var import_react13 = __toESM(require("react"));
|
|
2694
2772
|
|
|
2695
2773
|
// src/utils/downshiftDefaults.ts
|
|
2696
2774
|
var itemToString = (item) => {
|
|
@@ -2710,8 +2788,8 @@ var useItemFiltering = ({
|
|
|
2710
2788
|
getShouldFilter = defaultGetShouldFilter,
|
|
2711
2789
|
setHiddenItemsMap: setHiddenItemsMapProp
|
|
2712
2790
|
}) => {
|
|
2713
|
-
const [hiddenItemsMap, setHiddenItemsMap] =
|
|
2714
|
-
const updateFilteredItems =
|
|
2791
|
+
const [hiddenItemsMap, setHiddenItemsMap] = import_react13.default.useState({});
|
|
2792
|
+
const updateFilteredItems = import_react13.default.useCallback(
|
|
2715
2793
|
({ inputValue }) => {
|
|
2716
2794
|
const newHiddenItems = getShouldFilter({ inputValue }) ? allMenuItems.reduce((map, item) => {
|
|
2717
2795
|
const isItemVisible = getIsItemVisible(item, inputValue);
|
|
@@ -2748,11 +2826,11 @@ var MenuSearchInput = ({
|
|
|
2748
2826
|
getIsItemVisible,
|
|
2749
2827
|
setHiddenItemsMap
|
|
2750
2828
|
});
|
|
2751
|
-
|
|
2829
|
+
import_react14.default.useEffect(() => {
|
|
2752
2830
|
updateFilteredItems({ inputValue: restInputProps.value || "" });
|
|
2753
2831
|
}, [isOpen, restInputProps.value]);
|
|
2754
2832
|
const toggleButtonProps = getToggleButtonProps?.() || {};
|
|
2755
|
-
const handleKeyDown =
|
|
2833
|
+
const handleKeyDown = import_react14.default.useCallback(
|
|
2756
2834
|
(e) => {
|
|
2757
2835
|
if (e.key === " ") return;
|
|
2758
2836
|
toggleButtonProps.onKeyDown?.(e);
|
|
@@ -2779,7 +2857,7 @@ var MenuSearchInput = ({
|
|
|
2779
2857
|
};
|
|
2780
2858
|
|
|
2781
2859
|
// src/MenuTokenInput.tsx
|
|
2782
|
-
var
|
|
2860
|
+
var import_react15 = __toESM(require("react"));
|
|
2783
2861
|
var import_styled_components11 = __toESM(require("styled-components"));
|
|
2784
2862
|
var import_seeds_react_token_input = require("@sproutsocial/seeds-react-token-input");
|
|
2785
2863
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
@@ -2812,7 +2890,7 @@ var MenuTokenInput = ({
|
|
|
2812
2890
|
removeSelectedItem,
|
|
2813
2891
|
setActiveIndex,
|
|
2814
2892
|
selectedItems = []
|
|
2815
|
-
} =
|
|
2893
|
+
} = import_react15.default.useContext(MenuContext);
|
|
2816
2894
|
const removeToken = (tokenId) => {
|
|
2817
2895
|
const tokenToRemove = selectedItems?.find((item) => item.id === tokenId);
|
|
2818
2896
|
tokenToRemove && removeSelectedItem?.(tokenToRemove);
|
|
@@ -2866,7 +2944,7 @@ var MenuTokenInput = ({
|
|
|
2866
2944
|
};
|
|
2867
2945
|
|
|
2868
2946
|
// src/MenuSearchTokenInput/MenuSearchTokenInput.tsx
|
|
2869
|
-
var
|
|
2947
|
+
var import_react16 = __toESM(require("react"));
|
|
2870
2948
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
2871
2949
|
var MenuSearchTokenInput = ({
|
|
2872
2950
|
getIsItemVisible,
|
|
@@ -2890,10 +2968,10 @@ var MenuSearchTokenInput = ({
|
|
|
2890
2968
|
setHiddenItemsMap
|
|
2891
2969
|
});
|
|
2892
2970
|
const controlledValue = value || inputPropsValue !== void 0 ? `${inputPropsValue}` : void 0;
|
|
2893
|
-
const [internalValue, setInternalValue] =
|
|
2971
|
+
const [internalValue, setInternalValue] = import_react16.default.useState(
|
|
2894
2972
|
controlledValue || ""
|
|
2895
2973
|
);
|
|
2896
|
-
const updateFilteredState =
|
|
2974
|
+
const updateFilteredState = import_react16.default.useCallback(
|
|
2897
2975
|
// defaults to an empty string if no value is passed
|
|
2898
2976
|
(value2 = "") => {
|
|
2899
2977
|
setInternalValue(value2);
|
|
@@ -2901,14 +2979,14 @@ var MenuSearchTokenInput = ({
|
|
|
2901
2979
|
},
|
|
2902
2980
|
[updateFilteredItems]
|
|
2903
2981
|
);
|
|
2904
|
-
|
|
2982
|
+
import_react16.default.useEffect(() => {
|
|
2905
2983
|
updateFilteredState(controlledValue);
|
|
2906
2984
|
}, [controlledValue]);
|
|
2907
|
-
|
|
2985
|
+
import_react16.default.useEffect(() => {
|
|
2908
2986
|
updateFilteredState(controlledValue);
|
|
2909
2987
|
}, [isOpen]);
|
|
2910
2988
|
const toggleButtonProps = getToggleButtonProps?.() || {};
|
|
2911
|
-
const handleKeyDown =
|
|
2989
|
+
const handleKeyDown = import_react16.default.useCallback(
|
|
2912
2990
|
(e) => {
|
|
2913
2991
|
if (e.key === " ") return;
|
|
2914
2992
|
toggleButtonProps.onKeyDown?.(e);
|
|
@@ -2936,7 +3014,7 @@ var MenuSearchTokenInput = ({
|
|
|
2936
3014
|
};
|
|
2937
3015
|
|
|
2938
3016
|
// src/SubmenuItem/SubmenuItem.tsx
|
|
2939
|
-
var
|
|
3017
|
+
var import_react17 = __toESM(require("react"));
|
|
2940
3018
|
var import_seeds_react_icon2 = require("@sproutsocial/seeds-react-icon");
|
|
2941
3019
|
var import_seeds_react_box3 = require("@sproutsocial/seeds-react-box");
|
|
2942
3020
|
var import_seeds_react_utilities = require("@sproutsocial/seeds-react-utilities");
|
|
@@ -2998,17 +3076,17 @@ var SubmenuItem = ({
|
|
|
2998
3076
|
itemsMap,
|
|
2999
3077
|
isOpen: parentIsOpen
|
|
3000
3078
|
} = useMenuContentContext();
|
|
3001
|
-
const [submenuIsFocused, setSubmenuIsFocused] =
|
|
3002
|
-
const [submenuIsOpen, setSubmenuIsOpen] =
|
|
3003
|
-
const [submenuIsActive, setSubmenuIsActive] =
|
|
3004
|
-
const submenuItemRef =
|
|
3005
|
-
const submenuRef =
|
|
3079
|
+
const [submenuIsFocused, setSubmenuIsFocused] = import_react17.default.useState(false);
|
|
3080
|
+
const [submenuIsOpen, setSubmenuIsOpen] = import_react17.default.useState(false);
|
|
3081
|
+
const [submenuIsActive, setSubmenuIsActive] = import_react17.default.useState(false);
|
|
3082
|
+
const submenuItemRef = import_react17.default.useRef(null);
|
|
3083
|
+
const submenuRef = import_react17.default.useRef(null);
|
|
3006
3084
|
const menuContent = menuItems ? getChildrenFromMenuItems({ menuItems, MenuItemComponent }) : menuChildren;
|
|
3007
3085
|
const item = itemsMap[id] || {
|
|
3008
3086
|
index: 0,
|
|
3009
3087
|
id
|
|
3010
3088
|
};
|
|
3011
|
-
|
|
3089
|
+
import_react17.default.useEffect(() => {
|
|
3012
3090
|
if (highlightedIndex === item.index) {
|
|
3013
3091
|
!submenuIsOpen && setSubmenuIsOpen(true);
|
|
3014
3092
|
} else if (submenuIsOpen && highlightedIndex !== -1) {
|
|
@@ -3016,7 +3094,7 @@ var SubmenuItem = ({
|
|
|
3016
3094
|
setSubmenuIsActive(false);
|
|
3017
3095
|
}
|
|
3018
3096
|
}, [highlightedIndex, item.index, submenuIsOpen, setSubmenuIsOpen]);
|
|
3019
|
-
const onSubmenuStateChange =
|
|
3097
|
+
const onSubmenuStateChange = import_react17.default.useCallback(
|
|
3020
3098
|
(state) => {
|
|
3021
3099
|
if (state.isOpen !== void 0) {
|
|
3022
3100
|
setSubmenuIsOpen(state.isOpen);
|
|
@@ -3060,7 +3138,7 @@ var SubmenuItem = ({
|
|
|
3060
3138
|
onMenuItemClick();
|
|
3061
3139
|
}
|
|
3062
3140
|
};
|
|
3063
|
-
|
|
3141
|
+
import_react17.default.useEffect(() => {
|
|
3064
3142
|
if (document && document.body) {
|
|
3065
3143
|
document.body.addEventListener("click", onBodyClick, {
|
|
3066
3144
|
capture: true
|
|
@@ -3126,12 +3204,49 @@ var SubmenuItem = ({
|
|
|
3126
3204
|
};
|
|
3127
3205
|
SubmenuItem.__MENU_PRIMITIVE_TYPE = "MenuItem";
|
|
3128
3206
|
|
|
3207
|
+
// src/ListboxToggleButton.tsx
|
|
3208
|
+
var import_styled_components12 = __toESM(require("styled-components"));
|
|
3209
|
+
var import_seeds_react_icon3 = require("@sproutsocial/seeds-react-icon");
|
|
3210
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
3211
|
+
var StyledListboxToggleButton = (0, import_styled_components12.default)(
|
|
3212
|
+
MenuToggleButton
|
|
3213
|
+
)`
|
|
3214
|
+
${(props) => props.invalid && import_styled_components12.css`
|
|
3215
|
+
border-color: ${(props2) => props2.theme.colors.form.border.error};
|
|
3216
|
+
`}
|
|
3217
|
+
`;
|
|
3218
|
+
var StyledChevron = import_styled_components12.default.div`
|
|
3219
|
+
margin-left: ${({ theme: theme2 }) => theme2.space[300]};
|
|
3220
|
+
${({ $isOpen }) => $isOpen && `
|
|
3221
|
+
transform: rotate(-180deg);
|
|
3222
|
+
`}
|
|
3223
|
+
transition: transform 0.15s;
|
|
3224
|
+
|
|
3225
|
+
${({ invalid }) => invalid && import_styled_components12.css`
|
|
3226
|
+
color: ${(props) => props.theme.colors.icon.error};
|
|
3227
|
+
`}
|
|
3228
|
+
`;
|
|
3229
|
+
var StyledInnerButton = import_styled_components12.default.div`
|
|
3230
|
+
display: flex;
|
|
3231
|
+
justify-content: space-between;
|
|
3232
|
+
`;
|
|
3233
|
+
var ListboxToggleButton = ({
|
|
3234
|
+
children,
|
|
3235
|
+
...buttonProps
|
|
3236
|
+
}) => {
|
|
3237
|
+
const { isOpen } = useMenuToggleContext();
|
|
3238
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(StyledListboxToggleButton, { appearance: "secondary", ...buttonProps, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(StyledInnerButton, { children: [
|
|
3239
|
+
children,
|
|
3240
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(StyledChevron, { $isOpen: isOpen, invalid: buttonProps.invalid, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_seeds_react_icon3.Icon, { name: "chevron-down-outline", fixedWidth: true, "aria-hidden": true }) })
|
|
3241
|
+
] }) });
|
|
3242
|
+
};
|
|
3243
|
+
|
|
3129
3244
|
// src/ActionMenu/ActionMenu.tsx
|
|
3130
|
-
var
|
|
3245
|
+
var import_react19 = __toESM(require("react"));
|
|
3131
3246
|
var import_downshift3 = require("downshift");
|
|
3132
3247
|
|
|
3133
3248
|
// src/hooks/useDownshiftDefaults.tsx
|
|
3134
|
-
var
|
|
3249
|
+
var import_react18 = __toESM(require("react"));
|
|
3135
3250
|
|
|
3136
3251
|
// src/reducers/useComboboxStateReducer.tsx
|
|
3137
3252
|
var import_downshift = require("downshift");
|
|
@@ -3255,12 +3370,12 @@ var useDownshiftDefaults = ({
|
|
|
3255
3370
|
isMulti = false,
|
|
3256
3371
|
multiSelectProps = {}
|
|
3257
3372
|
} = {}) => {
|
|
3258
|
-
const [hiddenItemsMap, setHiddenItemsMap] =
|
|
3259
|
-
const hiddenItemsCount =
|
|
3373
|
+
const [hiddenItemsMap, setHiddenItemsMap] = import_react18.default.useState({});
|
|
3374
|
+
const hiddenItemsCount = import_react18.default.useMemo(
|
|
3260
3375
|
() => Object.keys(hiddenItemsMap).filter(Boolean).length,
|
|
3261
3376
|
[hiddenItemsMap]
|
|
3262
3377
|
);
|
|
3263
|
-
const isItemDisabled =
|
|
3378
|
+
const isItemDisabled = import_react18.default.useCallback(
|
|
3264
3379
|
(item) => Boolean(item.disabled || hiddenItemsMap[item.id]),
|
|
3265
3380
|
[hiddenItemsMap]
|
|
3266
3381
|
);
|
|
@@ -3291,7 +3406,7 @@ var useDownshiftDefaults = ({
|
|
|
3291
3406
|
};
|
|
3292
3407
|
|
|
3293
3408
|
// src/ActionMenu/ActionMenu.tsx
|
|
3294
|
-
var
|
|
3409
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
3295
3410
|
var handleStateChange = (changes, currentSelectedItem) => {
|
|
3296
3411
|
if (!(changes.type === import_downshift3.useSelect.stateChangeTypes.ToggleButtonKeyDownEnter || changes.type === import_downshift3.useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton)) {
|
|
3297
3412
|
return;
|
|
@@ -3328,6 +3443,7 @@ var ActionMenu = ({
|
|
|
3328
3443
|
menuItems,
|
|
3329
3444
|
MenuItemComponent,
|
|
3330
3445
|
stateReducer: externalStateReducer,
|
|
3446
|
+
MenuRootComponent = MenuRoot,
|
|
3331
3447
|
...useSelectProps
|
|
3332
3448
|
}) => {
|
|
3333
3449
|
const { allMenuItems, menuItemsMap, children } = useMenuChildren({
|
|
@@ -3338,7 +3454,7 @@ var ActionMenu = ({
|
|
|
3338
3454
|
const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({
|
|
3339
3455
|
isCombobox: false
|
|
3340
3456
|
});
|
|
3341
|
-
const [currentSelectedItem, setCurrentSelectedItem] =
|
|
3457
|
+
const [currentSelectedItem, setCurrentSelectedItem] = import_react19.default.useState(null);
|
|
3342
3458
|
const { isOpen, ...useSelectReturnProps } = (0, import_downshift3.useSelect)({
|
|
3343
3459
|
...defaultDownshiftProps.select,
|
|
3344
3460
|
items: allMenuItems,
|
|
@@ -3350,11 +3466,11 @@ var ActionMenu = ({
|
|
|
3350
3466
|
),
|
|
3351
3467
|
...useSelectProps
|
|
3352
3468
|
});
|
|
3353
|
-
(0,
|
|
3469
|
+
(0, import_react19.useEffect)(() => {
|
|
3354
3470
|
setCurrentSelectedItem(useSelectReturnProps.selectedItem);
|
|
3355
3471
|
}, [useSelectReturnProps.selectedItem]);
|
|
3356
|
-
return /* @__PURE__ */ (0,
|
|
3357
|
-
|
|
3472
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
3473
|
+
MenuRootComponent,
|
|
3358
3474
|
{
|
|
3359
3475
|
...{
|
|
3360
3476
|
isListbox: false,
|
|
@@ -3372,14 +3488,15 @@ var ActionMenu = ({
|
|
|
3372
3488
|
};
|
|
3373
3489
|
|
|
3374
3490
|
// src/SingleSelectMenu/SingleSelectMenu.tsx
|
|
3375
|
-
var
|
|
3491
|
+
var import_react20 = require("react");
|
|
3376
3492
|
var import_downshift4 = require("downshift");
|
|
3377
|
-
var
|
|
3493
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
3378
3494
|
var SingleSelectMenu = ({
|
|
3379
3495
|
children: childrenProp,
|
|
3380
3496
|
stateReducer: externalStateReducer,
|
|
3381
3497
|
menuItems,
|
|
3382
3498
|
MenuItemComponent,
|
|
3499
|
+
MenuRootComponent = MenuRoot,
|
|
3383
3500
|
...useSelectProps
|
|
3384
3501
|
}) => {
|
|
3385
3502
|
const { allMenuItems, menuItemsMap, children } = useMenuChildren({
|
|
@@ -3400,8 +3517,8 @@ var SingleSelectMenu = ({
|
|
|
3400
3517
|
),
|
|
3401
3518
|
...useSelectProps
|
|
3402
3519
|
});
|
|
3403
|
-
return /* @__PURE__ */ (0,
|
|
3404
|
-
|
|
3520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
3521
|
+
MenuRootComponent,
|
|
3405
3522
|
{
|
|
3406
3523
|
...{
|
|
3407
3524
|
isListbox: true,
|
|
@@ -3419,15 +3536,16 @@ var SingleSelectMenu = ({
|
|
|
3419
3536
|
};
|
|
3420
3537
|
|
|
3421
3538
|
// src/MultiSelectMenu/MultiSelectMenu.tsx
|
|
3422
|
-
var
|
|
3539
|
+
var import_react21 = require("react");
|
|
3423
3540
|
var import_downshift5 = require("downshift");
|
|
3424
|
-
var
|
|
3541
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
3425
3542
|
var MultiSelectMenu = ({
|
|
3426
3543
|
children: childrenProp,
|
|
3427
3544
|
menuItems,
|
|
3428
3545
|
MenuItemComponent,
|
|
3429
3546
|
onSelectedItemChange: externalOnSelectedItemChange,
|
|
3430
3547
|
stateReducer: externalStateReducer,
|
|
3548
|
+
MenuRootComponent = MenuRoot,
|
|
3431
3549
|
getA11yMultiStatusMessage,
|
|
3432
3550
|
onMultiSelectStateChange,
|
|
3433
3551
|
multiSelectStateReducer,
|
|
@@ -3493,8 +3611,8 @@ var MultiSelectMenu = ({
|
|
|
3493
3611
|
},
|
|
3494
3612
|
...useSelectProps
|
|
3495
3613
|
});
|
|
3496
|
-
return /* @__PURE__ */ (0,
|
|
3497
|
-
|
|
3614
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
3615
|
+
MenuRootComponent,
|
|
3498
3616
|
{
|
|
3499
3617
|
...{
|
|
3500
3618
|
isListbox: true,
|
|
@@ -3521,16 +3639,17 @@ var MultiSelectMenu = ({
|
|
|
3521
3639
|
};
|
|
3522
3640
|
|
|
3523
3641
|
// src/Autocomplete/Autocomplete.tsx
|
|
3524
|
-
var
|
|
3642
|
+
var import_react24 = require("react");
|
|
3525
3643
|
|
|
3526
3644
|
// src/Autocomplete/SingleAutocomplete.tsx
|
|
3527
|
-
var
|
|
3645
|
+
var import_react22 = require("react");
|
|
3528
3646
|
var import_downshift6 = require("downshift");
|
|
3529
|
-
var
|
|
3647
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
3530
3648
|
var SingleAutocomplete = ({
|
|
3531
3649
|
children: childrenProp,
|
|
3532
3650
|
stateReducer: externalStateReducer,
|
|
3533
3651
|
menuItems,
|
|
3652
|
+
MenuRootComponent = MenuRoot,
|
|
3534
3653
|
MenuItemComponent,
|
|
3535
3654
|
itemToString: itemToString2 = itemToString,
|
|
3536
3655
|
getIsItemVisible,
|
|
@@ -3559,8 +3678,8 @@ var SingleAutocomplete = ({
|
|
|
3559
3678
|
),
|
|
3560
3679
|
...useComboboxProps
|
|
3561
3680
|
});
|
|
3562
|
-
return /* @__PURE__ */ (0,
|
|
3563
|
-
|
|
3681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
3682
|
+
MenuRootComponent,
|
|
3564
3683
|
{
|
|
3565
3684
|
...{
|
|
3566
3685
|
isListbox: true,
|
|
@@ -3581,14 +3700,15 @@ var SingleAutocomplete = ({
|
|
|
3581
3700
|
};
|
|
3582
3701
|
|
|
3583
3702
|
// src/Autocomplete/MultiAutocomplete.tsx
|
|
3584
|
-
var
|
|
3703
|
+
var import_react23 = __toESM(require("react"));
|
|
3585
3704
|
var import_downshift7 = require("downshift");
|
|
3586
|
-
var
|
|
3705
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
3587
3706
|
var MultiAutocomplete = ({
|
|
3588
3707
|
children: childrenProp,
|
|
3589
3708
|
stateReducer: externalStateReducer,
|
|
3590
3709
|
menuItems,
|
|
3591
3710
|
MenuItemComponent,
|
|
3711
|
+
MenuRootComponent = MenuRoot,
|
|
3592
3712
|
itemToString: itemToString2 = itemToString,
|
|
3593
3713
|
itemToKey: itemToKey3 = itemToKey,
|
|
3594
3714
|
getIsItemVisible = getDefaultGetIsItemVisible(itemToString2),
|
|
@@ -3606,15 +3726,15 @@ var MultiAutocomplete = ({
|
|
|
3606
3726
|
menuItems,
|
|
3607
3727
|
MenuItemComponent
|
|
3608
3728
|
});
|
|
3609
|
-
const [selectedItems, setSelectedItems] =
|
|
3610
|
-
const [selectedItemIds, setSelectedItemIds] =
|
|
3611
|
-
const getIsItemVisibleMulti =
|
|
3729
|
+
const [selectedItems, setSelectedItems] = import_react23.default.useState(initialSelectedItems);
|
|
3730
|
+
const [selectedItemIds, setSelectedItemIds] = import_react23.default.useState(getSelectedItemIds(initialSelectedItems));
|
|
3731
|
+
const getIsItemVisibleMulti = import_react23.default.useCallback(
|
|
3612
3732
|
(item, inputValue) => {
|
|
3613
3733
|
return (showSelectedItemsInDropdown || !selectedItemIds[item.id]) && getIsItemVisible(item, inputValue);
|
|
3614
3734
|
},
|
|
3615
3735
|
[selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]
|
|
3616
3736
|
);
|
|
3617
|
-
const getShouldFilterMulti =
|
|
3737
|
+
const getShouldFilterMulti = import_react23.default.useCallback(
|
|
3618
3738
|
(args) => {
|
|
3619
3739
|
return !showSelectedItemsInDropdown && Object.keys(selectedItemIds).length > 0 || defaultGetShouldFilter(args);
|
|
3620
3740
|
},
|
|
@@ -3638,7 +3758,7 @@ var MultiAutocomplete = ({
|
|
|
3638
3758
|
getShouldFilter: getShouldFilterMulti,
|
|
3639
3759
|
setHiddenItemsMap
|
|
3640
3760
|
});
|
|
3641
|
-
|
|
3761
|
+
import_react23.default.useEffect(() => {
|
|
3642
3762
|
updateFilteredItems({ inputValue: "" });
|
|
3643
3763
|
}, [selectedItemIds]);
|
|
3644
3764
|
const useMultipleSelectionReturnProps = (0, import_downshift7.useMultipleSelection)({
|
|
@@ -3687,8 +3807,8 @@ var MultiAutocomplete = ({
|
|
|
3687
3807
|
},
|
|
3688
3808
|
...useComboboxProps
|
|
3689
3809
|
});
|
|
3690
|
-
return /* @__PURE__ */ (0,
|
|
3691
|
-
|
|
3810
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
3811
|
+
MenuRootComponent,
|
|
3692
3812
|
{
|
|
3693
3813
|
...{
|
|
3694
3814
|
isListbox: true,
|
|
@@ -3716,21 +3836,21 @@ var MultiAutocomplete = ({
|
|
|
3716
3836
|
};
|
|
3717
3837
|
|
|
3718
3838
|
// src/Autocomplete/Autocomplete.tsx
|
|
3719
|
-
var
|
|
3839
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
3720
3840
|
var Autocomplete = ({
|
|
3721
3841
|
multiSelect,
|
|
3722
3842
|
...rest
|
|
3723
3843
|
}) => {
|
|
3724
3844
|
if (multiSelect) {
|
|
3725
|
-
return /* @__PURE__ */ (0,
|
|
3845
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(MultiAutocomplete, { ...rest });
|
|
3726
3846
|
}
|
|
3727
|
-
return /* @__PURE__ */ (0,
|
|
3847
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SingleAutocomplete, { ...rest });
|
|
3728
3848
|
};
|
|
3729
3849
|
|
|
3730
3850
|
// src/Autocomplete/AutocompleteInput.tsx
|
|
3731
|
-
var
|
|
3851
|
+
var import_react25 = require("react");
|
|
3732
3852
|
var import_seeds_react_input2 = require("@sproutsocial/seeds-react-input");
|
|
3733
|
-
var
|
|
3853
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
3734
3854
|
var AutocompleteInput = ({
|
|
3735
3855
|
onKeyDown,
|
|
3736
3856
|
onChange,
|
|
@@ -3741,7 +3861,7 @@ var AutocompleteInput = ({
|
|
|
3741
3861
|
...rest
|
|
3742
3862
|
}) => {
|
|
3743
3863
|
const { getInputComponentProps, inputValue, ref, ariaProps } = useMenuToggleContext();
|
|
3744
|
-
return /* @__PURE__ */ (0,
|
|
3864
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
3745
3865
|
import_seeds_react_input2.Input,
|
|
3746
3866
|
{
|
|
3747
3867
|
id: "autocomplete_input",
|
|
@@ -3765,59 +3885,75 @@ var AutocompleteInput = ({
|
|
|
3765
3885
|
);
|
|
3766
3886
|
};
|
|
3767
3887
|
|
|
3768
|
-
// src/
|
|
3769
|
-
var
|
|
3770
|
-
|
|
3771
|
-
// src/NestedMenu/NestedMenuContext.tsx
|
|
3772
|
-
var import_react27 = require("react");
|
|
3773
|
-
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
3774
|
-
var defaultNestedMenuContext = {
|
|
3775
|
-
selectedMenuPath: [],
|
|
3776
|
-
setSelectedMenuId: () => {
|
|
3777
|
-
},
|
|
3778
|
-
setSelectedMenuPath: () => {
|
|
3779
|
-
},
|
|
3780
|
-
goBack: () => {
|
|
3781
|
-
}
|
|
3782
|
-
};
|
|
3783
|
-
var NestedMenuContext = (0, import_react27.createContext)(
|
|
3784
|
-
defaultNestedMenuContext
|
|
3785
|
-
);
|
|
3786
|
-
var NestedMenuProvider = ({
|
|
3787
|
-
children,
|
|
3788
|
-
...nestedMenuProps
|
|
3789
|
-
}) => {
|
|
3790
|
-
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(NestedMenuContext.Provider, { value: nestedMenuProps, children });
|
|
3791
|
-
};
|
|
3792
|
-
var useNestedMenuContext = () => {
|
|
3793
|
-
const nestedMenuContextValue = (0, import_react27.useContext)(NestedMenuContext);
|
|
3794
|
-
if (nestedMenuContextValue === null) {
|
|
3795
|
-
throw new Error(
|
|
3796
|
-
"useNestedMenuContext must be used within a <NestedMenuContext.Provider />"
|
|
3797
|
-
);
|
|
3798
|
-
}
|
|
3799
|
-
return nestedMenuContextValue;
|
|
3800
|
-
};
|
|
3801
|
-
|
|
3802
|
-
// src/NestedMenu/NestedMenuHeader.tsx
|
|
3803
|
-
var import_seeds_react_button2 = require("@sproutsocial/seeds-react-button");
|
|
3804
|
-
var import_seeds_react_icon3 = require("@sproutsocial/seeds-react-icon");
|
|
3888
|
+
// src/Autocomplete/AutocompleteTokenInput.tsx
|
|
3889
|
+
var import_react26 = require("react");
|
|
3805
3890
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3806
|
-
var
|
|
3807
|
-
|
|
3808
|
-
|
|
3891
|
+
var AutocompleteTokenInput = ({
|
|
3892
|
+
onKeyDown,
|
|
3893
|
+
onChange,
|
|
3894
|
+
onInput,
|
|
3895
|
+
onBlur,
|
|
3896
|
+
onClick,
|
|
3897
|
+
inputProps,
|
|
3898
|
+
getTokenProps,
|
|
3899
|
+
...rest
|
|
3809
3900
|
}) => {
|
|
3810
|
-
const {
|
|
3811
|
-
|
|
3901
|
+
const {
|
|
3902
|
+
getInputComponentProps,
|
|
3903
|
+
getDropdownProps,
|
|
3904
|
+
inputValue,
|
|
3905
|
+
isOpen,
|
|
3906
|
+
ref,
|
|
3907
|
+
ariaProps
|
|
3908
|
+
} = useMenuToggleContext();
|
|
3812
3909
|
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3813
|
-
|
|
3910
|
+
MenuTokenInput,
|
|
3814
3911
|
{
|
|
3815
|
-
|
|
3912
|
+
id: "autocomplete_input",
|
|
3913
|
+
name: "autocomplete_input",
|
|
3914
|
+
...getInputComponentProps({
|
|
3915
|
+
...getDropdownProps?.({ ref, preventKeyAction: isOpen }) || { ref },
|
|
3916
|
+
onKeyDown,
|
|
3917
|
+
onChange,
|
|
3918
|
+
onInput,
|
|
3919
|
+
onBlur,
|
|
3920
|
+
onClick,
|
|
3921
|
+
value: inputValue,
|
|
3922
|
+
refKey: "innerRef",
|
|
3923
|
+
inputProps,
|
|
3924
|
+
...ariaProps
|
|
3925
|
+
}),
|
|
3926
|
+
...rest
|
|
3927
|
+
}
|
|
3928
|
+
);
|
|
3929
|
+
};
|
|
3930
|
+
|
|
3931
|
+
// src/Autocomplete/AutocompleteSelect.tsx
|
|
3932
|
+
var import_seeds_react_icon4 = __toESM(require("@sproutsocial/seeds-react-icon"));
|
|
3933
|
+
var import_react27 = require("react");
|
|
3934
|
+
var import_styled_components13 = __toESM(require("styled-components"));
|
|
3935
|
+
var import_seeds_react_input3 = require("@sproutsocial/seeds-react-input");
|
|
3936
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
3937
|
+
var StyledAutocompleteInput = (0, import_styled_components13.default)(AutocompleteInput)`
|
|
3938
|
+
${import_seeds_react_input3.Accessory} {
|
|
3939
|
+
pointer-events: none;
|
|
3940
|
+
}
|
|
3941
|
+
`;
|
|
3942
|
+
var AutocompleteSelect = (props) => {
|
|
3943
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3944
|
+
StyledAutocompleteInput,
|
|
3945
|
+
{
|
|
3946
|
+
elemAfter: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_seeds_react_icon4.default, { name: "chevron-down" }),
|
|
3816
3947
|
...props
|
|
3817
3948
|
}
|
|
3818
3949
|
);
|
|
3819
3950
|
};
|
|
3820
3951
|
|
|
3952
|
+
// src/NestedMenu/NestedMenu.tsx
|
|
3953
|
+
var import_react33 = require("react");
|
|
3954
|
+
var import_react34 = require("motion/react");
|
|
3955
|
+
var import_downshift9 = require("downshift");
|
|
3956
|
+
|
|
3821
3957
|
// src/reducers/nestedMenuStateReducer.tsx
|
|
3822
3958
|
var import_downshift8 = require("downshift");
|
|
3823
3959
|
var nestedMenuStateReducer = (_state, actionAndChanges) => {
|
|
@@ -3842,14 +3978,52 @@ var nestedMenuStateReducer = (_state, actionAndChanges) => {
|
|
|
3842
3978
|
}
|
|
3843
3979
|
};
|
|
3844
3980
|
|
|
3845
|
-
// src/NestedMenu/
|
|
3981
|
+
// src/NestedMenu/NestedMenuContext.tsx
|
|
3846
3982
|
var import_react28 = require("react");
|
|
3983
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
3984
|
+
var defaultNestedMenuContext = {
|
|
3985
|
+
selectedMenuPath: [],
|
|
3986
|
+
setSelectedMenuId: () => {
|
|
3987
|
+
},
|
|
3988
|
+
setSelectedMenuPath: () => {
|
|
3989
|
+
},
|
|
3990
|
+
resetSelectedMenuPath: () => {
|
|
3991
|
+
},
|
|
3992
|
+
goBack: () => {
|
|
3993
|
+
},
|
|
3994
|
+
rootMenuContextProps: {},
|
|
3995
|
+
activeMenuContext: defaultMenuContext,
|
|
3996
|
+
setActiveMenuContext: () => {
|
|
3997
|
+
},
|
|
3998
|
+
animationSpeed: MOTION_DURATION_FAST
|
|
3999
|
+
};
|
|
4000
|
+
var NestedMenuContext = (0, import_react28.createContext)(
|
|
4001
|
+
defaultNestedMenuContext
|
|
4002
|
+
);
|
|
4003
|
+
var NestedMenuProvider = ({
|
|
4004
|
+
children,
|
|
4005
|
+
...nestedMenuProps
|
|
4006
|
+
}) => {
|
|
4007
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(NestedMenuContext.Provider, { value: nestedMenuProps, children });
|
|
4008
|
+
};
|
|
4009
|
+
var useNestedMenuContext = () => {
|
|
4010
|
+
const nestedMenuContextValue = (0, import_react28.useContext)(NestedMenuContext);
|
|
4011
|
+
if (nestedMenuContextValue === null) {
|
|
4012
|
+
throw new Error(
|
|
4013
|
+
"useNestedMenuContext must be used within a <NestedMenuContext.Provider />"
|
|
4014
|
+
);
|
|
4015
|
+
}
|
|
4016
|
+
return nestedMenuContextValue;
|
|
4017
|
+
};
|
|
4018
|
+
|
|
4019
|
+
// src/NestedMenu/NestedMenuContent.tsx
|
|
4020
|
+
var import_react29 = require("react");
|
|
3847
4021
|
var import_seeds_react_utilities2 = require("@sproutsocial/seeds-react-utilities");
|
|
3848
4022
|
|
|
3849
4023
|
// src/NestedMenu/NestedMenuItem.tsx
|
|
3850
|
-
var
|
|
4024
|
+
var import_seeds_react_icon5 = require("@sproutsocial/seeds-react-icon");
|
|
3851
4025
|
var import_seeds_react_box4 = require("@sproutsocial/seeds-react-box");
|
|
3852
|
-
var
|
|
4026
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
3853
4027
|
var NestedMenuItem = ({
|
|
3854
4028
|
children,
|
|
3855
4029
|
childMenuId,
|
|
@@ -3857,21 +4031,23 @@ var NestedMenuItem = ({
|
|
|
3857
4031
|
...rest
|
|
3858
4032
|
}) => {
|
|
3859
4033
|
const { setSelectedMenuId } = useNestedMenuContext();
|
|
3860
|
-
const onClickProps = childMenuId ? {
|
|
4034
|
+
const onClickProps = childMenuId || onClickProp ? {
|
|
3861
4035
|
onClick: (e) => {
|
|
3862
4036
|
onClickProp?.(e);
|
|
3863
|
-
|
|
4037
|
+
if (childMenuId) {
|
|
4038
|
+
setSelectedMenuId?.(childMenuId);
|
|
4039
|
+
}
|
|
3864
4040
|
}
|
|
3865
4041
|
} : {};
|
|
3866
|
-
return /* @__PURE__ */ (0,
|
|
4042
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MenuItem, { ...onClickProps, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_seeds_react_box4.Box, { display: "flex", justifyContent: "space-between", children: [
|
|
3867
4043
|
children,
|
|
3868
|
-
childMenuId && /* @__PURE__ */ (0,
|
|
4044
|
+
childMenuId && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MenuItemActionRight, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_seeds_react_icon5.Icon, { name: "arrow-right-outline" }) })
|
|
3869
4045
|
] }) });
|
|
3870
4046
|
};
|
|
3871
4047
|
NestedMenuItem.__MENU_PRIMITIVE_TYPE = "MenuItem";
|
|
3872
4048
|
|
|
3873
4049
|
// src/NestedMenu/NestedMenuContent.tsx
|
|
3874
|
-
var
|
|
4050
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
3875
4051
|
var NestedMenuContent = ({
|
|
3876
4052
|
innerRef: innerRefProp = null,
|
|
3877
4053
|
onKeyDown: onKeyDownProp,
|
|
@@ -3882,10 +4058,10 @@ var NestedMenuContent = ({
|
|
|
3882
4058
|
}) => {
|
|
3883
4059
|
const { highlightedIndex, items } = useMenuContentContext();
|
|
3884
4060
|
const { setSelectedMenuId, selectedMenuPath, goBack } = useNestedMenuContext();
|
|
3885
|
-
const internalRef = (0,
|
|
4061
|
+
const internalRef = (0, import_react29.useRef)(null);
|
|
3886
4062
|
const innerRef = (0, import_seeds_react_utilities2.mergeRefs)(internalRef, innerRefProp);
|
|
3887
4063
|
const contentProps = children ? { children } : { menuItems, MenuItemComponent };
|
|
3888
|
-
(0,
|
|
4064
|
+
(0, import_react29.useEffect)(() => {
|
|
3889
4065
|
internalRef?.current?.focus();
|
|
3890
4066
|
}, []);
|
|
3891
4067
|
const onKeyDown = (e) => {
|
|
@@ -3908,7 +4084,7 @@ var NestedMenuContent = ({
|
|
|
3908
4084
|
break;
|
|
3909
4085
|
}
|
|
3910
4086
|
};
|
|
3911
|
-
return /* @__PURE__ */ (0,
|
|
4087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
3912
4088
|
MenuContent,
|
|
3913
4089
|
{
|
|
3914
4090
|
onKeyDown,
|
|
@@ -3920,82 +4096,317 @@ var NestedMenuContent = ({
|
|
|
3920
4096
|
};
|
|
3921
4097
|
NestedMenuContent.__MENU_PRIMITIVE_TYPE = "MenuContent";
|
|
3922
4098
|
|
|
4099
|
+
// src/NestedMenu/NestedMenuHeader.tsx
|
|
4100
|
+
var import_seeds_react_button2 = require("@sproutsocial/seeds-react-button");
|
|
4101
|
+
var import_seeds_react_icon6 = require("@sproutsocial/seeds-react-icon");
|
|
4102
|
+
var import_react30 = require("motion/react");
|
|
4103
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
4104
|
+
var NestedMenuHeader = ({
|
|
4105
|
+
backArrowLabel,
|
|
4106
|
+
...props
|
|
4107
|
+
}) => {
|
|
4108
|
+
const { goBack, selectedMenuPath, animationSpeed } = useNestedMenuContext();
|
|
4109
|
+
const showBackArrow = selectedMenuPath.length > 1;
|
|
4110
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4111
|
+
MenuHeader,
|
|
4112
|
+
{
|
|
4113
|
+
leftAction: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react30.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4114
|
+
import_react30.motion.div,
|
|
4115
|
+
{
|
|
4116
|
+
initial: { opacity: 0 },
|
|
4117
|
+
animate: { opacity: 1 },
|
|
4118
|
+
exit: {
|
|
4119
|
+
opacity: 0,
|
|
4120
|
+
transition: { duration: animationSpeed }
|
|
4121
|
+
},
|
|
4122
|
+
children: showBackArrow ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_seeds_react_button2.Button, { onClick: goBack, ariaLabel: backArrowLabel, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_seeds_react_icon6.Icon, { name: "arrow-left" }) }) : void 0
|
|
4123
|
+
},
|
|
4124
|
+
`${selectedMenuPath}-header--button`
|
|
4125
|
+
) }),
|
|
4126
|
+
...props
|
|
4127
|
+
}
|
|
4128
|
+
);
|
|
4129
|
+
};
|
|
4130
|
+
|
|
4131
|
+
// src/NestedMenu/NestedMenuRoot.tsx
|
|
4132
|
+
var import_react31 = __toESM(require("react"));
|
|
4133
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
4134
|
+
var NestedMenuRoot = ({
|
|
4135
|
+
children,
|
|
4136
|
+
menuToggleElement,
|
|
4137
|
+
...contextProps
|
|
4138
|
+
}) => {
|
|
4139
|
+
const menuContext = useMenu(contextProps);
|
|
4140
|
+
const { setActiveMenuContext, selectedMenuPath } = useNestedMenuContext();
|
|
4141
|
+
import_react31.default.useEffect(() => {
|
|
4142
|
+
setActiveMenuContext(menuContext);
|
|
4143
|
+
}, [
|
|
4144
|
+
selectedMenuPath[selectedMenuPath.length - 1],
|
|
4145
|
+
menuContext.selectedItem,
|
|
4146
|
+
menuContext.selectedItems?.length
|
|
4147
|
+
]);
|
|
4148
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(MenuContentProvider, { menuContext, children });
|
|
4149
|
+
};
|
|
4150
|
+
|
|
4151
|
+
// src/NestedMenu/NestedMenuPopout.tsx
|
|
4152
|
+
var import_react32 = require("motion/react");
|
|
4153
|
+
var import_styled_components14 = __toESM(require("styled-components"));
|
|
4154
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
4155
|
+
var StyledDiv = (0, import_styled_components14.default)(import_react32.motion.div)`
|
|
4156
|
+
overflow: hidden;
|
|
4157
|
+
`;
|
|
4158
|
+
var NestedMenuPopout = ({
|
|
4159
|
+
content,
|
|
4160
|
+
menuToggleElement,
|
|
4161
|
+
width: width2,
|
|
4162
|
+
...popoutProps
|
|
4163
|
+
}) => {
|
|
4164
|
+
const { activeMenuContext, rootMenuContextProps, resetSelectedMenuPath } = useNestedMenuContext();
|
|
4165
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4166
|
+
MenuPopout,
|
|
4167
|
+
{
|
|
4168
|
+
...popoutProps,
|
|
4169
|
+
onClose: () => setTimeout(() => resetSelectedMenuPath?.(), 100),
|
|
4170
|
+
isOpen: !!rootMenuContextProps.isOpen,
|
|
4171
|
+
openMenu: rootMenuContextProps.openMenu,
|
|
4172
|
+
closeMenu: rootMenuContextProps.closeMenu,
|
|
4173
|
+
width: width2,
|
|
4174
|
+
content: (props) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(StyledDiv, { layout: "position", children: typeof content === "function" ? content(props) : content }),
|
|
4175
|
+
children: (toggleProps) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4176
|
+
MenuToggleProvider,
|
|
4177
|
+
{
|
|
4178
|
+
menuContext: {
|
|
4179
|
+
...activeMenuContext,
|
|
4180
|
+
...rootMenuContextProps,
|
|
4181
|
+
...toggleProps
|
|
4182
|
+
},
|
|
4183
|
+
children: menuToggleElement
|
|
4184
|
+
}
|
|
4185
|
+
)
|
|
4186
|
+
}
|
|
4187
|
+
);
|
|
4188
|
+
};
|
|
4189
|
+
|
|
3923
4190
|
// src/NestedMenu/NestedMenu.tsx
|
|
3924
|
-
var
|
|
4191
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
3925
4192
|
var NestedMenu = ({
|
|
3926
4193
|
initialMenuId,
|
|
3927
4194
|
menus,
|
|
3928
4195
|
onBackButtonClick,
|
|
3929
4196
|
backArrowLabel,
|
|
3930
|
-
menuToggleElement
|
|
4197
|
+
menuToggleElement,
|
|
4198
|
+
popoutProps = {},
|
|
4199
|
+
width: width2 = "300px",
|
|
4200
|
+
stateReducer: rootExternalStateReducer,
|
|
4201
|
+
id: externalNestedMenuId,
|
|
4202
|
+
...useSelectProps
|
|
3931
4203
|
}) => {
|
|
3932
|
-
const
|
|
3933
|
-
|
|
4204
|
+
const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({
|
|
4205
|
+
isCombobox: false
|
|
4206
|
+
});
|
|
4207
|
+
const uniqueId = (0, import_react33.useId)();
|
|
4208
|
+
const nestedMenuId = externalNestedMenuId ?? `nested-menu-${uniqueId}`;
|
|
4209
|
+
const [hasLoadedOnce, setHasLoadedOnce] = (0, import_react33.useState)(false);
|
|
4210
|
+
const useSelectReturnProps = (0, import_downshift9.useSelect)({
|
|
4211
|
+
...defaultDownshiftProps.select,
|
|
4212
|
+
id: nestedMenuId,
|
|
4213
|
+
items: [],
|
|
4214
|
+
stateReducer: reduceReducers(
|
|
4215
|
+
defaultDownshiftProps.select.stateReducer,
|
|
4216
|
+
rootExternalStateReducer
|
|
4217
|
+
),
|
|
4218
|
+
...useSelectProps
|
|
4219
|
+
});
|
|
4220
|
+
const rootMenuContextProps = {
|
|
4221
|
+
...useSelectProps,
|
|
4222
|
+
...useSelectReturnProps,
|
|
4223
|
+
...restDefaults
|
|
4224
|
+
};
|
|
4225
|
+
(0, import_react33.useEffect)(() => {
|
|
4226
|
+
if (!useSelectReturnProps.isOpen) {
|
|
4227
|
+
setHasLoadedOnce(false);
|
|
4228
|
+
} else {
|
|
4229
|
+
!hasLoadedOnce && setHasLoadedOnce(true);
|
|
4230
|
+
}
|
|
4231
|
+
}, [useSelectReturnProps.isOpen]);
|
|
4232
|
+
const onNestedIsOpenChange = ({
|
|
4233
|
+
isOpen: newIsOpen
|
|
4234
|
+
}) => {
|
|
4235
|
+
!newIsOpen && useSelectReturnProps.closeMenu?.();
|
|
4236
|
+
};
|
|
4237
|
+
const nestedMenuPropsFromRoot = {
|
|
4238
|
+
// The selected menu needs to receive this id so that the toggle element can be properly associated with it.
|
|
4239
|
+
id: nestedMenuId,
|
|
4240
|
+
onIsOpenChange: onNestedIsOpenChange
|
|
4241
|
+
};
|
|
4242
|
+
const [selectedMenuPath, setSelectedMenuPath] = (0, import_react33.useState)([initialMenuId]);
|
|
4243
|
+
const [activeMenuContext, setActiveMenuContext] = (0, import_react33.useState)(defaultMenuContext);
|
|
4244
|
+
const [currentMenuId, setCurrentMenuId] = (0, import_react33.useState)(initialMenuId);
|
|
4245
|
+
const [isAdding, setIsAdding] = (0, import_react33.useState)(false);
|
|
3934
4246
|
const setSelectedMenuId = (id) => {
|
|
4247
|
+
setIsAdding(true);
|
|
3935
4248
|
setSelectedMenuPath((currentPath) => [...currentPath, id]);
|
|
3936
4249
|
};
|
|
4250
|
+
(0, import_react33.useEffect)(() => {
|
|
4251
|
+
if (selectedMenuPath.length > 0) {
|
|
4252
|
+
const newMenuId = selectedMenuPath[selectedMenuPath.length - 1];
|
|
4253
|
+
setCurrentMenuId(newMenuId);
|
|
4254
|
+
}
|
|
4255
|
+
}, [selectedMenuPath.join("-")]);
|
|
4256
|
+
const resetSelectedMenuPath = () => {
|
|
4257
|
+
setSelectedMenuPath([initialMenuId]);
|
|
4258
|
+
setCurrentMenuId(initialMenuId);
|
|
4259
|
+
};
|
|
3937
4260
|
const goBack = () => {
|
|
4261
|
+
setIsAdding(false);
|
|
3938
4262
|
setSelectedMenuPath((currentPath) => currentPath.slice(0, -1));
|
|
3939
|
-
onBackButtonClick?.(
|
|
4263
|
+
onBackButtonClick?.(currentMenuId);
|
|
3940
4264
|
};
|
|
3941
4265
|
const {
|
|
3942
4266
|
MenuComponent,
|
|
3943
4267
|
menuProps,
|
|
3944
4268
|
MenuHeaderComponent = NestedMenuHeader,
|
|
3945
4269
|
menuHeaderProps = {}
|
|
3946
|
-
} = menus[
|
|
4270
|
+
} = menus[currentMenuId] || {};
|
|
3947
4271
|
const {
|
|
3948
4272
|
children,
|
|
3949
4273
|
menuItems,
|
|
3950
4274
|
MenuItemComponent,
|
|
3951
4275
|
stateReducer: externalStateReducer,
|
|
3952
|
-
|
|
3953
|
-
...props
|
|
4276
|
+
...restMenuProps
|
|
3954
4277
|
} = menuProps || {};
|
|
3955
4278
|
const stateReducer = reduceReducers(
|
|
3956
4279
|
nestedMenuStateReducer,
|
|
3957
4280
|
externalStateReducer
|
|
3958
4281
|
);
|
|
3959
|
-
const
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
}
|
|
4282
|
+
const animationSpeed = MOTION_DURATION_FAST;
|
|
4283
|
+
const contentVariants = {
|
|
4284
|
+
arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({
|
|
4285
|
+
opacity: 0,
|
|
4286
|
+
// Start from left if is first render of root, else use default
|
|
4287
|
+
x: !custom?.hasLoadedOnce ? "200%" : custom?.isAdding ? "200%" : "-200%"
|
|
4288
|
+
}),
|
|
4289
|
+
enter: (custom = { hasLoadedOnce: false }) => ({
|
|
4290
|
+
opacity: 1,
|
|
4291
|
+
x: 0,
|
|
4292
|
+
transition: {
|
|
4293
|
+
type: "tween",
|
|
4294
|
+
duration: animationSpeed,
|
|
4295
|
+
ease: "circOut",
|
|
4296
|
+
delay: !custom.hasLoadedOnce ? animationSpeed : 0
|
|
4297
|
+
}
|
|
4298
|
+
}),
|
|
4299
|
+
leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({
|
|
4300
|
+
opacity: 0,
|
|
4301
|
+
x: custom?.isAdding ? "-200%" : "200%",
|
|
4302
|
+
transition: {
|
|
4303
|
+
type: "tween",
|
|
4304
|
+
duration: animationSpeed,
|
|
4305
|
+
ease: "circIn"
|
|
4306
|
+
}
|
|
4307
|
+
})
|
|
4308
|
+
};
|
|
4309
|
+
const menuVariants = {
|
|
4310
|
+
arrive: (custom = { hasLoadedOnce: false, isAdding: false }) => ({
|
|
4311
|
+
opacity: 0,
|
|
4312
|
+
// Start from left if is first render of root, else use default
|
|
4313
|
+
x: !custom?.hasLoadedOnce ? "200%" : custom?.isAdding ? "200%" : "-200%"
|
|
4314
|
+
}),
|
|
4315
|
+
enter: (custom = { hasLoadedOnce: false }) => ({
|
|
4316
|
+
opacity: 1,
|
|
4317
|
+
x: 0,
|
|
4318
|
+
transition: {
|
|
4319
|
+
type: "tween",
|
|
4320
|
+
duration: animationSpeed,
|
|
4321
|
+
ease: "circOut",
|
|
4322
|
+
delay: !custom.hasLoadedOnce ? animationSpeed : 0
|
|
4323
|
+
}
|
|
4324
|
+
}),
|
|
4325
|
+
leave: (custom = { hasLoadedOnce: false, isAdding: false }) => ({
|
|
4326
|
+
opacity: 0,
|
|
4327
|
+
x: custom?.isAdding ? "-200%" : "200%",
|
|
4328
|
+
transition: {
|
|
4329
|
+
type: "tween",
|
|
4330
|
+
duration: animationSpeed,
|
|
4331
|
+
ease: "circIn"
|
|
4332
|
+
}
|
|
4333
|
+
})
|
|
3966
4334
|
};
|
|
3967
4335
|
const nestedMenuProps = {
|
|
4336
|
+
...nestedMenuPropsFromRoot,
|
|
3968
4337
|
menuToggleElement,
|
|
3969
4338
|
stateReducer,
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
...menuHeaderProps
|
|
3978
|
-
}
|
|
3979
|
-
),
|
|
3980
|
-
children && children,
|
|
3981
|
-
menuItems && !children && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
3982
|
-
NestedMenuContent,
|
|
4339
|
+
MenuRootComponent: NestedMenuRoot,
|
|
4340
|
+
// This ensures that onNestedIsOpenChange will be triggered if the selected menu attempts to close itself.
|
|
4341
|
+
initialIsOpen: true,
|
|
4342
|
+
children: (
|
|
4343
|
+
// Handles the smooth animating of the content
|
|
4344
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react34.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
4345
|
+
import_react34.motion.div,
|
|
3983
4346
|
{
|
|
3984
|
-
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
|
|
3988
|
-
|
|
3989
|
-
|
|
4347
|
+
variants: contentVariants,
|
|
4348
|
+
initial: "arrive",
|
|
4349
|
+
animate: "enter",
|
|
4350
|
+
exit: "leave",
|
|
4351
|
+
custom: { isAdding, hasLoadedOnce },
|
|
4352
|
+
children: [
|
|
4353
|
+
MenuHeaderComponent && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4354
|
+
MenuHeaderComponent,
|
|
4355
|
+
{
|
|
4356
|
+
backArrowLabel,
|
|
4357
|
+
...menuHeaderProps
|
|
4358
|
+
}
|
|
4359
|
+
),
|
|
4360
|
+
children && children,
|
|
4361
|
+
menuItems && !children && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4362
|
+
NestedMenuContent,
|
|
4363
|
+
{
|
|
4364
|
+
menuItems,
|
|
4365
|
+
MenuItemComponent: MenuItemComponent ?? NestedMenuItem
|
|
4366
|
+
}
|
|
4367
|
+
)
|
|
4368
|
+
]
|
|
4369
|
+
},
|
|
4370
|
+
currentMenuId
|
|
4371
|
+
) })
|
|
4372
|
+
),
|
|
4373
|
+
...restMenuProps
|
|
3990
4374
|
};
|
|
3991
|
-
return /* @__PURE__ */ (0,
|
|
4375
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
3992
4376
|
NestedMenuProvider,
|
|
3993
4377
|
{
|
|
3994
|
-
|
|
3995
|
-
|
|
3996
|
-
|
|
3997
|
-
|
|
3998
|
-
|
|
4378
|
+
...{
|
|
4379
|
+
selectedMenuPath,
|
|
4380
|
+
setSelectedMenuPath,
|
|
4381
|
+
setSelectedMenuId,
|
|
4382
|
+
resetSelectedMenuPath,
|
|
4383
|
+
goBack,
|
|
4384
|
+
rootMenuContextProps,
|
|
4385
|
+
activeMenuContext,
|
|
4386
|
+
setActiveMenuContext,
|
|
4387
|
+
animationSpeed
|
|
4388
|
+
},
|
|
4389
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4390
|
+
NestedMenuPopout,
|
|
4391
|
+
{
|
|
4392
|
+
content: MenuComponent && // Handles the rerender of the component
|
|
4393
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react34.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4394
|
+
import_react34.motion.div,
|
|
4395
|
+
{
|
|
4396
|
+
variants: menuVariants,
|
|
4397
|
+
initial: "arrive",
|
|
4398
|
+
animate: "enter",
|
|
4399
|
+
exit: "leave",
|
|
4400
|
+
custom: { isAdding, hasLoadedOnce },
|
|
4401
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MenuComponent, { ...nestedMenuProps })
|
|
4402
|
+
},
|
|
4403
|
+
`${currentMenuId}-content`
|
|
4404
|
+
) }),
|
|
4405
|
+
menuToggleElement,
|
|
4406
|
+
width: width2,
|
|
4407
|
+
...popoutProps
|
|
4408
|
+
}
|
|
4409
|
+
)
|
|
3999
4410
|
}
|
|
4000
4411
|
);
|
|
4001
4412
|
};
|
|
@@ -4004,7 +4415,11 @@ var NestedMenu = ({
|
|
|
4004
4415
|
ActionMenu,
|
|
4005
4416
|
Autocomplete,
|
|
4006
4417
|
AutocompleteInput,
|
|
4418
|
+
AutocompleteSelect,
|
|
4419
|
+
AutocompleteTokenInput,
|
|
4420
|
+
CustomPopoutContent,
|
|
4007
4421
|
INPUT_TYPES,
|
|
4422
|
+
ListboxToggleButton,
|
|
4008
4423
|
MenuContent,
|
|
4009
4424
|
MenuContentContext,
|
|
4010
4425
|
MenuContentProvider,
|
|
@@ -4019,7 +4434,9 @@ var NestedMenu = ({
|
|
|
4019
4434
|
MenuItemRow,
|
|
4020
4435
|
MenuItemText,
|
|
4021
4436
|
MenuLabel,
|
|
4437
|
+
MenuPopout,
|
|
4022
4438
|
MenuRoot,
|
|
4439
|
+
MenuRootNoPopout,
|
|
4023
4440
|
MenuSearchInput,
|
|
4024
4441
|
MenuSearchTokenInput,
|
|
4025
4442
|
MenuToggleButton,
|
|
@@ -4034,6 +4451,7 @@ var NestedMenu = ({
|
|
|
4034
4451
|
NestedMenuItem,
|
|
4035
4452
|
NestedMenuProvider,
|
|
4036
4453
|
SingleSelectMenu,
|
|
4454
|
+
StyledListboxToggleButton,
|
|
4037
4455
|
StyledMenuGroup,
|
|
4038
4456
|
StyledMenuGroupUl,
|
|
4039
4457
|
StyledMenuItem,
|