@salesmind-ai/design-system 0.3.3 → 0.3.4

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 (215) hide show
  1. package/dist/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
  2. package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
  3. package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
  4. package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
  5. package/dist/admin/index.cjs +2928 -68
  6. package/dist/admin/index.cjs.map +1 -1
  7. package/dist/admin/index.js +2915 -5
  8. package/dist/admin/index.js.map +1 -1
  9. package/dist/blog/index.cjs +1064 -53
  10. package/dist/blog/index.cjs.map +1 -1
  11. package/dist/blog/index.d.cts +1 -1
  12. package/dist/blog/index.d.ts +1 -1
  13. package/dist/blog/index.js +1054 -8
  14. package/dist/blog/index.js.map +1 -1
  15. package/dist/charts/index.cjs +2694 -46
  16. package/dist/charts/index.cjs.map +1 -1
  17. package/dist/charts/index.js +2680 -3
  18. package/dist/charts/index.js.map +1 -1
  19. package/dist/core/index.cjs +4333 -807
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.js +4130 -14
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/i18n/index.cjs +558 -86
  24. package/dist/i18n/index.cjs.map +1 -1
  25. package/dist/i18n/index.js +544 -1
  26. package/dist/i18n/index.js.map +1 -1
  27. package/dist/index.cjs +17140 -1432
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.css +24 -13
  30. package/dist/index.css.map +1 -1
  31. package/dist/index.d.cts +2 -2
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +16785 -31
  34. package/dist/index.js.map +1 -1
  35. package/dist/marketing/index.cjs +3072 -142
  36. package/dist/marketing/index.cjs.map +1 -1
  37. package/dist/marketing/index.d.cts +1 -1
  38. package/dist/marketing/index.d.ts +1 -1
  39. package/dist/marketing/index.js +3042 -11
  40. package/dist/marketing/index.js.map +1 -1
  41. package/dist/motion/index.cjs +1222 -26
  42. package/dist/motion/index.cjs.map +1 -1
  43. package/dist/motion/index.js +1215 -2
  44. package/dist/motion/index.js.map +1 -1
  45. package/dist/nav/index.cjs +1518 -101
  46. package/dist/nav/index.cjs.map +1 -1
  47. package/dist/nav/index.css +24 -13
  48. package/dist/nav/index.css.map +1 -1
  49. package/dist/nav/index.js +1498 -4
  50. package/dist/nav/index.js.map +1 -1
  51. package/dist/report/index.cjs +2403 -171
  52. package/dist/report/index.cjs.map +1 -1
  53. package/dist/report/index.js +2363 -3
  54. package/dist/report/index.js.map +1 -1
  55. package/dist/sections/index.cjs +382 -28
  56. package/dist/sections/index.cjs.map +1 -1
  57. package/dist/sections/index.d.cts +15 -69
  58. package/dist/sections/index.d.ts +15 -69
  59. package/dist/sections/index.js +376 -4
  60. package/dist/sections/index.js.map +1 -1
  61. package/dist/social-proof/index.cjs +1250 -53
  62. package/dist/social-proof/index.cjs.map +1 -1
  63. package/dist/social-proof/index.d.cts +1 -1
  64. package/dist/social-proof/index.d.ts +1 -1
  65. package/dist/social-proof/index.js +1235 -6
  66. package/dist/social-proof/index.js.map +1 -1
  67. package/dist/theme/index.cjs +565 -38
  68. package/dist/theme/index.cjs.map +1 -1
  69. package/dist/theme/index.js +555 -2
  70. package/dist/theme/index.js.map +1 -1
  71. package/dist/web/client/index.cjs +491 -38
  72. package/dist/web/client/index.cjs.map +1 -1
  73. package/dist/web/client/index.js +483 -4
  74. package/dist/web/client/index.js.map +1 -1
  75. package/dist/web/index.cjs +1346 -158
  76. package/dist/web/index.cjs.map +1 -1
  77. package/dist/web/index.js +1305 -9
  78. package/dist/web/index.js.map +1 -1
  79. package/dist/web/server/index.cjs +563 -26
  80. package/dist/web/server/index.cjs.map +1 -1
  81. package/dist/web/server/index.js +560 -1
  82. package/dist/web/server/index.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-2GARWEJK.js +0 -17
  85. package/dist/chunk-2GARWEJK.js.map +0 -1
  86. package/dist/chunk-3NKRFUAR.js +0 -37
  87. package/dist/chunk-3NKRFUAR.js.map +0 -1
  88. package/dist/chunk-3TGSIILM.cjs +0 -201
  89. package/dist/chunk-3TGSIILM.cjs.map +0 -1
  90. package/dist/chunk-4GM5BGBN.cjs +0 -801
  91. package/dist/chunk-4GM5BGBN.cjs.map +0 -1
  92. package/dist/chunk-5LGDEZWY.cjs +0 -2434
  93. package/dist/chunk-5LGDEZWY.cjs.map +0 -1
  94. package/dist/chunk-6H4DSTXR.js +0 -786
  95. package/dist/chunk-6H4DSTXR.js.map +0 -1
  96. package/dist/chunk-6UNG76Y2.js +0 -153
  97. package/dist/chunk-6UNG76Y2.js.map +0 -1
  98. package/dist/chunk-7PX2AZ6Y.js +0 -39
  99. package/dist/chunk-7PX2AZ6Y.js.map +0 -1
  100. package/dist/chunk-B6AVAX4F.js +0 -1415
  101. package/dist/chunk-B6AVAX4F.js.map +0 -1
  102. package/dist/chunk-BILT5KD3.js +0 -264
  103. package/dist/chunk-BILT5KD3.js.map +0 -1
  104. package/dist/chunk-C2BCDNAV.js +0 -24
  105. package/dist/chunk-C2BCDNAV.js.map +0 -1
  106. package/dist/chunk-CH42VPWE.cjs +0 -421
  107. package/dist/chunk-CH42VPWE.cjs.map +0 -1
  108. package/dist/chunk-CJ2MKVAF.cjs +0 -46
  109. package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
  110. package/dist/chunk-DP74LUXG.cjs +0 -98
  111. package/dist/chunk-DP74LUXG.cjs.map +0 -1
  112. package/dist/chunk-E7D6EKJ4.cjs +0 -44
  113. package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
  114. package/dist/chunk-ECXBTUH6.cjs +0 -584
  115. package/dist/chunk-ECXBTUH6.cjs.map +0 -1
  116. package/dist/chunk-EFRAP5ES.js +0 -157
  117. package/dist/chunk-EFRAP5ES.js.map +0 -1
  118. package/dist/chunk-F6YYWMME.js +0 -485
  119. package/dist/chunk-F6YYWMME.js.map +0 -1
  120. package/dist/chunk-FAFAP4L5.js +0 -183
  121. package/dist/chunk-FAFAP4L5.js.map +0 -1
  122. package/dist/chunk-GUZIMHWS.js +0 -1608
  123. package/dist/chunk-GUZIMHWS.js.map +0 -1
  124. package/dist/chunk-H2Y6BSTL.cjs +0 -69
  125. package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
  126. package/dist/chunk-HN4PHABT.js +0 -126
  127. package/dist/chunk-HN4PHABT.js.map +0 -1
  128. package/dist/chunk-HRENHNDJ.js +0 -211
  129. package/dist/chunk-HRENHNDJ.js.map +0 -1
  130. package/dist/chunk-I75BFEYT.cjs +0 -2561
  131. package/dist/chunk-I75BFEYT.cjs.map +0 -1
  132. package/dist/chunk-IFRATNLU.js +0 -562
  133. package/dist/chunk-IFRATNLU.js.map +0 -1
  134. package/dist/chunk-IYPXJ6YC.cjs +0 -69
  135. package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
  136. package/dist/chunk-JPJN4YBC.js +0 -409
  137. package/dist/chunk-JPJN4YBC.js.map +0 -1
  138. package/dist/chunk-KBA2LFBG.js +0 -62
  139. package/dist/chunk-KBA2LFBG.js.map +0 -1
  140. package/dist/chunk-KCKUSU2M.cjs +0 -166
  141. package/dist/chunk-KCKUSU2M.cjs.map +0 -1
  142. package/dist/chunk-KJ2OXQF4.js +0 -287
  143. package/dist/chunk-KJ2OXQF4.js.map +0 -1
  144. package/dist/chunk-KNQEIU7O.cjs +0 -1202
  145. package/dist/chunk-KNQEIU7O.cjs.map +0 -1
  146. package/dist/chunk-KVGSVGRK.cjs +0 -569
  147. package/dist/chunk-KVGSVGRK.cjs.map +0 -1
  148. package/dist/chunk-L352JRV6.cjs +0 -105
  149. package/dist/chunk-L352JRV6.cjs.map +0 -1
  150. package/dist/chunk-LJADZITX.cjs +0 -298
  151. package/dist/chunk-LJADZITX.cjs.map +0 -1
  152. package/dist/chunk-LMJPWXTZ.cjs +0 -194
  153. package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
  154. package/dist/chunk-LOWEAQST.js +0 -701
  155. package/dist/chunk-LOWEAQST.js.map +0 -1
  156. package/dist/chunk-MDB2WCRQ.cjs +0 -137
  157. package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
  158. package/dist/chunk-MQDEE7HC.cjs +0 -283
  159. package/dist/chunk-MQDEE7HC.cjs.map +0 -1
  160. package/dist/chunk-MQRB634A.cjs +0 -34
  161. package/dist/chunk-MQRB634A.cjs.map +0 -1
  162. package/dist/chunk-MTI27RDV.js +0 -185
  163. package/dist/chunk-MTI27RDV.js.map +0 -1
  164. package/dist/chunk-MU6GW5ZV.js +0 -2317
  165. package/dist/chunk-MU6GW5ZV.js.map +0 -1
  166. package/dist/chunk-NN3TUHIH.js +0 -28
  167. package/dist/chunk-NN3TUHIH.js.map +0 -1
  168. package/dist/chunk-NT4LBP7D.cjs +0 -111
  169. package/dist/chunk-NT4LBP7D.cjs.map +0 -1
  170. package/dist/chunk-OLV7OD3X.cjs +0 -502
  171. package/dist/chunk-OLV7OD3X.cjs.map +0 -1
  172. package/dist/chunk-OXNXEQY7.js +0 -2538
  173. package/dist/chunk-OXNXEQY7.js.map +0 -1
  174. package/dist/chunk-P5BOFE5A.js +0 -546
  175. package/dist/chunk-P5BOFE5A.js.map +0 -1
  176. package/dist/chunk-Q2MFGYTE.cjs +0 -1449
  177. package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
  178. package/dist/chunk-Q75DBVDY.cjs +0 -68
  179. package/dist/chunk-Q75DBVDY.cjs.map +0 -1
  180. package/dist/chunk-REQ5Q6ZI.js +0 -1022
  181. package/dist/chunk-REQ5Q6ZI.js.map +0 -1
  182. package/dist/chunk-SICKWUWB.js +0 -62
  183. package/dist/chunk-SICKWUWB.js.map +0 -1
  184. package/dist/chunk-T343CCH5.js +0 -1190
  185. package/dist/chunk-T343CCH5.js.map +0 -1
  186. package/dist/chunk-TEC62D4A.cjs +0 -1624
  187. package/dist/chunk-TEC62D4A.cjs.map +0 -1
  188. package/dist/chunk-TW5JB35D.js +0 -2122
  189. package/dist/chunk-TW5JB35D.js.map +0 -1
  190. package/dist/chunk-VC5LMUVQ.cjs +0 -20
  191. package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
  192. package/dist/chunk-VM7WFMKI.cjs +0 -76
  193. package/dist/chunk-VM7WFMKI.cjs.map +0 -1
  194. package/dist/chunk-W2WTP6HS.cjs +0 -233
  195. package/dist/chunk-W2WTP6HS.cjs.map +0 -1
  196. package/dist/chunk-WH7PYHZY.cjs +0 -35
  197. package/dist/chunk-WH7PYHZY.cjs.map +0 -1
  198. package/dist/chunk-XQZVY7JJ.cjs +0 -717
  199. package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
  200. package/dist/chunk-XU3OMQ7V.js +0 -98
  201. package/dist/chunk-XU3OMQ7V.js.map +0 -1
  202. package/dist/chunk-XWPDRMZG.js +0 -62
  203. package/dist/chunk-XWPDRMZG.js.map +0 -1
  204. package/dist/chunk-Y3CPKNB7.js +0 -67
  205. package/dist/chunk-Y3CPKNB7.js.map +0 -1
  206. package/dist/chunk-YNVRDD2P.js +0 -98
  207. package/dist/chunk-YNVRDD2P.js.map +0 -1
  208. package/dist/chunk-YSYR54XR.js +0 -92
  209. package/dist/chunk-YSYR54XR.js.map +0 -1
  210. package/dist/chunk-YTYDQBVY.cjs +0 -162
  211. package/dist/chunk-YTYDQBVY.cjs.map +0 -1
  212. package/dist/chunk-ZDLOA2UT.cjs +0 -1042
  213. package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
  214. package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
  215. package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
@@ -1,1042 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkLJADZITX_cjs = require('./chunk-LJADZITX.cjs');
4
- var chunkMDB2WCRQ_cjs = require('./chunk-MDB2WCRQ.cjs');
5
- var react = require('react');
6
- var clsx3 = require('clsx');
7
- var jsxRuntime = require('react/jsx-runtime');
8
-
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
-
11
- var clsx3__default = /*#__PURE__*/_interopDefault(clsx3);
12
-
13
- var NavbarMobileNavItem = react.forwardRef(
14
- ({ as: Component = "a", className, active, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
15
- Component,
16
- {
17
- ref,
18
- className: clsx3__default.default(
19
- "ds-navbar__mobile-nav-item",
20
- active && "ds-navbar__mobile-nav-item--active",
21
- className
22
- ),
23
- "aria-current": active ? "page" : void 0,
24
- ...props,
25
- children
26
- }
27
- )
28
- );
29
- NavbarMobileNavItem.displayName = "NavbarMobileNavItem";
30
- function NavbarMobileSeparator({ className }) {
31
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx3__default.default("ds-navbar__mobile-separator", className), role: "separator" });
32
- }
33
- NavbarMobileSeparator.displayName = "NavbarMobileSeparator";
34
- var NavbarMobileActions = react.forwardRef(
35
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: clsx3__default.default("ds-navbar__mobile-actions", className), ...props, children })
36
- );
37
- NavbarMobileActions.displayName = "NavbarMobileActions";
38
- var ChevronDown = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
39
- "path",
40
- {
41
- d: "M4 6L8 10L12 6",
42
- stroke: "currentColor",
43
- strokeWidth: "1.5",
44
- strokeLinecap: "round",
45
- strokeLinejoin: "round"
46
- }
47
- ) });
48
- var NavbarMegaMenu = react.forwardRef(
49
- ({ trigger, children, className, isOpen: controlledOpen, onOpenChange, variant = "fullWidth" }, ref) => {
50
- const [internalOpen, setInternalOpen] = react.useState(false);
51
- const isControlled = controlledOpen !== void 0;
52
- const isOpen = isControlled ? controlledOpen : internalOpen;
53
- const containerRef = react.useRef(null);
54
- const triggerRef = react.useRef(null);
55
- const timeoutRef = react.useRef(null);
56
- const handleOpen = react.useCallback(() => {
57
- const newState = true;
58
- if (isOpen !== newState) {
59
- if (!isControlled) setInternalOpen(newState);
60
- onOpenChange?.(newState);
61
- }
62
- }, [isOpen, isControlled, onOpenChange]);
63
- const handleClose = react.useCallback(() => {
64
- const newState = false;
65
- if (isOpen !== newState) {
66
- if (!isControlled) setInternalOpen(newState);
67
- onOpenChange?.(newState);
68
- }
69
- }, [isOpen, isControlled, onOpenChange]);
70
- const handleToggle = react.useCallback(() => {
71
- if (isOpen) {
72
- handleClose();
73
- } else {
74
- handleOpen();
75
- }
76
- }, [isOpen, handleClose, handleOpen]);
77
- const handleMouseEnter = react.useCallback(() => {
78
- if (timeoutRef.current) {
79
- window.clearTimeout(timeoutRef.current);
80
- timeoutRef.current = null;
81
- }
82
- handleOpen();
83
- }, [handleOpen]);
84
- const handleMouseLeave = react.useCallback(() => {
85
- if (timeoutRef.current) {
86
- window.clearTimeout(timeoutRef.current);
87
- }
88
- timeoutRef.current = window.setTimeout(() => {
89
- handleClose();
90
- }, 150);
91
- }, [handleClose]);
92
- react.useEffect(() => {
93
- return () => {
94
- if (timeoutRef.current) window.clearTimeout(timeoutRef.current);
95
- };
96
- }, []);
97
- react.useEffect(() => {
98
- if (!isOpen) return;
99
- const handleClickOutside = (event) => {
100
- if (containerRef.current && !containerRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
101
- handleClose();
102
- }
103
- };
104
- document.addEventListener("mousedown", handleClickOutside);
105
- return () => document.removeEventListener("mousedown", handleClickOutside);
106
- }, [isOpen, handleClose]);
107
- react.useEffect(() => {
108
- if (!isOpen) return;
109
- const handleEscape = (e) => {
110
- if (e.key === "Escape") handleClose();
111
- };
112
- document.addEventListener("keydown", handleEscape);
113
- return () => document.removeEventListener("keydown", handleEscape);
114
- }, [isOpen, handleClose]);
115
- return /* @__PURE__ */ jsxRuntime.jsxs(
116
- "div",
117
- {
118
- className: clsx3__default.default("ds-navbar-mega-menu", `ds-navbar-mega-menu--${variant}`, className),
119
- ref,
120
- onMouseEnter: handleMouseEnter,
121
- onMouseLeave: handleMouseLeave,
122
- children: [
123
- /* @__PURE__ */ jsxRuntime.jsxs(
124
- "button",
125
- {
126
- ref: triggerRef,
127
- className: "ds-navbar-mega-menu__trigger",
128
- onClick: handleToggle,
129
- "aria-expanded": isOpen,
130
- "aria-haspopup": "true",
131
- children: [
132
- trigger,
133
- /* @__PURE__ */ jsxRuntime.jsx(
134
- "span",
135
- {
136
- className: "ds-navbar-mega-menu__chevron",
137
- "data-state": isOpen ? "open" : "closed",
138
- children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDown, {})
139
- }
140
- )
141
- ]
142
- }
143
- ),
144
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, children: /* @__PURE__ */ jsxRuntime.jsx(
145
- "div",
146
- {
147
- className: clsx3__default.default(
148
- "ds-navbar-mega-menu__content",
149
- `ds-navbar-mega-menu__content--${variant}`
150
- ),
151
- "data-state": isOpen ? "open" : "closed",
152
- children: variant === "fullWidth" ? /* @__PURE__ */ jsxRuntime.jsx(chunkMDB2WCRQ_cjs.Container, { children }) : children
153
- }
154
- ) })
155
- ]
156
- }
157
- );
158
- }
159
- );
160
- NavbarMegaMenu.displayName = "NavbarMegaMenu";
161
- function NavbarMegaMenuSection({ heading, children, className }) {
162
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx3__default.default("ds-navbar-mega-menu__section", className), children: [
163
- heading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-navbar-mega-menu__section-heading", children: heading }),
164
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-navbar-mega-menu__section-items", children })
165
- ] });
166
- }
167
- NavbarMegaMenuSection.displayName = "NavbarMegaMenuSection";
168
- var NavbarMegaMenuItem = react.forwardRef(
169
- ({ icon, label, description, className, as: Comp = "a", ...rest }, ref) => {
170
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-navbar-mega-menu__item-wrapper", children: /* @__PURE__ */ jsxRuntime.jsxs(
171
- Comp,
172
- {
173
- ref,
174
- className: clsx3__default.default("ds-navbar-mega-menu__item", className),
175
- ...rest,
176
- children: [
177
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-mega-menu__item-icon", children: icon }),
178
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ds-navbar-mega-menu__item-text", children: [
179
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-mega-menu__item-label", children: label }),
180
- description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-mega-menu__item-description", children: description })
181
- ] })
182
- ]
183
- }
184
- ) });
185
- }
186
- );
187
- NavbarMegaMenuItem.displayName = "NavbarMegaMenuItem";
188
- var ChevronDown2 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "8", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
189
- "path",
190
- {
191
- d: "M4 6L8 10L12 6",
192
- stroke: "currentColor",
193
- strokeWidth: "1.5",
194
- strokeLinecap: "round",
195
- strokeLinejoin: "round"
196
- }
197
- ) });
198
- var ScrollContext = react.createContext({ scrolled: false });
199
- var TabsContext = react.createContext({
200
- activeMenuId: null,
201
- openMenu: () => {
202
- },
203
- closeMenu: () => {
204
- }
205
- });
206
- function useFocusTrap(containerRef, active) {
207
- react.useEffect(() => {
208
- if (!active || !containerRef.current) return;
209
- const container = containerRef.current;
210
- const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
211
- const handleKeyDown = (e) => {
212
- if (e.key !== "Tab") return;
213
- const focusable2 = Array.from(container.querySelectorAll(FOCUSABLE));
214
- if (focusable2.length === 0) {
215
- e.preventDefault();
216
- return;
217
- }
218
- const first = focusable2[0];
219
- const last = focusable2[focusable2.length - 1];
220
- if (e.shiftKey) {
221
- if (document.activeElement === first) {
222
- e.preventDefault();
223
- last.focus();
224
- }
225
- } else {
226
- if (document.activeElement === last) {
227
- e.preventDefault();
228
- first.focus();
229
- }
230
- }
231
- };
232
- const focusable = container.querySelectorAll(FOCUSABLE);
233
- if (focusable.length > 0) {
234
- focusable[0].focus();
235
- }
236
- container.addEventListener("keydown", handleKeyDown);
237
- return () => container.removeEventListener("keydown", handleKeyDown);
238
- }, [active, containerRef]);
239
- }
240
- var HYSTERESIS_RATIO = 0.25;
241
- var NavbarV2 = react.forwardRef(
242
- ({
243
- className,
244
- mobileContent,
245
- mobileToggleLabels,
246
- isMenuOpen,
247
- onMenuOpenChange,
248
- scrollBorder = true,
249
- scrollThreshold = 32,
250
- children,
251
- ...props
252
- }, ref) => {
253
- const [internalMenuOpen, setInternalMenuOpen] = react.useState(false);
254
- const isMobileMenuOpen = isMenuOpen !== void 0 ? isMenuOpen : internalMenuOpen;
255
- const navRef = react.useRef(null);
256
- const overlayRef = react.useRef(null);
257
- const [navHeight, setNavHeight] = react.useState(64);
258
- const openLabel = mobileToggleLabels?.open ?? "Open menu";
259
- const closeLabel = mobileToggleLabels?.close ?? "Close menu";
260
- const [scrolled, setScrolled] = react.useState(() => {
261
- if (typeof window !== "undefined") {
262
- return window.scrollY > scrollThreshold;
263
- }
264
- return false;
265
- });
266
- react.useEffect(() => {
267
- if (!scrollBorder) return;
268
- const lowerBound = scrollThreshold * HYSTERESIS_RATIO;
269
- const handleScroll = () => {
270
- const y = window.scrollY;
271
- setScrolled((prev) => {
272
- if (!prev && y > scrollThreshold) return true;
273
- if (prev && y < lowerBound) return false;
274
- return prev;
275
- });
276
- };
277
- handleScroll();
278
- window.addEventListener("scroll", handleScroll, { passive: true });
279
- return () => window.removeEventListener("scroll", handleScroll);
280
- }, [scrollBorder, scrollThreshold]);
281
- const isScrolled = scrollBorder && scrolled;
282
- const scrollCtx = react.useMemo(
283
- () => ({ scrolled: isScrolled }),
284
- [isScrolled]
285
- );
286
- const handleToggle = () => {
287
- const newState = !isMobileMenuOpen;
288
- setInternalMenuOpen(newState);
289
- onMenuOpenChange?.(newState);
290
- };
291
- react.useEffect(() => {
292
- const el = navRef.current;
293
- if (!el) return;
294
- const observer = new ResizeObserver((entries) => {
295
- for (const entry of entries) {
296
- const h = entry.contentRect.height;
297
- setNavHeight(h);
298
- el.style.setProperty("--navbar-overlap", `${h}px`);
299
- }
300
- });
301
- observer.observe(el);
302
- return () => observer.disconnect();
303
- }, []);
304
- react.useEffect(() => {
305
- if (isMobileMenuOpen) {
306
- document.body.style.overflow = "hidden";
307
- return () => {
308
- document.body.style.overflow = "";
309
- };
310
- }
311
- }, [isMobileMenuOpen]);
312
- react.useEffect(() => {
313
- if (!isMobileMenuOpen) return;
314
- const handleEscape = (e) => {
315
- if (e.key === "Escape") {
316
- setInternalMenuOpen(false);
317
- onMenuOpenChange?.(false);
318
- }
319
- };
320
- document.addEventListener("keydown", handleEscape);
321
- return () => document.removeEventListener("keydown", handleEscape);
322
- }, [isMobileMenuOpen, onMenuOpenChange]);
323
- useFocusTrap(overlayRef, isMobileMenuOpen);
324
- const mergedRef = useMergedRef(ref, navRef);
325
- return /* @__PURE__ */ jsxRuntime.jsx(ScrollContext.Provider, { value: scrollCtx, children: /* @__PURE__ */ jsxRuntime.jsxs(
326
- "nav",
327
- {
328
- ref: mergedRef,
329
- className: clsx3__default.default(
330
- "ds-navbar-v2",
331
- isScrolled && "ds-navbar-v2--scrolled",
332
- className
333
- ),
334
- ...props,
335
- children: [
336
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-navbar-v2__container", children: [
337
- children,
338
- /* @__PURE__ */ jsxRuntime.jsx(
339
- "button",
340
- {
341
- className: "ds-navbar-v2__toggle",
342
- onClick: handleToggle,
343
- "aria-label": isMobileMenuOpen ? closeLabel : openLabel,
344
- "aria-expanded": isMobileMenuOpen,
345
- children: isMobileMenuOpen ? /* @__PURE__ */ jsxRuntime.jsxs(
346
- "svg",
347
- {
348
- width: "24",
349
- height: "24",
350
- viewBox: "0 0 24 24",
351
- fill: "none",
352
- stroke: "currentColor",
353
- strokeWidth: "2",
354
- strokeLinecap: "round",
355
- strokeLinejoin: "round",
356
- children: [
357
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
358
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
359
- ]
360
- }
361
- ) : /* @__PURE__ */ jsxRuntime.jsxs(
362
- "svg",
363
- {
364
- width: "24",
365
- height: "24",
366
- viewBox: "0 0 24 24",
367
- fill: "none",
368
- stroke: "currentColor",
369
- strokeWidth: "2",
370
- strokeLinecap: "round",
371
- strokeLinejoin: "round",
372
- children: [
373
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "3", y1: "12", x2: "21", y2: "12" }),
374
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "3", y1: "6", x2: "21", y2: "6" }),
375
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "3", y1: "18", x2: "21", y2: "18" })
376
- ]
377
- }
378
- )
379
- }
380
- )
381
- ] }),
382
- /* @__PURE__ */ jsxRuntime.jsx(
383
- "div",
384
- {
385
- ref: overlayRef,
386
- className: "ds-navbar-v2__mobile-overlay",
387
- style: { top: navHeight },
388
- "data-state": isMobileMenuOpen ? "open" : "closed",
389
- role: "dialog",
390
- "aria-modal": "true",
391
- "aria-label": closeLabel,
392
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-navbar-v2__mobile-content", children: mobileContent })
393
- }
394
- )
395
- ]
396
- }
397
- ) });
398
- }
399
- );
400
- NavbarV2.displayName = "NavbarV2";
401
- var NavbarV2Brand = react.forwardRef(
402
- ({ as: Component = "a", className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: clsx3__default.default("ds-navbar-v2__brand", className), ...props, children })
403
- );
404
- NavbarV2Brand.displayName = "NavbarV2Brand";
405
- var NavbarV2Tabs = react.forwardRef(
406
- ({ className, children, ...props }, ref) => {
407
- const [activeMenuId, setActiveMenuId] = react.useState(null);
408
- const { scrolled } = react.useContext(ScrollContext);
409
- const ctxValue = react.useMemo(
410
- () => ({
411
- activeMenuId,
412
- openMenu: (id) => setActiveMenuId(id),
413
- closeMenu: (id) => setActiveMenuId((prev) => prev === id ? null : prev)
414
- }),
415
- [activeMenuId]
416
- );
417
- return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxRuntime.jsx(
418
- "div",
419
- {
420
- ref,
421
- className: clsx3__default.default(
422
- "ds-navbar-v2__tabs",
423
- scrolled && "ds-navbar-v2__tabs--demoted",
424
- className
425
- ),
426
- ...props,
427
- children
428
- }
429
- ) });
430
- }
431
- );
432
- NavbarV2Tabs.displayName = "NavbarV2Tabs";
433
- var NavbarV2Tab = react.forwardRef(
434
- ({ as: Component = "button", active, icon, label, className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
435
- Component,
436
- {
437
- ref,
438
- className: clsx3__default.default("ds-navbar-v2__tab", active && "ds-navbar-v2__tab--active", className),
439
- "aria-current": active ? "page" : void 0,
440
- ...Component === "button" ? { type: "button" } : {},
441
- ...props,
442
- children: [
443
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-v2__tab-icon", children: icon }),
444
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-v2__tab-label", children: label }),
445
- children
446
- ]
447
- }
448
- )
449
- );
450
- NavbarV2Tab.displayName = "NavbarV2Tab";
451
- var NavbarV2TabMenu = react.forwardRef(
452
- ({
453
- icon,
454
- label,
455
- active,
456
- children,
457
- className,
458
- isOpen: controlledOpen,
459
- onOpenChange
460
- }, ref) => {
461
- const instanceId = react.useId();
462
- const panelId = `navbar-v2-panel-${instanceId}`;
463
- const { activeMenuId, openMenu, closeMenu } = react.useContext(TabsContext);
464
- const isControlled = controlledOpen !== void 0;
465
- const isOpen = isControlled ? controlledOpen : activeMenuId === instanceId;
466
- const containerRef = react.useRef(null);
467
- const triggerRef = react.useRef(null);
468
- const panelRef = react.useRef(null);
469
- const timeoutRef = react.useRef(null);
470
- const handleOpen = react.useCallback(() => {
471
- if (!isOpen) {
472
- if (!isControlled) openMenu(instanceId);
473
- onOpenChange?.(true);
474
- }
475
- }, [isOpen, isControlled, openMenu, instanceId, onOpenChange]);
476
- const handleClose = react.useCallback(() => {
477
- if (isOpen) {
478
- if (!isControlled) closeMenu(instanceId);
479
- onOpenChange?.(false);
480
- }
481
- }, [isOpen, isControlled, closeMenu, instanceId, onOpenChange]);
482
- const handleToggle = react.useCallback(() => {
483
- if (isOpen) handleClose();
484
- else handleOpen();
485
- }, [isOpen, handleClose, handleOpen]);
486
- const handleMouseEnter = react.useCallback(() => {
487
- if (timeoutRef.current) {
488
- window.clearTimeout(timeoutRef.current);
489
- timeoutRef.current = null;
490
- }
491
- handleOpen();
492
- }, [handleOpen]);
493
- const handleMouseLeave = react.useCallback(() => {
494
- if (timeoutRef.current) window.clearTimeout(timeoutRef.current);
495
- timeoutRef.current = window.setTimeout(handleClose, 150);
496
- }, [handleClose]);
497
- react.useEffect(() => {
498
- return () => {
499
- if (timeoutRef.current) window.clearTimeout(timeoutRef.current);
500
- };
501
- }, []);
502
- react.useEffect(() => {
503
- if (!isOpen) return;
504
- const handleClickOutside = (event) => {
505
- if (containerRef.current && !containerRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
506
- handleClose();
507
- }
508
- };
509
- document.addEventListener("mousedown", handleClickOutside);
510
- return () => document.removeEventListener("mousedown", handleClickOutside);
511
- }, [isOpen, handleClose]);
512
- react.useEffect(() => {
513
- if (!isOpen) return;
514
- const handleEscape = (e) => {
515
- if (e.key === "Escape") {
516
- handleClose();
517
- triggerRef.current?.focus();
518
- }
519
- };
520
- document.addEventListener("keydown", handleEscape);
521
- return () => document.removeEventListener("keydown", handleEscape);
522
- }, [isOpen, handleClose]);
523
- react.useEffect(() => {
524
- if (!isOpen || !panelRef.current) return;
525
- const clampToViewport = () => {
526
- const panel = panelRef.current;
527
- if (!panel) return;
528
- panel.style.setProperty("--panel-nudge", "0px");
529
- const rect = panel.getBoundingClientRect();
530
- const viewportWidth = window.innerWidth;
531
- const EDGE_PADDING = 16;
532
- if (rect.right > viewportWidth - EDGE_PADDING) {
533
- const overflow = rect.right - (viewportWidth - EDGE_PADDING);
534
- panel.style.setProperty("--panel-nudge", `${-overflow}px`);
535
- } else if (rect.left < EDGE_PADDING) {
536
- const overflow = EDGE_PADDING - rect.left;
537
- panel.style.setProperty("--panel-nudge", `${overflow}px`);
538
- }
539
- };
540
- requestAnimationFrame(clampToViewport);
541
- window.addEventListener("resize", clampToViewport);
542
- return () => window.removeEventListener("resize", clampToViewport);
543
- }, [isOpen]);
544
- const panelRefCallback = react.useCallback((node) => {
545
- containerRef.current = node;
546
- panelRef.current = node;
547
- }, []);
548
- return /* @__PURE__ */ jsxRuntime.jsxs(
549
- "div",
550
- {
551
- ref,
552
- className: clsx3__default.default("ds-navbar-v2__tab-menu", className),
553
- onMouseEnter: handleMouseEnter,
554
- onMouseLeave: handleMouseLeave,
555
- children: [
556
- /* @__PURE__ */ jsxRuntime.jsxs(
557
- "button",
558
- {
559
- ref: triggerRef,
560
- className: clsx3__default.default(
561
- "ds-navbar-v2__tab",
562
- (active || isOpen) && "ds-navbar-v2__tab--active"
563
- ),
564
- onClick: handleToggle,
565
- "aria-expanded": isOpen,
566
- "aria-haspopup": "true",
567
- "aria-controls": isOpen ? panelId : void 0,
568
- type: "button",
569
- children: [
570
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-v2__tab-icon", children: icon }),
571
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ds-navbar-v2__tab-label-row", children: [
572
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-navbar-v2__tab-label", children: label }),
573
- /* @__PURE__ */ jsxRuntime.jsx(
574
- "span",
575
- {
576
- className: "ds-navbar-v2__tab-chevron",
577
- "data-state": isOpen ? "open" : "closed",
578
- children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDown2, {})
579
- }
580
- )
581
- ] })
582
- ]
583
- }
584
- ),
585
- /* @__PURE__ */ jsxRuntime.jsx(
586
- "div",
587
- {
588
- ref: panelRefCallback,
589
- id: panelId,
590
- className: "ds-navbar-v2__mega-panel",
591
- "data-state": isOpen ? "open" : "closed",
592
- role: "region",
593
- "aria-label": `${label} menu`,
594
- children
595
- }
596
- )
597
- ]
598
- }
599
- );
600
- }
601
- );
602
- NavbarV2TabMenu.displayName = "NavbarV2TabMenu";
603
- var NavbarV2Actions = react.forwardRef(
604
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: clsx3__default.default("ds-navbar-v2__actions", className), ...props, children })
605
- );
606
- NavbarV2Actions.displayName = "NavbarV2Actions";
607
- function useMergedRef(...refs) {
608
- return react.useCallback(
609
- (value) => {
610
- for (const ref of refs) {
611
- if (typeof ref === "function") {
612
- ref(value);
613
- } else if (ref && typeof ref === "object") {
614
- ref.current = value;
615
- }
616
- }
617
- },
618
- // eslint-disable-next-line react-hooks/exhaustive-deps
619
- refs
620
- );
621
- }
622
- function FooterAccordionItem({ section, LinkComponent }) {
623
- const [isOpen, setIsOpen] = react.useState(false);
624
- return /* @__PURE__ */ jsxRuntime.jsxs(
625
- "div",
626
- {
627
- className: clsx3__default.default(
628
- "ds-footer__accordion-item",
629
- isOpen && "ds-footer__accordion-item--open"
630
- ),
631
- children: [
632
- /* @__PURE__ */ jsxRuntime.jsxs(
633
- "button",
634
- {
635
- type: "button",
636
- className: "ds-footer__accordion-trigger",
637
- "aria-expanded": isOpen,
638
- onClick: () => setIsOpen((prev) => !prev),
639
- children: [
640
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: section.title }),
641
- /* @__PURE__ */ jsxRuntime.jsx(
642
- "svg",
643
- {
644
- className: "ds-footer__accordion-chevron",
645
- width: "16",
646
- height: "16",
647
- viewBox: "0 0 24 24",
648
- fill: "none",
649
- stroke: "currentColor",
650
- strokeWidth: "2",
651
- strokeLinecap: "round",
652
- strokeLinejoin: "round",
653
- "aria-hidden": "true",
654
- children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
655
- }
656
- )
657
- ]
658
- }
659
- ),
660
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__accordion-panel", hidden: !isOpen, children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "ds-footer__links", children: section.links.map((link, idx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(LinkComponent, { href: link.href, className: "ds-footer__link", children: [
661
- link.label,
662
- link.isNew && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-footer__badge", children: "NEW" })
663
- ] }) }, idx)) }) })
664
- ]
665
- }
666
- );
667
- }
668
- var SiteFooter = react.forwardRef(
669
- ({
670
- cta,
671
- sections = [],
672
- orientationLine,
673
- linkAs,
674
- brand,
675
- tagline,
676
- socials,
677
- trustBadges,
678
- controls,
679
- legalLinks = [],
680
- copyright,
681
- companyInfo,
682
- bottomExtra,
683
- bottomActions,
684
- className,
685
- ...props
686
- }, ref) => {
687
- const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
688
- const defaultCopyright = copyright || `\xA9 ${currentYear}. All rights reserved.`;
689
- const resolvedControls = controls || bottomActions;
690
- const LinkComponent = linkAs || "a";
691
- return /* @__PURE__ */ jsxRuntime.jsxs("footer", { ref, className: clsx3__default.default("ds-footer", className), ...props, children: [
692
- cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__cta", "data-footer-zone": "cta", children: /* @__PURE__ */ jsxRuntime.jsx(chunkMDB2WCRQ_cjs.Container, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-footer__cta-content", children: [
693
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "ds-footer__cta-headline", children: cta.headline }),
694
- cta.subtext && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-footer__cta-subtext", children: cta.subtext }),
695
- (cta.primaryCta || cta.secondaryCta) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-footer__cta-actions", children: [
696
- cta.primaryCta,
697
- cta.secondaryCta
698
- ] }),
699
- cta.trustLine && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-footer__cta-trust", children: cta.trustLine })
700
- ] }) }) }),
701
- sections.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__nav", "data-footer-zone": "navigation", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkMDB2WCRQ_cjs.Container, { children: [
702
- orientationLine && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__orientation", children: orientationLine }),
703
- /* @__PURE__ */ jsxRuntime.jsx(
704
- "nav",
705
- {
706
- className: "ds-footer__grid",
707
- "aria-label": "Footer navigation",
708
- children: sections.map((section, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
709
- "div",
710
- {
711
- className: "ds-footer__column",
712
- "data-footer-section": section.title.toLowerCase().replace(/\s+/g, "-"),
713
- children: [
714
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-footer__heading", children: section.title }),
715
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "ds-footer__links", children: section.links.map((link, linkIdx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
716
- LinkComponent,
717
- {
718
- href: link.href,
719
- className: "ds-footer__link",
720
- children: [
721
- link.label,
722
- link.isNew && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-footer__badge", children: "NEW" })
723
- ]
724
- }
725
- ) }, linkIdx)) })
726
- ]
727
- },
728
- idx
729
- ))
730
- }
731
- ),
732
- /* @__PURE__ */ jsxRuntime.jsx(
733
- "nav",
734
- {
735
- className: "ds-footer__mobile-nav",
736
- "aria-label": "Footer navigation",
737
- children: sections.map((section, idx) => /* @__PURE__ */ jsxRuntime.jsx(
738
- FooterAccordionItem,
739
- {
740
- section,
741
- LinkComponent
742
- },
743
- idx
744
- ))
745
- }
746
- )
747
- ] }) }),
748
- (brand || socials || trustBadges) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__authority", "data-footer-zone": "authority", children: /* @__PURE__ */ jsxRuntime.jsx(chunkMDB2WCRQ_cjs.Container, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-footer__authority-content", children: [
749
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-footer__brand", children: [
750
- brand && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__logo", children: brand }),
751
- tagline && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-footer__tagline", children: tagline }),
752
- socials && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__socials", children: socials })
753
- ] }),
754
- trustBadges && trustBadges.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__trust-badges", children: trustBadges.map((badge, idx) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-footer__trust-badge", children: badge.label }, idx)) })
755
- ] }) }) }),
756
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__bottom", "data-footer-zone": "legal", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkMDB2WCRQ_cjs.Container, { children: [
757
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-footer__bottom-content", children: [
758
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__copyright", children: copyright || defaultCopyright }),
759
- resolvedControls && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__controls", children: resolvedControls }),
760
- legalLinks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__legal", children: legalLinks.map((link, idx) => /* @__PURE__ */ jsxRuntime.jsx(
761
- LinkComponent,
762
- {
763
- href: link.href,
764
- className: "ds-footer__legal-link",
765
- children: link.label
766
- },
767
- idx
768
- )) })
769
- ] }),
770
- bottomExtra && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-footer__bottom-extra", children: bottomExtra }),
771
- companyInfo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-footer__company-info", children: companyInfo })
772
- ] }) })
773
- ] });
774
- }
775
- );
776
- SiteFooter.displayName = "SiteFooter";
777
- var GlobeIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
778
- "svg",
779
- {
780
- width: "16",
781
- height: "16",
782
- viewBox: "0 0 24 24",
783
- fill: "none",
784
- stroke: "currentColor",
785
- strokeWidth: "2",
786
- strokeLinecap: "round",
787
- strokeLinejoin: "round",
788
- "aria-hidden": "true",
789
- children: [
790
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
791
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h20" }),
792
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
793
- ]
794
- }
795
- );
796
- var ChevronDownIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
797
- "svg",
798
- {
799
- width: "12",
800
- height: "12",
801
- viewBox: "0 0 16 16",
802
- fill: "none",
803
- stroke: "currentColor",
804
- strokeWidth: "1.5",
805
- strokeLinecap: "round",
806
- strokeLinejoin: "round",
807
- "aria-hidden": "true",
808
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 6L8 10L12 6" })
809
- }
810
- );
811
- var CheckIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
812
- "svg",
813
- {
814
- width: "14",
815
- height: "14",
816
- viewBox: "0 0 24 24",
817
- fill: "none",
818
- stroke: "currentColor",
819
- strokeWidth: "2.5",
820
- strokeLinecap: "round",
821
- strokeLinejoin: "round",
822
- "aria-hidden": "true",
823
- children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" })
824
- }
825
- );
826
- var LocaleDropdown = react.forwardRef(
827
- ({
828
- locales,
829
- activeLocale,
830
- onLocaleChange,
831
- optionAs: OptionComponent = "button",
832
- getHref,
833
- className,
834
- direction = "down",
835
- align = "right"
836
- }, ref) => {
837
- const [isOpen, setIsOpen] = react.useState(false);
838
- const [focusIndex, setFocusIndex] = react.useState(-1);
839
- const containerRef = react.useRef(null);
840
- const triggerRef = react.useRef(null);
841
- const listRef = react.useRef(null);
842
- const instanceId = react.useId();
843
- const listboxId = `locale-dropdown-${instanceId}`;
844
- const currentLocale = locales.find((l) => l.code === activeLocale) ?? locales[0];
845
- const handleToggle = react.useCallback(() => {
846
- setIsOpen((prev) => {
847
- if (!prev) setFocusIndex(-1);
848
- return !prev;
849
- });
850
- }, []);
851
- const handleClose = react.useCallback(() => {
852
- setIsOpen(false);
853
- setFocusIndex(-1);
854
- triggerRef.current?.focus();
855
- }, []);
856
- const handleSelect = react.useCallback(
857
- (code) => {
858
- onLocaleChange?.(code);
859
- handleClose();
860
- },
861
- [onLocaleChange, handleClose]
862
- );
863
- react.useEffect(() => {
864
- if (!isOpen) return;
865
- const handleClickOutside = (e) => {
866
- if (containerRef.current && !containerRef.current.contains(e.target)) {
867
- handleClose();
868
- }
869
- };
870
- document.addEventListener("mousedown", handleClickOutside);
871
- return () => document.removeEventListener("mousedown", handleClickOutside);
872
- }, [isOpen, handleClose]);
873
- const handleKeyDown = react.useCallback(
874
- (e) => {
875
- if (!isOpen) {
876
- if (e.key === "ArrowDown" || e.key === "Enter" || e.key === " ") {
877
- e.preventDefault();
878
- setIsOpen(true);
879
- setFocusIndex(0);
880
- }
881
- return;
882
- }
883
- switch (e.key) {
884
- case "Escape":
885
- e.preventDefault();
886
- handleClose();
887
- break;
888
- case "ArrowDown":
889
- e.preventDefault();
890
- setFocusIndex((prev) => (prev + 1) % locales.length);
891
- break;
892
- case "ArrowUp":
893
- e.preventDefault();
894
- setFocusIndex((prev) => (prev - 1 + locales.length) % locales.length);
895
- break;
896
- case "Enter":
897
- case " ":
898
- e.preventDefault();
899
- if (focusIndex >= 0 && focusIndex < locales.length) {
900
- handleSelect(locales[focusIndex].code);
901
- }
902
- break;
903
- case "Home":
904
- e.preventDefault();
905
- setFocusIndex(0);
906
- break;
907
- case "End":
908
- e.preventDefault();
909
- setFocusIndex(locales.length - 1);
910
- break;
911
- case "Tab":
912
- handleClose();
913
- break;
914
- }
915
- },
916
- [isOpen, focusIndex, locales, handleClose, handleSelect]
917
- );
918
- react.useEffect(() => {
919
- if (!isOpen || focusIndex < 0 || !listRef.current) return;
920
- const items = listRef.current.querySelectorAll('[role="option"]');
921
- items[focusIndex]?.scrollIntoView({ block: "nearest" });
922
- }, [isOpen, focusIndex]);
923
- const activeDescendantId = isOpen && focusIndex >= 0 ? `${listboxId}-option-${focusIndex}` : void 0;
924
- return /* @__PURE__ */ jsxRuntime.jsx(
925
- "div",
926
- {
927
- ref,
928
- className: clsx3__default.default(
929
- "ds-locale-dropdown",
930
- direction === "up" && "ds-locale-dropdown--up",
931
- align === "left" && "ds-locale-dropdown--align-left",
932
- align === "center" && "ds-locale-dropdown--align-center",
933
- className
934
- ),
935
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "ds-locale-dropdown__wrapper", children: [
936
- /* @__PURE__ */ jsxRuntime.jsxs(
937
- "button",
938
- {
939
- ref: triggerRef,
940
- type: "button",
941
- className: "ds-locale-dropdown__trigger",
942
- onClick: handleToggle,
943
- onKeyDown: handleKeyDown,
944
- "aria-haspopup": "listbox",
945
- "aria-expanded": isOpen,
946
- "aria-controls": isOpen ? listboxId : void 0,
947
- "aria-activedescendant": activeDescendantId,
948
- "aria-label": `Language: ${currentLocale.label}. Change language.`,
949
- children: [
950
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-locale-dropdown__trigger-icon", children: /* @__PURE__ */ jsxRuntime.jsx(GlobeIcon, {}) }),
951
- currentLocale.flag && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-locale-dropdown__trigger-flag", "aria-hidden": "true", children: currentLocale.flag }),
952
- /* @__PURE__ */ jsxRuntime.jsx(
953
- "span",
954
- {
955
- className: "ds-locale-dropdown__trigger-chevron",
956
- "data-state": isOpen ? "open" : "closed",
957
- children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {})
958
- }
959
- )
960
- ]
961
- }
962
- ),
963
- /* @__PURE__ */ jsxRuntime.jsx(
964
- "div",
965
- {
966
- ref: listRef,
967
- id: listboxId,
968
- className: "ds-locale-dropdown__panel",
969
- role: "listbox",
970
- "aria-label": "Select language",
971
- "data-state": isOpen ? "open" : "closed",
972
- onKeyDown: handleKeyDown,
973
- children: locales.map((locale, index) => {
974
- const isActive = locale.code === activeLocale;
975
- const isFocused = index === focusIndex;
976
- const optionId = `${listboxId}-option-${index}`;
977
- const optionProps = {
978
- id: optionId,
979
- role: "option",
980
- "aria-selected": isActive,
981
- className: clsx3__default.default(
982
- "ds-locale-dropdown__option",
983
- isActive && "ds-locale-dropdown__option--active",
984
- isFocused && "ds-locale-dropdown__option--focused"
985
- ),
986
- onClick: () => handleSelect(locale.code),
987
- ...OptionComponent !== "button" && getHref ? { href: getHref(locale.code) } : { type: "button" }
988
- };
989
- return /* @__PURE__ */ jsxRuntime.jsxs(OptionComponent, { ...optionProps, children: [
990
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ds-locale-dropdown__option-content", children: [
991
- locale.flag && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-locale-dropdown__option-flag", "aria-hidden": "true", children: locale.flag }),
992
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-locale-dropdown__option-label", children: locale.label })
993
- ] }),
994
- isActive && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-locale-dropdown__option-check", children: /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, {}) })
995
- ] }, locale.code);
996
- })
997
- }
998
- )
999
- ] })
1000
- }
1001
- );
1002
- }
1003
- );
1004
- LocaleDropdown.displayName = "LocaleDropdown";
1005
- var MDXOutboundLink = ({
1006
- href,
1007
- children,
1008
- ...props
1009
- }) => {
1010
- if (!href) {
1011
- return /* @__PURE__ */ jsxRuntime.jsx("a", { ...props, children });
1012
- }
1013
- return /* @__PURE__ */ jsxRuntime.jsx(
1014
- chunkLJADZITX_cjs.OutboundLink,
1015
- {
1016
- href,
1017
- context: "cms_markdown",
1018
- preserveExistingUTM: true,
1019
- openInNewTab: true,
1020
- ...props,
1021
- children
1022
- }
1023
- );
1024
- };
1025
-
1026
- exports.LocaleDropdown = LocaleDropdown;
1027
- exports.MDXOutboundLink = MDXOutboundLink;
1028
- exports.NavbarMegaMenu = NavbarMegaMenu;
1029
- exports.NavbarMegaMenuItem = NavbarMegaMenuItem;
1030
- exports.NavbarMegaMenuSection = NavbarMegaMenuSection;
1031
- exports.NavbarMobileActions = NavbarMobileActions;
1032
- exports.NavbarMobileNavItem = NavbarMobileNavItem;
1033
- exports.NavbarMobileSeparator = NavbarMobileSeparator;
1034
- exports.NavbarV2 = NavbarV2;
1035
- exports.NavbarV2Actions = NavbarV2Actions;
1036
- exports.NavbarV2Brand = NavbarV2Brand;
1037
- exports.NavbarV2Tab = NavbarV2Tab;
1038
- exports.NavbarV2TabMenu = NavbarV2TabMenu;
1039
- exports.NavbarV2Tabs = NavbarV2Tabs;
1040
- exports.SiteFooter = SiteFooter;
1041
- //# sourceMappingURL=out.js.map
1042
- //# sourceMappingURL=chunk-ZDLOA2UT.cjs.map