@salt-ds/lab 1.0.0-alpha.95 → 1.0.0-alpha.96

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 (153) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/css/salt-lab.css +70 -49
  3. package/dist-cjs/index.js +12 -8
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/mega-menu/MegaMenu.js +8 -14
  6. package/dist-cjs/mega-menu/MegaMenu.js.map +1 -1
  7. package/dist-cjs/mega-menu/MegaMenuActions.css.js +6 -0
  8. package/dist-cjs/mega-menu/MegaMenuActions.css.js.map +1 -0
  9. package/dist-cjs/mega-menu/MegaMenuActions.js +33 -0
  10. package/dist-cjs/mega-menu/MegaMenuActions.js.map +1 -0
  11. package/dist-cjs/mega-menu/MegaMenuAside.css.js +6 -0
  12. package/dist-cjs/mega-menu/MegaMenuAside.css.js.map +1 -0
  13. package/dist-cjs/mega-menu/MegaMenuAside.js +33 -0
  14. package/dist-cjs/mega-menu/MegaMenuAside.js.map +1 -0
  15. package/dist-cjs/mega-menu/MegaMenuContent.css.js +6 -0
  16. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +1 -0
  17. package/dist-cjs/mega-menu/MegaMenuContent.js +25 -0
  18. package/dist-cjs/mega-menu/MegaMenuContent.js.map +1 -0
  19. package/dist-cjs/mega-menu/MegaMenuContext.js.map +1 -1
  20. package/dist-cjs/mega-menu/MegaMenuGroup.css.js +1 -1
  21. package/dist-cjs/mega-menu/MegaMenuGroup.js +10 -25
  22. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
  23. package/dist-cjs/mega-menu/MegaMenuGroupContext.js +17 -0
  24. package/dist-cjs/mega-menu/MegaMenuGroupContext.js.map +1 -0
  25. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +6 -0
  26. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
  27. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js +39 -0
  28. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js.map +1 -0
  29. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +1 -1
  30. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -1
  31. package/dist-cjs/mega-menu/MegaMenuList.css.js +6 -0
  32. package/dist-cjs/mega-menu/MegaMenuList.css.js.map +1 -0
  33. package/dist-cjs/mega-menu/MegaMenuList.js +43 -0
  34. package/dist-cjs/mega-menu/MegaMenuList.js.map +1 -0
  35. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +6 -0
  36. package/dist-cjs/mega-menu/MegaMenuListItem.css.js.map +1 -0
  37. package/dist-cjs/mega-menu/MegaMenuListItem.js +45 -0
  38. package/dist-cjs/mega-menu/MegaMenuListItem.js.map +1 -0
  39. package/dist-cjs/mega-menu/MegaMenuPanel.css.js +1 -1
  40. package/dist-cjs/mega-menu/MegaMenuPanel.js +27 -47
  41. package/dist-cjs/mega-menu/MegaMenuPanel.js.map +1 -1
  42. package/dist-cjs/mega-menu/MegaMenuTrigger.js +16 -18
  43. package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +1 -1
  44. package/dist-cjs/mega-menu/useMegaMenuNavigation.js +282 -0
  45. package/dist-cjs/mega-menu/useMegaMenuNavigation.js.map +1 -0
  46. package/dist-cjs/mega-menu/usePageMargin.js +22 -0
  47. package/dist-cjs/mega-menu/usePageMargin.js.map +1 -0
  48. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +9 -7
  49. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -1
  50. package/dist-es/index.js +6 -4
  51. package/dist-es/index.js.map +1 -1
  52. package/dist-es/mega-menu/MegaMenu.js +9 -15
  53. package/dist-es/mega-menu/MegaMenu.js.map +1 -1
  54. package/dist-es/mega-menu/MegaMenuActions.css.js +4 -0
  55. package/dist-es/mega-menu/MegaMenuActions.css.js.map +1 -0
  56. package/dist-es/mega-menu/MegaMenuActions.js +31 -0
  57. package/dist-es/mega-menu/MegaMenuActions.js.map +1 -0
  58. package/dist-es/mega-menu/MegaMenuAside.css.js +4 -0
  59. package/dist-es/mega-menu/MegaMenuAside.css.js.map +1 -0
  60. package/dist-es/mega-menu/MegaMenuAside.js +31 -0
  61. package/dist-es/mega-menu/MegaMenuAside.js.map +1 -0
  62. package/dist-es/mega-menu/MegaMenuContent.css.js +4 -0
  63. package/dist-es/mega-menu/MegaMenuContent.css.js.map +1 -0
  64. package/dist-es/mega-menu/{MegaMenuHeader.js → MegaMenuContent.js} +8 -8
  65. package/dist-es/mega-menu/MegaMenuContent.js.map +1 -0
  66. package/dist-es/mega-menu/MegaMenuContext.js.map +1 -1
  67. package/dist-es/mega-menu/MegaMenuGroup.css.js +1 -1
  68. package/dist-es/mega-menu/MegaMenuGroup.js +13 -28
  69. package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
  70. package/dist-es/mega-menu/MegaMenuGroupContext.js +14 -0
  71. package/dist-es/mega-menu/MegaMenuGroupContext.js.map +1 -0
  72. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +4 -0
  73. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
  74. package/dist-es/mega-menu/MegaMenuGroupHeading.js +37 -0
  75. package/dist-es/mega-menu/MegaMenuGroupHeading.js.map +1 -0
  76. package/dist-es/mega-menu/MegaMenuGroups.css.js +1 -1
  77. package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -1
  78. package/dist-es/mega-menu/MegaMenuList.css.js +4 -0
  79. package/dist-es/mega-menu/MegaMenuList.css.js.map +1 -0
  80. package/dist-es/mega-menu/MegaMenuList.js +41 -0
  81. package/dist-es/mega-menu/MegaMenuList.js.map +1 -0
  82. package/dist-es/mega-menu/MegaMenuListItem.css.js +4 -0
  83. package/dist-es/mega-menu/MegaMenuListItem.css.js.map +1 -0
  84. package/dist-es/mega-menu/MegaMenuListItem.js +43 -0
  85. package/dist-es/mega-menu/MegaMenuListItem.js.map +1 -0
  86. package/dist-es/mega-menu/MegaMenuPanel.css.js +1 -1
  87. package/dist-es/mega-menu/MegaMenuPanel.js +30 -50
  88. package/dist-es/mega-menu/MegaMenuPanel.js.map +1 -1
  89. package/dist-es/mega-menu/MegaMenuTrigger.js +14 -16
  90. package/dist-es/mega-menu/MegaMenuTrigger.js.map +1 -1
  91. package/dist-es/mega-menu/useMegaMenuNavigation.js +278 -0
  92. package/dist-es/mega-menu/useMegaMenuNavigation.js.map +1 -0
  93. package/dist-es/mega-menu/usePageMargin.js +20 -0
  94. package/dist-es/mega-menu/usePageMargin.js.map +1 -0
  95. package/dist-es/toolbar-next/useToolbarNextOverflow.js +9 -7
  96. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -1
  97. package/dist-types/mega-menu/MegaMenu.d.ts +11 -2
  98. package/dist-types/mega-menu/MegaMenuActions.d.ts +10 -0
  99. package/dist-types/mega-menu/MegaMenuAside.d.ts +9 -0
  100. package/dist-types/mega-menu/MegaMenuContent.d.ts +9 -0
  101. package/dist-types/mega-menu/MegaMenuContext.d.ts +6 -7
  102. package/dist-types/mega-menu/MegaMenuGroup.d.ts +4 -3
  103. package/dist-types/mega-menu/MegaMenuGroupContext.d.ts +12 -0
  104. package/dist-types/mega-menu/MegaMenuGroupHeading.d.ts +13 -0
  105. package/dist-types/mega-menu/MegaMenuGroups.d.ts +3 -3
  106. package/dist-types/mega-menu/MegaMenuList.d.ts +16 -0
  107. package/dist-types/mega-menu/MegaMenuListItem.d.ts +25 -0
  108. package/dist-types/mega-menu/MegaMenuPanel.d.ts +2 -2
  109. package/dist-types/mega-menu/MegaMenuTrigger.d.ts +1 -0
  110. package/dist-types/mega-menu/index.d.ts +6 -4
  111. package/dist-types/mega-menu/useMegaMenuNavigation.d.ts +16 -0
  112. package/dist-types/mega-menu/usePageMargin.d.ts +6 -0
  113. package/package.json +2 -2
  114. package/dist-cjs/mega-menu/MegaMenuHeader.css.js +0 -6
  115. package/dist-cjs/mega-menu/MegaMenuHeader.css.js.map +0 -1
  116. package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -25
  117. package/dist-cjs/mega-menu/MegaMenuHeader.js.map +0 -1
  118. package/dist-cjs/mega-menu/MegaMenuItem.css.js +0 -6
  119. package/dist-cjs/mega-menu/MegaMenuItem.css.js.map +0 -1
  120. package/dist-cjs/mega-menu/MegaMenuItem.js +0 -53
  121. package/dist-cjs/mega-menu/MegaMenuItem.js.map +0 -1
  122. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js +0 -6
  123. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js.map +0 -1
  124. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js +0 -31
  125. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js.map +0 -1
  126. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js +0 -6
  127. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js.map +0 -1
  128. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js +0 -31
  129. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js.map +0 -1
  130. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +0 -209
  131. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +0 -1
  132. package/dist-es/mega-menu/MegaMenuHeader.css.js +0 -4
  133. package/dist-es/mega-menu/MegaMenuHeader.css.js.map +0 -1
  134. package/dist-es/mega-menu/MegaMenuHeader.js.map +0 -1
  135. package/dist-es/mega-menu/MegaMenuItem.css.js +0 -4
  136. package/dist-es/mega-menu/MegaMenuItem.css.js.map +0 -1
  137. package/dist-es/mega-menu/MegaMenuItem.js +0 -51
  138. package/dist-es/mega-menu/MegaMenuItem.js.map +0 -1
  139. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js +0 -4
  140. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js.map +0 -1
  141. package/dist-es/mega-menu/MegaMenuSupportingActions.js +0 -29
  142. package/dist-es/mega-menu/MegaMenuSupportingActions.js.map +0 -1
  143. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js +0 -4
  144. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js.map +0 -1
  145. package/dist-es/mega-menu/MegaMenuSupportingContent.js +0 -29
  146. package/dist-es/mega-menu/MegaMenuSupportingContent.js.map +0 -1
  147. package/dist-es/mega-menu/useMegaMenuKeyboard.js +0 -205
  148. package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +0 -1
  149. package/dist-types/mega-menu/MegaMenuHeader.d.ts +0 -8
  150. package/dist-types/mega-menu/MegaMenuItem.d.ts +0 -13
  151. package/dist-types/mega-menu/MegaMenuSupportingActions.d.ts +0 -8
  152. package/dist-types/mega-menu/MegaMenuSupportingContent.d.ts +0 -8
  153. package/dist-types/mega-menu/useMegaMenuKeyboard.d.ts +0 -30
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @salt-ds/lab
2
2
 
3
+ ## 1.0.0-alpha.96
4
+
5
+ ### Minor Changes
6
+
7
+ - 248982a: Reworked `MegaMenu` for more semantic, accessible markup and more predictable
8
+ keyboard navigation.
9
+
10
+ - **Renamed `MegaMenuHeader` to `MegaMenuGroupHeading`.** It now renders a real heading (`<h3>` by default; set the level with `as`, e.g. `as="h2"`) instead of a `<div>`, so each group appears in the document outline for assistive technology.
11
+ - **Renamed `MegaMenuItem` to `MegaMenuListItem`.** It renders an `<a>` by default — pass a `render` element such as `react-router`'s `Link` — and accepts a `current` prop that sets `aria-current="page"` for the active page.
12
+ - **Added `MegaMenuList`.** Wrap a group's items in it so they are announced as a list; `MegaMenuListItem` can no longer be placed directly inside `MegaMenuGroup`.
13
+ - **Renamed `MegaMenuSupportingContent` to `MegaMenuAside`.** It now renders an `<aside>` landmark, making the supporting region discoverable to screen-reader users.
14
+ - **Renamed `MegaMenuSupportingActions` to `MegaMenuActions`.**
15
+ - **Added `MegaMenuContent`.** It is the center navigation region holding the groups and an optional `MegaMenuActions` band; `MegaMenuAside` sits beside it, positioned by source order.
16
+ - **Narrowed `MegaMenu`'s `placement` prop** to `"bottom" | "bottom-start" | "bottom-end"` (the new `MegaMenuPlacement` type).
17
+ - **Menu columns now adapt to the available width** instead of overflowing, keeping panels usable on narrower viewports.
18
+ - **Keyboard navigation is more predictable** between the columns, the actions row, and the trigger;
19
+
20
+ ```diff
21
+ <MegaMenuPanel aria-label="Solutions menu">
22
+ + <MegaMenuContent>
23
+ <MegaMenuGroups>
24
+ <MegaMenuGroup>
25
+ - <MegaMenuHeader>Financial services</MegaMenuHeader>
26
+ - <MegaMenuItem render={<Link to="/digital-banking" />}>Digital banking</MegaMenuItem>
27
+ + <MegaMenuGroupHeading>Financial services</MegaMenuGroupHeading>
28
+ + <MegaMenuList>
29
+ + <MegaMenuListItem render={<Link to="/digital-banking" />}>Digital banking</MegaMenuListItem>
30
+ + </MegaMenuList>
31
+ </MegaMenuGroup>
32
+ </MegaMenuGroups>
33
+ - <MegaMenuSupportingActions>
34
+ + <MegaMenuActions>
35
+ <Link href="#demo">Book a demo</Link>
36
+ - </MegaMenuSupportingActions>
37
+ + </MegaMenuActions>
38
+ + </MegaMenuContent>
39
+ - <MegaMenuSupportingContent>...</MegaMenuSupportingContent>
40
+ + <MegaMenuAside>...</MegaMenuAside>
41
+ </MegaMenuPanel>
42
+ ```
43
+
44
+ ### Patch Changes
45
+
46
+ - bab3b6c: Fixed `ToolbarNext` overflow calculations to preserve fractional browser measurements and avoid false overflow caused by subpixel rounding.
47
+ - Updated dependencies [1a48c1a]
48
+ - @salt-ds/core@1.64.1
49
+
3
50
  ## 1.0.0-alpha.95
4
51
 
5
52
  ### Minor Changes
package/css/salt-lab.css CHANGED
@@ -1893,51 +1893,81 @@
1893
1893
  border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-primary-borderColor);
1894
1894
  }
1895
1895
 
1896
- /* src/mega-menu/MegaMenuGroup.css */
1897
- .saltMegaMenuGroup {
1896
+ /* src/mega-menu/MegaMenuActions.css */
1897
+ .saltMegaMenuActions {
1898
1898
  display: flex;
1899
- flex-direction: column;
1899
+ flex-wrap: wrap;
1900
+ margin-block-start: auto;
1900
1901
  }
1901
- .saltMegaMenuGroup-list {
1902
- list-style: none;
1903
- margin: 0;
1904
- padding: 0;
1902
+
1903
+ /* src/mega-menu/MegaMenuAside.css */
1904
+ .saltMegaMenuAside {
1905
+ flex: 0 0 auto;
1905
1906
  display: flex;
1906
- gap: var(--salt-spacing-fixed-100);
1907
1907
  flex-direction: column;
1908
+ padding: var(--salt-spacing-300);
1908
1909
  }
1909
1910
 
1910
- /* src/mega-menu/MegaMenuGroups.css */
1911
- .saltMegaMenuGroups {
1912
- display: grid;
1913
- grid-template-columns: repeat(auto-fit, var(--saltMegaMenuGroups-columnWidth, 12rem));
1911
+ /* src/mega-menu/MegaMenuContent.css */
1912
+ .saltMegaMenuContent {
1913
+ display: flex;
1914
+ flex-direction: column;
1914
1915
  gap: var(--salt-spacing-300);
1915
1916
  padding: var(--salt-spacing-300);
1916
- max-inline-size: var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600)));
1917
+ min-width: 0;
1918
+ flex: 0 1 auto;
1919
+ max-inline-size: var(--saltMegaMenuPanel-availableWidth);
1920
+ box-sizing: border-box;
1917
1921
  }
1918
1922
 
1919
- /* src/mega-menu/MegaMenuHeader.css */
1920
- .saltMegaMenuHeader-content {
1923
+ /* src/mega-menu/MegaMenuGroup.css */
1924
+ .saltMegaMenuGroup {
1925
+ display: flex;
1926
+ flex-direction: column;
1927
+ }
1928
+
1929
+ /* src/mega-menu/MegaMenuGroupHeading.css */
1930
+ .saltMegaMenuGroupHeading {
1921
1931
  display: flex;
1922
1932
  align-items: center;
1933
+ margin: 0 0 var(--salt-spacing-50);
1923
1934
  padding: var(--salt-spacing-50) var(--salt-spacing-100);
1935
+ border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);
1936
+ min-height: var(--salt-size-base);
1924
1937
  font-family: var(--salt-text-label-fontFamily);
1925
1938
  font-size: var(--salt-text-label-fontSize);
1926
1939
  font-weight: var(--salt-text-fontWeight-strong);
1927
1940
  line-height: var(--salt-text-label-lineHeight);
1928
- min-height: var(--salt-size-base);
1929
1941
  color: var(--salt-content-secondary-foreground);
1930
1942
  }
1931
- .saltMegaMenuHeader {
1932
- margin-bottom: var(--salt-spacing-50);
1933
- border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);
1943
+
1944
+ /* src/mega-menu/MegaMenuGroups.css */
1945
+ .saltMegaMenuGroups {
1946
+ align-self: start;
1947
+ display: grid;
1948
+ grid-template-columns: repeat(auto-fit, minmax(0, var(--saltMegaMenuGroups-columnWidth, 12rem)));
1949
+ gap: var(--salt-spacing-300);
1950
+ min-width: 0;
1951
+ max-inline-size: var(--saltMegaMenuPanel-availableWidth);
1934
1952
  }
1935
1953
 
1936
- /* src/mega-menu/MegaMenuItem.css */
1937
- .saltMegaMenuItem {
1954
+ /* src/mega-menu/MegaMenuList.css */
1955
+ .saltMegaMenuList {
1938
1956
  list-style: none;
1957
+ margin: 0;
1958
+ padding: 0;
1959
+ display: flex;
1960
+ gap: var(--salt-spacing-fixed-100);
1961
+ flex-direction: column;
1939
1962
  }
1940
- .saltMegaMenuItem > a {
1963
+
1964
+ /* src/mega-menu/MegaMenuListItem.css */
1965
+ .saltMegaMenuListItem {
1966
+ list-style: none;
1967
+ display: flex;
1968
+ flex-direction: column;
1969
+ }
1970
+ .saltMegaMenuListItem-wrapper {
1941
1971
  display: flex;
1942
1972
  padding: var(--salt-spacing-50) var(--salt-spacing-100);
1943
1973
  align-items: flex-start;
@@ -1948,15 +1978,18 @@
1948
1978
  box-sizing: border-box;
1949
1979
  gap: var(--salt-spacing-100);
1950
1980
  position: relative;
1951
- border-radius: var(--salt-palette-corner-weak);
1981
+ border-radius: var(--salt-palette-corner-weak, 0);
1952
1982
  text-decoration: none;
1983
+ border: none;
1984
+ font: inherit;
1985
+ text-align: start;
1953
1986
  }
1954
- .saltMegaMenuItem > a > .saltIcon {
1987
+ .saltMegaMenuListItem-wrapper > .saltIcon {
1955
1988
  display: flex;
1956
1989
  height: var(--salt-size-base);
1957
1990
  align-items: center;
1958
1991
  }
1959
- .saltMegaMenuItem-content {
1992
+ .saltMegaMenuListItem-content {
1960
1993
  flex: 1 0;
1961
1994
  margin: var(--salt-spacing-75) 0;
1962
1995
  font-family: var(--salt-text-fontFamily);
@@ -1964,18 +1997,18 @@
1964
1997
  font-weight: var(--salt-text-fontWeight);
1965
1998
  line-height: var(--salt-text-lineHeight);
1966
1999
  }
1967
- .saltMegaMenuItem > a:focus-visible {
2000
+ .saltMegaMenuListItem-wrapper:focus-visible {
1968
2001
  outline: var(--salt-focused-outline);
1969
2002
  outline-offset: calc(var(--salt-size-fixed-100) * -2);
1970
2003
  }
1971
- .saltMegaMenuItem > a:hover {
2004
+ .saltMegaMenuListItem-wrapper:hover:not(:focus-visible) {
1972
2005
  outline: none;
1973
- background: var(--salt-navigable-background-hover);
2006
+ background: var(--salt-overlayable-background-hover);
1974
2007
  }
1975
- .saltMegaMenuItem > a:active {
2008
+ .saltMegaMenuListItem-wrapper:active {
1976
2009
  background: var(--salt-navigable-accent-background-active);
1977
2010
  }
1978
- .saltMegaMenuItem > a:active::before {
2011
+ .saltMegaMenuListItem-wrapper:active::before {
1979
2012
  content: "";
1980
2013
  position: absolute;
1981
2014
  inset: 0;
@@ -1987,31 +2020,19 @@
1987
2020
 
1988
2021
  /* src/mega-menu/MegaMenuPanel.css */
1989
2022
  .saltMegaMenuPanel {
2023
+ --saltMegaMenuPanel-availableWidth: calc(100vw - var(--salt-spacing-600));
1990
2024
  display: flex;
1991
- flex-wrap: wrap;
2025
+ align-items: stretch;
1992
2026
  inline-size: var(--saltMegaMenuPanel-inlineSize, fit-content);
1993
- max-inline-size: var(--saltMegaMenuPanel-maxInlineSize, var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600))));
1994
- max-height: 90%;
2027
+ max-inline-size: var(--saltMegaMenuPanel-maxInlineSize, var(--saltMegaMenuPanel-availableWidth));
2028
+ max-block-size: 90vh;
1995
2029
  overflow-x: hidden;
1996
2030
  overflow-y: auto;
1997
2031
  box-sizing: border-box;
1998
- border-radius: var(--salt-palette-corner);
2032
+ border-radius: var(--salt-palette-corner, 0);
1999
2033
  border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-container-primary-borderColor);
2000
2034
  background: var(--salt-container-primary-background);
2001
- box-shadow: var(--salt-overlayable-shadow-popout);
2002
- }
2003
-
2004
- /* src/mega-menu/MegaMenuSupportingActions.css */
2005
- .saltMegaMenuSupportingActions {
2006
- display: flex;
2007
- flex-wrap: wrap;
2008
- width: fit-content;
2009
- padding-bottom: var(--salt-spacing-300);
2010
- }
2011
-
2012
- /* src/mega-menu/MegaMenuSupportingContent.css */
2013
- .saltMegaMenuSupportingContent {
2014
- padding: var(--salt-spacing-300);
2035
+ box-shadow: var(--salt-overlayable-shadow-modal);
2015
2036
  }
2016
2037
 
2017
2038
  /* src/menu-button/MenuButton.css */
@@ -3437,4 +3458,4 @@
3437
3458
  margin: calc(var(--salt-size-unit) / 2) 0;
3438
3459
  }
3439
3460
 
3440
- /* src/0af170c9-7e3f-4fb8-8504-21af9780540e.css */
3461
+ /* src/e4ab0e63-880d-4ad2-9759-4acceca8a38d.css */
package/dist-cjs/index.js CHANGED
@@ -79,13 +79,15 @@ var Logo = require('./logo/Logo.js');
79
79
  var LogoImage = require('./logo/LogoImage.js');
80
80
  var LogoSeparator = require('./logo/LogoSeparator.js');
81
81
  var MegaMenu = require('./mega-menu/MegaMenu.js');
82
+ var MegaMenuActions = require('./mega-menu/MegaMenuActions.js');
83
+ var MegaMenuAside = require('./mega-menu/MegaMenuAside.js');
84
+ var MegaMenuContent = require('./mega-menu/MegaMenuContent.js');
82
85
  var MegaMenuGroup = require('./mega-menu/MegaMenuGroup.js');
86
+ var MegaMenuGroupHeading = require('./mega-menu/MegaMenuGroupHeading.js');
83
87
  var MegaMenuGroups = require('./mega-menu/MegaMenuGroups.js');
84
- var MegaMenuHeader = require('./mega-menu/MegaMenuHeader.js');
85
- var MegaMenuItem = require('./mega-menu/MegaMenuItem.js');
88
+ var MegaMenuList = require('./mega-menu/MegaMenuList.js');
89
+ var MegaMenuListItem = require('./mega-menu/MegaMenuListItem.js');
86
90
  var MegaMenuPanel = require('./mega-menu/MegaMenuPanel.js');
87
- var MegaMenuSupportingActions = require('./mega-menu/MegaMenuSupportingActions.js');
88
- var MegaMenuSupportingContent = require('./mega-menu/MegaMenuSupportingContent.js');
89
91
  var MegaMenuTrigger = require('./mega-menu/MegaMenuTrigger.js');
90
92
  var MenuButton = require('./menu-button/MenuButton.js');
91
93
  var Metric = require('./metric/Metric.js');
@@ -216,13 +218,15 @@ exports.Logo = Logo.Logo;
216
218
  exports.LogoImage = LogoImage.LogoImage;
217
219
  exports.LogoSeparator = LogoSeparator.LogoSeparator;
218
220
  exports.MegaMenu = MegaMenu.MegaMenu;
221
+ exports.MegaMenuActions = MegaMenuActions.MegaMenuActions;
222
+ exports.MegaMenuAside = MegaMenuAside.MegaMenuAside;
223
+ exports.MegaMenuContent = MegaMenuContent.MegaMenuContent;
219
224
  exports.MegaMenuGroup = MegaMenuGroup.MegaMenuGroup;
225
+ exports.MegaMenuGroupHeading = MegaMenuGroupHeading.MegaMenuGroupHeading;
220
226
  exports.MegaMenuGroups = MegaMenuGroups.MegaMenuGroups;
221
- exports.MegaMenuHeader = MegaMenuHeader.MegaMenuHeader;
222
- exports.MegaMenuItem = MegaMenuItem.MegaMenuItem;
227
+ exports.MegaMenuList = MegaMenuList.MegaMenuList;
228
+ exports.MegaMenuListItem = MegaMenuListItem.MegaMenuListItem;
223
229
  exports.MegaMenuPanel = MegaMenuPanel.MegaMenuPanel;
224
- exports.MegaMenuSupportingActions = MegaMenuSupportingActions.MegaMenuSupportingActions;
225
- exports.MegaMenuSupportingContent = MegaMenuSupportingContent.MegaMenuSupportingContent;
226
230
  exports.MegaMenuTrigger = MegaMenuTrigger.MegaMenuTrigger;
227
231
  exports.MenuButton = MenuButton.MenuButton;
228
232
  exports.Metric = Metric.Metric;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,7 +5,7 @@ var react$1 = require('@floating-ui/react');
5
5
  var core = require('@salt-ds/core');
6
6
  var react = require('react');
7
7
  var MegaMenuContext = require('./MegaMenuContext.js');
8
- var useMegaMenuKeyboard = require('./useMegaMenuKeyboard.js');
8
+ var useMegaMenuNavigation = require('./useMegaMenuNavigation.js');
9
9
 
10
10
  function MegaMenu({
11
11
  children,
@@ -22,12 +22,12 @@ function MegaMenu({
22
22
  });
23
23
  const [reference, setReference] = react.useState(null);
24
24
  const [floating, setFloating] = react.useState(null);
25
- const [focusFirstItemOnOpen, setFocusFirstItemOnOpen] = react.useState(false);
26
- const [panelId, setPanelId] = react.useState(void 0);
25
+ const focusFirstItemOnOpenRef = react.useRef(false);
26
+ const [panelId, setPanelId] = react.useState();
27
27
  const setOpen = react.useCallback(
28
28
  (newOpen) => {
29
29
  if (!newOpen) {
30
- setFocusFirstItemOnOpen(false);
30
+ focusFirstItemOnOpenRef.current = false;
31
31
  }
32
32
  setOpenState(newOpen);
33
33
  onOpenChange == null ? void 0 : onOpenChange(newOpen);
@@ -39,11 +39,11 @@ function MegaMenu({
39
39
  onOpenChange: setOpen,
40
40
  elements: { reference, floating }
41
41
  });
42
- const megaMenuKeyboard = useMegaMenuKeyboard.useMegaMenuKeyboard(floatingRootContext);
42
+ const megaMenuNavigation = useMegaMenuNavigation.useMegaMenuNavigation(floatingRootContext);
43
43
  const { getReferenceProps, getFloatingProps } = react$1.useInteractions([
44
44
  react$1.useClick(floatingRootContext),
45
45
  react$1.useDismiss(floatingRootContext),
46
- megaMenuKeyboard
46
+ megaMenuNavigation
47
47
  ]);
48
48
  const contextValue = react.useMemo(
49
49
  () => ({
@@ -55,8 +55,7 @@ function MegaMenu({
55
55
  setFloating,
56
56
  setReference,
57
57
  setOpen,
58
- focusFirstItemOnOpen,
59
- setFocusFirstItemOnOpen,
58
+ focusFirstItemOnOpenRef,
60
59
  panelId,
61
60
  setPanelId
62
61
  }),
@@ -66,13 +65,8 @@ function MegaMenu({
66
65
  placement,
67
66
  getFloatingProps,
68
67
  getReferenceProps,
69
- setFloating,
70
- setReference,
71
68
  setOpen,
72
- focusFirstItemOnOpen,
73
- setFocusFirstItemOnOpen,
74
- panelId,
75
- setPanelId
69
+ panelId
76
70
  ]
77
71
  );
78
72
  return /* @__PURE__ */ jsxRuntime.jsx(MegaMenuContext.MegaMenuContext.Provider, { value: contextValue, children });
@@ -1 +1 @@
1
- {"version":3,"file":"MegaMenu.js","sources":["../src/mega-menu/MegaMenu.tsx"],"sourcesContent":["import {\n type Placement,\n useClick,\n useDismiss,\n useFloatingRootContext,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { type ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { MegaMenuContext } from \"./MegaMenuContext\";\nimport { useMegaMenuKeyboard } from \"./useMegaMenuKeyboard\";\n\nexport interface MegaMenuProps {\n /**\n * The content of the mega menu, typically `MegaMenuTrigger` and `MegaMenuPanel`.\n */\n children?: ReactNode;\n /**\n * Whether the mega menu is open. Use for controlled mode.\n */\n open?: boolean;\n /**\n * Whether the mega menu is initially open. Use for uncontrolled mode.\n * @default false\n */\n defaultOpen?: boolean;\n /**\n * Callback fired when the open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The placement of the mega menu panel relative to the trigger.\n * @default \"bottom\"\n */\n placement?: Placement;\n}\n\nexport function MegaMenu({\n children,\n open,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n}: MegaMenuProps) {\n const [openState, setOpenState] = useControlled({\n controlled: open,\n default: defaultOpen,\n name: \"MegaMenu\",\n state: \"open\",\n });\n\n const [reference, setReference] = useState<HTMLElement | null>(null);\n const [floating, setFloating] = useState<HTMLElement | null>(null);\n const [focusFirstItemOnOpen, setFocusFirstItemOnOpen] = useState(false);\n const [panelId, setPanelId] = useState<string | undefined>(undefined);\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (!newOpen) {\n setFocusFirstItemOnOpen(false);\n }\n setOpenState(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange],\n );\n\n const floatingRootContext = useFloatingRootContext({\n open: openState,\n onOpenChange: setOpen,\n elements: { reference, floating },\n });\n\n const megaMenuKeyboard = useMegaMenuKeyboard(floatingRootContext);\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(floatingRootContext),\n useDismiss(floatingRootContext),\n megaMenuKeyboard,\n ]);\n\n const contextValue = useMemo(\n () => ({\n openState,\n floatingRootContext,\n placement,\n getFloatingProps,\n getReferenceProps,\n setFloating,\n setReference,\n setOpen,\n focusFirstItemOnOpen,\n setFocusFirstItemOnOpen,\n panelId,\n setPanelId,\n }),\n [\n openState,\n floatingRootContext,\n placement,\n getFloatingProps,\n getReferenceProps,\n setFloating,\n setReference,\n setOpen,\n focusFirstItemOnOpen,\n setFocusFirstItemOnOpen,\n panelId,\n setPanelId,\n ],\n );\n\n return (\n <MegaMenuContext.Provider value={contextValue}>\n {children}\n </MegaMenuContext.Provider>\n );\n}\n"],"names":["useControlled","useState","useCallback","useFloatingRootContext","useMegaMenuKeyboard","useInteractions","useClick","useDismiss","useMemo","MegaMenuContext"],"mappings":";;;;;;;;;AAqCO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,kBAAA,CAAc;AAAA,IAC9C,UAAA,EAAY,IAAA;AAAA,IACZ,OAAA,EAAS,WAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAA6B,IAAI,CAAA;AACnE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAA6B,MAAS,CAAA;AAEpE,EAAA,MAAM,OAAA,GAAUC,iBAAA;AAAA,IACd,CAAC,OAAA,KAAqB;AACpB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,uBAAA,CAAwB,KAAK,CAAA;AAAA,MAC/B;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,OAAA,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,sBAAsBC,8BAAA,CAAuB;AAAA,IACjD,IAAA,EAAM,SAAA;AAAA,IACN,YAAA,EAAc,OAAA;AAAA,IACd,QAAA,EAAU,EAAE,SAAA,EAAW,QAAA;AAAS,GACjC,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmBC,wCAAoB,mBAAmB,CAAA;AAEhE,EAAA,MAAM,EAAE,iBAAA,EAAmB,gBAAA,EAAiB,GAAIC,uBAAA,CAAgB;AAAA,IAC9DC,iBAAS,mBAAmB,CAAA;AAAA,IAC5BC,mBAAW,mBAAmB,CAAA;AAAA,IAC9B;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAeC,aAAA;AAAA,IACnB,OAAO;AAAA,MACL,SAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,SAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,sCACGC,+BAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,cAC9B,QAAA,EACH,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"MegaMenu.js","sources":["../src/mega-menu/MegaMenu.tsx"],"sourcesContent":["import {\n useClick,\n useDismiss,\n useFloatingRootContext,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { type ReactNode, useCallback, useMemo, useRef, useState } from \"react\";\nimport { MegaMenuContext } from \"./MegaMenuContext\";\nimport { useMegaMenuNavigation } from \"./useMegaMenuNavigation\";\n\n/**\n * Supported placements for the mega menu panel.\n */\nexport type MegaMenuPlacement = \"bottom\" | \"bottom-start\" | \"bottom-end\";\n\nexport interface MegaMenuProps {\n /**\n * The content of the mega menu, typically `MegaMenuTrigger` and `MegaMenuPanel`.\n */\n children?: ReactNode;\n /**\n * Whether the mega menu is open. Use for controlled mode.\n */\n open?: boolean;\n /**\n * Whether the mega menu is initially open. Use for uncontrolled mode.\n * @default false\n */\n defaultOpen?: boolean;\n /**\n * Callback fired when the open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The placement of the mega menu panel relative to the trigger.\n * @default \"bottom\"\n */\n placement?: MegaMenuPlacement;\n}\n\n/**\n * Root of a mega menu, coordinating its trigger and panel.\n *\n * Not intended to be nested inside another floating overlay (e.g. a dialog or\n * popover): the mega menu does not participate in floating-ui's `FloatingTree`\n */\nexport function MegaMenu({\n children,\n open,\n defaultOpen = false,\n onOpenChange,\n placement = \"bottom\",\n}: MegaMenuProps) {\n const [openState, setOpenState] = useControlled({\n controlled: open,\n default: defaultOpen,\n name: \"MegaMenu\",\n state: \"open\",\n });\n\n const [reference, setReference] = useState<HTMLElement | null>(null);\n const [floating, setFloating] = useState<HTMLElement | null>(null);\n const focusFirstItemOnOpenRef = useRef(false);\n const [panelId, setPanelId] = useState<string>();\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (!newOpen) {\n focusFirstItemOnOpenRef.current = false;\n }\n setOpenState(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange],\n );\n\n const floatingRootContext = useFloatingRootContext({\n open: openState,\n onOpenChange: setOpen,\n elements: { reference, floating },\n });\n\n const megaMenuNavigation = useMegaMenuNavigation(floatingRootContext);\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(floatingRootContext),\n useDismiss(floatingRootContext),\n megaMenuNavigation,\n ]);\n\n const contextValue = useMemo(\n () => ({\n openState,\n floatingRootContext,\n placement,\n getFloatingProps,\n getReferenceProps,\n setFloating,\n setReference,\n setOpen,\n focusFirstItemOnOpenRef,\n panelId,\n setPanelId,\n }),\n [\n openState,\n floatingRootContext,\n placement,\n getFloatingProps,\n getReferenceProps,\n setOpen,\n panelId,\n ],\n );\n\n return (\n <MegaMenuContext.Provider value={contextValue}>\n {children}\n </MegaMenuContext.Provider>\n );\n}\n"],"names":["useControlled","useState","useRef","useCallback","useFloatingRootContext","useMegaMenuNavigation","useInteractions","useClick","useDismiss","useMemo","MegaMenuContext"],"mappings":";;;;;;;;;AA+CO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,kBAAA,CAAc;AAAA,IAC9C,UAAA,EAAY,IAAA;AAAA,IACZ,OAAA,EAAS,WAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAA6B,IAAI,CAAA;AACnE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,uBAAA,GAA0BC,aAAO,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,cAAA,EAAiB;AAE/C,EAAA,MAAM,OAAA,GAAUE,iBAAA;AAAA,IACd,CAAC,OAAA,KAAqB;AACpB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAAA,MACpC;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,OAAA,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,sBAAsBC,8BAAA,CAAuB;AAAA,IACjD,IAAA,EAAM,SAAA;AAAA,IACN,YAAA,EAAc,OAAA;AAAA,IACd,QAAA,EAAU,EAAE,SAAA,EAAW,QAAA;AAAS,GACjC,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqBC,4CAAsB,mBAAmB,CAAA;AAEpE,EAAA,MAAM,EAAE,iBAAA,EAAmB,gBAAA,EAAiB,GAAIC,uBAAA,CAAgB;AAAA,IAC9DC,iBAAS,mBAAmB,CAAA;AAAA,IAC5BC,mBAAW,mBAAmB,CAAA;AAAA,IAC9B;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAeC,aAAA;AAAA,IACnB,OAAO;AAAA,MACL,SAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,uBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,SAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,sCACGC,+BAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,cAC9B,QAAA,EACH,CAAA;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltMegaMenuActions {\n display: flex;\n flex-wrap: wrap;\n margin-block-start: auto;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=MegaMenuActions.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuActions.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var MegaMenuActions$1 = require('./MegaMenuActions.css.js');
10
+
11
+ const withBaseName = core.makePrefixer("saltMegaMenuActions");
12
+ const MegaMenuActions = react.forwardRef(
13
+ function MegaMenuActions2({ className, ...rest }, ref) {
14
+ const targetWindow = window.useWindow();
15
+ styles.useComponentCssInjection({
16
+ testId: "salt-mega-menu-actions",
17
+ css: MegaMenuActions$1,
18
+ window: targetWindow
19
+ });
20
+ return /* @__PURE__ */ jsxRuntime.jsx(
21
+ "div",
22
+ {
23
+ "data-mega-menu-actions": "",
24
+ className: clsx.clsx(withBaseName(), className),
25
+ ref,
26
+ ...rest
27
+ }
28
+ );
29
+ }
30
+ );
31
+
32
+ exports.MegaMenuActions = MegaMenuActions;
33
+ //# sourceMappingURL=MegaMenuActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuActions.js","sources":["../src/mega-menu/MegaMenuActions.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport megaMenuActionsCss from \"./MegaMenuActions.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuActions\");\n\nexport interface MegaMenuActionsProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the actions. Place `MegaMenuActions` inside\n * `MegaMenuContent`, after `MegaMenuGroups`; it renders as a band beneath the\n * groups, spanning their width.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuActions = forwardRef<HTMLDivElement, MegaMenuActionsProps>(\n function MegaMenuActions({ className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-actions\",\n css: megaMenuActionsCss,\n window: targetWindow,\n });\n\n return (\n <div\n data-mega-menu-actions=\"\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","MegaMenuActions","useWindow","useComponentCssInjection","megaMenuActionsCss","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAWhD,MAAM,eAAA,GAAkBC,gBAAA;AAAA,EAC7B,SAASC,gBAAAA,CAAgB,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AACpD,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAKC,iBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,wBAAA,EAAuB,EAAA;AAAA,QACvB,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltMegaMenuAside {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n padding: var(--salt-spacing-300);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=MegaMenuAside.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuAside.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var MegaMenuAside$1 = require('./MegaMenuAside.css.js');
10
+
11
+ const withBaseName = core.makePrefixer("saltMegaMenuAside");
12
+ const MegaMenuAside = react.forwardRef(
13
+ function MegaMenuAside2({ className, ...rest }, ref) {
14
+ const targetWindow = window.useWindow();
15
+ styles.useComponentCssInjection({
16
+ testId: "salt-mega-menu-aside",
17
+ css: MegaMenuAside$1,
18
+ window: targetWindow
19
+ });
20
+ return /* @__PURE__ */ jsxRuntime.jsx(
21
+ "aside",
22
+ {
23
+ "data-mega-menu-column": "",
24
+ className: clsx.clsx(withBaseName(), className),
25
+ ref,
26
+ ...rest
27
+ }
28
+ );
29
+ }
30
+ );
31
+
32
+ exports.MegaMenuAside = MegaMenuAside;
33
+ //# sourceMappingURL=MegaMenuAside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuAside.js","sources":["../src/mega-menu/MegaMenuAside.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport megaMenuAsideCss from \"./MegaMenuAside.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuAside\");\n\nexport interface MegaMenuAsideProps extends ComponentPropsWithoutRef<\"aside\"> {\n /**\n * The content. Renders to the left of `MegaMenuContent` when placed before\n * it, and to the right when placed after.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuAside = forwardRef<HTMLElement, MegaMenuAsideProps>(\n function MegaMenuAside({ className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-aside\",\n css: megaMenuAsideCss,\n window: targetWindow,\n });\n\n // Side content is also a navigation column (`data-mega-menu-column`).\n return (\n <aside\n data-mega-menu-column=\"\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","MegaMenuAside","useWindow","useComponentCssInjection","megaMenuAsideCss","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAU9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,cAAAA,CAAc,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAClD,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAGD,IAAA,uBACEC,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,uBAAA,EAAsB,EAAA;AAAA,QACtB,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltMegaMenuContent {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-300);\n padding: var(--salt-spacing-300);\n min-width: 0;\n flex: 0 1 auto;\n max-inline-size: var(--saltMegaMenuPanel-availableWidth);\n box-sizing: border-box;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=MegaMenuContent.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuContent.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var MegaMenuContent$1 = require('./MegaMenuContent.css.js');
10
+
11
+ const withBaseName = core.makePrefixer("saltMegaMenuContent");
12
+ const MegaMenuContent = react.forwardRef(
13
+ function MegaMenuContent2({ children, className, ...rest }, ref) {
14
+ const targetWindow = window.useWindow();
15
+ styles.useComponentCssInjection({
16
+ testId: "salt-mega-menu-content",
17
+ css: MegaMenuContent$1,
18
+ window: targetWindow
19
+ });
20
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(withBaseName(), className), ref, ...rest, children });
21
+ }
22
+ );
23
+
24
+ exports.MegaMenuContent = MegaMenuContent;
25
+ //# sourceMappingURL=MegaMenuContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenuContent.js","sources":["../src/mega-menu/MegaMenuContent.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport megaMenuContentCss from \"./MegaMenuContent.css\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuContent\");\n\nexport interface MegaMenuContentProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the mega menu navigation area, typically a `MegaMenuGroups`\n * and an optional `MegaMenuActions`.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuContent = forwardRef<HTMLDivElement, MegaMenuContentProps>(\n function MegaMenuContent({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-content\",\n css: megaMenuContentCss,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n {children}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","MegaMenuContent","useWindow","useComponentCssInjection","megaMenuContentCss","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAUhD,MAAM,eAAA,GAAkBC,gBAAA;AAAA,EAC7B,SAASC,iBAAgB,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC9D,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAKC,iBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA,EAAG,GAAA,EAAW,GAAG,IAAA,EAC5D,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MegaMenuContext.js","sources":["../src/mega-menu/MegaMenuContext.ts"],"sourcesContent":["import type { FloatingRootContext, Placement } from \"@floating-ui/react\";\nimport { createContext } from \"@salt-ds/core\";\nimport type { Dispatch, HTMLProps, SetStateAction } from \"react\";\n\nexport interface MegaMenuContextValue {\n /** Whether the mega menu is currently open. */\n openState: boolean;\n /** Toggle or set the open state of the mega menu. */\n setOpen: (open: boolean) => void;\n /** The floating-ui root context for coordinating interactions. */\n floatingRootContext: FloatingRootContext;\n /** The placement of the mega menu panel relative to the trigger. */\n placement: Placement;\n /** Props getter for the trigger (reference) element. Merges floating-ui interaction props with user props. */\n getReferenceProps: (\n userProps?: HTMLProps<Element> | undefined,\n ) => Record<string, unknown>;\n /** Props getter for the floating panel element. Merges floating-ui interaction props with user props. */\n getFloatingProps: (\n userProps?: HTMLProps<HTMLElement> | undefined,\n ) => Record<string, unknown>;\n /** Ref setter for the floating panel element. */\n setFloating: Dispatch<SetStateAction<HTMLElement | null>>;\n /** Ref setter for the trigger (reference) element. */\n setReference: Dispatch<SetStateAction<HTMLElement | null>>;\n /** Whether the first item should receive focus when the panel opens. */\n focusFirstItemOnOpen: boolean;\n /** Toggle the focus-first-item-on-open flag. */\n setFocusFirstItemOnOpen: Dispatch<SetStateAction<boolean>>;\n /** The id of the mega menu panel, used for aria-controls on the trigger. */\n panelId: string | undefined;\n /** Set the panel id when the panel mounts. */\n setPanelId: Dispatch<SetStateAction<string | undefined>>;\n}\n\nexport const MegaMenuContext = createContext<MegaMenuContextValue | undefined>(\n \"MegaMenuContext\",\n undefined,\n);\n"],"names":["createContext"],"mappings":";;;;AAmCO,MAAM,eAAA,GAAkBA,kBAAA;AAAA,EAC7B,iBAAA;AAAA,EACA;AACF;;;;"}
1
+ {"version":3,"file":"MegaMenuContext.js","sources":["../src/mega-menu/MegaMenuContext.ts"],"sourcesContent":["import type { FloatingRootContext } from \"@floating-ui/react\";\nimport { createContext } from \"@salt-ds/core\";\nimport type {\n Dispatch,\n HTMLProps,\n MutableRefObject,\n SetStateAction,\n} from \"react\";\nimport type { MegaMenuPlacement } from \"./MegaMenu\";\n\nexport interface MegaMenuContextValue {\n /** Whether the mega menu is currently open. */\n openState: boolean;\n /** Toggle or set the open state of the mega menu. */\n setOpen: (open: boolean) => void;\n /** The floating-ui root context for coordinating interactions. */\n floatingRootContext: FloatingRootContext;\n /** The placement of the mega menu panel relative to the trigger. */\n placement: MegaMenuPlacement;\n /** Props getter for the trigger (reference) element. Merges floating-ui interaction props with user props. */\n getReferenceProps: (\n userProps?: HTMLProps<Element> | undefined,\n ) => Record<string, unknown>;\n /** Props getter for the floating panel element. Merges floating-ui interaction props with user props. */\n getFloatingProps: (\n userProps?: HTMLProps<HTMLElement> | undefined,\n ) => Record<string, unknown>;\n /** Ref setter for the floating panel element. */\n setFloating: Dispatch<SetStateAction<HTMLElement | null>>;\n /** Ref setter for the trigger (reference) element. */\n setReference: Dispatch<SetStateAction<HTMLElement | null>>;\n /** Whether the first item should receive focus when the panel opens. */\n focusFirstItemOnOpenRef: MutableRefObject<boolean>;\n /** The id of the mega menu panel, used for aria-controls on the trigger. */\n panelId: string | undefined;\n /** Registers the panel's id so the trigger's aria-controls stays in sync. */\n setPanelId: Dispatch<SetStateAction<string | undefined>>;\n}\n\nexport const MegaMenuContext = createContext<MegaMenuContextValue | undefined>(\n \"MegaMenuContext\",\n undefined,\n);\n"],"names":["createContext"],"mappings":";;;;AAuCO,MAAM,eAAA,GAAkBA,kBAAA;AAAA,EAC7B,iBAAA;AAAA,EACA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltMegaMenuGroup {\n display: flex;\n flex-direction: column;\n}\n\n.saltMegaMenuGroup-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n gap: var(--salt-spacing-fixed-100);\n flex-direction: column;\n}\n";
3
+ var css_248z = ".saltMegaMenuGroup {\n display: flex;\n flex-direction: column;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=MegaMenuGroup.css.js.map
@@ -7,7 +7,7 @@ var window = require('@salt-ds/window');
7
7
  var clsx = require('clsx');
8
8
  var react = require('react');
9
9
  var MegaMenuGroup$1 = require('./MegaMenuGroup.css.js');
10
- var MegaMenuHeader = require('./MegaMenuHeader.js');
10
+ var MegaMenuGroupContext = require('./MegaMenuGroupContext.js');
11
11
 
12
12
  const withBaseName = core.makePrefixer("saltMegaMenuGroup");
13
13
  const MegaMenuGroup = react.forwardRef(
@@ -18,36 +18,21 @@ const MegaMenuGroup = react.forwardRef(
18
18
  css: MegaMenuGroup$1,
19
19
  window: targetWindow
20
20
  });
21
- const headerId = core.useId();
22
- let header = null;
23
- const items = [];
24
- react.Children.forEach(children, (child) => {
25
- if (react.isValidElement(child) && child.type === MegaMenuHeader.MegaMenuHeader && !header) {
26
- header = react.cloneElement(child, { id: headerId });
27
- } else {
28
- items.push(child);
29
- }
30
- });
31
- return /* @__PURE__ */ jsxRuntime.jsxs(
21
+ const [headingId, setHeadingId] = react.useState(void 0);
22
+ const contextValue = react.useMemo(
23
+ () => ({ headingId, setHeadingId }),
24
+ [headingId]
25
+ );
26
+ return /* @__PURE__ */ jsxRuntime.jsx(MegaMenuGroupContext.MegaMenuGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
32
27
  "div",
33
28
  {
34
- className: clsx.clsx(withBaseName(), className),
35
29
  "data-mega-menu-column": "",
30
+ className: clsx.clsx(withBaseName(), className),
36
31
  ref,
37
32
  ...rest,
38
- children: [
39
- header,
40
- /* @__PURE__ */ jsxRuntime.jsx(
41
- "ol",
42
- {
43
- className: withBaseName("list"),
44
- "aria-labelledby": header ? headerId : void 0,
45
- children: items
46
- }
47
- )
48
- ]
33
+ children
49
34
  }
50
- );
35
+ ) });
51
36
  }
52
37
  );
53
38
 
@@ -1 +1 @@
1
- {"version":3,"file":"MegaMenuGroup.js","sources":["../src/mega-menu/MegaMenuGroup.tsx"],"sourcesContent":["import { makePrefixer, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n cloneElement,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type ReactNode,\n} from \"react\";\nimport megaMenuGroupCss from \"./MegaMenuGroup.css\";\nimport { MegaMenuHeader } from \"./MegaMenuHeader\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuGroup\");\n\nexport interface MegaMenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of the mega menu group, typically MegaMenuHeader and MegaMenuItem components.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuGroup = forwardRef<HTMLDivElement, MegaMenuGroupProps>(\n function MegaMenuGroup({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-group\",\n css: megaMenuGroupCss,\n window: targetWindow,\n });\n\n const headerId = useId();\n let header: ReactNode = null;\n const items: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MegaMenuHeader && !header) {\n header = cloneElement(child, { id: headerId });\n } else {\n items.push(child);\n }\n });\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n data-mega-menu-column=\"\"\n ref={ref}\n {...rest}\n >\n {header}\n <ol\n className={withBaseName(\"list\")}\n aria-labelledby={header ? headerId : undefined}\n >\n {items}\n </ol>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","MegaMenuGroup","useWindow","useComponentCssInjection","megaMenuGroupCss","useId","Children","isValidElement","MegaMenuHeader","cloneElement","jsxs","clsx","jsx"],"mappings":";;;;;;;;;;;AAeA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAS9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,eAAc,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC5D,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,WAAWC,UAAA,EAAM;AACvB,IAAA,IAAI,MAAA,GAAoB,IAAA;AACxB,IAAA,MAAM,QAAqB,EAAC;AAE5B,IAAAC,cAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AACpC,MAAA,IAAIC,qBAAe,KAAK,CAAA,IAAK,MAAM,IAAA,KAASC,6BAAA,IAAkB,CAAC,MAAA,EAAQ;AACrE,QAAA,MAAA,GAASC,kBAAA,CAAa,KAAA,EAAO,EAAE,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,uBAAA,EAAsB,EAAA;AAAA,QACtB,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,0BACDC,cAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,cAC9B,iBAAA,EAAiB,SAAS,QAAA,GAAW,MAAA;AAAA,cAEpC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"MegaMenuGroup.js","sources":["../src/mega-menu/MegaMenuGroup.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useMemo,\n useState,\n} from \"react\";\nimport megaMenuGroupCss from \"./MegaMenuGroup.css\";\nimport { MegaMenuGroupContext } from \"./MegaMenuGroupContext\";\n\nconst withBaseName = makePrefixer(\"saltMegaMenuGroup\");\n\nexport interface MegaMenuGroupProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the mega menu group: a `MegaMenuGroupHeading` and a\n * `MegaMenuList` of `MegaMenuListItem`s.\n */\n children?: ReactNode;\n}\n\nexport const MegaMenuGroup = forwardRef<HTMLDivElement, MegaMenuGroupProps>(\n function MegaMenuGroup({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-mega-menu-group\",\n css: megaMenuGroupCss,\n window: targetWindow,\n });\n\n // The heading registers its id so the list can label itself; `undefined`\n // with no heading. The group is also a navigation column.\n const [headingId, setHeadingId] = useState<string | undefined>(undefined);\n const contextValue = useMemo(\n () => ({ headingId, setHeadingId }),\n [headingId],\n );\n\n return (\n <MegaMenuGroupContext.Provider value={contextValue}>\n <div\n data-mega-menu-column=\"\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </MegaMenuGroupContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","MegaMenuGroup","useWindow","useComponentCssInjection","megaMenuGroupCss","useState","useMemo","jsx","MegaMenuGroupContext","clsx"],"mappings":";;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAU9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,eAAc,EAAE,QAAA,EAAU,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC5D,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAID,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAA6B,MAAS,CAAA;AACxE,IAAA,MAAM,YAAA,GAAeC,aAAA;AAAA,MACnB,OAAO,EAAE,SAAA,EAAW,YAAA,EAAa,CAAA;AAAA,MACjC,CAAC,SAAS;AAAA,KACZ;AAEA,IAAA,uBACEC,cAAA,CAACC,yCAAA,CAAqB,QAAA,EAArB,EAA8B,OAAO,YAAA,EACpC,QAAA,kBAAAD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,uBAAA,EAAsB,EAAA;AAAA,QACtB,SAAA,EAAWE,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}