@salesmind-ai/design-system 0.3.2 → 0.3.4

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