@sproutsocial/seeds-react-menu 1.2.1 → 1.2.3
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 +10 -10
- package/CHANGELOG.md +12 -0
- package/dist/esm/index.js +90 -83
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +119 -59
- package/dist/index.d.ts +119 -59
- package/dist/index.js +118 -111
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/ActionMenu/ActionMenu.tsx +2 -2
- package/src/Autocomplete/Autocomplete.stories.tsx +6 -18
- package/src/Autocomplete/Autocomplete.tsx +2 -3
- package/src/Autocomplete/AutocompleteTypes.ts +16 -12
- package/src/Autocomplete/MultiAutocomplete.tsx +26 -18
- package/src/Autocomplete/SingleAutocomplete.tsx +20 -9
- package/src/MenuContent/MenuContent.tsx +4 -4
- package/src/MenuContext.tsx +3 -0
- package/src/MenuFooter/MenuFooter.tsx +2 -2
- package/src/MenuGroup/MenuGroup.tsx +4 -4
- package/src/MenuHeader/MenuHeader.tsx +4 -2
- package/src/MenuLabel.tsx +32 -2
- package/src/MenuRoot/MenuRoot.tsx +7 -24
- package/src/MenuSearchInput/MenuSearchInput.tsx +5 -11
- package/src/MenuSearchTokenInput/MenuSearchTokenInput.tsx +6 -3
- package/src/MenuToggleButton/MenuToggleButton.tsx +11 -12
- package/src/MenuTokenInput.tsx +10 -4
- package/src/MultiSelectMenu/MultiSelectMenu.tsx +4 -3
- package/src/NestedMenu/NestedMenu.feature +2 -2
- package/src/NestedMenu/NestedMenuTypes.ts +3 -0
- package/src/SingleSelectMenu/SingleSelectMenu.tsx +5 -4
- package/src/hooks/useItemFiltering.tsx +2 -1
- package/src/hooks/useMenuChildren.tsx +1 -1
- package/src/types.ts +28 -15
package/.turbo/turbo-build.log
CHANGED
|
@@ -84,14 +84,14 @@ ESM Build start
|
|
|
84
84
|
╵ [32m~~~~~~~~~[0m
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
ESM dist/esm/index.js 131.72 KB
|
|
88
|
+
ESM dist/esm/index.js.map 364.88 KB
|
|
89
|
+
ESM ⚡️ Build success in 550ms
|
|
90
|
+
CJS dist/index.js 141.25 KB
|
|
91
|
+
CJS dist/index.js.map 366.13 KB
|
|
92
|
+
CJS ⚡️ Build success in 555ms
|
|
93
93
|
DTS Build start
|
|
94
|
-
DTS ⚡️ Build success in
|
|
95
|
-
DTS dist/index.d.ts
|
|
96
|
-
DTS dist/index.d.mts
|
|
97
|
-
Done in 17.
|
|
94
|
+
DTS ⚡️ Build success in 15567ms
|
|
95
|
+
DTS dist/index.d.ts 36.84 KB
|
|
96
|
+
DTS dist/index.d.mts 36.84 KB
|
|
97
|
+
Done in 17.81s.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @sproutsocial/seeds-react-menu
|
|
2
2
|
|
|
3
|
+
## 1.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 68254a6: Fixed issue where Menus using the MenuSearchInput automatically closed when the results were empty. They now remain open when no match is found.
|
|
8
|
+
|
|
9
|
+
## 1.2.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 75c88a8: Improves Menu prop documentation
|
|
14
|
+
|
|
3
15
|
## 1.2.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/esm/index.js
CHANGED
|
@@ -2549,7 +2549,6 @@ MenuGroup.__MENU_PRIMITIVE_TYPE = "MenuGroup";
|
|
|
2549
2549
|
// src/MenuRoot/MenuRoot.tsx
|
|
2550
2550
|
import React7, {
|
|
2551
2551
|
useCallback as useCallback2,
|
|
2552
|
-
useEffect,
|
|
2553
2552
|
useLayoutEffect
|
|
2554
2553
|
} from "react";
|
|
2555
2554
|
import styled7 from "styled-components";
|
|
@@ -2656,12 +2655,6 @@ var MenuRoot = ({
|
|
|
2656
2655
|
setFinalWidth(min_width);
|
|
2657
2656
|
}
|
|
2658
2657
|
}, [width2, toggleElementRef.current?.offsetWidth]);
|
|
2659
|
-
useEffect(() => {
|
|
2660
|
-
if (!inputValue) return;
|
|
2661
|
-
if (items && hiddenItemsCount >= items.length && isOpen) {
|
|
2662
|
-
closeMenu?.();
|
|
2663
|
-
}
|
|
2664
|
-
}, [hiddenItemsCount, items?.length, isOpen, inputValue]);
|
|
2665
2658
|
const menuContext = useMenu(contextProps);
|
|
2666
2659
|
getMenuProps?.({}, { suppressRefError: true });
|
|
2667
2660
|
return /* @__PURE__ */ jsx10(
|
|
@@ -2691,32 +2684,36 @@ var MenuRoot = ({
|
|
|
2691
2684
|
}
|
|
2692
2685
|
);
|
|
2693
2686
|
};
|
|
2694
|
-
var MenuRootNoPopout = ({
|
|
2695
|
-
children,
|
|
2696
|
-
menuToggleElement,
|
|
2697
|
-
...contextProps
|
|
2698
|
-
}) => {
|
|
2699
|
-
const menuContext = useMenu(contextProps);
|
|
2700
|
-
return /* @__PURE__ */ jsx10(MenuContentProvider, { menuContext, children });
|
|
2701
|
-
};
|
|
2702
2687
|
|
|
2703
2688
|
// src/MenuLabel.tsx
|
|
2704
2689
|
import "react";
|
|
2705
2690
|
import { Label } from "@sproutsocial/seeds-react-label";
|
|
2706
2691
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
2707
|
-
var MenuLabel = ({
|
|
2692
|
+
var MenuLabel = ({
|
|
2693
|
+
children,
|
|
2694
|
+
required = false,
|
|
2695
|
+
...rest
|
|
2696
|
+
}) => {
|
|
2708
2697
|
const { getLabelProps } = useMenuToggleContext();
|
|
2709
|
-
return
|
|
2698
|
+
return (
|
|
2699
|
+
// This fallback id should never be used, but it is here to satisfy TypeScript since getLabelProps could be undefined.
|
|
2700
|
+
/* @__PURE__ */ jsx11(
|
|
2701
|
+
Label,
|
|
2702
|
+
{
|
|
2703
|
+
htmlFor: "fallback_menu_label",
|
|
2704
|
+
required,
|
|
2705
|
+
...getLabelProps?.(),
|
|
2706
|
+
...rest,
|
|
2707
|
+
children
|
|
2708
|
+
}
|
|
2709
|
+
)
|
|
2710
|
+
);
|
|
2710
2711
|
};
|
|
2711
2712
|
|
|
2712
2713
|
// src/MenuToggleButton/MenuToggleButton.tsx
|
|
2713
|
-
import "react";
|
|
2714
2714
|
import { Button } from "@sproutsocial/seeds-react-button";
|
|
2715
2715
|
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
2716
|
-
var MenuToggleButton = ({
|
|
2717
|
-
children,
|
|
2718
|
-
...rest
|
|
2719
|
-
}) => {
|
|
2716
|
+
var MenuToggleButton = (props) => {
|
|
2720
2717
|
const { getToggleButtonProps, isListbox, getDropdownProps, ref, ariaProps } = useMenuToggleContext();
|
|
2721
2718
|
return /* @__PURE__ */ jsx12(
|
|
2722
2719
|
Button,
|
|
@@ -2729,18 +2726,17 @@ var MenuToggleButton = ({
|
|
|
2729
2726
|
...ariaProps,
|
|
2730
2727
|
...isListbox ? {} : { role: "button", "aria-haspopup": "menu" }
|
|
2731
2728
|
}),
|
|
2732
|
-
...
|
|
2733
|
-
children
|
|
2729
|
+
...props
|
|
2734
2730
|
}
|
|
2735
2731
|
);
|
|
2736
2732
|
};
|
|
2737
2733
|
|
|
2738
2734
|
// src/MenuSearchInput/MenuSearchInput.tsx
|
|
2739
|
-
import
|
|
2735
|
+
import React10 from "react";
|
|
2740
2736
|
import { Input } from "@sproutsocial/seeds-react-input";
|
|
2741
2737
|
|
|
2742
2738
|
// src/hooks/useItemFiltering.tsx
|
|
2743
|
-
import
|
|
2739
|
+
import React9 from "react";
|
|
2744
2740
|
|
|
2745
2741
|
// src/utils/downshiftDefaults.ts
|
|
2746
2742
|
var itemToString = (item) => {
|
|
@@ -2760,8 +2756,8 @@ var useItemFiltering = ({
|
|
|
2760
2756
|
getShouldFilter = defaultGetShouldFilter,
|
|
2761
2757
|
setHiddenItemsMap: setHiddenItemsMapProp
|
|
2762
2758
|
}) => {
|
|
2763
|
-
const [hiddenItemsMap, setHiddenItemsMap] =
|
|
2764
|
-
const updateFilteredItems =
|
|
2759
|
+
const [hiddenItemsMap, setHiddenItemsMap] = React9.useState({});
|
|
2760
|
+
const updateFilteredItems = React9.useCallback(
|
|
2765
2761
|
({ inputValue }) => {
|
|
2766
2762
|
const newHiddenItems = getShouldFilter({ inputValue }) ? allMenuItems.reduce((map, item) => {
|
|
2767
2763
|
const isItemVisible = getIsItemVisible(item, inputValue);
|
|
@@ -2798,11 +2794,11 @@ var MenuSearchInput = ({
|
|
|
2798
2794
|
getIsItemVisible,
|
|
2799
2795
|
setHiddenItemsMap
|
|
2800
2796
|
});
|
|
2801
|
-
|
|
2797
|
+
React10.useEffect(() => {
|
|
2802
2798
|
updateFilteredItems({ inputValue: restInputProps.value || "" });
|
|
2803
2799
|
}, [isOpen, restInputProps.value]);
|
|
2804
2800
|
const toggleButtonProps = getToggleButtonProps?.() || {};
|
|
2805
|
-
const handleKeyDown =
|
|
2801
|
+
const handleKeyDown = React10.useCallback(
|
|
2806
2802
|
(e) => {
|
|
2807
2803
|
if (e.key === " ") return;
|
|
2808
2804
|
toggleButtonProps.onKeyDown?.(e);
|
|
@@ -2829,7 +2825,7 @@ var MenuSearchInput = ({
|
|
|
2829
2825
|
};
|
|
2830
2826
|
|
|
2831
2827
|
// src/MenuTokenInput.tsx
|
|
2832
|
-
import
|
|
2828
|
+
import React11 from "react";
|
|
2833
2829
|
import styled8 from "styled-components";
|
|
2834
2830
|
import {
|
|
2835
2831
|
TokenInput
|
|
@@ -2864,7 +2860,7 @@ var MenuTokenInput = ({
|
|
|
2864
2860
|
removeSelectedItem,
|
|
2865
2861
|
setActiveIndex,
|
|
2866
2862
|
selectedItems = []
|
|
2867
|
-
} =
|
|
2863
|
+
} = React11.useContext(MenuContext);
|
|
2868
2864
|
const removeToken = (tokenId) => {
|
|
2869
2865
|
const tokenToRemove = selectedItems?.find((item) => item.id === tokenId);
|
|
2870
2866
|
tokenToRemove && removeSelectedItem?.(tokenToRemove);
|
|
@@ -2918,7 +2914,7 @@ var MenuTokenInput = ({
|
|
|
2918
2914
|
};
|
|
2919
2915
|
|
|
2920
2916
|
// src/MenuSearchTokenInput/MenuSearchTokenInput.tsx
|
|
2921
|
-
import
|
|
2917
|
+
import React12 from "react";
|
|
2922
2918
|
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
2923
2919
|
var MenuSearchTokenInput = ({
|
|
2924
2920
|
getIsItemVisible,
|
|
@@ -2942,10 +2938,10 @@ var MenuSearchTokenInput = ({
|
|
|
2942
2938
|
setHiddenItemsMap
|
|
2943
2939
|
});
|
|
2944
2940
|
const controlledValue = value || inputPropsValue !== void 0 ? `${inputPropsValue}` : void 0;
|
|
2945
|
-
const [internalValue, setInternalValue] =
|
|
2941
|
+
const [internalValue, setInternalValue] = React12.useState(
|
|
2946
2942
|
controlledValue || ""
|
|
2947
2943
|
);
|
|
2948
|
-
const updateFilteredState =
|
|
2944
|
+
const updateFilteredState = React12.useCallback(
|
|
2949
2945
|
// defaults to an empty string if no value is passed
|
|
2950
2946
|
(value2 = "") => {
|
|
2951
2947
|
setInternalValue(value2);
|
|
@@ -2953,14 +2949,14 @@ var MenuSearchTokenInput = ({
|
|
|
2953
2949
|
},
|
|
2954
2950
|
[updateFilteredItems]
|
|
2955
2951
|
);
|
|
2956
|
-
|
|
2952
|
+
React12.useEffect(() => {
|
|
2957
2953
|
updateFilteredState(controlledValue);
|
|
2958
2954
|
}, [controlledValue]);
|
|
2959
|
-
|
|
2955
|
+
React12.useEffect(() => {
|
|
2960
2956
|
updateFilteredState(controlledValue);
|
|
2961
2957
|
}, [isOpen]);
|
|
2962
2958
|
const toggleButtonProps = getToggleButtonProps?.() || {};
|
|
2963
|
-
const handleKeyDown =
|
|
2959
|
+
const handleKeyDown = React12.useCallback(
|
|
2964
2960
|
(e) => {
|
|
2965
2961
|
if (e.key === " ") return;
|
|
2966
2962
|
toggleButtonProps.onKeyDown?.(e);
|
|
@@ -2988,7 +2984,7 @@ var MenuSearchTokenInput = ({
|
|
|
2988
2984
|
};
|
|
2989
2985
|
|
|
2990
2986
|
// src/SubmenuItem/SubmenuItem.tsx
|
|
2991
|
-
import
|
|
2987
|
+
import React13 from "react";
|
|
2992
2988
|
import { Icon as Icon2 } from "@sproutsocial/seeds-react-icon";
|
|
2993
2989
|
import { Box as Box3 } from "@sproutsocial/seeds-react-box";
|
|
2994
2990
|
import { mergeRefs as mergeRefs2 } from "@sproutsocial/seeds-react-utilities";
|
|
@@ -3050,17 +3046,17 @@ var SubmenuItem = ({
|
|
|
3050
3046
|
itemsMap,
|
|
3051
3047
|
isOpen: parentIsOpen
|
|
3052
3048
|
} = useMenuContentContext();
|
|
3053
|
-
const [submenuIsFocused, setSubmenuIsFocused] =
|
|
3054
|
-
const [submenuIsOpen, setSubmenuIsOpen] =
|
|
3055
|
-
const [submenuIsActive, setSubmenuIsActive] =
|
|
3056
|
-
const submenuItemRef =
|
|
3057
|
-
const submenuRef =
|
|
3049
|
+
const [submenuIsFocused, setSubmenuIsFocused] = React13.useState(false);
|
|
3050
|
+
const [submenuIsOpen, setSubmenuIsOpen] = React13.useState(false);
|
|
3051
|
+
const [submenuIsActive, setSubmenuIsActive] = React13.useState(false);
|
|
3052
|
+
const submenuItemRef = React13.useRef(null);
|
|
3053
|
+
const submenuRef = React13.useRef(null);
|
|
3058
3054
|
const menuContent = menuItems ? getChildrenFromMenuItems({ menuItems, MenuItemComponent }) : menuChildren;
|
|
3059
3055
|
const item = itemsMap[id] || {
|
|
3060
3056
|
index: 0,
|
|
3061
3057
|
id
|
|
3062
3058
|
};
|
|
3063
|
-
|
|
3059
|
+
React13.useEffect(() => {
|
|
3064
3060
|
if (highlightedIndex === item.index) {
|
|
3065
3061
|
!submenuIsOpen && setSubmenuIsOpen(true);
|
|
3066
3062
|
} else if (submenuIsOpen && highlightedIndex !== -1) {
|
|
@@ -3068,7 +3064,7 @@ var SubmenuItem = ({
|
|
|
3068
3064
|
setSubmenuIsActive(false);
|
|
3069
3065
|
}
|
|
3070
3066
|
}, [highlightedIndex, item.index, submenuIsOpen, setSubmenuIsOpen]);
|
|
3071
|
-
const onSubmenuStateChange =
|
|
3067
|
+
const onSubmenuStateChange = React13.useCallback(
|
|
3072
3068
|
(state) => {
|
|
3073
3069
|
if (state.isOpen !== void 0) {
|
|
3074
3070
|
setSubmenuIsOpen(state.isOpen);
|
|
@@ -3112,7 +3108,7 @@ var SubmenuItem = ({
|
|
|
3112
3108
|
onMenuItemClick();
|
|
3113
3109
|
}
|
|
3114
3110
|
};
|
|
3115
|
-
|
|
3111
|
+
React13.useEffect(() => {
|
|
3116
3112
|
if (document && document.body) {
|
|
3117
3113
|
document.body.addEventListener("click", onBodyClick, {
|
|
3118
3114
|
capture: true
|
|
@@ -3216,13 +3212,13 @@ var ListboxToggleButton = ({
|
|
|
3216
3212
|
};
|
|
3217
3213
|
|
|
3218
3214
|
// src/ActionMenu/ActionMenu.tsx
|
|
3219
|
-
import
|
|
3215
|
+
import React15, { useEffect as useEffect2 } from "react";
|
|
3220
3216
|
import {
|
|
3221
3217
|
useSelect as useSelect2
|
|
3222
3218
|
} from "downshift";
|
|
3223
3219
|
|
|
3224
3220
|
// src/hooks/useDownshiftDefaults.tsx
|
|
3225
|
-
import
|
|
3221
|
+
import React14 from "react";
|
|
3226
3222
|
|
|
3227
3223
|
// src/reducers/useComboboxStateReducer.tsx
|
|
3228
3224
|
import { useCombobox } from "downshift";
|
|
@@ -3346,12 +3342,12 @@ var useDownshiftDefaults = ({
|
|
|
3346
3342
|
isMulti = false,
|
|
3347
3343
|
multiSelectProps = {}
|
|
3348
3344
|
} = {}) => {
|
|
3349
|
-
const [hiddenItemsMap, setHiddenItemsMap] =
|
|
3350
|
-
const hiddenItemsCount =
|
|
3345
|
+
const [hiddenItemsMap, setHiddenItemsMap] = React14.useState({});
|
|
3346
|
+
const hiddenItemsCount = React14.useMemo(
|
|
3351
3347
|
() => Object.keys(hiddenItemsMap).filter(Boolean).length,
|
|
3352
3348
|
[hiddenItemsMap]
|
|
3353
3349
|
);
|
|
3354
|
-
const isItemDisabled =
|
|
3350
|
+
const isItemDisabled = React14.useCallback(
|
|
3355
3351
|
(item) => Boolean(item.disabled || hiddenItemsMap[item.id]),
|
|
3356
3352
|
[hiddenItemsMap]
|
|
3357
3353
|
);
|
|
@@ -3430,7 +3426,7 @@ var ActionMenu = ({
|
|
|
3430
3426
|
const { defaultDownshiftProps, ...restDefaults } = useDownshiftDefaults({
|
|
3431
3427
|
isCombobox: false
|
|
3432
3428
|
});
|
|
3433
|
-
const [currentSelectedItem, setCurrentSelectedItem] =
|
|
3429
|
+
const [currentSelectedItem, setCurrentSelectedItem] = React15.useState(null);
|
|
3434
3430
|
const { isOpen, ...useSelectReturnProps } = useSelect2({
|
|
3435
3431
|
...defaultDownshiftProps.select,
|
|
3436
3432
|
items: allMenuItems,
|
|
@@ -3618,7 +3614,7 @@ var MultiSelectMenu = ({
|
|
|
3618
3614
|
import "react";
|
|
3619
3615
|
|
|
3620
3616
|
// src/Autocomplete/SingleAutocomplete.tsx
|
|
3621
|
-
import "react";
|
|
3617
|
+
import React18 from "react";
|
|
3622
3618
|
import { useCombobox as useCombobox2 } from "downshift";
|
|
3623
3619
|
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
3624
3620
|
var SingleAutocomplete = ({
|
|
@@ -3636,14 +3632,15 @@ var SingleAutocomplete = ({
|
|
|
3636
3632
|
menuItems,
|
|
3637
3633
|
MenuItemComponent
|
|
3638
3634
|
});
|
|
3639
|
-
const
|
|
3635
|
+
const downshiftDefaults = useDownshiftDefaults({ isCombobox: true });
|
|
3636
|
+
const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } = downshiftDefaults;
|
|
3640
3637
|
const { updateFilteredItems } = useItemFiltering({
|
|
3641
3638
|
allMenuItems,
|
|
3642
3639
|
itemToString: itemToString2,
|
|
3643
3640
|
getIsItemVisible,
|
|
3644
3641
|
setHiddenItemsMap
|
|
3645
3642
|
});
|
|
3646
|
-
const
|
|
3643
|
+
const useComboboxReturnProps = useCombobox2({
|
|
3647
3644
|
...defaultDownshiftProps.combobox,
|
|
3648
3645
|
items: allMenuItems,
|
|
3649
3646
|
itemToString: itemToString2,
|
|
@@ -3654,6 +3651,13 @@ var SingleAutocomplete = ({
|
|
|
3654
3651
|
),
|
|
3655
3652
|
...useComboboxProps
|
|
3656
3653
|
});
|
|
3654
|
+
const { isOpen, closeMenu, inputValue } = useComboboxReturnProps;
|
|
3655
|
+
React18.useEffect(() => {
|
|
3656
|
+
if (!inputValue) return;
|
|
3657
|
+
if (allMenuItems && hiddenItemsCount >= allMenuItems.length && isOpen) {
|
|
3658
|
+
closeMenu?.();
|
|
3659
|
+
}
|
|
3660
|
+
}, [hiddenItemsCount, allMenuItems?.length, isOpen, inputValue]);
|
|
3657
3661
|
return /* @__PURE__ */ jsx21(
|
|
3658
3662
|
MenuRootComponent,
|
|
3659
3663
|
{
|
|
@@ -3661,11 +3665,9 @@ var SingleAutocomplete = ({
|
|
|
3661
3665
|
isListbox: true,
|
|
3662
3666
|
items: allMenuItems,
|
|
3663
3667
|
itemToString: itemToString2,
|
|
3664
|
-
isOpen,
|
|
3665
|
-
setHiddenItemsMap,
|
|
3666
3668
|
...useComboboxProps,
|
|
3667
3669
|
...useComboboxReturnProps,
|
|
3668
|
-
...
|
|
3670
|
+
...downshiftDefaults
|
|
3669
3671
|
},
|
|
3670
3672
|
popoutProps: {
|
|
3671
3673
|
focusOnContent: false
|
|
@@ -3676,7 +3678,7 @@ var SingleAutocomplete = ({
|
|
|
3676
3678
|
};
|
|
3677
3679
|
|
|
3678
3680
|
// src/Autocomplete/MultiAutocomplete.tsx
|
|
3679
|
-
import
|
|
3681
|
+
import React19 from "react";
|
|
3680
3682
|
import { useCombobox as useCombobox3, useMultipleSelection as useMultipleSelection2 } from "downshift";
|
|
3681
3683
|
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
3682
3684
|
var MultiAutocomplete = ({
|
|
@@ -3702,21 +3704,21 @@ var MultiAutocomplete = ({
|
|
|
3702
3704
|
menuItems,
|
|
3703
3705
|
MenuItemComponent
|
|
3704
3706
|
});
|
|
3705
|
-
const [selectedItems, setSelectedItems] =
|
|
3706
|
-
const [selectedItemIds, setSelectedItemIds] =
|
|
3707
|
-
const getIsItemVisibleMulti =
|
|
3708
|
-
(item,
|
|
3709
|
-
return (showSelectedItemsInDropdown || !selectedItemIds[item.id]) && getIsItemVisible(item,
|
|
3707
|
+
const [selectedItems, setSelectedItems] = React19.useState(initialSelectedItems);
|
|
3708
|
+
const [selectedItemIds, setSelectedItemIds] = React19.useState(getSelectedItemIds(initialSelectedItems));
|
|
3709
|
+
const getIsItemVisibleMulti = React19.useCallback(
|
|
3710
|
+
(item, inputValue2) => {
|
|
3711
|
+
return (showSelectedItemsInDropdown || !selectedItemIds[item.id]) && getIsItemVisible(item, inputValue2);
|
|
3710
3712
|
},
|
|
3711
3713
|
[selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]
|
|
3712
3714
|
);
|
|
3713
|
-
const getShouldFilterMulti =
|
|
3715
|
+
const getShouldFilterMulti = React19.useCallback(
|
|
3714
3716
|
(args) => {
|
|
3715
3717
|
return !showSelectedItemsInDropdown && Object.keys(selectedItemIds).length > 0 || defaultGetShouldFilter(args);
|
|
3716
3718
|
},
|
|
3717
3719
|
[selectedItemIds, showSelectedItemsInDropdown, getIsItemVisible]
|
|
3718
3720
|
);
|
|
3719
|
-
const
|
|
3721
|
+
const downshiftDefaults = useDownshiftDefaults({
|
|
3720
3722
|
isCombobox: true,
|
|
3721
3723
|
isMulti: true,
|
|
3722
3724
|
// handles the prop name mapping for multi select
|
|
@@ -3727,6 +3729,7 @@ var MultiAutocomplete = ({
|
|
|
3727
3729
|
...useComboboxProps
|
|
3728
3730
|
}
|
|
3729
3731
|
});
|
|
3732
|
+
const { setHiddenItemsMap, defaultDownshiftProps, hiddenItemsCount } = downshiftDefaults;
|
|
3730
3733
|
const { updateFilteredItems } = useItemFiltering({
|
|
3731
3734
|
allMenuItems,
|
|
3732
3735
|
itemToString: itemToString2,
|
|
@@ -3734,7 +3737,7 @@ var MultiAutocomplete = ({
|
|
|
3734
3737
|
getShouldFilter: getShouldFilterMulti,
|
|
3735
3738
|
setHiddenItemsMap
|
|
3736
3739
|
});
|
|
3737
|
-
|
|
3740
|
+
React19.useEffect(() => {
|
|
3738
3741
|
updateFilteredItems({ inputValue: "" });
|
|
3739
3742
|
}, [selectedItemIds]);
|
|
3740
3743
|
const useMultipleSelectionReturnProps = useMultipleSelection2({
|
|
@@ -3747,7 +3750,7 @@ var MultiAutocomplete = ({
|
|
|
3747
3750
|
onSelectedItemsChange && onSelectedItemsChange({ selectedItems: selectedItems2, ...changes });
|
|
3748
3751
|
}
|
|
3749
3752
|
});
|
|
3750
|
-
const
|
|
3753
|
+
const useComboboxReturnProps = useCombobox3({
|
|
3751
3754
|
...defaultDownshiftProps.combobox,
|
|
3752
3755
|
items: allMenuItems,
|
|
3753
3756
|
itemToString: itemToString2,
|
|
@@ -3757,7 +3760,7 @@ var MultiAutocomplete = ({
|
|
|
3757
3760
|
externalStateReducer
|
|
3758
3761
|
),
|
|
3759
3762
|
onStateChange(changes) {
|
|
3760
|
-
const { type, selectedItem: newSelectedItem, inputValue } = changes;
|
|
3763
|
+
const { type, selectedItem: newSelectedItem, inputValue: inputValue2 } = changes;
|
|
3761
3764
|
switch (type) {
|
|
3762
3765
|
// Add the selected item to the selected items list
|
|
3763
3766
|
case useCombobox3.stateChangeTypes.InputKeyDownEnter:
|
|
@@ -3778,11 +3781,18 @@ var MultiAutocomplete = ({
|
|
|
3778
3781
|
default:
|
|
3779
3782
|
break;
|
|
3780
3783
|
}
|
|
3781
|
-
if (
|
|
3784
|
+
if (inputValue2 !== void 0) updateFilteredItems({ inputValue: inputValue2 });
|
|
3782
3785
|
onStateChange && onStateChange(changes);
|
|
3783
3786
|
},
|
|
3784
3787
|
...useComboboxProps
|
|
3785
3788
|
});
|
|
3789
|
+
const { isOpen, closeMenu, inputValue } = useComboboxReturnProps;
|
|
3790
|
+
React19.useEffect(() => {
|
|
3791
|
+
if (!inputValue) return;
|
|
3792
|
+
if (allMenuItems && hiddenItemsCount >= allMenuItems.length && isOpen) {
|
|
3793
|
+
closeMenu?.();
|
|
3794
|
+
}
|
|
3795
|
+
}, [hiddenItemsCount, allMenuItems?.length, isOpen, inputValue]);
|
|
3786
3796
|
return /* @__PURE__ */ jsx22(
|
|
3787
3797
|
MenuRootComponent,
|
|
3788
3798
|
{
|
|
@@ -3790,18 +3800,16 @@ var MultiAutocomplete = ({
|
|
|
3790
3800
|
isListbox: true,
|
|
3791
3801
|
items: allMenuItems,
|
|
3792
3802
|
itemToString: itemToString2,
|
|
3793
|
-
isOpen,
|
|
3794
3803
|
initialSelectedItems,
|
|
3795
3804
|
onStateChange,
|
|
3796
3805
|
onSelectedItemsChange,
|
|
3797
3806
|
getA11yMultiStatusMessage,
|
|
3798
3807
|
onMultiSelectStateChange,
|
|
3799
3808
|
multiSelectStateReducer,
|
|
3800
|
-
setHiddenItemsMap,
|
|
3801
3809
|
...useComboboxProps,
|
|
3802
3810
|
...useComboboxReturnProps,
|
|
3803
3811
|
...useMultipleSelectionReturnProps,
|
|
3804
|
-
...
|
|
3812
|
+
...downshiftDefaults
|
|
3805
3813
|
},
|
|
3806
3814
|
popoutProps: {
|
|
3807
3815
|
focusOnContent: false
|
|
@@ -3814,7 +3822,7 @@ var MultiAutocomplete = ({
|
|
|
3814
3822
|
// src/Autocomplete/Autocomplete.tsx
|
|
3815
3823
|
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
3816
3824
|
var Autocomplete = ({
|
|
3817
|
-
multiSelect,
|
|
3825
|
+
multiSelect = false,
|
|
3818
3826
|
...rest
|
|
3819
3827
|
}) => {
|
|
3820
3828
|
if (multiSelect) {
|
|
@@ -3926,7 +3934,7 @@ var AutocompleteSelect = (props) => {
|
|
|
3926
3934
|
};
|
|
3927
3935
|
|
|
3928
3936
|
// src/NestedMenu/NestedMenu.tsx
|
|
3929
|
-
import { useId, useEffect as
|
|
3937
|
+
import { useId, useEffect as useEffect4, useState } from "react";
|
|
3930
3938
|
import { AnimatePresence as AnimatePresence2, motion as motion3 } from "motion/react";
|
|
3931
3939
|
import { useSelect as useSelect6 } from "downshift";
|
|
3932
3940
|
|
|
@@ -3993,7 +4001,7 @@ var useNestedMenuContext = () => {
|
|
|
3993
4001
|
};
|
|
3994
4002
|
|
|
3995
4003
|
// src/NestedMenu/NestedMenuContent.tsx
|
|
3996
|
-
import { useEffect as
|
|
4004
|
+
import { useEffect as useEffect3, useRef } from "react";
|
|
3997
4005
|
import { mergeRefs as mergeRefs3 } from "@sproutsocial/seeds-react-utilities";
|
|
3998
4006
|
|
|
3999
4007
|
// src/NestedMenu/NestedMenuItem.tsx
|
|
@@ -4037,7 +4045,7 @@ var NestedMenuContent = ({
|
|
|
4037
4045
|
const internalRef = useRef(null);
|
|
4038
4046
|
const innerRef = mergeRefs3(internalRef, innerRefProp);
|
|
4039
4047
|
const contentProps = children ? { children } : { menuItems, MenuItemComponent };
|
|
4040
|
-
|
|
4048
|
+
useEffect3(() => {
|
|
4041
4049
|
internalRef?.current?.focus();
|
|
4042
4050
|
}, []);
|
|
4043
4051
|
const onKeyDown = (e) => {
|
|
@@ -4105,7 +4113,7 @@ var NestedMenuHeader = ({
|
|
|
4105
4113
|
};
|
|
4106
4114
|
|
|
4107
4115
|
// src/NestedMenu/NestedMenuRoot.tsx
|
|
4108
|
-
import
|
|
4116
|
+
import React24 from "react";
|
|
4109
4117
|
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
4110
4118
|
var NestedMenuRoot = ({
|
|
4111
4119
|
children,
|
|
@@ -4114,7 +4122,7 @@ var NestedMenuRoot = ({
|
|
|
4114
4122
|
}) => {
|
|
4115
4123
|
const menuContext = useMenu(contextProps);
|
|
4116
4124
|
const { setActiveMenuContext, selectedMenuPath } = useNestedMenuContext();
|
|
4117
|
-
|
|
4125
|
+
React24.useEffect(() => {
|
|
4118
4126
|
setActiveMenuContext(menuContext);
|
|
4119
4127
|
}, [
|
|
4120
4128
|
selectedMenuPath[selectedMenuPath.length - 1],
|
|
@@ -4198,7 +4206,7 @@ var NestedMenu = ({
|
|
|
4198
4206
|
...useSelectReturnProps,
|
|
4199
4207
|
...restDefaults
|
|
4200
4208
|
};
|
|
4201
|
-
|
|
4209
|
+
useEffect4(() => {
|
|
4202
4210
|
if (!useSelectReturnProps.isOpen) {
|
|
4203
4211
|
setHasLoadedOnce(false);
|
|
4204
4212
|
} else {
|
|
@@ -4224,7 +4232,7 @@ var NestedMenu = ({
|
|
|
4224
4232
|
setIsAdding(true);
|
|
4225
4233
|
setSelectedMenuPath((currentPath) => [...currentPath, id]);
|
|
4226
4234
|
};
|
|
4227
|
-
|
|
4235
|
+
useEffect4(() => {
|
|
4228
4236
|
if (selectedMenuPath.length > 0) {
|
|
4229
4237
|
const newMenuId = selectedMenuPath[selectedMenuPath.length - 1];
|
|
4230
4238
|
setCurrentMenuId(newMenuId);
|
|
@@ -4412,7 +4420,6 @@ export {
|
|
|
4412
4420
|
MenuLabel,
|
|
4413
4421
|
MenuPopout,
|
|
4414
4422
|
MenuRoot,
|
|
4415
|
-
MenuRootNoPopout,
|
|
4416
4423
|
MenuSearchInput,
|
|
4417
4424
|
MenuSearchTokenInput,
|
|
4418
4425
|
MenuToggleButton,
|