@salesmind-ai/design-system 0.3.1 → 0.3.3

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 (197) hide show
  1. package/dist/admin/index.cjs +68 -2928
  2. package/dist/admin/index.cjs.map +1 -1
  3. package/dist/admin/index.js +5 -2915
  4. package/dist/admin/index.js.map +1 -1
  5. package/dist/blog/index.cjs +53 -1064
  6. package/dist/blog/index.cjs.map +1 -1
  7. package/dist/blog/index.js +8 -1054
  8. package/dist/blog/index.js.map +1 -1
  9. package/dist/charts/index.cjs +46 -2694
  10. package/dist/charts/index.cjs.map +1 -1
  11. package/dist/charts/index.js +3 -2680
  12. package/dist/charts/index.js.map +1 -1
  13. package/dist/chunk-2GARWEJK.js +17 -0
  14. package/dist/chunk-2GARWEJK.js.map +1 -0
  15. package/dist/chunk-3NKRFUAR.js +37 -0
  16. package/dist/chunk-3NKRFUAR.js.map +1 -0
  17. package/dist/chunk-3TGSIILM.cjs +201 -0
  18. package/dist/chunk-3TGSIILM.cjs.map +1 -0
  19. package/dist/chunk-4GM5BGBN.cjs +801 -0
  20. package/dist/chunk-4GM5BGBN.cjs.map +1 -0
  21. package/dist/chunk-5LGDEZWY.cjs +2434 -0
  22. package/dist/chunk-5LGDEZWY.cjs.map +1 -0
  23. package/dist/chunk-6H4DSTXR.js +786 -0
  24. package/dist/chunk-6H4DSTXR.js.map +1 -0
  25. package/dist/chunk-6UNG76Y2.js +153 -0
  26. package/dist/chunk-6UNG76Y2.js.map +1 -0
  27. package/dist/chunk-7PX2AZ6Y.js +39 -0
  28. package/dist/chunk-7PX2AZ6Y.js.map +1 -0
  29. package/dist/chunk-B6AVAX4F.js +1415 -0
  30. package/dist/chunk-B6AVAX4F.js.map +1 -0
  31. package/dist/chunk-BILT5KD3.js +264 -0
  32. package/dist/chunk-BILT5KD3.js.map +1 -0
  33. package/dist/chunk-C2BCDNAV.js +24 -0
  34. package/dist/chunk-C2BCDNAV.js.map +1 -0
  35. package/dist/chunk-CH42VPWE.cjs +421 -0
  36. package/dist/chunk-CH42VPWE.cjs.map +1 -0
  37. package/dist/chunk-CJ2MKVAF.cjs +46 -0
  38. package/dist/chunk-CJ2MKVAF.cjs.map +1 -0
  39. package/dist/chunk-DP74LUXG.cjs +98 -0
  40. package/dist/chunk-DP74LUXG.cjs.map +1 -0
  41. package/dist/chunk-E7D6EKJ4.cjs +44 -0
  42. package/dist/chunk-E7D6EKJ4.cjs.map +1 -0
  43. package/dist/chunk-ECXBTUH6.cjs +584 -0
  44. package/dist/chunk-ECXBTUH6.cjs.map +1 -0
  45. package/dist/chunk-EFRAP5ES.js +157 -0
  46. package/dist/chunk-EFRAP5ES.js.map +1 -0
  47. package/dist/chunk-F6YYWMME.js +485 -0
  48. package/dist/chunk-F6YYWMME.js.map +1 -0
  49. package/dist/chunk-FAFAP4L5.js +183 -0
  50. package/dist/chunk-FAFAP4L5.js.map +1 -0
  51. package/dist/chunk-GUZIMHWS.js +1608 -0
  52. package/dist/chunk-GUZIMHWS.js.map +1 -0
  53. package/dist/chunk-H2Y6BSTL.cjs +69 -0
  54. package/dist/chunk-H2Y6BSTL.cjs.map +1 -0
  55. package/dist/chunk-HN4PHABT.js +126 -0
  56. package/dist/chunk-HN4PHABT.js.map +1 -0
  57. package/dist/chunk-HRENHNDJ.js +211 -0
  58. package/dist/chunk-HRENHNDJ.js.map +1 -0
  59. package/dist/chunk-I75BFEYT.cjs +2561 -0
  60. package/dist/chunk-I75BFEYT.cjs.map +1 -0
  61. package/dist/chunk-IFRATNLU.js +562 -0
  62. package/dist/chunk-IFRATNLU.js.map +1 -0
  63. package/dist/chunk-IYPXJ6YC.cjs +69 -0
  64. package/dist/chunk-IYPXJ6YC.cjs.map +1 -0
  65. package/dist/chunk-JPJN4YBC.js +409 -0
  66. package/dist/chunk-JPJN4YBC.js.map +1 -0
  67. package/dist/chunk-KBA2LFBG.js +62 -0
  68. package/dist/chunk-KBA2LFBG.js.map +1 -0
  69. package/dist/chunk-KCKUSU2M.cjs +166 -0
  70. package/dist/chunk-KCKUSU2M.cjs.map +1 -0
  71. package/dist/chunk-KJ2OXQF4.js +287 -0
  72. package/dist/chunk-KJ2OXQF4.js.map +1 -0
  73. package/dist/chunk-KNQEIU7O.cjs +1202 -0
  74. package/dist/chunk-KNQEIU7O.cjs.map +1 -0
  75. package/dist/chunk-KVGSVGRK.cjs +569 -0
  76. package/dist/chunk-KVGSVGRK.cjs.map +1 -0
  77. package/dist/chunk-L352JRV6.cjs +105 -0
  78. package/dist/chunk-L352JRV6.cjs.map +1 -0
  79. package/dist/chunk-LJADZITX.cjs +298 -0
  80. package/dist/chunk-LJADZITX.cjs.map +1 -0
  81. package/dist/chunk-LMJPWXTZ.cjs +194 -0
  82. package/dist/chunk-LMJPWXTZ.cjs.map +1 -0
  83. package/dist/chunk-LOWEAQST.js +701 -0
  84. package/dist/chunk-LOWEAQST.js.map +1 -0
  85. package/dist/chunk-MDB2WCRQ.cjs +137 -0
  86. package/dist/chunk-MDB2WCRQ.cjs.map +1 -0
  87. package/dist/chunk-MQDEE7HC.cjs +283 -0
  88. package/dist/chunk-MQDEE7HC.cjs.map +1 -0
  89. package/dist/chunk-MQRB634A.cjs +34 -0
  90. package/dist/chunk-MQRB634A.cjs.map +1 -0
  91. package/dist/chunk-MTI27RDV.js +185 -0
  92. package/dist/chunk-MTI27RDV.js.map +1 -0
  93. package/dist/chunk-MU6GW5ZV.js +2317 -0
  94. package/dist/chunk-MU6GW5ZV.js.map +1 -0
  95. package/dist/chunk-NN3TUHIH.js +28 -0
  96. package/dist/chunk-NN3TUHIH.js.map +1 -0
  97. package/dist/chunk-NT4LBP7D.cjs +111 -0
  98. package/dist/chunk-NT4LBP7D.cjs.map +1 -0
  99. package/dist/chunk-OLV7OD3X.cjs +502 -0
  100. package/dist/chunk-OLV7OD3X.cjs.map +1 -0
  101. package/dist/chunk-OXNXEQY7.js +2538 -0
  102. package/dist/chunk-OXNXEQY7.js.map +1 -0
  103. package/dist/chunk-P5BOFE5A.js +546 -0
  104. package/dist/chunk-P5BOFE5A.js.map +1 -0
  105. package/dist/chunk-Q2MFGYTE.cjs +1449 -0
  106. package/dist/chunk-Q2MFGYTE.cjs.map +1 -0
  107. package/dist/chunk-Q75DBVDY.cjs +68 -0
  108. package/dist/chunk-Q75DBVDY.cjs.map +1 -0
  109. package/dist/chunk-REQ5Q6ZI.js +1022 -0
  110. package/dist/chunk-REQ5Q6ZI.js.map +1 -0
  111. package/dist/chunk-SICKWUWB.js +62 -0
  112. package/dist/chunk-SICKWUWB.js.map +1 -0
  113. package/dist/chunk-T343CCH5.js +1190 -0
  114. package/dist/chunk-T343CCH5.js.map +1 -0
  115. package/dist/chunk-TEC62D4A.cjs +1624 -0
  116. package/dist/chunk-TEC62D4A.cjs.map +1 -0
  117. package/dist/chunk-TW5JB35D.js +2122 -0
  118. package/dist/chunk-TW5JB35D.js.map +1 -0
  119. package/dist/chunk-VC5LMUVQ.cjs +20 -0
  120. package/dist/chunk-VC5LMUVQ.cjs.map +1 -0
  121. package/dist/chunk-VM7WFMKI.cjs +76 -0
  122. package/dist/chunk-VM7WFMKI.cjs.map +1 -0
  123. package/dist/chunk-W2WTP6HS.cjs +233 -0
  124. package/dist/chunk-W2WTP6HS.cjs.map +1 -0
  125. package/dist/chunk-WH7PYHZY.cjs +35 -0
  126. package/dist/chunk-WH7PYHZY.cjs.map +1 -0
  127. package/dist/chunk-XQZVY7JJ.cjs +717 -0
  128. package/dist/chunk-XQZVY7JJ.cjs.map +1 -0
  129. package/dist/chunk-XU3OMQ7V.js +98 -0
  130. package/dist/chunk-XU3OMQ7V.js.map +1 -0
  131. package/dist/chunk-XWPDRMZG.js +62 -0
  132. package/dist/chunk-XWPDRMZG.js.map +1 -0
  133. package/dist/chunk-Y3CPKNB7.js +67 -0
  134. package/dist/chunk-Y3CPKNB7.js.map +1 -0
  135. package/dist/chunk-YNVRDD2P.js +98 -0
  136. package/dist/chunk-YNVRDD2P.js.map +1 -0
  137. package/dist/chunk-YSYR54XR.js +92 -0
  138. package/dist/chunk-YSYR54XR.js.map +1 -0
  139. package/dist/chunk-YTYDQBVY.cjs +162 -0
  140. package/dist/chunk-YTYDQBVY.cjs.map +1 -0
  141. package/dist/chunk-ZDLOA2UT.cjs +1042 -0
  142. package/dist/chunk-ZDLOA2UT.cjs.map +1 -0
  143. package/dist/chunk-ZWUKRCOJ.cjs +2162 -0
  144. package/dist/chunk-ZWUKRCOJ.cjs.map +1 -0
  145. package/dist/core/index.cjs +807 -4333
  146. package/dist/core/index.cjs.map +1 -1
  147. package/dist/core/index.js +14 -4130
  148. package/dist/core/index.js.map +1 -1
  149. package/dist/i18n/index.cjs +86 -558
  150. package/dist/i18n/index.cjs.map +1 -1
  151. package/dist/i18n/index.js +1 -544
  152. package/dist/i18n/index.js.map +1 -1
  153. package/dist/index.cjs +1432 -17140
  154. package/dist/index.cjs.map +1 -1
  155. package/dist/index.js +31 -16785
  156. package/dist/index.js.map +1 -1
  157. package/dist/marketing/index.cjs +142 -3072
  158. package/dist/marketing/index.cjs.map +1 -1
  159. package/dist/marketing/index.js +11 -3042
  160. package/dist/marketing/index.js.map +1 -1
  161. package/dist/motion/index.cjs +26 -1222
  162. package/dist/motion/index.cjs.map +1 -1
  163. package/dist/motion/index.js +2 -1215
  164. package/dist/motion/index.js.map +1 -1
  165. package/dist/nav/index.cjs +101 -1518
  166. package/dist/nav/index.cjs.map +1 -1
  167. package/dist/nav/index.js +4 -1498
  168. package/dist/nav/index.js.map +1 -1
  169. package/dist/report/index.cjs +171 -2403
  170. package/dist/report/index.cjs.map +1 -1
  171. package/dist/report/index.js +3 -2363
  172. package/dist/report/index.js.map +1 -1
  173. package/dist/sections/index.cjs +28 -378
  174. package/dist/sections/index.cjs.map +1 -1
  175. package/dist/sections/index.js +4 -372
  176. package/dist/sections/index.js.map +1 -1
  177. package/dist/social-proof/index.cjs +53 -1250
  178. package/dist/social-proof/index.cjs.map +1 -1
  179. package/dist/social-proof/index.js +6 -1235
  180. package/dist/social-proof/index.js.map +1 -1
  181. package/dist/theme/index.cjs +38 -565
  182. package/dist/theme/index.cjs.map +1 -1
  183. package/dist/theme/index.js +2 -555
  184. package/dist/theme/index.js.map +1 -1
  185. package/dist/web/client/index.cjs +38 -491
  186. package/dist/web/client/index.cjs.map +1 -1
  187. package/dist/web/client/index.js +4 -483
  188. package/dist/web/client/index.js.map +1 -1
  189. package/dist/web/index.cjs +158 -1346
  190. package/dist/web/index.cjs.map +1 -1
  191. package/dist/web/index.js +9 -1305
  192. package/dist/web/index.js.map +1 -1
  193. package/dist/web/server/index.cjs +26 -563
  194. package/dist/web/server/index.cjs.map +1 -1
  195. package/dist/web/server/index.js +1 -560
  196. package/dist/web/server/index.js.map +1 -1
  197. package/package.json +11 -1
@@ -1,3084 +1,154 @@
1
1
  'use strict';
2
2
 
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');
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');
11
14
 
12
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
15
 
14
- var React31__default = /*#__PURE__*/_interopDefault(React31);
15
- var clsx14__default = /*#__PURE__*/_interopDefault(clsx14);
16
16
 
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
- }
17
+ Object.defineProperty(exports, "AnnouncementBar", {
18
+ enumerable: true,
19
+ get: function () { return chunkZWUKRCOJ_cjs.AnnouncementBar; }
133
20
  });
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
- );
21
+ Object.defineProperty(exports, "ArchitectureDiagram", {
22
+ enumerable: true,
23
+ get: function () { return chunkZWUKRCOJ_cjs.ArchitectureDiagram; }
192
24
  });
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
- }
25
+ Object.defineProperty(exports, "BeforeAfterBlock", {
26
+ enumerable: true,
27
+ get: function () { return chunkZWUKRCOJ_cjs.BeforeAfterBlock; }
2182
28
  });
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
- );
29
+ Object.defineProperty(exports, "BookingEmbed", {
30
+ enumerable: true,
31
+ get: function () { return chunkZWUKRCOJ_cjs.BookingEmbed; }
2227
32
  });
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 });
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; }
144
+ });
145
+ Object.defineProperty(exports, "ValueAnchor", {
146
+ enumerable: true,
147
+ get: function () { return chunkZWUKRCOJ_cjs.ValueAnchor; }
148
+ });
149
+ Object.defineProperty(exports, "VideoEmbed", {
150
+ enumerable: true,
151
+ get: function () { return chunkZWUKRCOJ_cjs.VideoEmbed; }
2233
152
  });
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;
3083
153
  //# sourceMappingURL=out.js.map
3084
154
  //# sourceMappingURL=index.cjs.map