@sproutsocial/seeds-react-menu 0.1.0 → 0.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 +10 -10
- package/CHANGELOG.md +17 -1
- package/dist/esm/index.js +209 -198
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +103 -37
- package/dist/index.d.ts +103 -37
- package/dist/index.js +239 -229
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
- package/src/ActionMenu/ActionMenu.feature +9 -3
- package/src/ActionMenu/ActionMenu.tsx +75 -42
- package/src/ActionMenu/__tests__/ActionMenu.test.tsx +36 -42
- package/src/ActionMenu/__tests__/ActionMenu.typetest.tsx +13 -13
- package/src/MenuContent/MenuContent.tsx +31 -1
- package/src/MenuContent/MenuContentTypes.ts +2 -2
- package/src/MenuContent/styles.tsx +10 -6
- package/src/MenuFooter/MenuFooter.feature +1 -1
- package/src/MenuFooter/MenuFooter.tsx +8 -0
- package/src/MenuFooter/__tests__/MenuFooter.test.tsx +53 -26
- package/src/MenuFooter/styles.tsx +1 -1
- package/src/MenuGroup/MenuGroup.feature +14 -26
- package/src/MenuGroup/MenuGroup.tsx +21 -1
- package/src/MenuGroup/__tests__/MenuGroup.test.tsx +40 -6
- package/src/MenuGroup/styles.tsx +4 -3
- package/src/MenuHeader/MenuHeader.tsx +16 -5
- package/src/MenuHeader/__tests__/MenuHeader.test.tsx +50 -6
- package/src/MenuHeader/styles.tsx +21 -22
- package/src/MenuItem/MenuItem.feature +66 -26
- package/src/MenuItem/MenuItem.tsx +35 -20
- package/src/MenuItem/MenuItemTypes.ts +13 -1
- package/src/MenuItem/__tests__/MenuItem.test.tsx +431 -154
- package/src/MenuItem/__tests__/MenuItem.typetest.tsx +57 -38
- package/src/MenuItem/styles.tsx +42 -3
- package/src/{MenuItemSelectable/MenuItemSelectable.tsx → MenuItem/useOptionProps.tsx} +31 -54
- package/src/MenuRoot/MenuRoot.tsx +12 -17
- package/src/MenuRoot/__tests__/MenuRoot.test.tsx +3 -3
- package/src/MenuRoot/__tests__/MenuRoot.typetest.tsx +10 -10
- package/src/MultiSelectMenu/MultiSelectMenu.tsx +8 -1
- package/src/MultiSelectMenu/__tests__/MultiSelectMenu.test.tsx +19 -19
- package/src/MultiSelectMenu/__tests__/MultiSelectMenu.typetest.tsx +10 -10
- package/src/SingleSelectMenu/SingleSelectMenu.feature +11 -0
- package/src/SingleSelectMenu/SingleSelectMenu.tsx +9 -0
- package/src/SingleSelectMenu/__tests__/SingleSelectMenu.test.tsx +11 -14
- package/src/SingleSelectMenu/__tests__/SingleSelectMenu.typetest.tsx +14 -14
- package/src/__tests__/Menu.test.tsx +20 -16
- package/src/hooks/useItemsFromChildren.tsx +1 -4
- package/src/index.ts +0 -1
- package/src/menuTestingUtils.tsx +7 -4
- package/src/MenuItemSelectable/MenuItemSelectable.feature +0 -99
- package/src/MenuItemSelectable/MenuItemSelectableTypes.ts +0 -15
- package/src/MenuItemSelectable/__tests__/MenuItemSelectable.test.tsx +0 -303
- package/src/MenuItemSelectable/__tests__/MenuItemSelectable.typetest.tsx +0 -56
- package/src/MenuItemSelectable/index.ts +0 -5
- package/src/MenuItemSelectable/styles.tsx +0 -21
package/dist/esm/index.js
CHANGED
|
@@ -95,7 +95,7 @@ var require_object_assign = __commonJS({
|
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
// src/MenuItem/MenuItem.tsx
|
|
98
|
-
import { useContext as
|
|
98
|
+
import { useContext as useContext3 } from "react";
|
|
99
99
|
|
|
100
100
|
// src/MenuContext.tsx
|
|
101
101
|
import {
|
|
@@ -148,15 +148,6 @@ var useMenuContext = () => {
|
|
|
148
148
|
return menuContextValue;
|
|
149
149
|
};
|
|
150
150
|
|
|
151
|
-
// src/constants.ts
|
|
152
|
-
var MENU_ITEM_ROLES = {
|
|
153
|
-
MENUITEM: "menuitem",
|
|
154
|
-
LISTITEM: "listitem",
|
|
155
|
-
OPTION: "option",
|
|
156
|
-
RADIO: "menuitemradio",
|
|
157
|
-
CHECKBOX: "menuitemcheckbox"
|
|
158
|
-
};
|
|
159
|
-
|
|
160
151
|
// src/MenuItem/styles.tsx
|
|
161
152
|
import styled, { css as css4 } from "styled-components";
|
|
162
153
|
|
|
@@ -1712,17 +1703,35 @@ var highlightedStyles = css4`
|
|
|
1712
1703
|
background-color: ${({ theme: theme2 }) => theme2.colors.listItem.background.hover};
|
|
1713
1704
|
`;
|
|
1714
1705
|
var MenuItemContainer = styled.li`
|
|
1706
|
+
box-sizing: border-box;
|
|
1707
|
+
list-style-type: none;
|
|
1708
|
+
margin-left: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1709
|
+
margin-right: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1710
|
+
transition: all ${({ theme: theme2 }) => theme2.duration["fast"]};
|
|
1711
|
+
|
|
1712
|
+
&:first-child {
|
|
1713
|
+
margin-top: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
&:last-child {
|
|
1717
|
+
margin-bottom: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1718
|
+
}
|
|
1719
|
+
`;
|
|
1720
|
+
var StyledMenuItem = styled.div`
|
|
1721
|
+
display: block;
|
|
1722
|
+
box-sizing: border-box;
|
|
1723
|
+
width: 100%;
|
|
1715
1724
|
border-radius: ${({ theme: theme2 }) => theme2.radii[500]};
|
|
1716
1725
|
background-color: ${({ theme: theme2 }) => theme2.colors.listItem.background.base};
|
|
1717
1726
|
border: 1px solid ${({ theme: theme2 }) => theme2.colors.listItem.background.base};
|
|
1718
1727
|
color: ${({ theme: theme2 }) => theme2.colors.text.body};
|
|
1719
1728
|
font-family: ${({ theme: theme2 }) => theme2.fontFamily};
|
|
1720
1729
|
font-weight: ${({ theme: theme2 }) => theme2.fontWeights.normal};
|
|
1730
|
+
text-align: left;
|
|
1731
|
+
text-decoration: none;
|
|
1721
1732
|
padding: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1722
|
-
list-style-type: none;
|
|
1723
1733
|
outline: 0;
|
|
1724
1734
|
${({ theme: theme2 }) => theme2.typography[200]};
|
|
1725
|
-
transition: all ${({ theme: theme2 }) => theme2.duration["fast"]};
|
|
1726
1735
|
|
|
1727
1736
|
/* Highlighted */
|
|
1728
1737
|
${({ $highlighted }) => $highlighted && highlightedStyles}
|
|
@@ -1764,76 +1773,33 @@ var MenuItemContainer = styled.li`
|
|
|
1764
1773
|
${layout}
|
|
1765
1774
|
${space}
|
|
1766
1775
|
`;
|
|
1767
|
-
|
|
1768
|
-
// src/MenuItem/MenuItem.tsx
|
|
1769
|
-
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
1770
|
-
var MenuItem = ({
|
|
1771
|
-
id,
|
|
1772
|
-
children,
|
|
1773
|
-
role = "menuitem",
|
|
1774
|
-
label,
|
|
1775
|
-
onClick,
|
|
1776
|
-
onKeyDown,
|
|
1777
|
-
disabled: disabled2 = false,
|
|
1778
|
-
ref,
|
|
1779
|
-
color: color2,
|
|
1780
|
-
...props
|
|
1781
|
-
}) => {
|
|
1782
|
-
const { getItemProps, itemsMap, highlightedIndex, isListbox } = useContext2(MenuContext);
|
|
1783
|
-
const item = itemsMap[id] || { index: 0, id };
|
|
1784
|
-
const highlighted = highlightedIndex === item?.index;
|
|
1785
|
-
return /* @__PURE__ */ jsx2(
|
|
1786
|
-
MenuItemContainer,
|
|
1787
|
-
{
|
|
1788
|
-
id,
|
|
1789
|
-
tabIndex: role !== MENU_ITEM_ROLES.LISTITEM && !disabled2 ? -1 : void 0,
|
|
1790
|
-
$highlighted: highlighted,
|
|
1791
|
-
...getItemProps?.({
|
|
1792
|
-
...isListbox ? {} : { role: "menuitem" },
|
|
1793
|
-
item,
|
|
1794
|
-
index: item.index,
|
|
1795
|
-
// This prop no longer supported in downshift
|
|
1796
|
-
// disabled,
|
|
1797
|
-
onClick,
|
|
1798
|
-
onKeyDown
|
|
1799
|
-
}),
|
|
1800
|
-
...props,
|
|
1801
|
-
children
|
|
1802
|
-
}
|
|
1803
|
-
);
|
|
1804
|
-
};
|
|
1805
|
-
|
|
1806
|
-
// src/MenuItemSelectable/MenuItemSelectable.tsx
|
|
1807
|
-
import { useContext as useContext3, useMemo as useMemo2 } from "react";
|
|
1808
|
-
import { Icon } from "@sproutsocial/seeds-react-icon";
|
|
1809
|
-
import { Checkbox } from "@sproutsocial/seeds-react-checkbox";
|
|
1810
|
-
import { Switch } from "@sproutsocial/seeds-react-switch";
|
|
1811
|
-
import { Radio } from "@sproutsocial/seeds-react-radio";
|
|
1812
|
-
import { useTheme } from "styled-components";
|
|
1813
|
-
import { Box } from "@sproutsocial/seeds-react-box";
|
|
1814
|
-
|
|
1815
|
-
// src/MenuItemSelectable/styles.tsx
|
|
1816
|
-
import styled2 from "styled-components";
|
|
1817
|
-
var MenuItemSelectableRow = styled2.div`
|
|
1776
|
+
var MenuItemRow = styled.div`
|
|
1818
1777
|
display: flex;
|
|
1819
1778
|
align-items: center;
|
|
1820
1779
|
pointer-events: none;
|
|
1821
1780
|
`;
|
|
1822
|
-
var
|
|
1781
|
+
var MenuItemAction = styled.div`
|
|
1823
1782
|
margin-right: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1824
1783
|
display: flex;
|
|
1825
1784
|
align-items: center;
|
|
1826
1785
|
justify-content: center;
|
|
1827
1786
|
flex-shrink: 0;
|
|
1828
1787
|
`;
|
|
1829
|
-
var
|
|
1788
|
+
var MenuItemText = styled.div`
|
|
1830
1789
|
word-break: break-word;
|
|
1831
1790
|
flex-grow: 1;
|
|
1832
1791
|
min-width: 0;
|
|
1833
1792
|
`;
|
|
1834
1793
|
|
|
1835
|
-
// src/
|
|
1836
|
-
import {
|
|
1794
|
+
// src/MenuItem/useOptionProps.tsx
|
|
1795
|
+
import { useContext as useContext2, useMemo as useMemo2 } from "react";
|
|
1796
|
+
import { Icon } from "@sproutsocial/seeds-react-icon";
|
|
1797
|
+
import { Checkbox } from "@sproutsocial/seeds-react-checkbox";
|
|
1798
|
+
import { Switch } from "@sproutsocial/seeds-react-switch";
|
|
1799
|
+
import { Radio } from "@sproutsocial/seeds-react-radio";
|
|
1800
|
+
import { useTheme } from "styled-components";
|
|
1801
|
+
import { Box } from "@sproutsocial/seeds-react-box";
|
|
1802
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
1837
1803
|
var SelectionIndicator = ({
|
|
1838
1804
|
id,
|
|
1839
1805
|
inputType = "icon",
|
|
@@ -1846,88 +1812,123 @@ var SelectionIndicator = ({
|
|
|
1846
1812
|
};
|
|
1847
1813
|
switch (inputType) {
|
|
1848
1814
|
case "checkbox":
|
|
1849
|
-
return /* @__PURE__ */
|
|
1815
|
+
return /* @__PURE__ */ jsx2(
|
|
1850
1816
|
Checkbox,
|
|
1851
1817
|
{
|
|
1852
1818
|
onChange: () => {
|
|
1853
1819
|
},
|
|
1854
1820
|
checked: selected,
|
|
1855
1821
|
"aria-labelledby": labeledBy,
|
|
1856
|
-
id: `
|
|
1822
|
+
id: `MenuItem-${inputType}-${id}`
|
|
1857
1823
|
}
|
|
1858
1824
|
);
|
|
1859
1825
|
case "switch":
|
|
1860
|
-
return /* @__PURE__ */
|
|
1826
|
+
return /* @__PURE__ */ jsx2(
|
|
1861
1827
|
Switch,
|
|
1862
1828
|
{
|
|
1863
1829
|
onClick: inputStub,
|
|
1864
1830
|
checked: !!selected,
|
|
1865
1831
|
"aria-labelledby": labeledBy,
|
|
1866
|
-
id: `
|
|
1832
|
+
id: `MenuItem-${inputType}-${id}`
|
|
1867
1833
|
}
|
|
1868
1834
|
);
|
|
1869
1835
|
case "radio":
|
|
1870
|
-
return /* @__PURE__ */
|
|
1836
|
+
return /* @__PURE__ */ jsx2(
|
|
1871
1837
|
Radio,
|
|
1872
1838
|
{
|
|
1873
1839
|
checked: selected,
|
|
1874
|
-
id: `
|
|
1875
|
-
name: `
|
|
1840
|
+
id: `MenuItem-${inputType}-${id}`,
|
|
1841
|
+
name: `MenuItem-${inputType}`,
|
|
1876
1842
|
"aria-labelledby": labeledBy
|
|
1877
1843
|
}
|
|
1878
1844
|
);
|
|
1879
1845
|
case "icon":
|
|
1880
1846
|
if (selected) {
|
|
1881
|
-
return /* @__PURE__ */
|
|
1847
|
+
return /* @__PURE__ */ jsx2(Icon, { name: "check-solid", "aria-hidden": true, size: "small" });
|
|
1882
1848
|
} else {
|
|
1883
|
-
return /* @__PURE__ */
|
|
1849
|
+
return /* @__PURE__ */ jsx2(Box, { width: space2["400"] });
|
|
1884
1850
|
}
|
|
1885
1851
|
default:
|
|
1886
1852
|
return null;
|
|
1887
1853
|
}
|
|
1888
1854
|
};
|
|
1889
|
-
var
|
|
1855
|
+
var useOptionProps = ({
|
|
1890
1856
|
id,
|
|
1891
1857
|
children,
|
|
1892
1858
|
inputType = "icon",
|
|
1893
|
-
|
|
1859
|
+
inputLabelId,
|
|
1894
1860
|
...props
|
|
1895
1861
|
}) => {
|
|
1896
|
-
const { selectedItem, selectedItems, isListbox } =
|
|
1862
|
+
const { selectedItem, selectedItems, isListbox } = useContext2(MenuContext);
|
|
1897
1863
|
const selected = useMemo2(
|
|
1898
1864
|
() => selectedItem?.id === id || !!selectedItems?.find((item) => item?.id === id),
|
|
1899
1865
|
[selectedItem, selectedItems]
|
|
1900
1866
|
);
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1867
|
+
const label = inputLabelId || `menu-item-child-${id}`;
|
|
1868
|
+
return isListbox ? {
|
|
1869
|
+
active: selected,
|
|
1870
|
+
["aria-selected"]: selected,
|
|
1871
|
+
children: /* @__PURE__ */ jsxs(MenuItemRow, { children: [
|
|
1872
|
+
/* @__PURE__ */ jsx2(MenuItemAction, { children: /* @__PURE__ */ jsx2(
|
|
1873
|
+
SelectionIndicator,
|
|
1874
|
+
{
|
|
1875
|
+
id,
|
|
1876
|
+
"aria-labelledby": label,
|
|
1877
|
+
inputType,
|
|
1878
|
+
selected: !!selected
|
|
1879
|
+
}
|
|
1880
|
+
) }),
|
|
1881
|
+
/* @__PURE__ */ jsx2(MenuItemText, { id: label, children })
|
|
1882
|
+
] }),
|
|
1883
|
+
...props
|
|
1884
|
+
} : {};
|
|
1885
|
+
};
|
|
1886
|
+
|
|
1887
|
+
// src/MenuItem/MenuItem.tsx
|
|
1888
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
1889
|
+
var MenuItem = ({
|
|
1890
|
+
id,
|
|
1891
|
+
children,
|
|
1892
|
+
onClick,
|
|
1893
|
+
onKeyDown,
|
|
1894
|
+
disabled: disabled2 = false,
|
|
1895
|
+
ref,
|
|
1896
|
+
href,
|
|
1897
|
+
color: color2,
|
|
1898
|
+
...props
|
|
1899
|
+
}) => {
|
|
1900
|
+
const { getItemProps, itemsMap, highlightedIndex, isListbox } = useContext3(MenuContext);
|
|
1901
|
+
const { ...optionProps } = useOptionProps({
|
|
1902
|
+
id,
|
|
1903
|
+
children,
|
|
1904
|
+
...props
|
|
1905
|
+
});
|
|
1906
|
+
const item = itemsMap[id] || { index: 0, id };
|
|
1907
|
+
const highlighted = highlightedIndex === item?.index;
|
|
1908
|
+
return /* @__PURE__ */ jsx3(MenuItemContainer, { role: "none", children: /* @__PURE__ */ jsx3(
|
|
1909
|
+
StyledMenuItem,
|
|
1909
1910
|
{
|
|
1910
|
-
active: selected,
|
|
1911
1911
|
id,
|
|
1912
|
-
|
|
1913
|
-
...
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1912
|
+
$highlighted: highlighted,
|
|
1913
|
+
...getItemProps?.({
|
|
1914
|
+
...isListbox ? {} : { role: "menuitem" },
|
|
1915
|
+
item,
|
|
1916
|
+
index: item.index,
|
|
1917
|
+
// This prop no longer supported in downshift
|
|
1918
|
+
// disabled,
|
|
1919
|
+
onClick,
|
|
1920
|
+
onKeyDown
|
|
1921
|
+
}),
|
|
1922
|
+
as: isListbox ? void 0 : href ? "a" : "button",
|
|
1923
|
+
href,
|
|
1924
|
+
children,
|
|
1925
|
+
...optionProps,
|
|
1926
|
+
...props
|
|
1926
1927
|
}
|
|
1927
|
-
);
|
|
1928
|
+
) });
|
|
1928
1929
|
};
|
|
1929
1930
|
|
|
1930
|
-
// src/
|
|
1931
|
+
// src/MenuItem/MenuItemTypes.ts
|
|
1931
1932
|
var INPUT_TYPES = {
|
|
1932
1933
|
CHECKBOX: "checkbox",
|
|
1933
1934
|
RADIO: "radio",
|
|
@@ -1939,8 +1940,8 @@ var INPUT_TYPES = {
|
|
|
1939
1940
|
import "react";
|
|
1940
1941
|
|
|
1941
1942
|
// src/MenuHeader/styles.tsx
|
|
1942
|
-
import
|
|
1943
|
-
var MenuHeaderContainer =
|
|
1943
|
+
import styled2 from "styled-components";
|
|
1944
|
+
var MenuHeaderContainer = styled2.div`
|
|
1944
1945
|
border-color: ${({ theme: theme2 }) => theme2.colors.container.border.base};
|
|
1945
1946
|
border-bottom-width: 1px;
|
|
1946
1947
|
border-bottom-style: solid;
|
|
@@ -1948,26 +1949,9 @@ var MenuHeaderContainer = styled3.div`
|
|
|
1948
1949
|
width: 100%;
|
|
1949
1950
|
font-size: ${({ theme: theme2 }) => theme2.typography[200].fontSize};
|
|
1950
1951
|
display: flex;
|
|
1952
|
+
flex-direction: column;
|
|
1951
1953
|
padding: ${({ theme: theme2 }) => theme2.space[350]} ${({ theme: theme2 }) => theme2.space[400]};
|
|
1952
1954
|
|
|
1953
|
-
> a {
|
|
1954
|
-
white-space: nowrap;
|
|
1955
|
-
}
|
|
1956
|
-
|
|
1957
|
-
&:first-child {
|
|
1958
|
-
flex-grow: 1;
|
|
1959
|
-
justify-self: start;
|
|
1960
|
-
}
|
|
1961
|
-
|
|
1962
|
-
&:last-child {
|
|
1963
|
-
flex-grow: 1;
|
|
1964
|
-
justify-self: end;
|
|
1965
|
-
}
|
|
1966
|
-
|
|
1967
|
-
${({ $leftAction, theme: theme2 }) => $leftAction && `
|
|
1968
|
-
padding-left: ${theme2.space[350]};
|
|
1969
|
-
`}
|
|
1970
|
-
|
|
1971
1955
|
${border}
|
|
1972
1956
|
${color}
|
|
1973
1957
|
${flexbox}
|
|
@@ -1976,23 +1960,40 @@ var MenuHeaderContainer = styled3.div`
|
|
|
1976
1960
|
${space}
|
|
1977
1961
|
${position}
|
|
1978
1962
|
`;
|
|
1979
|
-
var MenuTitleText =
|
|
1963
|
+
var MenuTitleText = styled2.h3`
|
|
1980
1964
|
color: ${({ theme: theme2 }) => theme2.colors.text.headline};
|
|
1981
1965
|
font-weight: ${({ theme: theme2 }) => theme2.fontWeights.bold};
|
|
1982
1966
|
margin: 0px;
|
|
1983
1967
|
flex-grow: 2;
|
|
1984
1968
|
justify-self: start;
|
|
1985
1969
|
|
|
1970
|
+
${({ theme: theme2 }) => theme2.typography[200]}
|
|
1971
|
+
|
|
1986
1972
|
${({ $leftAction, theme: theme2 }) => $leftAction && `
|
|
1987
1973
|
padding-left: ${theme2.space[350]};
|
|
1988
1974
|
`}
|
|
1989
|
-
|
|
1990
|
-
${({ theme: theme2 }) => theme2.typography[200]}
|
|
1991
1975
|
`;
|
|
1992
|
-
var MenuChildrenContainer =
|
|
1976
|
+
var MenuChildrenContainer = styled2.div`
|
|
1993
1977
|
grid-column: 1 / -1;
|
|
1994
1978
|
margin-top: ${({ theme: theme2 }) => theme2.space[300]};
|
|
1995
1979
|
`;
|
|
1980
|
+
var MenuHeaderFeatures = styled2.div`
|
|
1981
|
+
display: flex;
|
|
1982
|
+
|
|
1983
|
+
> a {
|
|
1984
|
+
white-space: nowrap;
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
&:first-child {
|
|
1988
|
+
flex-grow: 1;
|
|
1989
|
+
justify-self: start;
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
&:last-child {
|
|
1993
|
+
flex-grow: 1;
|
|
1994
|
+
justify-self: end;
|
|
1995
|
+
}
|
|
1996
|
+
`;
|
|
1996
1997
|
|
|
1997
1998
|
// src/MenuHeader/MenuHeader.tsx
|
|
1998
1999
|
import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
@@ -2004,21 +2005,21 @@ var MenuHeader = ({
|
|
|
2004
2005
|
...rest
|
|
2005
2006
|
}) => {
|
|
2006
2007
|
return /* @__PURE__ */ jsx4(Fragment, { children: /* @__PURE__ */ jsxs2(MenuHeaderContainer, { $leftAction: !!leftAction, ...rest, children: [
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2008
|
+
/* @__PURE__ */ jsxs2(MenuHeaderFeatures, { $leftAction: !!leftAction, children: [
|
|
2009
|
+
leftAction && leftAction,
|
|
2010
|
+
title && /* @__PURE__ */ jsx4(MenuTitleText, { $leftAction: !!leftAction, children: title }),
|
|
2011
|
+
rightAction && rightAction
|
|
2012
|
+
] }),
|
|
2010
2013
|
children && /* @__PURE__ */ jsx4(MenuChildrenContainer, { children })
|
|
2011
2014
|
] }) });
|
|
2012
2015
|
};
|
|
2013
2016
|
|
|
2014
2017
|
// src/MenuContent/styles.tsx
|
|
2015
|
-
import
|
|
2016
|
-
|
|
2018
|
+
import styled3 from "styled-components";
|
|
2019
|
+
import { motion } from "motion/react";
|
|
2020
|
+
var StyledMenuContent = styled3(motion.ul)`
|
|
2017
2021
|
margin: 0;
|
|
2018
|
-
padding:
|
|
2019
|
-
&:focus {
|
|
2020
|
-
${focusRing}
|
|
2021
|
-
}
|
|
2022
|
+
padding: 0;
|
|
2022
2023
|
`;
|
|
2023
2024
|
|
|
2024
2025
|
// src/MenuContent/MenuContent.tsx
|
|
@@ -2028,7 +2029,7 @@ var MenuContent = ({
|
|
|
2028
2029
|
children,
|
|
2029
2030
|
...rest
|
|
2030
2031
|
}) => {
|
|
2031
|
-
const { getToggleButtonProps } = useMenuContext();
|
|
2032
|
+
const { getToggleButtonProps, getMenuProps, isListbox } = useMenuContext();
|
|
2032
2033
|
return /* @__PURE__ */ jsx5(
|
|
2033
2034
|
StyledMenuContent,
|
|
2034
2035
|
{
|
|
@@ -2037,6 +2038,13 @@ var MenuContent = ({
|
|
|
2037
2038
|
tabIndex: 0,
|
|
2038
2039
|
onKeyDown: getToggleButtonProps?.().onKeyDown,
|
|
2039
2040
|
"aria-activedescendant": getToggleButtonProps?.()["aria-activedescendant"],
|
|
2041
|
+
...getMenuProps?.(
|
|
2042
|
+
{
|
|
2043
|
+
...isListbox ? {} : { role: "menu" }
|
|
2044
|
+
},
|
|
2045
|
+
// Suppress ref error for now
|
|
2046
|
+
{ suppressRefError: true }
|
|
2047
|
+
),
|
|
2040
2048
|
...rest,
|
|
2041
2049
|
children
|
|
2042
2050
|
}
|
|
@@ -2047,10 +2055,10 @@ var MenuContent = ({
|
|
|
2047
2055
|
import "react";
|
|
2048
2056
|
|
|
2049
2057
|
// src/MenuFooter/styles.tsx
|
|
2050
|
-
import
|
|
2058
|
+
import styled4 from "styled-components";
|
|
2051
2059
|
import { Box as Box2 } from "@sproutsocial/seeds-react-box";
|
|
2052
|
-
var StyledMenuFooterBox =
|
|
2053
|
-
padding: ${(p) => p.theme.space[
|
|
2060
|
+
var StyledMenuFooterBox = styled4(Box2)`
|
|
2061
|
+
padding: ${(p) => p.theme.space[400]};
|
|
2054
2062
|
border-top: 1px solid ${(p) => p.theme.colors.container.border.base};
|
|
2055
2063
|
`;
|
|
2056
2064
|
|
|
@@ -2064,12 +2072,12 @@ var MenuFooter = ({ children, ...rest }) => {
|
|
|
2064
2072
|
import "react";
|
|
2065
2073
|
|
|
2066
2074
|
// src/MenuGroup/styles.tsx
|
|
2067
|
-
import
|
|
2075
|
+
import styled6 from "styled-components";
|
|
2068
2076
|
|
|
2069
2077
|
// ../seeds-react-text/dist/esm/index.js
|
|
2070
2078
|
import "react";
|
|
2071
2079
|
import styled22 from "styled-components";
|
|
2072
|
-
import
|
|
2080
|
+
import styled5, { css as css5 } from "styled-components";
|
|
2073
2081
|
import {
|
|
2074
2082
|
COMMON,
|
|
2075
2083
|
LAYOUT,
|
|
@@ -2079,7 +2087,7 @@ import {
|
|
|
2079
2087
|
} from "@sproutsocial/seeds-react-system-props";
|
|
2080
2088
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
2081
2089
|
import "react";
|
|
2082
|
-
var Container =
|
|
2090
|
+
var Container = styled5.span`
|
|
2083
2091
|
margin: 0;
|
|
2084
2092
|
padding-left: 0;
|
|
2085
2093
|
padding-right: 0;
|
|
@@ -2170,13 +2178,14 @@ var Text_default = Text;
|
|
|
2170
2178
|
var src_default = Text_default;
|
|
2171
2179
|
|
|
2172
2180
|
// src/MenuGroup/styles.tsx
|
|
2173
|
-
var StyledMenuGroup =
|
|
2181
|
+
var StyledMenuGroup = styled6.li`
|
|
2174
2182
|
&:not(:last-child) {
|
|
2175
2183
|
border-bottom: 1px solid
|
|
2176
2184
|
${({ theme: theme2 }) => theme2.colors.container.border.base};
|
|
2177
2185
|
}
|
|
2178
2186
|
list-style: none;
|
|
2179
2187
|
margin: 0;
|
|
2188
|
+
|
|
2180
2189
|
${border}
|
|
2181
2190
|
${position}
|
|
2182
2191
|
${color}
|
|
@@ -2185,13 +2194,13 @@ var StyledMenuGroup = styled7.li`
|
|
|
2185
2194
|
${layout}
|
|
2186
2195
|
${space}
|
|
2187
2196
|
`;
|
|
2188
|
-
var StyledTitle =
|
|
2189
|
-
margin: ${({ theme: theme2 }) => theme2.space[
|
|
2190
|
-
|
|
2197
|
+
var StyledTitle = styled6(src_default.SmallSubHeadline)`
|
|
2198
|
+
margin: ${({ theme: theme2 }) => theme2.space[400]} ${({ theme: theme2 }) => theme2.space[400]}
|
|
2199
|
+
0px ${({ theme: theme2 }) => theme2.space[400]};
|
|
2191
2200
|
`;
|
|
2192
|
-
var StyledMenuGroupUl =
|
|
2201
|
+
var StyledMenuGroupUl = styled6.ul`
|
|
2193
2202
|
margin: 0;
|
|
2194
|
-
padding:
|
|
2203
|
+
padding: 0;
|
|
2195
2204
|
`;
|
|
2196
2205
|
|
|
2197
2206
|
// src/MenuGroup/MenuGroup.tsx
|
|
@@ -2212,7 +2221,7 @@ var MenuGroup = ({
|
|
|
2212
2221
|
color: color2,
|
|
2213
2222
|
...rest,
|
|
2214
2223
|
children: [
|
|
2215
|
-
title && /* @__PURE__ */ jsx8(StyledTitle, { as: titleAs, id: titleId, children: title }),
|
|
2224
|
+
title && /* @__PURE__ */ jsx8(StyledTitle, { role: "heading", as: titleAs, id: titleId, children: title }),
|
|
2216
2225
|
/* @__PURE__ */ jsx8(StyledMenuGroupUl, { children })
|
|
2217
2226
|
]
|
|
2218
2227
|
}
|
|
@@ -2221,22 +2230,22 @@ var MenuGroup = ({
|
|
|
2221
2230
|
|
|
2222
2231
|
// src/MenuRoot/MenuRoot.tsx
|
|
2223
2232
|
import { useCallback } from "react";
|
|
2224
|
-
import
|
|
2233
|
+
import styled7 from "styled-components";
|
|
2225
2234
|
import { Popout } from "@sproutsocial/seeds-react-popout";
|
|
2226
2235
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
2227
|
-
var CustomPopoutContent =
|
|
2236
|
+
var CustomPopoutContent = styled7(Popout.Content)`
|
|
2228
2237
|
padding: 0;
|
|
2229
2238
|
margin-left: 0;
|
|
2230
2239
|
margin-right: 0;
|
|
2231
2240
|
`;
|
|
2232
2241
|
var MenuRoot = ({
|
|
2233
2242
|
children,
|
|
2234
|
-
|
|
2243
|
+
menuToggleElement,
|
|
2235
2244
|
popoutProps,
|
|
2236
2245
|
width: width2 = "300px",
|
|
2237
2246
|
...contextProps
|
|
2238
2247
|
}) => {
|
|
2239
|
-
const {
|
|
2248
|
+
const { isOpen, openMenu, closeMenu } = contextProps;
|
|
2240
2249
|
const setIsOpen = useCallback(
|
|
2241
2250
|
(newIsOpen) => {
|
|
2242
2251
|
newIsOpen ? openMenu?.() : closeMenu?.();
|
|
@@ -2248,19 +2257,7 @@ var MenuRoot = ({
|
|
|
2248
2257
|
{
|
|
2249
2258
|
isOpen: !!isOpen,
|
|
2250
2259
|
setIsOpen,
|
|
2251
|
-
content: /* @__PURE__ */ jsx9(CustomPopoutContent, { width: width2, children
|
|
2252
|
-
"div",
|
|
2253
|
-
{
|
|
2254
|
-
...getMenuProps?.(
|
|
2255
|
-
{
|
|
2256
|
-
...isListbox ? {} : { role: "menu" }
|
|
2257
|
-
},
|
|
2258
|
-
// Suppress ref error for now
|
|
2259
|
-
{ suppressRefError: true }
|
|
2260
|
-
),
|
|
2261
|
-
children
|
|
2262
|
-
}
|
|
2263
|
-
) }),
|
|
2260
|
+
content: /* @__PURE__ */ jsx9(CustomPopoutContent, { width: width2, children }),
|
|
2264
2261
|
focusLockProps: {
|
|
2265
2262
|
// correct jerking motion when scrolling while the Popout is open
|
|
2266
2263
|
// returnFocus: false,
|
|
@@ -2268,7 +2265,7 @@ var MenuRoot = ({
|
|
|
2268
2265
|
},
|
|
2269
2266
|
disableWrapperAria: true,
|
|
2270
2267
|
...popoutProps,
|
|
2271
|
-
children:
|
|
2268
|
+
children: menuToggleElement
|
|
2272
2269
|
}
|
|
2273
2270
|
) });
|
|
2274
2271
|
};
|
|
@@ -2307,7 +2304,7 @@ var MenuToggleButton = ({
|
|
|
2307
2304
|
};
|
|
2308
2305
|
|
|
2309
2306
|
// src/ActionMenu/ActionMenu.tsx
|
|
2310
|
-
import "react";
|
|
2307
|
+
import React11, { useEffect } from "react";
|
|
2311
2308
|
import {
|
|
2312
2309
|
useSelect as useSelect2
|
|
2313
2310
|
} from "downshift";
|
|
@@ -2336,7 +2333,7 @@ var checkIfIsElement = (element, name) => {
|
|
|
2336
2333
|
var getAllMenuItems = (children) => {
|
|
2337
2334
|
const allMenuItems = [];
|
|
2338
2335
|
walkAllChildren(children, (element, parents) => {
|
|
2339
|
-
if (checkIfIsElement(element, "MenuItem")
|
|
2336
|
+
if (checkIfIsElement(element, "MenuItem")) {
|
|
2340
2337
|
allMenuItems.push({
|
|
2341
2338
|
element,
|
|
2342
2339
|
parents
|
|
@@ -2396,37 +2393,50 @@ var itemToString = (item) => {
|
|
|
2396
2393
|
|
|
2397
2394
|
// src/ActionMenu/ActionMenu.tsx
|
|
2398
2395
|
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
2396
|
+
var handleStateChange = (changes, currentSelectedItem) => {
|
|
2397
|
+
if (!(changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownEnter || changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownSpaceButton)) {
|
|
2398
|
+
return;
|
|
2399
|
+
}
|
|
2400
|
+
const selectedItem = changes.selectedItem || currentSelectedItem;
|
|
2401
|
+
if (!selectedItem)
|
|
2402
|
+
return;
|
|
2403
|
+
if (selectedItem.element?.props?.disabled) {
|
|
2404
|
+
return;
|
|
2405
|
+
}
|
|
2406
|
+
const isEnterKeyDown = changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownEnter;
|
|
2407
|
+
const selectedItemProps = selectedItem.element?.props;
|
|
2408
|
+
if (selectedItemProps?.onClick) {
|
|
2409
|
+
const syntheticKeyboardEvent = new KeyboardEvent("keydown", {
|
|
2410
|
+
key: isEnterKeyDown ? "Enter" : " ",
|
|
2411
|
+
code: isEnterKeyDown ? "Enter" : "Space",
|
|
2412
|
+
bubbles: true,
|
|
2413
|
+
cancelable: true,
|
|
2414
|
+
view: window
|
|
2415
|
+
});
|
|
2416
|
+
selectedItemProps?.onClick?.(
|
|
2417
|
+
syntheticKeyboardEvent
|
|
2418
|
+
);
|
|
2419
|
+
}
|
|
2420
|
+
if (selectedItemProps?.href) {
|
|
2421
|
+
if (selectedItemProps.target) {
|
|
2422
|
+
window.open(selectedItemProps.href, selectedItemProps.target);
|
|
2423
|
+
} else {
|
|
2424
|
+
window.location.href = selectedItemProps?.href;
|
|
2425
|
+
}
|
|
2426
|
+
}
|
|
2427
|
+
};
|
|
2399
2428
|
var ActionMenu = ({
|
|
2400
2429
|
children,
|
|
2401
2430
|
stateReducer: externalStateReducer,
|
|
2402
2431
|
...useSelectProps
|
|
2403
2432
|
}) => {
|
|
2404
2433
|
const { allMenuItems, menuItemsMap } = useItemsFromChildren({ children });
|
|
2405
|
-
const
|
|
2406
|
-
const { selectedItem } = changes;
|
|
2407
|
-
if (selectedItem.element?.props?.disabled) {
|
|
2408
|
-
return;
|
|
2409
|
-
}
|
|
2410
|
-
if (changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownEnter || changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownSpaceButton) {
|
|
2411
|
-
const isEnterKeyDown = changes.type === useSelect2.stateChangeTypes.ToggleButtonKeyDownEnter;
|
|
2412
|
-
const selectedItemProps = selectedItem.element?.props;
|
|
2413
|
-
const syntheticKeyboardEvent = new KeyboardEvent("keydown", {
|
|
2414
|
-
key: isEnterKeyDown ? "Enter" : " ",
|
|
2415
|
-
code: isEnterKeyDown ? "Enter" : "Space",
|
|
2416
|
-
bubbles: true,
|
|
2417
|
-
cancelable: true,
|
|
2418
|
-
view: window
|
|
2419
|
-
});
|
|
2420
|
-
selectedItemProps?.onClick?.(
|
|
2421
|
-
syntheticKeyboardEvent
|
|
2422
|
-
);
|
|
2423
|
-
}
|
|
2424
|
-
};
|
|
2434
|
+
const [currentSelectedItem, setCurrentSelectedItem] = React11.useState(null);
|
|
2425
2435
|
const { isOpen, ...useSelectReturnProps } = useSelect2({
|
|
2426
2436
|
...defaultUseSelectProps,
|
|
2427
2437
|
items: allMenuItems,
|
|
2428
2438
|
itemToString,
|
|
2429
|
-
|
|
2439
|
+
onStateChange: (changes) => handleStateChange(changes, currentSelectedItem),
|
|
2430
2440
|
stateReducer: (state, actionAndChanges) => {
|
|
2431
2441
|
let newState;
|
|
2432
2442
|
newState = useSelectStateReducer(state, actionAndChanges);
|
|
@@ -2437,6 +2447,9 @@ var ActionMenu = ({
|
|
|
2437
2447
|
},
|
|
2438
2448
|
...useSelectProps
|
|
2439
2449
|
});
|
|
2450
|
+
useEffect(() => {
|
|
2451
|
+
setCurrentSelectedItem(useSelectReturnProps.selectedItem);
|
|
2452
|
+
}, [useSelectReturnProps.selectedItem]);
|
|
2440
2453
|
return /* @__PURE__ */ jsx12(
|
|
2441
2454
|
MenuRoot,
|
|
2442
2455
|
{
|
|
@@ -2569,7 +2582,6 @@ var MultiSelectMenu = ({
|
|
|
2569
2582
|
case useSelect4.stateChangeTypes.ToggleButtonKeyDownEnter:
|
|
2570
2583
|
case useSelect4.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
|
|
2571
2584
|
case useSelect4.stateChangeTypes.ItemClick:
|
|
2572
|
-
case useSelect4.stateChangeTypes.ToggleButtonBlur:
|
|
2573
2585
|
if (!newSelectedItem)
|
|
2574
2586
|
break;
|
|
2575
2587
|
if (selectedItems?.find((item) => item?.id === newSelectedItem.id)) {
|
|
@@ -2618,20 +2630,19 @@ export {
|
|
|
2618
2630
|
MenuGroup,
|
|
2619
2631
|
MenuHeader,
|
|
2620
2632
|
MenuItem,
|
|
2633
|
+
MenuItemAction,
|
|
2621
2634
|
MenuItemContainer,
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
MenuItemSelectableRow,
|
|
2625
|
-
MenuItemSelectableText,
|
|
2635
|
+
MenuItemRow,
|
|
2636
|
+
MenuItemText,
|
|
2626
2637
|
MenuLabel,
|
|
2627
2638
|
MenuProvider,
|
|
2628
2639
|
MenuRoot,
|
|
2629
2640
|
MenuToggleButton,
|
|
2630
2641
|
MultiSelectMenu,
|
|
2631
|
-
SelectionIndicator,
|
|
2632
2642
|
SingleSelectMenu,
|
|
2633
2643
|
StyledMenuGroup,
|
|
2634
2644
|
StyledMenuGroupUl,
|
|
2645
|
+
StyledMenuItem,
|
|
2635
2646
|
StyledTitle,
|
|
2636
2647
|
defaultUseSelectProps,
|
|
2637
2648
|
useItemsFromChildren,
|