@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.
Files changed (54) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/CHANGELOG.md +17 -1
  3. package/dist/esm/index.js +209 -198
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/index.d.mts +103 -37
  6. package/dist/index.d.ts +103 -37
  7. package/dist/index.js +239 -229
  8. package/dist/index.js.map +1 -1
  9. package/package.json +6 -5
  10. package/src/ActionMenu/ActionMenu.feature +9 -3
  11. package/src/ActionMenu/ActionMenu.tsx +75 -42
  12. package/src/ActionMenu/__tests__/ActionMenu.test.tsx +36 -42
  13. package/src/ActionMenu/__tests__/ActionMenu.typetest.tsx +13 -13
  14. package/src/MenuContent/MenuContent.tsx +31 -1
  15. package/src/MenuContent/MenuContentTypes.ts +2 -2
  16. package/src/MenuContent/styles.tsx +10 -6
  17. package/src/MenuFooter/MenuFooter.feature +1 -1
  18. package/src/MenuFooter/MenuFooter.tsx +8 -0
  19. package/src/MenuFooter/__tests__/MenuFooter.test.tsx +53 -26
  20. package/src/MenuFooter/styles.tsx +1 -1
  21. package/src/MenuGroup/MenuGroup.feature +14 -26
  22. package/src/MenuGroup/MenuGroup.tsx +21 -1
  23. package/src/MenuGroup/__tests__/MenuGroup.test.tsx +40 -6
  24. package/src/MenuGroup/styles.tsx +4 -3
  25. package/src/MenuHeader/MenuHeader.tsx +16 -5
  26. package/src/MenuHeader/__tests__/MenuHeader.test.tsx +50 -6
  27. package/src/MenuHeader/styles.tsx +21 -22
  28. package/src/MenuItem/MenuItem.feature +66 -26
  29. package/src/MenuItem/MenuItem.tsx +35 -20
  30. package/src/MenuItem/MenuItemTypes.ts +13 -1
  31. package/src/MenuItem/__tests__/MenuItem.test.tsx +431 -154
  32. package/src/MenuItem/__tests__/MenuItem.typetest.tsx +57 -38
  33. package/src/MenuItem/styles.tsx +42 -3
  34. package/src/{MenuItemSelectable/MenuItemSelectable.tsx → MenuItem/useOptionProps.tsx} +31 -54
  35. package/src/MenuRoot/MenuRoot.tsx +12 -17
  36. package/src/MenuRoot/__tests__/MenuRoot.test.tsx +3 -3
  37. package/src/MenuRoot/__tests__/MenuRoot.typetest.tsx +10 -10
  38. package/src/MultiSelectMenu/MultiSelectMenu.tsx +8 -1
  39. package/src/MultiSelectMenu/__tests__/MultiSelectMenu.test.tsx +19 -19
  40. package/src/MultiSelectMenu/__tests__/MultiSelectMenu.typetest.tsx +10 -10
  41. package/src/SingleSelectMenu/SingleSelectMenu.feature +11 -0
  42. package/src/SingleSelectMenu/SingleSelectMenu.tsx +9 -0
  43. package/src/SingleSelectMenu/__tests__/SingleSelectMenu.test.tsx +11 -14
  44. package/src/SingleSelectMenu/__tests__/SingleSelectMenu.typetest.tsx +14 -14
  45. package/src/__tests__/Menu.test.tsx +20 -16
  46. package/src/hooks/useItemsFromChildren.tsx +1 -4
  47. package/src/index.ts +0 -1
  48. package/src/menuTestingUtils.tsx +7 -4
  49. package/src/MenuItemSelectable/MenuItemSelectable.feature +0 -99
  50. package/src/MenuItemSelectable/MenuItemSelectableTypes.ts +0 -15
  51. package/src/MenuItemSelectable/__tests__/MenuItemSelectable.test.tsx +0 -303
  52. package/src/MenuItemSelectable/__tests__/MenuItemSelectable.typetest.tsx +0 -56
  53. package/src/MenuItemSelectable/index.ts +0 -5
  54. 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 useContext2 } from "react";
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 MenuItemSelectableAction = styled2.div`
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 MenuItemSelectableText = styled2.div`
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/MenuItemSelectable/MenuItemSelectable.tsx
1836
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
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__ */ jsx3(
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: `MenuItemSelectable-${inputType}-${id}`
1822
+ id: `MenuItem-${inputType}-${id}`
1857
1823
  }
1858
1824
  );
1859
1825
  case "switch":
1860
- return /* @__PURE__ */ jsx3(
1826
+ return /* @__PURE__ */ jsx2(
1861
1827
  Switch,
1862
1828
  {
1863
1829
  onClick: inputStub,
1864
1830
  checked: !!selected,
1865
1831
  "aria-labelledby": labeledBy,
1866
- id: `MenuItemSelectable-${inputType}-${id}`
1832
+ id: `MenuItem-${inputType}-${id}`
1867
1833
  }
1868
1834
  );
1869
1835
  case "radio":
1870
- return /* @__PURE__ */ jsx3(
1836
+ return /* @__PURE__ */ jsx2(
1871
1837
  Radio,
1872
1838
  {
1873
1839
  checked: selected,
1874
- id: `MenuItemSelectable-${inputType}-${id}`,
1875
- name: `MenuItemSelectable-${inputType}`,
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__ */ jsx3(Icon, { name: "check-solid", "aria-hidden": true, size: "small" });
1847
+ return /* @__PURE__ */ jsx2(Icon, { name: "check-solid", "aria-hidden": true, size: "small" });
1882
1848
  } else {
1883
- return /* @__PURE__ */ jsx3(Box, { width: space2["400"] });
1849
+ return /* @__PURE__ */ jsx2(Box, { width: space2["400"] });
1884
1850
  }
1885
1851
  default:
1886
1852
  return null;
1887
1853
  }
1888
1854
  };
1889
- var MenuItemSelectable = ({
1855
+ var useOptionProps = ({
1890
1856
  id,
1891
1857
  children,
1892
1858
  inputType = "icon",
1893
- inputLabel,
1859
+ inputLabelId,
1894
1860
  ...props
1895
1861
  }) => {
1896
- const { selectedItem, selectedItems, isListbox } = useContext3(MenuContext);
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
- if (isListbox === false) {
1902
- console.warn(
1903
- "MenuItemSelectable is invalid when isListbox is false (Menu)"
1904
- );
1905
- }
1906
- const label = inputLabel || `menu-item-child-${id}`;
1907
- return /* @__PURE__ */ jsx3(
1908
- MenuItem,
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
- "aria-selected": selected,
1913
- ...props,
1914
- children: /* @__PURE__ */ jsxs(MenuItemSelectableRow, { children: [
1915
- /* @__PURE__ */ jsx3(MenuItemSelectableAction, { children: /* @__PURE__ */ jsx3(
1916
- SelectionIndicator,
1917
- {
1918
- id,
1919
- "aria-labelledby": label,
1920
- inputType,
1921
- selected: !!selected
1922
- }
1923
- ) }),
1924
- /* @__PURE__ */ jsx3(MenuItemSelectableText, { id: label, children })
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/MenuItemSelectable/MenuItemSelectableTypes.ts
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 styled3 from "styled-components";
1943
- var MenuHeaderContainer = styled3.div`
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 = styled3.h3`
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 = styled3.div`
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
- leftAction && leftAction,
2008
- title && /* @__PURE__ */ jsx4(MenuTitleText, { $leftAction: !!leftAction, children: title }),
2009
- rightAction && rightAction,
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 styled4 from "styled-components";
2016
- var StyledMenuContent = styled4.ul`
2018
+ import styled3 from "styled-components";
2019
+ import { motion } from "motion/react";
2020
+ var StyledMenuContent = styled3(motion.ul)`
2017
2021
  margin: 0;
2018
- padding: ${({ theme: theme2 }) => theme2.space[300]} 0;
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 styled5 from "styled-components";
2058
+ import styled4 from "styled-components";
2051
2059
  import { Box as Box2 } from "@sproutsocial/seeds-react-box";
2052
- var StyledMenuFooterBox = styled5(Box2)`
2053
- padding: ${(p) => p.theme.space[350]};
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 styled7 from "styled-components";
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 styled6, { css as css5 } from "styled-components";
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 = styled6.span`
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 = styled7.li`
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 = styled7(src_default.SmallSubHeadline)`
2189
- margin: ${({ theme: theme2 }) => theme2.space[200]} 0px
2190
- ${({ theme: theme2 }) => theme2.space[300]} ${({ theme: theme2 }) => theme2.space[300]};
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 = styled7.ul`
2201
+ var StyledMenuGroupUl = styled6.ul`
2193
2202
  margin: 0;
2194
- padding: ${({ theme: theme2 }) => theme2.space[300]};
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 styled8 from "styled-components";
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 = styled8(Popout.Content)`
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
- triggerElement,
2243
+ menuToggleElement,
2235
2244
  popoutProps,
2236
2245
  width: width2 = "300px",
2237
2246
  ...contextProps
2238
2247
  }) => {
2239
- const { isListbox, isOpen, openMenu, closeMenu, getMenuProps } = contextProps;
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: /* @__PURE__ */ jsx9(
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: triggerElement
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") || checkIfIsElement(element, "MenuItemSelectable")) {
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 handleStateChange = (changes) => {
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
- onSelectedItemChange: handleStateChange,
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
- MenuItemSelectable,
2623
- MenuItemSelectableAction,
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,