@salesmind-ai/design-system 0.3.2 → 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 +11 -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,2122 +0,0 @@
1
- import { ToggleGroup, ToggleGroupItem, Badge, Dialog, DialogContent, Tabs, TabsList, TabsTrigger, TabsContent, Slider } from './chunk-HRENHNDJ.js';
2
- import { TextField } from './chunk-3NKRFUAR.js';
3
- import { Button } from './chunk-SICKWUWB.js';
4
- import { MetricCounter } from './chunk-YSYR54XR.js';
5
- import { BrowserFrame } from './chunk-XWPDRMZG.js';
6
- import { useAnalytics } from './chunk-2GARWEJK.js';
7
- import { Avatar, AvatarImage, AvatarFallback } from './chunk-Y3CPKNB7.js';
8
- import { SectionShell, SectionHeader } from './chunk-KBA2LFBG.js';
9
- import { OutboundLink } from './chunk-KJ2OXQF4.js';
10
- import React34, { forwardRef, useState, useEffect, useRef, useCallback, useMemo } from 'react';
11
- import clsx27 from 'clsx';
12
- import { ArrowRight, X, Check } from 'lucide-react';
13
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
14
-
15
- var AnnouncementBar = forwardRef(
16
- ({
17
- badge,
18
- message,
19
- href,
20
- variant = "brand",
21
- dismissible = false,
22
- onDismiss,
23
- showArrow = true,
24
- className,
25
- ...props
26
- }, ref) => {
27
- const { track } = useAnalytics();
28
- const handleClick = () => {
29
- if (href) {
30
- track("announcement_click", { href, variant });
31
- }
32
- };
33
- const handleDismiss = (e) => {
34
- e.preventDefault();
35
- e.stopPropagation();
36
- track("announcement_dismiss", { variant });
37
- onDismiss?.();
38
- };
39
- const Component = href ? "a" : "div";
40
- const componentProps = href ? { href, onClick: handleClick } : {};
41
- return /* @__PURE__ */ jsxs(
42
- "div",
43
- {
44
- ref,
45
- className: clsx27(
46
- "ds-announcement-bar",
47
- `ds-announcement-bar--${variant}`,
48
- href && "ds-announcement-bar--clickable",
49
- className
50
- ),
51
- ...props,
52
- children: [
53
- /* @__PURE__ */ jsxs(Component, { className: "ds-announcement-bar__inner", ...componentProps, children: [
54
- /* @__PURE__ */ jsxs("div", { className: "ds-announcement-bar__content", children: [
55
- badge && /* @__PURE__ */ jsx("span", { className: "ds-announcement-bar__badge", children: badge }),
56
- /* @__PURE__ */ jsx("span", { className: "ds-announcement-bar__message", children: message })
57
- ] }),
58
- href && showArrow && /* @__PURE__ */ jsx(ArrowRight, { className: "ds-announcement-bar__arrow", size: 16 })
59
- ] }),
60
- dismissible && /* @__PURE__ */ jsx(
61
- "button",
62
- {
63
- type: "button",
64
- className: "ds-announcement-bar__close",
65
- onClick: handleDismiss,
66
- "aria-label": "Dismiss announcement",
67
- children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { d: "M18 6L6 18M6 6l12 12" }) })
68
- }
69
- )
70
- ]
71
- }
72
- );
73
- }
74
- );
75
- AnnouncementBar.displayName = "AnnouncementBar";
76
- var StickyActionBar = forwardRef(
77
- ({
78
- message,
79
- primaryAction,
80
- secondaryAction,
81
- showThreshold = 300,
82
- position = "bottom",
83
- variant = "glass",
84
- className,
85
- ...props
86
- }, ref) => {
87
- const [isVisible, setIsVisible] = useState(false);
88
- const { track } = useAnalytics();
89
- useEffect(() => {
90
- const handleScroll = () => {
91
- const shouldShow = window.scrollY > showThreshold;
92
- if (shouldShow && !isVisible) {
93
- setIsVisible(true);
94
- track("sticky_bar_show");
95
- } else if (!shouldShow && isVisible) {
96
- setIsVisible(false);
97
- }
98
- };
99
- window.addEventListener("scroll", handleScroll, { passive: true });
100
- handleScroll();
101
- return () => window.removeEventListener("scroll", handleScroll);
102
- }, [showThreshold, isVisible, track]);
103
- if (!isVisible) return null;
104
- return /* @__PURE__ */ jsx(
105
- "div",
106
- {
107
- ref,
108
- className: clsx27(
109
- "ds-sticky-action-bar",
110
- `ds-sticky-action-bar--${position}`,
111
- `ds-sticky-action-bar--${variant}`,
112
- className
113
- ),
114
- ...props,
115
- children: /* @__PURE__ */ jsxs("div", { className: "ds-sticky-action-bar__container", children: [
116
- /* @__PURE__ */ jsx("div", { className: "ds-sticky-action-bar__content", children: message }),
117
- /* @__PURE__ */ jsxs("div", { className: "ds-sticky-action-bar__actions", children: [
118
- secondaryAction,
119
- primaryAction
120
- ] })
121
- ] })
122
- }
123
- );
124
- }
125
- );
126
- StickyActionBar.displayName = "StickyActionBar";
127
- var PricingToggle = forwardRef(
128
- ({
129
- value,
130
- onChange,
131
- monthlyLabel = "Monthly",
132
- annualLabel = "Annual",
133
- savingsBadge,
134
- className,
135
- ...props
136
- }, ref) => {
137
- return /* @__PURE__ */ jsxs(
138
- "div",
139
- {
140
- ref,
141
- className: clsx27("ds-pricing-toggle", className),
142
- ...props,
143
- children: [
144
- /* @__PURE__ */ jsxs(
145
- ToggleGroup,
146
- {
147
- type: "single",
148
- value,
149
- onValueChange: (v) => {
150
- if (v && typeof v === "string") {
151
- onChange(v);
152
- }
153
- },
154
- children: [
155
- /* @__PURE__ */ jsx(ToggleGroupItem, { value: "monthly", children: monthlyLabel }),
156
- /* @__PURE__ */ jsx(ToggleGroupItem, { value: "annual", children: annualLabel })
157
- ]
158
- }
159
- ),
160
- savingsBadge && /* @__PURE__ */ jsx(Badge, { className: "ds-pricing-toggle__badge", children: savingsBadge })
161
- ]
162
- }
163
- );
164
- }
165
- );
166
- PricingToggle.displayName = "PricingToggle";
167
- var BookingEmbed = forwardRef(
168
- ({
169
- url,
170
- aspectRatio = "16/9",
171
- title = "Book a call",
172
- lazyLoad = true,
173
- className,
174
- style,
175
- ...props
176
- }, ref) => {
177
- const [isLoaded, setIsLoaded] = useState(!lazyLoad);
178
- const [isIframeLoaded, setIsIframeLoaded] = useState(false);
179
- const containerRef = useRef(null);
180
- const { track } = useAnalytics();
181
- useEffect(() => {
182
- if (!lazyLoad) return;
183
- const observer = new IntersectionObserver(
184
- (entries) => {
185
- if (entries[0].isIntersecting) {
186
- setIsLoaded(true);
187
- track("booking_embed_visible", { url });
188
- observer.disconnect();
189
- }
190
- },
191
- { rootMargin: "200px" }
192
- );
193
- if (containerRef.current) {
194
- observer.observe(containerRef.current);
195
- }
196
- return () => observer.disconnect();
197
- }, [lazyLoad, url, track]);
198
- const handleIframeLoad = () => {
199
- setIsIframeLoaded(true);
200
- track("booking_embed_loaded", { url });
201
- };
202
- return /* @__PURE__ */ jsxs(
203
- "div",
204
- {
205
- ref: (node) => {
206
- containerRef.current = node;
207
- if (typeof ref === "function") ref(node);
208
- else if (ref) ref.current = node;
209
- },
210
- className: clsx27("ds-booking-embed", className),
211
- style: { "--embed-aspect-ratio": aspectRatio, ...style },
212
- ...props,
213
- children: [
214
- !isIframeLoaded && /* @__PURE__ */ jsxs("div", { className: "ds-booking-embed__skeleton", children: [
215
- /* @__PURE__ */ jsx("div", { className: "ds-booking-embed__spinner" }),
216
- /* @__PURE__ */ jsx("p", { children: "Loading calendar..." })
217
- ] }),
218
- isLoaded && /* @__PURE__ */ jsx(
219
- "iframe",
220
- {
221
- src: url,
222
- title,
223
- className: clsx27("ds-booking-embed__iframe", isIframeLoaded && "ds-booking-embed__iframe--loaded"),
224
- onLoad: handleIframeLoad,
225
- frameBorder: "0",
226
- scrolling: "no"
227
- }
228
- )
229
- ]
230
- }
231
- );
232
- }
233
- );
234
- BookingEmbed.displayName = "BookingEmbed";
235
- var ProblemAgitation = forwardRef(
236
- ({
237
- title,
238
- description,
239
- points,
240
- oldWayLabel = "The Old Way",
241
- newWayLabel = "The New Way",
242
- className,
243
- ...props
244
- }, ref) => {
245
- return /* @__PURE__ */ jsxs(
246
- "section",
247
- {
248
- ref,
249
- className: clsx27("ds-problem-agitation", className),
250
- ...props,
251
- children: [
252
- /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__header", children: [
253
- /* @__PURE__ */ jsx("h2", { className: "ds-problem-agitation__title", children: title }),
254
- description && /* @__PURE__ */ jsx("p", { className: "ds-problem-agitation__description", children: description })
255
- ] }),
256
- /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__grid", children: [
257
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--old", children: oldWayLabel }),
258
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--new", children: newWayLabel }),
259
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__column-header ds-problem-agitation__column-header--old", children: oldWayLabel }),
260
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__column-header ds-problem-agitation__column-header--new", children: newWayLabel }),
261
- points.map((point, index) => /* @__PURE__ */ jsxs(React34.Fragment, { children: [
262
- /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__cell ds-problem-agitation__cell--old", children: [
263
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--old", children: /* @__PURE__ */ jsx(X, { size: 20, "aria-hidden": "true" }) }),
264
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__content", children: point.problem })
265
- ] }),
266
- /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__cell ds-problem-agitation__cell--new", children: [
267
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--new", children: /* @__PURE__ */ jsx(Check, { size: 20, "aria-hidden": "true" }) }),
268
- /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__content", children: point.solution })
269
- ] })
270
- ] }, index))
271
- ] })
272
- ]
273
- }
274
- );
275
- }
276
- );
277
- ProblemAgitation.displayName = "ProblemAgitation";
278
- var ProcessTimeline = forwardRef(
279
- ({
280
- steps,
281
- animated = true,
282
- className,
283
- ...props
284
- }, ref) => {
285
- const [progress, setProgress] = useState(0);
286
- const containerRef = useRef(null);
287
- const { track } = useAnalytics();
288
- const hasTrackedRef = useRef(false);
289
- useEffect(() => {
290
- if (!animated) return;
291
- const handleScroll = () => {
292
- if (!containerRef.current) return;
293
- const rect = containerRef.current.getBoundingClientRect();
294
- const windowHeight = window.innerHeight;
295
- const startDraw = windowHeight * 0.5;
296
- const travelDistance = rect.height;
297
- const currentPos = startDraw - rect.top;
298
- if (currentPos < 0) {
299
- setProgress(0);
300
- } else if (currentPos > travelDistance) {
301
- setProgress(100);
302
- if (!hasTrackedRef.current) {
303
- hasTrackedRef.current = true;
304
- track("timeline_complete");
305
- }
306
- } else {
307
- setProgress(currentPos / travelDistance * 100);
308
- }
309
- };
310
- window.addEventListener("scroll", handleScroll, { passive: true });
311
- handleScroll();
312
- return () => window.removeEventListener("scroll", handleScroll);
313
- }, [animated, track]);
314
- return /* @__PURE__ */ jsxs(
315
- "div",
316
- {
317
- ref: (node) => {
318
- containerRef.current = node;
319
- if (typeof ref === "function") ref(node);
320
- else if (ref) ref.current = node;
321
- },
322
- className: clsx27(
323
- "ds-process-timeline",
324
- animated && "ds-process-timeline--animated",
325
- className
326
- ),
327
- ...props,
328
- children: [
329
- /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__track", children: /* @__PURE__ */ jsx(
330
- "div",
331
- {
332
- className: "ds-process-timeline__progress",
333
- style: { height: animated ? `${progress}%` : "100%" }
334
- }
335
- ) }),
336
- /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__steps", children: steps.map((step, index) => {
337
- const stepProgress = index / (steps.length - 1) * 100;
338
- const isActive = !animated || progress >= stepProgress;
339
- return /* @__PURE__ */ jsxs(
340
- "div",
341
- {
342
- className: clsx27(
343
- "ds-process-timeline__step",
344
- isActive && "ds-process-timeline__step--active"
345
- ),
346
- children: [
347
- /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__indicator", children: step.indicator }),
348
- /* @__PURE__ */ jsxs("div", { className: "ds-process-timeline__content", children: [
349
- /* @__PURE__ */ jsx("h3", { className: "ds-process-timeline__title", children: step.title }),
350
- /* @__PURE__ */ jsx("p", { className: "ds-process-timeline__description", children: step.description })
351
- ] })
352
- ]
353
- },
354
- index
355
- );
356
- }) })
357
- ]
358
- }
359
- );
360
- }
361
- );
362
- ProcessTimeline.displayName = "ProcessTimeline";
363
- var PricingCard = React34.forwardRef(
364
- ({
365
- tier,
366
- tagline,
367
- price,
368
- priceSuffix,
369
- anchorPrice,
370
- badge,
371
- highlighted = false,
372
- features = [],
373
- cta,
374
- secondaryCta,
375
- footerNote,
376
- className,
377
- children,
378
- ...props
379
- }, ref) => {
380
- return /* @__PURE__ */ jsxs(
381
- "div",
382
- {
383
- ref,
384
- className: clsx27(
385
- "ds-pricing-card",
386
- highlighted && "ds-pricing-card--highlighted",
387
- className
388
- ),
389
- ...props,
390
- children: [
391
- badge && /* @__PURE__ */ jsx("div", { className: "ds-pricing-card__badge", children: badge }),
392
- /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__header", children: [
393
- /* @__PURE__ */ jsx("h3", { className: "ds-pricing-card__tier", children: tier }),
394
- tagline && /* @__PURE__ */ jsx("p", { className: "ds-pricing-card__tagline", children: tagline })
395
- ] }),
396
- /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__price-block", children: [
397
- anchorPrice && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__anchor-price", children: anchorPrice }),
398
- /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__price-row", children: [
399
- /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__price", children: price }),
400
- priceSuffix && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__price-suffix", children: priceSuffix })
401
- ] })
402
- ] }),
403
- features.length > 0 && /* @__PURE__ */ jsx("ul", { className: "ds-pricing-card__features", children: features.map((feature, idx) => /* @__PURE__ */ jsxs(
404
- "li",
405
- {
406
- className: clsx27(
407
- "ds-pricing-card__feature",
408
- feature.included === false && "ds-pricing-card__feature--excluded"
409
- ),
410
- children: [
411
- /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__feature-icon", "aria-hidden": "true", children: feature.included === false ? /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
412
- /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
413
- /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
414
- ] }) : /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
415
- /* @__PURE__ */ jsxs("span", { className: "ds-pricing-card__feature-text", children: [
416
- feature.text,
417
- feature.detail && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__feature-detail", children: feature.detail })
418
- ] })
419
- ]
420
- },
421
- idx
422
- )) }),
423
- (cta || secondaryCta) && /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__cta-area", children: [
424
- cta,
425
- secondaryCta && /* @__PURE__ */ jsx("div", { className: "ds-pricing-card__secondary-cta", children: secondaryCta })
426
- ] }),
427
- footerNote && /* @__PURE__ */ jsx("p", { className: "ds-pricing-card__footer-note", children: footerNote }),
428
- children
429
- ]
430
- }
431
- );
432
- }
433
- );
434
- PricingCard.displayName = "PricingCard";
435
- var PricingSection = forwardRef(
436
- ({
437
- title,
438
- description,
439
- plans,
440
- toggle,
441
- className,
442
- ...props
443
- }, ref) => {
444
- return /* @__PURE__ */ jsxs(
445
- "section",
446
- {
447
- ref,
448
- className: clsx27("ds-pricing-section", className),
449
- ...props,
450
- children: [
451
- /* @__PURE__ */ jsxs("div", { className: "ds-pricing-section__header", children: [
452
- /* @__PURE__ */ jsx("h2", { className: "ds-pricing-section__title", children: title }),
453
- description && /* @__PURE__ */ jsx("p", { className: "ds-pricing-section__description", children: description }),
454
- toggle && /* @__PURE__ */ jsx("div", { className: "ds-pricing-section__toggle", children: toggle })
455
- ] }),
456
- /* @__PURE__ */ jsx("div", { className: "ds-pricing-section__grid", children: plans.map((plan, index) => /* @__PURE__ */ jsx(
457
- PricingCard,
458
- {
459
- ...plan,
460
- className: clsx27(
461
- "ds-pricing-section__card",
462
- plan.highlighted && "ds-pricing-section__card--popular"
463
- )
464
- },
465
- index
466
- )) })
467
- ]
468
- }
469
- );
470
- }
471
- );
472
- PricingSection.displayName = "PricingSection";
473
- var LeadCaptureForm = forwardRef(
474
- ({
475
- buttonText = "Subscribe",
476
- emailLabel = "Work Email",
477
- emailPlaceholder = "you@company.com",
478
- disclaimer,
479
- onSubmitSuccess,
480
- layout = "horizontal",
481
- isLoading = false,
482
- className,
483
- onSubmit,
484
- ...props
485
- }, ref) => {
486
- const [email, setEmail] = useState("");
487
- const [error, setError] = useState();
488
- const [internalLoading, setInternalLoading] = useState(false);
489
- const { track } = useAnalytics();
490
- const isCurrentlyLoading = isLoading || internalLoading;
491
- const handleSubmit = async (e) => {
492
- e.preventDefault();
493
- if (!email) {
494
- setError("Email is required");
495
- return;
496
- }
497
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
498
- setError("Please enter a valid email address");
499
- return;
500
- }
501
- setError(void 0);
502
- setInternalLoading(true);
503
- track("lead_capture_submit", { email_domain: email.split("@")[1] });
504
- try {
505
- if (onSubmitSuccess) {
506
- await onSubmitSuccess(email);
507
- }
508
- track("lead_capture_success");
509
- } catch (err) {
510
- setError("Something went wrong. Please try again.");
511
- track("lead_capture_error", { error: String(err) });
512
- } finally {
513
- setInternalLoading(false);
514
- }
515
- if (onSubmit) {
516
- onSubmit(e);
517
- }
518
- };
519
- return /* @__PURE__ */ jsxs(
520
- "form",
521
- {
522
- ref,
523
- className: clsx27(
524
- "ds-lead-capture",
525
- `ds-lead-capture--${layout}`,
526
- className
527
- ),
528
- onSubmit: handleSubmit,
529
- noValidate: true,
530
- ...props,
531
- children: [
532
- /* @__PURE__ */ jsxs("div", { className: "ds-lead-capture__inputs", children: [
533
- /* @__PURE__ */ jsxs("div", { className: "ds-lead-capture__input-wrapper", children: [
534
- layout === "vertical" && /* @__PURE__ */ jsx("label", { htmlFor: "lead-email", className: "ds-lead-capture__label", children: emailLabel }),
535
- /* @__PURE__ */ jsx(
536
- TextField,
537
- {
538
- id: "lead-email",
539
- type: "email",
540
- value: email,
541
- onChange: (e) => setEmail(e.target.value),
542
- placeholder: emailPlaceholder,
543
- disabled: isCurrentlyLoading,
544
- "aria-label": layout === "horizontal" ? emailLabel : void 0,
545
- className: clsx27("ds-lead-capture__input", error && "ds-lead-capture__input--error")
546
- }
547
- ),
548
- error && /* @__PURE__ */ jsx("div", { className: "ds-lead-capture__error", children: error })
549
- ] }),
550
- /* @__PURE__ */ jsx(
551
- Button,
552
- {
553
- type: "submit",
554
- isLoading: isCurrentlyLoading,
555
- className: "ds-lead-capture__submit",
556
- children: buttonText
557
- }
558
- )
559
- ] }),
560
- disclaimer && /* @__PURE__ */ jsx("div", { className: "ds-lead-capture__disclaimer", children: disclaimer })
561
- ]
562
- }
563
- );
564
- }
565
- );
566
- LeadCaptureForm.displayName = "LeadCaptureForm";
567
- var CaseStudyCard = forwardRef(
568
- ({
569
- company,
570
- logo,
571
- industry,
572
- headline,
573
- metrics,
574
- href,
575
- coverImage,
576
- quote,
577
- className,
578
- ...props
579
- }, ref) => {
580
- return /* @__PURE__ */ jsx(
581
- "article",
582
- {
583
- ref,
584
- className: clsx27("ds-case-study-card", className),
585
- ...props,
586
- children: /* @__PURE__ */ jsxs(OutboundLink, { href, context: "case-study-card", className: "ds-case-study-card__link", openInNewTab: false, children: [
587
- coverImage && /* @__PURE__ */ jsx("div", { className: "ds-case-study-card__image-wrap", children: /* @__PURE__ */ jsx(
588
- "img",
589
- {
590
- src: coverImage,
591
- alt: "",
592
- className: "ds-case-study-card__image",
593
- loading: "lazy",
594
- decoding: "async"
595
- }
596
- ) }),
597
- /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__body", children: [
598
- /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__header", children: [
599
- logo && /* @__PURE__ */ jsx("div", { className: "ds-case-study-card__logo", children: logo }),
600
- /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__company-info", children: [
601
- /* @__PURE__ */ jsx("span", { className: "ds-case-study-card__company", children: company }),
602
- industry && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "ds-case-study-card__industry", children: industry })
603
- ] })
604
- ] }),
605
- /* @__PURE__ */ jsx("h3", { className: "ds-case-study-card__headline", children: headline }),
606
- metrics && metrics.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-case-study-card__metrics", children: metrics.map((metric, i) => /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__metric", children: [
607
- /* @__PURE__ */ jsxs("span", { className: "ds-case-study-card__metric-value", children: [
608
- metric.prefix,
609
- metric.value,
610
- metric.suffix
611
- ] }),
612
- /* @__PURE__ */ jsx("span", { className: "ds-case-study-card__metric-label", children: metric.label })
613
- ] }, i)) }),
614
- quote && /* @__PURE__ */ jsx("blockquote", { className: "ds-case-study-card__quote", children: /* @__PURE__ */ jsxs("p", { children: [
615
- "\u201C",
616
- quote,
617
- "\u201D"
618
- ] }) })
619
- ] })
620
- ] })
621
- }
622
- );
623
- }
624
- );
625
- CaseStudyCard.displayName = "CaseStudyCard";
626
- function getEmbedUrl(src, muted = false) {
627
- const ytMatch = src.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]+)/);
628
- if (ytMatch) {
629
- const params = muted ? "autoplay=1&mute=1&rel=0" : "autoplay=1&rel=0";
630
- return `https://www.youtube.com/embed/${ytMatch[1]}?${params}`;
631
- }
632
- const vimeoMatch = src.match(/(?:vimeo\.com\/)(\d+)/);
633
- if (vimeoMatch) {
634
- const params = muted ? "autoplay=1&muted=1" : "autoplay=1";
635
- return `https://player.vimeo.com/video/${vimeoMatch[1]}?${params}`;
636
- }
637
- const loomMatch = src.match(/(?:loom\.com\/share\/)([a-zA-Z0-9]+)/);
638
- if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;
639
- return src;
640
- }
641
- var VideoEmbed = forwardRef(
642
- ({
643
- src,
644
- poster,
645
- title,
646
- aspectRatio = "16/9",
647
- autoPlay = false,
648
- withFrame = false,
649
- onPlay,
650
- className,
651
- ...props
652
- }, ref) => {
653
- const [playing, setPlaying] = useState(false);
654
- const containerRef = useRef(null);
655
- const handlePlay = useCallback(() => {
656
- setPlaying(true);
657
- onPlay?.();
658
- }, [onPlay]);
659
- useEffect(() => {
660
- if (!autoPlay || playing) return;
661
- if (typeof window === "undefined") return;
662
- const motionQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
663
- if (motionQuery.matches) return;
664
- const target = containerRef.current;
665
- if (!target) return;
666
- const observer = new IntersectionObserver(
667
- ([entry]) => {
668
- if (entry.isIntersecting) {
669
- handlePlay();
670
- observer.disconnect();
671
- }
672
- },
673
- { threshold: 0.5 }
674
- );
675
- observer.observe(target);
676
- return () => observer.disconnect();
677
- }, [autoPlay, playing, handlePlay]);
678
- const embedContent = /* @__PURE__ */ jsx(
679
- "div",
680
- {
681
- ref: containerRef,
682
- className: clsx27("ds-video-embed", withFrame && "ds-video-embed--framed", className),
683
- style: { aspectRatio },
684
- children: !playing ? /* @__PURE__ */ jsxs(
685
- "button",
686
- {
687
- type: "button",
688
- className: "ds-video-embed__poster-btn",
689
- onClick: handlePlay,
690
- "aria-label": `Play video: ${title}`,
691
- children: [
692
- poster && /* @__PURE__ */ jsx(
693
- "img",
694
- {
695
- src: poster,
696
- alt: "",
697
- className: "ds-video-embed__poster",
698
- loading: "lazy",
699
- decoding: "async"
700
- }
701
- ),
702
- /* @__PURE__ */ jsx("div", { className: "ds-video-embed__overlay" }),
703
- /* @__PURE__ */ jsx("div", { className: "ds-video-embed__play", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", children: [
704
- /* @__PURE__ */ jsx("circle", { cx: "24", cy: "24", r: "24", fill: "rgba(0,0,0,0.5)" }),
705
- /* @__PURE__ */ jsx("path", { d: "M19 15l14 9-14 9V15z", fill: "white" })
706
- ] }) })
707
- ]
708
- }
709
- ) : /* @__PURE__ */ jsx(
710
- "iframe",
711
- {
712
- src: getEmbedUrl(src, autoPlay),
713
- title,
714
- className: "ds-video-embed__iframe",
715
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
716
- allowFullScreen: true
717
- }
718
- )
719
- }
720
- );
721
- if (withFrame) {
722
- return /* @__PURE__ */ jsx(BrowserFrame, { ref, variant: "browser", url: src, ...props, children: embedContent });
723
- }
724
- return React34.cloneElement(embedContent, { ref, ...props });
725
- }
726
- );
727
- VideoEmbed.displayName = "VideoEmbed";
728
- var DEFAULT_SUPPRESSION = 7 * 24 * 60 * 60 * 1e3;
729
- var DEFAULT_ACTIVATION_DELAY = 5e3;
730
- var MOBILE_INACTIVITY_TIMEOUT = 45e3;
731
- function isSuppressed(key, duration) {
732
- if (typeof window === "undefined") return true;
733
- try {
734
- const ts = localStorage.getItem(key);
735
- if (!ts) return false;
736
- return Date.now() - Number(ts) < duration;
737
- } catch {
738
- return false;
739
- }
740
- }
741
- function suppress(key) {
742
- try {
743
- localStorage.setItem(key, String(Date.now()));
744
- } catch {
745
- }
746
- }
747
- function isMobile() {
748
- if (typeof window === "undefined") return false;
749
- return window.matchMedia("(max-width: 768px)").matches || "ontouchstart" in window;
750
- }
751
- var ExitIntentOverlay = forwardRef(
752
- ({
753
- children,
754
- enabled = true,
755
- activationDelay = DEFAULT_ACTIVATION_DELAY,
756
- excludePaths,
757
- storageKey = "ds-exit-intent",
758
- suppressionDuration = DEFAULT_SUPPRESSION,
759
- onShow,
760
- onDismiss,
761
- className,
762
- ...props
763
- }, ref) => {
764
- const [open, setOpen] = useState(false);
765
- const activatedRef = useRef(false);
766
- const shownRef = useRef(false);
767
- const show = useCallback(() => {
768
- if (shownRef.current) return;
769
- shownRef.current = true;
770
- setOpen(true);
771
- onShow?.();
772
- }, [onShow]);
773
- const handleDismiss = useCallback(() => {
774
- setOpen(false);
775
- suppress(storageKey);
776
- onDismiss?.();
777
- }, [storageKey, onDismiss]);
778
- useEffect(() => {
779
- if (!enabled) return;
780
- if (typeof window === "undefined") return;
781
- if (excludePaths?.some((p) => window.location.pathname.startsWith(p))) return;
782
- if (isSuppressed(storageKey, suppressionDuration)) return;
783
- const activationTimer = setTimeout(() => {
784
- activatedRef.current = true;
785
- }, activationDelay);
786
- const handleMouseOut = (e) => {
787
- if (!activatedRef.current) return;
788
- if (e.clientY < 10 && e.relatedTarget === null) {
789
- show();
790
- }
791
- };
792
- let mobileTimer = null;
793
- const resetMobileTimer = () => {
794
- if (mobileTimer) clearTimeout(mobileTimer);
795
- if (!activatedRef.current) return;
796
- mobileTimer = setTimeout(show, MOBILE_INACTIVITY_TIMEOUT);
797
- };
798
- if (isMobile()) {
799
- const mobileStart = setTimeout(() => {
800
- resetMobileTimer();
801
- document.addEventListener("touchstart", resetMobileTimer, { passive: true });
802
- document.addEventListener("scroll", resetMobileTimer, { passive: true });
803
- }, activationDelay);
804
- return () => {
805
- clearTimeout(activationTimer);
806
- clearTimeout(mobileStart);
807
- if (mobileTimer) clearTimeout(mobileTimer);
808
- document.removeEventListener("touchstart", resetMobileTimer);
809
- document.removeEventListener("scroll", resetMobileTimer);
810
- };
811
- }
812
- document.addEventListener("mouseout", handleMouseOut);
813
- return () => {
814
- clearTimeout(activationTimer);
815
- document.removeEventListener("mouseout", handleMouseOut);
816
- };
817
- }, [enabled, activationDelay, excludePaths, storageKey, suppressionDuration, show]);
818
- return /* @__PURE__ */ jsx("div", { ref, className: clsx27("ds-exit-intent-overlay", className), ...props, children: /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (isOpen) => {
819
- if (!isOpen) handleDismiss();
820
- }, children: /* @__PURE__ */ jsx(DialogContent, { className: "ds-exit-intent-overlay__dialog", children }) }) });
821
- }
822
- );
823
- ExitIntentOverlay.displayName = "ExitIntentOverlay";
824
- var BeforeAfterBlock = forwardRef(
825
- ({
826
- eyebrow,
827
- title,
828
- before,
829
- after,
830
- variant = "split",
831
- className,
832
- ...props
833
- }, ref) => {
834
- const renderItems = (items, side) => items.map((item, i) => /* @__PURE__ */ jsxs(
835
- "li",
836
- {
837
- className: clsx27(
838
- "ds-before-after__item",
839
- item.sentiment && `ds-before-after__item--${item.sentiment}`
840
- ),
841
- children: [
842
- /* @__PURE__ */ jsx("span", { className: "ds-before-after__item-icon", "aria-hidden": "true", children: side === "before" ? "\u2717" : "\u2713" }),
843
- /* @__PURE__ */ jsx("span", { children: item.text })
844
- ]
845
- },
846
- i
847
- ));
848
- return /* @__PURE__ */ jsxs(
849
- SectionShell,
850
- {
851
- ref,
852
- className: clsx27("ds-before-after", className),
853
- ...props,
854
- children: [
855
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title }),
856
- /* @__PURE__ */ jsxs("div", { className: clsx27("ds-before-after__layout", `ds-before-after__layout--${variant}`), children: [
857
- /* @__PURE__ */ jsxs("div", { className: "ds-before-after__column ds-before-after__column--before", children: [
858
- /* @__PURE__ */ jsx("h3", { className: "ds-before-after__label", children: before.label }),
859
- /* @__PURE__ */ jsx("ul", { className: "ds-before-after__list", children: renderItems(before.items, "before") }),
860
- before.media && /* @__PURE__ */ jsx("div", { className: "ds-before-after__media", children: before.media })
861
- ] }),
862
- variant === "split" && /* @__PURE__ */ jsx("div", { className: "ds-before-after__divider", "aria-hidden": "true", children: /* @__PURE__ */ jsx("span", { className: "ds-before-after__arrow", children: "\u2192" }) }),
863
- /* @__PURE__ */ jsxs("div", { className: "ds-before-after__column ds-before-after__column--after", children: [
864
- /* @__PURE__ */ jsx("h3", { className: "ds-before-after__label", children: after.label }),
865
- /* @__PURE__ */ jsx("ul", { className: "ds-before-after__list", children: renderItems(after.items, "after") }),
866
- after.media && /* @__PURE__ */ jsx("div", { className: "ds-before-after__media", children: after.media })
867
- ] })
868
- ] })
869
- ]
870
- }
871
- );
872
- }
873
- );
874
- BeforeAfterBlock.displayName = "BeforeAfterBlock";
875
- var CompetitorDiff = forwardRef(
876
- ({
877
- eyebrow,
878
- title,
879
- subtitle,
880
- items,
881
- competitorLabel = "Others",
882
- ourLabel = "SalesMind AI",
883
- variant = "table",
884
- cta,
885
- className,
886
- ...props
887
- }, ref) => {
888
- return /* @__PURE__ */ jsxs(
889
- SectionShell,
890
- {
891
- ref,
892
- className: clsx27("ds-competitor-diff", className),
893
- ...props,
894
- children: [
895
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
896
- variant === "table" && /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__table", role: "table", "aria-label": "Feature comparison", children: [
897
- /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__thead", role: "row", children: [
898
- /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th", role: "columnheader" }),
899
- /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th ds-competitor-diff__th--them", role: "columnheader", children: competitorLabel }),
900
- /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th ds-competitor-diff__th--us", role: "columnheader", children: ourLabel })
901
- ] }),
902
- items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__row", role: "row", children: [
903
- /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__dimension", role: "rowheader", children: item.dimension }),
904
- /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cell ds-competitor-diff__cell--them", role: "cell", children: [
905
- /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__icon", "aria-hidden": "true", children: "\u2717" }),
906
- item.them
907
- ] }),
908
- /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cell ds-competitor-diff__cell--us", role: "cell", children: [
909
- /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__icon", "aria-hidden": "true", children: "\u2713" }),
910
- item.us
911
- ] })
912
- ] }, i))
913
- ] }),
914
- variant === "cards" && /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cards", children: [
915
- /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__card ds-competitor-diff__card--them", children: [
916
- /* @__PURE__ */ jsx("h3", { className: "ds-competitor-diff__card-label", children: competitorLabel }),
917
- /* @__PURE__ */ jsx("ul", { className: "ds-competitor-diff__card-list", children: items.map((item, i) => /* @__PURE__ */ jsxs("li", { children: [
918
- /* @__PURE__ */ jsxs("strong", { children: [
919
- item.dimension,
920
- ":"
921
- ] }),
922
- " ",
923
- item.them
924
- ] }, i)) })
925
- ] }),
926
- /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__card ds-competitor-diff__card--us", children: [
927
- /* @__PURE__ */ jsx("h3", { className: "ds-competitor-diff__card-label", children: ourLabel }),
928
- /* @__PURE__ */ jsx("ul", { className: "ds-competitor-diff__card-list", children: items.map((item, i) => /* @__PURE__ */ jsxs("li", { children: [
929
- /* @__PURE__ */ jsxs("strong", { children: [
930
- item.dimension,
931
- ":"
932
- ] }),
933
- " ",
934
- item.us
935
- ] }, i)) })
936
- ] })
937
- ] }),
938
- variant === "narrative" && /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__narrative", children: items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__narrative-item", children: [
939
- /* @__PURE__ */ jsxs("p", { className: "ds-competitor-diff__narrative-them", children: [
940
- /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__narrative-label", children: "Instead of" }),
941
- " ",
942
- item.them
943
- ] }),
944
- /* @__PURE__ */ jsxs("p", { className: "ds-competitor-diff__narrative-us", children: [
945
- /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__narrative-label", children: ourLabel }),
946
- " ",
947
- item.us
948
- ] })
949
- ] }, i)) }),
950
- cta && /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__cta", children: /* @__PURE__ */ jsx(Button, { variant: "primary", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: cta.href, context: "competitor-diff-cta", openInNewTab: false, children: cta.label }) }) })
951
- ]
952
- }
953
- );
954
- }
955
- );
956
- CompetitorDiff.displayName = "CompetitorDiff";
957
- var StakeholderTabs = forwardRef(
958
- ({
959
- eyebrow,
960
- title,
961
- stakeholders,
962
- defaultIndex = 0,
963
- className,
964
- ...props
965
- }, ref) => {
966
- return /* @__PURE__ */ jsxs(
967
- SectionShell,
968
- {
969
- ref,
970
- className: clsx27("ds-stakeholder-tabs", className),
971
- ...props,
972
- children: [
973
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title }),
974
- /* @__PURE__ */ jsxs(Tabs, { defaultValue: defaultIndex, children: [
975
- /* @__PURE__ */ jsx(TabsList, { className: "ds-stakeholder-tabs__list", children: stakeholders.map((s, i) => /* @__PURE__ */ jsxs(TabsTrigger, { value: i, className: "ds-stakeholder-tabs__trigger", children: [
976
- s.icon && /* @__PURE__ */ jsx("span", { className: "ds-stakeholder-tabs__icon", "aria-hidden": "true", children: s.icon }),
977
- s.label
978
- ] }, i)) }),
979
- stakeholders.map((s, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-stakeholder-tabs__content", children: /* @__PURE__ */ jsxs("div", { className: "ds-stakeholder-tabs__panel", children: [
980
- /* @__PURE__ */ jsxs("div", { className: "ds-stakeholder-tabs__text", children: [
981
- /* @__PURE__ */ jsx("h3", { className: "ds-stakeholder-tabs__headline", children: s.content.headline }),
982
- /* @__PURE__ */ jsx("p", { className: "ds-stakeholder-tabs__desc", children: s.content.description }),
983
- s.content.features && s.content.features.length > 0 && /* @__PURE__ */ jsx("ul", { className: "ds-stakeholder-tabs__features", children: s.content.features.map((f, j) => /* @__PURE__ */ jsxs("li", { className: "ds-stakeholder-tabs__feature", children: [
984
- f.icon && /* @__PURE__ */ jsx("span", { className: "ds-stakeholder-tabs__feature-icon", "aria-hidden": "true", children: f.icon }),
985
- /* @__PURE__ */ jsxs("div", { children: [
986
- /* @__PURE__ */ jsx("strong", { children: f.title }),
987
- /* @__PURE__ */ jsx("span", { children: f.description })
988
- ] })
989
- ] }, j)) }),
990
- /* @__PURE__ */ jsx("div", { className: "ds-stakeholder-tabs__cta-wrap", children: /* @__PURE__ */ jsx(Button, { variant: "primary", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: s.content.cta.href, context: "stakeholder-tabs-cta", openInNewTab: false, children: s.content.cta.label }) }) })
991
- ] }),
992
- s.content.testimonial && /* @__PURE__ */ jsx("div", { className: "ds-stakeholder-tabs__testimonial", children: s.content.testimonial })
993
- ] }) }, i))
994
- ] })
995
- ]
996
- }
997
- );
998
- }
999
- );
1000
- StakeholderTabs.displayName = "StakeholderTabs";
1001
- var IntegrationShowcase = forwardRef(
1002
- ({
1003
- eyebrow,
1004
- title,
1005
- subtitle,
1006
- integrations,
1007
- categories,
1008
- variant = "grid",
1009
- filterable = !!categories,
1010
- className,
1011
- ...props
1012
- }, ref) => {
1013
- const [activeCategory, setActiveCategory] = useState("All");
1014
- const allCategories = categories ?? ["All", ...new Set(integrations.map((i) => i.category))];
1015
- const filtered = activeCategory === "All" ? integrations : integrations.filter((i) => i.category === activeCategory);
1016
- return /* @__PURE__ */ jsxs(
1017
- SectionShell,
1018
- {
1019
- ref,
1020
- className: clsx27("ds-integration-showcase", className),
1021
- ...props,
1022
- children: [
1023
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1024
- filterable && allCategories.length > 1 && /* @__PURE__ */ jsxs(
1025
- Tabs,
1026
- {
1027
- value: allCategories.indexOf(activeCategory),
1028
- onValueChange: (v) => setActiveCategory(allCategories[v] ?? "All"),
1029
- children: [
1030
- /* @__PURE__ */ jsx(TabsList, { className: "ds-integration-showcase__filters", children: allCategories.map((cat, i) => /* @__PURE__ */ jsx(TabsTrigger, { value: i, className: "ds-integration-showcase__filter", children: cat }, cat)) }),
1031
- allCategories.map((_, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-integration-showcase__tab-content" }, i))
1032
- ]
1033
- }
1034
- ),
1035
- /* @__PURE__ */ jsx("div", { className: clsx27("ds-integration-showcase__grid", `ds-integration-showcase__grid--${variant}`), children: filtered.map((integration, i) => {
1036
- const Card = /* @__PURE__ */ jsxs("div", { className: "ds-integration-showcase__card", children: [
1037
- /* @__PURE__ */ jsx("div", { className: "ds-integration-showcase__logo", children: integration.logo }),
1038
- /* @__PURE__ */ jsxs("div", { className: "ds-integration-showcase__info", children: [
1039
- /* @__PURE__ */ jsxs("span", { className: "ds-integration-showcase__name", children: [
1040
- integration.name,
1041
- integration.badge && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "ds-integration-showcase__badge", children: integration.badge })
1042
- ] }),
1043
- integration.description && variant !== "compact" && /* @__PURE__ */ jsx("span", { className: "ds-integration-showcase__desc", children: integration.description })
1044
- ] })
1045
- ] }, i);
1046
- return integration.href ? /* @__PURE__ */ jsx(OutboundLink, { href: integration.href, context: "integration-showcase-card", className: "ds-integration-showcase__card-link", children: Card }, i) : Card;
1047
- }) })
1048
- ]
1049
- }
1050
- );
1051
- }
1052
- );
1053
- IntegrationShowcase.displayName = "IntegrationShowcase";
1054
- var SecurityBlock = forwardRef(
1055
- ({
1056
- eyebrow,
1057
- title,
1058
- subtitle,
1059
- certifications,
1060
- features,
1061
- variant = "badges",
1062
- className,
1063
- ...props
1064
- }, ref) => {
1065
- return /* @__PURE__ */ jsxs(
1066
- SectionShell,
1067
- {
1068
- ref,
1069
- className: clsx27("ds-security-block", className),
1070
- ...props,
1071
- children: [
1072
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1073
- certifications && certifications.length > 0 && /* @__PURE__ */ jsx("div", { className: clsx27("ds-security-block__certs", `ds-security-block__certs--${variant}`), children: certifications.map((cert, i) => {
1074
- const inner = /* @__PURE__ */ jsxs("div", { className: "ds-security-block__cert", children: [
1075
- /* @__PURE__ */ jsx("div", { className: "ds-security-block__cert-icon", children: cert.icon }),
1076
- /* @__PURE__ */ jsxs("div", { className: "ds-security-block__cert-info", children: [
1077
- /* @__PURE__ */ jsx("span", { className: "ds-security-block__cert-name", children: cert.name }),
1078
- variant === "detailed" && cert.description && /* @__PURE__ */ jsx("span", { className: "ds-security-block__cert-desc", children: cert.description })
1079
- ] })
1080
- ] }, i);
1081
- return cert.href ? /* @__PURE__ */ jsx(OutboundLink, { href: cert.href, context: "security-block-cert", className: "ds-security-block__cert-link", children: inner }, i) : /* @__PURE__ */ jsx(React34.Fragment, { children: inner }, i);
1082
- }) }),
1083
- features && features.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-security-block__features", children: features.map((feature, i) => /* @__PURE__ */ jsxs("div", { className: "ds-security-block__feature", children: [
1084
- feature.icon && /* @__PURE__ */ jsx("span", { className: "ds-security-block__feature-icon", "aria-hidden": "true", children: feature.icon }),
1085
- /* @__PURE__ */ jsxs("div", { children: [
1086
- /* @__PURE__ */ jsx("h4", { className: "ds-security-block__feature-title", children: feature.title }),
1087
- /* @__PURE__ */ jsx("p", { className: "ds-security-block__feature-desc", children: feature.description })
1088
- ] })
1089
- ] }, i)) })
1090
- ]
1091
- }
1092
- );
1093
- }
1094
- );
1095
- SecurityBlock.displayName = "SecurityBlock";
1096
- var CaseStudySection = forwardRef(
1097
- ({
1098
- eyebrow,
1099
- title,
1100
- subtitle,
1101
- caseStudies,
1102
- filterable = false,
1103
- filters,
1104
- maxVisible,
1105
- seeAllHref,
1106
- className,
1107
- ...props
1108
- }, ref) => {
1109
- const allFilters = filters ?? [
1110
- "All",
1111
- ...new Set(caseStudies.map((cs) => cs.industry).filter(Boolean))
1112
- ];
1113
- const [activeFilter, setActiveFilter] = useState("All");
1114
- const filtered = activeFilter === "All" ? caseStudies : caseStudies.filter((cs) => cs.industry === activeFilter);
1115
- const visible = maxVisible ? filtered.slice(0, maxVisible) : filtered;
1116
- return /* @__PURE__ */ jsxs(
1117
- SectionShell,
1118
- {
1119
- ref,
1120
- className: clsx27("ds-case-study-section", className),
1121
- ...props,
1122
- children: [
1123
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1124
- filterable && allFilters.length > 1 && /* @__PURE__ */ jsxs(
1125
- Tabs,
1126
- {
1127
- value: allFilters.indexOf(activeFilter),
1128
- onValueChange: (v) => setActiveFilter(allFilters[v] ?? "All"),
1129
- children: [
1130
- /* @__PURE__ */ jsx(TabsList, { className: "ds-case-study-section__filters", children: allFilters.map((filter, i) => /* @__PURE__ */ jsx(TabsTrigger, { value: i, className: "ds-case-study-section__filter", children: filter }, filter)) }),
1131
- allFilters.map((_, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-case-study-section__tab-content" }, i))
1132
- ]
1133
- }
1134
- ),
1135
- /* @__PURE__ */ jsx("div", { className: "ds-case-study-section__grid", children: visible.map((cs, i) => /* @__PURE__ */ jsx(CaseStudyCard, { ...cs }, i)) }),
1136
- seeAllHref && /* @__PURE__ */ jsx("div", { className: "ds-case-study-section__see-all", children: /* @__PURE__ */ jsx(Button, { variant: "outline", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: seeAllHref, context: "case-study-section-see-all", openInNewTab: false, children: "See all case studies" }) }) })
1137
- ]
1138
- }
1139
- );
1140
- }
1141
- );
1142
- CaseStudySection.displayName = "CaseStudySection";
1143
- var ManifestoBlock = forwardRef(
1144
- ({
1145
- statement,
1146
- attribution,
1147
- variant = "centered",
1148
- className,
1149
- ...props
1150
- }, ref) => {
1151
- const initials = attribution ? attribution.name.split(" ").map((n) => n[0]).join("").slice(0, 2) : "";
1152
- return /* @__PURE__ */ jsx(
1153
- SectionShell,
1154
- {
1155
- ref,
1156
- className: clsx27("ds-manifesto", `ds-manifesto--${variant}`, className),
1157
- ...props,
1158
- children: /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__inner", children: [
1159
- variant === "quote" && /* @__PURE__ */ jsx("span", { className: "ds-manifesto__quote-mark", "aria-hidden": "true", children: "\u201C" }),
1160
- /* @__PURE__ */ jsx("blockquote", { className: "ds-manifesto__statement", children: statement }),
1161
- attribution && /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__attribution", children: [
1162
- /* @__PURE__ */ jsxs(Avatar, { size: "sm", children: [
1163
- attribution.avatar && /* @__PURE__ */ jsx(AvatarImage, { src: attribution.avatar, alt: attribution.name }),
1164
- /* @__PURE__ */ jsx(AvatarFallback, { children: initials })
1165
- ] }),
1166
- /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__attribution-text", children: [
1167
- /* @__PURE__ */ jsx("span", { className: "ds-manifesto__attribution-name", children: attribution.name }),
1168
- /* @__PURE__ */ jsx("span", { className: "ds-manifesto__attribution-role", children: attribution.role })
1169
- ] })
1170
- ] })
1171
- ] })
1172
- }
1173
- );
1174
- }
1175
- );
1176
- ManifestoBlock.displayName = "ManifestoBlock";
1177
- var STATUS_LABELS = {
1178
- certified: "Certified",
1179
- "in-progress": "In Progress",
1180
- planned: "Planned"
1181
- };
1182
- var ComplianceGrid = forwardRef(
1183
- ({
1184
- eyebrow,
1185
- title,
1186
- subtitle,
1187
- items,
1188
- className,
1189
- ...props
1190
- }, ref) => {
1191
- return /* @__PURE__ */ jsxs(
1192
- SectionShell,
1193
- {
1194
- ref,
1195
- className: clsx27("ds-compliance-grid", className),
1196
- ...props,
1197
- children: [
1198
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1199
- /* @__PURE__ */ jsx("div", { className: "ds-compliance-grid__items", children: items.map((item, i) => {
1200
- const inner = /* @__PURE__ */ jsxs(
1201
- "div",
1202
- {
1203
- className: clsx27(
1204
- "ds-compliance-grid__item",
1205
- `ds-compliance-grid__item--${item.status}`
1206
- ),
1207
- children: [
1208
- item.icon && /* @__PURE__ */ jsx("div", { className: "ds-compliance-grid__icon", children: item.icon }),
1209
- /* @__PURE__ */ jsxs("div", { className: "ds-compliance-grid__info", children: [
1210
- /* @__PURE__ */ jsx("span", { className: "ds-compliance-grid__name", children: item.name }),
1211
- /* @__PURE__ */ jsx(
1212
- Badge,
1213
- {
1214
- className: clsx27(
1215
- "ds-compliance-grid__status",
1216
- `ds-compliance-grid__status--${item.status}`
1217
- ),
1218
- variant: "outline",
1219
- children: STATUS_LABELS[item.status]
1220
- }
1221
- ),
1222
- item.description && /* @__PURE__ */ jsx("span", { className: "ds-compliance-grid__desc", children: item.description })
1223
- ] })
1224
- ]
1225
- },
1226
- i
1227
- );
1228
- return item.documentHref ? /* @__PURE__ */ jsx(OutboundLink, { href: item.documentHref, context: "compliance-grid-doc", className: "ds-compliance-grid__link", children: inner }, i) : /* @__PURE__ */ jsx(React34.Fragment, { children: inner }, i);
1229
- }) })
1230
- ]
1231
- }
1232
- );
1233
- }
1234
- );
1235
- ComplianceGrid.displayName = "ComplianceGrid";
1236
- var ArchitectureDiagram = forwardRef(
1237
- ({
1238
- nodes,
1239
- connections,
1240
- direction = "horizontal",
1241
- className,
1242
- ...props
1243
- }, ref) => {
1244
- const isHorizontal = direction === "horizontal";
1245
- return /* @__PURE__ */ jsx(
1246
- "div",
1247
- {
1248
- ref,
1249
- className: clsx27(
1250
- "ds-architecture",
1251
- `ds-architecture--${direction}`,
1252
- className
1253
- ),
1254
- role: "img",
1255
- "aria-label": "Architecture diagram",
1256
- ...props,
1257
- children: /* @__PURE__ */ jsx("div", { className: "ds-architecture__nodes", children: nodes.map((node, i) => /* @__PURE__ */ jsxs(React34.Fragment, { children: [
1258
- i > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-architecture__connection", "aria-hidden": "true", children: [
1259
- /* @__PURE__ */ jsx(
1260
- "div",
1261
- {
1262
- className: clsx27(
1263
- "ds-architecture__line",
1264
- connections.find(
1265
- (c) => c.from === nodes[i - 1]?.id && c.to === node.id
1266
- )?.animated && "ds-architecture__line--animated"
1267
- )
1268
- }
1269
- ),
1270
- /* @__PURE__ */ jsx("span", { className: "ds-architecture__arrow", children: isHorizontal ? "\u2192" : "\u2193" }),
1271
- connections.find(
1272
- (c) => c.from === nodes[i - 1]?.id && c.to === node.id
1273
- )?.label && /* @__PURE__ */ jsx("span", { className: "ds-architecture__connection-label", children: connections.find(
1274
- (c) => c.from === nodes[i - 1]?.id && c.to === node.id
1275
- )?.label })
1276
- ] }),
1277
- /* @__PURE__ */ jsxs(
1278
- "div",
1279
- {
1280
- className: clsx27(
1281
- "ds-architecture__node",
1282
- `ds-architecture__node--${node.type}`
1283
- ),
1284
- title: node.description,
1285
- children: [
1286
- node.icon && /* @__PURE__ */ jsx("span", { className: "ds-architecture__node-icon", "aria-hidden": "true", children: node.icon }),
1287
- /* @__PURE__ */ jsx("span", { className: "ds-architecture__node-label", children: node.label })
1288
- ]
1289
- }
1290
- )
1291
- ] }, node.id)) })
1292
- }
1293
- );
1294
- }
1295
- );
1296
- ArchitectureDiagram.displayName = "ArchitectureDiagram";
1297
- function getUtmSegment(param) {
1298
- if (typeof window === "undefined") return null;
1299
- const url = new URL(window.location.href);
1300
- return url.searchParams.get(param);
1301
- }
1302
- function getCookieSegment(name) {
1303
- if (typeof document === "undefined") return null;
1304
- const match = document.cookie.match(new RegExp(`(?:^|;\\s*)${name}=([^;]*)`));
1305
- return match ? decodeURIComponent(match[1]) : null;
1306
- }
1307
- var SegmentSwitch = forwardRef(
1308
- ({
1309
- segment: controlledSegment,
1310
- segments,
1311
- fallback = null,
1312
- source = "manual",
1313
- utmParam = "utm_segment",
1314
- cookieName = "ds_segment",
1315
- className,
1316
- ...props
1317
- }, ref) => {
1318
- const resolvedSegment = useMemo(() => {
1319
- if (controlledSegment) return controlledSegment;
1320
- switch (source) {
1321
- case "utm":
1322
- return getUtmSegment(utmParam) ?? void 0;
1323
- case "cookie":
1324
- return getCookieSegment(cookieName) ?? void 0;
1325
- default:
1326
- return void 0;
1327
- }
1328
- }, [controlledSegment, source, utmParam, cookieName]);
1329
- const content = resolvedSegment && segments[resolvedSegment] ? segments[resolvedSegment] : fallback;
1330
- if (!content) return null;
1331
- return /* @__PURE__ */ jsx("div", { ref, className: clsx27(className), ...props, children: content });
1332
- }
1333
- );
1334
- SegmentSwitch.displayName = "SegmentSwitch";
1335
- var IntentCTA = forwardRef(
1336
- ({
1337
- stages,
1338
- defaultCta,
1339
- pageCount = 0,
1340
- className,
1341
- ...props
1342
- }, ref) => {
1343
- const [activeStageIndex, setActiveStageIndex] = useState(-1);
1344
- const timeRef = useRef(0);
1345
- const timerRef = useRef(null);
1346
- const pageCountRef = useRef(pageCount);
1347
- useEffect(() => {
1348
- pageCountRef.current = pageCount;
1349
- }, [pageCount]);
1350
- useEffect(() => {
1351
- if (typeof window === "undefined") return;
1352
- timerRef.current = setInterval(() => {
1353
- timeRef.current += 1;
1354
- checkStages();
1355
- }, 1e3);
1356
- const handleScroll = () => {
1357
- checkStages();
1358
- };
1359
- window.addEventListener("scroll", handleScroll, { passive: true });
1360
- function checkStages() {
1361
- const scrollPercent = typeof document !== "undefined" ? Math.round(
1362
- window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) * 100
1363
- ) : 0;
1364
- let highestTriggered = -1;
1365
- for (let i = 0; i < stages.length; i++) {
1366
- const stage = stages[i];
1367
- let triggered = false;
1368
- switch (stage.trigger.type) {
1369
- case "scroll":
1370
- triggered = scrollPercent >= stage.trigger.threshold;
1371
- break;
1372
- case "time":
1373
- triggered = timeRef.current >= stage.trigger.threshold;
1374
- break;
1375
- case "pages":
1376
- triggered = pageCountRef.current >= stage.trigger.threshold;
1377
- break;
1378
- }
1379
- if (triggered) highestTriggered = i;
1380
- }
1381
- setActiveStageIndex((prev) => Math.max(prev, highestTriggered));
1382
- }
1383
- checkStages();
1384
- return () => {
1385
- window.removeEventListener("scroll", handleScroll);
1386
- if (timerRef.current) clearInterval(timerRef.current);
1387
- };
1388
- }, [stages]);
1389
- const activeCta = activeStageIndex >= 0 ? stages[activeStageIndex] : defaultCta;
1390
- return /* @__PURE__ */ jsx(
1391
- "div",
1392
- {
1393
- ref,
1394
- className: clsx27("ds-intent-cta", className),
1395
- ...props,
1396
- children: /* @__PURE__ */ jsx(
1397
- Button,
1398
- {
1399
- variant: activeCta.variant ?? "primary",
1400
- asChild: true,
1401
- children: /* @__PURE__ */ jsx(OutboundLink, { href: activeCta.href, context: "intent-cta", openInNewTab: false, children: activeCta.label })
1402
- }
1403
- )
1404
- }
1405
- );
1406
- }
1407
- );
1408
- IntentCTA.displayName = "IntentCTA";
1409
- var EvolutionTimeline = forwardRef(
1410
- ({
1411
- eyebrow,
1412
- title,
1413
- subtitle,
1414
- eras,
1415
- youAreHere,
1416
- cta,
1417
- className,
1418
- ...props
1419
- }, ref) => {
1420
- return /* @__PURE__ */ jsxs(
1421
- SectionShell,
1422
- {
1423
- ref,
1424
- className: clsx27("ds-evolution-timeline", className),
1425
- ...props,
1426
- children: [
1427
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1428
- /* @__PURE__ */ jsxs("div", { className: "ds-evolution-timeline__track", children: [
1429
- /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__line", "aria-hidden": "true" }),
1430
- eras.map((era, i) => /* @__PURE__ */ jsxs(
1431
- "div",
1432
- {
1433
- className: clsx27(
1434
- "ds-evolution-timeline__era",
1435
- `ds-evolution-timeline__era--${era.sentiment}`,
1436
- era.current && "ds-evolution-timeline__era--current"
1437
- ),
1438
- children: [
1439
- /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__marker", "aria-hidden": "true" }),
1440
- youAreHere === i && /* @__PURE__ */ jsx(Badge, { className: "ds-evolution-timeline__you-are-here", children: "Most tools are here" }),
1441
- era.icon && /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__icon", "aria-hidden": "true", children: era.icon }),
1442
- /* @__PURE__ */ jsxs("div", { className: "ds-evolution-timeline__content", children: [
1443
- /* @__PURE__ */ jsx("span", { className: "ds-evolution-timeline__period", children: era.period }),
1444
- /* @__PURE__ */ jsx("h3", { className: "ds-evolution-timeline__label", children: era.label }),
1445
- /* @__PURE__ */ jsx("p", { className: "ds-evolution-timeline__desc", children: era.description }),
1446
- /* @__PURE__ */ jsx("ul", { className: "ds-evolution-timeline__traits", children: era.traits.map((trait, j) => /* @__PURE__ */ jsxs("li", { className: "ds-evolution-timeline__trait", children: [
1447
- /* @__PURE__ */ jsx("span", { className: "ds-evolution-timeline__trait-icon", "aria-hidden": "true", children: era.sentiment === "future" ? "\u2713" : era.sentiment === "past" ? "\u2717" : "\u2022" }),
1448
- trait
1449
- ] }, j)) })
1450
- ] })
1451
- ]
1452
- },
1453
- i
1454
- ))
1455
- ] }),
1456
- cta && /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__cta", children: /* @__PURE__ */ jsx(Button, { variant: "primary", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: cta.href, context: "evolution-timeline-cta", openInNewTab: false, children: cta.label }) }) })
1457
- ]
1458
- }
1459
- );
1460
- }
1461
- );
1462
- EvolutionTimeline.displayName = "EvolutionTimeline";
1463
- var EcosystemDiagram = forwardRef(
1464
- ({
1465
- eyebrow,
1466
- title,
1467
- subtitle,
1468
- layers,
1469
- connections,
1470
- variant = "flywheel",
1471
- centerLabel,
1472
- className,
1473
- ...props
1474
- }, ref) => {
1475
- return /* @__PURE__ */ jsxs(
1476
- SectionShell,
1477
- {
1478
- ref,
1479
- className: clsx27("ds-ecosystem", `ds-ecosystem--${variant}`, className),
1480
- ...props,
1481
- children: [
1482
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1483
- /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__diagram", role: "img", "aria-label": "Ecosystem diagram", children: [
1484
- centerLabel && /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__center", children: /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__center-label", children: centerLabel }) }),
1485
- /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__layers", children: layers.map((layer, i) => /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__layer", children: [
1486
- layer.icon && /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__layer-icon", "aria-hidden": "true", children: layer.icon }),
1487
- /* @__PURE__ */ jsx("h3", { className: "ds-ecosystem__layer-name", children: layer.name }),
1488
- /* @__PURE__ */ jsx("p", { className: "ds-ecosystem__layer-desc", children: layer.description }),
1489
- /* @__PURE__ */ jsx("ul", { className: "ds-ecosystem__capabilities", children: layer.capabilities.map((cap, j) => /* @__PURE__ */ jsx("li", { className: "ds-ecosystem__capability", children: cap }, j)) })
1490
- ] }, i)) }),
1491
- /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__connections", "aria-hidden": "true", children: connections.map((conn, i) => /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__connection", children: [
1492
- /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__connection-arrow", children: "\\u2192" }),
1493
- /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__connection-label", children: conn.label })
1494
- ] }, i)) })
1495
- ] })
1496
- ]
1497
- }
1498
- );
1499
- }
1500
- );
1501
- EcosystemDiagram.displayName = "EcosystemDiagram";
1502
- function formatNumber(n, prefix, suffix) {
1503
- const formatted = n >= 1e3 ? n.toLocaleString("en-US", { maximumFractionDigits: 0 }) : String(Math.round(n * 10) / 10);
1504
- return `${prefix ?? ""}${formatted}${suffix ?? ""}`;
1505
- }
1506
- var ValueAnchor = forwardRef(
1507
- ({
1508
- eyebrow,
1509
- title,
1510
- subtitle,
1511
- inputs,
1512
- calculate,
1513
- cta,
1514
- className,
1515
- ...props
1516
- }, ref) => {
1517
- const initialValues = useMemo(() => {
1518
- const vals = {};
1519
- inputs.forEach((inp) => {
1520
- vals[inp.name] = inp.defaultValue;
1521
- });
1522
- return vals;
1523
- }, [inputs]);
1524
- const [values, setValues] = useState(initialValues);
1525
- const handleChange = useCallback((name, value) => {
1526
- setValues((prev) => ({ ...prev, [name]: value }));
1527
- }, []);
1528
- const output = useMemo(() => calculate(values), [values, calculate]);
1529
- return /* @__PURE__ */ jsxs(
1530
- SectionShell,
1531
- {
1532
- ref,
1533
- className: clsx27("ds-value-anchor", className),
1534
- ...props,
1535
- children: [
1536
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1537
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__layout", children: [
1538
- /* @__PURE__ */ jsx("div", { className: "ds-value-anchor__inputs", children: inputs.map((input) => /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__input-group", children: [
1539
- /* @__PURE__ */ jsxs("label", { className: "ds-value-anchor__input-label", children: [
1540
- input.label,
1541
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__input-value", children: formatNumber(values[input.name], input.prefix, input.suffix) })
1542
- ] }),
1543
- input.type === "slider" ? /* @__PURE__ */ jsx(
1544
- Slider,
1545
- {
1546
- value: values[input.name],
1547
- min: input.min ?? 0,
1548
- max: input.max ?? 100,
1549
- step: input.step ?? 1,
1550
- onValueChange: (v) => handleChange(input.name, v)
1551
- }
1552
- ) : /* @__PURE__ */ jsx(
1553
- TextField,
1554
- {
1555
- type: "number",
1556
- value: String(values[input.name]),
1557
- onChange: (e) => handleChange(input.name, Number(e.target.value) || 0)
1558
- }
1559
- )
1560
- ] }, input.name)) }),
1561
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__output", children: [
1562
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__primary", children: [
1563
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__primary-value", children: formatNumber(output.primaryMetric.value, output.primaryMetric.prefix, output.primaryMetric.suffix) }),
1564
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__primary-label", children: output.primaryMetric.label })
1565
- ] }),
1566
- output.secondaryMetrics.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-value-anchor__secondary", children: output.secondaryMetrics.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__secondary-metric", children: [
1567
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__secondary-value", children: formatNumber(m.value, m.prefix, m.suffix) }),
1568
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__secondary-label", children: m.label })
1569
- ] }, i)) }),
1570
- output.costComparison && /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison", children: [
1571
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison-col ds-value-anchor__comparison-col--without", children: [
1572
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-value", children: formatNumber(output.costComparison.without.value, "$") }),
1573
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-label", children: output.costComparison.without.label })
1574
- ] }),
1575
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison-col ds-value-anchor__comparison-col--with", children: [
1576
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-value", children: formatNumber(output.costComparison.with.value, "$") }),
1577
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-label", children: output.costComparison.with.label })
1578
- ] }),
1579
- /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__savings", children: [
1580
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__savings-value", children: formatNumber(output.costComparison.savings.value, "$") }),
1581
- /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__savings-label", children: output.costComparison.savings.label })
1582
- ] })
1583
- ] })
1584
- ] })
1585
- ] }),
1586
- cta && /* @__PURE__ */ jsx("div", { className: "ds-value-anchor__cta", children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: cta.href, context: "value-anchor-cta", openInNewTab: false, children: cta.label }) }) })
1587
- ]
1588
- }
1589
- );
1590
- }
1591
- );
1592
- ValueAnchor.displayName = "ValueAnchor";
1593
- var STATUS_LABELS2 = {
1594
- active: "Active",
1595
- "in-progress": "In Progress",
1596
- planned: "Planned"
1597
- };
1598
- var EnterpriseSignaling = forwardRef(
1599
- ({
1600
- eyebrow,
1601
- title,
1602
- subtitle,
1603
- categories,
1604
- sla,
1605
- variant = "full",
1606
- className,
1607
- ...props
1608
- }, ref) => {
1609
- if (variant === "strip") {
1610
- return /* @__PURE__ */ jsx(
1611
- "div",
1612
- {
1613
- ref,
1614
- className: clsx27("ds-enterprise-signaling", "ds-enterprise-signaling--strip", className),
1615
- ...props,
1616
- children: /* @__PURE__ */ jsx("div", { className: "ds-enterprise-signaling__strip-inner", children: categories.flatMap((cat) => cat.items.filter((i) => i.status === "active")).map((item, i) => /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__strip-item", children: item.name }, i)) })
1617
- }
1618
- );
1619
- }
1620
- return /* @__PURE__ */ jsxs(
1621
- SectionShell,
1622
- {
1623
- ref,
1624
- className: clsx27("ds-enterprise-signaling", `ds-enterprise-signaling--${variant}`, className),
1625
- ...props,
1626
- children: [
1627
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1628
- /* @__PURE__ */ jsx("div", { className: "ds-enterprise-signaling__categories", children: categories.map((cat, ci) => /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__category", children: [
1629
- /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__category-header", children: [
1630
- cat.icon && /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__category-icon", children: cat.icon }),
1631
- /* @__PURE__ */ jsx("h3", { className: "ds-enterprise-signaling__category-name", children: cat.name })
1632
- ] }),
1633
- /* @__PURE__ */ jsx("div", { className: "ds-enterprise-signaling__items", children: cat.items.map((item, ii) => {
1634
- const inner = /* @__PURE__ */ jsxs(
1635
- "div",
1636
- {
1637
- className: clsx27(
1638
- "ds-enterprise-signaling__item",
1639
- `ds-enterprise-signaling__item--${item.status}`
1640
- ),
1641
- children: [
1642
- /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__item-name", children: item.name }),
1643
- /* @__PURE__ */ jsx(
1644
- Badge,
1645
- {
1646
- className: clsx27("ds-enterprise-signaling__item-status", `ds-enterprise-signaling__item-status--${item.status}`),
1647
- variant: "outline",
1648
- children: STATUS_LABELS2[item.status]
1649
- }
1650
- ),
1651
- variant === "full" && item.detail && /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__item-detail", children: item.detail })
1652
- ]
1653
- },
1654
- ii
1655
- );
1656
- return item.href ? /* @__PURE__ */ jsx(OutboundLink, { href: item.href, context: "enterprise-signaling-item", className: "ds-enterprise-signaling__item-link", children: inner }, ii) : /* @__PURE__ */ jsx(React34.Fragment, { children: inner }, ii);
1657
- }) })
1658
- ] }, ci)) }),
1659
- sla && sla.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__sla", children: [
1660
- /* @__PURE__ */ jsx("h3", { className: "ds-enterprise-signaling__sla-title", children: "Service Level Agreements" }),
1661
- /* @__PURE__ */ jsxs("table", { className: "ds-enterprise-signaling__sla-table", children: [
1662
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
1663
- /* @__PURE__ */ jsx("th", { children: "Metric" }),
1664
- /* @__PURE__ */ jsx("th", { children: "SLA" }),
1665
- sla.some((s) => s.current) && /* @__PURE__ */ jsx("th", { children: "Current" })
1666
- ] }) }),
1667
- /* @__PURE__ */ jsx("tbody", { children: sla.map((s, i) => /* @__PURE__ */ jsxs("tr", { children: [
1668
- /* @__PURE__ */ jsx("td", { children: s.metric }),
1669
- /* @__PURE__ */ jsx("td", { children: s.commitment }),
1670
- sla.some((sl) => sl.current) && /* @__PURE__ */ jsx("td", { className: "ds-enterprise-signaling__sla-current", children: s.current ?? "\u2014" })
1671
- ] }, i)) })
1672
- ] })
1673
- ] })
1674
- ]
1675
- }
1676
- );
1677
- }
1678
- );
1679
- EnterpriseSignaling.displayName = "EnterpriseSignaling";
1680
- var IntelligenceBlock = forwardRef(
1681
- ({
1682
- eyebrow,
1683
- title,
1684
- subtitle,
1685
- metrics,
1686
- capabilities,
1687
- variant = "metrics-first",
1688
- className,
1689
- ...props
1690
- }, ref) => {
1691
- const metricsBlock = /* @__PURE__ */ jsx("div", { className: "ds-intelligence__metrics", children: metrics.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__metric", children: [
1692
- /* @__PURE__ */ jsx(
1693
- MetricCounter,
1694
- {
1695
- value: m.value,
1696
- prefix: m.prefix,
1697
- suffix: m.suffix,
1698
- label: m.label
1699
- }
1700
- ),
1701
- m.growth && /* @__PURE__ */ jsx("span", { className: "ds-intelligence__growth", children: m.growth })
1702
- ] }, i)) });
1703
- const capabilitiesBlock = /* @__PURE__ */ jsx("div", { className: "ds-intelligence__capabilities", children: capabilities.map((cap, i) => /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__capability", children: [
1704
- cap.icon && /* @__PURE__ */ jsx("div", { className: "ds-intelligence__capability-icon", "aria-hidden": "true", children: cap.icon }),
1705
- /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__capability-content", children: [
1706
- /* @__PURE__ */ jsx("h3", { className: "ds-intelligence__capability-title", children: cap.title }),
1707
- /* @__PURE__ */ jsx("p", { className: "ds-intelligence__capability-desc", children: cap.description }),
1708
- cap.compoundingExample && /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound", children: [
1709
- /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound-before", children: [
1710
- /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-label", children: "Before" }),
1711
- /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-text", children: cap.compoundingExample.before })
1712
- ] }),
1713
- /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-arrow", "aria-hidden": "true", children: "\\u2192" }),
1714
- /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound-after", children: [
1715
- /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-label", children: cap.compoundingExample.timeframe }),
1716
- /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-text", children: cap.compoundingExample.after })
1717
- ] })
1718
- ] })
1719
- ] })
1720
- ] }, i)) });
1721
- return /* @__PURE__ */ jsxs(
1722
- SectionShell,
1723
- {
1724
- ref,
1725
- className: clsx27("ds-intelligence", `ds-intelligence--${variant}`, className),
1726
- ...props,
1727
- children: [
1728
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1729
- variant === "capabilities-first" ? /* @__PURE__ */ jsxs(Fragment, { children: [
1730
- capabilitiesBlock,
1731
- metricsBlock
1732
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1733
- metricsBlock,
1734
- capabilitiesBlock
1735
- ] })
1736
- ]
1737
- }
1738
- );
1739
- }
1740
- );
1741
- IntelligenceBlock.displayName = "IntelligenceBlock";
1742
- function fmtNum(n, prefix, suffix) {
1743
- return `${prefix ?? ""}${n.toLocaleString("en-US", { maximumFractionDigits: 0 })}${suffix ?? ""}`;
1744
- }
1745
- var PartnerValueProp = forwardRef(
1746
- ({
1747
- eyebrow,
1748
- title,
1749
- subtitle,
1750
- calculator,
1751
- benefits,
1752
- differentiators,
1753
- differentiatorTitle = "Build In-House vs. White-Label",
1754
- differentiatorBuildLabel = "Build In-House",
1755
- differentiatorPartnerLabel = "White-Label",
1756
- cta,
1757
- className,
1758
- ...props
1759
- }, ref) => {
1760
- const initialValues = useMemo(() => {
1761
- if (!calculator) return {};
1762
- const vals = {};
1763
- calculator.inputs.forEach((inp) => {
1764
- vals[inp.name] = inp.defaultValue;
1765
- });
1766
- return vals;
1767
- }, [calculator]);
1768
- const [values, setValues] = useState(initialValues);
1769
- const handleChange = useCallback((name, value) => {
1770
- setValues((prev) => ({ ...prev, [name]: value }));
1771
- }, []);
1772
- const calcOutput = useMemo(() => {
1773
- if (!calculator) return null;
1774
- return calculator.calculate(values);
1775
- }, [values, calculator]);
1776
- return /* @__PURE__ */ jsxs(
1777
- SectionShell,
1778
- {
1779
- ref,
1780
- className: clsx27("ds-partner-vp", className),
1781
- ...props,
1782
- children: [
1783
- /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1784
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__layout", children: [
1785
- /* @__PURE__ */ jsx("div", { className: "ds-partner-vp__benefits", children: benefits.map((b, i) => /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__benefit", children: [
1786
- b.icon && /* @__PURE__ */ jsx("div", { className: "ds-partner-vp__benefit-icon", "aria-hidden": "true", children: b.icon }),
1787
- /* @__PURE__ */ jsxs("div", { children: [
1788
- /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__benefit-title", children: b.title }),
1789
- /* @__PURE__ */ jsx("p", { className: "ds-partner-vp__benefit-desc", children: b.description })
1790
- ] })
1791
- ] }, i)) }),
1792
- calculator && calcOutput && /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calculator", children: [
1793
- /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__calc-title", children: "Partner Economics" }),
1794
- calculator.inputs.map((input) => /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-input", children: [
1795
- /* @__PURE__ */ jsxs("label", { className: "ds-partner-vp__calc-label", children: [
1796
- input.label,
1797
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-value", children: fmtNum(values[input.name], input.prefix, input.suffix) })
1798
- ] }),
1799
- /* @__PURE__ */ jsx(
1800
- Slider,
1801
- {
1802
- value: values[input.name],
1803
- min: input.min ?? 0,
1804
- max: input.max ?? 100,
1805
- onValueChange: (v) => handleChange(input.name, v)
1806
- }
1807
- )
1808
- ] }, input.name)),
1809
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-results", children: [
1810
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-margin", children: [
1811
- /* @__PURE__ */ jsxs("span", { className: "ds-partner-vp__calc-margin-value", children: [
1812
- Math.round(calcOutput.marginPercentage),
1813
- "%"
1814
- ] }),
1815
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-margin-label", children: "Margin" })
1816
- ] }),
1817
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metrics", children: [
1818
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
1819
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.monthlyRevenue, "$") }),
1820
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Revenue" })
1821
- ] }),
1822
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
1823
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.monthlyCost, "$") }),
1824
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Cost" })
1825
- ] }),
1826
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
1827
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value ds-partner-vp__calc-metric-value--positive", children: fmtNum(calcOutput.monthlyMargin, "$") }),
1828
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Profit" })
1829
- ] }),
1830
- /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
1831
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.annualRevenue, "$") }),
1832
- /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Annual Revenue" })
1833
- ] })
1834
- ] })
1835
- ] })
1836
- ] })
1837
- ] }),
1838
- differentiators && differentiators.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__diff", children: [
1839
- /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__diff-title", children: differentiatorTitle }),
1840
- /* @__PURE__ */ jsxs("table", { className: "ds-partner-vp__diff-table", children: [
1841
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
1842
- /* @__PURE__ */ jsx("th", { children: "Dimension" }),
1843
- /* @__PURE__ */ jsx("th", { children: differentiatorBuildLabel }),
1844
- /* @__PURE__ */ jsx("th", { children: differentiatorPartnerLabel })
1845
- ] }) }),
1846
- /* @__PURE__ */ jsx("tbody", { children: differentiators.map((d, i) => /* @__PURE__ */ jsxs("tr", { children: [
1847
- /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-dimension", children: d.dimension }),
1848
- /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-build", children: d.buildInHouse }),
1849
- /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-sm", children: d.withPartner })
1850
- ] }, i)) })
1851
- ] })
1852
- ] }),
1853
- /* @__PURE__ */ jsx("div", { className: "ds-partner-vp__cta", children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", asChild: true, children: /* @__PURE__ */ jsx(OutboundLink, { href: cta.href, context: "partner-value-prop-cta", openInNewTab: false, children: cta.label }) }) })
1854
- ]
1855
- }
1856
- );
1857
- }
1858
- );
1859
- PartnerValueProp.displayName = "PartnerValueProp";
1860
- var ComparisonTable = React34.forwardRef(
1861
- ({ columns, rows, caption, className, ...props }, ref) => {
1862
- return /* @__PURE__ */ jsx("div", { ref, className: clsx27("ds-comparison-table", className), ...props, children: /* @__PURE__ */ jsx("div", { className: "ds-comparison-table__scroll", children: /* @__PURE__ */ jsxs("table", { className: "ds-comparison-table__table", role: "table", children: [
1863
- caption && /* @__PURE__ */ jsx("caption", { className: "ds-comparison-table__caption", children: caption }),
1864
- /* @__PURE__ */ jsx("thead", { className: "ds-comparison-table__head", children: /* @__PURE__ */ jsxs("tr", { children: [
1865
- /* @__PURE__ */ jsx("th", { className: "ds-comparison-table__corner", scope: "col", children: /* @__PURE__ */ jsx("span", { className: "ds-visually-hidden", children: "Feature" }) }),
1866
- columns.map((col, idx) => /* @__PURE__ */ jsxs(
1867
- "th",
1868
- {
1869
- scope: "col",
1870
- className: clsx27(
1871
- "ds-comparison-table__col-header",
1872
- col.highlighted && "ds-comparison-table__col-header--highlighted"
1873
- ),
1874
- children: [
1875
- col.badge && /* @__PURE__ */ jsx("span", { className: "ds-comparison-table__col-badge", children: col.badge }),
1876
- /* @__PURE__ */ jsx("span", { className: "ds-comparison-table__col-label", children: col.label })
1877
- ]
1878
- },
1879
- idx
1880
- ))
1881
- ] }) }),
1882
- /* @__PURE__ */ jsx("tbody", { className: "ds-comparison-table__body", children: rows.map(
1883
- (row, rowIdx) => row.isCategory ? /* @__PURE__ */ jsx("tr", { className: "ds-comparison-table__category-row", children: /* @__PURE__ */ jsx(
1884
- "td",
1885
- {
1886
- colSpan: columns.length + 1,
1887
- className: "ds-comparison-table__category",
1888
- children: row.label
1889
- }
1890
- ) }, rowIdx) : /* @__PURE__ */ jsxs("tr", { className: "ds-comparison-table__row", children: [
1891
- /* @__PURE__ */ jsx("td", { className: "ds-comparison-table__row-label", children: row.label }),
1892
- row.values.map((val, colIdx) => /* @__PURE__ */ jsx(
1893
- "td",
1894
- {
1895
- className: clsx27(
1896
- "ds-comparison-table__cell",
1897
- columns[colIdx]?.highlighted && "ds-comparison-table__cell--highlighted"
1898
- ),
1899
- children: val
1900
- },
1901
- colIdx
1902
- ))
1903
- ] }, rowIdx)
1904
- ) })
1905
- ] }) }) });
1906
- }
1907
- );
1908
- ComparisonTable.displayName = "ComparisonTable";
1909
- var GuaranteeHighlight = React34.forwardRef(
1910
- ({
1911
- guarantee,
1912
- detail,
1913
- finePrint,
1914
- variant = "default",
1915
- icon,
1916
- className,
1917
- ...props
1918
- }, ref) => {
1919
- return /* @__PURE__ */ jsxs(
1920
- "div",
1921
- {
1922
- ref,
1923
- className: clsx27(
1924
- "ds-guarantee",
1925
- `ds-guarantee--${variant}`,
1926
- className
1927
- ),
1928
- ...props,
1929
- children: [
1930
- icon && /* @__PURE__ */ jsx("div", { className: "ds-guarantee__icon", children: icon }),
1931
- /* @__PURE__ */ jsxs("div", { className: "ds-guarantee__content", children: [
1932
- /* @__PURE__ */ jsx("p", { className: "ds-guarantee__statement", children: guarantee }),
1933
- detail && /* @__PURE__ */ jsx("p", { className: "ds-guarantee__detail", children: detail }),
1934
- finePrint && /* @__PURE__ */ jsx("p", { className: "ds-guarantee__fine-print", children: finePrint })
1935
- ] })
1936
- ]
1937
- }
1938
- );
1939
- }
1940
- );
1941
- GuaranteeHighlight.displayName = "GuaranteeHighlight";
1942
- var ROICalculator = React34.forwardRef(
1943
- ({
1944
- eyebrow,
1945
- title,
1946
- items,
1947
- summary,
1948
- savingsCallout,
1949
- className,
1950
- ...props
1951
- }, ref) => {
1952
- return /* @__PURE__ */ jsxs("div", { ref, className: clsx27("ds-roi-calculator", className), ...props, children: [
1953
- (eyebrow || title) && /* @__PURE__ */ jsxs("div", { className: "ds-roi-calculator__header", children: [
1954
- eyebrow && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__eyebrow", children: eyebrow }),
1955
- title && /* @__PURE__ */ jsx("h3", { className: "ds-roi-calculator__title", children: title })
1956
- ] }),
1957
- /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__grid", children: items.map((item, idx) => /* @__PURE__ */ jsxs(
1958
- "div",
1959
- {
1960
- className: clsx27(
1961
- "ds-roi-calculator__item",
1962
- item.isRecommended && "ds-roi-calculator__item--recommended"
1963
- ),
1964
- children: [
1965
- item.isRecommended && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-badge", children: "Your Cost" }),
1966
- /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-label", children: item.label }),
1967
- /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-cost", children: item.monthlyCost }),
1968
- /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-annual", children: item.annualCost }),
1969
- item.context && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-context", children: item.context })
1970
- ]
1971
- },
1972
- idx
1973
- )) }),
1974
- savingsCallout && /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__savings", children: savingsCallout }),
1975
- summary && /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__summary", children: summary })
1976
- ] });
1977
- }
1978
- );
1979
- ROICalculator.displayName = "ROICalculator";
1980
- var ICPFilter = React34.forwardRef(
1981
- ({
1982
- qualifiedItems,
1983
- disqualifiedItems,
1984
- qualifiedHeading = "This Is For You If",
1985
- disqualifiedHeading = "This Is Not For You If",
1986
- variant = "columns",
1987
- className,
1988
- ...props
1989
- }, ref) => {
1990
- return /* @__PURE__ */ jsxs(
1991
- "div",
1992
- {
1993
- ref,
1994
- className: clsx27(
1995
- "ds-icp-filter",
1996
- `ds-icp-filter--${variant}`,
1997
- className
1998
- ),
1999
- ...props,
2000
- children: [
2001
- /* @__PURE__ */ jsxs("div", { className: "ds-icp-filter__column ds-icp-filter__column--qualified", children: [
2002
- /* @__PURE__ */ jsx("h4", { className: "ds-icp-filter__heading ds-icp-filter__heading--qualified", children: qualifiedHeading }),
2003
- /* @__PURE__ */ jsx("ul", { className: "ds-icp-filter__list", children: qualifiedItems.map((item, idx) => /* @__PURE__ */ jsxs("li", { className: "ds-icp-filter__item ds-icp-filter__item--qualified", children: [
2004
- /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
2005
- /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__text", children: item.text })
2006
- ] }, idx)) })
2007
- ] }),
2008
- /* @__PURE__ */ jsxs("div", { className: "ds-icp-filter__column ds-icp-filter__column--disqualified", children: [
2009
- /* @__PURE__ */ jsx("h4", { className: "ds-icp-filter__heading ds-icp-filter__heading--disqualified", children: disqualifiedHeading }),
2010
- /* @__PURE__ */ jsx("ul", { className: "ds-icp-filter__list", children: disqualifiedItems.map((item, idx) => /* @__PURE__ */ jsxs("li", { className: "ds-icp-filter__item ds-icp-filter__item--disqualified", children: [
2011
- /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
2012
- /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
2013
- /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
2014
- ] }) }),
2015
- /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__text", children: item.text })
2016
- ] }, idx)) })
2017
- ] })
2018
- ]
2019
- }
2020
- );
2021
- }
2022
- );
2023
- ICPFilter.displayName = "ICPFilter";
2024
- var ObjectionFAQ = React34.forwardRef(
2025
- ({
2026
- items,
2027
- title,
2028
- subtitle,
2029
- allowMultiple = false,
2030
- defaultOpenIndex,
2031
- className,
2032
- ...props
2033
- }, ref) => {
2034
- const [openItems, setOpenItems] = React34.useState(() => {
2035
- const initial = /* @__PURE__ */ new Set();
2036
- if (defaultOpenIndex !== void 0) initial.add(defaultOpenIndex);
2037
- return initial;
2038
- });
2039
- const toggle = React34.useCallback(
2040
- (index) => {
2041
- setOpenItems((prev) => {
2042
- const next = new Set(prev);
2043
- if (next.has(index)) {
2044
- next.delete(index);
2045
- } else {
2046
- if (!allowMultiple) next.clear();
2047
- next.add(index);
2048
- }
2049
- return next;
2050
- });
2051
- },
2052
- [allowMultiple]
2053
- );
2054
- return /* @__PURE__ */ jsxs("div", { ref, className: clsx27("ds-objection-faq", className), ...props, children: [
2055
- (title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "ds-objection-faq__header", children: [
2056
- title && /* @__PURE__ */ jsx("h3", { className: "ds-objection-faq__title", children: title }),
2057
- subtitle && /* @__PURE__ */ jsx("p", { className: "ds-objection-faq__subtitle", children: subtitle })
2058
- ] }),
2059
- /* @__PURE__ */ jsx("div", { className: "ds-objection-faq__list", role: "list", children: items.map((item, idx) => {
2060
- const isOpen = openItems.has(idx);
2061
- return /* @__PURE__ */ jsxs(
2062
- "div",
2063
- {
2064
- className: clsx27(
2065
- "ds-objection-faq__item",
2066
- isOpen && "ds-objection-faq__item--open"
2067
- ),
2068
- "data-state": isOpen ? "open" : "closed",
2069
- role: "listitem",
2070
- children: [
2071
- /* @__PURE__ */ jsxs(
2072
- "button",
2073
- {
2074
- type: "button",
2075
- className: "ds-objection-faq__trigger",
2076
- onClick: () => toggle(idx),
2077
- "aria-expanded": isOpen,
2078
- children: [
2079
- /* @__PURE__ */ jsxs("div", { className: "ds-objection-faq__trigger-content", children: [
2080
- item.tag && /* @__PURE__ */ jsx("span", { className: "ds-objection-faq__tag", children: item.tag }),
2081
- /* @__PURE__ */ jsx("span", { className: "ds-objection-faq__question", children: item.question })
2082
- ] }),
2083
- /* @__PURE__ */ jsx(
2084
- "svg",
2085
- {
2086
- className: "ds-objection-faq__chevron",
2087
- width: "16",
2088
- height: "16",
2089
- viewBox: "0 0 24 24",
2090
- fill: "none",
2091
- stroke: "currentColor",
2092
- strokeWidth: "2",
2093
- strokeLinecap: "round",
2094
- strokeLinejoin: "round",
2095
- "aria-hidden": "true",
2096
- children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" })
2097
- }
2098
- )
2099
- ]
2100
- }
2101
- ),
2102
- /* @__PURE__ */ jsx(
2103
- "div",
2104
- {
2105
- className: "ds-objection-faq__answer-wrapper",
2106
- hidden: !isOpen,
2107
- children: /* @__PURE__ */ jsx("p", { className: "ds-objection-faq__answer", children: item.answer })
2108
- }
2109
- )
2110
- ]
2111
- },
2112
- idx
2113
- );
2114
- }) })
2115
- ] });
2116
- }
2117
- );
2118
- ObjectionFAQ.displayName = "ObjectionFAQ";
2119
-
2120
- export { AnnouncementBar, ArchitectureDiagram, BeforeAfterBlock, BookingEmbed, CaseStudyCard, CaseStudySection, ComparisonTable, CompetitorDiff, ComplianceGrid, EcosystemDiagram, EnterpriseSignaling, EvolutionTimeline, ExitIntentOverlay, GuaranteeHighlight, ICPFilter, IntegrationShowcase, IntelligenceBlock, IntentCTA, LeadCaptureForm, ManifestoBlock, ObjectionFAQ, PartnerValueProp, PricingCard, PricingSection, PricingToggle, ProblemAgitation, ProcessTimeline, ROICalculator, SecurityBlock, SegmentSwitch, StakeholderTabs, StickyActionBar, ValueAnchor, VideoEmbed };
2121
- //# sourceMappingURL=out.js.map
2122
- //# sourceMappingURL=chunk-TW5JB35D.js.map