@sproutsocial/seeds-react-menu 1.8.6 → 1.9.2
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 +11 -11
- package/CHANGELOG.md +48 -0
- package/dist/esm/v2/index.js +45 -8
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/v2/index.d.mts +9 -4
- package/dist/v2/index.d.ts +9 -4
- package/dist/v2/index.js +44 -7
- package/dist/v2/index.js.map +1 -1
- package/package.json +13 -13
- package/src/v2/Autocomplete/Autocomplete.stories.tsx +36 -0
- package/src/v2/Autocomplete/MultiAutocomplete.tsx +21 -1
- package/src/v2/Autocomplete/SingleAutocomplete.tsx +2 -0
- package/src/v2/Common-V2/ComboboxContent.tsx +1 -0
- package/src/v2/Common-V2/Popout.tsx +22 -6
- package/src/v2/Common-V2/props.ts +5 -0
- package/src/v2/SearchableSelect/SearchableMultiSelect.tsx +2 -0
- package/src/v2/SearchableSelect/SearchableSelect.tsx +2 -0
- package/src/v2/Select/MultiSelect.tsx +2 -0
- package/src/v2/Select/SingleSelect.tsx +2 -0
package/dist/v2/index.d.mts
CHANGED
|
@@ -32,6 +32,11 @@ interface BaseSelectProps<T extends DataWithId> {
|
|
|
32
32
|
onInteractOutside?: (event: CustomEvent<{
|
|
33
33
|
originalEvent: Event;
|
|
34
34
|
}>) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Controls which side the popout appears relative to the trigger.
|
|
37
|
+
* @default "bottom"
|
|
38
|
+
*/
|
|
39
|
+
popoutPlacement?: "top" | "bottom";
|
|
35
40
|
}
|
|
36
41
|
/**
|
|
37
42
|
* Props common to all single-select components
|
|
@@ -81,22 +86,22 @@ interface SingleSelectProps<T extends DataWithId> extends BaseSingleSelectProps<
|
|
|
81
86
|
renderSelection?: (item: T | null) => ReactNode;
|
|
82
87
|
triggerButtonProps?: any;
|
|
83
88
|
}
|
|
84
|
-
declare function SingleSelect<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSelection, renderSelection, renderItem, groupBy, renderGroupHeading, isVirtualized, placeholder, onSelectedItemIdChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, removePlaceholderItem, onPointerDownOutside, onInteractOutside, }: SingleSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
89
|
+
declare function SingleSelect<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSelection, renderSelection, renderItem, groupBy, renderGroupHeading, isVirtualized, placeholder, onSelectedItemIdChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, removePlaceholderItem, onPointerDownOutside, onInteractOutside, popoutPlacement, }: SingleSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
85
90
|
|
|
86
91
|
interface MultiSelectProps<T extends DataWithId> extends BaseMultiSelectProps<T> {
|
|
87
92
|
renderSelections?: (items: T[]) => ReactNode;
|
|
88
93
|
triggerButtonProps?: any;
|
|
89
94
|
shouldOverflow?: boolean;
|
|
90
95
|
}
|
|
91
|
-
declare function MultiSelect<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, isOpen: controlledIsOpen, itemToKey, itemToString, renderSelections, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, placeholder, onSelectedItemIdsChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, shouldOverflow, onPointerDownOutside, onInteractOutside, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
96
|
+
declare function MultiSelect<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, isOpen: controlledIsOpen, itemToKey, itemToString, renderSelections, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, placeholder, onSelectedItemIdsChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, shouldOverflow, onPointerDownOutside, onInteractOutside, popoutPlacement, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
92
97
|
|
|
93
98
|
interface SingleAutocompleteProps<T extends DataWithId> extends BaseSingleAutocompleteProps<T> {
|
|
94
99
|
includePlaceholderItem?: boolean;
|
|
95
100
|
}
|
|
96
|
-
declare function SingleAutocomplete<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, EmptyState, placeholder, onSelectedItemIdChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, includePlaceholderItem, onPointerDownOutside, onInteractOutside, }: SingleAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
101
|
+
declare function SingleAutocomplete<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, EmptyState, placeholder, onSelectedItemIdChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, includePlaceholderItem, onPointerDownOutside, onInteractOutside, popoutPlacement, }: SingleAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
97
102
|
|
|
98
103
|
interface MultiAutocompleteProps<T extends DataWithId> extends BaseMultiAutocompleteProps<T> {
|
|
99
104
|
}
|
|
100
|
-
declare function MultiAutocomplete<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, EmptyState, placeholder, onSelectedItemIdsChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, onPointerDownOutside, onInteractOutside, }: MultiAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
105
|
+
declare function MultiAutocomplete<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, EmptyState, placeholder, onSelectedItemIdsChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, onPointerDownOutside, onInteractOutside, popoutPlacement, }: MultiAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
101
106
|
|
|
102
107
|
export { MultiAutocomplete, type MultiAutocompleteProps, MultiSelect, type MultiSelectProps, SingleAutocomplete, type SingleAutocompleteProps, SingleSelect, type SingleSelectProps };
|
package/dist/v2/index.d.ts
CHANGED
|
@@ -32,6 +32,11 @@ interface BaseSelectProps<T extends DataWithId> {
|
|
|
32
32
|
onInteractOutside?: (event: CustomEvent<{
|
|
33
33
|
originalEvent: Event;
|
|
34
34
|
}>) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Controls which side the popout appears relative to the trigger.
|
|
37
|
+
* @default "bottom"
|
|
38
|
+
*/
|
|
39
|
+
popoutPlacement?: "top" | "bottom";
|
|
35
40
|
}
|
|
36
41
|
/**
|
|
37
42
|
* Props common to all single-select components
|
|
@@ -81,22 +86,22 @@ interface SingleSelectProps<T extends DataWithId> extends BaseSingleSelectProps<
|
|
|
81
86
|
renderSelection?: (item: T | null) => ReactNode;
|
|
82
87
|
triggerButtonProps?: any;
|
|
83
88
|
}
|
|
84
|
-
declare function SingleSelect<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSelection, renderSelection, renderItem, groupBy, renderGroupHeading, isVirtualized, placeholder, onSelectedItemIdChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, removePlaceholderItem, onPointerDownOutside, onInteractOutside, }: SingleSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
89
|
+
declare function SingleSelect<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSelection, renderSelection, renderItem, groupBy, renderGroupHeading, isVirtualized, placeholder, onSelectedItemIdChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, removePlaceholderItem, onPointerDownOutside, onInteractOutside, popoutPlacement, }: SingleSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
85
90
|
|
|
86
91
|
interface MultiSelectProps<T extends DataWithId> extends BaseMultiSelectProps<T> {
|
|
87
92
|
renderSelections?: (items: T[]) => ReactNode;
|
|
88
93
|
triggerButtonProps?: any;
|
|
89
94
|
shouldOverflow?: boolean;
|
|
90
95
|
}
|
|
91
|
-
declare function MultiSelect<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, isOpen: controlledIsOpen, itemToKey, itemToString, renderSelections, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, placeholder, onSelectedItemIdsChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, shouldOverflow, onPointerDownOutside, onInteractOutside, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
96
|
+
declare function MultiSelect<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, isOpen: controlledIsOpen, itemToKey, itemToString, renderSelections, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, placeholder, onSelectedItemIdsChange, onIsOpenChange, stateReducer, triggerButtonProps, menuProps, inputType, shouldOverflow, onPointerDownOutside, onInteractOutside, popoutPlacement, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
92
97
|
|
|
93
98
|
interface SingleAutocompleteProps<T extends DataWithId> extends BaseSingleAutocompleteProps<T> {
|
|
94
99
|
includePlaceholderItem?: boolean;
|
|
95
100
|
}
|
|
96
|
-
declare function SingleAutocomplete<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, EmptyState, placeholder, onSelectedItemIdChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, includePlaceholderItem, onPointerDownOutside, onInteractOutside, }: SingleAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
101
|
+
declare function SingleAutocomplete<T extends DataWithId>({ id, data, selectedItemId: controlledSelectedItemId, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, EmptyState, placeholder, onSelectedItemIdChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, includePlaceholderItem, onPointerDownOutside, onInteractOutside, popoutPlacement, }: SingleAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
97
102
|
|
|
98
103
|
interface MultiAutocompleteProps<T extends DataWithId> extends BaseMultiAutocompleteProps<T> {
|
|
99
104
|
}
|
|
100
|
-
declare function MultiAutocomplete<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, EmptyState, placeholder, onSelectedItemIdsChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, onPointerDownOutside, onInteractOutside, }: MultiAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
105
|
+
declare function MultiAutocomplete<T extends DataWithId>({ id, data, selectedItemIds: controlledSelectedItemIds, inputValue: controlledInputValue, isOpen: controlledIsOpen, itemToKey, itemToString, itemToSearchString, renderItem, groupBy, renderGroupHeading, isVirtualized, showSelectedItems, selectHeadings, selectAllItem, EmptyState, placeholder, onSelectedItemIdsChange, onInputValueChange, onIsOpenChange, stateReducer, menuProps, inputType, onPointerDownOutside, onInteractOutside, popoutPlacement, }: MultiAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
101
106
|
|
|
102
107
|
export { MultiAutocomplete, type MultiAutocompleteProps, MultiSelect, type MultiSelectProps, SingleAutocomplete, type SingleAutocompleteProps, SingleSelect, type SingleSelectProps };
|
package/dist/v2/index.js
CHANGED
|
@@ -248,8 +248,21 @@ function Popout({
|
|
|
248
248
|
const popoverOnOpenChange = isControlled ? onOpenChange : handleOpenChange;
|
|
249
249
|
const radixRef = React2.useRef(null);
|
|
250
250
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Popover.Root, { open: popoverOpen, onOpenChange: popoverOnOpenChange, children: [
|
|
251
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
252
|
-
|
|
251
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { position: "relative" }, children: [
|
|
252
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Popover.Trigger, { ref: radixRef, asChild: true, children }),
|
|
253
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
254
|
+
Popover.Anchor,
|
|
255
|
+
{
|
|
256
|
+
style: {
|
|
257
|
+
position: "absolute",
|
|
258
|
+
top: side === "top" ? 0 : "100%",
|
|
259
|
+
left: 0,
|
|
260
|
+
right: 0,
|
|
261
|
+
height: "1px"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
)
|
|
265
|
+
] }),
|
|
253
266
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
254
267
|
StyledContent,
|
|
255
268
|
{
|
|
@@ -798,7 +811,8 @@ var VirtualizedComboboxContent = ({
|
|
|
798
811
|
{
|
|
799
812
|
style: {
|
|
800
813
|
height: `${rowVirtualizer.getTotalSize()}px`,
|
|
801
|
-
position: "relative"
|
|
814
|
+
position: "relative",
|
|
815
|
+
overflow: "hidden"
|
|
802
816
|
},
|
|
803
817
|
children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
804
818
|
"div",
|
|
@@ -1128,7 +1142,8 @@ function SingleSelect({
|
|
|
1128
1142
|
inputType = "icon",
|
|
1129
1143
|
removePlaceholderItem = false,
|
|
1130
1144
|
onPointerDownOutside,
|
|
1131
|
-
onInteractOutside
|
|
1145
|
+
onInteractOutside,
|
|
1146
|
+
popoutPlacement
|
|
1132
1147
|
}) {
|
|
1133
1148
|
const [uncontrolledSelectedItemId, setUncontrolledSelectedItemId] = (0, import_react8.useState)(null);
|
|
1134
1149
|
const [uncontrolledIsOpen, setUncontrolledIsOpen] = (0, import_react8.useState)(false);
|
|
@@ -1227,6 +1242,7 @@ function SingleSelect({
|
|
|
1227
1242
|
{
|
|
1228
1243
|
open: selectIsOpen,
|
|
1229
1244
|
onOpenChange: updateIsOpen,
|
|
1245
|
+
side: popoutPlacement,
|
|
1230
1246
|
animationConfig: menuAnimationConfig,
|
|
1231
1247
|
onOpenAutoFocus: (e) => {
|
|
1232
1248
|
e.preventDefault();
|
|
@@ -1343,7 +1359,8 @@ function MultiSelect({
|
|
|
1343
1359
|
inputType = "checkbox",
|
|
1344
1360
|
shouldOverflow,
|
|
1345
1361
|
onPointerDownOutside,
|
|
1346
|
-
onInteractOutside
|
|
1362
|
+
onInteractOutside,
|
|
1363
|
+
popoutPlacement
|
|
1347
1364
|
}) {
|
|
1348
1365
|
const [uncontrolledSelectedItemIds, setUncontrolledSelectedItemIds] = (0, import_react9.useState)([]);
|
|
1349
1366
|
const [uncontrolledIsOpen, setUncontrolledIsOpen] = (0, import_react9.useState)(false);
|
|
@@ -1518,6 +1535,7 @@ function MultiSelect({
|
|
|
1518
1535
|
{
|
|
1519
1536
|
open: selectIsOpen,
|
|
1520
1537
|
onOpenChange: updateIsOpen,
|
|
1538
|
+
side: popoutPlacement,
|
|
1521
1539
|
onOpenAutoFocus: (e) => {
|
|
1522
1540
|
e.preventDefault();
|
|
1523
1541
|
},
|
|
@@ -1633,7 +1651,8 @@ function SingleAutocomplete({
|
|
|
1633
1651
|
inputType = "icon",
|
|
1634
1652
|
includePlaceholderItem = false,
|
|
1635
1653
|
onPointerDownOutside,
|
|
1636
|
-
onInteractOutside
|
|
1654
|
+
onInteractOutside,
|
|
1655
|
+
popoutPlacement
|
|
1637
1656
|
}) {
|
|
1638
1657
|
const [uncontrolledInputValue, setUncontrolledInputValue] = (0, import_react10.useState)("");
|
|
1639
1658
|
const [uncontrolledSelectedItemId, setUncontrolledSelectedItemId] = (0, import_react10.useState)(null);
|
|
@@ -1803,6 +1822,7 @@ function SingleAutocomplete({
|
|
|
1803
1822
|
{
|
|
1804
1823
|
open: comboboxIsOpen,
|
|
1805
1824
|
onOpenChange: updateIsOpen,
|
|
1825
|
+
side: popoutPlacement,
|
|
1806
1826
|
animationConfig: menuAnimationConfig,
|
|
1807
1827
|
onOpenAutoFocus: (e) => {
|
|
1808
1828
|
e.preventDefault();
|
|
@@ -1919,8 +1939,10 @@ function MultiAutocomplete({
|
|
|
1919
1939
|
menuProps,
|
|
1920
1940
|
inputType = "checkbox",
|
|
1921
1941
|
onPointerDownOutside,
|
|
1922
|
-
onInteractOutside
|
|
1942
|
+
onInteractOutside,
|
|
1943
|
+
popoutPlacement
|
|
1923
1944
|
}) {
|
|
1945
|
+
const mousedownInPopoverRef = (0, import_react11.useRef)(false);
|
|
1924
1946
|
const [uncontrolledInputValue, setUncontrolledInputValue] = (0, import_react11.useState)("");
|
|
1925
1947
|
const [uncontrolledSelectedItemIds, setUncontrolledSelectedItemIds] = (0, import_react11.useState)([]);
|
|
1926
1948
|
const [uncontrolledIsOpen, setUncontrolledIsOpen] = (0, import_react11.useState)(false);
|
|
@@ -1947,6 +1969,9 @@ function MultiAutocomplete({
|
|
|
1947
1969
|
onInputValueChange?.(newInputValue);
|
|
1948
1970
|
};
|
|
1949
1971
|
const updateIsOpen = (newIsOpen) => {
|
|
1972
|
+
if (!newIsOpen) {
|
|
1973
|
+
updateInputValue("");
|
|
1974
|
+
}
|
|
1950
1975
|
if (!isIsOpenControlled) {
|
|
1951
1976
|
setUncontrolledIsOpen(newIsOpen);
|
|
1952
1977
|
}
|
|
@@ -2123,6 +2148,11 @@ function MultiAutocomplete({
|
|
|
2123
2148
|
if (inputProps.onBlur) {
|
|
2124
2149
|
inputProps.onBlur(e);
|
|
2125
2150
|
}
|
|
2151
|
+
if (mousedownInPopoverRef.current) {
|
|
2152
|
+
mousedownInPopoverRef.current = false;
|
|
2153
|
+
e.target.focus();
|
|
2154
|
+
return;
|
|
2155
|
+
}
|
|
2126
2156
|
updateIsOpen(false);
|
|
2127
2157
|
};
|
|
2128
2158
|
const inputPropsToSpread = { ...inputProps };
|
|
@@ -2132,6 +2162,7 @@ function MultiAutocomplete({
|
|
|
2132
2162
|
{
|
|
2133
2163
|
open: comboboxIsOpen,
|
|
2134
2164
|
onOpenChange: updateIsOpen,
|
|
2165
|
+
side: popoutPlacement,
|
|
2135
2166
|
onOpenAutoFocus: (e) => {
|
|
2136
2167
|
e.preventDefault();
|
|
2137
2168
|
},
|
|
@@ -2141,6 +2172,12 @@ function MultiAutocomplete({
|
|
|
2141
2172
|
onPointerDownOutside,
|
|
2142
2173
|
onInteractOutside,
|
|
2143
2174
|
animationConfig: menuAnimationConfig,
|
|
2175
|
+
onMouseDown: () => {
|
|
2176
|
+
mousedownInPopoverRef.current = true;
|
|
2177
|
+
},
|
|
2178
|
+
onMouseUp: () => {
|
|
2179
|
+
mousedownInPopoverRef.current = false;
|
|
2180
|
+
},
|
|
2144
2181
|
content: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
2145
2182
|
ComboboxContent,
|
|
2146
2183
|
{
|