@salesmind-ai/design-system 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
  2. package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
  3. package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
  4. package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
  5. package/dist/admin/index.cjs +2928 -68
  6. package/dist/admin/index.cjs.map +1 -1
  7. package/dist/admin/index.js +2915 -5
  8. package/dist/admin/index.js.map +1 -1
  9. package/dist/blog/index.cjs +1064 -53
  10. package/dist/blog/index.cjs.map +1 -1
  11. package/dist/blog/index.d.cts +1 -1
  12. package/dist/blog/index.d.ts +1 -1
  13. package/dist/blog/index.js +1054 -8
  14. package/dist/blog/index.js.map +1 -1
  15. package/dist/charts/index.cjs +2694 -46
  16. package/dist/charts/index.cjs.map +1 -1
  17. package/dist/charts/index.js +2680 -3
  18. package/dist/charts/index.js.map +1 -1
  19. package/dist/core/index.cjs +4333 -807
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.js +4130 -14
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/i18n/index.cjs +558 -86
  24. package/dist/i18n/index.cjs.map +1 -1
  25. package/dist/i18n/index.js +544 -1
  26. package/dist/i18n/index.js.map +1 -1
  27. package/dist/index.cjs +17140 -1432
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.css +24 -13
  30. package/dist/index.css.map +1 -1
  31. package/dist/index.d.cts +2 -2
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +16785 -31
  34. package/dist/index.js.map +1 -1
  35. package/dist/marketing/index.cjs +3072 -142
  36. package/dist/marketing/index.cjs.map +1 -1
  37. package/dist/marketing/index.d.cts +1 -1
  38. package/dist/marketing/index.d.ts +1 -1
  39. package/dist/marketing/index.js +3042 -11
  40. package/dist/marketing/index.js.map +1 -1
  41. package/dist/motion/index.cjs +1222 -26
  42. package/dist/motion/index.cjs.map +1 -1
  43. package/dist/motion/index.js +1215 -2
  44. package/dist/motion/index.js.map +1 -1
  45. package/dist/nav/index.cjs +1518 -101
  46. package/dist/nav/index.cjs.map +1 -1
  47. package/dist/nav/index.css +24 -13
  48. package/dist/nav/index.css.map +1 -1
  49. package/dist/nav/index.js +1498 -4
  50. package/dist/nav/index.js.map +1 -1
  51. package/dist/report/index.cjs +2403 -171
  52. package/dist/report/index.cjs.map +1 -1
  53. package/dist/report/index.js +2363 -3
  54. package/dist/report/index.js.map +1 -1
  55. package/dist/sections/index.cjs +382 -28
  56. package/dist/sections/index.cjs.map +1 -1
  57. package/dist/sections/index.d.cts +15 -69
  58. package/dist/sections/index.d.ts +15 -69
  59. package/dist/sections/index.js +376 -4
  60. package/dist/sections/index.js.map +1 -1
  61. package/dist/social-proof/index.cjs +1250 -53
  62. package/dist/social-proof/index.cjs.map +1 -1
  63. package/dist/social-proof/index.d.cts +1 -1
  64. package/dist/social-proof/index.d.ts +1 -1
  65. package/dist/social-proof/index.js +1235 -6
  66. package/dist/social-proof/index.js.map +1 -1
  67. package/dist/theme/index.cjs +565 -38
  68. package/dist/theme/index.cjs.map +1 -1
  69. package/dist/theme/index.js +555 -2
  70. package/dist/theme/index.js.map +1 -1
  71. package/dist/web/client/index.cjs +491 -38
  72. package/dist/web/client/index.cjs.map +1 -1
  73. package/dist/web/client/index.js +483 -4
  74. package/dist/web/client/index.js.map +1 -1
  75. package/dist/web/index.cjs +1346 -158
  76. package/dist/web/index.cjs.map +1 -1
  77. package/dist/web/index.js +1305 -9
  78. package/dist/web/index.js.map +1 -1
  79. package/dist/web/server/index.cjs +563 -26
  80. package/dist/web/server/index.cjs.map +1 -1
  81. package/dist/web/server/index.js +560 -1
  82. package/dist/web/server/index.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-2GARWEJK.js +0 -17
  85. package/dist/chunk-2GARWEJK.js.map +0 -1
  86. package/dist/chunk-3NKRFUAR.js +0 -37
  87. package/dist/chunk-3NKRFUAR.js.map +0 -1
  88. package/dist/chunk-3TGSIILM.cjs +0 -201
  89. package/dist/chunk-3TGSIILM.cjs.map +0 -1
  90. package/dist/chunk-4GM5BGBN.cjs +0 -801
  91. package/dist/chunk-4GM5BGBN.cjs.map +0 -1
  92. package/dist/chunk-5LGDEZWY.cjs +0 -2434
  93. package/dist/chunk-5LGDEZWY.cjs.map +0 -1
  94. package/dist/chunk-6H4DSTXR.js +0 -786
  95. package/dist/chunk-6H4DSTXR.js.map +0 -1
  96. package/dist/chunk-6UNG76Y2.js +0 -153
  97. package/dist/chunk-6UNG76Y2.js.map +0 -1
  98. package/dist/chunk-7PX2AZ6Y.js +0 -39
  99. package/dist/chunk-7PX2AZ6Y.js.map +0 -1
  100. package/dist/chunk-B6AVAX4F.js +0 -1415
  101. package/dist/chunk-B6AVAX4F.js.map +0 -1
  102. package/dist/chunk-BILT5KD3.js +0 -264
  103. package/dist/chunk-BILT5KD3.js.map +0 -1
  104. package/dist/chunk-C2BCDNAV.js +0 -24
  105. package/dist/chunk-C2BCDNAV.js.map +0 -1
  106. package/dist/chunk-CH42VPWE.cjs +0 -421
  107. package/dist/chunk-CH42VPWE.cjs.map +0 -1
  108. package/dist/chunk-CJ2MKVAF.cjs +0 -46
  109. package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
  110. package/dist/chunk-DP74LUXG.cjs +0 -98
  111. package/dist/chunk-DP74LUXG.cjs.map +0 -1
  112. package/dist/chunk-E7D6EKJ4.cjs +0 -44
  113. package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
  114. package/dist/chunk-ECXBTUH6.cjs +0 -584
  115. package/dist/chunk-ECXBTUH6.cjs.map +0 -1
  116. package/dist/chunk-EFRAP5ES.js +0 -157
  117. package/dist/chunk-EFRAP5ES.js.map +0 -1
  118. package/dist/chunk-F6YYWMME.js +0 -485
  119. package/dist/chunk-F6YYWMME.js.map +0 -1
  120. package/dist/chunk-FAFAP4L5.js +0 -183
  121. package/dist/chunk-FAFAP4L5.js.map +0 -1
  122. package/dist/chunk-GUZIMHWS.js +0 -1608
  123. package/dist/chunk-GUZIMHWS.js.map +0 -1
  124. package/dist/chunk-H2Y6BSTL.cjs +0 -69
  125. package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
  126. package/dist/chunk-HN4PHABT.js +0 -126
  127. package/dist/chunk-HN4PHABT.js.map +0 -1
  128. package/dist/chunk-HRENHNDJ.js +0 -211
  129. package/dist/chunk-HRENHNDJ.js.map +0 -1
  130. package/dist/chunk-I75BFEYT.cjs +0 -2561
  131. package/dist/chunk-I75BFEYT.cjs.map +0 -1
  132. package/dist/chunk-IFRATNLU.js +0 -562
  133. package/dist/chunk-IFRATNLU.js.map +0 -1
  134. package/dist/chunk-IYPXJ6YC.cjs +0 -69
  135. package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
  136. package/dist/chunk-JPJN4YBC.js +0 -409
  137. package/dist/chunk-JPJN4YBC.js.map +0 -1
  138. package/dist/chunk-KBA2LFBG.js +0 -62
  139. package/dist/chunk-KBA2LFBG.js.map +0 -1
  140. package/dist/chunk-KCKUSU2M.cjs +0 -166
  141. package/dist/chunk-KCKUSU2M.cjs.map +0 -1
  142. package/dist/chunk-KJ2OXQF4.js +0 -287
  143. package/dist/chunk-KJ2OXQF4.js.map +0 -1
  144. package/dist/chunk-KNQEIU7O.cjs +0 -1202
  145. package/dist/chunk-KNQEIU7O.cjs.map +0 -1
  146. package/dist/chunk-KVGSVGRK.cjs +0 -569
  147. package/dist/chunk-KVGSVGRK.cjs.map +0 -1
  148. package/dist/chunk-L352JRV6.cjs +0 -105
  149. package/dist/chunk-L352JRV6.cjs.map +0 -1
  150. package/dist/chunk-LJADZITX.cjs +0 -298
  151. package/dist/chunk-LJADZITX.cjs.map +0 -1
  152. package/dist/chunk-LMJPWXTZ.cjs +0 -194
  153. package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
  154. package/dist/chunk-LOWEAQST.js +0 -701
  155. package/dist/chunk-LOWEAQST.js.map +0 -1
  156. package/dist/chunk-MDB2WCRQ.cjs +0 -137
  157. package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
  158. package/dist/chunk-MQDEE7HC.cjs +0 -283
  159. package/dist/chunk-MQDEE7HC.cjs.map +0 -1
  160. package/dist/chunk-MQRB634A.cjs +0 -34
  161. package/dist/chunk-MQRB634A.cjs.map +0 -1
  162. package/dist/chunk-MTI27RDV.js +0 -185
  163. package/dist/chunk-MTI27RDV.js.map +0 -1
  164. package/dist/chunk-MU6GW5ZV.js +0 -2317
  165. package/dist/chunk-MU6GW5ZV.js.map +0 -1
  166. package/dist/chunk-NN3TUHIH.js +0 -28
  167. package/dist/chunk-NN3TUHIH.js.map +0 -1
  168. package/dist/chunk-NT4LBP7D.cjs +0 -111
  169. package/dist/chunk-NT4LBP7D.cjs.map +0 -1
  170. package/dist/chunk-OLV7OD3X.cjs +0 -502
  171. package/dist/chunk-OLV7OD3X.cjs.map +0 -1
  172. package/dist/chunk-OXNXEQY7.js +0 -2538
  173. package/dist/chunk-OXNXEQY7.js.map +0 -1
  174. package/dist/chunk-P5BOFE5A.js +0 -546
  175. package/dist/chunk-P5BOFE5A.js.map +0 -1
  176. package/dist/chunk-Q2MFGYTE.cjs +0 -1449
  177. package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
  178. package/dist/chunk-Q75DBVDY.cjs +0 -68
  179. package/dist/chunk-Q75DBVDY.cjs.map +0 -1
  180. package/dist/chunk-REQ5Q6ZI.js +0 -1022
  181. package/dist/chunk-REQ5Q6ZI.js.map +0 -1
  182. package/dist/chunk-SICKWUWB.js +0 -62
  183. package/dist/chunk-SICKWUWB.js.map +0 -1
  184. package/dist/chunk-T343CCH5.js +0 -1190
  185. package/dist/chunk-T343CCH5.js.map +0 -1
  186. package/dist/chunk-TEC62D4A.cjs +0 -1624
  187. package/dist/chunk-TEC62D4A.cjs.map +0 -1
  188. package/dist/chunk-TW5JB35D.js +0 -2122
  189. package/dist/chunk-TW5JB35D.js.map +0 -1
  190. package/dist/chunk-VC5LMUVQ.cjs +0 -20
  191. package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
  192. package/dist/chunk-VM7WFMKI.cjs +0 -76
  193. package/dist/chunk-VM7WFMKI.cjs.map +0 -1
  194. package/dist/chunk-W2WTP6HS.cjs +0 -233
  195. package/dist/chunk-W2WTP6HS.cjs.map +0 -1
  196. package/dist/chunk-WH7PYHZY.cjs +0 -35
  197. package/dist/chunk-WH7PYHZY.cjs.map +0 -1
  198. package/dist/chunk-XQZVY7JJ.cjs +0 -717
  199. package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
  200. package/dist/chunk-XU3OMQ7V.js +0 -98
  201. package/dist/chunk-XU3OMQ7V.js.map +0 -1
  202. package/dist/chunk-XWPDRMZG.js +0 -62
  203. package/dist/chunk-XWPDRMZG.js.map +0 -1
  204. package/dist/chunk-Y3CPKNB7.js +0 -67
  205. package/dist/chunk-Y3CPKNB7.js.map +0 -1
  206. package/dist/chunk-YNVRDD2P.js +0 -98
  207. package/dist/chunk-YNVRDD2P.js.map +0 -1
  208. package/dist/chunk-YSYR54XR.js +0 -92
  209. package/dist/chunk-YSYR54XR.js.map +0 -1
  210. package/dist/chunk-YTYDQBVY.cjs +0 -162
  211. package/dist/chunk-YTYDQBVY.cjs.map +0 -1
  212. package/dist/chunk-ZDLOA2UT.cjs +0 -1042
  213. package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
  214. package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
  215. package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
@@ -1,13 +1,3044 @@
1
- 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 } from '../chunk-TW5JB35D.js';
2
- import '../chunk-HRENHNDJ.js';
3
- import '../chunk-3NKRFUAR.js';
4
- import '../chunk-SICKWUWB.js';
5
- import '../chunk-YSYR54XR.js';
6
- import '../chunk-XWPDRMZG.js';
7
- import '../chunk-2GARWEJK.js';
8
- import '../chunk-Y3CPKNB7.js';
9
- import '../chunk-KBA2LFBG.js';
10
- import '../chunk-KJ2OXQF4.js';
11
- import '../chunk-HN4PHABT.js';
1
+ import React31, { forwardRef, createContext, useState, useEffect, useRef, useCallback, useMemo, useContext } from 'react';
2
+ import clsx14 from 'clsx';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import { Slot } from '@radix-ui/react-slot';
5
+ import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
6
+ import { Input } from '@base-ui/react/input';
7
+ import { ArrowRight, X, Check } from 'lucide-react';
8
+ import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
9
+
10
+ // src/components/PricingCard/PricingCard.tsx
11
+ var PricingCard = React31.forwardRef(
12
+ ({
13
+ tier,
14
+ tagline,
15
+ price,
16
+ priceSuffix,
17
+ anchorPrice,
18
+ badge,
19
+ highlighted = false,
20
+ features = [],
21
+ cta,
22
+ secondaryCta,
23
+ footerNote,
24
+ className,
25
+ children,
26
+ ...props
27
+ }, ref) => {
28
+ return /* @__PURE__ */ jsxs(
29
+ "div",
30
+ {
31
+ ref,
32
+ className: clsx14(
33
+ "ds-pricing-card",
34
+ highlighted && "ds-pricing-card--highlighted",
35
+ className
36
+ ),
37
+ ...props,
38
+ children: [
39
+ badge && /* @__PURE__ */ jsx("div", { className: "ds-pricing-card__badge", children: badge }),
40
+ /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__header", children: [
41
+ /* @__PURE__ */ jsx("h3", { className: "ds-pricing-card__tier", children: tier }),
42
+ tagline && /* @__PURE__ */ jsx("p", { className: "ds-pricing-card__tagline", children: tagline })
43
+ ] }),
44
+ /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__price-block", children: [
45
+ anchorPrice && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__anchor-price", children: anchorPrice }),
46
+ /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__price-row", children: [
47
+ /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__price", children: price }),
48
+ priceSuffix && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__price-suffix", children: priceSuffix })
49
+ ] })
50
+ ] }),
51
+ features.length > 0 && /* @__PURE__ */ jsx("ul", { className: "ds-pricing-card__features", children: features.map((feature, idx) => /* @__PURE__ */ jsxs(
52
+ "li",
53
+ {
54
+ className: clsx14(
55
+ "ds-pricing-card__feature",
56
+ feature.included === false && "ds-pricing-card__feature--excluded"
57
+ ),
58
+ children: [
59
+ /* @__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: [
60
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
61
+ /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
62
+ ] }) : /* @__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" }) }) }),
63
+ /* @__PURE__ */ jsxs("span", { className: "ds-pricing-card__feature-text", children: [
64
+ feature.text,
65
+ feature.detail && /* @__PURE__ */ jsx("span", { className: "ds-pricing-card__feature-detail", children: feature.detail })
66
+ ] })
67
+ ]
68
+ },
69
+ idx
70
+ )) }),
71
+ (cta || secondaryCta) && /* @__PURE__ */ jsxs("div", { className: "ds-pricing-card__cta-area", children: [
72
+ cta,
73
+ secondaryCta && /* @__PURE__ */ jsx("div", { className: "ds-pricing-card__secondary-cta", children: secondaryCta })
74
+ ] }),
75
+ footerNote && /* @__PURE__ */ jsx("p", { className: "ds-pricing-card__footer-note", children: footerNote }),
76
+ children
77
+ ]
78
+ }
79
+ );
80
+ }
81
+ );
82
+ PricingCard.displayName = "PricingCard";
83
+ var PricingSection = forwardRef(
84
+ ({
85
+ title,
86
+ description,
87
+ plans,
88
+ toggle,
89
+ className,
90
+ ...props
91
+ }, ref) => {
92
+ return /* @__PURE__ */ jsxs(
93
+ "section",
94
+ {
95
+ ref,
96
+ className: clsx14("ds-pricing-section", className),
97
+ ...props,
98
+ children: [
99
+ /* @__PURE__ */ jsxs("div", { className: "ds-pricing-section__header", children: [
100
+ /* @__PURE__ */ jsx("h2", { className: "ds-pricing-section__title", children: title }),
101
+ description && /* @__PURE__ */ jsx("p", { className: "ds-pricing-section__description", children: description }),
102
+ toggle && /* @__PURE__ */ jsx("div", { className: "ds-pricing-section__toggle", children: toggle })
103
+ ] }),
104
+ /* @__PURE__ */ jsx("div", { className: "ds-pricing-section__grid", children: plans.map((plan, index) => /* @__PURE__ */ jsx(
105
+ PricingCard,
106
+ {
107
+ ...plan,
108
+ className: clsx14(
109
+ "ds-pricing-section__card",
110
+ plan.highlighted && "ds-pricing-section__card--popular"
111
+ )
112
+ },
113
+ index
114
+ )) })
115
+ ]
116
+ }
117
+ );
118
+ }
119
+ );
120
+ PricingSection.displayName = "PricingSection";
121
+ var ToggleGroupContext = React31.createContext({
122
+ type: "single",
123
+ value: [],
124
+ onItemToggle: () => {
125
+ }
126
+ });
127
+ var ToggleGroup = React31.forwardRef(
128
+ ({ className, type, value, onValueChange, children, ...props }, ref) => {
129
+ const normalizedValue = React31.useMemo(() => {
130
+ if (value === void 0) return [];
131
+ return Array.isArray(value) ? value : [value];
132
+ }, [value]);
133
+ const onItemToggle = React31.useCallback(
134
+ (itemValue) => {
135
+ if (type === "single") {
136
+ const next = normalizedValue.includes(itemValue) ? "" : itemValue;
137
+ onValueChange?.(next);
138
+ } else {
139
+ const next = normalizedValue.includes(itemValue) ? normalizedValue.filter((v) => v !== itemValue) : [...normalizedValue, itemValue];
140
+ onValueChange?.(next);
141
+ }
142
+ },
143
+ [type, normalizedValue, onValueChange]
144
+ );
145
+ const ctx = React31.useMemo(
146
+ () => ({ type, value: normalizedValue, onItemToggle }),
147
+ [type, normalizedValue, onItemToggle]
148
+ );
149
+ return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
150
+ "div",
151
+ {
152
+ ref,
153
+ role: "group",
154
+ className: clsx14("ds-toggle-group", className),
155
+ ...props,
156
+ children
157
+ }
158
+ ) });
159
+ }
160
+ );
161
+ ToggleGroup.displayName = "ToggleGroup";
162
+ var ToggleGroupItem = React31.forwardRef(({ className, value, children, onClick, ...props }, ref) => {
163
+ const ctx = React31.useContext(ToggleGroupContext);
164
+ const pressed = ctx.value.includes(value);
165
+ const handleClick = (e) => {
166
+ ctx.onItemToggle(value);
167
+ onClick?.(e);
168
+ };
169
+ return /* @__PURE__ */ jsx(
170
+ "button",
171
+ {
172
+ ref,
173
+ type: "button",
174
+ "aria-pressed": pressed,
175
+ className: clsx14(
176
+ "ds-toggle-group__item",
177
+ pressed && "ds-toggle-group__item--pressed",
178
+ className
179
+ ),
180
+ onClick: handleClick,
181
+ ...props,
182
+ children
183
+ }
184
+ );
185
+ });
186
+ ToggleGroupItem.displayName = "ToggleGroupItem";
187
+ var Badge = React31.forwardRef(
188
+ ({ className, variant = "default", ...props }, ref) => {
189
+ return /* @__PURE__ */ jsx(
190
+ "span",
191
+ {
192
+ ref,
193
+ className: clsx14("ds-badge", `ds-badge--${variant}`, className),
194
+ ...props
195
+ }
196
+ );
197
+ }
198
+ );
199
+ Badge.displayName = "Badge";
200
+ var PricingToggle = forwardRef(
201
+ ({
202
+ value,
203
+ onChange,
204
+ monthlyLabel = "Monthly",
205
+ annualLabel = "Annual",
206
+ savingsBadge,
207
+ className,
208
+ ...props
209
+ }, ref) => {
210
+ return /* @__PURE__ */ jsxs(
211
+ "div",
212
+ {
213
+ ref,
214
+ className: clsx14("ds-pricing-toggle", className),
215
+ ...props,
216
+ children: [
217
+ /* @__PURE__ */ jsxs(
218
+ ToggleGroup,
219
+ {
220
+ type: "single",
221
+ value,
222
+ onValueChange: (v) => {
223
+ if (v && typeof v === "string") {
224
+ onChange(v);
225
+ }
226
+ },
227
+ children: [
228
+ /* @__PURE__ */ jsx(ToggleGroupItem, { value: "monthly", children: monthlyLabel }),
229
+ /* @__PURE__ */ jsx(ToggleGroupItem, { value: "annual", children: annualLabel })
230
+ ]
231
+ }
232
+ ),
233
+ savingsBadge && /* @__PURE__ */ jsx(Badge, { className: "ds-pricing-toggle__badge", children: savingsBadge })
234
+ ]
235
+ }
236
+ );
237
+ }
238
+ );
239
+ PricingToggle.displayName = "PricingToggle";
240
+ var ComparisonTable = React31.forwardRef(
241
+ ({ columns, rows, caption, className, ...props }, ref) => {
242
+ return /* @__PURE__ */ jsx("div", { ref, className: clsx14("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: [
243
+ caption && /* @__PURE__ */ jsx("caption", { className: "ds-comparison-table__caption", children: caption }),
244
+ /* @__PURE__ */ jsx("thead", { className: "ds-comparison-table__head", children: /* @__PURE__ */ jsxs("tr", { children: [
245
+ /* @__PURE__ */ jsx("th", { className: "ds-comparison-table__corner", scope: "col", children: /* @__PURE__ */ jsx("span", { className: "ds-visually-hidden", children: "Feature" }) }),
246
+ columns.map((col, idx) => /* @__PURE__ */ jsxs(
247
+ "th",
248
+ {
249
+ scope: "col",
250
+ className: clsx14(
251
+ "ds-comparison-table__col-header",
252
+ col.highlighted && "ds-comparison-table__col-header--highlighted"
253
+ ),
254
+ children: [
255
+ col.badge && /* @__PURE__ */ jsx("span", { className: "ds-comparison-table__col-badge", children: col.badge }),
256
+ /* @__PURE__ */ jsx("span", { className: "ds-comparison-table__col-label", children: col.label })
257
+ ]
258
+ },
259
+ idx
260
+ ))
261
+ ] }) }),
262
+ /* @__PURE__ */ jsx("tbody", { className: "ds-comparison-table__body", children: rows.map(
263
+ (row, rowIdx) => row.isCategory ? /* @__PURE__ */ jsx("tr", { className: "ds-comparison-table__category-row", children: /* @__PURE__ */ jsx(
264
+ "td",
265
+ {
266
+ colSpan: columns.length + 1,
267
+ className: "ds-comparison-table__category",
268
+ children: row.label
269
+ }
270
+ ) }, rowIdx) : /* @__PURE__ */ jsxs("tr", { className: "ds-comparison-table__row", children: [
271
+ /* @__PURE__ */ jsx("td", { className: "ds-comparison-table__row-label", children: row.label }),
272
+ row.values.map((val, colIdx) => /* @__PURE__ */ jsx(
273
+ "td",
274
+ {
275
+ className: clsx14(
276
+ "ds-comparison-table__cell",
277
+ columns[colIdx]?.highlighted && "ds-comparison-table__cell--highlighted"
278
+ ),
279
+ children: val
280
+ },
281
+ colIdx
282
+ ))
283
+ ] }, rowIdx)
284
+ ) })
285
+ ] }) }) });
286
+ }
287
+ );
288
+ ComparisonTable.displayName = "ComparisonTable";
289
+ var ROICalculator = React31.forwardRef(
290
+ ({
291
+ eyebrow,
292
+ title,
293
+ items,
294
+ summary,
295
+ savingsCallout,
296
+ className,
297
+ ...props
298
+ }, ref) => {
299
+ return /* @__PURE__ */ jsxs("div", { ref, className: clsx14("ds-roi-calculator", className), ...props, children: [
300
+ (eyebrow || title) && /* @__PURE__ */ jsxs("div", { className: "ds-roi-calculator__header", children: [
301
+ eyebrow && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__eyebrow", children: eyebrow }),
302
+ title && /* @__PURE__ */ jsx("h3", { className: "ds-roi-calculator__title", children: title })
303
+ ] }),
304
+ /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__grid", children: items.map((item, idx) => /* @__PURE__ */ jsxs(
305
+ "div",
306
+ {
307
+ className: clsx14(
308
+ "ds-roi-calculator__item",
309
+ item.isRecommended && "ds-roi-calculator__item--recommended"
310
+ ),
311
+ children: [
312
+ item.isRecommended && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-badge", children: "Your Cost" }),
313
+ /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-label", children: item.label }),
314
+ /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-cost", children: item.monthlyCost }),
315
+ /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-annual", children: item.annualCost }),
316
+ item.context && /* @__PURE__ */ jsx("span", { className: "ds-roi-calculator__item-context", children: item.context })
317
+ ]
318
+ },
319
+ idx
320
+ )) }),
321
+ savingsCallout && /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__savings", children: savingsCallout }),
322
+ summary && /* @__PURE__ */ jsx("div", { className: "ds-roi-calculator__summary", children: summary })
323
+ ] });
324
+ }
325
+ );
326
+ ROICalculator.displayName = "ROICalculator";
327
+ var GuaranteeHighlight = React31.forwardRef(
328
+ ({
329
+ guarantee,
330
+ detail,
331
+ finePrint,
332
+ variant = "default",
333
+ icon,
334
+ className,
335
+ ...props
336
+ }, ref) => {
337
+ return /* @__PURE__ */ jsxs(
338
+ "div",
339
+ {
340
+ ref,
341
+ className: clsx14(
342
+ "ds-guarantee",
343
+ `ds-guarantee--${variant}`,
344
+ className
345
+ ),
346
+ ...props,
347
+ children: [
348
+ icon && /* @__PURE__ */ jsx("div", { className: "ds-guarantee__icon", children: icon }),
349
+ /* @__PURE__ */ jsxs("div", { className: "ds-guarantee__content", children: [
350
+ /* @__PURE__ */ jsx("p", { className: "ds-guarantee__statement", children: guarantee }),
351
+ detail && /* @__PURE__ */ jsx("p", { className: "ds-guarantee__detail", children: detail }),
352
+ finePrint && /* @__PURE__ */ jsx("p", { className: "ds-guarantee__fine-print", children: finePrint })
353
+ ] })
354
+ ]
355
+ }
356
+ );
357
+ }
358
+ );
359
+ GuaranteeHighlight.displayName = "GuaranteeHighlight";
360
+ var ICPFilter = React31.forwardRef(
361
+ ({
362
+ qualifiedItems,
363
+ disqualifiedItems,
364
+ qualifiedHeading = "This Is For You If",
365
+ disqualifiedHeading = "This Is Not For You If",
366
+ variant = "columns",
367
+ className,
368
+ ...props
369
+ }, ref) => {
370
+ return /* @__PURE__ */ jsxs(
371
+ "div",
372
+ {
373
+ ref,
374
+ className: clsx14(
375
+ "ds-icp-filter",
376
+ `ds-icp-filter--${variant}`,
377
+ className
378
+ ),
379
+ ...props,
380
+ children: [
381
+ /* @__PURE__ */ jsxs("div", { className: "ds-icp-filter__column ds-icp-filter__column--qualified", children: [
382
+ /* @__PURE__ */ jsx("h4", { className: "ds-icp-filter__heading ds-icp-filter__heading--qualified", children: qualifiedHeading }),
383
+ /* @__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: [
384
+ /* @__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" }) }) }),
385
+ /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__text", children: item.text })
386
+ ] }, idx)) })
387
+ ] }),
388
+ /* @__PURE__ */ jsxs("div", { className: "ds-icp-filter__column ds-icp-filter__column--disqualified", children: [
389
+ /* @__PURE__ */ jsx("h4", { className: "ds-icp-filter__heading ds-icp-filter__heading--disqualified", children: disqualifiedHeading }),
390
+ /* @__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: [
391
+ /* @__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: [
392
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
393
+ /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
394
+ ] }) }),
395
+ /* @__PURE__ */ jsx("span", { className: "ds-icp-filter__text", children: item.text })
396
+ ] }, idx)) })
397
+ ] })
398
+ ]
399
+ }
400
+ );
401
+ }
402
+ );
403
+ ICPFilter.displayName = "ICPFilter";
404
+ var ObjectionFAQ = React31.forwardRef(
405
+ ({
406
+ items,
407
+ title,
408
+ subtitle,
409
+ allowMultiple = false,
410
+ defaultOpenIndex,
411
+ className,
412
+ ...props
413
+ }, ref) => {
414
+ const [openItems, setOpenItems] = React31.useState(() => {
415
+ const initial = /* @__PURE__ */ new Set();
416
+ if (defaultOpenIndex !== void 0) initial.add(defaultOpenIndex);
417
+ return initial;
418
+ });
419
+ const toggle = React31.useCallback(
420
+ (index) => {
421
+ setOpenItems((prev) => {
422
+ const next = new Set(prev);
423
+ if (next.has(index)) {
424
+ next.delete(index);
425
+ } else {
426
+ if (!allowMultiple) next.clear();
427
+ next.add(index);
428
+ }
429
+ return next;
430
+ });
431
+ },
432
+ [allowMultiple]
433
+ );
434
+ return /* @__PURE__ */ jsxs("div", { ref, className: clsx14("ds-objection-faq", className), ...props, children: [
435
+ (title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "ds-objection-faq__header", children: [
436
+ title && /* @__PURE__ */ jsx("h3", { className: "ds-objection-faq__title", children: title }),
437
+ subtitle && /* @__PURE__ */ jsx("p", { className: "ds-objection-faq__subtitle", children: subtitle })
438
+ ] }),
439
+ /* @__PURE__ */ jsx("div", { className: "ds-objection-faq__list", role: "list", children: items.map((item, idx) => {
440
+ const isOpen = openItems.has(idx);
441
+ return /* @__PURE__ */ jsxs(
442
+ "div",
443
+ {
444
+ className: clsx14(
445
+ "ds-objection-faq__item",
446
+ isOpen && "ds-objection-faq__item--open"
447
+ ),
448
+ "data-state": isOpen ? "open" : "closed",
449
+ role: "listitem",
450
+ children: [
451
+ /* @__PURE__ */ jsxs(
452
+ "button",
453
+ {
454
+ type: "button",
455
+ className: "ds-objection-faq__trigger",
456
+ onClick: () => toggle(idx),
457
+ "aria-expanded": isOpen,
458
+ children: [
459
+ /* @__PURE__ */ jsxs("div", { className: "ds-objection-faq__trigger-content", children: [
460
+ item.tag && /* @__PURE__ */ jsx("span", { className: "ds-objection-faq__tag", children: item.tag }),
461
+ /* @__PURE__ */ jsx("span", { className: "ds-objection-faq__question", children: item.question })
462
+ ] }),
463
+ /* @__PURE__ */ jsx(
464
+ "svg",
465
+ {
466
+ className: "ds-objection-faq__chevron",
467
+ width: "16",
468
+ height: "16",
469
+ viewBox: "0 0 24 24",
470
+ fill: "none",
471
+ stroke: "currentColor",
472
+ strokeWidth: "2",
473
+ strokeLinecap: "round",
474
+ strokeLinejoin: "round",
475
+ "aria-hidden": "true",
476
+ children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" })
477
+ }
478
+ )
479
+ ]
480
+ }
481
+ ),
482
+ /* @__PURE__ */ jsx(
483
+ "div",
484
+ {
485
+ className: "ds-objection-faq__answer-wrapper",
486
+ hidden: !isOpen,
487
+ children: /* @__PURE__ */ jsx("p", { className: "ds-objection-faq__answer", children: item.answer })
488
+ }
489
+ )
490
+ ]
491
+ },
492
+ idx
493
+ );
494
+ }) })
495
+ ] });
496
+ }
497
+ );
498
+ ObjectionFAQ.displayName = "ObjectionFAQ";
499
+ var Button = React31.forwardRef(
500
+ ({ className, variant = "primary", size = "md", asChild = false, isLoading = false, children, disabled, ...props }, ref) => {
501
+ const buttonClass = clsx14(
502
+ "ds-button",
503
+ `ds-button--${variant}`,
504
+ size === "icon" ? "ds-button--icon ds-button--md" : `ds-button--${size}`,
505
+ isLoading && "ds-button--loading",
506
+ className
507
+ );
508
+ if (asChild) {
509
+ return /* @__PURE__ */ jsx(
510
+ Slot,
511
+ {
512
+ ref,
513
+ "aria-disabled": isLoading || disabled || void 0,
514
+ className: buttonClass,
515
+ ...props,
516
+ children
517
+ }
518
+ );
519
+ }
520
+ return /* @__PURE__ */ jsxs(
521
+ "button",
522
+ {
523
+ ref,
524
+ disabled: isLoading || disabled,
525
+ className: buttonClass,
526
+ ...props,
527
+ children: [
528
+ isLoading && /* @__PURE__ */ jsx(
529
+ "svg",
530
+ {
531
+ className: "ds-button__spinner",
532
+ xmlns: "http://www.w3.org/2000/svg",
533
+ width: "1em",
534
+ height: "1em",
535
+ viewBox: "0 0 24 24",
536
+ fill: "none",
537
+ stroke: "currentColor",
538
+ strokeWidth: "2",
539
+ strokeLinecap: "round",
540
+ strokeLinejoin: "round",
541
+ children: /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
542
+ }
543
+ ),
544
+ /* @__PURE__ */ jsx("span", { className: clsx14("ds-button__content", isLoading && "ds-button__content--hidden"), children })
545
+ ]
546
+ }
547
+ );
548
+ }
549
+ );
550
+ Button.displayName = "Button";
551
+ var UtmContext = createContext(null);
552
+
553
+ // src/web/utm/useUtmDefaults.ts
554
+ function useUtmDefaults() {
555
+ return useContext(UtmContext);
556
+ }
557
+
558
+ // src/web/utm/builders.ts
559
+ var PLACEHOLDER_ORIGIN = "https://__placeholder__.internal";
560
+ function buildUtmUrl(baseUrl, params) {
561
+ const isRelative = baseUrl.startsWith("/");
562
+ let url;
563
+ try {
564
+ url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);
565
+ } catch {
566
+ return baseUrl;
567
+ }
568
+ const existingParams = [];
569
+ url.searchParams.forEach((value, key) => {
570
+ existingParams.push([key, value]);
571
+ });
572
+ for (const [key] of existingParams) {
573
+ url.searchParams.delete(key);
574
+ }
575
+ for (const [key, value] of existingParams) {
576
+ if (!key.startsWith("utm_")) {
577
+ url.searchParams.set(key, value);
578
+ }
579
+ }
580
+ url.searchParams.set("utm_source", params.source);
581
+ url.searchParams.set("utm_medium", params.medium);
582
+ url.searchParams.set("utm_campaign", params.campaign);
583
+ if (params.term !== void 0) {
584
+ url.searchParams.set("utm_term", params.term);
585
+ }
586
+ if (params.content !== void 0) {
587
+ url.searchParams.set("utm_content", params.content);
588
+ }
589
+ if (isRelative) {
590
+ return url.href.replace(PLACEHOLDER_ORIGIN, "");
591
+ }
592
+ return url.href;
593
+ }
594
+
595
+ // src/web/utm/classifiers.ts
596
+ var INTERNAL_PATTERNS = [
597
+ /^\/(?!\/)/,
598
+ // Relative paths
599
+ /^https?:\/\/(www\.)?sales-mind\.ai/i,
600
+ // Marketing site
601
+ /^https?:\/\/app\.sales-mind\.ai/i,
602
+ // Web app
603
+ /^https?:\/\/apps\.sales-mind\.ai/i,
604
+ // Web app (legacy)
605
+ /^https?:\/\/meet\.sales-mind\.ai/i,
606
+ // Booking
607
+ /^https?:\/\/docs\.sales-mind\.ai/i
608
+ // Docs
609
+ ];
610
+ var SYSTEM_PATTERNS = [
611
+ /^https?:\/\/.*\/api\//i,
612
+ // API endpoints
613
+ /^https?:\/\/.*\/webhook/i,
614
+ // Webhooks
615
+ /^https?:\/\/.*\/oauth/i,
616
+ // OAuth callbacks
617
+ /^https?:\/\/.*\/callback/i,
618
+ // Callbacks
619
+ /^https?:\/\/.*\.supabase\.(co|com)/i,
620
+ // Supabase
621
+ /^https?:\/\/.*\.firebaseapp\.com/i,
622
+ // Firebase
623
+ /^https?:\/\/.*\.cloudfunctions\.net/i
624
+ // Cloud Functions
625
+ ];
626
+ var ASSET_PATTERNS = [
627
+ /\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\?.*)?$/i
628
+ ];
629
+ var CONVERSION_PATTERNS = [
630
+ /^https?:\/\/(www\.)?calendly\.com/i,
631
+ /^https?:\/\/(checkout\.)?stripe\.com/i,
632
+ /^https?:\/\/buy\.stripe\.com/i,
633
+ /^https?:\/\/chromewebstore\.google\.com/i,
634
+ /^https?:\/\/meet\.sales-mind\.ai/i
635
+ ];
636
+ var PROTOCOL_EXEMPT = [
637
+ /^mailto:/i,
638
+ /^tel:/i,
639
+ /^#/,
640
+ /^javascript:/i
641
+ ];
642
+ function classifyUrl(url) {
643
+ if (PROTOCOL_EXEMPT.some((p) => p.test(url))) return "protocol";
644
+ if (ASSET_PATTERNS.some((p) => p.test(url))) return "asset";
645
+ if (SYSTEM_PATTERNS.some((p) => p.test(url))) return "system";
646
+ if (CONVERSION_PATTERNS.some((p) => p.test(url))) return "conversion";
647
+ if (INTERNAL_PATTERNS.some((p) => p.test(url))) return "internal";
648
+ return "external";
649
+ }
650
+
651
+ // src/components/OutboundLink/outbound-link-utils.ts
652
+ var LEGACY_UTM_SOURCE = "salesmind";
653
+ var EXEMPT_PATTERNS = [
654
+ /^https?:\/\/(www\.)?(stripe\.com|checkout\.stripe\.com|paypal\.com)/i,
655
+ /^https?:\/\/(www\.)?github\.com\/login\/oauth/i
656
+ ];
657
+ var isExemptUrl = (urlStr) => {
658
+ if (urlStr.startsWith("mailto:") || urlStr.startsWith("tel:")) return true;
659
+ const classification = classifyUrl(urlStr);
660
+ if (classification === "system" || classification === "protocol" || classification === "asset") {
661
+ return true;
662
+ }
663
+ return EXEMPT_PATTERNS.some((pattern) => pattern.test(urlStr));
664
+ };
665
+ var appendGovernedUTMs = (href, params, preserveExisting = true) => {
666
+ try {
667
+ const url = new URL(href);
668
+ if (preserveExisting) {
669
+ const hasAll = url.searchParams.has("utm_source") && url.searchParams.has("utm_medium") && url.searchParams.has("utm_campaign");
670
+ if (hasAll) return href;
671
+ }
672
+ return buildUtmUrl(href, params);
673
+ } catch {
674
+ return href;
675
+ }
676
+ };
677
+ var appendUTMs = (href, context, pageSlug, options) => {
678
+ try {
679
+ const url = new URL(href);
680
+ const { mediumOverride = "outbound_link", campaignOverride, preserveExisting = true } = options;
681
+ const utms = {
682
+ utm_source: LEGACY_UTM_SOURCE,
683
+ utm_medium: mediumOverride,
684
+ utm_campaign: campaignOverride || pageSlug,
685
+ utm_content: context
686
+ };
687
+ Object.entries(utms).forEach(([key, value]) => {
688
+ if (value) {
689
+ if (preserveExisting && url.searchParams.has(key)) {
690
+ return;
691
+ }
692
+ url.searchParams.set(key, value);
693
+ }
694
+ });
695
+ return url.toString();
696
+ } catch {
697
+ return href;
698
+ }
699
+ };
700
+ var OutboundLink = forwardRef(
701
+ ({
702
+ href,
703
+ context,
704
+ campaignOverride,
705
+ mediumOverride = "outbound_link",
706
+ preserveExistingUTM = true,
707
+ openInNewTab = true,
708
+ disableTracking = false,
709
+ utmParams,
710
+ onClick,
711
+ children,
712
+ ...props
713
+ }, ref) => {
714
+ const contextParams = useUtmDefaults();
715
+ const resolvedUtmParams = utmParams ?? contextParams;
716
+ let hostname = "";
717
+ try {
718
+ const url = new URL(href);
719
+ hostname = url.hostname;
720
+ } catch {
721
+ }
722
+ const [finalHref, setFinalHref] = useState(href);
723
+ useEffect(() => {
724
+ let isExternal = false;
725
+ let currentMedium = mediumOverride;
726
+ try {
727
+ const url = new URL(href);
728
+ const currentHost = window.location.hostname;
729
+ isExternal = url.hostname !== currentHost;
730
+ if (isExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
731
+ if (currentMedium === "outbound_link") {
732
+ currentMedium = "cross_subdomain";
733
+ }
734
+ }
735
+ } catch {
736
+ isExternal = false;
737
+ }
738
+ const isExempt = isExemptUrl(href) || disableTracking;
739
+ if (isExternal && !isExempt) {
740
+ if (resolvedUtmParams) {
741
+ setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));
742
+ } else {
743
+ const pageSlug = window.location.pathname.replace(/^\/|\/$/g, "") || "home";
744
+ setFinalHref(appendUTMs(href, context, pageSlug, {
745
+ mediumOverride: currentMedium,
746
+ campaignOverride,
747
+ preserveExisting: preserveExistingUTM
748
+ }));
749
+ }
750
+ } else {
751
+ setFinalHref(href);
752
+ }
753
+ }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);
754
+ const handleClick = (e) => {
755
+ if (typeof window === "undefined" || disableTracking) {
756
+ onClick?.(e);
757
+ return;
758
+ }
759
+ let clickExternal = false;
760
+ let clickCrossSubdomain = false;
761
+ let clickMedium = mediumOverride;
762
+ try {
763
+ const url = new URL(href);
764
+ const currentHost = window.location.hostname;
765
+ clickExternal = url.hostname !== currentHost;
766
+ if (clickExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
767
+ clickCrossSubdomain = true;
768
+ if (clickMedium === "outbound_link") {
769
+ clickMedium = "cross_subdomain";
770
+ }
771
+ }
772
+ } catch {
773
+ }
774
+ if (clickExternal) {
775
+ const detail = {
776
+ destination_domain: hostname,
777
+ destination_url: finalHref,
778
+ utm_medium_type: clickMedium,
779
+ page_slug: window.location.pathname,
780
+ component_location: context,
781
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
782
+ is_cross_subdomain: clickCrossSubdomain
783
+ };
784
+ const event = new CustomEvent("outbound_click", { detail });
785
+ window.dispatchEvent(event);
786
+ }
787
+ onClick?.(e);
788
+ };
789
+ const relParts = [];
790
+ let shouldOpenNewTab = openInNewTab;
791
+ try {
792
+ const url = new URL(href);
793
+ if (typeof window !== "undefined") {
794
+ const currentHost = window.location.hostname;
795
+ if (url.hostname !== currentHost && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
796
+ shouldOpenNewTab = false;
797
+ }
798
+ }
799
+ } catch {
800
+ }
801
+ if (shouldOpenNewTab) relParts.push("noopener", "noreferrer");
802
+ if (mediumOverride === "citation") relParts.push("nofollow");
803
+ const rel = relParts.length > 0 ? relParts.join(" ") : void 0;
804
+ return (
805
+ // eslint-disable-next-line no-restricted-syntax
806
+ /* @__PURE__ */ jsx(
807
+ "a",
808
+ {
809
+ ref,
810
+ href: finalHref,
811
+ target: shouldOpenNewTab ? "_blank" : void 0,
812
+ rel,
813
+ onClick: handleClick,
814
+ ...props,
815
+ children
816
+ }
817
+ )
818
+ );
819
+ }
820
+ );
821
+ OutboundLink.displayName = "OutboundLink";
822
+ var IntentCTA = forwardRef(
823
+ ({
824
+ stages,
825
+ defaultCta,
826
+ pageCount = 0,
827
+ className,
828
+ ...props
829
+ }, ref) => {
830
+ const [activeStageIndex, setActiveStageIndex] = useState(-1);
831
+ const timeRef = useRef(0);
832
+ const timerRef = useRef(null);
833
+ const pageCountRef = useRef(pageCount);
834
+ useEffect(() => {
835
+ pageCountRef.current = pageCount;
836
+ }, [pageCount]);
837
+ useEffect(() => {
838
+ if (typeof window === "undefined") return;
839
+ timerRef.current = setInterval(() => {
840
+ timeRef.current += 1;
841
+ checkStages();
842
+ }, 1e3);
843
+ const handleScroll = () => {
844
+ checkStages();
845
+ };
846
+ window.addEventListener("scroll", handleScroll, { passive: true });
847
+ function checkStages() {
848
+ const scrollPercent = typeof document !== "undefined" ? Math.round(
849
+ window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) * 100
850
+ ) : 0;
851
+ let highestTriggered = -1;
852
+ for (let i = 0; i < stages.length; i++) {
853
+ const stage = stages[i];
854
+ let triggered = false;
855
+ switch (stage.trigger.type) {
856
+ case "scroll":
857
+ triggered = scrollPercent >= stage.trigger.threshold;
858
+ break;
859
+ case "time":
860
+ triggered = timeRef.current >= stage.trigger.threshold;
861
+ break;
862
+ case "pages":
863
+ triggered = pageCountRef.current >= stage.trigger.threshold;
864
+ break;
865
+ }
866
+ if (triggered) highestTriggered = i;
867
+ }
868
+ setActiveStageIndex((prev) => Math.max(prev, highestTriggered));
869
+ }
870
+ checkStages();
871
+ return () => {
872
+ window.removeEventListener("scroll", handleScroll);
873
+ if (timerRef.current) clearInterval(timerRef.current);
874
+ };
875
+ }, [stages]);
876
+ const activeCta = activeStageIndex >= 0 ? stages[activeStageIndex] : defaultCta;
877
+ return /* @__PURE__ */ jsx(
878
+ "div",
879
+ {
880
+ ref,
881
+ className: clsx14("ds-intent-cta", className),
882
+ ...props,
883
+ children: /* @__PURE__ */ jsx(
884
+ Button,
885
+ {
886
+ variant: activeCta.variant ?? "primary",
887
+ asChild: true,
888
+ children: /* @__PURE__ */ jsx(OutboundLink, { href: activeCta.href, context: "intent-cta", openInNewTab: false, children: activeCta.label })
889
+ }
890
+ )
891
+ }
892
+ );
893
+ }
894
+ );
895
+ IntentCTA.displayName = "IntentCTA";
896
+ var AnalyticsContext = createContext(null);
897
+
898
+ // src/web/analytics/use-analytics.tsx
899
+ var NOOP_VALUE = {
900
+ track: () => {
901
+ }
902
+ };
903
+ function useAnalytics() {
904
+ return useContext(AnalyticsContext) ?? NOOP_VALUE;
905
+ }
906
+ var StickyActionBar = forwardRef(
907
+ ({
908
+ message,
909
+ primaryAction,
910
+ secondaryAction,
911
+ showThreshold = 300,
912
+ position = "bottom",
913
+ variant = "glass",
914
+ className,
915
+ ...props
916
+ }, ref) => {
917
+ const [isVisible, setIsVisible] = useState(false);
918
+ const { track } = useAnalytics();
919
+ useEffect(() => {
920
+ const handleScroll = () => {
921
+ const shouldShow = window.scrollY > showThreshold;
922
+ if (shouldShow && !isVisible) {
923
+ setIsVisible(true);
924
+ track("sticky_bar_show");
925
+ } else if (!shouldShow && isVisible) {
926
+ setIsVisible(false);
927
+ }
928
+ };
929
+ window.addEventListener("scroll", handleScroll, { passive: true });
930
+ handleScroll();
931
+ return () => window.removeEventListener("scroll", handleScroll);
932
+ }, [showThreshold, isVisible, track]);
933
+ if (!isVisible) return null;
934
+ return /* @__PURE__ */ jsx(
935
+ "div",
936
+ {
937
+ ref,
938
+ className: clsx14(
939
+ "ds-sticky-action-bar",
940
+ `ds-sticky-action-bar--${position}`,
941
+ `ds-sticky-action-bar--${variant}`,
942
+ className
943
+ ),
944
+ ...props,
945
+ children: /* @__PURE__ */ jsxs("div", { className: "ds-sticky-action-bar__container", children: [
946
+ /* @__PURE__ */ jsx("div", { className: "ds-sticky-action-bar__content", children: message }),
947
+ /* @__PURE__ */ jsxs("div", { className: "ds-sticky-action-bar__actions", children: [
948
+ secondaryAction,
949
+ primaryAction
950
+ ] })
951
+ ] })
952
+ }
953
+ );
954
+ }
955
+ );
956
+ StickyActionBar.displayName = "StickyActionBar";
957
+ var Dialog = Dialog$1.Root;
958
+ Dialog$1.Trigger;
959
+ Dialog$1.Close;
960
+ var DialogTitle = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$1.Title, { ref, className: clsx14("ds-dialog__title", className), ...props }));
961
+ DialogTitle.displayName = "DialogTitle";
962
+ var DialogDescription = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
963
+ Dialog$1.Description,
964
+ {
965
+ ref,
966
+ className: clsx14("ds-dialog__description", className),
967
+ ...props
968
+ }
969
+ ));
970
+ DialogDescription.displayName = "DialogDescription";
971
+ var DialogContent = React31.forwardRef(
972
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [
973
+ /* @__PURE__ */ jsx(Dialog$1.Backdrop, { className: "ds-dialog__backdrop" }),
974
+ /* @__PURE__ */ jsx(Dialog$1.Popup, { ref, className: clsx14("ds-dialog__content", className), ...props, children })
975
+ ] })
976
+ );
977
+ DialogContent.displayName = "DialogContent";
978
+ var DialogHeader = React31.forwardRef(
979
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: clsx14("ds-dialog__header", className), ...props })
980
+ );
981
+ DialogHeader.displayName = "DialogHeader";
982
+ var DialogFooter = React31.forwardRef(
983
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: clsx14("ds-dialog__footer", className), ...props })
984
+ );
985
+ DialogFooter.displayName = "DialogFooter";
986
+ var DEFAULT_SUPPRESSION = 7 * 24 * 60 * 60 * 1e3;
987
+ var DEFAULT_ACTIVATION_DELAY = 5e3;
988
+ var MOBILE_INACTIVITY_TIMEOUT = 45e3;
989
+ function isSuppressed(key, duration) {
990
+ if (typeof window === "undefined") return true;
991
+ try {
992
+ const ts = localStorage.getItem(key);
993
+ if (!ts) return false;
994
+ return Date.now() - Number(ts) < duration;
995
+ } catch {
996
+ return false;
997
+ }
998
+ }
999
+ function suppress(key) {
1000
+ try {
1001
+ localStorage.setItem(key, String(Date.now()));
1002
+ } catch {
1003
+ }
1004
+ }
1005
+ function isMobile() {
1006
+ if (typeof window === "undefined") return false;
1007
+ return window.matchMedia("(max-width: 768px)").matches || "ontouchstart" in window;
1008
+ }
1009
+ var ExitIntentOverlay = forwardRef(
1010
+ ({
1011
+ children,
1012
+ enabled = true,
1013
+ activationDelay = DEFAULT_ACTIVATION_DELAY,
1014
+ excludePaths,
1015
+ storageKey = "ds-exit-intent",
1016
+ suppressionDuration = DEFAULT_SUPPRESSION,
1017
+ onShow,
1018
+ onDismiss,
1019
+ className,
1020
+ ...props
1021
+ }, ref) => {
1022
+ const [open, setOpen] = useState(false);
1023
+ const activatedRef = useRef(false);
1024
+ const shownRef = useRef(false);
1025
+ const show = useCallback(() => {
1026
+ if (shownRef.current) return;
1027
+ shownRef.current = true;
1028
+ setOpen(true);
1029
+ onShow?.();
1030
+ }, [onShow]);
1031
+ const handleDismiss = useCallback(() => {
1032
+ setOpen(false);
1033
+ suppress(storageKey);
1034
+ onDismiss?.();
1035
+ }, [storageKey, onDismiss]);
1036
+ useEffect(() => {
1037
+ if (!enabled) return;
1038
+ if (typeof window === "undefined") return;
1039
+ if (excludePaths?.some((p) => window.location.pathname.startsWith(p))) return;
1040
+ if (isSuppressed(storageKey, suppressionDuration)) return;
1041
+ const activationTimer = setTimeout(() => {
1042
+ activatedRef.current = true;
1043
+ }, activationDelay);
1044
+ const handleMouseOut = (e) => {
1045
+ if (!activatedRef.current) return;
1046
+ if (e.clientY < 10 && e.relatedTarget === null) {
1047
+ show();
1048
+ }
1049
+ };
1050
+ let mobileTimer = null;
1051
+ const resetMobileTimer = () => {
1052
+ if (mobileTimer) clearTimeout(mobileTimer);
1053
+ if (!activatedRef.current) return;
1054
+ mobileTimer = setTimeout(show, MOBILE_INACTIVITY_TIMEOUT);
1055
+ };
1056
+ if (isMobile()) {
1057
+ const mobileStart = setTimeout(() => {
1058
+ resetMobileTimer();
1059
+ document.addEventListener("touchstart", resetMobileTimer, { passive: true });
1060
+ document.addEventListener("scroll", resetMobileTimer, { passive: true });
1061
+ }, activationDelay);
1062
+ return () => {
1063
+ clearTimeout(activationTimer);
1064
+ clearTimeout(mobileStart);
1065
+ if (mobileTimer) clearTimeout(mobileTimer);
1066
+ document.removeEventListener("touchstart", resetMobileTimer);
1067
+ document.removeEventListener("scroll", resetMobileTimer);
1068
+ };
1069
+ }
1070
+ document.addEventListener("mouseout", handleMouseOut);
1071
+ return () => {
1072
+ clearTimeout(activationTimer);
1073
+ document.removeEventListener("mouseout", handleMouseOut);
1074
+ };
1075
+ }, [enabled, activationDelay, excludePaths, storageKey, suppressionDuration, show]);
1076
+ return /* @__PURE__ */ jsx("div", { ref, className: clsx14("ds-exit-intent-overlay", className), ...props, children: /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (isOpen) => {
1077
+ if (!isOpen) handleDismiss();
1078
+ }, children: /* @__PURE__ */ jsx(DialogContent, { className: "ds-exit-intent-overlay__dialog", children }) }) });
1079
+ }
1080
+ );
1081
+ ExitIntentOverlay.displayName = "ExitIntentOverlay";
1082
+ var TextField = React31.forwardRef(
1083
+ ({ className, label, error, helperText, endAdornment, id, ...props }, ref) => {
1084
+ const generatedId = React31.useId();
1085
+ const inputId = id || generatedId;
1086
+ return /* @__PURE__ */ jsxs("div", { className: clsx14("ds-textfield", className), children: [
1087
+ label && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "ds-textfield__label", children: label }),
1088
+ /* @__PURE__ */ jsxs("div", { className: "ds-textfield__input-wrapper", children: [
1089
+ /* @__PURE__ */ jsx(
1090
+ Input,
1091
+ {
1092
+ id: inputId,
1093
+ ref,
1094
+ className: clsx14(
1095
+ "ds-textfield__input",
1096
+ error && "ds-textfield__input--error",
1097
+ endAdornment && "ds-textfield__input--adorned"
1098
+ ),
1099
+ ...props
1100
+ }
1101
+ ),
1102
+ endAdornment && /* @__PURE__ */ jsx("div", { className: "ds-textfield__adornment", children: endAdornment })
1103
+ ] }),
1104
+ helperText && /* @__PURE__ */ jsx("span", { className: clsx14("ds-textfield__helper", error && "ds-textfield__helper--error"), children: helperText })
1105
+ ] });
1106
+ }
1107
+ );
1108
+ TextField.displayName = "TextField";
1109
+ var LeadCaptureForm = forwardRef(
1110
+ ({
1111
+ buttonText = "Subscribe",
1112
+ emailLabel = "Work Email",
1113
+ emailPlaceholder = "you@company.com",
1114
+ disclaimer,
1115
+ onSubmitSuccess,
1116
+ layout = "horizontal",
1117
+ isLoading = false,
1118
+ className,
1119
+ onSubmit,
1120
+ ...props
1121
+ }, ref) => {
1122
+ const [email, setEmail] = useState("");
1123
+ const [error, setError] = useState();
1124
+ const [internalLoading, setInternalLoading] = useState(false);
1125
+ const { track } = useAnalytics();
1126
+ const isCurrentlyLoading = isLoading || internalLoading;
1127
+ const handleSubmit = async (e) => {
1128
+ e.preventDefault();
1129
+ if (!email) {
1130
+ setError("Email is required");
1131
+ return;
1132
+ }
1133
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
1134
+ setError("Please enter a valid email address");
1135
+ return;
1136
+ }
1137
+ setError(void 0);
1138
+ setInternalLoading(true);
1139
+ track("lead_capture_submit", { email_domain: email.split("@")[1] });
1140
+ try {
1141
+ if (onSubmitSuccess) {
1142
+ await onSubmitSuccess(email);
1143
+ }
1144
+ track("lead_capture_success");
1145
+ } catch (err) {
1146
+ setError("Something went wrong. Please try again.");
1147
+ track("lead_capture_error", { error: String(err) });
1148
+ } finally {
1149
+ setInternalLoading(false);
1150
+ }
1151
+ if (onSubmit) {
1152
+ onSubmit(e);
1153
+ }
1154
+ };
1155
+ return /* @__PURE__ */ jsxs(
1156
+ "form",
1157
+ {
1158
+ ref,
1159
+ className: clsx14(
1160
+ "ds-lead-capture",
1161
+ `ds-lead-capture--${layout}`,
1162
+ className
1163
+ ),
1164
+ onSubmit: handleSubmit,
1165
+ noValidate: true,
1166
+ ...props,
1167
+ children: [
1168
+ /* @__PURE__ */ jsxs("div", { className: "ds-lead-capture__inputs", children: [
1169
+ /* @__PURE__ */ jsxs("div", { className: "ds-lead-capture__input-wrapper", children: [
1170
+ layout === "vertical" && /* @__PURE__ */ jsx("label", { htmlFor: "lead-email", className: "ds-lead-capture__label", children: emailLabel }),
1171
+ /* @__PURE__ */ jsx(
1172
+ TextField,
1173
+ {
1174
+ id: "lead-email",
1175
+ type: "email",
1176
+ value: email,
1177
+ onChange: (e) => setEmail(e.target.value),
1178
+ placeholder: emailPlaceholder,
1179
+ disabled: isCurrentlyLoading,
1180
+ "aria-label": layout === "horizontal" ? emailLabel : void 0,
1181
+ className: clsx14("ds-lead-capture__input", error && "ds-lead-capture__input--error")
1182
+ }
1183
+ ),
1184
+ error && /* @__PURE__ */ jsx("div", { className: "ds-lead-capture__error", children: error })
1185
+ ] }),
1186
+ /* @__PURE__ */ jsx(
1187
+ Button,
1188
+ {
1189
+ type: "submit",
1190
+ isLoading: isCurrentlyLoading,
1191
+ className: "ds-lead-capture__submit",
1192
+ children: buttonText
1193
+ }
1194
+ )
1195
+ ] }),
1196
+ disclaimer && /* @__PURE__ */ jsx("div", { className: "ds-lead-capture__disclaimer", children: disclaimer })
1197
+ ]
1198
+ }
1199
+ );
1200
+ }
1201
+ );
1202
+ LeadCaptureForm.displayName = "LeadCaptureForm";
1203
+ var BookingEmbed = forwardRef(
1204
+ ({
1205
+ url,
1206
+ aspectRatio = "16/9",
1207
+ title = "Book a call",
1208
+ lazyLoad = true,
1209
+ className,
1210
+ style,
1211
+ ...props
1212
+ }, ref) => {
1213
+ const [isLoaded, setIsLoaded] = useState(!lazyLoad);
1214
+ const [isIframeLoaded, setIsIframeLoaded] = useState(false);
1215
+ const containerRef = useRef(null);
1216
+ const { track } = useAnalytics();
1217
+ useEffect(() => {
1218
+ if (!lazyLoad) return;
1219
+ const observer = new IntersectionObserver(
1220
+ (entries) => {
1221
+ if (entries[0].isIntersecting) {
1222
+ setIsLoaded(true);
1223
+ track("booking_embed_visible", { url });
1224
+ observer.disconnect();
1225
+ }
1226
+ },
1227
+ { rootMargin: "200px" }
1228
+ );
1229
+ if (containerRef.current) {
1230
+ observer.observe(containerRef.current);
1231
+ }
1232
+ return () => observer.disconnect();
1233
+ }, [lazyLoad, url, track]);
1234
+ const handleIframeLoad = () => {
1235
+ setIsIframeLoaded(true);
1236
+ track("booking_embed_loaded", { url });
1237
+ };
1238
+ return /* @__PURE__ */ jsxs(
1239
+ "div",
1240
+ {
1241
+ ref: (node) => {
1242
+ containerRef.current = node;
1243
+ if (typeof ref === "function") ref(node);
1244
+ else if (ref) ref.current = node;
1245
+ },
1246
+ className: clsx14("ds-booking-embed", className),
1247
+ style: { "--embed-aspect-ratio": aspectRatio, ...style },
1248
+ ...props,
1249
+ children: [
1250
+ !isIframeLoaded && /* @__PURE__ */ jsxs("div", { className: "ds-booking-embed__skeleton", children: [
1251
+ /* @__PURE__ */ jsx("div", { className: "ds-booking-embed__spinner" }),
1252
+ /* @__PURE__ */ jsx("p", { children: "Loading calendar..." })
1253
+ ] }),
1254
+ isLoaded && /* @__PURE__ */ jsx(
1255
+ "iframe",
1256
+ {
1257
+ src: url,
1258
+ title,
1259
+ className: clsx14("ds-booking-embed__iframe", isIframeLoaded && "ds-booking-embed__iframe--loaded"),
1260
+ onLoad: handleIframeLoad,
1261
+ frameBorder: "0",
1262
+ scrolling: "no"
1263
+ }
1264
+ )
1265
+ ]
1266
+ }
1267
+ );
1268
+ }
1269
+ );
1270
+ BookingEmbed.displayName = "BookingEmbed";
1271
+
1272
+ // src/tokens/spacing.ts
1273
+ var SPACING = {
1274
+ 1: "var(--space-1)",
1275
+ 2: "var(--space-2)",
1276
+ 3: "var(--space-3)",
1277
+ 4: "var(--space-4)",
1278
+ 5: "var(--space-5)",
1279
+ 6: "var(--space-6)",
1280
+ 8: "var(--space-8)",
1281
+ 10: "var(--space-10)",
1282
+ 12: "var(--space-12)",
1283
+ 16: "var(--space-16)",
1284
+ 20: "var(--space-20)"
1285
+ };
1286
+
1287
+ // src/components/LayoutPrimitives/utils.ts
1288
+ var SPACING_ALIASES = {
1289
+ xs: "var(--space-2)",
1290
+ sm: "var(--space-3)",
1291
+ md: "var(--space-4)",
1292
+ lg: "var(--space-6)",
1293
+ xl: "var(--space-8)",
1294
+ "2xl": "var(--space-12)"
1295
+ };
1296
+ function resolveSpacing(value) {
1297
+ if (value === void 0) return void 0;
1298
+ if (typeof value === "number" && SPACING[value]) {
1299
+ return SPACING[value];
1300
+ }
1301
+ if (typeof value === "string" && value in SPACING_ALIASES) {
1302
+ return SPACING_ALIASES[value];
1303
+ }
1304
+ return String(value);
1305
+ }
1306
+ function extractSpacingStyles(props) {
1307
+ const styles = {};
1308
+ if (props.m !== void 0) styles.margin = resolveSpacing(props.m);
1309
+ if (props.mt !== void 0) styles.marginTop = resolveSpacing(props.mt);
1310
+ if (props.mb !== void 0) styles.marginBottom = resolveSpacing(props.mb);
1311
+ if (props.ml !== void 0) styles.marginLeft = resolveSpacing(props.ml);
1312
+ if (props.mr !== void 0) styles.marginRight = resolveSpacing(props.mr);
1313
+ if (props.mx !== void 0) {
1314
+ styles.marginLeft = resolveSpacing(props.mx);
1315
+ styles.marginRight = resolveSpacing(props.mx);
1316
+ }
1317
+ if (props.my !== void 0) {
1318
+ styles.marginTop = resolveSpacing(props.my);
1319
+ styles.marginBottom = resolveSpacing(props.my);
1320
+ }
1321
+ if (props.p !== void 0) styles.padding = resolveSpacing(props.p);
1322
+ if (props.pt !== void 0) styles.paddingTop = resolveSpacing(props.pt);
1323
+ if (props.pb !== void 0) styles.paddingBottom = resolveSpacing(props.pb);
1324
+ if (props.pl !== void 0) styles.paddingLeft = resolveSpacing(props.pl);
1325
+ if (props.pr !== void 0) styles.paddingRight = resolveSpacing(props.pr);
1326
+ if (props.px !== void 0) {
1327
+ styles.paddingLeft = resolveSpacing(props.px);
1328
+ styles.paddingRight = resolveSpacing(props.px);
1329
+ }
1330
+ if (props.py !== void 0) {
1331
+ styles.paddingTop = resolveSpacing(props.py);
1332
+ styles.paddingBottom = resolveSpacing(props.py);
1333
+ }
1334
+ if (props.gap !== void 0) styles.gap = resolveSpacing(props.gap);
1335
+ return styles;
1336
+ }
1337
+ var Box = forwardRef(
1338
+ ({ as: Component = "div", className, style, children, ...props }, ref) => {
1339
+ const spacingStyles = extractSpacingStyles(props);
1340
+ const { m, mt, mb, ml, mr, mx, my, p, pt, pb, pl, pr, px, py, gap, ...domProps } = props;
1341
+ return /* @__PURE__ */ jsx(
1342
+ Component,
1343
+ {
1344
+ ref,
1345
+ className: clsx14("ds-box", className),
1346
+ style: { ...spacingStyles, ...style },
1347
+ ...domProps,
1348
+ children
1349
+ }
1350
+ );
1351
+ }
1352
+ );
1353
+ Box.displayName = "Box";
1354
+ var CONTAINER_SIZE_MAP = {
1355
+ sm: "768px",
1356
+ // 48rem — max-w-3xl
1357
+ md: "1024px",
1358
+ // 64rem — max-w-5xl
1359
+ lg: "1152px",
1360
+ // 72rem — max-w-6xl
1361
+ xl: "1280px",
1362
+ // 80rem — max-w-7xl
1363
+ full: "100%"
1364
+ };
1365
+ var Container = forwardRef(
1366
+ ({ size, fluid, maxWidth, className, style, ...props }, ref) => {
1367
+ let resolvedMaxWidth;
1368
+ if (fluid) {
1369
+ resolvedMaxWidth = "100%";
1370
+ } else if (size) {
1371
+ resolvedMaxWidth = CONTAINER_SIZE_MAP[size];
1372
+ } else {
1373
+ resolvedMaxWidth = maxWidth || "var(--container-default-max, 1200px)";
1374
+ }
1375
+ return /* @__PURE__ */ jsx(
1376
+ Box,
1377
+ {
1378
+ ref,
1379
+ className: clsx14("ds-container", className),
1380
+ style: {
1381
+ maxWidth: resolvedMaxWidth,
1382
+ ...style
1383
+ },
1384
+ ...props
1385
+ }
1386
+ );
1387
+ }
1388
+ );
1389
+ Container.displayName = "Container";
1390
+ var SectionHeader = forwardRef(
1391
+ ({ title, subtitle, eyebrow, align = "center", className, ...props }, ref) => {
1392
+ if (!title && !subtitle && !eyebrow) return null;
1393
+ return /* @__PURE__ */ jsxs(
1394
+ "header",
1395
+ {
1396
+ ref,
1397
+ className: clsx14("ds-section-header", `ds-section-header--${align}`, className),
1398
+ ...props,
1399
+ children: [
1400
+ eyebrow && /* @__PURE__ */ jsx("span", { className: "ds-section-header__eyebrow", children: eyebrow }),
1401
+ title && /* @__PURE__ */ jsx("h2", { className: "ds-section-header__title", children: title }),
1402
+ subtitle && /* @__PURE__ */ jsx("p", { className: "ds-section-header__subtitle", children: subtitle })
1403
+ ]
1404
+ }
1405
+ );
1406
+ }
1407
+ );
1408
+ SectionHeader.displayName = "SectionHeader";
1409
+ var SectionShell = forwardRef(
1410
+ ({
1411
+ className,
1412
+ children,
1413
+ background = "default",
1414
+ padding = "md",
1415
+ containerSize,
1416
+ containerFluid = false,
1417
+ ...props
1418
+ }, ref) => {
1419
+ return /* @__PURE__ */ jsx(
1420
+ "section",
1421
+ {
1422
+ ref,
1423
+ className: clsx14(
1424
+ "ds-section",
1425
+ `ds-section--bg-${background}`,
1426
+ `ds-section--padding-${padding}`,
1427
+ className
1428
+ ),
1429
+ ...props,
1430
+ children: /* @__PURE__ */ jsx(
1431
+ Container,
1432
+ {
1433
+ size: containerSize === "fluid" ? "full" : containerSize,
1434
+ fluid: containerFluid || containerSize === "fluid",
1435
+ children
1436
+ }
1437
+ )
1438
+ }
1439
+ );
1440
+ }
1441
+ );
1442
+ SectionShell.displayName = "SectionShell";
1443
+ var CompetitorDiff = forwardRef(
1444
+ ({
1445
+ eyebrow,
1446
+ title,
1447
+ subtitle,
1448
+ items,
1449
+ competitorLabel = "Others",
1450
+ ourLabel = "SalesMind AI",
1451
+ variant = "table",
1452
+ cta,
1453
+ className,
1454
+ ...props
1455
+ }, ref) => {
1456
+ return /* @__PURE__ */ jsxs(
1457
+ SectionShell,
1458
+ {
1459
+ ref,
1460
+ className: clsx14("ds-competitor-diff", className),
1461
+ ...props,
1462
+ children: [
1463
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1464
+ variant === "table" && /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__table", role: "table", "aria-label": "Feature comparison", children: [
1465
+ /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__thead", role: "row", children: [
1466
+ /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th", role: "columnheader" }),
1467
+ /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th ds-competitor-diff__th--them", role: "columnheader", children: competitorLabel }),
1468
+ /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__th ds-competitor-diff__th--us", role: "columnheader", children: ourLabel })
1469
+ ] }),
1470
+ items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__row", role: "row", children: [
1471
+ /* @__PURE__ */ jsx("div", { className: "ds-competitor-diff__dimension", role: "rowheader", children: item.dimension }),
1472
+ /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cell ds-competitor-diff__cell--them", role: "cell", children: [
1473
+ /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__icon", "aria-hidden": "true", children: "\u2717" }),
1474
+ item.them
1475
+ ] }),
1476
+ /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cell ds-competitor-diff__cell--us", role: "cell", children: [
1477
+ /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__icon", "aria-hidden": "true", children: "\u2713" }),
1478
+ item.us
1479
+ ] })
1480
+ ] }, i))
1481
+ ] }),
1482
+ variant === "cards" && /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__cards", children: [
1483
+ /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__card ds-competitor-diff__card--them", children: [
1484
+ /* @__PURE__ */ jsx("h3", { className: "ds-competitor-diff__card-label", children: competitorLabel }),
1485
+ /* @__PURE__ */ jsx("ul", { className: "ds-competitor-diff__card-list", children: items.map((item, i) => /* @__PURE__ */ jsxs("li", { children: [
1486
+ /* @__PURE__ */ jsxs("strong", { children: [
1487
+ item.dimension,
1488
+ ":"
1489
+ ] }),
1490
+ " ",
1491
+ item.them
1492
+ ] }, i)) })
1493
+ ] }),
1494
+ /* @__PURE__ */ jsxs("div", { className: "ds-competitor-diff__card ds-competitor-diff__card--us", children: [
1495
+ /* @__PURE__ */ jsx("h3", { className: "ds-competitor-diff__card-label", children: ourLabel }),
1496
+ /* @__PURE__ */ jsx("ul", { className: "ds-competitor-diff__card-list", children: items.map((item, i) => /* @__PURE__ */ jsxs("li", { children: [
1497
+ /* @__PURE__ */ jsxs("strong", { children: [
1498
+ item.dimension,
1499
+ ":"
1500
+ ] }),
1501
+ " ",
1502
+ item.us
1503
+ ] }, i)) })
1504
+ ] })
1505
+ ] }),
1506
+ 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: [
1507
+ /* @__PURE__ */ jsxs("p", { className: "ds-competitor-diff__narrative-them", children: [
1508
+ /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__narrative-label", children: "Instead of" }),
1509
+ " ",
1510
+ item.them
1511
+ ] }),
1512
+ /* @__PURE__ */ jsxs("p", { className: "ds-competitor-diff__narrative-us", children: [
1513
+ /* @__PURE__ */ jsx("span", { className: "ds-competitor-diff__narrative-label", children: ourLabel }),
1514
+ " ",
1515
+ item.us
1516
+ ] })
1517
+ ] }, i)) }),
1518
+ 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 }) }) })
1519
+ ]
1520
+ }
1521
+ );
1522
+ }
1523
+ );
1524
+ CompetitorDiff.displayName = "CompetitorDiff";
1525
+ var BeforeAfterBlock = forwardRef(
1526
+ ({
1527
+ eyebrow,
1528
+ title,
1529
+ before,
1530
+ after,
1531
+ variant = "split",
1532
+ className,
1533
+ ...props
1534
+ }, ref) => {
1535
+ const renderItems = (items, side) => items.map((item, i) => /* @__PURE__ */ jsxs(
1536
+ "li",
1537
+ {
1538
+ className: clsx14(
1539
+ "ds-before-after__item",
1540
+ item.sentiment && `ds-before-after__item--${item.sentiment}`
1541
+ ),
1542
+ children: [
1543
+ /* @__PURE__ */ jsx("span", { className: "ds-before-after__item-icon", "aria-hidden": "true", children: side === "before" ? "\u2717" : "\u2713" }),
1544
+ /* @__PURE__ */ jsx("span", { children: item.text })
1545
+ ]
1546
+ },
1547
+ i
1548
+ ));
1549
+ return /* @__PURE__ */ jsxs(
1550
+ SectionShell,
1551
+ {
1552
+ ref,
1553
+ className: clsx14("ds-before-after", className),
1554
+ ...props,
1555
+ children: [
1556
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title }),
1557
+ /* @__PURE__ */ jsxs("div", { className: clsx14("ds-before-after__layout", `ds-before-after__layout--${variant}`), children: [
1558
+ /* @__PURE__ */ jsxs("div", { className: "ds-before-after__column ds-before-after__column--before", children: [
1559
+ /* @__PURE__ */ jsx("h3", { className: "ds-before-after__label", children: before.label }),
1560
+ /* @__PURE__ */ jsx("ul", { className: "ds-before-after__list", children: renderItems(before.items, "before") }),
1561
+ before.media && /* @__PURE__ */ jsx("div", { className: "ds-before-after__media", children: before.media })
1562
+ ] }),
1563
+ variant === "split" && /* @__PURE__ */ jsx("div", { className: "ds-before-after__divider", "aria-hidden": "true", children: /* @__PURE__ */ jsx("span", { className: "ds-before-after__arrow", children: "\u2192" }) }),
1564
+ /* @__PURE__ */ jsxs("div", { className: "ds-before-after__column ds-before-after__column--after", children: [
1565
+ /* @__PURE__ */ jsx("h3", { className: "ds-before-after__label", children: after.label }),
1566
+ /* @__PURE__ */ jsx("ul", { className: "ds-before-after__list", children: renderItems(after.items, "after") }),
1567
+ after.media && /* @__PURE__ */ jsx("div", { className: "ds-before-after__media", children: after.media })
1568
+ ] })
1569
+ ] })
1570
+ ]
1571
+ }
1572
+ );
1573
+ }
1574
+ );
1575
+ BeforeAfterBlock.displayName = "BeforeAfterBlock";
1576
+ var Slider = React31.forwardRef(
1577
+ ({
1578
+ className,
1579
+ value: controlledValue,
1580
+ defaultValue = 50,
1581
+ min = 0,
1582
+ max = 100,
1583
+ step = 1,
1584
+ onValueChange,
1585
+ disabled = false,
1586
+ ...props
1587
+ }, ref) => {
1588
+ const [uncontrolledValue, setUncontrolledValue] = React31.useState(defaultValue);
1589
+ const isControlled = controlledValue !== void 0;
1590
+ const value = isControlled ? controlledValue : uncontrolledValue;
1591
+ const handleChange = (e) => {
1592
+ const next = Number(e.target.value);
1593
+ if (!isControlled) {
1594
+ setUncontrolledValue(next);
1595
+ }
1596
+ onValueChange?.(next);
1597
+ };
1598
+ const percentage = (value - min) / (max - min) * 100;
1599
+ return /* @__PURE__ */ jsxs(
1600
+ "div",
1601
+ {
1602
+ ref,
1603
+ className: clsx14("ds-slider", disabled && "ds-slider--disabled", className),
1604
+ ...props,
1605
+ children: [
1606
+ /* @__PURE__ */ jsx("div", { className: "ds-slider__track", children: /* @__PURE__ */ jsx(
1607
+ "div",
1608
+ {
1609
+ className: "ds-slider__range",
1610
+ style: { width: `${percentage}%` }
1611
+ }
1612
+ ) }),
1613
+ /* @__PURE__ */ jsx(
1614
+ "input",
1615
+ {
1616
+ type: "range",
1617
+ className: "ds-slider__thumb",
1618
+ role: "slider",
1619
+ min,
1620
+ max,
1621
+ step,
1622
+ value,
1623
+ disabled,
1624
+ onChange: handleChange,
1625
+ "aria-valuemin": min,
1626
+ "aria-valuemax": max,
1627
+ "aria-valuenow": value
1628
+ }
1629
+ )
1630
+ ]
1631
+ }
1632
+ );
1633
+ }
1634
+ );
1635
+ Slider.displayName = "Slider";
1636
+ function formatNumber(n, prefix, suffix) {
1637
+ const formatted = n >= 1e3 ? n.toLocaleString("en-US", { maximumFractionDigits: 0 }) : String(Math.round(n * 10) / 10);
1638
+ return `${prefix ?? ""}${formatted}${suffix ?? ""}`;
1639
+ }
1640
+ var ValueAnchor = forwardRef(
1641
+ ({
1642
+ eyebrow,
1643
+ title,
1644
+ subtitle,
1645
+ inputs,
1646
+ calculate,
1647
+ cta,
1648
+ className,
1649
+ ...props
1650
+ }, ref) => {
1651
+ const initialValues = useMemo(() => {
1652
+ const vals = {};
1653
+ inputs.forEach((inp) => {
1654
+ vals[inp.name] = inp.defaultValue;
1655
+ });
1656
+ return vals;
1657
+ }, [inputs]);
1658
+ const [values, setValues] = useState(initialValues);
1659
+ const handleChange = useCallback((name, value) => {
1660
+ setValues((prev) => ({ ...prev, [name]: value }));
1661
+ }, []);
1662
+ const output = useMemo(() => calculate(values), [values, calculate]);
1663
+ return /* @__PURE__ */ jsxs(
1664
+ SectionShell,
1665
+ {
1666
+ ref,
1667
+ className: clsx14("ds-value-anchor", className),
1668
+ ...props,
1669
+ children: [
1670
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1671
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__layout", children: [
1672
+ /* @__PURE__ */ jsx("div", { className: "ds-value-anchor__inputs", children: inputs.map((input) => /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__input-group", children: [
1673
+ /* @__PURE__ */ jsxs("label", { className: "ds-value-anchor__input-label", children: [
1674
+ input.label,
1675
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__input-value", children: formatNumber(values[input.name], input.prefix, input.suffix) })
1676
+ ] }),
1677
+ input.type === "slider" ? /* @__PURE__ */ jsx(
1678
+ Slider,
1679
+ {
1680
+ value: values[input.name],
1681
+ min: input.min ?? 0,
1682
+ max: input.max ?? 100,
1683
+ step: input.step ?? 1,
1684
+ onValueChange: (v) => handleChange(input.name, v)
1685
+ }
1686
+ ) : /* @__PURE__ */ jsx(
1687
+ TextField,
1688
+ {
1689
+ type: "number",
1690
+ value: String(values[input.name]),
1691
+ onChange: (e) => handleChange(input.name, Number(e.target.value) || 0)
1692
+ }
1693
+ )
1694
+ ] }, input.name)) }),
1695
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__output", children: [
1696
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__primary", children: [
1697
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__primary-value", children: formatNumber(output.primaryMetric.value, output.primaryMetric.prefix, output.primaryMetric.suffix) }),
1698
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__primary-label", children: output.primaryMetric.label })
1699
+ ] }),
1700
+ 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: [
1701
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__secondary-value", children: formatNumber(m.value, m.prefix, m.suffix) }),
1702
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__secondary-label", children: m.label })
1703
+ ] }, i)) }),
1704
+ output.costComparison && /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison", children: [
1705
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison-col ds-value-anchor__comparison-col--without", children: [
1706
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-value", children: formatNumber(output.costComparison.without.value, "$") }),
1707
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-label", children: output.costComparison.without.label })
1708
+ ] }),
1709
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__comparison-col ds-value-anchor__comparison-col--with", children: [
1710
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-value", children: formatNumber(output.costComparison.with.value, "$") }),
1711
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__comparison-label", children: output.costComparison.with.label })
1712
+ ] }),
1713
+ /* @__PURE__ */ jsxs("div", { className: "ds-value-anchor__savings", children: [
1714
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__savings-value", children: formatNumber(output.costComparison.savings.value, "$") }),
1715
+ /* @__PURE__ */ jsx("span", { className: "ds-value-anchor__savings-label", children: output.costComparison.savings.label })
1716
+ ] })
1717
+ ] })
1718
+ ] })
1719
+ ] }),
1720
+ 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 }) }) })
1721
+ ]
1722
+ }
1723
+ );
1724
+ }
1725
+ );
1726
+ ValueAnchor.displayName = "ValueAnchor";
1727
+ var STATUS_LABELS = {
1728
+ active: "Active",
1729
+ "in-progress": "In Progress",
1730
+ planned: "Planned"
1731
+ };
1732
+ var EnterpriseSignaling = forwardRef(
1733
+ ({
1734
+ eyebrow,
1735
+ title,
1736
+ subtitle,
1737
+ categories,
1738
+ sla,
1739
+ variant = "full",
1740
+ className,
1741
+ ...props
1742
+ }, ref) => {
1743
+ if (variant === "strip") {
1744
+ return /* @__PURE__ */ jsx(
1745
+ "div",
1746
+ {
1747
+ ref,
1748
+ className: clsx14("ds-enterprise-signaling", "ds-enterprise-signaling--strip", className),
1749
+ ...props,
1750
+ 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)) })
1751
+ }
1752
+ );
1753
+ }
1754
+ return /* @__PURE__ */ jsxs(
1755
+ SectionShell,
1756
+ {
1757
+ ref,
1758
+ className: clsx14("ds-enterprise-signaling", `ds-enterprise-signaling--${variant}`, className),
1759
+ ...props,
1760
+ children: [
1761
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1762
+ /* @__PURE__ */ jsx("div", { className: "ds-enterprise-signaling__categories", children: categories.map((cat, ci) => /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__category", children: [
1763
+ /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__category-header", children: [
1764
+ cat.icon && /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__category-icon", children: cat.icon }),
1765
+ /* @__PURE__ */ jsx("h3", { className: "ds-enterprise-signaling__category-name", children: cat.name })
1766
+ ] }),
1767
+ /* @__PURE__ */ jsx("div", { className: "ds-enterprise-signaling__items", children: cat.items.map((item, ii) => {
1768
+ const inner = /* @__PURE__ */ jsxs(
1769
+ "div",
1770
+ {
1771
+ className: clsx14(
1772
+ "ds-enterprise-signaling__item",
1773
+ `ds-enterprise-signaling__item--${item.status}`
1774
+ ),
1775
+ children: [
1776
+ /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__item-name", children: item.name }),
1777
+ /* @__PURE__ */ jsx(
1778
+ Badge,
1779
+ {
1780
+ className: clsx14("ds-enterprise-signaling__item-status", `ds-enterprise-signaling__item-status--${item.status}`),
1781
+ variant: "outline",
1782
+ children: STATUS_LABELS[item.status]
1783
+ }
1784
+ ),
1785
+ variant === "full" && item.detail && /* @__PURE__ */ jsx("span", { className: "ds-enterprise-signaling__item-detail", children: item.detail })
1786
+ ]
1787
+ },
1788
+ ii
1789
+ );
1790
+ return item.href ? /* @__PURE__ */ jsx(OutboundLink, { href: item.href, context: "enterprise-signaling-item", className: "ds-enterprise-signaling__item-link", children: inner }, ii) : /* @__PURE__ */ jsx(React31.Fragment, { children: inner }, ii);
1791
+ }) })
1792
+ ] }, ci)) }),
1793
+ sla && sla.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-enterprise-signaling__sla", children: [
1794
+ /* @__PURE__ */ jsx("h3", { className: "ds-enterprise-signaling__sla-title", children: "Service Level Agreements" }),
1795
+ /* @__PURE__ */ jsxs("table", { className: "ds-enterprise-signaling__sla-table", children: [
1796
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
1797
+ /* @__PURE__ */ jsx("th", { children: "Metric" }),
1798
+ /* @__PURE__ */ jsx("th", { children: "SLA" }),
1799
+ sla.some((s) => s.current) && /* @__PURE__ */ jsx("th", { children: "Current" })
1800
+ ] }) }),
1801
+ /* @__PURE__ */ jsx("tbody", { children: sla.map((s, i) => /* @__PURE__ */ jsxs("tr", { children: [
1802
+ /* @__PURE__ */ jsx("td", { children: s.metric }),
1803
+ /* @__PURE__ */ jsx("td", { children: s.commitment }),
1804
+ sla.some((sl) => sl.current) && /* @__PURE__ */ jsx("td", { className: "ds-enterprise-signaling__sla-current", children: s.current ?? "\u2014" })
1805
+ ] }, i)) })
1806
+ ] })
1807
+ ] })
1808
+ ]
1809
+ }
1810
+ );
1811
+ }
1812
+ );
1813
+ EnterpriseSignaling.displayName = "EnterpriseSignaling";
1814
+ var MetricCounter = forwardRef(
1815
+ ({
1816
+ value,
1817
+ prefix = "",
1818
+ suffix = "",
1819
+ duration = 1500,
1820
+ decimals = 0,
1821
+ label,
1822
+ className,
1823
+ ...props
1824
+ }, ref) => {
1825
+ const [displayValue, setDisplayValue] = useState(0);
1826
+ const [hasAnimated, setHasAnimated] = useState(false);
1827
+ const containerRef = useRef(null);
1828
+ const prefersReducedMotion = useRef(false);
1829
+ useEffect(() => {
1830
+ prefersReducedMotion.current = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
1831
+ if (prefersReducedMotion.current) {
1832
+ setDisplayValue(value);
1833
+ setHasAnimated(true);
1834
+ return;
1835
+ }
1836
+ const observer = new IntersectionObserver(
1837
+ (entries) => {
1838
+ if (entries[0].isIntersecting && !hasAnimated) {
1839
+ startAnimation();
1840
+ observer.disconnect();
1841
+ }
1842
+ },
1843
+ { threshold: 0.5 }
1844
+ );
1845
+ if (containerRef.current) {
1846
+ observer.observe(containerRef.current);
1847
+ }
1848
+ return () => observer.disconnect();
1849
+ }, [value, hasAnimated]);
1850
+ const startAnimation = () => {
1851
+ let startTime;
1852
+ setHasAnimated(true);
1853
+ const easeOutExpo = (t) => {
1854
+ return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);
1855
+ };
1856
+ const animate = (currentTime) => {
1857
+ if (!startTime) startTime = currentTime;
1858
+ const progress = Math.min((currentTime - startTime) / duration, 1);
1859
+ const currentMultiplier = easeOutExpo(progress);
1860
+ const nextValue = value * currentMultiplier;
1861
+ setDisplayValue(nextValue);
1862
+ if (progress < 1) {
1863
+ requestAnimationFrame(animate);
1864
+ } else {
1865
+ setDisplayValue(value);
1866
+ }
1867
+ };
1868
+ requestAnimationFrame(animate);
1869
+ };
1870
+ const formattedValue = displayValue.toLocaleString(void 0, {
1871
+ minimumFractionDigits: decimals,
1872
+ maximumFractionDigits: decimals
1873
+ });
1874
+ return /* @__PURE__ */ jsxs(
1875
+ "div",
1876
+ {
1877
+ ref: (node) => {
1878
+ containerRef.current = node;
1879
+ if (typeof ref === "function") ref(node);
1880
+ else if (ref) ref.current = node;
1881
+ },
1882
+ className: clsx14("ds-metric-counter", className),
1883
+ ...props,
1884
+ children: [
1885
+ /* @__PURE__ */ jsxs("div", { className: "ds-metric-counter__value-wrapper", children: [
1886
+ prefix && /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__prefix", children: prefix }),
1887
+ /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__value", children: formattedValue }),
1888
+ suffix && /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__suffix", children: suffix })
1889
+ ] }),
1890
+ label && /* @__PURE__ */ jsx("div", { className: "ds-metric-counter__label", children: label })
1891
+ ]
1892
+ }
1893
+ );
1894
+ }
1895
+ );
1896
+ MetricCounter.displayName = "MetricCounter";
1897
+ var IntelligenceBlock = forwardRef(
1898
+ ({
1899
+ eyebrow,
1900
+ title,
1901
+ subtitle,
1902
+ metrics,
1903
+ capabilities,
1904
+ variant = "metrics-first",
1905
+ className,
1906
+ ...props
1907
+ }, ref) => {
1908
+ const metricsBlock = /* @__PURE__ */ jsx("div", { className: "ds-intelligence__metrics", children: metrics.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__metric", children: [
1909
+ /* @__PURE__ */ jsx(
1910
+ MetricCounter,
1911
+ {
1912
+ value: m.value,
1913
+ prefix: m.prefix,
1914
+ suffix: m.suffix,
1915
+ label: m.label
1916
+ }
1917
+ ),
1918
+ m.growth && /* @__PURE__ */ jsx("span", { className: "ds-intelligence__growth", children: m.growth })
1919
+ ] }, i)) });
1920
+ const capabilitiesBlock = /* @__PURE__ */ jsx("div", { className: "ds-intelligence__capabilities", children: capabilities.map((cap, i) => /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__capability", children: [
1921
+ cap.icon && /* @__PURE__ */ jsx("div", { className: "ds-intelligence__capability-icon", "aria-hidden": "true", children: cap.icon }),
1922
+ /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__capability-content", children: [
1923
+ /* @__PURE__ */ jsx("h3", { className: "ds-intelligence__capability-title", children: cap.title }),
1924
+ /* @__PURE__ */ jsx("p", { className: "ds-intelligence__capability-desc", children: cap.description }),
1925
+ cap.compoundingExample && /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound", children: [
1926
+ /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound-before", children: [
1927
+ /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-label", children: "Before" }),
1928
+ /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-text", children: cap.compoundingExample.before })
1929
+ ] }),
1930
+ /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-arrow", "aria-hidden": "true", children: "\\u2192" }),
1931
+ /* @__PURE__ */ jsxs("div", { className: "ds-intelligence__compound-after", children: [
1932
+ /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-label", children: cap.compoundingExample.timeframe }),
1933
+ /* @__PURE__ */ jsx("span", { className: "ds-intelligence__compound-text", children: cap.compoundingExample.after })
1934
+ ] })
1935
+ ] })
1936
+ ] })
1937
+ ] }, i)) });
1938
+ return /* @__PURE__ */ jsxs(
1939
+ SectionShell,
1940
+ {
1941
+ ref,
1942
+ className: clsx14("ds-intelligence", `ds-intelligence--${variant}`, className),
1943
+ ...props,
1944
+ children: [
1945
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
1946
+ variant === "capabilities-first" ? /* @__PURE__ */ jsxs(Fragment, { children: [
1947
+ capabilitiesBlock,
1948
+ metricsBlock
1949
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1950
+ metricsBlock,
1951
+ capabilitiesBlock
1952
+ ] })
1953
+ ]
1954
+ }
1955
+ );
1956
+ }
1957
+ );
1958
+ IntelligenceBlock.displayName = "IntelligenceBlock";
1959
+ function fmtNum(n, prefix, suffix) {
1960
+ return `${prefix ?? ""}${n.toLocaleString("en-US", { maximumFractionDigits: 0 })}${suffix ?? ""}`;
1961
+ }
1962
+ var PartnerValueProp = forwardRef(
1963
+ ({
1964
+ eyebrow,
1965
+ title,
1966
+ subtitle,
1967
+ calculator,
1968
+ benefits,
1969
+ differentiators,
1970
+ differentiatorTitle = "Build In-House vs. White-Label",
1971
+ differentiatorBuildLabel = "Build In-House",
1972
+ differentiatorPartnerLabel = "White-Label",
1973
+ cta,
1974
+ className,
1975
+ ...props
1976
+ }, ref) => {
1977
+ const initialValues = useMemo(() => {
1978
+ if (!calculator) return {};
1979
+ const vals = {};
1980
+ calculator.inputs.forEach((inp) => {
1981
+ vals[inp.name] = inp.defaultValue;
1982
+ });
1983
+ return vals;
1984
+ }, [calculator]);
1985
+ const [values, setValues] = useState(initialValues);
1986
+ const handleChange = useCallback((name, value) => {
1987
+ setValues((prev) => ({ ...prev, [name]: value }));
1988
+ }, []);
1989
+ const calcOutput = useMemo(() => {
1990
+ if (!calculator) return null;
1991
+ return calculator.calculate(values);
1992
+ }, [values, calculator]);
1993
+ return /* @__PURE__ */ jsxs(
1994
+ SectionShell,
1995
+ {
1996
+ ref,
1997
+ className: clsx14("ds-partner-vp", className),
1998
+ ...props,
1999
+ children: [
2000
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2001
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__layout", children: [
2002
+ /* @__PURE__ */ jsx("div", { className: "ds-partner-vp__benefits", children: benefits.map((b, i) => /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__benefit", children: [
2003
+ b.icon && /* @__PURE__ */ jsx("div", { className: "ds-partner-vp__benefit-icon", "aria-hidden": "true", children: b.icon }),
2004
+ /* @__PURE__ */ jsxs("div", { children: [
2005
+ /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__benefit-title", children: b.title }),
2006
+ /* @__PURE__ */ jsx("p", { className: "ds-partner-vp__benefit-desc", children: b.description })
2007
+ ] })
2008
+ ] }, i)) }),
2009
+ calculator && calcOutput && /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calculator", children: [
2010
+ /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__calc-title", children: "Partner Economics" }),
2011
+ calculator.inputs.map((input) => /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-input", children: [
2012
+ /* @__PURE__ */ jsxs("label", { className: "ds-partner-vp__calc-label", children: [
2013
+ input.label,
2014
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-value", children: fmtNum(values[input.name], input.prefix, input.suffix) })
2015
+ ] }),
2016
+ /* @__PURE__ */ jsx(
2017
+ Slider,
2018
+ {
2019
+ value: values[input.name],
2020
+ min: input.min ?? 0,
2021
+ max: input.max ?? 100,
2022
+ onValueChange: (v) => handleChange(input.name, v)
2023
+ }
2024
+ )
2025
+ ] }, input.name)),
2026
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-results", children: [
2027
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-margin", children: [
2028
+ /* @__PURE__ */ jsxs("span", { className: "ds-partner-vp__calc-margin-value", children: [
2029
+ Math.round(calcOutput.marginPercentage),
2030
+ "%"
2031
+ ] }),
2032
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-margin-label", children: "Margin" })
2033
+ ] }),
2034
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metrics", children: [
2035
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
2036
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.monthlyRevenue, "$") }),
2037
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Revenue" })
2038
+ ] }),
2039
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
2040
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.monthlyCost, "$") }),
2041
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Cost" })
2042
+ ] }),
2043
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
2044
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value ds-partner-vp__calc-metric-value--positive", children: fmtNum(calcOutput.monthlyMargin, "$") }),
2045
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Monthly Profit" })
2046
+ ] }),
2047
+ /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__calc-metric", children: [
2048
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-value", children: fmtNum(calcOutput.annualRevenue, "$") }),
2049
+ /* @__PURE__ */ jsx("span", { className: "ds-partner-vp__calc-metric-label", children: "Annual Revenue" })
2050
+ ] })
2051
+ ] })
2052
+ ] })
2053
+ ] })
2054
+ ] }),
2055
+ differentiators && differentiators.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-partner-vp__diff", children: [
2056
+ /* @__PURE__ */ jsx("h3", { className: "ds-partner-vp__diff-title", children: differentiatorTitle }),
2057
+ /* @__PURE__ */ jsxs("table", { className: "ds-partner-vp__diff-table", children: [
2058
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
2059
+ /* @__PURE__ */ jsx("th", { children: "Dimension" }),
2060
+ /* @__PURE__ */ jsx("th", { children: differentiatorBuildLabel }),
2061
+ /* @__PURE__ */ jsx("th", { children: differentiatorPartnerLabel })
2062
+ ] }) }),
2063
+ /* @__PURE__ */ jsx("tbody", { children: differentiators.map((d, i) => /* @__PURE__ */ jsxs("tr", { children: [
2064
+ /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-dimension", children: d.dimension }),
2065
+ /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-build", children: d.buildInHouse }),
2066
+ /* @__PURE__ */ jsx("td", { className: "ds-partner-vp__diff-sm", children: d.withPartner })
2067
+ ] }, i)) })
2068
+ ] })
2069
+ ] }),
2070
+ /* @__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 }) }) })
2071
+ ]
2072
+ }
2073
+ );
2074
+ }
2075
+ );
2076
+ PartnerValueProp.displayName = "PartnerValueProp";
2077
+ var EvolutionTimeline = forwardRef(
2078
+ ({
2079
+ eyebrow,
2080
+ title,
2081
+ subtitle,
2082
+ eras,
2083
+ youAreHere,
2084
+ cta,
2085
+ className,
2086
+ ...props
2087
+ }, ref) => {
2088
+ return /* @__PURE__ */ jsxs(
2089
+ SectionShell,
2090
+ {
2091
+ ref,
2092
+ className: clsx14("ds-evolution-timeline", className),
2093
+ ...props,
2094
+ children: [
2095
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2096
+ /* @__PURE__ */ jsxs("div", { className: "ds-evolution-timeline__track", children: [
2097
+ /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__line", "aria-hidden": "true" }),
2098
+ eras.map((era, i) => /* @__PURE__ */ jsxs(
2099
+ "div",
2100
+ {
2101
+ className: clsx14(
2102
+ "ds-evolution-timeline__era",
2103
+ `ds-evolution-timeline__era--${era.sentiment}`,
2104
+ era.current && "ds-evolution-timeline__era--current"
2105
+ ),
2106
+ children: [
2107
+ /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__marker", "aria-hidden": "true" }),
2108
+ youAreHere === i && /* @__PURE__ */ jsx(Badge, { className: "ds-evolution-timeline__you-are-here", children: "Most tools are here" }),
2109
+ era.icon && /* @__PURE__ */ jsx("div", { className: "ds-evolution-timeline__icon", "aria-hidden": "true", children: era.icon }),
2110
+ /* @__PURE__ */ jsxs("div", { className: "ds-evolution-timeline__content", children: [
2111
+ /* @__PURE__ */ jsx("span", { className: "ds-evolution-timeline__period", children: era.period }),
2112
+ /* @__PURE__ */ jsx("h3", { className: "ds-evolution-timeline__label", children: era.label }),
2113
+ /* @__PURE__ */ jsx("p", { className: "ds-evolution-timeline__desc", children: era.description }),
2114
+ /* @__PURE__ */ jsx("ul", { className: "ds-evolution-timeline__traits", children: era.traits.map((trait, j) => /* @__PURE__ */ jsxs("li", { className: "ds-evolution-timeline__trait", children: [
2115
+ /* @__PURE__ */ jsx("span", { className: "ds-evolution-timeline__trait-icon", "aria-hidden": "true", children: era.sentiment === "future" ? "\u2713" : era.sentiment === "past" ? "\u2717" : "\u2022" }),
2116
+ trait
2117
+ ] }, j)) })
2118
+ ] })
2119
+ ]
2120
+ },
2121
+ i
2122
+ ))
2123
+ ] }),
2124
+ 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 }) }) })
2125
+ ]
2126
+ }
2127
+ );
2128
+ }
2129
+ );
2130
+ EvolutionTimeline.displayName = "EvolutionTimeline";
2131
+ var EcosystemDiagram = forwardRef(
2132
+ ({
2133
+ eyebrow,
2134
+ title,
2135
+ subtitle,
2136
+ layers,
2137
+ connections,
2138
+ variant = "flywheel",
2139
+ centerLabel,
2140
+ className,
2141
+ ...props
2142
+ }, ref) => {
2143
+ return /* @__PURE__ */ jsxs(
2144
+ SectionShell,
2145
+ {
2146
+ ref,
2147
+ className: clsx14("ds-ecosystem", `ds-ecosystem--${variant}`, className),
2148
+ ...props,
2149
+ children: [
2150
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2151
+ /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__diagram", role: "img", "aria-label": "Ecosystem diagram", children: [
2152
+ centerLabel && /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__center", children: /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__center-label", children: centerLabel }) }),
2153
+ /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__layers", children: layers.map((layer, i) => /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__layer", children: [
2154
+ layer.icon && /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__layer-icon", "aria-hidden": "true", children: layer.icon }),
2155
+ /* @__PURE__ */ jsx("h3", { className: "ds-ecosystem__layer-name", children: layer.name }),
2156
+ /* @__PURE__ */ jsx("p", { className: "ds-ecosystem__layer-desc", children: layer.description }),
2157
+ /* @__PURE__ */ jsx("ul", { className: "ds-ecosystem__capabilities", children: layer.capabilities.map((cap, j) => /* @__PURE__ */ jsx("li", { className: "ds-ecosystem__capability", children: cap }, j)) })
2158
+ ] }, i)) }),
2159
+ /* @__PURE__ */ jsx("div", { className: "ds-ecosystem__connections", "aria-hidden": "true", children: connections.map((conn, i) => /* @__PURE__ */ jsxs("div", { className: "ds-ecosystem__connection", children: [
2160
+ /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__connection-arrow", children: "\\u2192" }),
2161
+ /* @__PURE__ */ jsx("span", { className: "ds-ecosystem__connection-label", children: conn.label })
2162
+ ] }, i)) })
2163
+ ] })
2164
+ ]
2165
+ }
2166
+ );
2167
+ }
2168
+ );
2169
+ EcosystemDiagram.displayName = "EcosystemDiagram";
2170
+ var AvatarContext = React31.createContext({
2171
+ hasImage: false,
2172
+ imageError: false,
2173
+ onImageError: () => {
2174
+ }
2175
+ });
2176
+ var Avatar = React31.forwardRef(
2177
+ ({ size = "md", className, children, ...props }, ref) => {
2178
+ const [imageError, setImageError] = React31.useState(false);
2179
+ const [hasImage, setHasImage] = React31.useState(false);
2180
+ React31.useEffect(() => {
2181
+ let found = false;
2182
+ React31.Children.forEach(children, (child) => {
2183
+ if (React31.isValidElement(child) && child.type === AvatarImage) {
2184
+ found = true;
2185
+ }
2186
+ });
2187
+ setHasImage(found);
2188
+ }, [children]);
2189
+ const onImageError = React31.useCallback(() => {
2190
+ setImageError(true);
2191
+ }, []);
2192
+ return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: { hasImage, imageError, onImageError }, children: /* @__PURE__ */ jsx(
2193
+ "span",
2194
+ {
2195
+ ref,
2196
+ className: clsx14("ds-avatar", `ds-avatar--${size}`, className),
2197
+ ...props,
2198
+ children
2199
+ }
2200
+ ) });
2201
+ }
2202
+ );
2203
+ Avatar.displayName = "Avatar";
2204
+ var AvatarImage = React31.forwardRef(({ className, onError, ...props }, ref) => {
2205
+ const { imageError, onImageError } = React31.useContext(AvatarContext);
2206
+ const handleError = (e) => {
2207
+ onImageError();
2208
+ onError?.(e);
2209
+ };
2210
+ if (imageError) return null;
2211
+ return /* @__PURE__ */ jsx(
2212
+ "img",
2213
+ {
2214
+ ref,
2215
+ className: clsx14("ds-avatar__image", className),
2216
+ onError: handleError,
2217
+ ...props
2218
+ }
2219
+ );
2220
+ });
2221
+ AvatarImage.displayName = "AvatarImage";
2222
+ var AvatarFallback = React31.forwardRef(({ className, ...props }, ref) => {
2223
+ const { hasImage, imageError } = React31.useContext(AvatarContext);
2224
+ if (hasImage && !imageError) return null;
2225
+ return /* @__PURE__ */ jsx("span", { ref, className: clsx14("ds-avatar__fallback", className), ...props });
2226
+ });
2227
+ AvatarFallback.displayName = "AvatarFallback";
2228
+ var ManifestoBlock = forwardRef(
2229
+ ({
2230
+ statement,
2231
+ attribution,
2232
+ variant = "centered",
2233
+ className,
2234
+ ...props
2235
+ }, ref) => {
2236
+ const initials = attribution ? attribution.name.split(" ").map((n) => n[0]).join("").slice(0, 2) : "";
2237
+ return /* @__PURE__ */ jsx(
2238
+ SectionShell,
2239
+ {
2240
+ ref,
2241
+ className: clsx14("ds-manifesto", `ds-manifesto--${variant}`, className),
2242
+ ...props,
2243
+ children: /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__inner", children: [
2244
+ variant === "quote" && /* @__PURE__ */ jsx("span", { className: "ds-manifesto__quote-mark", "aria-hidden": "true", children: "\u201C" }),
2245
+ /* @__PURE__ */ jsx("blockquote", { className: "ds-manifesto__statement", children: statement }),
2246
+ attribution && /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__attribution", children: [
2247
+ /* @__PURE__ */ jsxs(Avatar, { size: "sm", children: [
2248
+ attribution.avatar && /* @__PURE__ */ jsx(AvatarImage, { src: attribution.avatar, alt: attribution.name }),
2249
+ /* @__PURE__ */ jsx(AvatarFallback, { children: initials })
2250
+ ] }),
2251
+ /* @__PURE__ */ jsxs("div", { className: "ds-manifesto__attribution-text", children: [
2252
+ /* @__PURE__ */ jsx("span", { className: "ds-manifesto__attribution-name", children: attribution.name }),
2253
+ /* @__PURE__ */ jsx("span", { className: "ds-manifesto__attribution-role", children: attribution.role })
2254
+ ] })
2255
+ ] })
2256
+ ] })
2257
+ }
2258
+ );
2259
+ }
2260
+ );
2261
+ ManifestoBlock.displayName = "ManifestoBlock";
2262
+ var AnnouncementBar = forwardRef(
2263
+ ({
2264
+ badge,
2265
+ message,
2266
+ href,
2267
+ variant = "brand",
2268
+ dismissible = false,
2269
+ onDismiss,
2270
+ showArrow = true,
2271
+ className,
2272
+ ...props
2273
+ }, ref) => {
2274
+ const { track } = useAnalytics();
2275
+ const handleClick = () => {
2276
+ if (href) {
2277
+ track("announcement_click", { href, variant });
2278
+ }
2279
+ };
2280
+ const handleDismiss = (e) => {
2281
+ e.preventDefault();
2282
+ e.stopPropagation();
2283
+ track("announcement_dismiss", { variant });
2284
+ onDismiss?.();
2285
+ };
2286
+ const Component = href ? "a" : "div";
2287
+ const componentProps = href ? { href, onClick: handleClick } : {};
2288
+ return /* @__PURE__ */ jsxs(
2289
+ "div",
2290
+ {
2291
+ ref,
2292
+ className: clsx14(
2293
+ "ds-announcement-bar",
2294
+ `ds-announcement-bar--${variant}`,
2295
+ href && "ds-announcement-bar--clickable",
2296
+ className
2297
+ ),
2298
+ ...props,
2299
+ children: [
2300
+ /* @__PURE__ */ jsxs(Component, { className: "ds-announcement-bar__inner", ...componentProps, children: [
2301
+ /* @__PURE__ */ jsxs("div", { className: "ds-announcement-bar__content", children: [
2302
+ badge && /* @__PURE__ */ jsx("span", { className: "ds-announcement-bar__badge", children: badge }),
2303
+ /* @__PURE__ */ jsx("span", { className: "ds-announcement-bar__message", children: message })
2304
+ ] }),
2305
+ href && showArrow && /* @__PURE__ */ jsx(ArrowRight, { className: "ds-announcement-bar__arrow", size: 16 })
2306
+ ] }),
2307
+ dismissible && /* @__PURE__ */ jsx(
2308
+ "button",
2309
+ {
2310
+ type: "button",
2311
+ className: "ds-announcement-bar__close",
2312
+ onClick: handleDismiss,
2313
+ "aria-label": "Dismiss announcement",
2314
+ 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" }) })
2315
+ }
2316
+ )
2317
+ ]
2318
+ }
2319
+ );
2320
+ }
2321
+ );
2322
+ AnnouncementBar.displayName = "AnnouncementBar";
2323
+ var ProcessTimeline = forwardRef(
2324
+ ({
2325
+ steps,
2326
+ animated = true,
2327
+ className,
2328
+ ...props
2329
+ }, ref) => {
2330
+ const [progress, setProgress] = useState(0);
2331
+ const containerRef = useRef(null);
2332
+ const { track } = useAnalytics();
2333
+ const hasTrackedRef = useRef(false);
2334
+ useEffect(() => {
2335
+ if (!animated) return;
2336
+ const handleScroll = () => {
2337
+ if (!containerRef.current) return;
2338
+ const rect = containerRef.current.getBoundingClientRect();
2339
+ const windowHeight = window.innerHeight;
2340
+ const startDraw = windowHeight * 0.5;
2341
+ const travelDistance = rect.height;
2342
+ const currentPos = startDraw - rect.top;
2343
+ if (currentPos < 0) {
2344
+ setProgress(0);
2345
+ } else if (currentPos > travelDistance) {
2346
+ setProgress(100);
2347
+ if (!hasTrackedRef.current) {
2348
+ hasTrackedRef.current = true;
2349
+ track("timeline_complete");
2350
+ }
2351
+ } else {
2352
+ setProgress(currentPos / travelDistance * 100);
2353
+ }
2354
+ };
2355
+ window.addEventListener("scroll", handleScroll, { passive: true });
2356
+ handleScroll();
2357
+ return () => window.removeEventListener("scroll", handleScroll);
2358
+ }, [animated, track]);
2359
+ return /* @__PURE__ */ jsxs(
2360
+ "div",
2361
+ {
2362
+ ref: (node) => {
2363
+ containerRef.current = node;
2364
+ if (typeof ref === "function") ref(node);
2365
+ else if (ref) ref.current = node;
2366
+ },
2367
+ className: clsx14(
2368
+ "ds-process-timeline",
2369
+ animated && "ds-process-timeline--animated",
2370
+ className
2371
+ ),
2372
+ ...props,
2373
+ children: [
2374
+ /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__track", children: /* @__PURE__ */ jsx(
2375
+ "div",
2376
+ {
2377
+ className: "ds-process-timeline__progress",
2378
+ style: { height: animated ? `${progress}%` : "100%" }
2379
+ }
2380
+ ) }),
2381
+ /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__steps", children: steps.map((step, index) => {
2382
+ const stepProgress = index / (steps.length - 1) * 100;
2383
+ const isActive = !animated || progress >= stepProgress;
2384
+ return /* @__PURE__ */ jsxs(
2385
+ "div",
2386
+ {
2387
+ className: clsx14(
2388
+ "ds-process-timeline__step",
2389
+ isActive && "ds-process-timeline__step--active"
2390
+ ),
2391
+ children: [
2392
+ /* @__PURE__ */ jsx("div", { className: "ds-process-timeline__indicator", children: step.indicator }),
2393
+ /* @__PURE__ */ jsxs("div", { className: "ds-process-timeline__content", children: [
2394
+ /* @__PURE__ */ jsx("h3", { className: "ds-process-timeline__title", children: step.title }),
2395
+ /* @__PURE__ */ jsx("p", { className: "ds-process-timeline__description", children: step.description })
2396
+ ] })
2397
+ ]
2398
+ },
2399
+ index
2400
+ );
2401
+ }) })
2402
+ ]
2403
+ }
2404
+ );
2405
+ }
2406
+ );
2407
+ ProcessTimeline.displayName = "ProcessTimeline";
2408
+ var ProblemAgitation = forwardRef(
2409
+ ({
2410
+ title,
2411
+ description,
2412
+ points,
2413
+ oldWayLabel = "The Old Way",
2414
+ newWayLabel = "The New Way",
2415
+ className,
2416
+ ...props
2417
+ }, ref) => {
2418
+ return /* @__PURE__ */ jsxs(
2419
+ "section",
2420
+ {
2421
+ ref,
2422
+ className: clsx14("ds-problem-agitation", className),
2423
+ ...props,
2424
+ children: [
2425
+ /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__header", children: [
2426
+ /* @__PURE__ */ jsx("h2", { className: "ds-problem-agitation__title", children: title }),
2427
+ description && /* @__PURE__ */ jsx("p", { className: "ds-problem-agitation__description", children: description })
2428
+ ] }),
2429
+ /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__grid", children: [
2430
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--old", children: oldWayLabel }),
2431
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--new", children: newWayLabel }),
2432
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__column-header ds-problem-agitation__column-header--old", children: oldWayLabel }),
2433
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__column-header ds-problem-agitation__column-header--new", children: newWayLabel }),
2434
+ points.map((point, index) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
2435
+ /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__cell ds-problem-agitation__cell--old", children: [
2436
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--old", children: /* @__PURE__ */ jsx(X, { size: 20, "aria-hidden": "true" }) }),
2437
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__content", children: point.problem })
2438
+ ] }),
2439
+ /* @__PURE__ */ jsxs("div", { className: "ds-problem-agitation__cell ds-problem-agitation__cell--new", children: [
2440
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--new", children: /* @__PURE__ */ jsx(Check, { size: 20, "aria-hidden": "true" }) }),
2441
+ /* @__PURE__ */ jsx("div", { className: "ds-problem-agitation__content", children: point.solution })
2442
+ ] })
2443
+ ] }, index))
2444
+ ] })
2445
+ ]
2446
+ }
2447
+ );
2448
+ }
2449
+ );
2450
+ ProblemAgitation.displayName = "ProblemAgitation";
2451
+ var Tabs = React31.forwardRef(
2452
+ ({ className, orientation = "horizontal", ...props }, ref) => {
2453
+ return /* @__PURE__ */ jsx(
2454
+ Tabs$1.Root,
2455
+ {
2456
+ ref,
2457
+ className: clsx14("ds-tabs", `ds-tabs--${orientation}`, className),
2458
+ orientation,
2459
+ ...props
2460
+ }
2461
+ );
2462
+ }
2463
+ );
2464
+ Tabs.displayName = "Tabs";
2465
+ var TabsList = React31.forwardRef(
2466
+ ({ className, ...props }, ref) => {
2467
+ return /* @__PURE__ */ jsx(Tabs$1.List, { ref, className: clsx14("ds-tabs__list", className), ...props });
2468
+ }
2469
+ );
2470
+ TabsList.displayName = "TabsList";
2471
+ var TabsTrigger = React31.forwardRef(
2472
+ ({ className, children, ...props }, ref) => {
2473
+ return /* @__PURE__ */ jsx(Tabs$1.Tab, { ref, className: clsx14("ds-tabs__trigger", className), ...props, children });
2474
+ }
2475
+ );
2476
+ TabsTrigger.displayName = "TabsTrigger";
2477
+ var TabsContent = React31.forwardRef(
2478
+ ({ className, ...props }, ref) => {
2479
+ return /* @__PURE__ */ jsx(Tabs$1.Panel, { ref, className: clsx14("ds-tabs__content", className), ...props });
2480
+ }
2481
+ );
2482
+ TabsContent.displayName = "TabsContent";
2483
+ var StakeholderTabs = forwardRef(
2484
+ ({
2485
+ eyebrow,
2486
+ title,
2487
+ stakeholders,
2488
+ defaultIndex = 0,
2489
+ className,
2490
+ ...props
2491
+ }, ref) => {
2492
+ return /* @__PURE__ */ jsxs(
2493
+ SectionShell,
2494
+ {
2495
+ ref,
2496
+ className: clsx14("ds-stakeholder-tabs", className),
2497
+ ...props,
2498
+ children: [
2499
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title }),
2500
+ /* @__PURE__ */ jsxs(Tabs, { defaultValue: defaultIndex, children: [
2501
+ /* @__PURE__ */ jsx(TabsList, { className: "ds-stakeholder-tabs__list", children: stakeholders.map((s, i) => /* @__PURE__ */ jsxs(TabsTrigger, { value: i, className: "ds-stakeholder-tabs__trigger", children: [
2502
+ s.icon && /* @__PURE__ */ jsx("span", { className: "ds-stakeholder-tabs__icon", "aria-hidden": "true", children: s.icon }),
2503
+ s.label
2504
+ ] }, i)) }),
2505
+ stakeholders.map((s, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-stakeholder-tabs__content", children: /* @__PURE__ */ jsxs("div", { className: "ds-stakeholder-tabs__panel", children: [
2506
+ /* @__PURE__ */ jsxs("div", { className: "ds-stakeholder-tabs__text", children: [
2507
+ /* @__PURE__ */ jsx("h3", { className: "ds-stakeholder-tabs__headline", children: s.content.headline }),
2508
+ /* @__PURE__ */ jsx("p", { className: "ds-stakeholder-tabs__desc", children: s.content.description }),
2509
+ 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: [
2510
+ f.icon && /* @__PURE__ */ jsx("span", { className: "ds-stakeholder-tabs__feature-icon", "aria-hidden": "true", children: f.icon }),
2511
+ /* @__PURE__ */ jsxs("div", { children: [
2512
+ /* @__PURE__ */ jsx("strong", { children: f.title }),
2513
+ /* @__PURE__ */ jsx("span", { children: f.description })
2514
+ ] })
2515
+ ] }, j)) }),
2516
+ /* @__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 }) }) })
2517
+ ] }),
2518
+ s.content.testimonial && /* @__PURE__ */ jsx("div", { className: "ds-stakeholder-tabs__testimonial", children: s.content.testimonial })
2519
+ ] }) }, i))
2520
+ ] })
2521
+ ]
2522
+ }
2523
+ );
2524
+ }
2525
+ );
2526
+ StakeholderTabs.displayName = "StakeholderTabs";
2527
+ var IntegrationShowcase = forwardRef(
2528
+ ({
2529
+ eyebrow,
2530
+ title,
2531
+ subtitle,
2532
+ integrations,
2533
+ categories,
2534
+ variant = "grid",
2535
+ filterable = !!categories,
2536
+ className,
2537
+ ...props
2538
+ }, ref) => {
2539
+ const [activeCategory, setActiveCategory] = useState("All");
2540
+ const allCategories = categories ?? ["All", ...new Set(integrations.map((i) => i.category))];
2541
+ const filtered = activeCategory === "All" ? integrations : integrations.filter((i) => i.category === activeCategory);
2542
+ return /* @__PURE__ */ jsxs(
2543
+ SectionShell,
2544
+ {
2545
+ ref,
2546
+ className: clsx14("ds-integration-showcase", className),
2547
+ ...props,
2548
+ children: [
2549
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2550
+ filterable && allCategories.length > 1 && /* @__PURE__ */ jsxs(
2551
+ Tabs,
2552
+ {
2553
+ value: allCategories.indexOf(activeCategory),
2554
+ onValueChange: (v) => setActiveCategory(allCategories[v] ?? "All"),
2555
+ children: [
2556
+ /* @__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)) }),
2557
+ allCategories.map((_, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-integration-showcase__tab-content" }, i))
2558
+ ]
2559
+ }
2560
+ ),
2561
+ /* @__PURE__ */ jsx("div", { className: clsx14("ds-integration-showcase__grid", `ds-integration-showcase__grid--${variant}`), children: filtered.map((integration, i) => {
2562
+ const Card = /* @__PURE__ */ jsxs("div", { className: "ds-integration-showcase__card", children: [
2563
+ /* @__PURE__ */ jsx("div", { className: "ds-integration-showcase__logo", children: integration.logo }),
2564
+ /* @__PURE__ */ jsxs("div", { className: "ds-integration-showcase__info", children: [
2565
+ /* @__PURE__ */ jsxs("span", { className: "ds-integration-showcase__name", children: [
2566
+ integration.name,
2567
+ integration.badge && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "ds-integration-showcase__badge", children: integration.badge })
2568
+ ] }),
2569
+ integration.description && variant !== "compact" && /* @__PURE__ */ jsx("span", { className: "ds-integration-showcase__desc", children: integration.description })
2570
+ ] })
2571
+ ] }, i);
2572
+ return integration.href ? /* @__PURE__ */ jsx(OutboundLink, { href: integration.href, context: "integration-showcase-card", className: "ds-integration-showcase__card-link", children: Card }, i) : Card;
2573
+ }) })
2574
+ ]
2575
+ }
2576
+ );
2577
+ }
2578
+ );
2579
+ IntegrationShowcase.displayName = "IntegrationShowcase";
2580
+ var SecurityBlock = forwardRef(
2581
+ ({
2582
+ eyebrow,
2583
+ title,
2584
+ subtitle,
2585
+ certifications,
2586
+ features,
2587
+ variant = "badges",
2588
+ className,
2589
+ ...props
2590
+ }, ref) => {
2591
+ return /* @__PURE__ */ jsxs(
2592
+ SectionShell,
2593
+ {
2594
+ ref,
2595
+ className: clsx14("ds-security-block", className),
2596
+ ...props,
2597
+ children: [
2598
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2599
+ certifications && certifications.length > 0 && /* @__PURE__ */ jsx("div", { className: clsx14("ds-security-block__certs", `ds-security-block__certs--${variant}`), children: certifications.map((cert, i) => {
2600
+ const inner = /* @__PURE__ */ jsxs("div", { className: "ds-security-block__cert", children: [
2601
+ /* @__PURE__ */ jsx("div", { className: "ds-security-block__cert-icon", children: cert.icon }),
2602
+ /* @__PURE__ */ jsxs("div", { className: "ds-security-block__cert-info", children: [
2603
+ /* @__PURE__ */ jsx("span", { className: "ds-security-block__cert-name", children: cert.name }),
2604
+ variant === "detailed" && cert.description && /* @__PURE__ */ jsx("span", { className: "ds-security-block__cert-desc", children: cert.description })
2605
+ ] })
2606
+ ] }, i);
2607
+ return cert.href ? /* @__PURE__ */ jsx(OutboundLink, { href: cert.href, context: "security-block-cert", className: "ds-security-block__cert-link", children: inner }, i) : /* @__PURE__ */ jsx(React31.Fragment, { children: inner }, i);
2608
+ }) }),
2609
+ 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: [
2610
+ feature.icon && /* @__PURE__ */ jsx("span", { className: "ds-security-block__feature-icon", "aria-hidden": "true", children: feature.icon }),
2611
+ /* @__PURE__ */ jsxs("div", { children: [
2612
+ /* @__PURE__ */ jsx("h4", { className: "ds-security-block__feature-title", children: feature.title }),
2613
+ /* @__PURE__ */ jsx("p", { className: "ds-security-block__feature-desc", children: feature.description })
2614
+ ] })
2615
+ ] }, i)) })
2616
+ ]
2617
+ }
2618
+ );
2619
+ }
2620
+ );
2621
+ SecurityBlock.displayName = "SecurityBlock";
2622
+ var CaseStudyCard = forwardRef(
2623
+ ({
2624
+ company,
2625
+ logo,
2626
+ industry,
2627
+ headline,
2628
+ metrics,
2629
+ href,
2630
+ coverImage,
2631
+ quote,
2632
+ className,
2633
+ ...props
2634
+ }, ref) => {
2635
+ return /* @__PURE__ */ jsx(
2636
+ "article",
2637
+ {
2638
+ ref,
2639
+ className: clsx14("ds-case-study-card", className),
2640
+ ...props,
2641
+ children: /* @__PURE__ */ jsxs(OutboundLink, { href, context: "case-study-card", className: "ds-case-study-card__link", openInNewTab: false, children: [
2642
+ coverImage && /* @__PURE__ */ jsx("div", { className: "ds-case-study-card__image-wrap", children: /* @__PURE__ */ jsx(
2643
+ "img",
2644
+ {
2645
+ src: coverImage,
2646
+ alt: "",
2647
+ className: "ds-case-study-card__image",
2648
+ loading: "lazy",
2649
+ decoding: "async"
2650
+ }
2651
+ ) }),
2652
+ /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__body", children: [
2653
+ /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__header", children: [
2654
+ logo && /* @__PURE__ */ jsx("div", { className: "ds-case-study-card__logo", children: logo }),
2655
+ /* @__PURE__ */ jsxs("div", { className: "ds-case-study-card__company-info", children: [
2656
+ /* @__PURE__ */ jsx("span", { className: "ds-case-study-card__company", children: company }),
2657
+ industry && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "ds-case-study-card__industry", children: industry })
2658
+ ] })
2659
+ ] }),
2660
+ /* @__PURE__ */ jsx("h3", { className: "ds-case-study-card__headline", children: headline }),
2661
+ 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: [
2662
+ /* @__PURE__ */ jsxs("span", { className: "ds-case-study-card__metric-value", children: [
2663
+ metric.prefix,
2664
+ metric.value,
2665
+ metric.suffix
2666
+ ] }),
2667
+ /* @__PURE__ */ jsx("span", { className: "ds-case-study-card__metric-label", children: metric.label })
2668
+ ] }, i)) }),
2669
+ quote && /* @__PURE__ */ jsx("blockquote", { className: "ds-case-study-card__quote", children: /* @__PURE__ */ jsxs("p", { children: [
2670
+ "\u201C",
2671
+ quote,
2672
+ "\u201D"
2673
+ ] }) })
2674
+ ] })
2675
+ ] })
2676
+ }
2677
+ );
2678
+ }
2679
+ );
2680
+ CaseStudyCard.displayName = "CaseStudyCard";
2681
+ var CaseStudySection = forwardRef(
2682
+ ({
2683
+ eyebrow,
2684
+ title,
2685
+ subtitle,
2686
+ caseStudies,
2687
+ filterable = false,
2688
+ filters,
2689
+ maxVisible,
2690
+ seeAllHref,
2691
+ className,
2692
+ ...props
2693
+ }, ref) => {
2694
+ const allFilters = filters ?? [
2695
+ "All",
2696
+ ...new Set(caseStudies.map((cs) => cs.industry).filter(Boolean))
2697
+ ];
2698
+ const [activeFilter, setActiveFilter] = useState("All");
2699
+ const filtered = activeFilter === "All" ? caseStudies : caseStudies.filter((cs) => cs.industry === activeFilter);
2700
+ const visible = maxVisible ? filtered.slice(0, maxVisible) : filtered;
2701
+ return /* @__PURE__ */ jsxs(
2702
+ SectionShell,
2703
+ {
2704
+ ref,
2705
+ className: clsx14("ds-case-study-section", className),
2706
+ ...props,
2707
+ children: [
2708
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2709
+ filterable && allFilters.length > 1 && /* @__PURE__ */ jsxs(
2710
+ Tabs,
2711
+ {
2712
+ value: allFilters.indexOf(activeFilter),
2713
+ onValueChange: (v) => setActiveFilter(allFilters[v] ?? "All"),
2714
+ children: [
2715
+ /* @__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)) }),
2716
+ allFilters.map((_, i) => /* @__PURE__ */ jsx(TabsContent, { value: i, className: "ds-case-study-section__tab-content" }, i))
2717
+ ]
2718
+ }
2719
+ ),
2720
+ /* @__PURE__ */ jsx("div", { className: "ds-case-study-section__grid", children: visible.map((cs, i) => /* @__PURE__ */ jsx(CaseStudyCard, { ...cs }, i)) }),
2721
+ 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" }) }) })
2722
+ ]
2723
+ }
2724
+ );
2725
+ }
2726
+ );
2727
+ CaseStudySection.displayName = "CaseStudySection";
2728
+ var STATUS_LABELS2 = {
2729
+ certified: "Certified",
2730
+ "in-progress": "In Progress",
2731
+ planned: "Planned"
2732
+ };
2733
+ var ComplianceGrid = forwardRef(
2734
+ ({
2735
+ eyebrow,
2736
+ title,
2737
+ subtitle,
2738
+ items,
2739
+ className,
2740
+ ...props
2741
+ }, ref) => {
2742
+ return /* @__PURE__ */ jsxs(
2743
+ SectionShell,
2744
+ {
2745
+ ref,
2746
+ className: clsx14("ds-compliance-grid", className),
2747
+ ...props,
2748
+ children: [
2749
+ /* @__PURE__ */ jsx(SectionHeader, { eyebrow, title, subtitle }),
2750
+ /* @__PURE__ */ jsx("div", { className: "ds-compliance-grid__items", children: items.map((item, i) => {
2751
+ const inner = /* @__PURE__ */ jsxs(
2752
+ "div",
2753
+ {
2754
+ className: clsx14(
2755
+ "ds-compliance-grid__item",
2756
+ `ds-compliance-grid__item--${item.status}`
2757
+ ),
2758
+ children: [
2759
+ item.icon && /* @__PURE__ */ jsx("div", { className: "ds-compliance-grid__icon", children: item.icon }),
2760
+ /* @__PURE__ */ jsxs("div", { className: "ds-compliance-grid__info", children: [
2761
+ /* @__PURE__ */ jsx("span", { className: "ds-compliance-grid__name", children: item.name }),
2762
+ /* @__PURE__ */ jsx(
2763
+ Badge,
2764
+ {
2765
+ className: clsx14(
2766
+ "ds-compliance-grid__status",
2767
+ `ds-compliance-grid__status--${item.status}`
2768
+ ),
2769
+ variant: "outline",
2770
+ children: STATUS_LABELS2[item.status]
2771
+ }
2772
+ ),
2773
+ item.description && /* @__PURE__ */ jsx("span", { className: "ds-compliance-grid__desc", children: item.description })
2774
+ ] })
2775
+ ]
2776
+ },
2777
+ i
2778
+ );
2779
+ return item.documentHref ? /* @__PURE__ */ jsx(OutboundLink, { href: item.documentHref, context: "compliance-grid-doc", className: "ds-compliance-grid__link", children: inner }, i) : /* @__PURE__ */ jsx(React31.Fragment, { children: inner }, i);
2780
+ }) })
2781
+ ]
2782
+ }
2783
+ );
2784
+ }
2785
+ );
2786
+ ComplianceGrid.displayName = "ComplianceGrid";
2787
+ var ArchitectureDiagram = forwardRef(
2788
+ ({
2789
+ nodes,
2790
+ connections,
2791
+ direction = "horizontal",
2792
+ className,
2793
+ ...props
2794
+ }, ref) => {
2795
+ const isHorizontal = direction === "horizontal";
2796
+ return /* @__PURE__ */ jsx(
2797
+ "div",
2798
+ {
2799
+ ref,
2800
+ className: clsx14(
2801
+ "ds-architecture",
2802
+ `ds-architecture--${direction}`,
2803
+ className
2804
+ ),
2805
+ role: "img",
2806
+ "aria-label": "Architecture diagram",
2807
+ ...props,
2808
+ children: /* @__PURE__ */ jsx("div", { className: "ds-architecture__nodes", children: nodes.map((node, i) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
2809
+ i > 0 && /* @__PURE__ */ jsxs("div", { className: "ds-architecture__connection", "aria-hidden": "true", children: [
2810
+ /* @__PURE__ */ jsx(
2811
+ "div",
2812
+ {
2813
+ className: clsx14(
2814
+ "ds-architecture__line",
2815
+ connections.find(
2816
+ (c) => c.from === nodes[i - 1]?.id && c.to === node.id
2817
+ )?.animated && "ds-architecture__line--animated"
2818
+ )
2819
+ }
2820
+ ),
2821
+ /* @__PURE__ */ jsx("span", { className: "ds-architecture__arrow", children: isHorizontal ? "\u2192" : "\u2193" }),
2822
+ connections.find(
2823
+ (c) => c.from === nodes[i - 1]?.id && c.to === node.id
2824
+ )?.label && /* @__PURE__ */ jsx("span", { className: "ds-architecture__connection-label", children: connections.find(
2825
+ (c) => c.from === nodes[i - 1]?.id && c.to === node.id
2826
+ )?.label })
2827
+ ] }),
2828
+ /* @__PURE__ */ jsxs(
2829
+ "div",
2830
+ {
2831
+ className: clsx14(
2832
+ "ds-architecture__node",
2833
+ `ds-architecture__node--${node.type}`
2834
+ ),
2835
+ title: node.description,
2836
+ children: [
2837
+ node.icon && /* @__PURE__ */ jsx("span", { className: "ds-architecture__node-icon", "aria-hidden": "true", children: node.icon }),
2838
+ /* @__PURE__ */ jsx("span", { className: "ds-architecture__node-label", children: node.label })
2839
+ ]
2840
+ }
2841
+ )
2842
+ ] }, node.id)) })
2843
+ }
2844
+ );
2845
+ }
2846
+ );
2847
+ ArchitectureDiagram.displayName = "ArchitectureDiagram";
2848
+ function getUtmSegment(param) {
2849
+ if (typeof window === "undefined") return null;
2850
+ const url = new URL(window.location.href);
2851
+ return url.searchParams.get(param);
2852
+ }
2853
+ function getCookieSegment(name) {
2854
+ if (typeof document === "undefined") return null;
2855
+ const match = document.cookie.match(new RegExp(`(?:^|;\\s*)${name}=([^;]*)`));
2856
+ return match ? decodeURIComponent(match[1]) : null;
2857
+ }
2858
+ var SegmentSwitch = forwardRef(
2859
+ ({
2860
+ segment: controlledSegment,
2861
+ segments,
2862
+ fallback = null,
2863
+ source = "manual",
2864
+ utmParam = "utm_segment",
2865
+ cookieName = "ds_segment",
2866
+ className,
2867
+ ...props
2868
+ }, ref) => {
2869
+ const resolvedSegment = useMemo(() => {
2870
+ if (controlledSegment) return controlledSegment;
2871
+ switch (source) {
2872
+ case "utm":
2873
+ return getUtmSegment(utmParam) ?? void 0;
2874
+ case "cookie":
2875
+ return getCookieSegment(cookieName) ?? void 0;
2876
+ default:
2877
+ return void 0;
2878
+ }
2879
+ }, [controlledSegment, source, utmParam, cookieName]);
2880
+ const content = resolvedSegment && segments[resolvedSegment] ? segments[resolvedSegment] : fallback;
2881
+ if (!content) return null;
2882
+ return /* @__PURE__ */ jsx("div", { ref, className: clsx14(className), ...props, children: content });
2883
+ }
2884
+ );
2885
+ SegmentSwitch.displayName = "SegmentSwitch";
2886
+ var BrowserFrame = forwardRef(
2887
+ ({
2888
+ variant = "browser",
2889
+ children,
2890
+ url,
2891
+ showControls,
2892
+ withGlow = false,
2893
+ aspectRatio = "16/9",
2894
+ className,
2895
+ ...props
2896
+ }, ref) => {
2897
+ const hasControls = showControls ?? (variant === "browser" || variant === "app");
2898
+ return /* @__PURE__ */ jsxs(
2899
+ "div",
2900
+ {
2901
+ ref,
2902
+ className: clsx14(
2903
+ "ds-browser-frame",
2904
+ `ds-browser-frame--${variant}`,
2905
+ withGlow && "ds-browser-frame--glow",
2906
+ className
2907
+ ),
2908
+ ...props,
2909
+ children: [
2910
+ variant !== "minimal" && /* @__PURE__ */ jsxs("div", { className: "ds-browser-frame__chrome", children: [
2911
+ hasControls && /* @__PURE__ */ jsxs("div", { className: "ds-browser-frame__controls", "aria-hidden": "true", children: [
2912
+ /* @__PURE__ */ jsx("span", { className: "ds-browser-frame__dot ds-browser-frame__dot--red" }),
2913
+ /* @__PURE__ */ jsx("span", { className: "ds-browser-frame__dot ds-browser-frame__dot--yellow" }),
2914
+ /* @__PURE__ */ jsx("span", { className: "ds-browser-frame__dot ds-browser-frame__dot--green" })
2915
+ ] }),
2916
+ variant === "browser" && url && /* @__PURE__ */ jsxs("div", { className: "ds-browser-frame__url-bar", children: [
2917
+ /* @__PURE__ */ jsxs("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", className: "ds-browser-frame__lock", children: [
2918
+ /* @__PURE__ */ jsx("path", { d: "M3 5V4a3 3 0 116 0v1", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round" }),
2919
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "5", width: "8", height: "6", rx: "1.5", stroke: "currentColor", strokeWidth: "1.2" })
2920
+ ] }),
2921
+ /* @__PURE__ */ jsx("span", { className: "ds-browser-frame__url-text", children: url })
2922
+ ] })
2923
+ ] }),
2924
+ /* @__PURE__ */ jsx(
2925
+ "div",
2926
+ {
2927
+ className: "ds-browser-frame__content",
2928
+ style: aspectRatio !== "auto" ? { aspectRatio } : void 0,
2929
+ children
2930
+ }
2931
+ ),
2932
+ variant === "mobile" && /* @__PURE__ */ jsx("div", { className: "ds-browser-frame__notch", "aria-hidden": "true" })
2933
+ ]
2934
+ }
2935
+ );
2936
+ }
2937
+ );
2938
+ BrowserFrame.displayName = "BrowserFrame";
2939
+ function getEmbedUrl(src, muted = false) {
2940
+ const ytMatch = src.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]+)/);
2941
+ if (ytMatch) {
2942
+ const params = muted ? "autoplay=1&mute=1&rel=0" : "autoplay=1&rel=0";
2943
+ return `https://www.youtube.com/embed/${ytMatch[1]}?${params}`;
2944
+ }
2945
+ const vimeoMatch = src.match(/(?:vimeo\.com\/)(\d+)/);
2946
+ if (vimeoMatch) {
2947
+ const params = muted ? "autoplay=1&muted=1" : "autoplay=1";
2948
+ return `https://player.vimeo.com/video/${vimeoMatch[1]}?${params}`;
2949
+ }
2950
+ const loomMatch = src.match(/(?:loom\.com\/share\/)([a-zA-Z0-9]+)/);
2951
+ if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;
2952
+ return src;
2953
+ }
2954
+ var VideoEmbed = forwardRef(
2955
+ ({
2956
+ src,
2957
+ poster,
2958
+ title,
2959
+ aspectRatio = "16/9",
2960
+ autoPlay = false,
2961
+ withFrame = false,
2962
+ onPlay,
2963
+ className,
2964
+ ...props
2965
+ }, ref) => {
2966
+ const [playing, setPlaying] = useState(false);
2967
+ const containerRef = useRef(null);
2968
+ const handlePlay = useCallback(() => {
2969
+ setPlaying(true);
2970
+ onPlay?.();
2971
+ }, [onPlay]);
2972
+ useEffect(() => {
2973
+ if (!autoPlay || playing) return;
2974
+ if (typeof window === "undefined") return;
2975
+ const motionQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
2976
+ if (motionQuery.matches) return;
2977
+ const target = containerRef.current;
2978
+ if (!target) return;
2979
+ const observer = new IntersectionObserver(
2980
+ ([entry]) => {
2981
+ if (entry.isIntersecting) {
2982
+ handlePlay();
2983
+ observer.disconnect();
2984
+ }
2985
+ },
2986
+ { threshold: 0.5 }
2987
+ );
2988
+ observer.observe(target);
2989
+ return () => observer.disconnect();
2990
+ }, [autoPlay, playing, handlePlay]);
2991
+ const embedContent = /* @__PURE__ */ jsx(
2992
+ "div",
2993
+ {
2994
+ ref: containerRef,
2995
+ className: clsx14("ds-video-embed", withFrame && "ds-video-embed--framed", className),
2996
+ style: { aspectRatio },
2997
+ children: !playing ? /* @__PURE__ */ jsxs(
2998
+ "button",
2999
+ {
3000
+ type: "button",
3001
+ className: "ds-video-embed__poster-btn",
3002
+ onClick: handlePlay,
3003
+ "aria-label": `Play video: ${title}`,
3004
+ children: [
3005
+ poster && /* @__PURE__ */ jsx(
3006
+ "img",
3007
+ {
3008
+ src: poster,
3009
+ alt: "",
3010
+ className: "ds-video-embed__poster",
3011
+ loading: "lazy",
3012
+ decoding: "async"
3013
+ }
3014
+ ),
3015
+ /* @__PURE__ */ jsx("div", { className: "ds-video-embed__overlay" }),
3016
+ /* @__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: [
3017
+ /* @__PURE__ */ jsx("circle", { cx: "24", cy: "24", r: "24", fill: "rgba(0,0,0,0.5)" }),
3018
+ /* @__PURE__ */ jsx("path", { d: "M19 15l14 9-14 9V15z", fill: "white" })
3019
+ ] }) })
3020
+ ]
3021
+ }
3022
+ ) : /* @__PURE__ */ jsx(
3023
+ "iframe",
3024
+ {
3025
+ src: getEmbedUrl(src, autoPlay),
3026
+ title,
3027
+ className: "ds-video-embed__iframe",
3028
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
3029
+ allowFullScreen: true
3030
+ }
3031
+ )
3032
+ }
3033
+ );
3034
+ if (withFrame) {
3035
+ return /* @__PURE__ */ jsx(BrowserFrame, { ref, variant: "browser", url: src, ...props, children: embedContent });
3036
+ }
3037
+ return React31.cloneElement(embedContent, { ref, ...props });
3038
+ }
3039
+ );
3040
+ VideoEmbed.displayName = "VideoEmbed";
3041
+
3042
+ 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 };
12
3043
  //# sourceMappingURL=out.js.map
13
3044
  //# sourceMappingURL=index.js.map