@arc-ui/components 13.0.0 → 13.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 (176) hide show
  1. package/lib/Alert/styles.css +1 -1
  2. package/lib/Align/styles.css +1 -1
  3. package/lib/AppButton/styles.css +1 -1
  4. package/lib/Avatar/styles.css +1 -1
  5. package/lib/AvatarGroup/styles.css +1 -1
  6. package/lib/Badge/styles.css +1 -1
  7. package/lib/Banner/Banner.cjs +7 -3
  8. package/lib/Banner/Banner.mjs +7 -3
  9. package/lib/Box/styles.css +1 -1
  10. package/lib/BrandLogo/styles.css +1 -1
  11. package/lib/Breadcrumbs/styles.css +1 -1
  12. package/lib/Button/styles.css +1 -1
  13. package/lib/ButtonGroup/styles.css +1 -1
  14. package/lib/ButtonV2/styles.css +1 -1
  15. package/lib/Calendar/Calendar.cjs +2 -2
  16. package/lib/Calendar/Calendar.mjs +2 -2
  17. package/lib/Calendar/styles.css +1 -1
  18. package/lib/CardFooter/styles.css +1 -1
  19. package/lib/CardHeading/styles.css +1 -1
  20. package/lib/Carousel/Carousel.cjs +26 -14
  21. package/lib/Carousel/Carousel.mjs +26 -14
  22. package/lib/Carousel/styles.css +1 -1
  23. package/lib/Checkbox/styles.css +1 -1
  24. package/lib/CheckboxIcon/styles.css +1 -1
  25. package/lib/ClientSideVisible/ClientSideVisible.cjs +1 -0
  26. package/lib/ClientSideVisible/ClientSideVisible.mjs +1 -0
  27. package/lib/Columns/styles.css +1 -1
  28. package/lib/ComboBox/ComboBox.cjs +530 -136
  29. package/lib/ComboBox/ComboBox.mjs +530 -136
  30. package/lib/ComboBox/styles.css +1 -1
  31. package/lib/ConditionalWrapper/ConditionalWrapper.cjs +1 -0
  32. package/lib/ConditionalWrapper/ConditionalWrapper.mjs +1 -0
  33. package/lib/ContentSwitcher/styles.css +1 -1
  34. package/lib/ContentSwitcherDropdown/styles.css +1 -1
  35. package/lib/DatePicker/DatePicker.cjs +3 -3
  36. package/lib/DatePicker/DatePicker.mjs +3 -3
  37. package/lib/DatePicker/styles.css +1 -1
  38. package/lib/Disclosure/styles.css +1 -1
  39. package/lib/DisclosureMini/styles.css +1 -1
  40. package/lib/Download/styles.css +1 -1
  41. package/lib/Drawer/styles.css +1 -1
  42. package/lib/Elevation/styles.css +1 -1
  43. package/lib/Filter/styles.css +1 -1
  44. package/lib/FormControl/styles.css +1 -1
  45. package/lib/GhostedHeroBanner/styles.css +1 -1
  46. package/lib/GradientPageBackground/GradientPageBackground.cjs +2 -2
  47. package/lib/GradientPageBackground/GradientPageBackground.mjs +2 -2
  48. package/lib/GradientPageBackground/styles.css +1 -1
  49. package/lib/Grid/Grid.cjs +1 -0
  50. package/lib/Grid/Grid.mjs +1 -0
  51. package/lib/Grid/styles.css +1 -1
  52. package/lib/Group/styles.css +1 -1
  53. package/lib/Heading/styles.css +1 -1
  54. package/lib/HeroBanner/HeroBanner.cjs +7 -3
  55. package/lib/HeroBanner/HeroBanner.mjs +7 -3
  56. package/lib/HeroBanner/styles.css +1 -1
  57. package/lib/HeroButton/styles.css +1 -1
  58. package/lib/Hidden/styles.css +1 -1
  59. package/lib/HorizontalCard/styles.css +1 -1
  60. package/lib/Icon/styles.css +1 -1
  61. package/lib/Image/styles.css +1 -1
  62. package/lib/ImpactCard/ImpactCard.cjs +28 -15
  63. package/lib/ImpactCard/ImpactCard.mjs +29 -16
  64. package/lib/ImpactCard/styles.css +1 -1
  65. package/lib/InformationCard/InformationCard.cjs +57 -33
  66. package/lib/InformationCard/InformationCard.mjs +59 -35
  67. package/lib/InformationCard/styles.css +1 -1
  68. package/lib/Link/styles.css +1 -1
  69. package/lib/Markup/styles.css +1 -1
  70. package/lib/MediaCard/MediaCard.cjs +40 -21
  71. package/lib/MediaCard/MediaCard.mjs +41 -22
  72. package/lib/MediaCard/styles.css +1 -1
  73. package/lib/Menu/styles.css +1 -1
  74. package/lib/Modal/styles.css +1 -1
  75. package/lib/NavigationHeader/NavigationHeader.cjs +2764 -472
  76. package/lib/NavigationHeader/NavigationHeader.mjs +2707 -436
  77. package/lib/NavigationHeader/styles.css +1 -1
  78. package/lib/Pagination/styles.css +1 -1
  79. package/lib/PaginationSimple/styles.css +1 -1
  80. package/lib/Popover/Popover.cjs +1 -1
  81. package/lib/Popover/Popover.mjs +1 -1
  82. package/lib/Popover/styles.css +1 -1
  83. package/lib/Poster/styles.css +1 -1
  84. package/lib/ProgressBar/styles.css +1 -1
  85. package/lib/ProgressStepper/styles.css +1 -1
  86. package/lib/ProgressStepperOverflow/styles.css +1 -1
  87. package/lib/RadioCardGroup/styles.css +1 -1
  88. package/lib/RadioGroup/RadioGroup.cjs +2 -1
  89. package/lib/RadioGroup/RadioGroup.mjs +2 -1
  90. package/lib/RadioGroup/styles.css +1 -1
  91. package/lib/Rule/styles.css +1 -1
  92. package/lib/ScrollToTop/styles.css +1 -1
  93. package/lib/Section/styles.css +1 -1
  94. package/lib/Select/styles.css +1 -1
  95. package/lib/SemanticButton/SemanticButton.cjs +10 -0
  96. package/lib/SemanticButton/SemanticButton.mjs +4 -0
  97. package/lib/SemanticButton/styles.css +1 -0
  98. package/lib/SemanticHeading/styles.css +1 -1
  99. package/lib/SemanticLink/SemanticLink.cjs +10 -0
  100. package/lib/SemanticLink/SemanticLink.mjs +4 -0
  101. package/lib/SemanticLink/styles.css +1 -0
  102. package/lib/SiteFooter/styles.css +1 -1
  103. package/lib/SiteFooterV2/SiteFooterV2.cjs +3 -2
  104. package/lib/SiteFooterV2/SiteFooterV2.mjs +3 -2
  105. package/lib/SiteFooterV2/styles.css +1 -1
  106. package/lib/SiteHeaderV2/SiteHeaderV2.cjs +1 -1
  107. package/lib/SiteHeaderV2/SiteHeaderV2.mjs +1 -1
  108. package/lib/SiteHeaderV2/styles.css +1 -1
  109. package/lib/Skeleton/styles.css +1 -1
  110. package/lib/SkipLink/SkipLink.cjs +1 -0
  111. package/lib/SkipLink/SkipLink.mjs +1 -0
  112. package/lib/SkipLink/styles.css +1 -1
  113. package/lib/Spacing/Spacing.cjs +38 -0
  114. package/lib/Spacing/Spacing.mjs +36 -0
  115. package/lib/Spacing/styles.css +1 -0
  116. package/lib/Spinner/styles.css +1 -1
  117. package/lib/Surface/styles.css +1 -1
  118. package/lib/Switch/styles.css +1 -1
  119. package/lib/TabbedBanner/TabbedBanner.cjs +5 -3
  120. package/lib/TabbedBanner/TabbedBanner.mjs +5 -3
  121. package/lib/TabbedBanner/styles.css +1 -1
  122. package/lib/Tabs/Tabs.cjs +57 -25
  123. package/lib/Tabs/Tabs.mjs +57 -25
  124. package/lib/Tabs/styles.css +1 -1
  125. package/lib/Tag/styles.css +1 -1
  126. package/lib/TemplateBanner/TemplateBanner.cjs +5 -1
  127. package/lib/TemplateBanner/TemplateBanner.mjs +5 -1
  128. package/lib/TemplateBanner/styles.css +1 -1
  129. package/lib/Text/styles.css +1 -1
  130. package/lib/TextArea/styles.css +1 -1
  131. package/lib/TextInput/TextInput.cjs +1 -1
  132. package/lib/TextInput/TextInput.mjs +1 -1
  133. package/lib/TextInput/styles.css +1 -1
  134. package/lib/Theme/Theme.cjs +1 -1
  135. package/lib/Theme/Theme.mjs +1 -1
  136. package/lib/Theme/styles.css +1 -1
  137. package/lib/ThemeIcon/styles.css +1 -1
  138. package/lib/ThumbnailSignpost/styles.css +1 -1
  139. package/lib/Toast/styles.css +1 -1
  140. package/lib/Tooltip/styles.css +1 -1
  141. package/lib/Truncate/styles.css +1 -1
  142. package/lib/TypographyCard/TypographyCard.cjs +38 -14
  143. package/lib/TypographyCard/TypographyCard.mjs +39 -15
  144. package/lib/TypographyCard/styles.css +1 -1
  145. package/lib/UniversalHeader/UniversalHeader.cjs +10 -8
  146. package/lib/UniversalHeader/UniversalHeader.mjs +10 -8
  147. package/lib/UniversalHeader/styles.css +1 -1
  148. package/lib/VerticalSpace/styles.css +1 -1
  149. package/lib/VideoPlayer/styles.css +1 -1
  150. package/lib/Visible/styles.css +1 -1
  151. package/lib/VisuallyHidden/styles.css +1 -1
  152. package/lib/_shared/cjs/{Calendar-CdLn9iv6.cjs → Calendar-B-DmNni2.cjs} +1 -1
  153. package/lib/_shared/cjs/{Popover-BtvRErpC.cjs → Popover-BxuQPltF.cjs} +2 -2
  154. package/lib/_shared/cjs/SemanticButton-Be0gsNLA.cjs +16 -0
  155. package/lib/_shared/cjs/SemanticLink-DYO9HLGa.cjs +16 -0
  156. package/lib/_shared/cjs/{TemplateBanner-DyXBKuMw.cjs → TemplateBanner-DfzDwiVT.cjs} +35 -5
  157. package/lib/_shared/cjs/{TextInput-C_K2PLf5.cjs → TextInput-CLkhL2KT.cjs} +39 -6
  158. package/lib/_shared/cjs/{arc-breakpoints-uADxN-b4.cjs → arc-breakpoints-C3HREhvT.cjs} +1 -1
  159. package/lib/_shared/cjs/{index.es-BAsay4oe.cjs → index.es-D5DdMrn2.cjs} +1 -1
  160. package/lib/_shared/esm/{Calendar-CzFIMyD1.mjs → Calendar-CfEBiAjy.mjs} +1 -1
  161. package/lib/_shared/esm/{Popover-DRQSgAog.mjs → Popover-Pjtmu_TN.mjs} +2 -2
  162. package/lib/_shared/esm/SemanticButton-NGAMAw3m.mjs +14 -0
  163. package/lib/_shared/esm/SemanticLink-DfJjaHk2.mjs +14 -0
  164. package/lib/_shared/esm/{TemplateBanner-BPzuH5bz.mjs → TemplateBanner-oQjgkrBQ.mjs} +36 -6
  165. package/lib/_shared/esm/{TextInput-BCvKXfM_.mjs → TextInput-WczTCUvp.mjs} +40 -7
  166. package/lib/_shared/esm/{arc-breakpoints-ChQgbftE.mjs → arc-breakpoints-ANMn37k9.mjs} +1 -1
  167. package/lib/_shared/esm/{index.es-99J0r2va.mjs → index.es-Du5Lyvbp.mjs} +2 -2
  168. package/lib/index.cjs +9958 -7073
  169. package/lib/index.cjs.map +1 -1
  170. package/lib/index.d.cts +560 -203
  171. package/lib/index.d.mts +560 -203
  172. package/lib/index.js.map +1 -1
  173. package/lib/index.mjs +16949 -14068
  174. package/lib/index.mjs.map +1 -1
  175. package/lib/styles.css +6 -2
  176. package/package.json +9 -8
@@ -1,32 +1,44 @@
1
1
  'use client';
2
- import { b as __spreadArray, _ as __rest, a as __assign } from '../_shared/esm/tslib.es6-w7hdJ3oZ.mjs';
3
- import React__default, { useState, useEffect, useId, useContext, useRef, useMemo, createContext } from 'react';
2
+ import { _ as __rest, a as __assign, b as __spreadArray } from '../_shared/esm/tslib.es6-w7hdJ3oZ.mjs';
3
+ import * as React from 'react';
4
+ import React__default, { useState, useEffect, useId as useId$1, useContext, useRef, createContext, useCallback, useMemo, useLayoutEffect, memo } from 'react';
4
5
  import { V as Visible } from '../_shared/esm/Visible-C4eEyTBM.mjs';
5
6
  import { c as classNames, g as getDefaultExportFromCjs } from '../_shared/esm/index-5C0-U8cc.mjs';
7
+ import { S as Surface, C as Context } from '../_shared/esm/Surface-C69KVzkY.mjs';
6
8
  import { s as suffixModifier } from '../_shared/esm/suffix-modifier-B_pO0UkF.mjs';
7
- import { C as Context, S as Surface } from '../_shared/esm/Surface-C69KVzkY.mjs';
8
- import { R as Root, P as Portal, O as Overlay, C as Content, T as Title } from '../_shared/esm/index-CjeQnMcn.mjs';
9
- import { e as useThemeElement } from '../_shared/esm/index-DkAfUbDx.mjs';
9
+ import { S as SemanticLink } from '../_shared/esm/SemanticLink-DfJjaHk2.mjs';
10
10
  import { T as Tooltip } from '../_shared/esm/Tooltip-DY8nS1to.mjs';
11
11
  import { T as ThemeIcon } from '../_shared/esm/ThemeIcon-B0n6cKRb.mjs';
12
12
  import { V as VisuallyHidden } from '../_shared/esm/VisuallyHidden-aSQ4RA1o.mjs';
13
+ import { S as SemanticButton } from '../_shared/esm/SemanticButton-NGAMAw3m.mjs';
14
+ import { R as Root, P as Portal, O as Overlay, C as Content, T as Title } from '../_shared/esm/index-CjeQnMcn.mjs';
15
+ import { e as useThemeElement } from '../_shared/esm/index-DkAfUbDx.mjs';
13
16
  import { I as Icon } from '../_shared/esm/Icon-CCUbr_AO.mjs';
14
17
  import { T as Text } from '../_shared/esm/Text-BAzOkkzN.mjs';
15
18
  import { C as ConditionalWrapper } from '../_shared/esm/ConditionalWrapper-CbEvXHTj.mjs';
16
- import { A as ArcBreakpoints } from '../_shared/esm/arc-breakpoints-ChQgbftE.mjs';
17
- import { P as Popover } from '../_shared/esm/Popover-DRQSgAog.mjs';
19
+ import { f as filterAttrs } from '../_shared/esm/filter-attrs-v_SweZXP.mjs';
20
+ import { H as Heading } from '../_shared/esm/Heading-Da-o0d5x.mjs';
21
+ import { V as VerticalSpace } from '../_shared/esm/VerticalSpace-BLWB02I7.mjs';
22
+ import { R as Rule } from '../_shared/esm/Rule-Bz3QPezk.mjs';
23
+ import '../_shared/esm/index-Spae4j7j.mjs';
24
+ import { A as ArcBreakpoints } from '../_shared/esm/arc-breakpoints-ANMn37k9.mjs';
25
+ import { P as Popover } from '../_shared/esm/Popover-Pjtmu_TN.mjs';
26
+ import { $ as $69cb30bb0017df05$export$be92b6f5f03c0fe9, c as $69cb30bb0017df05$export$54c2e3dc7acea9f5, a as $69cb30bb0017df05$export$41fb9f06171c75f4, b as $69cb30bb0017df05$export$7c6e2c02157bb7d2 } from '../_shared/esm/index-CfXVJXLq.mjs';
27
+ import { B as ButtonV2 } from '../_shared/esm/ButtonV2-CgjYgfZA.mjs';
28
+ import 'react/jsx-runtime';
29
+ import * as ReactDOM from 'react-dom';
18
30
  import { b as require_Symbol, a as requireIsSymbol } from '../_shared/esm/isSymbol-DgWNE2Tm.mjs';
19
31
  import { H as Hidden } from '../_shared/esm/Hidden-ByDYDWcI.mjs';
20
- import '../_shared/esm/filter-attrs-v_SweZXP.mjs';
21
- import '../_shared/esm/index-Spae4j7j.mjs';
32
+ import '../_shared/esm/index-Cgsjp3NL.mjs';
22
33
  import '../_shared/esm/Combination-BW0YAEZD.mjs';
23
- import 'react/jsx-runtime';
24
- import 'react-dom';
25
34
  import '../_shared/esm/index-BMmvMegf.mjs';
26
- import '../_shared/esm/index-Cgsjp3NL.mjs';
27
- import '../_shared/esm/index.es-99J0r2va.mjs';
35
+ import '../_shared/esm/SemanticHeading-DpEBq7pG.mjs';
36
+ import '../_shared/esm/index.es-Du5Lyvbp.mjs';
28
37
  import '../_shared/esm/index-Dd3yZ_Kk.mjs';
29
38
  import '../_shared/esm/index-DNvlT7G_.mjs';
39
+ import '../_shared/esm/index-C_mwuZg6.mjs';
40
+ import '../_shared/esm/index-Drb5ngQr.mjs';
41
+ import '../_shared/esm/Spinner-DvngCIwx.mjs';
30
42
 
31
43
  /**
32
44
  * Detect interaction mode
@@ -58,10 +70,55 @@ var useInteractionMode = function () {
58
70
  };
59
71
 
60
72
  var useUniqueString = function (value) {
61
- var id = useId();
73
+ var id = useId$1();
62
74
  return "".concat(value, "-").concat(id);
63
75
  };
64
76
 
77
+ var NavigationHeaderContainer = function (_a) {
78
+ var _b = _a.isPill, isPill = _b === void 0 ? false : _b, _c = _a.isExtended, isExtended = _c === void 0 ? false : _c, _d = _a.isFluid, isFluid = _d === void 0 ? false : _d, ref = _a.ref, backgroundColor = _a.backgroundColor, children = _a.children;
79
+ var backgroundColors = {
80
+ light: {
81
+ surface: "light-white",
82
+ classSuffix: "backgroundLight",
83
+ },
84
+ neutral: {
85
+ surface: "light-white",
86
+ classSuffix: "backgroundNeutral",
87
+ },
88
+ lightElevated: {
89
+ surface: "light-white",
90
+ classSuffix: "backgroundLightElevated",
91
+ },
92
+ transparentOnDark: {
93
+ surface: "dark-black",
94
+ classSuffix: "backgroundTransparent",
95
+ },
96
+ transparentOnLight: {
97
+ surface: "light-white",
98
+ classSuffix: "backgroundTransparent",
99
+ },
100
+ ghostedOnLight: {
101
+ surface: "light-white",
102
+ classSuffix: "backgroundGhosted",
103
+ },
104
+ ghostedOnDark: {
105
+ surface: "dark-black",
106
+ classSuffix: "backgroundGhosted",
107
+ },
108
+ };
109
+ return (React__default.createElement("div", { "data-testid": "NavigationHeader-container", className: classNames("arc-NavigationHeaderContainer--".concat(backgroundColors[backgroundColor].classSuffix), {
110
+ "arc-NavigationHeaderContainer--pill": isPill,
111
+ "arc-NavigationHeaderContainer--fullWidth": !isPill,
112
+ "arc-NavigationHeaderContainer--regular": !isExtended,
113
+ "arc-NavigationHeaderContainer--extended": isExtended,
114
+ "arc-NavigationHeaderContainer--fluid": isFluid,
115
+ }) },
116
+ React__default.createElement("div", { ref: ref, className: "arc-NavigationHeaderContainer-outer" },
117
+ React__default.createElement(Surface, { isTransparent: true, background: backgroundColors[backgroundColor].surface },
118
+ React__default.createElement("div", { className: "arc-NavigationHeaderContainer-inner" },
119
+ React__default.createElement("div", { className: "arc-NavigationHeaderContainer-content" }, children))))));
120
+ };
121
+
65
122
  var BtLogo = function () { return (React__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 50 50" },
66
123
  React__default.createElement("path", { d: "M26.225 16.475h12.45v3.65H34.5v13.35h-4.1v-13.35h-4.175v-3.65zM25 46.925c-12.1 0-21.925-9.825-21.925-21.924C3.075 12.9 12.9 3.075 25 3.075 37.1 3.075 46.926 12.9 46.926 25c0 12.1-9.825 21.926-21.926 21.926zM25 50c13.8 0 25-11.2 25-25C50 11.199 38.8 0 25 0S0 11.2 0 25c0 13.801 11.2 25 25 25zm-4.225-21.725c0-1.074-.674-1.8-1.825-1.8H16.2v3.55h2.75c1.15 0 1.825-.725 1.825-1.75zm-.5-6.824c0-.9-.574-1.526-1.55-1.526h-2.524v3.1h2.525c.975 0 1.55-.624 1.55-1.574zm4.65 7.025c0 3.225-2.275 5-5.524 5h-7.246v-17h6.771c3.275 0 5.5 1.674 5.5 4.75 0 1.399-.625 2.649-1.625 3.4 1.15.674 2.124 1.974 2.124 3.85z", fill: "currentColor" }))); };
67
124
 
@@ -85,7 +142,46 @@ var NavigationHeaderLogo = function (_a) {
85
142
  btWholesale: BtWholesaleLogo,
86
143
  };
87
144
  var icon = svg || React__default.createElement(logos[brand]);
88
- return (React__default.createElement("a", { className: classNames("arc-NavigationHeaderLogo", suffixModifier("arc-NavigationHeaderLogo--on", surface)), "aria-label": ariaLabel, onClick: onClick, href: href }, icon));
145
+ return (React__default.createElement(SemanticLink, { className: classNames("arc-NavigationHeaderLogo", suffixModifier("arc-NavigationHeaderLogo--on", surface)), "aria-label": ariaLabel, onClick: onClick, href: href }, icon));
146
+ };
147
+
148
+ var DELAY_DURATION = 500;
149
+
150
+ var NavigationHeaderButton = function (_a) {
151
+ var ref = _a.ref, isActive = _a.isActive, children = _a.children, onClick = _a.onClick, href = _a.href, _b = _a.isPadded, isPadded = _b === void 0 ? true : _b, props = __rest(_a, ["ref", "isActive", "children", "onClick", "href", "isPadded"]);
152
+ var surface = useContext(Context).surface;
153
+ var classes = classNames("arc-NavigationHeaderButton", suffixModifier("arc-NavigationHeaderButton--on", surface), {
154
+ "arc-NavigationHeaderButton--active": isActive,
155
+ "arc-NavigationHeaderButton--padded": isPadded,
156
+ });
157
+ var commonProps = {
158
+ className: classes,
159
+ onClick: onClick,
160
+ };
161
+ if (href) {
162
+ return (React__default.createElement(SemanticLink, __assign({}, props, commonProps, { ref: ref, href: href }), children));
163
+ }
164
+ return (React__default.createElement(SemanticButton, __assign({}, props, commonProps, { ref: ref }), children));
165
+ };
166
+
167
+ var getMenuColorConfig = function (background, pathway) {
168
+ var colorConfig = {
169
+ light: {
170
+ surface: "light-white",
171
+ menuColorType: "light",
172
+ },
173
+ dark: {
174
+ surface: "dark-black",
175
+ menuColorType: "dark",
176
+ },
177
+ };
178
+ switch (background) {
179
+ case "transparentOnDark":
180
+ case "ghostedOnDark":
181
+ return pathway === "invert" ? colorConfig.light : colorConfig.dark;
182
+ default:
183
+ return pathway === "invert" ? colorConfig.dark : colorConfig.light;
184
+ }
89
185
  };
90
186
 
91
187
  // src/check-element-visibility/check-element-visibility.ts
@@ -98,31 +194,109 @@ var checkElementVisibility = (element) => {
98
194
  }
99
195
  };
100
196
 
101
- var DELAY_DURATION = 500;
197
+ var useTriggerHidden = function (_a) {
198
+ var onTriggerHidden = _a.onTriggerHidden, triggerEl = _a.triggerEl;
199
+ useEffect(function () {
200
+ var resizeObserver = new ResizeObserver(function (entries) {
201
+ var entry = entries[0];
202
+ if (!checkElementVisibility(entry.target)) {
203
+ onTriggerHidden();
204
+ }
205
+ });
206
+ if (triggerEl) {
207
+ resizeObserver.observe(triggerEl);
208
+ }
209
+ return function () {
210
+ if (triggerEl) {
211
+ resizeObserver.unobserve(triggerEl);
212
+ }
213
+ };
214
+ }, [onTriggerHidden, triggerEl]);
215
+ };
102
216
 
103
- var NavigationHeaderInlineAction = function (_a) {
104
- var icon = _a.icon, text = _a.text, href = _a.href, onClick = _a.onClick;
217
+ var SideMenuHeader = function (_a) {
218
+ var children = _a.children, onCloseClick = _a.onCloseClick;
105
219
  var surface = useContext(Context).surface;
106
- var commonClasses = [
107
- "arc-NavigationHeaderInlineAction",
108
- suffixModifier("arc-NavigationHeaderInlineAction--on", surface),
109
- ];
110
- return (React__default.createElement(ConditionalWrapper, { condition: Boolean(href), wrapper: function (children) { return (React__default.createElement("a", { "aria-label": text, className: classNames.apply(void 0, __spreadArray(__spreadArray([], commonClasses, false), ["arc-NavigationHeaderInlineAction-link"], false)), href: href, onClick: onClick }, children)); }, fallback: function (children) { return (React__default.createElement("button", { "aria-label": text, className: classNames.apply(void 0, __spreadArray(__spreadArray([], commonClasses, false), ["arc-NavigationHeaderInlineAction-button"], false)), onClick: onClick }, children)); } },
111
- React__default.createElement("div", { className: "arc-NavigationHeaderInlineAction-content" },
112
- React__default.createElement(Icon, { "aria-hidden": true, icon: icon, size: 28 }),
113
- React__default.createElement(Text, { size: "l" }, text))));
220
+ return (React__default.createElement("div", { className: "arc-SideMenuHeader" },
221
+ React__default.createElement("div", { className: "arc-SideMenuHeader-closeButtonContainer" },
222
+ React__default.createElement(SemanticButton, { "aria-label": "close", onClick: onCloseClick, className: classNames("arc-SideMenuHeader-closeButton", suffixModifier("arc-SideMenuHeader-closeButton--on", surface)) },
223
+ React__default.createElement(ThemeIcon, { size: 32, icon: "navigationHeaderClose" }))),
224
+ React__default.createElement("div", { className: "arc-SideMenuHeader-logoContainer" },
225
+ React__default.createElement("div", { className: "arc-SideMenuHeader-logoWrapper" }, children))));
114
226
  };
115
227
 
116
- var NavigationHeaderButton = function (_a) {
117
- var ref = _a.ref, isActive = _a.isActive, children = _a.children, onClick = _a.onClick, _b = _a.isPadded, isPadded = _b === void 0 ? true : _b, props = __rest(_a, ["ref", "isActive", "children", "onClick", "isPadded"]);
228
+ var SideMenuDrawer = function (_a) {
229
+ var children = _a.children, onCloseAutoFocus = _a.onCloseAutoFocus, onInteractOutside = _a.onInteractOutside, onEscapeKeyDown = _a.onEscapeKeyDown, title = _a.title, drawerType = _a.drawerType, isOpen = _a.isOpen, colorType = _a.colorType, surface = _a.surface, menuPosition = _a.menuPosition;
230
+ var _b = useThemeElement(), themeElement = _b[0], setThemeElement = _b[1];
231
+ return (React__default.createElement("div", { ref: setThemeElement },
232
+ React__default.createElement(Root, { open: isOpen },
233
+ React__default.createElement(Portal, { container: themeElement },
234
+ React__default.createElement(Overlay, { className: "arc-SideMenuDrawer-overlay" },
235
+ React__default.createElement(Content, { "aria-describedby": undefined, className: classNames("arc-SideMenuDrawer-slider", suffixModifier("arc-SideMenuDrawer-slider--position", menuPosition), suffixModifier("arc-SideMenuDrawer-slider--on", colorType), suffixModifier("arc-SideMenuDrawer-slider--type", drawerType)), onCloseAutoFocus: onCloseAutoFocus, onEscapeKeyDown: onEscapeKeyDown, onInteractOutside: onInteractOutside, "aria-modal": "true" },
236
+ React__default.createElement(VisuallyHidden, null,
237
+ React__default.createElement(Title, null, title)),
238
+ React__default.createElement(Surface, { growVertically: true, isTransparent: true, background: surface }, children)))))));
239
+ };
240
+
241
+ var SideMenuNavSection = function (_a) {
242
+ var children = _a.children;
243
+ return (React__default.createElement("div", { className: "arc-SideMenuNavSection" }, children));
244
+ };
245
+
246
+ var getCommonProps = function (_a) {
247
+ var text = _a.text, onClick = _a.onClick;
248
+ return ({
249
+ className: "arc-SideMenuActions-item",
250
+ "aria-label": text,
251
+ onClick: onClick,
252
+ });
253
+ };
254
+ var SideMenuActions = function (_a) {
255
+ var showSeparator = _a.showSeparator, actions = _a.actions;
256
+ var id = useId$1();
118
257
  var surface = useContext(Context).surface;
119
- return (React__default.createElement("button", __assign({}, props, { ref: ref, onClick: onClick, className: classNames("arc-NavigationHeaderButton", suffixModifier("arc-NavigationHeaderButton--on", surface), {
120
- "arc-NavigationHeaderButton--active": isActive,
121
- "arc-NavigationHeaderButton--padded": isPadded,
122
- }) }), children));
258
+ return (React__default.createElement("div", { className: classNames("arc-SideMenuActions", suffixModifier("arc-SideMenuActions--on", surface)) },
259
+ React__default.createElement("div", { className: classNames("arc-SideMenuActions-wrapper", {
260
+ "arc-SideMenuActions--seperator": showSeparator,
261
+ }) }, actions.map(function (action, i) { return (React__default.createElement(ConditionalWrapper, { key: "".concat(id, "-action-{").concat(i, "}"), condition: Boolean(action.href), wrapper: function (children) { return (React__default.createElement(SemanticLink, __assign({}, getCommonProps(action), { href: action.href }), children)); }, fallback: function (children) { return (React__default.createElement(SemanticButton, __assign({}, getCommonProps(action)), children)); } },
262
+ React__default.createElement("div", { className: "arc-SideMenuActions-content" },
263
+ React__default.createElement("div", { className: classNames("arc-SideMenuActions-icon", {
264
+ "arc-SideMenuActions-icon--attention": action.isAttention,
265
+ }) },
266
+ React__default.createElement(Icon, { "aria-hidden": true, icon: action.icon, size: 28 })),
267
+ React__default.createElement(Text, { size: "l" }, action.text)))); }))));
123
268
  };
124
269
 
125
- var NavigationHeaderDisclosure = function (_a) {
270
+ var SideMenuLink = function (_a) {
271
+ var ref = _a.ref, href = _a.href, onClick = _a.onClick, text = _a.text, props = __rest(_a, ["ref", "href", "onClick", "text"]);
272
+ var surface = useContext(Context).surface;
273
+ var commonProps = __assign({ "aria-label": text, onClick: onClick, className: classNames("arc-SideMenuLink", suffixModifier("arc-SideMenuLink--on", surface)) }, filterAttrs(props));
274
+ return (React__default.createElement(ConditionalWrapper, { condition: Boolean(href), wrapper: function (children) { return (React__default.createElement(SemanticLink, __assign({}, commonProps, { href: href, ref: ref }), children)); }, fallback: function (children) { return (React__default.createElement(SemanticButton, __assign({}, commonProps, { ref: ref }), children)); } },
275
+ React__default.createElement("div", { className: "arc-SideMenuLink-text" }, text),
276
+ React__default.createElement("span", { className: "arc-SideMenuLink-icon" },
277
+ React__default.createElement(ThemeIcon, { icon: "navigationHeaderMenuLinkLarge" }))));
278
+ };
279
+
280
+ // src/get-focusable-elements/get-focusable-elements.ts
281
+ var getFocusableElements = (rootElement) => {
282
+ const nodes = [];
283
+ const walker = document.createTreeWalker(
284
+ rootElement,
285
+ NodeFilter.SHOW_ELEMENT,
286
+ {
287
+ acceptNode: (node) => {
288
+ const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
289
+ if (node.disabled || node.hidden || isHiddenInput || !checkElementVisibility(node))
290
+ return NodeFilter.FILTER_SKIP;
291
+ return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
292
+ }
293
+ }
294
+ );
295
+ while (walker.nextNode()) nodes.push(walker.currentNode);
296
+ return nodes;
297
+ };
298
+
299
+ var SideMenuDisclosure = function (_a) {
126
300
  var heading = _a.heading, children = _a.children;
127
301
  var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
128
302
  var surface = useContext(Context).surface;
@@ -132,369 +306,2382 @@ var NavigationHeaderDisclosure = function (_a) {
132
306
  setIsOpen(function (isOpen) { return !isOpen; });
133
307
  };
134
308
  useEffect(function () {
309
+ var _a;
135
310
  if (containerRef.current && containerRef.current.firstChild && isOpen) {
136
- containerRef.current.firstChild.focus();
311
+ (_a = getFocusableElements(containerRef.current)[0]) === null || _a === void 0 ? void 0 : _a.focus();
137
312
  }
138
313
  }, [isOpen]);
139
- return (React__default.createElement("details", { className: classNames("arc-NavigationHeaderDisclosure", suffixModifier("arc-NavigationHeaderDisclosure--on", surface)), open: isOpen },
140
- React__default.createElement("summary", { "aria-expanded": isOpen, onClick: handleOnClick, className: "arc-NavigationHeaderDisclosure-summary" },
141
- React__default.createElement("span", { className: "arc-NavigationHeaderDisclosure-heading" }, heading),
142
- React__default.createElement("span", { className: "arc-NavigationHeaderDisclosure-icon" },
143
- React__default.createElement(Visible, { xs: true, s: true },
144
- React__default.createElement(ThemeIcon, { size: 20, icon: "navigationHeaderDisclosure" })),
145
- React__default.createElement(Visible, { m: true, l: true },
146
- React__default.createElement(ThemeIcon, { size: 24, icon: "navigationHeaderDisclosure" })),
147
- React__default.createElement(Visible, { xl: true, xxl: true },
148
- React__default.createElement(ThemeIcon, { size: 28, icon: "navigationHeaderDisclosure" })))),
149
- React__default.createElement("div", { ref: containerRef, className: "arc-NavigationHeaderDisclosure-details" }, children)));
314
+ return (React__default.createElement("details", { className: classNames("arc-SideMenuDisclosure", suffixModifier("arc-SideMenuDisclosure--on", surface)), open: isOpen },
315
+ React__default.createElement("summary", { "aria-expanded": isOpen, onClick: handleOnClick, className: "arc-SideMenuDisclosure-summary" },
316
+ React__default.createElement("span", { className: "arc-SideMenuDisclosure-heading" }, heading),
317
+ React__default.createElement("span", { className: "arc-SideMenuDisclosure-icon" },
318
+ React__default.createElement(ThemeIcon, { size: 20, icon: "navigationHeaderDisclosure" }))),
319
+ React__default.createElement("div", { ref: containerRef, className: "arc-SideMenuDisclosure-content" }, children)));
320
+ };
321
+
322
+ var createNavigationHeaderContext = function (errorMessage) {
323
+ var componentContext = createContext(null);
324
+ var useComponentContext = function () {
325
+ var context = useContext(componentContext);
326
+ if (!context) {
327
+ throw new Error(errorMessage);
328
+ }
329
+ return context;
330
+ };
331
+ return [componentContext, useComponentContext];
332
+ };
333
+
334
+ var _a$2 = createNavigationHeaderContext("NavigationHeaderSideMenu sub components must be used within NavigationHeaderSideMenu"), NavigationHeaderSideMenuContext = _a$2[0], useNavigationHeaderSideMenuContext = _a$2[1];
335
+
336
+ var SideMenuSubMenu = function (_a) {
337
+ var children = _a.children, heading = _a.heading, isOpen = _a.isOpen, onBackClick = _a.onBackClick, onCloseAutoFocus = _a.onCloseAutoFocus, supportingText = _a.supportingText, _b = _a.headingSize, headingSize = _b === void 0 ? "l" : _b, _c = _a.backButtonLabel, backButtonLabel = _c === void 0 ? "Back" : _c, _d = _a.backButtonAriaLabel, backButtonAriaLabel = _d === void 0 ? "Back to main menu" : _d;
338
+ var _e = useNavigationHeaderSideMenuContext(), menuColorConfig = _e.menuColorConfig, menuPosition = _e.menuPosition, onEscapeKeyDown = _e.onEscapeKeyDown, closeMenu = _e.closeMenu;
339
+ return (React__default.createElement(React__default.Fragment, null,
340
+ React__default.createElement(SideMenuDrawer, { drawerType: "sub", title: "Secondary menu", isOpen: isOpen, onCloseAutoFocus: onCloseAutoFocus, colorType: menuColorConfig.menuColorType, surface: menuColorConfig.surface, menuPosition: menuPosition, onEscapeKeyDown: onEscapeKeyDown, onInteractOutside: closeMenu },
341
+ React__default.createElement(SideMenuHeader, { onCloseClick: closeMenu },
342
+ React__default.createElement(SemanticButton, { className: classNames("arc-SideMenuSubMenu-backButton", suffixModifier("arc-SideMenuSubMenu-backButton--on", menuColorConfig.menuColorType)), "aria-label": backButtonAriaLabel, onClick: onBackClick },
343
+ React__default.createElement("div", { className: "arc-SideMenuSubMenu-backButtonIcon" },
344
+ React__default.createElement(ThemeIcon, { icon: "navigationHeaderSideMenuBack", size: 32 })),
345
+ React__default.createElement("div", { className: "arc-SideMenuSubMenu-backButtonText" }, backButtonLabel))),
346
+ React__default.createElement(SideMenuNavSection, null,
347
+ React__default.createElement("div", { className: "arc-SideMenuSubMenu-heading" },
348
+ React__default.createElement(Heading, { size: headingSize }, heading),
349
+ supportingText && (React__default.createElement(React__default.Fragment, null,
350
+ React__default.createElement(VerticalSpace, { size: "4" }),
351
+ React__default.createElement(Text, { tone: "muted", size: "s" }, supportingText)))),
352
+ children))));
353
+ };
354
+
355
+ var ArrowRightIcon = function () { return (React__default.createElement("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
356
+ React__default.createElement("path", { d: "M14.0306 8.52927L9.53063 13.0293C9.38973 13.1702 9.19863 13.2493 8.99938 13.2493C8.80012 13.2493 8.60902 13.1702 8.46813 13.0293C8.32723 12.8884 8.24807 12.6973 8.24807 12.498C8.24807 12.2988 8.32723 12.1077 8.46813 11.9668L11.6875 8.74864H2.5C2.30109 8.74864 2.11032 8.66963 1.96967 8.52897C1.82902 8.38832 1.75 8.19756 1.75 7.99864C1.75 7.79973 1.82902 7.60897 1.96967 7.46831C2.11032 7.32766 2.30109 7.24864 2.5 7.24864H11.6875L8.46937 4.02864C8.32848 3.88775 8.24932 3.69665 8.24932 3.49739C8.24932 3.29814 8.32848 3.10704 8.46937 2.96614C8.61027 2.82525 8.80137 2.74609 9.00062 2.74609C9.19988 2.74609 9.39098 2.82525 9.53187 2.96614L14.0319 7.46614C14.1018 7.53592 14.1573 7.61881 14.1951 7.71008C14.2329 7.80135 14.2523 7.89918 14.2522 7.99797C14.252 8.09675 14.2324 8.19454 14.1944 8.28572C14.1564 8.37689 14.1007 8.45966 14.0306 8.52927Z", fill: "currentColor" }))); };
357
+
358
+ var NavigationHeaderCta = function (_a) {
359
+ var href = _a.href, onClick = _a.onClick, text = _a.text, _b = _a.revealLinkIconOnHover, revealLinkIconOnHover = _b === void 0 ? false : _b;
360
+ var surface = useContext(Context).surface;
361
+ return (React__default.createElement(SemanticLink, { className: classNames("arc-NavigationHeaderCta", suffixModifier("arc-NavigationHeaderCta--on", surface)), onClick: onClick, href: href },
362
+ React__default.createElement("div", { className: "arc-NavigationHeaderCta-heading" },
363
+ React__default.createElement(Heading, { size: "xxs" }, text)),
364
+ React__default.createElement("div", { className: classNames("arc-NavigationHeaderCta-linkIcon", {
365
+ "arc-NavigationHeaderCta-linkIcon--revealLinkIconOnHover": revealLinkIconOnHover,
366
+ }) },
367
+ React__default.createElement(ArrowRightIcon, null))));
368
+ };
369
+
370
+ var NavigationHeaderCollapsingNavList = function (_a) {
371
+ var mainLink = _a.mainLink, description = _a.description, category = _a.category, links = _a.links, revealLinkIconOnHover = _a.revealLinkIconOnHover, _b = _a.autoFocusOnExpand, autoFocusOnExpand = _b === void 0 ? true : _b, _c = _a.background, background = _c === void 0 ? "dark" : _c, _d = _a.defaultOpen, defaultOpen = _d === void 0 ? false : _d;
372
+ var id = useId$1();
373
+ var surface = useContext(Context).surface;
374
+ var _e = useState(defaultOpen), isOpen = _e[0], setIsOpen = _e[1];
375
+ var containerRef = useRef(null);
376
+ var onClick = function (e) {
377
+ setIsOpen(e.currentTarget.open);
378
+ };
379
+ useEffect(function () {
380
+ if (containerRef.current &&
381
+ containerRef.current.firstChild &&
382
+ autoFocusOnExpand &&
383
+ isOpen) {
384
+ getFocusableElements(containerRef.current)[0].focus();
385
+ }
386
+ }, [isOpen, autoFocusOnExpand]);
387
+ return (React__default.createElement("details", { className: classNames("arc-NavigationHeaderCollapsingNavList-disclosure", suffixModifier("arc-NavigationHeaderCollapsingNavList-disclosure--on", surface), {
388
+ "arc-NavigationHeaderCollapsingNavList-disclosure--open": isOpen,
389
+ }), open: isOpen, onToggle: onClick },
390
+ React__default.createElement("summary", { className: classNames("arc-NavigationHeaderCollapsingNavList-disclosureSummary", suffixModifier("arc-NavigationHeaderCollapsingNavList-disclosureSummary--background", background)), "aria-expanded": isOpen },
391
+ React__default.createElement("div", { className: "arc-NavigationHeaderCollapsingNavList-disclosureSummaryHeading" },
392
+ React__default.createElement(Heading, { level: "2" }, category)),
393
+ React__default.createElement("span", { className: "arc-NavigationHeaderCollapsingNavList-disclosureSummaryIcon" },
394
+ React__default.createElement(ThemeIcon, { size: 16, icon: "disclosureExpand" }))),
395
+ React__default.createElement("div", { className: "arc-NavigationHeaderCollapsingNavList-content" },
396
+ React__default.createElement(VerticalSpace, { size: "8" }),
397
+ description && (React__default.createElement("div", { className: "arc-NavigationHeaderCollapsingNavList-description" },
398
+ React__default.createElement(Text, { size: "s", tone: "muted" }, description))),
399
+ React__default.createElement("div", { ref: containerRef },
400
+ mainLink && (React__default.createElement(React__default.Fragment, null,
401
+ React__default.createElement(VerticalSpace, { size: "16" }),
402
+ React__default.createElement(NavigationHeaderCta, __assign({}, mainLink, { revealLinkIconOnHover: revealLinkIconOnHover })),
403
+ React__default.createElement(VerticalSpace, { size: "8" }),
404
+ React__default.createElement(Rule, null))),
405
+ links && (React__default.createElement(React__default.Fragment, null,
406
+ React__default.createElement(VerticalSpace, { size: "8" }),
407
+ React__default.createElement("ul", { className: "arc-NavigationHeaderCollapsingNavList-list" }, links.map(function (link, i) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-megamenu-link-").concat(i) },
408
+ React__default.createElement(NavigationHeaderCta, __assign({}, link, { revealLinkIconOnHover: revealLinkIconOnHover })))); })))),
409
+ React__default.createElement(VerticalSpace, { size: "24" })))));
410
+ };
411
+
412
+ var SideMenuCategoryLinksItem = function (_a) {
413
+ var items = _a.items, text = _a.text, backButtonLabel = _a.backButtonLabel, backButtonAriaLabel = _a.backButtonAriaLabel, panelHeading = _a.panelHeading;
414
+ var id = useId$1();
415
+ var _b = useState(false), isDrawerOpen = _b[0], setIsDrawerOpen = _b[1];
416
+ var triggerRef = useRef(null);
417
+ var onItemClick = function () {
418
+ setIsDrawerOpen(true);
419
+ };
420
+ var onBackClick = function () {
421
+ setIsDrawerOpen(false);
422
+ };
423
+ var onCloseAutoFocus = function () {
424
+ var _a;
425
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
426
+ };
427
+ return (React__default.createElement(React__default.Fragment, null,
428
+ React__default.createElement(SideMenuLink, { "aria-haspopup": "dialog", "aria-expanded": isDrawerOpen, ref: triggerRef, onClick: onItemClick, text: text }),
429
+ React__default.createElement(SideMenuSubMenu, { isOpen: isDrawerOpen, heading: panelHeading.heading, supportingText: panelHeading.supportingText, onBackClick: onBackClick, onCloseAutoFocus: onCloseAutoFocus, backButtonLabel: backButtonLabel, backButtonAriaLabel: backButtonAriaLabel },
430
+ React__default.createElement("div", { className: "arc-SideMenuCategoryLinksItem-navItems" }, items.map(function (navItem, navItemIndex) { return (React__default.createElement(NavigationHeaderCollapsingNavList, __assign({}, navItem, { key: "".concat(id, "-side-menu-category-link-item-").concat(navItemIndex) }))); })))));
431
+ };
432
+
433
+ var NavigationHeaderFeatureCard = function (_a) {
434
+ var title = _a.title, description = _a.description, href = _a.href, onClick = _a.onClick, img = _a.img, label = _a.label, isFeatured = _a.isFeatured, props = __rest(_a, ["title", "description", "href", "onClick", "img", "label", "isFeatured"]);
435
+ return (React__default.createElement("div", __assign({ className: classNames("arc-NavigationHeaderFeatureCard", {
436
+ "arc-NavigationHeaderFeatureCard--featured": isFeatured,
437
+ }) }, filterAttrs(props)),
438
+ img && (React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-imgContainer" },
439
+ React__default.createElement("img", { alt: "", src: img, className: "arc-NavigationHeaderFeatureCard-img" }))),
440
+ React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-content" },
441
+ React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-header" },
442
+ label && (React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-label" },
443
+ React__default.createElement(Heading, { size: "xxxs" }, label))),
444
+ React__default.createElement(Heading, { level: "4", size: "s" },
445
+ React__default.createElement(SemanticLink, { className: "arc-NavigationHeaderFeatureCard-link", href: href, onClick: onClick }, title)),
446
+ React__default.createElement(VerticalSpace, { size: "16" })),
447
+ React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-body" }, description && (React__default.createElement(React__default.Fragment, null,
448
+ React__default.createElement(Text, { size: "s" }, description),
449
+ React__default.createElement(VerticalSpace, { size: "16" })))),
450
+ React__default.createElement("div", { className: "arc-NavigationHeaderFeatureCard-footer" },
451
+ React__default.createElement("span", { className: "arc-NavigationHeaderFeatureCard-cta" },
452
+ React__default.createElement(ArrowRightIcon, null))))));
453
+ };
454
+
455
+ var NavigationHeaderPanelLink = function (_a) {
456
+ var icon = _a.icon, href = _a.href, onClick = _a.onClick, heading = _a.heading, description = _a.description;
457
+ var surface = useContext(Context).surface;
458
+ return (React__default.createElement("div", { className: classNames("arc-NavigationHeaderPanelLink", suffixModifier("arc-NavigationHeaderPanelLink--on", surface)) },
459
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelLink-icon" },
460
+ React__default.createElement(Icon, { color: "brand", icon: icon, size: 88 })),
461
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelLink-textCol" },
462
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelLink-heading" },
463
+ React__default.createElement(Heading, { size: "s" },
464
+ React__default.createElement(SemanticLink, { className: "arc-NavigationHeaderPanelLink-link", href: href, onClick: onClick }, heading))),
465
+ React__default.createElement(VerticalSpace, { size: "12" }),
466
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelLink-description" },
467
+ React__default.createElement(Text, { size: "s" }, description))),
468
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelLink-ctaCol" },
469
+ React__default.createElement("span", { className: "arc-NavigationHeaderPanelLink-cta" },
470
+ React__default.createElement(ArrowRightIcon, null)))));
471
+ };
472
+
473
+ var MegaMenuSubMenu = function (_a) {
474
+ var item = _a.item, heading = _a.heading, backButtonLabel = _a.backButtonLabel, backButtonAriaLabel = _a.backButtonAriaLabel;
475
+ var id = useId$1();
476
+ var triggerRef = useRef(null);
477
+ var _b = useState(false), isDrawerOpen = _b[0], setIsDrawerOpen = _b[1];
478
+ var menuColorConfig = useNavigationHeaderSideMenuContext().menuColorConfig;
479
+ var onItemClick = function () {
480
+ setIsDrawerOpen(true);
481
+ };
482
+ var onBackClick = function () {
483
+ setIsDrawerOpen(false);
484
+ };
485
+ var onCloseAutoFocus = function () {
486
+ var _a;
487
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
488
+ };
489
+ return (React__default.createElement(React__default.Fragment, null,
490
+ React__default.createElement(SemanticButton, { "aria-haspopup": "dialog", "aria-expanded": isDrawerOpen, ref: triggerRef, "aria-label": item.triggerText, className: classNames("arc-SideMenuMegaMenuItem-button", suffixModifier("arc-SideMenuMegaMenuItem-button--on", menuColorConfig.menuColorType)), onClick: onItemClick },
491
+ React__default.createElement("div", { className: "arc-SideMenuMegaMenuItem-buttonIcon" },
492
+ React__default.createElement(Icon, { icon: item.icon, size: 32 })),
493
+ React__default.createElement("div", { className: "arc-SideMenuMegaMenuItem-buttonText" },
494
+ React__default.createElement(Heading, { size: "xxs" }, item.triggerText))),
495
+ React__default.createElement(SideMenuSubMenu, { isOpen: isDrawerOpen, heading: heading, headingSize: "s", onBackClick: onBackClick, onCloseAutoFocus: onCloseAutoFocus, backButtonLabel: backButtonLabel, backButtonAriaLabel: backButtonAriaLabel },
496
+ React__default.createElement(NavigationHeaderPanelLink, __assign({}, item.panelLink, { icon: item.icon })),
497
+ React__default.createElement(VerticalSpace, { size: "16" }),
498
+ React__default.createElement("div", { className: "arc-SideMenuMegaMenuItem-navItems" }, item.items.map(function (navItem, navItemIndex) { return (React__default.createElement(NavigationHeaderCollapsingNavList, __assign({}, navItem, { key: "".concat(id, "-side-mega-menu-drawer-navItem-").concat(navItemIndex) }))); })))));
499
+ };
500
+ var SideMenuMegaMenuItem = function (_a) {
501
+ var featureCards = _a.featureCards, text = _a.text, panelHeading = _a.panelHeading, tabs = _a.tabs, backButtonLabel = _a.backButtonLabel, backButtonAriaLabel = _a.backButtonAriaLabel;
502
+ var id = useId$1();
503
+ return (React__default.createElement(SideMenuDisclosure, { heading: text },
504
+ tabs.map(function (item, itemIndex) { return (React__default.createElement(MegaMenuSubMenu, { key: "".concat(id, "-side-menu-mega-menu-item-").concat(itemIndex), item: item, heading: panelHeading.heading, backButtonLabel: backButtonLabel, backButtonAriaLabel: backButtonAriaLabel })); }),
505
+ featureCards && (React__default.createElement(Surface, { isTransparent: true, background: "light-white" },
506
+ React__default.createElement("div", { className: "arc-SideMenuMegaMenuItem-featureCards" },
507
+ React__default.createElement("div", { className: "arc-SideMenuMegaMenuItem-featureCardContainer" }, featureCards.map(function (card, cardIndex) { return (React__default.createElement(NavigationHeaderFeatureCard, { title: card.title, href: card.href, isFeatured: card.isFeatured, label: card.label, onClick: card.onClick, key: "".concat(id, "-side-menu-mega-menu-card-").concat(cardIndex) })); })))))));
150
508
  };
151
509
 
152
- var NavigationHeaderMenuLink = function (_a) {
153
- var href = _a.href, onClick = _a.onClick, text = _a.text, _b = _a.size, size = _b === void 0 ? "l" : _b;
510
+ var SideMenuNavItem = function (_a) {
511
+ var navItem = _a.navItem;
512
+ var id = useId$1();
513
+ return (React__default.createElement(React__default.Fragment, null,
514
+ navItem.type === "link" && (React__default.createElement(SideMenuLink, { href: navItem.href, onClick: navItem.onClick, text: navItem.text })),
515
+ navItem.type === "levelTwo" && (React__default.createElement(SideMenuDisclosure, { heading: navItem.text }, navItem.items.map(function (link, linkIndex) { return (React__default.createElement(NavigationHeaderCta, { key: "".concat(id, "-side-menu-level-two-link-item-").concat(linkIndex), href: link.href, onClick: link.onClick, text: link.text })); }))),
516
+ navItem.type === "categoryLinks" && (React__default.createElement(SideMenuCategoryLinksItem, __assign({}, navItem))),
517
+ navItem.type === "megamenu" && React__default.createElement(SideMenuMegaMenuItem, __assign({}, navItem))));
518
+ };
519
+
520
+ var SideMenuNavList = function (_a) {
521
+ var children = _a.children;
522
+ return (React__default.createElement("nav", null,
523
+ React__default.createElement("ul", { className: "arc-SideMenuNavList" }, children)));
524
+ };
525
+
526
+ var NavigationHeaderSideMenu = function (_a) {
527
+ var navItems = _a.navItems, children = _a.children, actions = _a.actions, header = _a.header, footer = _a.footer, logo = _a.logo, background = _a.background, onOpenChange = _a.onOpenChange, trigger = _a.trigger, menuPosition = _a.menuPosition, _b = _a.showLogo, showLogo = _b === void 0 ? true : _b, _c = _a.tooltip, tooltip = _c === void 0 ? "Menu" : _c, _d = _a.pathway, pathway = _d === void 0 ? "invert" : _d, _e = _a.triggerAriaLabel, triggerAriaLabel = _e === void 0 ? "Open menu" : _e;
528
+ var id = useId$1();
529
+ var _f = useState(false), isMenuOpen = _f[0], setIsMenuOpen = _f[1];
530
+ var triggerRef = useRef(null);
531
+ var mainContentRef = useRef(null);
532
+ var _g = useState("pointer"), interactionMode = _g[0], setInterActionMode = _g[1];
533
+ useEffect(function () {
534
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isMenuOpen);
535
+ }, [isMenuOpen, onOpenChange]);
536
+ useTriggerHidden({
537
+ triggerEl: triggerRef.current,
538
+ onTriggerHidden: function () {
539
+ closeMenu();
540
+ },
541
+ });
542
+ var closeMenu = useCallback(function () {
543
+ setIsMenuOpen(false);
544
+ }, [setIsMenuOpen]);
545
+ var onEscapeKeyDown = useCallback(function () {
546
+ setInterActionMode("keyboard");
547
+ closeMenu();
548
+ }, [closeMenu]);
549
+ var onSideMenuMouseDown = function () {
550
+ setInterActionMode("pointer");
551
+ };
552
+ var onSideMenuKeyDown = function () {
553
+ setInterActionMode("keyboard");
554
+ };
555
+ var focusTriggerElement = function () {
556
+ var _a;
557
+ interactionMode === "keyboard" && ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus());
558
+ };
559
+ var menuColorConfig = getMenuColorConfig(background, pathway);
560
+ var contextValue = useMemo(function () { return ({ menuPosition: menuPosition, menuColorConfig: menuColorConfig, onEscapeKeyDown: onEscapeKeyDown, closeMenu: closeMenu }); }, [menuPosition, menuColorConfig, onEscapeKeyDown, closeMenu]);
561
+ return (React__default.createElement(NavigationHeaderSideMenuContext.Provider, { value: contextValue },
562
+ React__default.createElement("div", { className: "arc-NavigationHeaderSideMenu", onMouseDown: onSideMenuMouseDown, onKeyDown: onSideMenuKeyDown },
563
+ React__default.createElement(Tooltip, { delayDuration: DELAY_DURATION, asChild: true, title: tooltip, side: "bottom" },
564
+ React__default.createElement(NavigationHeaderButton, { ref: triggerRef, isPadded: Boolean(trigger) || false, "aria-expanded": isMenuOpen, "aria-label": isMenuOpen ? "close menu" : triggerAriaLabel, onClick: function () { return setIsMenuOpen(!isMenuOpen); } },
565
+ trigger || (React__default.createElement("div", { className: "arc-NavigationHeaderSideMenu-trigger" }, React__default.createElement(ThemeIcon, { icon: "siteHeaderBurger", size: 24 }))),
566
+ React__default.createElement(VisuallyHidden, null, isMenuOpen ? "close menu" : "open menu"))),
567
+ React__default.createElement(SideMenuDrawer, { drawerType: "main", title: "Navigation menu", menuPosition: menuPosition, isOpen: isMenuOpen, colorType: menuColorConfig.menuColorType, surface: menuColorConfig.surface, onCloseAutoFocus: focusTriggerElement, onEscapeKeyDown: onEscapeKeyDown, onInteractOutside: closeMenu },
568
+ React__default.createElement("div", { className: "arc-NavigationHeaderSideMenu-container" },
569
+ React__default.createElement("div", { className: "arc-NavigationHeaderSideMenu-mainContent" },
570
+ showLogo && (React__default.createElement(SideMenuHeader, { onCloseClick: closeMenu },
571
+ React__default.createElement(NavigationHeaderLogo, __assign({}, logo)))),
572
+ React__default.createElement("div", { ref: mainContentRef },
573
+ header && (React__default.createElement("div", { className: classNames("arc-NavigationHeaderSideMenu-topContent", {
574
+ "arc-NavigationHeaderSideMenu-topContent--bottomSpacing": !navItems,
575
+ }) }, header)),
576
+ navItems && !children && (React__default.createElement(SideMenuNavSection, null,
577
+ React__default.createElement(SideMenuNavList, null, navItems === null || navItems === void 0 ? void 0 : navItems.map(function (navItem, navItemIndex) { return (React__default.createElement(React__default.Fragment, { key: "".concat(id, "-side-nav-item-").concat(navItemIndex) },
578
+ React__default.createElement("li", { className: classNames({
579
+ "arc-NavigationHeaderSideMenu--separator": navItem.isSeparator,
580
+ }, suffixModifier("arc-NavigationHeaderSideMenu--separatorOn", menuColorConfig.menuColorType)) },
581
+ React__default.createElement(SideMenuNavItem, { navItem: navItem })))); })))),
582
+ children && (React__default.createElement(SideMenuNavSection, null, children)),
583
+ actions && (React__default.createElement(SideMenuActions, { showSeparator: Boolean(navItems || header), actions: actions })))),
584
+ footer && (React__default.createElement("div", { className: "arc-NavigationHeaderSideMenu-footer" }, footer)))))));
585
+ };
586
+
587
+ var NavigationHeaderNavLink = function (_a) {
588
+ var ref = _a.ref, text = _a.text, onClick = _a.onClick, href = _a.href, borderRadiusSize = _a.borderRadiusSize;
154
589
  var surface = useContext(Context).surface;
155
- return (React__default.createElement("a", { "aria-label": text, href: href, onClick: onClick, className: classNames("arc-NavigationHeaderMenuLink", suffixModifier("arc-NavigationHeaderMenuLink--on", surface), suffixModifier("arc-NavigationHeaderMenuLink--size", size)) },
156
- React__default.createElement("div", { className: "arc-NavigationHeaderMenuLink-text" }, text),
157
- React__default.createElement("span", { className: "arc-NavigationHeaderMenuLink-icon" },
158
- size === "s" && (React__default.createElement("div", { className: "arc-NavigationHeaderMenuLink-smallIconContainer" },
159
- React__default.createElement(ThemeIcon, { icon: "navigationHeaderMenuLinkSmall" }))),
160
- size === "l" && (React__default.createElement(React__default.Fragment, null,
161
- React__default.createElement(Visible, { xs: true, s: true },
162
- React__default.createElement(ThemeIcon, { size: 20, icon: "navigationHeaderMenuLinkLarge" })),
163
- React__default.createElement(Visible, { m: true, l: true },
164
- React__default.createElement(ThemeIcon, { size: 24, icon: "navigationHeaderMenuLinkLarge" })),
165
- React__default.createElement(Visible, { xl: true, xxl: true },
166
- React__default.createElement(ThemeIcon, { size: 28, icon: "navigationHeaderMenuLinkLarge" })))))));
590
+ return (React__default.createElement(SemanticLink, { ref: ref, href: href, onClick: onClick, className: classNames("arc-NavigationHeaderNavLink", suffixModifier("arc-NavigationHeaderNavLink--borderRadiusSize", borderRadiusSize), suffixModifier("arc-NavigationHeaderNavLink--on", surface)) },
591
+ React__default.createElement(Text, null, text)));
592
+ };
593
+
594
+ var NavigationHeaderDropdown = function (_a) {
595
+ var children = _a.children, trigger = _a.trigger, ariaLabel = _a.ariaLabel, tooltip = _a.tooltip, onClick = _a.onClick;
596
+ var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
597
+ var triggerRef = useRef(null);
598
+ var containerRef = useRef(null);
599
+ var interactionMode = useInteractionMode().interactionMode;
600
+ useTriggerHidden({
601
+ triggerEl: triggerRef.current,
602
+ onTriggerHidden: function () {
603
+ setIsOpen(false);
604
+ },
605
+ });
606
+ // if focus isnt going anywhere else and closed via keyboard, return focus to the trigger
607
+ var onCloseAutoFocus = function () {
608
+ var _a, _b;
609
+ if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) === "BODY" &&
610
+ interactionMode === "keyboard") {
611
+ (_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.focus();
612
+ }
613
+ };
614
+ // Only count it as an outside interaction if the trigger isnt being clicked.
615
+ var handleOutSideInteraction = function (event) {
616
+ var _a;
617
+ if (!((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.currentTarget))) {
618
+ setIsOpen(false);
619
+ }
620
+ };
621
+ // Find the first focusable element.
622
+ var focusOnFirstElement = function () {
623
+ var _a;
624
+ (_a = getFocusableElements(containerRef.current)[0]) === null || _a === void 0 ? void 0 : _a.focus({
625
+ preventScroll: true,
626
+ });
627
+ };
628
+ var toggleVisibility = function (e) {
629
+ onClick && onClick(e);
630
+ setIsOpen(function (isOpen) { return !isOpen; });
631
+ };
632
+ return (React__default.createElement(React__default.Fragment, null,
633
+ React__default.createElement(Popover, { useBespokeTrigger: true, constrainToViewport: false, align: "center", background: "light", arrow: true, sideOffset: 12, alignOffset: 0, open: isOpen, onCloseAutoFocus: onCloseAutoFocus, onOpenAutoFocus: focusOnFirstElement, onEscapeKeyDown: handleOutSideInteraction, onFocusOutside: handleOutSideInteraction, onInteractOutside: handleOutSideInteraction, onPointerDownOutside: handleOutSideInteraction, content: React__default.createElement("div", { ref: containerRef }, children), className: "arc-NavigationHeaderDropdown" }, tooltip ? (React__default.createElement(Tooltip, { asChild: true, title: tooltip, alignContent: "center", delayDuration: DELAY_DURATION, side: "bottom" },
634
+ React__default.createElement(NavigationHeaderButton, { isPadded: false, ref: triggerRef, "aria-label": ariaLabel, "aria-expanded": isOpen, "aria-haspopup": "dialog", "aria-describedby": undefined, onClick: toggleVisibility }, trigger))) : (React__default.createElement(NavigationHeaderButton, { ref: triggerRef, "aria-label": ariaLabel, "aria-expanded": isOpen, "aria-haspopup": "dialog", isActive: isOpen, onClick: toggleVisibility }, trigger)))));
635
+ };
636
+
637
+ var NavigationHeaderPanelHeading = function (_a) {
638
+ var heading = _a.heading, supportingText = _a.supportingText, link = _a.link, props = __rest(_a, ["heading", "supportingText", "link"]);
639
+ return (React__default.createElement("div", __assign({ className: "arc-NavigationHeaderPanelHeading" }, filterAttrs(props)),
640
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelHeading-grid" },
641
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelHeading-text" },
642
+ React__default.createElement(Heading, { level: "2", size: "m" }, heading)),
643
+ React__default.createElement("div", { className: "arc-NavigationHeaderPanelHeading-cta" }, link && (React__default.createElement(ButtonV2, { buttonStyle: "secondary", ariaLabel: link.ariaLabel, href: link.href, onClick: link.onClick, label: link.text })))),
644
+ React__default.createElement(VerticalSpace, { size: "4" }),
645
+ React__default.createElement(Text, { size: "s", tone: "muted" }, supportingText)));
646
+ };
647
+
648
+ var _a$1 = createNavigationHeaderContext("NavigationHeaderSubnav sub components must be used within NavigationHeaderSubnav"), SubNavContext = _a$1[0], useSubNavContext = _a$1[1];
649
+
650
+ var NavigationHeaderSubnav = function (_a) {
651
+ var children = _a.children, onOpenChange = _a.onOpenChange;
652
+ var id = useUniqueString("subnav");
653
+ var rootRef = useRef(null);
654
+ var triggerRef = useRef(null);
655
+ var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
656
+ var value = useMemo(function () { return ({ id: id, triggerRef: triggerRef, rootRef: rootRef, isOpen: isOpen, setIsOpen: setIsOpen, onOpenChange: onOpenChange }); }, [id, isOpen, onOpenChange]);
657
+ return (React__default.createElement(SubNavContext.Provider, { value: value },
658
+ React__default.createElement("div", { ref: rootRef }, children)));
659
+ };
660
+
661
+ var NavigationHeaderSubnavTrigger = function (_a) {
662
+ var _b;
663
+ var children = _a.children, asChild = _a.asChild, onClick = _a.onClick, ariaLabel = _a.ariaLabel, props = __rest(_a, ["children", "asChild", "onClick", "ariaLabel"]);
664
+ var subNavContext = useSubNavContext();
665
+ var onTriggerClick = function (e) {
666
+ var _a;
667
+ onClick && onClick(e);
668
+ subNavContext.setIsOpen(!subNavContext.isOpen);
669
+ (_a = subNavContext.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(subNavContext, !subNavContext.isOpen);
670
+ };
671
+ useTriggerHidden({
672
+ triggerEl: (_b = subNavContext.triggerRef) === null || _b === void 0 ? void 0 : _b.current,
673
+ onTriggerHidden: function () {
674
+ var _a;
675
+ subNavContext.setIsOpen(false);
676
+ (_a = subNavContext.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(subNavContext, false);
677
+ },
678
+ });
679
+ if (asChild) {
680
+ return React__default.cloneElement(children, __assign(__assign({ onClick: function (e) {
681
+ var _a, _b;
682
+ onTriggerClick(e);
683
+ (_b = (_a = children.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
684
+ }, ref: subNavContext.triggerRef }, props), children.props));
685
+ }
686
+ return (React__default.createElement(NavigationHeaderButton, { "aria-label": ariaLabel, "aria-haspopup": "dialog", "aria-describedby": undefined, onClick: onTriggerClick, ref: subNavContext.triggerRef, "aria-expanded": subNavContext.isOpen, isActive: subNavContext.isOpen }, children));
687
+ };
688
+
689
+ function hasWindow() {
690
+ return typeof window !== 'undefined';
691
+ }
692
+ function getNodeName(node) {
693
+ if (isNode(node)) {
694
+ return (node.nodeName || '').toLowerCase();
695
+ }
696
+ // Mocked nodes in testing environments may not be instances of Node. By
697
+ // returning `#document` an infinite loop won't occur.
698
+ // https://github.com/floating-ui/floating-ui/issues/2317
699
+ return '#document';
700
+ }
701
+ function getWindow(node) {
702
+ var _node$ownerDocument;
703
+ return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
704
+ }
705
+ function getDocumentElement(node) {
706
+ var _ref;
707
+ return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
708
+ }
709
+ function isNode(value) {
710
+ if (!hasWindow()) {
711
+ return false;
712
+ }
713
+ return value instanceof Node || value instanceof getWindow(value).Node;
714
+ }
715
+ function isElement(value) {
716
+ if (!hasWindow()) {
717
+ return false;
718
+ }
719
+ return value instanceof Element || value instanceof getWindow(value).Element;
720
+ }
721
+ function isHTMLElement(value) {
722
+ if (!hasWindow()) {
723
+ return false;
724
+ }
725
+ return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
726
+ }
727
+ function isShadowRoot(value) {
728
+ if (!hasWindow() || typeof ShadowRoot === 'undefined') {
729
+ return false;
730
+ }
731
+ return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
732
+ }
733
+ const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
734
+ function isOverflowElement(element) {
735
+ const {
736
+ overflow,
737
+ overflowX,
738
+ overflowY,
739
+ display
740
+ } = getComputedStyle$1(element);
741
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
742
+ }
743
+ const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
744
+ function isTableElement(element) {
745
+ return tableElements.has(getNodeName(element));
746
+ }
747
+ const topLayerSelectors = [':popover-open', ':modal'];
748
+ function isTopLayer(element) {
749
+ return topLayerSelectors.some(selector => {
750
+ try {
751
+ return element.matches(selector);
752
+ } catch (_e) {
753
+ return false;
754
+ }
755
+ });
756
+ }
757
+ const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
758
+ const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
759
+ const containValues = ['paint', 'layout', 'strict', 'content'];
760
+ function isContainingBlock(elementOrCss) {
761
+ const webkit = isWebKit();
762
+ const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
763
+
764
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
765
+ // https://drafts.csswg.org/css-transforms-2/#individual-transforms
766
+ return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
767
+ }
768
+ function getContainingBlock(element) {
769
+ let currentNode = getParentNode(element);
770
+ while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
771
+ if (isContainingBlock(currentNode)) {
772
+ return currentNode;
773
+ } else if (isTopLayer(currentNode)) {
774
+ return null;
775
+ }
776
+ currentNode = getParentNode(currentNode);
777
+ }
778
+ return null;
779
+ }
780
+ function isWebKit() {
781
+ if (typeof CSS === 'undefined' || !CSS.supports) return false;
782
+ return CSS.supports('-webkit-backdrop-filter', 'none');
783
+ }
784
+ const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
785
+ function isLastTraversableNode(node) {
786
+ return lastTraversableNodeNames.has(getNodeName(node));
787
+ }
788
+ function getComputedStyle$1(element) {
789
+ return getWindow(element).getComputedStyle(element);
790
+ }
791
+ function getNodeScroll(element) {
792
+ if (isElement(element)) {
793
+ return {
794
+ scrollLeft: element.scrollLeft,
795
+ scrollTop: element.scrollTop
796
+ };
797
+ }
798
+ return {
799
+ scrollLeft: element.scrollX,
800
+ scrollTop: element.scrollY
801
+ };
802
+ }
803
+ function getParentNode(node) {
804
+ if (getNodeName(node) === 'html') {
805
+ return node;
806
+ }
807
+ const result =
808
+ // Step into the shadow DOM of the parent of a slotted node.
809
+ node.assignedSlot ||
810
+ // DOM Element detected.
811
+ node.parentNode ||
812
+ // ShadowRoot detected.
813
+ isShadowRoot(node) && node.host ||
814
+ // Fallback.
815
+ getDocumentElement(node);
816
+ return isShadowRoot(result) ? result.host : result;
817
+ }
818
+ function getNearestOverflowAncestor(node) {
819
+ const parentNode = getParentNode(node);
820
+ if (isLastTraversableNode(parentNode)) {
821
+ return node.ownerDocument ? node.ownerDocument.body : node.body;
822
+ }
823
+ if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
824
+ return parentNode;
825
+ }
826
+ return getNearestOverflowAncestor(parentNode);
827
+ }
828
+ function getOverflowAncestors(node, list, traverseIframes) {
829
+ var _node$ownerDocument2;
830
+ if (list === void 0) {
831
+ list = [];
832
+ }
833
+ if (traverseIframes === void 0) {
834
+ traverseIframes = true;
835
+ }
836
+ const scrollableAncestor = getNearestOverflowAncestor(node);
837
+ const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
838
+ const win = getWindow(scrollableAncestor);
839
+ if (isBody) {
840
+ const frameElement = getFrameElement(win);
841
+ return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
842
+ }
843
+ return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
844
+ }
845
+ function getFrameElement(win) {
846
+ return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
847
+ }
848
+
849
+ /**
850
+ * Custom positioning reference element.
851
+ * @see https://floating-ui.com/docs/virtual-elements
852
+ */
853
+
854
+ const min = Math.min;
855
+ const max = Math.max;
856
+ const round = Math.round;
857
+ const floor = Math.floor;
858
+ const createCoords = v => ({
859
+ x: v,
860
+ y: v
861
+ });
862
+ function evaluate(value, param) {
863
+ return typeof value === 'function' ? value(param) : value;
864
+ }
865
+ function getSide(placement) {
866
+ return placement.split('-')[0];
867
+ }
868
+ function getAlignment(placement) {
869
+ return placement.split('-')[1];
870
+ }
871
+ function getOppositeAxis(axis) {
872
+ return axis === 'x' ? 'y' : 'x';
873
+ }
874
+ function getAxisLength(axis) {
875
+ return axis === 'y' ? 'height' : 'width';
876
+ }
877
+ const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
878
+ function getSideAxis(placement) {
879
+ return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
880
+ }
881
+ function getAlignmentAxis(placement) {
882
+ return getOppositeAxis(getSideAxis(placement));
883
+ }
884
+ function expandPaddingObject(padding) {
885
+ return {
886
+ top: 0,
887
+ right: 0,
888
+ bottom: 0,
889
+ left: 0,
890
+ ...padding
891
+ };
892
+ }
893
+ function getPaddingObject(padding) {
894
+ return typeof padding !== 'number' ? expandPaddingObject(padding) : {
895
+ top: padding,
896
+ right: padding,
897
+ bottom: padding,
898
+ left: padding
899
+ };
900
+ }
901
+ function rectToClientRect(rect) {
902
+ const {
903
+ x,
904
+ y,
905
+ width,
906
+ height
907
+ } = rect;
908
+ return {
909
+ width,
910
+ height,
911
+ top: y,
912
+ left: x,
913
+ right: x + width,
914
+ bottom: y + height,
915
+ x,
916
+ y
917
+ };
918
+ }
919
+
920
+ var isClient$1 = typeof document !== 'undefined';
921
+
922
+ var noop$1 = function noop() {};
923
+ var index$1 = isClient$1 ? useLayoutEffect : noop$1;
924
+
925
+ // https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379
926
+ const SafeReact$1 = {
927
+ ...React
928
+ };
929
+ const useInsertionEffect = SafeReact$1.useInsertionEffect;
930
+ const useSafeInsertionEffect = useInsertionEffect || (fn => fn());
931
+ function useEffectEvent(callback) {
932
+ const ref = React.useRef(() => {
933
+ if (process.env.NODE_ENV !== "production") {
934
+ throw new Error('Cannot call an event handler while rendering.');
935
+ }
936
+ });
937
+ useSafeInsertionEffect(() => {
938
+ ref.current = callback;
939
+ });
940
+ return React.useCallback(function () {
941
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
942
+ args[_key] = arguments[_key];
943
+ }
944
+ return ref.current == null ? void 0 : ref.current(...args);
945
+ }, []);
946
+ }
947
+
948
+ function computeCoordsFromPlacement(_ref, placement, rtl) {
949
+ let {
950
+ reference,
951
+ floating
952
+ } = _ref;
953
+ const sideAxis = getSideAxis(placement);
954
+ const alignmentAxis = getAlignmentAxis(placement);
955
+ const alignLength = getAxisLength(alignmentAxis);
956
+ const side = getSide(placement);
957
+ const isVertical = sideAxis === 'y';
958
+ const commonX = reference.x + reference.width / 2 - floating.width / 2;
959
+ const commonY = reference.y + reference.height / 2 - floating.height / 2;
960
+ const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
961
+ let coords;
962
+ switch (side) {
963
+ case 'top':
964
+ coords = {
965
+ x: commonX,
966
+ y: reference.y - floating.height
967
+ };
968
+ break;
969
+ case 'bottom':
970
+ coords = {
971
+ x: commonX,
972
+ y: reference.y + reference.height
973
+ };
974
+ break;
975
+ case 'right':
976
+ coords = {
977
+ x: reference.x + reference.width,
978
+ y: commonY
979
+ };
980
+ break;
981
+ case 'left':
982
+ coords = {
983
+ x: reference.x - floating.width,
984
+ y: commonY
985
+ };
986
+ break;
987
+ default:
988
+ coords = {
989
+ x: reference.x,
990
+ y: reference.y
991
+ };
992
+ }
993
+ switch (getAlignment(placement)) {
994
+ case 'start':
995
+ coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
996
+ break;
997
+ case 'end':
998
+ coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
999
+ break;
1000
+ }
1001
+ return coords;
1002
+ }
1003
+
1004
+ /**
1005
+ * Computes the `x` and `y` coordinates that will place the floating element
1006
+ * next to a given reference element.
1007
+ *
1008
+ * This export does not have any `platform` interface logic. You will need to
1009
+ * write one for the platform you are using Floating UI with.
1010
+ */
1011
+ const computePosition$1 = async (reference, floating, config) => {
1012
+ const {
1013
+ placement = 'bottom',
1014
+ strategy = 'absolute',
1015
+ middleware = [],
1016
+ platform
1017
+ } = config;
1018
+ const validMiddleware = middleware.filter(Boolean);
1019
+ const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
1020
+ let rects = await platform.getElementRects({
1021
+ reference,
1022
+ floating,
1023
+ strategy
1024
+ });
1025
+ let {
1026
+ x,
1027
+ y
1028
+ } = computeCoordsFromPlacement(rects, placement, rtl);
1029
+ let statefulPlacement = placement;
1030
+ let middlewareData = {};
1031
+ let resetCount = 0;
1032
+ for (let i = 0; i < validMiddleware.length; i++) {
1033
+ const {
1034
+ name,
1035
+ fn
1036
+ } = validMiddleware[i];
1037
+ const {
1038
+ x: nextX,
1039
+ y: nextY,
1040
+ data,
1041
+ reset
1042
+ } = await fn({
1043
+ x,
1044
+ y,
1045
+ initialPlacement: placement,
1046
+ placement: statefulPlacement,
1047
+ strategy,
1048
+ middlewareData,
1049
+ rects,
1050
+ platform,
1051
+ elements: {
1052
+ reference,
1053
+ floating
1054
+ }
1055
+ });
1056
+ x = nextX != null ? nextX : x;
1057
+ y = nextY != null ? nextY : y;
1058
+ middlewareData = {
1059
+ ...middlewareData,
1060
+ [name]: {
1061
+ ...middlewareData[name],
1062
+ ...data
1063
+ }
1064
+ };
1065
+ if (reset && resetCount <= 50) {
1066
+ resetCount++;
1067
+ if (typeof reset === 'object') {
1068
+ if (reset.placement) {
1069
+ statefulPlacement = reset.placement;
1070
+ }
1071
+ if (reset.rects) {
1072
+ rects = reset.rects === true ? await platform.getElementRects({
1073
+ reference,
1074
+ floating,
1075
+ strategy
1076
+ }) : reset.rects;
1077
+ }
1078
+ ({
1079
+ x,
1080
+ y
1081
+ } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
1082
+ }
1083
+ i = -1;
1084
+ }
1085
+ }
1086
+ return {
1087
+ x,
1088
+ y,
1089
+ placement: statefulPlacement,
1090
+ strategy,
1091
+ middlewareData
1092
+ };
1093
+ };
1094
+
1095
+ /**
1096
+ * Resolves with an object of overflow side offsets that determine how much the
1097
+ * element is overflowing a given clipping boundary on each side.
1098
+ * - positive = overflowing the boundary by that number of pixels
1099
+ * - negative = how many pixels left before it will overflow
1100
+ * - 0 = lies flush with the boundary
1101
+ * @see https://floating-ui.com/docs/detectOverflow
1102
+ */
1103
+ async function detectOverflow(state, options) {
1104
+ var _await$platform$isEle;
1105
+ if (options === void 0) {
1106
+ options = {};
1107
+ }
1108
+ const {
1109
+ x,
1110
+ y,
1111
+ platform,
1112
+ rects,
1113
+ elements,
1114
+ strategy
1115
+ } = state;
1116
+ const {
1117
+ boundary = 'clippingAncestors',
1118
+ rootBoundary = 'viewport',
1119
+ elementContext = 'floating',
1120
+ altBoundary = false,
1121
+ padding = 0
1122
+ } = evaluate(options, state);
1123
+ const paddingObject = getPaddingObject(padding);
1124
+ const altContext = elementContext === 'floating' ? 'reference' : 'floating';
1125
+ const element = elements[altBoundary ? altContext : elementContext];
1126
+ const clippingClientRect = rectToClientRect(await platform.getClippingRect({
1127
+ element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
1128
+ boundary,
1129
+ rootBoundary,
1130
+ strategy
1131
+ }));
1132
+ const rect = elementContext === 'floating' ? {
1133
+ x,
1134
+ y,
1135
+ width: rects.floating.width,
1136
+ height: rects.floating.height
1137
+ } : rects.reference;
1138
+ const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
1139
+ const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
1140
+ x: 1,
1141
+ y: 1
1142
+ } : {
1143
+ x: 1,
1144
+ y: 1
1145
+ };
1146
+ const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
1147
+ elements,
1148
+ rect,
1149
+ offsetParent,
1150
+ strategy
1151
+ }) : rect);
1152
+ return {
1153
+ top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
1154
+ bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
1155
+ left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
1156
+ right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
1157
+ };
1158
+ }
1159
+
1160
+ const originSides = /*#__PURE__*/new Set(['left', 'top']);
1161
+
1162
+ // For type backwards-compatibility, the `OffsetOptions` type was also
1163
+ // Derivable.
1164
+
1165
+ async function convertValueToCoords(state, options) {
1166
+ const {
1167
+ placement,
1168
+ platform,
1169
+ elements
1170
+ } = state;
1171
+ const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
1172
+ const side = getSide(placement);
1173
+ const alignment = getAlignment(placement);
1174
+ const isVertical = getSideAxis(placement) === 'y';
1175
+ const mainAxisMulti = originSides.has(side) ? -1 : 1;
1176
+ const crossAxisMulti = rtl && isVertical ? -1 : 1;
1177
+ const rawValue = evaluate(options, state);
1178
+
1179
+ // eslint-disable-next-line prefer-const
1180
+ let {
1181
+ mainAxis,
1182
+ crossAxis,
1183
+ alignmentAxis
1184
+ } = typeof rawValue === 'number' ? {
1185
+ mainAxis: rawValue,
1186
+ crossAxis: 0,
1187
+ alignmentAxis: null
1188
+ } : {
1189
+ mainAxis: rawValue.mainAxis || 0,
1190
+ crossAxis: rawValue.crossAxis || 0,
1191
+ alignmentAxis: rawValue.alignmentAxis
1192
+ };
1193
+ if (alignment && typeof alignmentAxis === 'number') {
1194
+ crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;
1195
+ }
1196
+ return isVertical ? {
1197
+ x: crossAxis * crossAxisMulti,
1198
+ y: mainAxis * mainAxisMulti
1199
+ } : {
1200
+ x: mainAxis * mainAxisMulti,
1201
+ y: crossAxis * crossAxisMulti
1202
+ };
1203
+ }
1204
+
1205
+ /**
1206
+ * Modifies the placement by translating the floating element along the
1207
+ * specified axes.
1208
+ * A number (shorthand for `mainAxis` or distance), or an axes configuration
1209
+ * object may be passed.
1210
+ * @see https://floating-ui.com/docs/offset
1211
+ */
1212
+ const offset$2 = function (options) {
1213
+ if (options === void 0) {
1214
+ options = 0;
1215
+ }
1216
+ return {
1217
+ name: 'offset',
1218
+ options,
1219
+ async fn(state) {
1220
+ var _middlewareData$offse, _middlewareData$arrow;
1221
+ const {
1222
+ x,
1223
+ y,
1224
+ placement,
1225
+ middlewareData
1226
+ } = state;
1227
+ const diffCoords = await convertValueToCoords(state, options);
1228
+
1229
+ // If the placement is the same and the arrow caused an alignment offset
1230
+ // then we don't need to change the positioning coordinates.
1231
+ if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
1232
+ return {};
1233
+ }
1234
+ return {
1235
+ x: x + diffCoords.x,
1236
+ y: y + diffCoords.y,
1237
+ data: {
1238
+ ...diffCoords,
1239
+ placement
1240
+ }
1241
+ };
1242
+ }
1243
+ };
1244
+ };
1245
+
1246
+ /**
1247
+ * Provides data that allows you to change the size of the floating element —
1248
+ * for instance, prevent it from overflowing the clipping boundary or match the
1249
+ * width of the reference element.
1250
+ * @see https://floating-ui.com/docs/size
1251
+ */
1252
+ const size$2 = function (options) {
1253
+ if (options === void 0) {
1254
+ options = {};
1255
+ }
1256
+ return {
1257
+ name: 'size',
1258
+ options,
1259
+ async fn(state) {
1260
+ var _state$middlewareData, _state$middlewareData2;
1261
+ const {
1262
+ placement,
1263
+ rects,
1264
+ platform,
1265
+ elements
1266
+ } = state;
1267
+ const {
1268
+ apply = () => {},
1269
+ ...detectOverflowOptions
1270
+ } = evaluate(options, state);
1271
+ const overflow = await detectOverflow(state, detectOverflowOptions);
1272
+ const side = getSide(placement);
1273
+ const alignment = getAlignment(placement);
1274
+ const isYAxis = getSideAxis(placement) === 'y';
1275
+ const {
1276
+ width,
1277
+ height
1278
+ } = rects.floating;
1279
+ let heightSide;
1280
+ let widthSide;
1281
+ if (side === 'top' || side === 'bottom') {
1282
+ heightSide = side;
1283
+ widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';
1284
+ } else {
1285
+ widthSide = side;
1286
+ heightSide = alignment === 'end' ? 'top' : 'bottom';
1287
+ }
1288
+ const maximumClippingHeight = height - overflow.top - overflow.bottom;
1289
+ const maximumClippingWidth = width - overflow.left - overflow.right;
1290
+ const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
1291
+ const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
1292
+ const noShift = !state.middlewareData.shift;
1293
+ let availableHeight = overflowAvailableHeight;
1294
+ let availableWidth = overflowAvailableWidth;
1295
+ if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
1296
+ availableWidth = maximumClippingWidth;
1297
+ }
1298
+ if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
1299
+ availableHeight = maximumClippingHeight;
1300
+ }
1301
+ if (noShift && !alignment) {
1302
+ const xMin = max(overflow.left, 0);
1303
+ const xMax = max(overflow.right, 0);
1304
+ const yMin = max(overflow.top, 0);
1305
+ const yMax = max(overflow.bottom, 0);
1306
+ if (isYAxis) {
1307
+ availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
1308
+ } else {
1309
+ availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
1310
+ }
1311
+ }
1312
+ await apply({
1313
+ ...state,
1314
+ availableWidth,
1315
+ availableHeight
1316
+ });
1317
+ const nextDimensions = await platform.getDimensions(elements.floating);
1318
+ if (width !== nextDimensions.width || height !== nextDimensions.height) {
1319
+ return {
1320
+ reset: {
1321
+ rects: true
1322
+ }
1323
+ };
1324
+ }
1325
+ return {};
1326
+ }
1327
+ };
1328
+ };
1329
+
1330
+ function getCssDimensions(element) {
1331
+ const css = getComputedStyle$1(element);
1332
+ // In testing environments, the `width` and `height` properties are empty
1333
+ // strings for SVG elements, returning NaN. Fallback to `0` in this case.
1334
+ let width = parseFloat(css.width) || 0;
1335
+ let height = parseFloat(css.height) || 0;
1336
+ const hasOffset = isHTMLElement(element);
1337
+ const offsetWidth = hasOffset ? element.offsetWidth : width;
1338
+ const offsetHeight = hasOffset ? element.offsetHeight : height;
1339
+ const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
1340
+ if (shouldFallback) {
1341
+ width = offsetWidth;
1342
+ height = offsetHeight;
1343
+ }
1344
+ return {
1345
+ width,
1346
+ height,
1347
+ $: shouldFallback
1348
+ };
1349
+ }
1350
+
1351
+ function unwrapElement(element) {
1352
+ return !isElement(element) ? element.contextElement : element;
1353
+ }
1354
+
1355
+ function getScale(element) {
1356
+ const domElement = unwrapElement(element);
1357
+ if (!isHTMLElement(domElement)) {
1358
+ return createCoords(1);
1359
+ }
1360
+ const rect = domElement.getBoundingClientRect();
1361
+ const {
1362
+ width,
1363
+ height,
1364
+ $
1365
+ } = getCssDimensions(domElement);
1366
+ let x = ($ ? round(rect.width) : rect.width) / width;
1367
+ let y = ($ ? round(rect.height) : rect.height) / height;
1368
+
1369
+ // 0, NaN, or Infinity should always fallback to 1.
1370
+
1371
+ if (!x || !Number.isFinite(x)) {
1372
+ x = 1;
1373
+ }
1374
+ if (!y || !Number.isFinite(y)) {
1375
+ y = 1;
1376
+ }
1377
+ return {
1378
+ x,
1379
+ y
1380
+ };
1381
+ }
1382
+
1383
+ const noOffsets = /*#__PURE__*/createCoords(0);
1384
+ function getVisualOffsets(element) {
1385
+ const win = getWindow(element);
1386
+ if (!isWebKit() || !win.visualViewport) {
1387
+ return noOffsets;
1388
+ }
1389
+ return {
1390
+ x: win.visualViewport.offsetLeft,
1391
+ y: win.visualViewport.offsetTop
1392
+ };
1393
+ }
1394
+ function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
1395
+ if (isFixed === void 0) {
1396
+ isFixed = false;
1397
+ }
1398
+ if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
1399
+ return false;
1400
+ }
1401
+ return isFixed;
1402
+ }
1403
+
1404
+ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
1405
+ if (includeScale === void 0) {
1406
+ includeScale = false;
1407
+ }
1408
+ if (isFixedStrategy === void 0) {
1409
+ isFixedStrategy = false;
1410
+ }
1411
+ const clientRect = element.getBoundingClientRect();
1412
+ const domElement = unwrapElement(element);
1413
+ let scale = createCoords(1);
1414
+ if (includeScale) {
1415
+ if (offsetParent) {
1416
+ if (isElement(offsetParent)) {
1417
+ scale = getScale(offsetParent);
1418
+ }
1419
+ } else {
1420
+ scale = getScale(element);
1421
+ }
1422
+ }
1423
+ const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
1424
+ let x = (clientRect.left + visualOffsets.x) / scale.x;
1425
+ let y = (clientRect.top + visualOffsets.y) / scale.y;
1426
+ let width = clientRect.width / scale.x;
1427
+ let height = clientRect.height / scale.y;
1428
+ if (domElement) {
1429
+ const win = getWindow(domElement);
1430
+ const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
1431
+ let currentWin = win;
1432
+ let currentIFrame = getFrameElement(currentWin);
1433
+ while (currentIFrame && offsetParent && offsetWin !== currentWin) {
1434
+ const iframeScale = getScale(currentIFrame);
1435
+ const iframeRect = currentIFrame.getBoundingClientRect();
1436
+ const css = getComputedStyle$1(currentIFrame);
1437
+ const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
1438
+ const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
1439
+ x *= iframeScale.x;
1440
+ y *= iframeScale.y;
1441
+ width *= iframeScale.x;
1442
+ height *= iframeScale.y;
1443
+ x += left;
1444
+ y += top;
1445
+ currentWin = getWindow(currentIFrame);
1446
+ currentIFrame = getFrameElement(currentWin);
1447
+ }
1448
+ }
1449
+ return rectToClientRect({
1450
+ width,
1451
+ height,
1452
+ x,
1453
+ y
1454
+ });
1455
+ }
1456
+
1457
+ // If <html> has a CSS width greater than the viewport, then this will be
1458
+ // incorrect for RTL.
1459
+ function getWindowScrollBarX(element, rect) {
1460
+ const leftScroll = getNodeScroll(element).scrollLeft;
1461
+ if (!rect) {
1462
+ return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
1463
+ }
1464
+ return rect.left + leftScroll;
1465
+ }
1466
+
1467
+ function getHTMLOffset(documentElement, scroll) {
1468
+ const htmlRect = documentElement.getBoundingClientRect();
1469
+ const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
1470
+ const y = htmlRect.top + scroll.scrollTop;
1471
+ return {
1472
+ x,
1473
+ y
1474
+ };
1475
+ }
1476
+
1477
+ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
1478
+ let {
1479
+ elements,
1480
+ rect,
1481
+ offsetParent,
1482
+ strategy
1483
+ } = _ref;
1484
+ const isFixed = strategy === 'fixed';
1485
+ const documentElement = getDocumentElement(offsetParent);
1486
+ const topLayer = elements ? isTopLayer(elements.floating) : false;
1487
+ if (offsetParent === documentElement || topLayer && isFixed) {
1488
+ return rect;
1489
+ }
1490
+ let scroll = {
1491
+ scrollLeft: 0,
1492
+ scrollTop: 0
1493
+ };
1494
+ let scale = createCoords(1);
1495
+ const offsets = createCoords(0);
1496
+ const isOffsetParentAnElement = isHTMLElement(offsetParent);
1497
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1498
+ if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1499
+ scroll = getNodeScroll(offsetParent);
1500
+ }
1501
+ if (isHTMLElement(offsetParent)) {
1502
+ const offsetRect = getBoundingClientRect(offsetParent);
1503
+ scale = getScale(offsetParent);
1504
+ offsets.x = offsetRect.x + offsetParent.clientLeft;
1505
+ offsets.y = offsetRect.y + offsetParent.clientTop;
1506
+ }
1507
+ }
1508
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1509
+ return {
1510
+ width: rect.width * scale.x,
1511
+ height: rect.height * scale.y,
1512
+ x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
1513
+ y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
1514
+ };
1515
+ }
1516
+
1517
+ function getClientRects(element) {
1518
+ return Array.from(element.getClientRects());
1519
+ }
1520
+
1521
+ // Gets the entire size of the scrollable document area, even extending outside
1522
+ // of the `<html>` and `<body>` rect bounds if horizontally scrollable.
1523
+ function getDocumentRect(element) {
1524
+ const html = getDocumentElement(element);
1525
+ const scroll = getNodeScroll(element);
1526
+ const body = element.ownerDocument.body;
1527
+ const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
1528
+ const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
1529
+ let x = -scroll.scrollLeft + getWindowScrollBarX(element);
1530
+ const y = -scroll.scrollTop;
1531
+ if (getComputedStyle$1(body).direction === 'rtl') {
1532
+ x += max(html.clientWidth, body.clientWidth) - width;
1533
+ }
1534
+ return {
1535
+ width,
1536
+ height,
1537
+ x,
1538
+ y
1539
+ };
1540
+ }
1541
+
1542
+ // Safety check: ensure the scrollbar space is reasonable in case this
1543
+ // calculation is affected by unusual styles.
1544
+ // Most scrollbars leave 15-18px of space.
1545
+ const SCROLLBAR_MAX = 25;
1546
+ function getViewportRect(element, strategy) {
1547
+ const win = getWindow(element);
1548
+ const html = getDocumentElement(element);
1549
+ const visualViewport = win.visualViewport;
1550
+ let width = html.clientWidth;
1551
+ let height = html.clientHeight;
1552
+ let x = 0;
1553
+ let y = 0;
1554
+ if (visualViewport) {
1555
+ width = visualViewport.width;
1556
+ height = visualViewport.height;
1557
+ const visualViewportBased = isWebKit();
1558
+ if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
1559
+ x = visualViewport.offsetLeft;
1560
+ y = visualViewport.offsetTop;
1561
+ }
1562
+ }
1563
+ const windowScrollbarX = getWindowScrollBarX(html);
1564
+ // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
1565
+ // visual width of the <html> but this is not considered in the size
1566
+ // of `html.clientWidth`.
1567
+ if (windowScrollbarX <= 0) {
1568
+ const doc = html.ownerDocument;
1569
+ const body = doc.body;
1570
+ const bodyStyles = getComputedStyle(body);
1571
+ const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
1572
+ const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
1573
+ if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
1574
+ width -= clippingStableScrollbarWidth;
1575
+ }
1576
+ } else if (windowScrollbarX <= SCROLLBAR_MAX) {
1577
+ // If the <body> scrollbar is on the left, the width needs to be extended
1578
+ // by the scrollbar amount so there isn't extra space on the right.
1579
+ width += windowScrollbarX;
1580
+ }
1581
+ return {
1582
+ width,
1583
+ height,
1584
+ x,
1585
+ y
1586
+ };
1587
+ }
1588
+
1589
+ const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
1590
+ // Returns the inner client rect, subtracting scrollbars if present.
1591
+ function getInnerBoundingClientRect(element, strategy) {
1592
+ const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
1593
+ const top = clientRect.top + element.clientTop;
1594
+ const left = clientRect.left + element.clientLeft;
1595
+ const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
1596
+ const width = element.clientWidth * scale.x;
1597
+ const height = element.clientHeight * scale.y;
1598
+ const x = left * scale.x;
1599
+ const y = top * scale.y;
1600
+ return {
1601
+ width,
1602
+ height,
1603
+ x,
1604
+ y
1605
+ };
1606
+ }
1607
+ function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
1608
+ let rect;
1609
+ if (clippingAncestor === 'viewport') {
1610
+ rect = getViewportRect(element, strategy);
1611
+ } else if (clippingAncestor === 'document') {
1612
+ rect = getDocumentRect(getDocumentElement(element));
1613
+ } else if (isElement(clippingAncestor)) {
1614
+ rect = getInnerBoundingClientRect(clippingAncestor, strategy);
1615
+ } else {
1616
+ const visualOffsets = getVisualOffsets(element);
1617
+ rect = {
1618
+ x: clippingAncestor.x - visualOffsets.x,
1619
+ y: clippingAncestor.y - visualOffsets.y,
1620
+ width: clippingAncestor.width,
1621
+ height: clippingAncestor.height
1622
+ };
1623
+ }
1624
+ return rectToClientRect(rect);
1625
+ }
1626
+ function hasFixedPositionAncestor(element, stopNode) {
1627
+ const parentNode = getParentNode(element);
1628
+ if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
1629
+ return false;
1630
+ }
1631
+ return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
1632
+ }
1633
+
1634
+ // A "clipping ancestor" is an `overflow` element with the characteristic of
1635
+ // clipping (or hiding) child elements. This returns all clipping ancestors
1636
+ // of the given element up the tree.
1637
+ function getClippingElementAncestors(element, cache) {
1638
+ const cachedResult = cache.get(element);
1639
+ if (cachedResult) {
1640
+ return cachedResult;
1641
+ }
1642
+ let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
1643
+ let currentContainingBlockComputedStyle = null;
1644
+ const elementIsFixed = getComputedStyle$1(element).position === 'fixed';
1645
+ let currentNode = elementIsFixed ? getParentNode(element) : element;
1646
+
1647
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
1648
+ while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
1649
+ const computedStyle = getComputedStyle$1(currentNode);
1650
+ const currentNodeIsContaining = isContainingBlock(currentNode);
1651
+ if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
1652
+ currentContainingBlockComputedStyle = null;
1653
+ }
1654
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1655
+ if (shouldDropCurrentNode) {
1656
+ // Drop non-containing blocks.
1657
+ result = result.filter(ancestor => ancestor !== currentNode);
1658
+ } else {
1659
+ // Record last containing block for next iteration.
1660
+ currentContainingBlockComputedStyle = computedStyle;
1661
+ }
1662
+ currentNode = getParentNode(currentNode);
1663
+ }
1664
+ cache.set(element, result);
1665
+ return result;
1666
+ }
1667
+
1668
+ // Gets the maximum area that the element is visible in due to any number of
1669
+ // clipping ancestors.
1670
+ function getClippingRect(_ref) {
1671
+ let {
1672
+ element,
1673
+ boundary,
1674
+ rootBoundary,
1675
+ strategy
1676
+ } = _ref;
1677
+ const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
1678
+ const clippingAncestors = [...elementClippingAncestors, rootBoundary];
1679
+ const firstClippingAncestor = clippingAncestors[0];
1680
+ const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
1681
+ const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
1682
+ accRect.top = max(rect.top, accRect.top);
1683
+ accRect.right = min(rect.right, accRect.right);
1684
+ accRect.bottom = min(rect.bottom, accRect.bottom);
1685
+ accRect.left = max(rect.left, accRect.left);
1686
+ return accRect;
1687
+ }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
1688
+ return {
1689
+ width: clippingRect.right - clippingRect.left,
1690
+ height: clippingRect.bottom - clippingRect.top,
1691
+ x: clippingRect.left,
1692
+ y: clippingRect.top
1693
+ };
1694
+ }
1695
+
1696
+ function getDimensions(element) {
1697
+ const {
1698
+ width,
1699
+ height
1700
+ } = getCssDimensions(element);
1701
+ return {
1702
+ width,
1703
+ height
1704
+ };
1705
+ }
1706
+
1707
+ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1708
+ const isOffsetParentAnElement = isHTMLElement(offsetParent);
1709
+ const documentElement = getDocumentElement(offsetParent);
1710
+ const isFixed = strategy === 'fixed';
1711
+ const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
1712
+ let scroll = {
1713
+ scrollLeft: 0,
1714
+ scrollTop: 0
1715
+ };
1716
+ const offsets = createCoords(0);
1717
+
1718
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1719
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1720
+ function setLeftRTLScrollbarOffset() {
1721
+ offsets.x = getWindowScrollBarX(documentElement);
1722
+ }
1723
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1724
+ if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1725
+ scroll = getNodeScroll(offsetParent);
1726
+ }
1727
+ if (isOffsetParentAnElement) {
1728
+ const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
1729
+ offsets.x = offsetRect.x + offsetParent.clientLeft;
1730
+ offsets.y = offsetRect.y + offsetParent.clientTop;
1731
+ } else if (documentElement) {
1732
+ setLeftRTLScrollbarOffset();
1733
+ }
1734
+ }
1735
+ if (isFixed && !isOffsetParentAnElement && documentElement) {
1736
+ setLeftRTLScrollbarOffset();
1737
+ }
1738
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1739
+ const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
1740
+ const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
1741
+ return {
1742
+ x,
1743
+ y,
1744
+ width: rect.width,
1745
+ height: rect.height
1746
+ };
1747
+ }
1748
+
1749
+ function isStaticPositioned(element) {
1750
+ return getComputedStyle$1(element).position === 'static';
1751
+ }
1752
+
1753
+ function getTrueOffsetParent(element, polyfill) {
1754
+ if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {
1755
+ return null;
1756
+ }
1757
+ if (polyfill) {
1758
+ return polyfill(element);
1759
+ }
1760
+ let rawOffsetParent = element.offsetParent;
1761
+
1762
+ // Firefox returns the <html> element as the offsetParent if it's non-static,
1763
+ // while Chrome and Safari return the <body> element. The <body> element must
1764
+ // be used to perform the correct calculations even if the <html> element is
1765
+ // non-static.
1766
+ if (getDocumentElement(element) === rawOffsetParent) {
1767
+ rawOffsetParent = rawOffsetParent.ownerDocument.body;
1768
+ }
1769
+ return rawOffsetParent;
1770
+ }
1771
+
1772
+ // Gets the closest ancestor positioned element. Handles some edge cases,
1773
+ // such as table ancestors and cross browser bugs.
1774
+ function getOffsetParent(element, polyfill) {
1775
+ const win = getWindow(element);
1776
+ if (isTopLayer(element)) {
1777
+ return win;
1778
+ }
1779
+ if (!isHTMLElement(element)) {
1780
+ let svgOffsetParent = getParentNode(element);
1781
+ while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
1782
+ if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
1783
+ return svgOffsetParent;
1784
+ }
1785
+ svgOffsetParent = getParentNode(svgOffsetParent);
1786
+ }
1787
+ return win;
1788
+ }
1789
+ let offsetParent = getTrueOffsetParent(element, polyfill);
1790
+ while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
1791
+ offsetParent = getTrueOffsetParent(offsetParent, polyfill);
1792
+ }
1793
+ if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
1794
+ return win;
1795
+ }
1796
+ return offsetParent || getContainingBlock(element) || win;
1797
+ }
1798
+
1799
+ const getElementRects = async function (data) {
1800
+ const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
1801
+ const getDimensionsFn = this.getDimensions;
1802
+ const floatingDimensions = await getDimensionsFn(data.floating);
1803
+ return {
1804
+ reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
1805
+ floating: {
1806
+ x: 0,
1807
+ y: 0,
1808
+ width: floatingDimensions.width,
1809
+ height: floatingDimensions.height
1810
+ }
1811
+ };
167
1812
  };
168
1813
 
169
- var NavigationHeaderCloseButton = function (_a) {
170
- var ref = _a.ref, onClick = _a.onClick, props = __rest(_a, ["ref", "onClick"]);
171
- var surface = useContext(Context).surface;
172
- return (React__default.createElement("button", __assign({}, props, { ref: ref, "aria-label": "close", onClick: onClick, className: classNames("arc-NavigationHeaderCloseButton", suffixModifier("arc-NavigationHeaderCloseButton--on", surface)) }),
173
- React__default.createElement(ThemeIcon, { size: 32, icon: "navigationHeaderClose" })));
1814
+ function isRTL(element) {
1815
+ return getComputedStyle$1(element).direction === 'rtl';
1816
+ }
1817
+
1818
+ const platform = {
1819
+ convertOffsetParentRelativeRectToViewportRelativeRect,
1820
+ getDocumentElement,
1821
+ getClippingRect,
1822
+ getOffsetParent,
1823
+ getElementRects,
1824
+ getClientRects,
1825
+ getDimensions,
1826
+ getScale,
1827
+ isElement,
1828
+ isRTL
1829
+ };
1830
+
1831
+ function rectsAreEqual(a, b) {
1832
+ return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
1833
+ }
1834
+
1835
+ // https://samthor.au/2021/observing-dom/
1836
+ function observeMove(element, onMove) {
1837
+ let io = null;
1838
+ let timeoutId;
1839
+ const root = getDocumentElement(element);
1840
+ function cleanup() {
1841
+ var _io;
1842
+ clearTimeout(timeoutId);
1843
+ (_io = io) == null || _io.disconnect();
1844
+ io = null;
1845
+ }
1846
+ function refresh(skip, threshold) {
1847
+ if (skip === void 0) {
1848
+ skip = false;
1849
+ }
1850
+ if (threshold === void 0) {
1851
+ threshold = 1;
1852
+ }
1853
+ cleanup();
1854
+ const elementRectForRootMargin = element.getBoundingClientRect();
1855
+ const {
1856
+ left,
1857
+ top,
1858
+ width,
1859
+ height
1860
+ } = elementRectForRootMargin;
1861
+ if (!skip) {
1862
+ onMove();
1863
+ }
1864
+ if (!width || !height) {
1865
+ return;
1866
+ }
1867
+ const insetTop = floor(top);
1868
+ const insetRight = floor(root.clientWidth - (left + width));
1869
+ const insetBottom = floor(root.clientHeight - (top + height));
1870
+ const insetLeft = floor(left);
1871
+ const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
1872
+ const options = {
1873
+ rootMargin,
1874
+ threshold: max(0, min(1, threshold)) || 1
1875
+ };
1876
+ let isFirstUpdate = true;
1877
+ function handleObserve(entries) {
1878
+ const ratio = entries[0].intersectionRatio;
1879
+ if (ratio !== threshold) {
1880
+ if (!isFirstUpdate) {
1881
+ return refresh();
1882
+ }
1883
+ if (!ratio) {
1884
+ // If the reference is clipped, the ratio is 0. Throttle the refresh
1885
+ // to prevent an infinite loop of updates.
1886
+ timeoutId = setTimeout(() => {
1887
+ refresh(false, 1e-7);
1888
+ }, 1000);
1889
+ } else {
1890
+ refresh(false, ratio);
1891
+ }
1892
+ }
1893
+ if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
1894
+ // It's possible that even though the ratio is reported as 1, the
1895
+ // element is not actually fully within the IntersectionObserver's root
1896
+ // area anymore. This can happen under performance constraints. This may
1897
+ // be a bug in the browser's IntersectionObserver implementation. To
1898
+ // work around this, we compare the element's bounding rect now with
1899
+ // what it was at the time we created the IntersectionObserver. If they
1900
+ // are not equal then the element moved, so we refresh.
1901
+ refresh();
1902
+ }
1903
+ isFirstUpdate = false;
1904
+ }
1905
+
1906
+ // Older browsers don't support a `document` as the root and will throw an
1907
+ // error.
1908
+ try {
1909
+ io = new IntersectionObserver(handleObserve, {
1910
+ ...options,
1911
+ // Handle <iframe>s
1912
+ root: root.ownerDocument
1913
+ });
1914
+ } catch (_e) {
1915
+ io = new IntersectionObserver(handleObserve, options);
1916
+ }
1917
+ io.observe(element);
1918
+ }
1919
+ refresh(true);
1920
+ return cleanup;
1921
+ }
1922
+
1923
+ /**
1924
+ * Automatically updates the position of the floating element when necessary.
1925
+ * Should only be called when the floating element is mounted on the DOM or
1926
+ * visible on the screen.
1927
+ * @returns cleanup function that should be invoked when the floating element is
1928
+ * removed from the DOM or hidden from the screen.
1929
+ * @see https://floating-ui.com/docs/autoUpdate
1930
+ */
1931
+ function autoUpdate(reference, floating, update, options) {
1932
+ if (options === void 0) {
1933
+ options = {};
1934
+ }
1935
+ const {
1936
+ ancestorScroll = true,
1937
+ ancestorResize = true,
1938
+ elementResize = typeof ResizeObserver === 'function',
1939
+ layoutShift = typeof IntersectionObserver === 'function',
1940
+ animationFrame = false
1941
+ } = options;
1942
+ const referenceEl = unwrapElement(reference);
1943
+ const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];
1944
+ ancestors.forEach(ancestor => {
1945
+ ancestorScroll && ancestor.addEventListener('scroll', update, {
1946
+ passive: true
1947
+ });
1948
+ ancestorResize && ancestor.addEventListener('resize', update);
1949
+ });
1950
+ const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
1951
+ let reobserveFrame = -1;
1952
+ let resizeObserver = null;
1953
+ if (elementResize) {
1954
+ resizeObserver = new ResizeObserver(_ref => {
1955
+ let [firstEntry] = _ref;
1956
+ if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
1957
+ // Prevent update loops when using the `size` middleware.
1958
+ // https://github.com/floating-ui/floating-ui/issues/1740
1959
+ resizeObserver.unobserve(floating);
1960
+ cancelAnimationFrame(reobserveFrame);
1961
+ reobserveFrame = requestAnimationFrame(() => {
1962
+ var _resizeObserver;
1963
+ (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
1964
+ });
1965
+ }
1966
+ update();
1967
+ });
1968
+ if (referenceEl && !animationFrame) {
1969
+ resizeObserver.observe(referenceEl);
1970
+ }
1971
+ resizeObserver.observe(floating);
1972
+ }
1973
+ let frameId;
1974
+ let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
1975
+ if (animationFrame) {
1976
+ frameLoop();
1977
+ }
1978
+ function frameLoop() {
1979
+ const nextRefRect = getBoundingClientRect(reference);
1980
+ if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
1981
+ update();
1982
+ }
1983
+ prevRefRect = nextRefRect;
1984
+ frameId = requestAnimationFrame(frameLoop);
1985
+ }
1986
+ update();
1987
+ return () => {
1988
+ var _resizeObserver2;
1989
+ ancestors.forEach(ancestor => {
1990
+ ancestorScroll && ancestor.removeEventListener('scroll', update);
1991
+ ancestorResize && ancestor.removeEventListener('resize', update);
1992
+ });
1993
+ cleanupIo == null || cleanupIo();
1994
+ (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
1995
+ resizeObserver = null;
1996
+ if (animationFrame) {
1997
+ cancelAnimationFrame(frameId);
1998
+ }
1999
+ };
2000
+ }
2001
+
2002
+ /**
2003
+ * Modifies the placement by translating the floating element along the
2004
+ * specified axes.
2005
+ * A number (shorthand for `mainAxis` or distance), or an axes configuration
2006
+ * object may be passed.
2007
+ * @see https://floating-ui.com/docs/offset
2008
+ */
2009
+ const offset$1 = offset$2;
2010
+
2011
+ /**
2012
+ * Provides data that allows you to change the size of the floating element —
2013
+ * for instance, prevent it from overflowing the clipping boundary or match the
2014
+ * width of the reference element.
2015
+ * @see https://floating-ui.com/docs/size
2016
+ */
2017
+ const size$1 = size$2;
2018
+
2019
+ /**
2020
+ * Computes the `x` and `y` coordinates that will place the floating element
2021
+ * next to a given reference element.
2022
+ */
2023
+ const computePosition = (reference, floating, options) => {
2024
+ // This caches the expensive `getClippingElementAncestors` function so that
2025
+ // multiple lifecycle resets re-use the same result. It only lives for a
2026
+ // single call. If other functions become expensive, we can add them as well.
2027
+ const cache = new Map();
2028
+ const mergedOptions = {
2029
+ platform,
2030
+ ...options
2031
+ };
2032
+ const platformWithCache = {
2033
+ ...mergedOptions.platform,
2034
+ _c: cache
2035
+ };
2036
+ return computePosition$1(reference, floating, {
2037
+ ...mergedOptions,
2038
+ platform: platformWithCache
2039
+ });
174
2040
  };
175
2041
 
176
- var NavigationHeaderBurgerMenu = function (_a) {
177
- var navItems = _a.navItems, actions = _a.actions, header = _a.header, footer = _a.footer, logo = _a.logo, background = _a.background, onOpenChange = _a.onOpenChange, _b = _a.pathway, pathway = _b === void 0 ? "invert" : _b;
178
- var id = useId();
179
- var _c = useState(false), isOpen = _c[0], setIsOpen = _c[1];
180
- var triggerRef = useRef(null);
181
- var listRef = useRef(null);
182
- var interactionMode = useInteractionMode().interactionMode;
183
- var _d = useThemeElement(), themeElement = _d[0], setThemeElement = _d[1];
184
- var closeMenu = function () {
185
- setIsOpen(false);
186
- };
187
- var focusTriggerElement = function () {
188
- if (triggerRef.current && interactionMode === "keyboard") {
189
- triggerRef.current.focus();
190
- }
191
- };
192
- useEffect(function () {
193
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);
194
- }, [isOpen, onOpenChange]);
195
- // Close the menu if the nav or trigger is hidden
196
- useEffect(function () {
197
- var trigger = triggerRef.current;
198
- var resizeObserver = new ResizeObserver(function (entries) {
199
- var entry = entries[0];
200
- if (!checkElementVisibility(entry.target) && isOpen) {
201
- setIsOpen(false);
202
- }
203
- });
204
- if (trigger) {
205
- resizeObserver.observe(trigger);
206
- }
207
- return function () {
208
- if (trigger) {
209
- resizeObserver.unobserve(trigger);
210
- }
211
- };
212
- }, [isOpen, setIsOpen]);
213
- var colorScheme = useMemo(function () {
214
- var colorConfig = {
215
- light: {
216
- surface: "light-white",
217
- menuColorType: "light",
218
- },
219
- dark: {
220
- surface: "dark-black",
221
- menuColorType: "dark",
222
- },
223
- };
224
- switch (background) {
225
- case "transparentOnDark":
226
- case "ghostedOnDark":
227
- return pathway === "invert" ? colorConfig.light : colorConfig.dark;
228
- default:
229
- return pathway === "invert" ? colorConfig.dark : colorConfig.light;
230
- }
231
- }, [pathway, background]);
232
- return (React__default.createElement(React__default.Fragment, null,
233
- React__default.createElement(Tooltip, { delayDuration: DELAY_DURATION, asChild: true, title: "Menu", side: "bottom" },
234
- React__default.createElement(NavigationHeaderButton, { ref: triggerRef, isPadded: false, "aria-expanded": isOpen, "aria-label": isOpen ? "close menu" : "open menu", onClick: function () { return setIsOpen(!isOpen); } },
235
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-trigger" },
236
- React__default.createElement(ThemeIcon, { icon: "siteHeaderBurger", size: 24 })),
237
- React__default.createElement(VisuallyHidden, null, isOpen ? "close menu" : "open menu"))),
238
- React__default.createElement("div", { ref: setThemeElement },
239
- React__default.createElement(Root, { open: isOpen },
240
- React__default.createElement(Portal, { container: themeElement },
241
- React__default.createElement(Overlay, { className: "arc-NavigationHeaderBurgerMenu-overlay" },
242
- React__default.createElement(Content, { "aria-describedby": undefined, className: classNames("arc-NavigationHeaderBurgerMenu-slider", suffixModifier("arc-NavigationHeaderBurgerMenu-slider--on", colorScheme.menuColorType)), onCloseAutoFocus: focusTriggerElement, onEscapeKeyDown: closeMenu, onInteractOutside: closeMenu, "aria-modal": "true" },
243
- React__default.createElement(Surface, { growVertically: true, isTransparent: true, background: colorScheme.surface },
244
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-container" },
245
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-mainContent" },
246
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-header" },
247
- React__default.createElement(Title, null,
248
- React__default.createElement(VisuallyHidden, null, "Navigation menu")),
249
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-closeButtonContainer" },
250
- React__default.createElement(NavigationHeaderCloseButton, { onClick: closeMenu })),
251
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-logoContainer" },
252
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-logoWrapper" },
253
- React__default.createElement(NavigationHeaderLogo, __assign({}, logo))))),
254
- header && (React__default.createElement("div", { className: classNames("arc-NavigationHeaderBurgerMenu-topContent", {
255
- "arc-NavigationHeaderBurgerMenu-topContent--bottomSpacing": !navItems,
256
- }) }, header)),
257
- navItems && (React__default.createElement("ul", { ref: listRef, className: "arc-NavigationHeaderBurgerMenu-list" }, navItems.map(function (navItem, navItemIndex) { return (React__default.createElement(React__default.Fragment, { key: "".concat(id, "-burger-nav-item-").concat(navItemIndex) },
258
- React__default.createElement("li", { className: "arc-NavigationHeaderBurgerMenu-listItem" },
259
- React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-listItemContent" },
260
- (navItem.type === "link" ||
261
- navItem.type === "meatball") && (React__default.createElement(NavigationHeaderMenuLink, { href: navItem.href, onClick: navItem.onClick, text: navItem.text })),
262
- (navItem.type === "subnav" ||
263
- navItem.type === "dropdown") && (React__default.createElement(NavigationHeaderDisclosure, { heading: navItem.text }, navItem.items.map(function (subNavItem, subNavItemIndex) { return (React__default.createElement(NavigationHeaderMenuLink, { size: "s", key: "".concat(id, "-").concat(navItemIndex, "-burger-sub-nav-item-").concat(subNavItemIndex), href: subNavItem.href, onClick: subNavItem.onClick, text: subNavItem.text })); }))))))); }))),
264
- actions && (React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-actionsContainer" },
265
- React__default.createElement("div", { className: classNames("arc-NavigationHeaderBurgerMenu-actions", {
266
- "arc-NavigationHeaderBurgerMenu-actions--seperator": navItems || header,
267
- }) }, actions.map(function (props, i) { return (React__default.createElement(NavigationHeaderInlineAction, __assign({ key: "".concat(id, "-action-{").concat(i, "}") }, props))); }))))),
268
- footer && (React__default.createElement("div", { className: "arc-NavigationHeaderBurgerMenu-footer" }, footer)))))))))));
269
- };
2042
+ var isClient = typeof document !== 'undefined';
270
2043
 
271
- var NavigationHeaderNavLink = function (_a) {
272
- var text = _a.text, onClick = _a.onClick, href = _a.href, _b = _a.borderRadiusSize, borderRadiusSize = _b === void 0 ? "s" : _b;
273
- var surface = useContext(Context).surface;
274
- return (React__default.createElement("a", { href: href, onClick: onClick, className: classNames("arc-NavigationHeaderNavLink", suffixModifier("arc-NavigationHeaderNavLink--borderRadiusSize", borderRadiusSize), suffixModifier("arc-NavigationHeaderNavLink--on", surface)) },
275
- React__default.createElement(Text, null, text)));
276
- };
2044
+ var noop = function noop() {};
2045
+ var index = isClient ? useLayoutEffect : noop;
277
2046
 
278
- // src/get-focusable-elements/get-focusable-elements.ts
279
- var getFocusableElements = (rootElement) => {
280
- const nodes = [];
281
- const walker = document.createTreeWalker(
282
- rootElement,
283
- NodeFilter.SHOW_ELEMENT,
284
- {
285
- acceptNode: (node) => {
286
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
287
- if (node.disabled || node.hidden || isHiddenInput || !checkElementVisibility(node))
288
- return NodeFilter.FILTER_SKIP;
289
- return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
2047
+ // Fork of `fast-deep-equal` that only does the comparisons we need and compares
2048
+ // functions
2049
+ function deepEqual(a, b) {
2050
+ if (a === b) {
2051
+ return true;
2052
+ }
2053
+ if (typeof a !== typeof b) {
2054
+ return false;
2055
+ }
2056
+ if (typeof a === 'function' && a.toString() === b.toString()) {
2057
+ return true;
2058
+ }
2059
+ let length;
2060
+ let i;
2061
+ let keys;
2062
+ if (a && b && typeof a === 'object') {
2063
+ if (Array.isArray(a)) {
2064
+ length = a.length;
2065
+ if (length !== b.length) return false;
2066
+ for (i = length; i-- !== 0;) {
2067
+ if (!deepEqual(a[i], b[i])) {
2068
+ return false;
2069
+ }
290
2070
  }
2071
+ return true;
291
2072
  }
292
- );
293
- while (walker.nextNode()) nodes.push(walker.currentNode);
294
- return nodes;
295
- };
2073
+ keys = Object.keys(a);
2074
+ length = keys.length;
2075
+ if (length !== Object.keys(b).length) {
2076
+ return false;
2077
+ }
2078
+ for (i = length; i-- !== 0;) {
2079
+ if (!{}.hasOwnProperty.call(b, keys[i])) {
2080
+ return false;
2081
+ }
2082
+ }
2083
+ for (i = length; i-- !== 0;) {
2084
+ const key = keys[i];
2085
+ if (key === '_owner' && a.$$typeof) {
2086
+ continue;
2087
+ }
2088
+ if (!deepEqual(a[key], b[key])) {
2089
+ return false;
2090
+ }
2091
+ }
2092
+ return true;
2093
+ }
2094
+ return a !== a && b !== b;
2095
+ }
296
2096
 
297
- var NavigationHeaderContext = createContext(null);
2097
+ function getDPR(element) {
2098
+ if (typeof window === 'undefined') {
2099
+ return 1;
2100
+ }
2101
+ const win = element.ownerDocument.defaultView || window;
2102
+ return win.devicePixelRatio || 1;
2103
+ }
298
2104
 
299
- var NavigationHeaderDropdown = function (_a) {
300
- var children = _a.children, trigger = _a.trigger, ariaLabel = _a.ariaLabel, tooltip = _a.tooltip;
301
- var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
302
- var triggerRef = useRef(null);
303
- var containerRef = useRef(null);
304
- var _c = useState(false), isTooltipOpen = _c[0], setIsTooltipOpen = _c[1];
305
- var interactionMode = useInteractionMode().interactionMode;
306
- var navigationHeaderContext = useContext(NavigationHeaderContext);
307
- // Close the dropdown if the nav or trigger is hidden
308
- useEffect(function () {
309
- var trigger = triggerRef.current;
310
- var resizeObserver = new ResizeObserver(function (entries) {
311
- var entry = entries[0];
312
- if (!checkElementVisibility(entry.target) && isOpen) {
313
- setIsOpen(false);
314
- setIsTooltipOpen(false);
315
- }
2105
+ function roundByDPR(element, value) {
2106
+ const dpr = getDPR(element);
2107
+ return Math.round(value * dpr) / dpr;
2108
+ }
2109
+
2110
+ function useLatestRef(value) {
2111
+ const ref = React.useRef(value);
2112
+ index(() => {
2113
+ ref.current = value;
2114
+ });
2115
+ return ref;
2116
+ }
2117
+
2118
+ /**
2119
+ * Provides data to position a floating element.
2120
+ * @see https://floating-ui.com/docs/useFloating
2121
+ */
2122
+ function useFloating$1(options) {
2123
+ if (options === void 0) {
2124
+ options = {};
2125
+ }
2126
+ const {
2127
+ placement = 'bottom',
2128
+ strategy = 'absolute',
2129
+ middleware = [],
2130
+ platform,
2131
+ elements: {
2132
+ reference: externalReference,
2133
+ floating: externalFloating
2134
+ } = {},
2135
+ transform = true,
2136
+ whileElementsMounted,
2137
+ open
2138
+ } = options;
2139
+ const [data, setData] = React.useState({
2140
+ x: 0,
2141
+ y: 0,
2142
+ strategy,
2143
+ placement,
2144
+ middlewareData: {},
2145
+ isPositioned: false
2146
+ });
2147
+ const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);
2148
+ if (!deepEqual(latestMiddleware, middleware)) {
2149
+ setLatestMiddleware(middleware);
2150
+ }
2151
+ const [_reference, _setReference] = React.useState(null);
2152
+ const [_floating, _setFloating] = React.useState(null);
2153
+ const setReference = React.useCallback(node => {
2154
+ if (node !== referenceRef.current) {
2155
+ referenceRef.current = node;
2156
+ _setReference(node);
2157
+ }
2158
+ }, []);
2159
+ const setFloating = React.useCallback(node => {
2160
+ if (node !== floatingRef.current) {
2161
+ floatingRef.current = node;
2162
+ _setFloating(node);
2163
+ }
2164
+ }, []);
2165
+ const referenceEl = externalReference || _reference;
2166
+ const floatingEl = externalFloating || _floating;
2167
+ const referenceRef = React.useRef(null);
2168
+ const floatingRef = React.useRef(null);
2169
+ const dataRef = React.useRef(data);
2170
+ const hasWhileElementsMounted = whileElementsMounted != null;
2171
+ const whileElementsMountedRef = useLatestRef(whileElementsMounted);
2172
+ const platformRef = useLatestRef(platform);
2173
+ const openRef = useLatestRef(open);
2174
+ const update = React.useCallback(() => {
2175
+ if (!referenceRef.current || !floatingRef.current) {
2176
+ return;
2177
+ }
2178
+ const config = {
2179
+ placement,
2180
+ strategy,
2181
+ middleware: latestMiddleware
2182
+ };
2183
+ if (platformRef.current) {
2184
+ config.platform = platformRef.current;
2185
+ }
2186
+ computePosition(referenceRef.current, floatingRef.current, config).then(data => {
2187
+ const fullData = {
2188
+ ...data,
2189
+ // The floating element's position may be recomputed while it's closed
2190
+ // but still mounted (such as when transitioning out). To ensure
2191
+ // `isPositioned` will be `false` initially on the next open, avoid
2192
+ // setting it to `true` when `open === false` (must be specified).
2193
+ isPositioned: openRef.current !== false
2194
+ };
2195
+ if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
2196
+ dataRef.current = fullData;
2197
+ ReactDOM.flushSync(() => {
2198
+ setData(fullData);
316
2199
  });
317
- if (trigger) {
318
- resizeObserver.observe(trigger);
319
- }
320
- return function () {
321
- if (trigger) {
322
- resizeObserver.unobserve(trigger);
323
- }
324
- };
325
- }, [isOpen, setIsOpen, navigationHeaderContext]);
326
- // if focus isnt going anywhere else and closed via keyboard, return focus to the trigger
327
- var onCloseAutoFocus = function () {
328
- var _a, _b;
329
- if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) === "BODY" &&
330
- interactionMode === "keyboard") {
331
- (_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.focus();
332
- }
2200
+ }
2201
+ });
2202
+ }, [latestMiddleware, placement, strategy, platformRef, openRef]);
2203
+ index(() => {
2204
+ if (open === false && dataRef.current.isPositioned) {
2205
+ dataRef.current.isPositioned = false;
2206
+ setData(data => ({
2207
+ ...data,
2208
+ isPositioned: false
2209
+ }));
2210
+ }
2211
+ }, [open]);
2212
+ const isMountedRef = React.useRef(false);
2213
+ index(() => {
2214
+ isMountedRef.current = true;
2215
+ return () => {
2216
+ isMountedRef.current = false;
333
2217
  };
334
- // Only count it as an outside interaction if the trigger isnt being clicked.
335
- var handleOutSideInteraction = function (event) {
336
- var _a;
337
- if (!((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.currentTarget))) {
338
- setIsOpen(false);
339
- }
2218
+ }, []);
2219
+ index(() => {
2220
+ if (referenceEl) referenceRef.current = referenceEl;
2221
+ if (floatingEl) floatingRef.current = floatingEl;
2222
+ if (referenceEl && floatingEl) {
2223
+ if (whileElementsMountedRef.current) {
2224
+ return whileElementsMountedRef.current(referenceEl, floatingEl, update);
2225
+ }
2226
+ update();
2227
+ }
2228
+ }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);
2229
+ const refs = React.useMemo(() => ({
2230
+ reference: referenceRef,
2231
+ floating: floatingRef,
2232
+ setReference,
2233
+ setFloating
2234
+ }), [setReference, setFloating]);
2235
+ const elements = React.useMemo(() => ({
2236
+ reference: referenceEl,
2237
+ floating: floatingEl
2238
+ }), [referenceEl, floatingEl]);
2239
+ const floatingStyles = React.useMemo(() => {
2240
+ const initialStyles = {
2241
+ position: strategy,
2242
+ left: 0,
2243
+ top: 0
340
2244
  };
341
- // Find the first focusable element.
342
- var focusOnFirstElement = function () {
343
- getFocusableElements(containerRef.current)[0].focus();
2245
+ if (!elements.floating) {
2246
+ return initialStyles;
2247
+ }
2248
+ const x = roundByDPR(elements.floating, data.x);
2249
+ const y = roundByDPR(elements.floating, data.y);
2250
+ if (transform) {
2251
+ return {
2252
+ ...initialStyles,
2253
+ transform: "translate(" + x + "px, " + y + "px)",
2254
+ ...(getDPR(elements.floating) >= 1.5 && {
2255
+ willChange: 'transform'
2256
+ })
2257
+ };
2258
+ }
2259
+ return {
2260
+ position: strategy,
2261
+ left: x,
2262
+ top: y
344
2263
  };
345
- var toggleVisibility = function () { return setIsOpen(function (isOpen) { return !isOpen; }); };
346
- return (React__default.createElement(Popover, { useBespokeTrigger: true, align: "center", background: "light", arrow: true, sideOffset: 12, alignOffset: 0, open: isOpen, onCloseAutoFocus: onCloseAutoFocus, onOpenAutoFocus: focusOnFirstElement, onEscapeKeyDown: handleOutSideInteraction, onFocusOutside: handleOutSideInteraction, onInteractOutside: handleOutSideInteraction, onPointerDownOutside: handleOutSideInteraction, content: React__default.createElement("div", { ref: containerRef },
347
- React__default.createElement("ul", { className: "arc-NavigationHeaderDropdown-navList" }, children)) }, tooltip ? (React__default.createElement(Tooltip, { asChild: true, title: tooltip, open: isTooltipOpen, alignContent: "center", side: "bottom" },
348
- React__default.createElement(NavigationHeaderButton, { ref: triggerRef, "aria-label": ariaLabel, "aria-expanded": isOpen, "aria-haspopup": "dialog", "aria-describedby": undefined, isActive: isOpen, onClick: toggleVisibility, onMouseEnter: function () { return setIsTooltipOpen(!isOpen); }, onMouseLeave: function () { return setIsTooltipOpen(false); }, onFocus: function () { return setIsTooltipOpen(true); }, onBlur: function () { return setIsTooltipOpen(false); } }, trigger))) : (React__default.createElement(NavigationHeaderButton, { ref: triggerRef, "aria-label": ariaLabel, "aria-expanded": isOpen, "aria-haspopup": "dialog", isActive: isOpen, onClick: toggleVisibility }, trigger))));
2264
+ }, [strategy, transform, elements.floating, data.x, data.y]);
2265
+ return React.useMemo(() => ({
2266
+ ...data,
2267
+ update,
2268
+ refs,
2269
+ elements,
2270
+ floatingStyles
2271
+ }), [data, update, refs, elements, floatingStyles]);
2272
+ }
2273
+
2274
+ /**
2275
+ * Modifies the placement by translating the floating element along the
2276
+ * specified axes.
2277
+ * A number (shorthand for `mainAxis` or distance), or an axes configuration
2278
+ * object may be passed.
2279
+ * @see https://floating-ui.com/docs/offset
2280
+ */
2281
+ const offset = (options, deps) => ({
2282
+ ...offset$1(options),
2283
+ options: [options, deps]
2284
+ });
2285
+
2286
+ /**
2287
+ * Provides data that allows you to change the size of the floating element —
2288
+ * for instance, prevent it from overflowing the clipping boundary or match the
2289
+ * width of the reference element.
2290
+ * @see https://floating-ui.com/docs/size
2291
+ */
2292
+ const size = (options, deps) => ({
2293
+ ...size$1(options),
2294
+ options: [options, deps]
2295
+ });
2296
+
2297
+ // https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379
2298
+ const SafeReact = {
2299
+ ...React
349
2300
  };
350
2301
 
351
- var NavigationHeaderContainer = function (_a) {
352
- var _b = _a.isPill, isPill = _b === void 0 ? false : _b, _c = _a.isExtended, isExtended = _c === void 0 ? false : _c, _d = _a.isFluid, isFluid = _d === void 0 ? false : _d, background = _a.background, children = _a.children;
353
- var backgrounds = {
354
- light: {
355
- surface: "light-white",
356
- classSuffix: "backgroundLight",
357
- },
358
- neutral: {
359
- surface: "light-white",
360
- classSuffix: "backgroundNeutral",
361
- },
362
- lightElevated: {
363
- surface: "light-white",
364
- classSuffix: "backgroundLightElevated",
365
- },
366
- transparentOnDark: {
367
- surface: "dark-black",
368
- classSuffix: "backgroundTransparent",
369
- },
370
- transparentOnLight: {
371
- surface: "light-white",
372
- classSuffix: "backgroundTransparent",
373
- },
374
- ghostedOnLight: {
375
- surface: "light-white",
376
- classSuffix: "backgroundGhosted",
377
- },
378
- ghostedOnDark: {
379
- surface: "dark-black",
380
- classSuffix: "backgroundGhosted",
381
- },
382
- };
383
- return (React__default.createElement("div", { "data-testid": "NavigationHeader-container", className: classNames("arc-NavigationHeaderContainer", "arc-NavigationHeaderContainer--".concat(backgrounds[background].classSuffix), {
384
- "arc-NavigationHeaderContainer--pill": isPill,
385
- "arc-NavigationHeaderContainer--fullWidth": !isPill,
386
- "arc-NavigationHeaderContainer--regular": !isExtended,
387
- "arc-NavigationHeaderContainer--extended": isExtended,
388
- "arc-NavigationHeaderContainer--fluid": isFluid,
389
- }) },
390
- React__default.createElement("div", { className: "arc-NavigationHeaderContainer-outer" },
391
- React__default.createElement(Surface, { isTransparent: true, background: backgrounds[background].surface },
392
- React__default.createElement("div", { className: "arc-NavigationHeaderContainer-contentWrapper" },
393
- React__default.createElement("div", { className: "arc-NavigationHeaderContainer-inner" },
394
- React__default.createElement("div", { className: "arc-NavigationHeaderContainer-content" }, children)))))));
2302
+ let serverHandoffComplete = false;
2303
+ let count = 0;
2304
+ const genId = () => // Ensure the id is unique with multiple independent versions of Floating UI
2305
+ // on <React 18
2306
+ "floating-ui-" + Math.random().toString(36).slice(2, 6) + count++;
2307
+ function useFloatingId() {
2308
+ const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);
2309
+ index$1(() => {
2310
+ if (id == null) {
2311
+ setId(genId());
2312
+ }
2313
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2314
+ }, []);
2315
+ React.useEffect(() => {
2316
+ serverHandoffComplete = true;
2317
+ }, []);
2318
+ return id;
2319
+ }
2320
+ const useReactId = SafeReact.useId;
2321
+
2322
+ /**
2323
+ * Uses React 18's built-in `useId()` when available, or falls back to a
2324
+ * slightly less performant (requiring a double render) implementation for
2325
+ * earlier React versions.
2326
+ * @see https://floating-ui.com/docs/react-utils#useid
2327
+ */
2328
+ const useId = useReactId || useFloatingId;
2329
+
2330
+ let devMessageSet;
2331
+ if (process.env.NODE_ENV !== "production") {
2332
+ devMessageSet = /*#__PURE__*/new Set();
2333
+ }
2334
+ function error() {
2335
+ var _devMessageSet3;
2336
+ for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
2337
+ messages[_key2] = arguments[_key2];
2338
+ }
2339
+ const message = "Floating UI: " + messages.join(' ');
2340
+ if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {
2341
+ var _devMessageSet4;
2342
+ (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);
2343
+ console.error(message);
2344
+ }
2345
+ }
2346
+
2347
+ function createEventEmitter() {
2348
+ const map = new Map();
2349
+ return {
2350
+ emit(event, data) {
2351
+ var _map$get;
2352
+ (_map$get = map.get(event)) == null || _map$get.forEach(listener => listener(data));
2353
+ },
2354
+ on(event, listener) {
2355
+ if (!map.has(event)) {
2356
+ map.set(event, new Set());
2357
+ }
2358
+ map.get(event).add(listener);
2359
+ },
2360
+ off(event, listener) {
2361
+ var _map$get2;
2362
+ (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);
2363
+ }
2364
+ };
2365
+ }
2366
+
2367
+ const FloatingNodeContext = /*#__PURE__*/React.createContext(null);
2368
+ const FloatingTreeContext = /*#__PURE__*/React.createContext(null);
2369
+
2370
+ /**
2371
+ * Returns the parent node id for nested floating elements, if available.
2372
+ * Returns `null` for top-level floating elements.
2373
+ */
2374
+ const useFloatingParentNodeId = () => {
2375
+ var _React$useContext;
2376
+ return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;
395
2377
  };
396
2378
 
397
- var NavigationHeaderSubnav = function (_a) {
398
- var _b;
399
- var trigger = _a.trigger, ariaLabel = _a.ariaLabel, children = _a.children;
400
- var _c = useState(false), isOpen = _c[0], setIsOpen = _c[1];
401
- var navigationHeaderContext = useContext(NavigationHeaderContext);
402
- var containerRef = useRef(null);
2379
+ /**
2380
+ * Returns the nearest floating tree context, if available.
2381
+ */
2382
+ const useFloatingTree = () => React.useContext(FloatingTreeContext);
2383
+
2384
+ function useFloatingRootContext(options) {
2385
+ const {
2386
+ open = false,
2387
+ onOpenChange: onOpenChangeProp,
2388
+ elements: elementsProp
2389
+ } = options;
2390
+ const floatingId = useId();
2391
+ const dataRef = React.useRef({});
2392
+ const [events] = React.useState(() => createEventEmitter());
2393
+ const nested = useFloatingParentNodeId() != null;
2394
+ if (process.env.NODE_ENV !== "production") {
2395
+ const optionDomReference = elementsProp.reference;
2396
+ if (optionDomReference && !isElement(optionDomReference)) {
2397
+ error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');
2398
+ }
2399
+ }
2400
+ const [positionReference, setPositionReference] = React.useState(elementsProp.reference);
2401
+ const onOpenChange = useEffectEvent((open, event, reason) => {
2402
+ dataRef.current.openEvent = open ? event : undefined;
2403
+ events.emit('openchange', {
2404
+ open,
2405
+ event,
2406
+ reason,
2407
+ nested
2408
+ });
2409
+ onOpenChangeProp == null || onOpenChangeProp(open, event, reason);
2410
+ });
2411
+ const refs = React.useMemo(() => ({
2412
+ setPositionReference
2413
+ }), []);
2414
+ const elements = React.useMemo(() => ({
2415
+ reference: positionReference || elementsProp.reference || null,
2416
+ floating: elementsProp.floating || null,
2417
+ domReference: elementsProp.reference
2418
+ }), [positionReference, elementsProp.reference, elementsProp.floating]);
2419
+ return React.useMemo(() => ({
2420
+ dataRef,
2421
+ open,
2422
+ onOpenChange,
2423
+ elements,
2424
+ events,
2425
+ floatingId,
2426
+ refs
2427
+ }), [open, onOpenChange, elements, events, floatingId, refs]);
2428
+ }
2429
+
2430
+ /**
2431
+ * Provides data to position a floating element and context to add interactions.
2432
+ * @see https://floating-ui.com/docs/useFloating
2433
+ */
2434
+ function useFloating(options) {
2435
+ if (options === void 0) {
2436
+ options = {};
2437
+ }
2438
+ const {
2439
+ nodeId
2440
+ } = options;
2441
+ const internalRootContext = useFloatingRootContext({
2442
+ ...options,
2443
+ elements: {
2444
+ reference: null,
2445
+ floating: null,
2446
+ ...options.elements
2447
+ }
2448
+ });
2449
+ const rootContext = options.rootContext || internalRootContext;
2450
+ const computedElements = rootContext.elements;
2451
+ const [_domReference, setDomReference] = React.useState(null);
2452
+ const [positionReference, _setPositionReference] = React.useState(null);
2453
+ const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;
2454
+ const domReference = optionDomReference || _domReference;
2455
+ const domReferenceRef = React.useRef(null);
2456
+ const tree = useFloatingTree();
2457
+ index$1(() => {
2458
+ if (domReference) {
2459
+ domReferenceRef.current = domReference;
2460
+ }
2461
+ }, [domReference]);
2462
+ const position = useFloating$1({
2463
+ ...options,
2464
+ elements: {
2465
+ ...computedElements,
2466
+ ...(positionReference && {
2467
+ reference: positionReference
2468
+ })
2469
+ }
2470
+ });
2471
+ const setPositionReference = React.useCallback(node => {
2472
+ const computedPositionReference = isElement(node) ? {
2473
+ getBoundingClientRect: () => node.getBoundingClientRect(),
2474
+ getClientRects: () => node.getClientRects(),
2475
+ contextElement: node
2476
+ } : node;
2477
+ // Store the positionReference in state if the DOM reference is specified externally via the
2478
+ // `elements.reference` option. This ensures that it won't be overridden on future renders.
2479
+ _setPositionReference(computedPositionReference);
2480
+ position.refs.setReference(computedPositionReference);
2481
+ }, [position.refs]);
2482
+ const setReference = React.useCallback(node => {
2483
+ if (isElement(node) || node === null) {
2484
+ domReferenceRef.current = node;
2485
+ setDomReference(node);
2486
+ }
2487
+
2488
+ // Backwards-compatibility for passing a virtual element to `reference`
2489
+ // after it has set the DOM reference.
2490
+ if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||
2491
+ // Don't allow setting virtual elements using the old technique back to
2492
+ // `null` to support `positionReference` + an unstable `reference`
2493
+ // callback ref.
2494
+ node !== null && !isElement(node)) {
2495
+ position.refs.setReference(node);
2496
+ }
2497
+ }, [position.refs]);
2498
+ const refs = React.useMemo(() => ({
2499
+ ...position.refs,
2500
+ setReference,
2501
+ setPositionReference,
2502
+ domReference: domReferenceRef
2503
+ }), [position.refs, setReference, setPositionReference]);
2504
+ const elements = React.useMemo(() => ({
2505
+ ...position.elements,
2506
+ domReference: domReference
2507
+ }), [position.elements, domReference]);
2508
+ const context = React.useMemo(() => ({
2509
+ ...position,
2510
+ ...rootContext,
2511
+ refs,
2512
+ elements,
2513
+ nodeId
2514
+ }), [position, refs, elements, nodeId, rootContext]);
2515
+ index$1(() => {
2516
+ rootContext.dataRef.current.floatingContext = context;
2517
+ const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);
2518
+ if (node) {
2519
+ node.context = context;
2520
+ }
2521
+ });
2522
+ return React.useMemo(() => ({
2523
+ ...position,
2524
+ context,
2525
+ refs,
2526
+ elements
2527
+ }), [position, refs, elements, context]);
2528
+ }
2529
+
2530
+ var _a = createNavigationHeaderContext("NavigationHeader sub components must be used within NavigationHeader"), NavigationHeaderContext = _a[0], useNavigationHeaderContext = _a[1];
2531
+
2532
+ var NavigationHeaderSubnavContent = function (_a) {
2533
+ var children = _a.children, background = _a.background, menuTitle = _a.menuTitle;
2534
+ var navigationHeaderContext = useNavigationHeaderContext();
2535
+ var subNavContext = useSubNavContext();
403
2536
  var dialogRef = useRef(null);
404
- var listRef = useRef(null);
405
- var triggerRef = useRef(null);
2537
+ var childContainerRef = useRef(null);
2538
+ var _b = useThemeElement(), themeElement = _b[0], setThemeElement = _b[1];
2539
+ var _c = useState("pointer"), interactionMode = _c[0], setInterActionMode = _c[1];
2540
+ var isOpen = subNavContext.isOpen, rootRef = subNavContext.rootRef, setIsOpen = subNavContext.setIsOpen, id = subNavContext.id;
2541
+ var _d = useFloating({
2542
+ whileElementsMounted: autoUpdate,
2543
+ elements: {
2544
+ reference: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.navBarEl,
2545
+ },
2546
+ placement: "bottom-end",
2547
+ middleware: [
2548
+ size({
2549
+ apply: function (_a) {
2550
+ var rects = _a.rects, elements = _a.elements;
2551
+ Object.assign(elements.floating.style, {
2552
+ width: "".concat(rects.reference.width, "px"),
2553
+ });
2554
+ },
2555
+ }),
2556
+ offset(navigationHeaderContext.isPill ? 12 : 0),
2557
+ ],
2558
+ }), subNavRefs = _d.refs, subNavFloatStyles = _d.floatingStyles;
406
2559
  // if focus isnt going anywhere else, return it to the trigger
407
2560
  var onCloseAutoFocus = function () {
408
- var _a, _b;
409
- if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) === "BODY") {
410
- (_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.focus();
2561
+ var _a, _b, _c;
2562
+ if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) === "BODY" &&
2563
+ interactionMode === "keyboard") {
2564
+ (_c = (_b = subNavContext.triggerRef) === null || _b === void 0 ? void 0 : _b.current) === null || _c === void 0 ? void 0 : _c.focus();
411
2565
  }
412
2566
  };
413
2567
  // close when escape key is pressed
414
2568
  var onEscapeKeyDown = function () {
2569
+ var _a;
2570
+ setInterActionMode("keyboard");
415
2571
  setIsOpen(false);
416
- navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.setIsSubMenuItemActive(false);
2572
+ (_a = subNavContext.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(subNavContext, false);
2573
+ };
2574
+ // close when escape key is pressed
2575
+ var onInteractOutside = function () {
2576
+ setInterActionMode("pointer");
417
2577
  };
418
2578
  // Find the first focusable element.
419
- var onOpenAutoFocus = function () {
420
- getFocusableElements(listRef.current)[0].focus();
2579
+ var onOpenAutoFocus = function (e) {
2580
+ e.preventDefault();
2581
+ var firstFocusable = getFocusableElements(childContainerRef.current)[0];
2582
+ if (firstFocusable) {
2583
+ firstFocusable.focus({ preventScroll: true });
2584
+ }
421
2585
  };
422
- // Toggle visibility when trigger is clicked
423
- var onTriggerClick = function () {
424
- setIsOpen(!isOpen);
425
- navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.setIsSubMenuItemActive(!isOpen);
2586
+ var onContainerMouseDown = function () {
2587
+ setInterActionMode("pointer");
2588
+ };
2589
+ var onContainerKeyDown = function () {
2590
+ setInterActionMode("keyboard");
426
2591
  };
427
2592
  useEffect(function () {
428
- var handleClickOutside = function (event) {
2593
+ if (!isOpen)
2594
+ return;
2595
+ var clickListener = function (event) {
2596
+ var _a;
429
2597
  var target = event.target;
430
- var isThisTriggerClicked = containerRef.current && containerRef.current.contains(target);
431
- var otherSubNavItemClicked = !isThisTriggerClicked && target.getAttribute("data-sub-nav-item");
432
- var outSideSubnavClicked = !otherSubNavItemClicked &&
433
- dialogRef.current &&
434
- !dialogRef.current.contains(target);
435
- // dont do anything if the trigger was clicked, toggling is already handled.
2598
+ var isThisTriggerClicked = rootRef.current && rootRef.current.contains(target);
2599
+ var outSideSubnavClicked = dialogRef.current && !dialogRef.current.contains(target);
2600
+ // dont do anything if the click was on the trigger.
436
2601
  if (isThisTriggerClicked) {
437
2602
  return;
438
2603
  }
439
- // just hide the current menu if another one was clicked
440
- if (otherSubNavItemClicked) {
441
- setIsOpen(false);
442
- }
443
- // close and reset the navbar if clicking outside the dialog
2604
+ // close if clicking outside the dialog
444
2605
  if (outSideSubnavClicked) {
445
2606
  setIsOpen(false);
446
- navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.setIsSubMenuItemActive(false);
2607
+ (_a = subNavContext.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(subNavContext, false);
447
2608
  }
448
2609
  };
449
- document.addEventListener("click", handleClickOutside);
450
- return function () {
451
- document.removeEventListener("click", handleClickOutside);
452
- };
453
- }, [setIsOpen, navigationHeaderContext]);
454
- // Close the subnav if the trigger is hidden and the submenu is open
455
- useEffect(function () {
456
- var trigger = triggerRef.current;
457
- var resizeObserver = new ResizeObserver(function (entries) {
458
- var entry = entries[0];
459
- if (!checkElementVisibility(entry.target) && isOpen) {
460
- setIsOpen(false);
461
- navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.setIsSubMenuItemActive(false);
462
- }
463
- });
464
- if (trigger) {
465
- resizeObserver.observe(trigger);
466
- }
2610
+ document.addEventListener("click", clickListener);
467
2611
  return function () {
468
- if (trigger) {
469
- resizeObserver.unobserve(trigger);
470
- }
2612
+ document.removeEventListener("click", clickListener);
471
2613
  };
472
- }, [isOpen, setIsOpen, navigationHeaderContext]);
473
- return (React__default.createElement("div", { ref: containerRef },
474
- React__default.createElement(NavigationHeaderButton, { "data-sub-nav-item": true, ref: triggerRef, isActive: isOpen, "aria-label": ariaLabel, onClick: onTriggerClick }, trigger),
475
- React__default.createElement(Root, { open: isOpen, modal: false },
476
- React__default.createElement(Portal, { container: (_b = navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.navBarPortalRef) === null || _b === void 0 ? void 0 : _b.current },
477
- React__default.createElement("div", { className: "arc-NavigationHeaderSubnav" },
478
- React__default.createElement("div", { className: "arc-NavigationHeaderSubnav-container" },
479
- React__default.createElement(NavigationHeaderContainer, { isExtended: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isExtended, isFluid: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isFluid, isPill: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isPill, background: "neutral" },
480
- React__default.createElement(Content, { ref: dialogRef, "aria-describedby": undefined, onEscapeKeyDown: onEscapeKeyDown, onCloseAutoFocus: onCloseAutoFocus, onOpenAutoFocus: onOpenAutoFocus },
481
- React__default.createElement("div", { className: "arc-NavigationHeaderSubnav-content" },
482
- React__default.createElement(VisuallyHidden, null,
483
- React__default.createElement(Title, null,
484
- trigger,
485
- " sub menu")),
486
- React__default.createElement("ul", { ref: listRef, className: "arc-NavigationHeaderSubnav-navList" }, children))))))))));
2614
+ }, [isOpen, setIsOpen, rootRef, id, subNavContext]);
2615
+ return (React__default.createElement("div", { ref: setThemeElement, onMouseDown: onContainerMouseDown, onKeyDown: onContainerKeyDown },
2616
+ React__default.createElement(Root, { open: subNavContext.isOpen, modal: false },
2617
+ React__default.createElement(Portal, { container: themeElement },
2618
+ React__default.createElement("div", { className: "arc-NavigationHeaderSubnavContent", ref: subNavRefs.setFloating, style: subNavFloatStyles },
2619
+ React__default.createElement(NavigationHeaderContainer, { isExtended: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isExtended, isFluid: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isFluid, isPill: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.isPill, backgroundColor: background },
2620
+ React__default.createElement(Content, { className: "arc-NavigationHeaderSubnavContent-dialog", ref: dialogRef, "aria-describedby": undefined, onInteractOutside: onInteractOutside, onEscapeKeyDown: onEscapeKeyDown, onCloseAutoFocus: onCloseAutoFocus, onOpenAutoFocus: onOpenAutoFocus },
2621
+ React__default.createElement(VisuallyHidden, null,
2622
+ React__default.createElement(Title, null, menuTitle)),
2623
+ React__default.createElement("div", { ref: childContainerRef }, children))),
2624
+ React__default.createElement(VerticalSpace, null))))));
2625
+ };
2626
+
2627
+ var NavigationHeaderMegaMenu = function (_a) {
2628
+ var tabs = _a.tabs, panelHeading = _a.panelHeading, featureCards = _a.featureCards, onClick = _a.onClick, onOpenChange = _a.onOpenChange, ariaLabel = _a.ariaLabel, text = _a.text;
2629
+ var id = useId$1();
2630
+ var getColumns = function (tab) { return [
2631
+ tab.items.filter(function (_, i) { return i % 2 === 0; }),
2632
+ tab.items.filter(function (_, i) { return i % 2 === 1; }),
2633
+ ]; };
2634
+ return (React__default.createElement(NavigationHeaderSubnav, { onOpenChange: onOpenChange },
2635
+ React__default.createElement(NavigationHeaderSubnavTrigger, { ariaLabel: ariaLabel, onClick: onClick }, text),
2636
+ React__default.createElement(NavigationHeaderSubnavContent, { background: "lightElevated", menuTitle: "".concat(text, " sub menu}") },
2637
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu" },
2638
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-navCol" },
2639
+ React__default.createElement(NavigationHeaderPanelHeading, __assign({}, panelHeading)),
2640
+ React__default.createElement($69cb30bb0017df05$export$be92b6f5f03c0fe9, { orientation: "vertical", className: "arc-NavigationHeaderMegaMenu-nav", defaultValue: "".concat(tabs[0].triggerText, "-").concat(0) },
2641
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-tabs" },
2642
+ React__default.createElement($69cb30bb0017df05$export$54c2e3dc7acea9f5, { className: "arc-NavigationHeaderMegaMenu-tabList" }, tabs.map(function (item, i) { return (React__default.createElement("div", { key: "".concat(id, "-NavigationHeader-megamenu-trigger-").concat(i), className: "arc-NavigationHeaderMegaMenu-tabWrapper" },
2643
+ React__default.createElement($69cb30bb0017df05$export$41fb9f06171c75f4, { className: "arc-NavigationHeaderMegaMenu-tab", "aria-label": item.triggerText, value: "".concat(item.triggerText, "-").concat(i), onClick: item.onClick },
2644
+ React__default.createElement(Heading, { level: "3", size: "xs" }, item.triggerText)))); }))),
2645
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-mainContent" },
2646
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-linksPanel" }, tabs.map(function (tab, i) { return (React__default.createElement($69cb30bb0017df05$export$7c6e2c02157bb7d2, { tabIndex: -1, className: "arc-NavigationHeaderMegaMenu-content", key: "".concat(id, "-NavigationHeader-megamenu-content-").concat(i), value: "".concat(tab.triggerText, "-").concat(i) },
2647
+ React__default.createElement(NavigationHeaderPanelLink, __assign({}, tab.panelLink, { icon: tab.icon })),
2648
+ React__default.createElement(VerticalSpace, { size: "32" }),
2649
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-linksContainer" }, getColumns(tab).map(function (items, itemIndex) { return (React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-linksColumn", key: "column-".concat(itemIndex) }, items.map(function (item, i) { return (React__default.createElement(NavigationHeaderCollapsingNavList, __assign({}, item, { defaultOpen: true, revealLinkIconOnHover: true, autoFocusOnExpand: false, background: "light", key: "".concat(id, "-NavigationHeader-megamenu-item-").concat(i) }))); }))); })))); }))))),
2650
+ React__default.createElement("div", { className: "arc-NavigationHeaderMegaMenu-featureCol" }, featureCards && (React__default.createElement("div", { className: classNames("arc-NavigationHeaderMegaMenu-featureCardsPanel", {
2651
+ "arc-NavigationHeaderMegaMenu-featureCardsPanel--equalWidthColumns": featureCards.length <= 3,
2652
+ "arc-NavigationHeaderMegaMenu-featureCardsPanel--manyColumns": featureCards.length > 3,
2653
+ }) }, featureCards.map(function (card, i) { return (React__default.createElement(NavigationHeaderFeatureCard, __assign({ key: "".concat(id, "-NavigationHeader-megamenu-featureCard-").concat(i) }, card))); }))))))));
2654
+ };
2655
+
2656
+ var NavigationHeaderCategoryLinks = function (_a) {
2657
+ var items = _a.items, panelHeading = _a.panelHeading, ariaLabel = _a.ariaLabel, onClick = _a.onClick, text = _a.text, onOpenChange = _a.onOpenChange;
2658
+ var id = useId$1();
2659
+ return (React__default.createElement(NavigationHeaderSubnav, { onOpenChange: onOpenChange },
2660
+ React__default.createElement(NavigationHeaderSubnavTrigger, { ariaLabel: ariaLabel, onClick: onClick }, text),
2661
+ React__default.createElement(NavigationHeaderSubnavContent, { background: "lightElevated", menuTitle: "".concat(text, " sub menu}") },
2662
+ React__default.createElement("div", { className: "arc-NavigationHeaderCategoryLinks" },
2663
+ React__default.createElement(NavigationHeaderPanelHeading, __assign({}, panelHeading)),
2664
+ React__default.createElement("div", { className: "arc-NavigationHeaderCategoryLinks-container" }, items.map(function (item, i) { return (React__default.createElement("div", { key: "".concat(id, "-NavigationHeader-category-link-item-").concat(i) },
2665
+ React__default.createElement(NavigationHeaderCollapsingNavList, __assign({}, item, { defaultOpen: true, revealLinkIconOnHover: true, autoFocusOnExpand: false, background: "light" })))); }))))));
2666
+ };
2667
+
2668
+ var NavigationHeaderLevelTwoLinks = function (_a) {
2669
+ var links = _a.links, children = _a.children;
2670
+ var id = useId$1();
2671
+ return (React__default.createElement("ul", { className: "arc-NavigationHeaderLevelTwoLinks" },
2672
+ links.map(function (navLink, i) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-subnav-item-").concat(i) },
2673
+ React__default.createElement(NavigationHeaderNavLink, __assign({}, navLink, { borderRadiusSize: "s" })))); }),
2674
+ children));
487
2675
  };
488
2676
 
489
2677
  var NavigationHeaderNavItem = function (_a) {
490
2678
  var navItem = _a.navItem;
491
- var id = useId();
492
2679
  return (React__default.createElement(React__default.Fragment, null,
493
2680
  navItem.type === "link" && (React__default.createElement(NavigationHeaderNavLink, __assign({}, navItem, { borderRadiusSize: "m" }))),
494
- navItem.type === "dropdown" && (React__default.createElement(NavigationHeaderDropdown, { visibleFrom: navItem.visibleFrom, trigger: navItem.text, ariaLabel: navItem.ariaLabel }, navItem.items.map(function (navLink, i) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-dropdown-item-").concat(i) },
495
- React__default.createElement(NavigationHeaderNavLink, __assign({}, navLink)))); }))),
496
- navItem.type === "subnav" && (React__default.createElement(NavigationHeaderSubnav, { visibleFrom: navItem.visibleFrom, trigger: navItem.text, ariaLabel: navItem.ariaLabel }, navItem.items.map(function (navLink, i) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-subnav-item-").concat(i) },
497
- React__default.createElement(NavigationHeaderNavLink, __assign({}, navLink, { borderRadiusSize: "m" })))); })))));
2681
+ navItem.type === "levelTwo" && (React__default.createElement(NavigationHeaderDropdown, { trigger: navItem.text, onClick: navItem.onClick, ariaLabel: navItem.ariaLabel },
2682
+ React__default.createElement(NavigationHeaderLevelTwoLinks, { links: navItem.items }))),
2683
+ navItem.type === "categoryLinks" && (React__default.createElement(NavigationHeaderCategoryLinks, { onOpenChange: navItem.onOpenChange, ariaLabel: navItem.ariaLabel, onClick: navItem.onClick, text: navItem.text, panelHeading: navItem.panelHeading, items: navItem.items })),
2684
+ navItem.type === "megamenu" && (React__default.createElement(NavigationHeaderMegaMenu, { onOpenChange: navItem.onOpenChange, panelHeading: navItem.panelHeading, ariaLabel: navItem.ariaLabel, onClick: navItem.onClick, text: navItem.text, tabs: navItem.tabs, featureCards: navItem.featureCards }))));
498
2685
  };
499
2686
 
500
2687
  var MeatBall = function () { return (React__default.createElement("svg", { width: 18, "aria-hidden": true, viewBox: "0 0 17 3", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -1220,12 +3407,6 @@ var getQuery = function (_a) {
1220
3407
  return "".concat(isMatchMedia ? "" : "@media", "(").concat(type, "-width: ").concat(breakpointValue, "px)");
1221
3408
  };
1222
3409
 
1223
- /*
1224
- This is to ensure there are no cumulative layout shifts on SSR because of the dynamic media queries.
1225
- matchMedia can cause flickering when it returns a different value than the default state the server used.
1226
- This is plain old css so the styles will appear correctly on first paint.
1227
- The items these styles are applied to will still appear in the server rendered HTML for SEO purposes.
1228
- */
1229
3410
  var NavigationHeaderStyleElement = function (_a) {
1230
3411
  var css = _a.css;
1231
3412
  var generateCssStyles = function (declarations) {
@@ -1246,43 +3427,13 @@ var NavigationHeaderStyleElement = function (_a) {
1246
3427
  return React__default.createElement("style", null, styleStrings.join("").replace(/\s/g, ""));
1247
3428
  };
1248
3429
 
1249
- var NavigationHeaderMeatBallMenu = function (_a) {
1250
- var extraNavItems = _a.extraNavItems, mainNavItems = _a.mainNavItems, _b = _a.tooltip, tooltip = _b === void 0 ? "More links" : _b, _c = _a.ariaLabel, ariaLabel = _c === void 0 ? "Show hidden menu items" : _c;
1251
- var id = useId();
1252
- var meatBallMenuItemClassName = useUniqueString("arc-NavigationHeaderMeatBalllMenu-item");
1253
- return (React__default.createElement(React__default.Fragment, null,
1254
- React__default.createElement(NavigationHeaderStyleElement, { css: __spreadArray([
1255
- {
1256
- className: meatBallMenuItemClassName,
1257
- declarations: {
1258
- display: "none",
1259
- },
1260
- }
1261
- ], mainNavItems.map(function (navItem, i) { return ({
1262
- mediaQuery: { type: "max", breakpoint: navItem.visibleFrom || 0 },
1263
- className: "".concat(meatBallMenuItemClassName, "-").concat(i),
1264
- declarations: {
1265
- display: "block",
1266
- },
1267
- }); }), true) }),
1268
- React__default.createElement("div", { className: "arc-NavigationHeaderMeatBalllMenu-container" },
1269
- React__default.createElement(NavigationHeaderDropdown, { ariaLabel: ariaLabel, tooltip: tooltip, trigger: React__default.createElement(MeatBall, null) },
1270
- extraNavItems.map(function (navItem, i) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-meatball-item-").concat(i) },
1271
- React__default.createElement(NavigationHeaderNavLink, __assign({}, navItem)))); }),
1272
- mainNavItems.map(function (navItem, itemIndex) { return (React__default.createElement("li", { key: "".concat(id, "-NavigationHeader-meatball-item-").concat(itemIndex), className: classNames(meatBallMenuItemClassName, "".concat(meatBallMenuItemClassName, "-").concat(itemIndex)) },
1273
- navItem.type === "link" && (React__default.createElement(NavigationHeaderNavLink, __assign({}, navItem))),
1274
- (navItem.type === "subnav" || navItem.type === "dropdown") &&
1275
- navItem.items.map(function (navLink, subItemIndex) { return (React__default.createElement(NavigationHeaderNavLink, __assign({ key: "".concat(id, "-NavigationHeader-meatball-link--").concat(itemIndex, "-").concat(subItemIndex) }, navLink))); }))); })))));
1276
- };
1277
-
1278
- var NavigationHeaderNavList = function (_a) {
1279
- var navItems = _a.navItems, meatBallMenuAriaLabel = _a.meatBallMenuAriaLabel, meatballMenuTooltip = _a.meatballMenuTooltip;
1280
- var id = useId();
3430
+ var NavigationHeaderNavList = memo(function (_a) {
3431
+ var navItems = _a.navItems, background = _a.background, extraMenuTooltip = _a.extraMenuTooltip, _b = _a.extraNavItems, extraNavItems = _b === void 0 ? [] : _b, extraMenuAriaLabel = _a.extraMenuAriaLabel;
3432
+ var id = useId$1();
1281
3433
  var navListItemClassName = useUniqueString("arc-NavigationHeaderNavList-item");
1282
- var meatBallMenuClassName = useUniqueString("arc-NavigationHeaderNavList-meatballMenu");
3434
+ var sideMenuClassName = useUniqueString("arc-NavigationHeaderNavList-sideMenu");
3435
+ var sideMenuNavItemClassName = useUniqueString("arc-NavigationHeaderNavList-sideMenuItem");
1283
3436
  var ref = useRef(null);
1284
- var mainNavItems = navItems.filter(function (navItem) { return navItem.type !== "meatball"; });
1285
- var meatBallMenuItems = navItems.filter(function (navItem) { return navItem.type === "meatball"; });
1286
3437
  var largestElementBreakpoint = function (navItems) {
1287
3438
  return Math.max.apply(Math, navItems.map(function (navItem) {
1288
3439
  if (navItem.visibleFrom) {
@@ -1293,14 +3444,14 @@ var NavigationHeaderNavList = function (_a) {
1293
3444
  return 0;
1294
3445
  }));
1295
3446
  };
1296
- var meatBallMenuBreakpoint = meatBallMenuItems.length
3447
+ var extraMenuBreakpoint = extraNavItems.length
1297
3448
  ? { type: "max", breakpoint: 0 }
1298
- : { type: "min", breakpoint: largestElementBreakpoint(mainNavItems) };
3449
+ : { type: "min", breakpoint: largestElementBreakpoint(navItems) };
1299
3450
  return (React__default.createElement("div", { className: "arc-NavigationHeaderNavList-container" },
1300
3451
  React__default.createElement(NavigationHeaderStyleElement, { css: __spreadArray([
1301
3452
  {
1302
- className: meatBallMenuClassName,
1303
- mediaQuery: meatBallMenuBreakpoint,
3453
+ className: sideMenuClassName,
3454
+ mediaQuery: extraMenuBreakpoint,
1304
3455
  declarations: {
1305
3456
  display: "none",
1306
3457
  },
@@ -1311,25 +3462,45 @@ var NavigationHeaderNavList = function (_a) {
1311
3462
  display: "none",
1312
3463
  },
1313
3464
  }
1314
- ], mainNavItems.map(function (navItem, i) { return ({
1315
- mediaQuery: { type: "min", breakpoint: navItem.visibleFrom || 0 },
1316
- className: "".concat(navListItemClassName, "-").concat(i),
1317
- declarations: {
1318
- display: "block",
1319
- },
1320
- }); }), true) }),
1321
- React__default.createElement("ul", { ref: ref, className: "arc-NavigationHeaderNavList" }, mainNavItems.map(function (navItem, i) { return (React__default.createElement("li", { key: "".concat(id, "-navigation-header-navitem-").concat(i), className: classNames(navListItemClassName, "".concat(navListItemClassName, "-").concat(i)) },
1322
- React__default.createElement(NavigationHeaderNavItem, { navItem: navItem }))); })),
1323
- React__default.createElement("div", { className: meatBallMenuClassName },
1324
- React__default.createElement(NavigationHeaderMeatBallMenu, { tooltip: meatballMenuTooltip, ariaLabel: meatBallMenuAriaLabel, mainNavItems: mainNavItems, extraNavItems: meatBallMenuItems }))));
1325
- };
1326
-
1327
- var NavigationHeaderNav = function (props) {
1328
- var navigationHeaderContext = useContext(NavigationHeaderContext);
1329
- return (React__default.createElement("nav", { "aria-label": "primary" },
1330
- React__default.createElement("div", { ref: navigationHeaderContext === null || navigationHeaderContext === void 0 ? void 0 : navigationHeaderContext.navBarPortalRef }),
1331
- React__default.createElement(NavigationHeaderContainer, __assign({}, props))));
1332
- };
3465
+ ], navItems.reduce(function (acc, navItem, i) {
3466
+ return __spreadArray(__spreadArray([], acc, true), [
3467
+ {
3468
+ mediaQuery: {
3469
+ type: "min",
3470
+ breakpoint: navItem.visibleFrom || 0,
3471
+ },
3472
+ className: "".concat(sideMenuNavItemClassName, "-").concat(i),
3473
+ declarations: {
3474
+ display: "none",
3475
+ },
3476
+ },
3477
+ {
3478
+ mediaQuery: {
3479
+ type: "min",
3480
+ breakpoint: navItem.visibleFrom || 0,
3481
+ },
3482
+ className: "".concat(navListItemClassName, "-").concat(i),
3483
+ declarations: {
3484
+ display: "block",
3485
+ },
3486
+ },
3487
+ ], false);
3488
+ }, []), true) }),
3489
+ React__default.createElement("ul", { ref: ref, className: "arc-NavigationHeaderNavList" }, navItems.map(function (navItem, i) { return (React__default.createElement("li", { key: "".concat(id, "-navigation-header-navitem-").concat(i), className: classNames(navListItemClassName, "".concat(navListItemClassName, "-").concat(i)) },
3490
+ React__default.createElement("div", { className: classNames({
3491
+ "arc-NavigationHeaderNavList-itemContent--separator": navItem.isSeparator,
3492
+ }) },
3493
+ React__default.createElement(NavigationHeaderNavItem, { navItem: navItem })))); })),
3494
+ React__default.createElement("div", { className: sideMenuClassName },
3495
+ React__default.createElement(NavigationHeaderSideMenu, { showLogo: false, menuPosition: "left", pathway: "match", triggerAriaLabel: extraMenuAriaLabel, trigger: React__default.createElement(MeatBall, null), tooltip: extraMenuTooltip, background: background },
3496
+ React__default.createElement(SideMenuNavList, null, extraNavItems === null || extraNavItems === void 0 ? void 0 :
3497
+ extraNavItems.map(function (navItem, navItemIndex) { return (React__default.createElement(React__default.Fragment, { key: "".concat(id, "-side-nav-item-").concat(navItemIndex) },
3498
+ React__default.createElement("li", null,
3499
+ React__default.createElement(SideMenuNavItem, { navItem: navItem })))); }), navItems === null || navItems === void 0 ? void 0 :
3500
+ navItems.map(function (navItem, navItemIndex) { return (React__default.createElement(React__default.Fragment, { key: "".concat(id, "-side-main-nav-item-").concat(navItemIndex) },
3501
+ React__default.createElement("li", { className: classNames(sideMenuNavItemClassName, "".concat(sideMenuNavItemClassName, "-").concat(navItemIndex)) },
3502
+ React__default.createElement(SideMenuNavItem, { navItem: navItem })))); }))))));
3503
+ });
1333
3504
 
1334
3505
  var defaultHeaderVisibility = {
1335
3506
  burgerMenu: {
@@ -1350,53 +3521,153 @@ var defaultHeaderVisibility = {
1350
3521
  },
1351
3522
  };
1352
3523
 
3524
+ function defaultEmptyArray(items) {
3525
+ return items || [];
3526
+ }
3527
+
1353
3528
  /**
1354
3529
  * Use `NavigationHeader` as a Top-level UI element that displays branding, page titles, and primary navigation actions.
1355
3530
  */
1356
3531
  var NavigationHeader = function (_a) {
1357
- var leftSlot = _a.leftSlot, middleSlot = _a.middleSlot, rightSlot = _a.rightSlot, isPill = _a.isPill, isExtended = _a.isExtended, isFluid = _a.isFluid, logo = _a.logo, navItems = _a.navItems, meatballMenuTooltip = _a.meatballMenuTooltip, burgerMenuActions = _a.burgerMenuActions, burgerMenuFooter = _a.burgerMenuFooter, burgerMenuHeader = _a.burgerMenuHeader, burgerMenuVisibility = _a.burgerMenuVisibility, onOpenChange = _a.onOpenChange, burgerMenuPathway = _a.burgerMenuPathway, navMenuVisibility = _a.navMenuVisibility, _b = _a.background, background = _b === void 0 ? "transparentOnLight" : _b;
1358
- var navBarPortalRef = useRef(null);
1359
- var _c = useState(false), isSubMenuItemActive = _c[0], setIsSubMenuItemActive = _c[1];
1360
- var navBarBackground = isSubMenuItemActive ? "lightElevated" : background;
3532
+ var leftSlot = _a.leftSlot, middleSlot = _a.middleSlot, rightSlot = _a.rightSlot, isPill = _a.isPill, isExtended = _a.isExtended, isFluid = _a.isFluid, logo = _a.logo, navItems = _a.navItems, extraNavItems = _a.extraNavItems, extraMenuTooltip = _a.extraMenuTooltip, extraMenuAriaLabel = _a.extraMenuAriaLabel, burgerMenuActions = _a.burgerMenuActions, burgerMenuFooter = _a.burgerMenuFooter, burgerMenuHeader = _a.burgerMenuHeader, burgerMenuVisibility = _a.burgerMenuVisibility, onBurgerMenuOpenChange = _a.onBurgerMenuOpenChange, burgerMenuPathway = _a.burgerMenuPathway, navMenuVisibility = _a.navMenuVisibility, _b = _a.background, background = _b === void 0 ? "transparentOnLight" : _b;
3533
+ var _c = useState(), navBarEl = _c[0], setNavBarEl = _c[1];
1361
3534
  var burgerMenuVisibilityProps = __assign(__assign({}, defaultHeaderVisibility.burgerMenu), burgerMenuVisibility);
1362
3535
  var navMenuVisibilityProps = __assign(__assign({}, defaultHeaderVisibility.navItems), navMenuVisibility);
1363
- return (React__default.createElement(NavigationHeaderContext.Provider, { value: {
1364
- navBarPortalRef: navBarPortalRef,
1365
- isPill: isPill,
1366
- isExtended: isExtended,
1367
- isFluid: isFluid,
1368
- setIsSubMenuItemActive: setIsSubMenuItemActive,
1369
- } },
1370
- React__default.createElement(NavigationHeaderNav, { isFluid: isFluid, isExtended: isExtended, background: navBarBackground, isPill: isPill },
1371
- React__default.createElement("div", { className: "arc-NavigationHeader-inner" },
1372
- React__default.createElement("div", { className: "arc-NavigationHeader-leftSlot" },
1373
- React__default.createElement(NavigationHeaderLogo, __assign({}, logo)),
1374
- leftSlot),
1375
- React__default.createElement("div", { className: "arc-NavigationHeader-navSlot" },
1376
- navItems && (React__default.createElement(Visible, __assign({}, navMenuVisibilityProps),
1377
- React__default.createElement(NavigationHeaderNavList, { navItems: navItems, meatballMenuTooltip: meatballMenuTooltip }))),
1378
- React__default.createElement("div", { className: "arc-NavigationHeader-middleSlot" }, middleSlot)),
1379
- rightSlot && (React__default.createElement("div", { className: "arc-NavigationHeader-rightSlot" }, rightSlot)),
1380
- React__default.createElement(Visible, __assign({}, burgerMenuVisibilityProps),
1381
- React__default.createElement("div", { className: "arc-NavigationHeader-burgerMenuSlot" },
1382
- React__default.createElement(NavigationHeaderBurgerMenu, { logo: logo, background: background, pathway: burgerMenuPathway, navItems: navItems, actions: burgerMenuActions, header: burgerMenuHeader, footer: burgerMenuFooter, onOpenChange: onOpenChange })))))));
3536
+ var setNavBarRef = function (el) {
3537
+ el && setNavBarEl(el);
3538
+ };
3539
+ var contextValue = useMemo(function () { return ({
3540
+ navBarEl: navBarEl,
3541
+ isPill: isPill,
3542
+ isExtended: isExtended,
3543
+ isFluid: isFluid,
3544
+ }); }, [navBarEl, isPill, isExtended, isFluid]);
3545
+ var allNavItems = __spreadArray(__spreadArray([], defaultEmptyArray(navItems), true), defaultEmptyArray(extraNavItems), true);
3546
+ return (React__default.createElement(NavigationHeaderContext.Provider, { value: contextValue },
3547
+ React__default.createElement("nav", { "aria-label": "primary" },
3548
+ React__default.createElement(NavigationHeaderContainer, { ref: setNavBarRef, isPill: isPill, isExtended: isExtended, isFluid: isFluid, backgroundColor: background },
3549
+ React__default.createElement("div", { className: "arc-NavigationHeader-inner" },
3550
+ React__default.createElement("div", { className: "arc-NavigationHeader-leftSlot" },
3551
+ React__default.createElement(NavigationHeaderLogo, __assign({}, logo)),
3552
+ leftSlot),
3553
+ React__default.createElement("div", { className: "arc-NavigationHeader-navSlot" },
3554
+ navItems && (React__default.createElement(Visible, __assign({}, navMenuVisibilityProps),
3555
+ React__default.createElement(NavigationHeaderNavList, { navItems: navItems, background: background, extraNavItems: extraNavItems, extraMenuAriaLabel: extraMenuAriaLabel, extraMenuTooltip: extraMenuTooltip }))),
3556
+ React__default.createElement("div", { className: "arc-NavigationHeader-middleSlot" }, middleSlot)),
3557
+ rightSlot && (React__default.createElement("div", { className: "arc-NavigationHeader-rightSlot" }, rightSlot)),
3558
+ React__default.createElement(Visible, __assign({}, burgerMenuVisibilityProps),
3559
+ React__default.createElement("div", { className: "arc-NavigationHeader-burgerMenuSlot" },
3560
+ React__default.createElement(NavigationHeaderSideMenu, { menuPosition: "right", logo: logo, background: background, pathway: burgerMenuPathway, navItems: allNavItems, actions: burgerMenuActions, header: burgerMenuHeader, footer: burgerMenuFooter, onOpenChange: onBurgerMenuOpenChange }))))))));
1383
3561
  };
1384
3562
 
1385
3563
  var NavigationHeaderAction = function (_a) {
1386
- var ariaLabel = _a.ariaLabel, icon = _a.icon, onClick = _a.onClick, title = _a.title, supportingCopy = _a.supportingCopy, _b = _a.isAttention, isAttention = _b === void 0 ? false : _b;
3564
+ var ariaLabel = _a.ariaLabel, icon = _a.icon, onClick = _a.onClick, title = _a.title, supportingCopy = _a.supportingCopy, ref = _a.ref, href = _a.href, _b = _a.isAttention, isAttention = _b === void 0 ? false : _b;
1387
3565
  return (React__default.createElement("div", { className: classNames("arc-NavigationHeaderAction", {
1388
3566
  "arc-NavigationHeaderAction--attention": isAttention,
1389
3567
  }) },
1390
3568
  React__default.createElement(Tooltip, { asChild: true, title: title, alignContent: "center", supportingCopy: supportingCopy, delayDuration: DELAY_DURATION, side: "bottom" },
1391
- React__default.createElement(NavigationHeaderButton, { isPadded: false, onClick: onClick },
3569
+ React__default.createElement(NavigationHeaderButton, { href: href, ref: ref, isPadded: false, onClick: onClick },
1392
3570
  React__default.createElement("div", { className: "arc-NavigationHeaderAction-content" },
1393
- React__default.createElement(Icon, { "aria-hidden": true, icon: icon, size: 24 }),
3571
+ typeof icon === "string" ? (React__default.createElement(Icon, { "aria-hidden": true, icon: icon, size: 24 })) : (icon),
1394
3572
  React__default.createElement(VisuallyHidden, null, ariaLabel))))));
1395
3573
  };
1396
3574
 
3575
+ var NavigationHeaderSearchMenu = function (_a) {
3576
+ var onSubmit = _a.onSubmit, quickLinks = _a.quickLinks, onInputChange = _a.onInputChange, _b = _a.submitButtonAriaLabel, submitButtonAriaLabel = _b === void 0 ? "Submit search" : _b, _c = _a.panelTitle, panelTitle = _c === void 0 ? "Quick links" : _c, _d = _a.description, description = _d === void 0 ? "Discover our products and how we can help your business grow" : _d, _e = _a.accessibleMenuTitle, accessibleMenuTitle = _e === void 0 ? "Search menu" : _e, _f = _a.label, label = _f === void 0 ? "Search" : _f, _g = _a.triggerTooltip, triggerTooltip = _g === void 0 ? "Search" : _g, _h = _a.triggerAriaLabel, triggerAriaLabel = _h === void 0 ? "Open search menu" : _h;
3577
+ var id = useId$1();
3578
+ var listBoxId = useId$1();
3579
+ var inputId = useId$1();
3580
+ var _j = useState(undefined), highlightedOptionIndex = _j[0], setHighlightedOptionIndex = _j[1];
3581
+ var _k = useState(""), searchTerm = _k[0], setSearchTerm = _k[1];
3582
+ var inputRef = useRef(null);
3583
+ var hasHighlightedOption = typeof highlightedOptionIndex === "number";
3584
+ var onChange = function (e) {
3585
+ onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(e.target.value);
3586
+ setSearchTerm(e.target.value);
3587
+ setHighlightedOptionIndex(undefined);
3588
+ };
3589
+ var onFormSubmit = function (e) {
3590
+ e.preventDefault();
3591
+ onSubmit && onSubmit(searchTerm);
3592
+ };
3593
+ var onOpenChange = function (isOpen) {
3594
+ if (!isOpen) {
3595
+ setSearchTerm("");
3596
+ setHighlightedOptionIndex(undefined);
3597
+ }
3598
+ };
3599
+ var onInputKeyDown = function (e) {
3600
+ var key = e.key;
3601
+ if (key === KeyNames.Enter || key === KeyNames.Space) {
3602
+ !searchTerm && e.preventDefault();
3603
+ }
3604
+ if (key === KeyNames.ArrowDown) {
3605
+ e.preventDefault();
3606
+ var newIndex = !hasHighlightedOption ||
3607
+ highlightedOptionIndex === quickLinks.length - 1
3608
+ ? 0
3609
+ : highlightedOptionIndex + 1;
3610
+ setHighlightedOptionIndex(newIndex);
3611
+ setSearchTerm(quickLinks[newIndex].text);
3612
+ }
3613
+ if (key === KeyNames.ArrowUp) {
3614
+ e.preventDefault();
3615
+ var newIndex = (!hasHighlightedOption || highlightedOptionIndex === 0
3616
+ ? quickLinks.length
3617
+ : highlightedOptionIndex) - 1;
3618
+ setHighlightedOptionIndex(newIndex);
3619
+ setSearchTerm(quickLinks[newIndex].text);
3620
+ }
3621
+ };
3622
+ return (React__default.createElement(NavigationHeaderSubnav, { onOpenChange: onOpenChange },
3623
+ React__default.createElement(NavigationHeaderSubnavTrigger, { asChild: true },
3624
+ React__default.createElement(NavigationHeaderAction, { title: triggerTooltip, ariaLabel: triggerAriaLabel, icon: React__default.createElement(ThemeIcon, { icon: "navigationHeaderSearch", size: 24 }) })),
3625
+ React__default.createElement(NavigationHeaderSubnavContent, { background: "lightElevated", menuTitle: accessibleMenuTitle },
3626
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu" },
3627
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu-labelContainer" },
3628
+ React__default.createElement("label", { htmlFor: inputId },
3629
+ React__default.createElement(Heading, { size: "m" }, label)),
3630
+ React__default.createElement(Text, null, description)),
3631
+ React__default.createElement("form", { onSubmit: onFormSubmit, className: "arc-NavigationHeaderSearchMenu-form" },
3632
+ React__default.createElement("input", { id: inputId, role: "combobox", autoComplete: "off", "aria-autocomplete": "none", "aria-controls": listBoxId, "aria-activedescendant": hasHighlightedOption
3633
+ ? "".concat(listBoxId, "-").concat(highlightedOptionIndex)
3634
+ : undefined, ref: inputRef, value: searchTerm, onChange: onChange, onKeyDown: onInputKeyDown, className: "arc-NavigationHeaderSearchMenu-input", type: "text" }),
3635
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu-actions" },
3636
+ React__default.createElement(SemanticButton, { "aria-label": submitButtonAriaLabel, className: "arc-NavigationHeaderSearchMenu-submitButton", type: "submit" },
3637
+ React__default.createElement(ThemeIcon, { icon: "navigationHeaderSearch" })))),
3638
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu-results" },
3639
+ React__default.createElement(Heading, { level: "3", size: "xxxs" }, panelTitle),
3640
+ React__default.createElement("ul", { id: listBoxId, role: "listbox", onMouseLeave: function () { return setHighlightedOptionIndex(undefined); }, className: "arc-NavigationHeaderSearchMenu-resultsList" }, quickLinks === null || quickLinks === void 0 ? void 0 : quickLinks.map(function (_a, i) {
3641
+ var text = _a.text, href = _a.href, onClick = _a.onClick;
3642
+ return (React__default.createElement("li", { className: classNames("arc-NavigationHeaderSearchMenu-listItem", {
3643
+ "arc-NavigationHeaderSearchMenu-listItem--highlighted": highlightedOptionIndex === i,
3644
+ }), role: "option", "aria-label": text, onMouseMove: function () { return setHighlightedOptionIndex(i); }, "aria-selected": highlightedOptionIndex === i, id: "".concat(listBoxId, "-").concat(i), key: "".concat(id, "-search-link-").concat(text, "-").concat(i) },
3645
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu-linkContainer" },
3646
+ React__default.createElement(Heading, { size: "xxs" },
3647
+ React__default.createElement(SemanticLink, { className: "arc-NavigationHeaderSearchMenu-link", href: href, onClick: onClick, tabIndex: -1 }, text))),
3648
+ React__default.createElement("div", { className: "arc-NavigationHeaderSearchMenu-iconContainer" },
3649
+ React__default.createElement(ArrowRightIcon, null))));
3650
+ })))))));
3651
+ };
3652
+ var KeyNames;
3653
+ (function (KeyNames) {
3654
+ KeyNames["ArrowUp"] = "ArrowUp";
3655
+ KeyNames["ArrowDown"] = "ArrowDown";
3656
+ KeyNames["Home"] = "Home";
3657
+ KeyNames["Enter"] = "Enter";
3658
+ KeyNames["Escape"] = "Escape";
3659
+ KeyNames["Space"] = " ";
3660
+ })(KeyNames || (KeyNames = {}));
3661
+
3662
+ var NavigationHeaderBasket = function (_a) {
3663
+ var supportingCopy = _a.supportingCopy, onClick = _a.onClick, href = _a.href, _b = _a.popoverText, popoverText = _b === void 0 ? "No items in basket" : _b, _c = _a.title, title = _c === void 0 ? "Basket" : _c, _d = _a.ariaLabel, ariaLabel = _d === void 0 ? "Basket, empty" : _d, _e = _a.isAttention, isAttention = _e === void 0 ? false : _e;
3664
+ return isAttention ? (React__default.createElement(NavigationHeaderAction, { isAttention: true, href: href, title: title, onClick: onClick, supportingCopy: supportingCopy, ariaLabel: ariaLabel, icon: React__default.createElement(ThemeIcon, { icon: "navigationHeaderBasket", size: 24 }) })) : (React__default.createElement(NavigationHeaderDropdown, { tooltip: title, ariaLabel: ariaLabel, onClick: onClick, trigger: React__default.createElement("div", { className: "arc-NavigationHeaderBasket-trigger" },
3665
+ React__default.createElement(ThemeIcon, { icon: "navigationHeaderBasket", size: 24 })) }, popoverText));
3666
+ };
3667
+
1397
3668
  var NavigationHeaderActionBar = function (_a) {
1398
3669
  var children = _a.children;
1399
- var id = useId();
3670
+ var id = useId$1();
1400
3671
  var items = React__default.Children.map(children, function (child, i) { return (React__default.createElement("li", { key: "".concat(id, "-navigation-header-bar-action-item-").concat(i) }, child)); });
1401
3672
  return React__default.createElement("ul", { className: "arc-NavigationHeaderActionBar" }, items);
1402
3673
  };
@@ -1415,4 +3686,4 @@ var NavigationHeaderPage = function (_a) {
1415
3686
  React__default.createElement(Text, null, page))))));
1416
3687
  };
1417
3688
 
1418
- export { NavigationHeader, NavigationHeaderAction, NavigationHeaderActionBar, NavigationHeaderPage };
3689
+ export { NavigationHeader, NavigationHeaderAction, NavigationHeaderActionBar, NavigationHeaderBasket, NavigationHeaderPage, NavigationHeaderSearchMenu };