@salesmind-ai/design-system 0.2.1 → 0.3.0

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 (121) hide show
  1. package/dist/AppearancePanel-UT57J69V.d.cts +51 -0
  2. package/dist/AppearancePanel-UT57J69V.d.ts +51 -0
  3. package/dist/AppearanceProvider-C36a8-eb.d.cts +45 -0
  4. package/dist/AppearanceProvider-C36a8-eb.d.ts +45 -0
  5. package/dist/Breadcrumb-RX-B_gDV.d.cts +44 -0
  6. package/dist/Breadcrumb-RX-B_gDV.d.ts +44 -0
  7. package/dist/ExportMenu-A2TLFiVv.d.cts +311 -0
  8. package/dist/ExportMenu-C8qck5AT.d.ts +311 -0
  9. package/dist/SectionShell-BfBw5q0Y.d.cts +18 -0
  10. package/dist/SectionShell-BfBw5q0Y.d.ts +18 -0
  11. package/dist/Select-BdZmK0Lt.d.cts +66 -0
  12. package/dist/Select-BdZmK0Lt.d.ts +66 -0
  13. package/dist/admin/index.cjs +2941 -0
  14. package/dist/admin/index.cjs.map +1 -0
  15. package/dist/admin/index.css +4145 -0
  16. package/dist/admin/index.css.map +1 -0
  17. package/dist/admin/index.d.cts +491 -0
  18. package/dist/admin/index.d.ts +491 -0
  19. package/dist/admin/index.js +2918 -0
  20. package/dist/admin/index.js.map +1 -0
  21. package/dist/{audit-CiyPkxk1.d.cts → audit-BS2fn7M4.d.ts} +2 -51
  22. package/dist/{audit-CiyPkxk1.d.ts → audit-DwCmg32J.d.cts} +2 -51
  23. package/dist/blog/index.cjs +1074 -0
  24. package/dist/blog/index.cjs.map +1 -0
  25. package/dist/blog/index.css +1422 -0
  26. package/dist/blog/index.css.map +1 -0
  27. package/dist/blog/index.d.cts +233 -0
  28. package/dist/blog/index.d.ts +233 -0
  29. package/dist/blog/index.js +1056 -0
  30. package/dist/blog/index.js.map +1 -0
  31. package/dist/chart-types-BGVVO-zl.d.cts +208 -0
  32. package/dist/chart-types-BGVVO-zl.d.ts +208 -0
  33. package/dist/charts/index.cjs +2698 -0
  34. package/dist/charts/index.cjs.map +1 -0
  35. package/dist/charts/index.css +1167 -0
  36. package/dist/charts/index.css.map +1 -0
  37. package/dist/charts/index.d.cts +453 -0
  38. package/dist/charts/index.d.ts +453 -0
  39. package/dist/charts/index.js +2682 -0
  40. package/dist/charts/index.js.map +1 -0
  41. package/dist/core/index.cjs +526 -395
  42. package/dist/core/index.cjs.map +1 -1
  43. package/dist/core/index.css +294 -0
  44. package/dist/core/index.css.map +1 -1
  45. package/dist/core/index.d.cts +7 -982
  46. package/dist/core/index.d.ts +7 -982
  47. package/dist/core/index.js +476 -351
  48. package/dist/core/index.js.map +1 -1
  49. package/dist/i18n/index.cjs +585 -0
  50. package/dist/i18n/index.cjs.map +1 -0
  51. package/dist/i18n/index.d.cts +855 -0
  52. package/dist/i18n/index.d.ts +855 -0
  53. package/dist/i18n/index.js +547 -0
  54. package/dist/i18n/index.js.map +1 -0
  55. package/dist/index.d.cts +22 -1290
  56. package/dist/index.d.ts +22 -1290
  57. package/dist/marketing/index.cjs +2144 -3023
  58. package/dist/marketing/index.cjs.map +1 -1
  59. package/dist/marketing/index.css +3729 -4824
  60. package/dist/marketing/index.css.map +1 -1
  61. package/dist/marketing/index.d.cts +1351 -4
  62. package/dist/marketing/index.d.ts +1351 -4
  63. package/dist/marketing/index.js +2190 -3054
  64. package/dist/marketing/index.js.map +1 -1
  65. package/dist/motion/index.cjs +1230 -0
  66. package/dist/motion/index.cjs.map +1 -0
  67. package/dist/motion/index.css +699 -0
  68. package/dist/motion/index.css.map +1 -0
  69. package/dist/motion/index.d.cts +68 -0
  70. package/dist/motion/index.d.ts +68 -0
  71. package/dist/motion/index.js +1218 -0
  72. package/dist/motion/index.js.map +1 -0
  73. package/dist/nav/index.cjs +1533 -0
  74. package/dist/nav/index.cjs.map +1 -0
  75. package/dist/nav/index.css +1984 -0
  76. package/dist/nav/index.css.map +1 -0
  77. package/dist/nav/index.d.cts +279 -0
  78. package/dist/nav/index.d.ts +279 -0
  79. package/dist/nav/index.js +1501 -0
  80. package/dist/nav/index.js.map +1 -0
  81. package/dist/report/index.cjs +26 -1649
  82. package/dist/report/index.cjs.map +1 -1
  83. package/dist/report/index.css +0 -963
  84. package/dist/report/index.css.map +1 -1
  85. package/dist/report/index.d.cts +4 -2
  86. package/dist/report/index.d.ts +4 -2
  87. package/dist/report/index.js +27 -1640
  88. package/dist/report/index.js.map +1 -1
  89. package/dist/sections/index.cjs +385 -0
  90. package/dist/sections/index.cjs.map +1 -0
  91. package/dist/sections/index.css +818 -0
  92. package/dist/sections/index.css.map +1 -0
  93. package/dist/sections/index.d.cts +69 -0
  94. package/dist/sections/index.d.ts +69 -0
  95. package/dist/sections/index.js +374 -0
  96. package/dist/sections/index.js.map +1 -0
  97. package/dist/social-proof/index.cjs +1254 -0
  98. package/dist/social-proof/index.cjs.map +1 -0
  99. package/dist/social-proof/index.css +1416 -0
  100. package/dist/social-proof/index.css.map +1 -0
  101. package/dist/social-proof/index.d.cts +258 -0
  102. package/dist/social-proof/index.d.ts +258 -0
  103. package/dist/social-proof/index.js +1237 -0
  104. package/dist/social-proof/index.js.map +1 -0
  105. package/dist/theme/index.cjs +573 -0
  106. package/dist/theme/index.cjs.map +1 -0
  107. package/dist/theme/index.css +464 -0
  108. package/dist/theme/index.css.map +1 -0
  109. package/dist/theme/index.d.cts +48 -0
  110. package/dist/theme/index.d.ts +48 -0
  111. package/dist/theme/index.js +558 -0
  112. package/dist/theme/index.js.map +1 -0
  113. package/dist/types-DAlgDGzw.d.cts +52 -0
  114. package/dist/types-DAlgDGzw.d.ts +52 -0
  115. package/dist/web/index.d.cts +3 -2
  116. package/dist/web/index.d.ts +3 -2
  117. package/package.json +68 -9
  118. package/dist/ExportMenu-hEe5MhLq.d.cts +0 -1027
  119. package/dist/ExportMenu-hEe5MhLq.d.ts +0 -1027
  120. package/dist/index-B64suAAc.d.cts +0 -1498
  121. package/dist/index-B64suAAc.d.ts +0 -1498
@@ -0,0 +1,1218 @@
1
+ "use client";
2
+ import React3, { useRef, useState, useEffect, useCallback } from 'react';
3
+ import { useInView, motion, useReducedMotion } from 'framer-motion';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+ import clsx2 from 'clsx';
6
+
7
+ // src/components/Motion/MotionContainer.tsx
8
+
9
+ // src/tokens/motion.ts
10
+ var DURATION = {
11
+ // 150ms
12
+ short: 0.25,
13
+ // 250ms
14
+ medium: 0.5};
15
+ var EASING = {
16
+ standard: [0.16, 1, 0.3, 1]};
17
+ var VARIANTS = {
18
+ fadeIn: {
19
+ hidden: { opacity: 0 },
20
+ visible: { opacity: 1, transition: { duration: DURATION.medium, ease: EASING.standard } }
21
+ },
22
+ staggerContainer: {
23
+ hidden: { opacity: 0 },
24
+ visible: {
25
+ opacity: 1,
26
+ transition: {
27
+ staggerChildren: 0.08,
28
+ delayChildren: 0.1
29
+ }
30
+ }
31
+ }};
32
+ var MOTION = {
33
+ DURATION,
34
+ EASING};
35
+ var MotionContainer = ({
36
+ children,
37
+ viewportMargin = "-10%",
38
+ once = true,
39
+ stagger = false,
40
+ delay = 0,
41
+ className,
42
+ ...props
43
+ }) => {
44
+ const ref = useRef(null);
45
+ const isInView = useInView(ref, {
46
+ once,
47
+ margin: viewportMargin
48
+ });
49
+ const variants = stagger ? VARIANTS.staggerContainer : VARIANTS.fadeIn;
50
+ return /* @__PURE__ */ jsx(
51
+ motion.div,
52
+ {
53
+ ref,
54
+ initial: "hidden",
55
+ animate: isInView ? "visible" : "hidden",
56
+ variants,
57
+ transition: { delay },
58
+ className,
59
+ ...props,
60
+ children
61
+ }
62
+ );
63
+ };
64
+ var MotionText = ({
65
+ text,
66
+ type = "word",
67
+ highlightWords = [],
68
+ className,
69
+ ...props
70
+ }) => {
71
+ const items = type === "word" ? text.split(" ") : text.split("");
72
+ const containerVariants = {
73
+ hidden: { opacity: 0 },
74
+ visible: {
75
+ opacity: 1,
76
+ transition: {
77
+ staggerChildren: type === "word" ? 0.05 : 0.02,
78
+ delayChildren: 0.1
79
+ }
80
+ }
81
+ };
82
+ const itemVariants = {
83
+ hidden: { opacity: 0, y: 10 },
84
+ visible: {
85
+ opacity: 1,
86
+ y: 0,
87
+ transition: { duration: MOTION.DURATION.short, ease: MOTION.EASING.standard }
88
+ }
89
+ };
90
+ return /* @__PURE__ */ jsx(
91
+ motion.div,
92
+ {
93
+ variants: containerVariants,
94
+ initial: "hidden",
95
+ whileInView: "visible",
96
+ viewport: { once: true, margin: "-10%" },
97
+ className,
98
+ ...props,
99
+ style: {
100
+ display: "flex",
101
+ flexWrap: "wrap",
102
+ gap: type === "word" ? "0.25em" : "0.05em",
103
+ ...props.style
104
+ },
105
+ children: items.map((item, i) => {
106
+ const isHighlighted = highlightWords.includes(item.replace(/[^a-zA-Z0-9]/g, ""));
107
+ return /* @__PURE__ */ jsxs(
108
+ motion.span,
109
+ {
110
+ variants: itemVariants,
111
+ style: {
112
+ color: isHighlighted ? "var(--brand-pink)" : "inherit",
113
+ fontWeight: isHighlighted ? 600 : "inherit"
114
+ },
115
+ children: [
116
+ item,
117
+ type === "word" && "\xA0"
118
+ ]
119
+ },
120
+ i
121
+ );
122
+ })
123
+ }
124
+ );
125
+ };
126
+ var CursorSpotlight = ({
127
+ children,
128
+ color = "var(--accent-rgb)",
129
+ size = 400,
130
+ opacity = 0.15,
131
+ borderGlow = true,
132
+ className,
133
+ disabled = false
134
+ }) => {
135
+ const containerRef = useRef(null);
136
+ const [position, setPosition] = useState({ x: 0, y: 0 });
137
+ const [isHovering, setIsHovering] = useState(false);
138
+ const [reducedMotion, setReducedMotion] = useState(false);
139
+ useEffect(() => {
140
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
141
+ setReducedMotion(mediaQuery.matches);
142
+ const handler = (e) => setReducedMotion(e.matches);
143
+ mediaQuery.addEventListener("change", handler);
144
+ return () => mediaQuery.removeEventListener("change", handler);
145
+ }, []);
146
+ const isDisabled = disabled || reducedMotion;
147
+ const handleMouseMove = useCallback(
148
+ (e) => {
149
+ if (!containerRef.current || isDisabled) return;
150
+ const rect = containerRef.current.getBoundingClientRect();
151
+ setPosition({
152
+ x: e.clientX - rect.left,
153
+ y: e.clientY - rect.top
154
+ });
155
+ },
156
+ [isDisabled]
157
+ );
158
+ const handleMouseEnter = useCallback(() => {
159
+ if (!isDisabled) setIsHovering(true);
160
+ }, [isDisabled]);
161
+ const handleMouseLeave = useCallback(() => {
162
+ setIsHovering(false);
163
+ }, []);
164
+ useEffect(() => {
165
+ const container = containerRef.current;
166
+ if (!container || isDisabled) return;
167
+ container.addEventListener("mousemove", handleMouseMove);
168
+ container.addEventListener("mouseenter", handleMouseEnter);
169
+ container.addEventListener("mouseleave", handleMouseLeave);
170
+ return () => {
171
+ container.removeEventListener("mousemove", handleMouseMove);
172
+ container.removeEventListener("mouseenter", handleMouseEnter);
173
+ container.removeEventListener("mouseleave", handleMouseLeave);
174
+ };
175
+ }, [handleMouseMove, handleMouseEnter, handleMouseLeave, isDisabled]);
176
+ const spotlightColor = color.startsWith("var(") ? `rgba(${color.replace("var(", "").replace(")", "")}, ${opacity})` : color.includes(",") ? `rgba(${color}, ${opacity})` : color;
177
+ const borderColor = color.startsWith("var(") ? `rgba(${color.replace("var(", "").replace(")", "")}, 0.5)` : color.includes(",") ? `rgba(${color}, 0.5)` : color;
178
+ return /* @__PURE__ */ jsxs(
179
+ "div",
180
+ {
181
+ ref: containerRef,
182
+ className: `ds-cursor-spotlight ${className || ""}`,
183
+ style: {
184
+ "--spotlight-x": `${position.x}px`,
185
+ "--spotlight-y": `${position.y}px`,
186
+ "--spotlight-size": `${size}px`,
187
+ "--spotlight-color": spotlightColor,
188
+ "--spotlight-border-color": borderColor,
189
+ "--spotlight-opacity": isHovering ? 1 : 0
190
+ },
191
+ "data-hovering": isHovering,
192
+ "data-border-glow": borderGlow,
193
+ children: [
194
+ /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__glow", "aria-hidden": "true" }),
195
+ borderGlow && /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__border", "aria-hidden": "true" }),
196
+ /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__content", children })
197
+ ]
198
+ }
199
+ );
200
+ };
201
+ CursorSpotlight.displayName = "CursorSpotlight";
202
+ var SpotlightCard = ({
203
+ title,
204
+ description,
205
+ icon,
206
+ children,
207
+ onClick,
208
+ ...spotlightProps
209
+ }) => {
210
+ return /* @__PURE__ */ jsx(CursorSpotlight, { ...spotlightProps, className: "ds-spotlight-card", children: /* @__PURE__ */ jsxs(
211
+ "div",
212
+ {
213
+ className: "ds-spotlight-card__inner",
214
+ onClick,
215
+ role: onClick ? "button" : void 0,
216
+ tabIndex: onClick ? 0 : void 0,
217
+ onKeyDown: onClick ? (e) => {
218
+ if (e.key === "Enter" || e.key === " ") {
219
+ e.preventDefault();
220
+ onClick();
221
+ }
222
+ } : void 0,
223
+ children: [
224
+ icon && /* @__PURE__ */ jsx("div", { className: "ds-spotlight-card__icon", children: icon }),
225
+ title && /* @__PURE__ */ jsx("h3", { className: "ds-spotlight-card__title", children: title }),
226
+ description && /* @__PURE__ */ jsx("p", { className: "ds-spotlight-card__description", children: description }),
227
+ children
228
+ ]
229
+ }
230
+ ) });
231
+ };
232
+ SpotlightCard.displayName = "SpotlightCard";
233
+ var steps = [
234
+ {
235
+ id: "test",
236
+ label: "Test Audience & Messaging",
237
+ icon: /* @__PURE__ */ jsx(
238
+ "svg",
239
+ {
240
+ width: "24",
241
+ height: "24",
242
+ viewBox: "0 0 24 24",
243
+ fill: "none",
244
+ xmlns: "http://www.w3.org/2000/svg",
245
+ children: /* @__PURE__ */ jsx(
246
+ "path",
247
+ {
248
+ d: "M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z",
249
+ stroke: "currentColor",
250
+ strokeWidth: "2",
251
+ strokeLinecap: "round",
252
+ strokeLinejoin: "round"
253
+ }
254
+ )
255
+ }
256
+ )
257
+ },
258
+ {
259
+ id: "execute",
260
+ label: "Execute Outreach",
261
+ icon: /* @__PURE__ */ jsx(
262
+ "svg",
263
+ {
264
+ width: "24",
265
+ height: "24",
266
+ viewBox: "0 0 24 24",
267
+ fill: "none",
268
+ xmlns: "http://www.w3.org/2000/svg",
269
+ children: /* @__PURE__ */ jsx(
270
+ "path",
271
+ {
272
+ d: "M22 2L11 13M22 2L15 22L11 13M11 13L2 9L22 2Z",
273
+ stroke: "currentColor",
274
+ strokeWidth: "2",
275
+ strokeLinecap: "round",
276
+ strokeLinejoin: "round"
277
+ }
278
+ )
279
+ }
280
+ )
281
+ },
282
+ {
283
+ id: "results",
284
+ label: "Book Meetings",
285
+ icon: /* @__PURE__ */ jsx(
286
+ "svg",
287
+ {
288
+ width: "24",
289
+ height: "24",
290
+ viewBox: "0 0 24 24",
291
+ fill: "none",
292
+ xmlns: "http://www.w3.org/2000/svg",
293
+ children: /* @__PURE__ */ jsx(
294
+ "path",
295
+ {
296
+ d: "M8 7V3M16 7V3M7 11H17M5 21H19C20.1046 21 21 20.1046 21 19V7C21 5.89543 20.1046 5 19 5H5C3.89543 5 3 5.89543 3 7V19C3 20.1046 3.89543 21 5 21Z",
297
+ stroke: "currentColor",
298
+ strokeWidth: "2",
299
+ strokeLinecap: "round",
300
+ strokeLinejoin: "round"
301
+ }
302
+ )
303
+ }
304
+ )
305
+ }
306
+ ];
307
+ var RevenueAutomationLoop = ({ className }) => {
308
+ return /* @__PURE__ */ jsx("div", { className: clsx2("ds-revenue-loop", className), children: /* @__PURE__ */ jsxs("div", { className: "ds-revenue-loop__circle", children: [
309
+ /* @__PURE__ */ jsxs(
310
+ "svg",
311
+ {
312
+ className: "ds-revenue-loop__ring",
313
+ viewBox: "0 0 400 400",
314
+ fill: "none",
315
+ xmlns: "http://www.w3.org/2000/svg",
316
+ children: [
317
+ /* @__PURE__ */ jsxs("defs", { children: [
318
+ /* @__PURE__ */ jsxs("linearGradient", { id: "loopGradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
319
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
320
+ /* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "var(--brand-yellow)" }),
321
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-pink)" })
322
+ ] }),
323
+ /* @__PURE__ */ jsx(
324
+ "marker",
325
+ {
326
+ id: "arrowhead",
327
+ markerWidth: "10",
328
+ markerHeight: "7",
329
+ refX: "9",
330
+ refY: "3.5",
331
+ orient: "auto",
332
+ children: /* @__PURE__ */ jsx("polygon", { points: "0 0, 10 3.5, 0 7", fill: "url(#loopGradient)" })
333
+ }
334
+ )
335
+ ] }),
336
+ /* @__PURE__ */ jsx(
337
+ "circle",
338
+ {
339
+ cx: "200",
340
+ cy: "200",
341
+ r: "190",
342
+ stroke: "var(--rim-light-bottom)",
343
+ strokeWidth: "1",
344
+ strokeDasharray: "4 4",
345
+ className: "ds-revenue-loop__track"
346
+ }
347
+ ),
348
+ /* @__PURE__ */ jsx(
349
+ motion.circle,
350
+ {
351
+ cx: "200",
352
+ cy: "200",
353
+ r: "190",
354
+ stroke: "url(#loopGradient)",
355
+ strokeWidth: "2",
356
+ fill: "none",
357
+ strokeLinecap: "round",
358
+ initial: { pathLength: 0, rotate: -90 },
359
+ animate: { pathLength: 1, rotate: -90 },
360
+ transition: {
361
+ duration: 4,
362
+ ease: "linear",
363
+ repeat: Infinity
364
+ }
365
+ }
366
+ )
367
+ ]
368
+ }
369
+ ),
370
+ /* @__PURE__ */ jsxs("div", { className: "ds-revenue-loop__hub", children: [
371
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__hub-glow" }),
372
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__hub-content", children: /* @__PURE__ */ jsx("span", { className: "ds-revenue-loop__logo", children: "AI" }) })
373
+ ] }),
374
+ steps.map((step, index) => {
375
+ const angle = index * 360 / steps.length - 90;
376
+ const radius = 190;
377
+ const x = 200 + radius * Math.cos(angle * Math.PI / 180);
378
+ const y = 200 + radius * Math.sin(angle * Math.PI / 180);
379
+ return /* @__PURE__ */ jsxs(
380
+ motion.div,
381
+ {
382
+ className: "ds-revenue-loop__node",
383
+ style: {
384
+ left: `${x / 400 * 100}%`,
385
+ top: `${y / 400 * 100}%`
386
+ },
387
+ initial: { opacity: 0, scale: 0.8 },
388
+ animate: { opacity: 1, scale: 1 },
389
+ transition: { delay: index * 0.5 },
390
+ children: [
391
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__icon", children: step.icon }),
392
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__label", children: step.label })
393
+ ]
394
+ },
395
+ step.id
396
+ );
397
+ })
398
+ ] }) });
399
+ };
400
+ var EASE_PREMIUM = [0.22, 1, 0.36, 1];
401
+ var SCENE_TIMING = {
402
+ init: 0,
403
+ funnel: 1500,
404
+ qualification: 3500,
405
+ meeting: 5500,
406
+ mapping: 6500,
407
+ scaling: 8500
408
+ };
409
+ var HOLD_DURATION = 1200;
410
+ var TOTAL_DURATION = 1e4 + HOLD_DURATION;
411
+ var LINKEDIN_STEPS = [
412
+ { id: "follow", label: "Profile Follow" },
413
+ { id: "visit", label: "Profile Visit" },
414
+ { id: "connect", label: "Connection Request" },
415
+ { id: "msg1", label: "Message 1" },
416
+ { id: "msg2", label: "Message 2" },
417
+ { id: "msg3", label: "Message 3" }
418
+ ];
419
+ var FUNNEL_STAGES = [
420
+ { id: "awareness", label: "Awareness", num: 1 },
421
+ { id: "discovery", label: "Discovery", num: 2 },
422
+ { id: "evaluation", label: "Evaluation", num: 3 },
423
+ { id: "intent", label: "Intent", num: 4 },
424
+ { id: "negotiation", label: "Negotiation", num: 5 },
425
+ { id: "purchase", label: "Purchase", num: 6 }
426
+ ];
427
+ var WINNING_BULLETS = [
428
+ "Target audience validated & segmented",
429
+ "Messaging sequence A/B tested",
430
+ "Optimal send times confirmed",
431
+ "Response rate > benchmark threshold",
432
+ "Conversion path verified end-to-end"
433
+ ];
434
+ var SCALING_CHECKS = [
435
+ "Volume multiplied to 9 senders",
436
+ "All sequences templated & locked",
437
+ "Auto-qualification active",
438
+ "Meeting pipeline on autopilot"
439
+ ];
440
+ var AntSVG = ({ size = 28, className }) => /* @__PURE__ */ jsxs(
441
+ "svg",
442
+ {
443
+ className,
444
+ width: size,
445
+ height: size,
446
+ viewBox: "0 0 28 28",
447
+ fill: "none",
448
+ xmlns: "http://www.w3.org/2000/svg",
449
+ "aria-hidden": "true",
450
+ children: [
451
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: "antGrad", x1: "0", y1: "0", x2: "28", y2: "28", gradientUnits: "userSpaceOnUse", children: [
452
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
453
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
454
+ ] }) }),
455
+ /* @__PURE__ */ jsx("circle", { cx: "14", cy: "6", r: "4", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
456
+ /* @__PURE__ */ jsx(
457
+ "line",
458
+ {
459
+ x1: "11",
460
+ y1: "3",
461
+ x2: "7",
462
+ y2: "0.5",
463
+ stroke: "rgba(255,255,255,0.1)",
464
+ strokeWidth: "1",
465
+ strokeLinecap: "round"
466
+ }
467
+ ),
468
+ /* @__PURE__ */ jsx(
469
+ "line",
470
+ {
471
+ x1: "17",
472
+ y1: "3",
473
+ x2: "21",
474
+ y2: "0.5",
475
+ stroke: "rgba(255,255,255,0.1)",
476
+ strokeWidth: "1",
477
+ strokeLinecap: "round"
478
+ }
479
+ ),
480
+ /* @__PURE__ */ jsx("ellipse", { cx: "14", cy: "13", rx: "3.5", ry: "3", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
481
+ /* @__PURE__ */ jsx("ellipse", { cx: "14", cy: "22", rx: "5", ry: "5", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
482
+ /* @__PURE__ */ jsx(
483
+ "line",
484
+ {
485
+ x1: "10.5",
486
+ y1: "11",
487
+ x2: "5",
488
+ y2: "9",
489
+ stroke: "rgba(255,255,255,0.1)",
490
+ strokeWidth: "0.8",
491
+ strokeLinecap: "round"
492
+ }
493
+ ),
494
+ /* @__PURE__ */ jsx(
495
+ "line",
496
+ {
497
+ x1: "17.5",
498
+ y1: "11",
499
+ x2: "23",
500
+ y2: "9",
501
+ stroke: "rgba(255,255,255,0.1)",
502
+ strokeWidth: "0.8",
503
+ strokeLinecap: "round"
504
+ }
505
+ ),
506
+ /* @__PURE__ */ jsx(
507
+ "line",
508
+ {
509
+ x1: "10.5",
510
+ y1: "13",
511
+ x2: "4",
512
+ y2: "14",
513
+ stroke: "rgba(255,255,255,0.1)",
514
+ strokeWidth: "0.8",
515
+ strokeLinecap: "round"
516
+ }
517
+ ),
518
+ /* @__PURE__ */ jsx(
519
+ "line",
520
+ {
521
+ x1: "17.5",
522
+ y1: "13",
523
+ x2: "24",
524
+ y2: "14",
525
+ stroke: "rgba(255,255,255,0.1)",
526
+ strokeWidth: "0.8",
527
+ strokeLinecap: "round"
528
+ }
529
+ ),
530
+ /* @__PURE__ */ jsx(
531
+ "line",
532
+ {
533
+ x1: "10.5",
534
+ y1: "15",
535
+ x2: "5",
536
+ y2: "18",
537
+ stroke: "rgba(255,255,255,0.1)",
538
+ strokeWidth: "0.8",
539
+ strokeLinecap: "round"
540
+ }
541
+ ),
542
+ /* @__PURE__ */ jsx(
543
+ "line",
544
+ {
545
+ x1: "17.5",
546
+ y1: "15",
547
+ x2: "23",
548
+ y2: "18",
549
+ stroke: "rgba(255,255,255,0.1)",
550
+ strokeWidth: "0.8",
551
+ strokeLinecap: "round"
552
+ }
553
+ ),
554
+ /* @__PURE__ */ jsx("circle", { cx: "12.5", cy: "5.5", r: "0.8", fill: "url(#antGrad)" }),
555
+ /* @__PURE__ */ jsx("circle", { cx: "15.5", cy: "5.5", r: "0.8", fill: "url(#antGrad)" })
556
+ ]
557
+ }
558
+ );
559
+ var SwarmAntSVG = () => /* @__PURE__ */ jsxs(
560
+ "svg",
561
+ {
562
+ width: "16",
563
+ height: "16",
564
+ viewBox: "0 0 16 16",
565
+ fill: "none",
566
+ xmlns: "http://www.w3.org/2000/svg",
567
+ "aria-hidden": "true",
568
+ children: [
569
+ /* @__PURE__ */ jsx("circle", { cx: "8", cy: "3.5", r: "2.5", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" }),
570
+ /* @__PURE__ */ jsx("ellipse", { cx: "8", cy: "8", rx: "2", ry: "1.8", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" }),
571
+ /* @__PURE__ */ jsx("ellipse", { cx: "8", cy: "13", rx: "3", ry: "3", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" })
572
+ ]
573
+ }
574
+ );
575
+ var CalendarIcon = () => /* @__PURE__ */ jsxs(
576
+ "svg",
577
+ {
578
+ width: "20",
579
+ height: "20",
580
+ viewBox: "0 0 20 20",
581
+ fill: "none",
582
+ xmlns: "http://www.w3.org/2000/svg",
583
+ "aria-hidden": "true",
584
+ children: [
585
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "4", width: "16", height: "14", rx: "2", stroke: "currentColor", strokeWidth: "1.5" }),
586
+ /* @__PURE__ */ jsx("line", { x1: "2", y1: "8", x2: "18", y2: "8", stroke: "currentColor", strokeWidth: "1.5" }),
587
+ /* @__PURE__ */ jsx(
588
+ "line",
589
+ {
590
+ x1: "6",
591
+ y1: "2",
592
+ x2: "6",
593
+ y2: "6",
594
+ stroke: "currentColor",
595
+ strokeWidth: "1.5",
596
+ strokeLinecap: "round"
597
+ }
598
+ ),
599
+ /* @__PURE__ */ jsx(
600
+ "line",
601
+ {
602
+ x1: "14",
603
+ y1: "2",
604
+ x2: "14",
605
+ y2: "6",
606
+ stroke: "currentColor",
607
+ strokeWidth: "1.5",
608
+ strokeLinecap: "round"
609
+ }
610
+ ),
611
+ /* @__PURE__ */ jsx("rect", { x: "5", y: "10", width: "3", height: "3", rx: "0.5", fill: "currentColor", opacity: "0.5" })
612
+ ]
613
+ }
614
+ );
615
+ var LockIcon = () => /* @__PURE__ */ jsxs(
616
+ "svg",
617
+ {
618
+ width: "12",
619
+ height: "12",
620
+ viewBox: "0 0 12 12",
621
+ fill: "none",
622
+ xmlns: "http://www.w3.org/2000/svg",
623
+ "aria-hidden": "true",
624
+ children: [
625
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "5", width: "8", height: "6", rx: "1.5", stroke: "currentColor", strokeWidth: "1.2" }),
626
+ /* @__PURE__ */ jsx(
627
+ "path",
628
+ {
629
+ d: "M4 5V3.5C4 2.4 4.9 1.5 6 1.5C7.1 1.5 8 2.4 8 3.5V5",
630
+ stroke: "currentColor",
631
+ strokeWidth: "1.2",
632
+ strokeLinecap: "round"
633
+ }
634
+ )
635
+ ]
636
+ }
637
+ );
638
+ var CheckIcon = () => /* @__PURE__ */ jsxs(
639
+ "svg",
640
+ {
641
+ className: "ds-funnel-scaling__scaling-check",
642
+ width: "14",
643
+ height: "14",
644
+ viewBox: "0 0 14 14",
645
+ fill: "none",
646
+ xmlns: "http://www.w3.org/2000/svg",
647
+ "aria-hidden": "true",
648
+ children: [
649
+ /* @__PURE__ */ jsx("circle", { cx: "7", cy: "7", r: "6", stroke: "currentColor", strokeWidth: "1.2" }),
650
+ /* @__PURE__ */ jsx(
651
+ "polyline",
652
+ {
653
+ points: "4,7 6,9.5 10,4.5",
654
+ stroke: "currentColor",
655
+ strokeWidth: "1.4",
656
+ strokeLinecap: "round",
657
+ strokeLinejoin: "round",
658
+ fill: "none"
659
+ }
660
+ )
661
+ ]
662
+ }
663
+ );
664
+ var NodeDot = () => /* @__PURE__ */ jsxs(
665
+ "svg",
666
+ {
667
+ className: "ds-funnel-scaling__flow-icon",
668
+ width: "20",
669
+ height: "20",
670
+ viewBox: "0 0 20 20",
671
+ fill: "none",
672
+ xmlns: "http://www.w3.org/2000/svg",
673
+ "aria-hidden": "true",
674
+ children: [
675
+ /* @__PURE__ */ jsx("circle", { cx: "10", cy: "10", r: "4", stroke: "currentColor", strokeWidth: "1.5" }),
676
+ /* @__PURE__ */ jsx("circle", { cx: "10", cy: "10", r: "1.5", fill: "currentColor" })
677
+ ]
678
+ }
679
+ );
680
+ var containerStagger = {
681
+ hidden: { opacity: 0 },
682
+ show: {
683
+ opacity: 1,
684
+ transition: { staggerChildren: 0.1 }
685
+ }
686
+ };
687
+ var cardReveal = {
688
+ hidden: { opacity: 0, y: 40 },
689
+ show: {
690
+ opacity: 1,
691
+ y: 0,
692
+ transition: { duration: 0.6, ease: EASE_PREMIUM }
693
+ }
694
+ };
695
+ var bulletStagger = {
696
+ hidden: { opacity: 0, x: -8 },
697
+ show: {
698
+ opacity: 1,
699
+ x: 0,
700
+ transition: { duration: 0.3, ease: EASE_PREMIUM }
701
+ }
702
+ };
703
+ var stepNode = {
704
+ hidden: { opacity: 0, scaleY: 0.85 },
705
+ show: {
706
+ opacity: 1,
707
+ scaleY: 1,
708
+ transition: { duration: 0.35, ease: EASE_PREMIUM }
709
+ }
710
+ };
711
+ var funnelLayer = {
712
+ hidden: { opacity: 0, y: 20 },
713
+ show: {
714
+ opacity: 1,
715
+ y: 0,
716
+ transition: { duration: 0.4, ease: EASE_PREMIUM }
717
+ }
718
+ };
719
+ var fadeSlideUp = {
720
+ hidden: { opacity: 0, y: 30 },
721
+ show: {
722
+ opacity: 1,
723
+ y: 0,
724
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
725
+ }
726
+ };
727
+ var scalePulse = {
728
+ hidden: { scale: 1 },
729
+ show: {
730
+ scale: [1, 1.04, 1],
731
+ transition: { duration: 0.6, ease: EASE_PREMIUM }
732
+ }
733
+ };
734
+ var swarmEntry = {
735
+ hidden: { opacity: 0, scale: 0.8 },
736
+ show: {
737
+ opacity: 1,
738
+ scale: 1,
739
+ transition: { duration: 0.35, ease: EASE_PREMIUM }
740
+ }
741
+ };
742
+ var qualBlockLeft = {
743
+ hidden: { opacity: 0, x: -60 },
744
+ show: {
745
+ opacity: 1,
746
+ x: 0,
747
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
748
+ }
749
+ };
750
+ var qualBlockRight = {
751
+ hidden: { opacity: 0, x: 60 },
752
+ show: {
753
+ opacity: 1,
754
+ x: 0,
755
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
756
+ }
757
+ };
758
+ function useSceneTimeline(isInView, autoPlay, loop, reducedMotion) {
759
+ const [scene, setScene] = useState("idle");
760
+ const timerRef = useRef([]);
761
+ const clearTimers = useCallback(() => {
762
+ timerRef.current.forEach(clearTimeout);
763
+ timerRef.current = [];
764
+ }, []);
765
+ const startTimeline = useCallback(() => {
766
+ clearTimers();
767
+ const scenes = [
768
+ "init",
769
+ "funnel",
770
+ "qualification",
771
+ "meeting",
772
+ "mapping",
773
+ "scaling"
774
+ ];
775
+ if (reducedMotion) {
776
+ setScene("scaling");
777
+ return;
778
+ }
779
+ scenes.forEach((s) => {
780
+ const id = setTimeout(() => setScene(s), SCENE_TIMING[s]);
781
+ timerRef.current.push(id);
782
+ });
783
+ if (loop) {
784
+ const loopId = setTimeout(() => {
785
+ setScene("idle");
786
+ const restartId = setTimeout(() => startTimeline(), 100);
787
+ timerRef.current.push(restartId);
788
+ }, TOTAL_DURATION);
789
+ timerRef.current.push(loopId);
790
+ }
791
+ }, [clearTimers, loop, reducedMotion]);
792
+ useEffect(() => {
793
+ if (isInView && autoPlay) {
794
+ startTimeline();
795
+ }
796
+ return clearTimers;
797
+ }, [isInView, autoPlay, startTimeline, clearTimers]);
798
+ return scene;
799
+ }
800
+ function isAtOrPast(current, target) {
801
+ const order = [
802
+ "idle",
803
+ "init",
804
+ "funnel",
805
+ "qualification",
806
+ "meeting",
807
+ "mapping",
808
+ "scaling"
809
+ ];
810
+ return order.indexOf(current) >= order.indexOf(target);
811
+ }
812
+ var FunnelScalingSender = ({
813
+ className,
814
+ autoPlay = true,
815
+ loop = true
816
+ }) => {
817
+ const containerRef = useRef(null);
818
+ const isInView = useInView(containerRef, { once: false, amount: 0.3 });
819
+ const reducedMotion = useReducedMotion();
820
+ const scene = useSceneTimeline(isInView, autoPlay, loop, reducedMotion);
821
+ const isActive = scene !== "idle";
822
+ const showInit = isAtOrPast(scene, "init");
823
+ const showFunnel = isAtOrPast(scene, "funnel");
824
+ const showQualification = isAtOrPast(scene, "qualification");
825
+ const showMeeting = isAtOrPast(scene, "meeting");
826
+ const showMapping = isAtOrPast(scene, "mapping");
827
+ const showScaling = isAtOrPast(scene, "scaling");
828
+ return /* @__PURE__ */ jsxs(
829
+ "div",
830
+ {
831
+ ref: containerRef,
832
+ className: clsx2("ds-funnel-scaling", className),
833
+ role: "img",
834
+ "aria-label": "Animated illustration: SalesMind scaling funnel from the sender perspective \u2014 showing how validated outreach becomes an automated pipeline machine",
835
+ children: [
836
+ /* @__PURE__ */ jsx(
837
+ motion.div,
838
+ {
839
+ className: "ds-funnel-scaling__bg",
840
+ initial: { opacity: 0 },
841
+ animate: { opacity: isActive ? 1 : 0 },
842
+ transition: { duration: 0.4 }
843
+ }
844
+ ),
845
+ /* @__PURE__ */ jsx(
846
+ motion.div,
847
+ {
848
+ className: "ds-funnel-scaling__grid",
849
+ initial: { opacity: 0 },
850
+ animate: { opacity: isActive ? 1 : 0 },
851
+ transition: { duration: 0.4, delay: 0.6 }
852
+ }
853
+ ),
854
+ /* @__PURE__ */ jsx("svg", { width: "0", height: "0", "aria-hidden": "true", style: { position: "absolute" }, children: /* @__PURE__ */ jsxs("defs", { children: [
855
+ /* @__PURE__ */ jsxs("linearGradient", { id: "antGrad", x1: "0", y1: "0", x2: "28", y2: "28", gradientUnits: "userSpaceOnUse", children: [
856
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
857
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
858
+ ] }),
859
+ /* @__PURE__ */ jsxs("linearGradient", { id: "fscFlowGrad", x1: "0", y1: "0", x2: "0", y2: "1", children: [
860
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
861
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
862
+ ] }),
863
+ /* @__PURE__ */ jsxs("linearGradient", { id: "fscQualGrad", x1: "0", y1: "0", x2: "1", y2: "1", children: [
864
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
865
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
866
+ ] })
867
+ ] }) }),
868
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__canvas", children: [
869
+ /* @__PURE__ */ jsxs(
870
+ motion.div,
871
+ {
872
+ className: "ds-funnel-scaling__winning-card",
873
+ variants: cardReveal,
874
+ initial: "hidden",
875
+ animate: showInit ? "show" : "hidden",
876
+ children: [
877
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__winning-header", children: "Solution" }),
878
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__winning-title", children: "Winning Combination" }),
879
+ /* @__PURE__ */ jsx(
880
+ motion.ul,
881
+ {
882
+ className: "ds-funnel-scaling__winning-bullets",
883
+ variants: containerStagger,
884
+ initial: "hidden",
885
+ animate: showInit ? "show" : "hidden",
886
+ children: WINNING_BULLETS.map((bullet) => /* @__PURE__ */ jsx(
887
+ motion.li,
888
+ {
889
+ className: "ds-funnel-scaling__winning-bullet",
890
+ variants: bulletStagger,
891
+ children: bullet
892
+ },
893
+ bullet
894
+ ))
895
+ }
896
+ ),
897
+ /* @__PURE__ */ jsxs(
898
+ motion.div,
899
+ {
900
+ className: "ds-funnel-scaling__winning-lock",
901
+ initial: { opacity: 0 },
902
+ animate: { opacity: showInit ? 1 : 0 },
903
+ transition: { delay: 0.8, duration: 0.4 },
904
+ children: [
905
+ /* @__PURE__ */ jsx(LockIcon, {}),
906
+ " Validated & Locked"
907
+ ]
908
+ }
909
+ )
910
+ ]
911
+ }
912
+ ),
913
+ /* @__PURE__ */ jsxs(
914
+ motion.div,
915
+ {
916
+ className: "ds-funnel-scaling__flow",
917
+ variants: containerStagger,
918
+ initial: "hidden",
919
+ animate: showFunnel ? "show" : "hidden",
920
+ children: [
921
+ LINKEDIN_STEPS.map((step, i) => /* @__PURE__ */ jsxs(React3.Fragment, { children: [
922
+ /* @__PURE__ */ jsxs(
923
+ motion.div,
924
+ {
925
+ className: clsx2(
926
+ "ds-funnel-scaling__flow-node",
927
+ showFunnel && "ds-funnel-scaling__flow-node--active"
928
+ ),
929
+ variants: stepNode,
930
+ custom: i,
931
+ children: [
932
+ /* @__PURE__ */ jsx(NodeDot, {}),
933
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__flow-label", children: step.label })
934
+ ]
935
+ }
936
+ ),
937
+ i < LINKEDIN_STEPS.length - 1 && /* @__PURE__ */ jsx(
938
+ motion.svg,
939
+ {
940
+ className: "ds-funnel-scaling__flow-connector",
941
+ width: "2",
942
+ height: "12",
943
+ viewBox: "0 0 2 12",
944
+ initial: { scaleY: 0, opacity: 0 },
945
+ animate: showFunnel ? { scaleY: 1, opacity: 1 } : { scaleY: 0, opacity: 0 },
946
+ transition: { duration: 0.3, delay: 0.1 * (i + 1), ease: EASE_PREMIUM },
947
+ style: { transformOrigin: "top" },
948
+ children: /* @__PURE__ */ jsx("rect", { width: "2", height: "12", fill: "url(#fscFlowGrad)", rx: "1" })
949
+ }
950
+ )
951
+ ] }, step.id)),
952
+ showFunnel && /* @__PURE__ */ jsx("div", { style: { position: "relative", height: 0 }, children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
953
+ motion.div,
954
+ {
955
+ className: "ds-funnel-scaling__ant ds-funnel-scaling__ant--ghost",
956
+ initial: { opacity: 0, x: -20 + i * 15, y: -10 },
957
+ animate: showFunnel ? { opacity: 0.35, x: -10 + i * 18, y: 0 } : { opacity: 0 },
958
+ transition: { delay: 1.2 + i * 0.15, duration: 0.4, ease: EASE_PREMIUM },
959
+ style: { position: "absolute" },
960
+ children: /* @__PURE__ */ jsx(AntSVG, { size: 20 })
961
+ },
962
+ `ghost-${i}`
963
+ )) })
964
+ ]
965
+ }
966
+ ),
967
+ /* @__PURE__ */ jsxs(
968
+ motion.div,
969
+ {
970
+ className: "ds-funnel-scaling__qualification",
971
+ initial: { opacity: 0, scale: 0.9 },
972
+ animate: showQualification ? { opacity: 1, scale: 1 } : { opacity: 0, scale: 0.9 },
973
+ transition: { duration: 0.6, ease: EASE_PREMIUM },
974
+ children: [
975
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__qual-ring", children: [
976
+ /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 180 180", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
977
+ /* @__PURE__ */ jsx("circle", { cx: "90", cy: "90", r: "70", stroke: "rgba(255,255,255,0.06)", strokeWidth: "1" }),
978
+ /* @__PURE__ */ jsx(
979
+ motion.circle,
980
+ {
981
+ cx: "90",
982
+ cy: "90",
983
+ r: "70",
984
+ stroke: "url(#fscQualGrad)",
985
+ strokeWidth: "2",
986
+ fill: "none",
987
+ strokeLinecap: "round",
988
+ strokeDasharray: "440",
989
+ initial: { strokeDashoffset: 440 },
990
+ animate: showQualification ? { strokeDashoffset: 0 } : { strokeDashoffset: 440 },
991
+ transition: { duration: 0.8, ease: EASE_PREMIUM }
992
+ }
993
+ ),
994
+ /* @__PURE__ */ jsx(
995
+ motion.polygon,
996
+ {
997
+ points: "155,80 165,90 155,100",
998
+ fill: "var(--brand-pink)",
999
+ initial: { opacity: 0 },
1000
+ animate: showQualification ? { opacity: 0.7 } : { opacity: 0 },
1001
+ transition: { delay: 0.6, duration: 0.3 }
1002
+ }
1003
+ ),
1004
+ /* @__PURE__ */ jsx(
1005
+ motion.polygon,
1006
+ {
1007
+ points: "25,100 15,90 25,80",
1008
+ fill: "var(--brand-yellow)",
1009
+ initial: { opacity: 0 },
1010
+ animate: showQualification ? { opacity: 0.7 } : { opacity: 0 },
1011
+ transition: { delay: 0.7, duration: 0.3 }
1012
+ }
1013
+ )
1014
+ ] }),
1015
+ /* @__PURE__ */ jsx(
1016
+ motion.div,
1017
+ {
1018
+ className: "ds-funnel-scaling__qual-center",
1019
+ initial: { opacity: 0 },
1020
+ animate: showQualification ? { opacity: 1 } : { opacity: 0 },
1021
+ transition: { delay: 0.8, duration: 0.4 },
1022
+ children: /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__qual-text", children: "Qualification happens during the conversation" })
1023
+ }
1024
+ ),
1025
+ showQualification && !reducedMotion && /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: showScaling ? 9 : 3 }).map((_, i) => /* @__PURE__ */ jsx(
1026
+ motion.div,
1027
+ {
1028
+ className: "ds-funnel-scaling__swarm-ant",
1029
+ variants: swarmEntry,
1030
+ initial: "hidden",
1031
+ animate: "show",
1032
+ transition: { delay: i * 0.08 },
1033
+ style: {
1034
+ animationDelay: `${-(i * (3 / (showScaling ? 9 : 3)))}s`
1035
+ },
1036
+ children: /* @__PURE__ */ jsx(SwarmAntSVG, {})
1037
+ },
1038
+ `swarm-${i}`
1039
+ )) })
1040
+ ] }),
1041
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__qual-blocks", children: [
1042
+ /* @__PURE__ */ jsx(
1043
+ motion.div,
1044
+ {
1045
+ className: "ds-funnel-scaling__qual-block",
1046
+ variants: qualBlockLeft,
1047
+ initial: "hidden",
1048
+ animate: showQualification ? "show" : "hidden",
1049
+ children: "Reply Handling"
1050
+ }
1051
+ ),
1052
+ /* @__PURE__ */ jsx(
1053
+ motion.div,
1054
+ {
1055
+ className: "ds-funnel-scaling__qual-block",
1056
+ variants: qualBlockRight,
1057
+ initial: "hidden",
1058
+ animate: showQualification ? "show" : "hidden",
1059
+ children: "Follow-up Sequence"
1060
+ }
1061
+ )
1062
+ ] })
1063
+ ]
1064
+ }
1065
+ ),
1066
+ /* @__PURE__ */ jsxs(
1067
+ motion.div,
1068
+ {
1069
+ className: "ds-funnel-scaling__funnel",
1070
+ variants: containerStagger,
1071
+ initial: "hidden",
1072
+ animate: showMapping ? "show" : "hidden",
1073
+ children: [
1074
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__funnel-header", children: "Sales Funnel Stages" }),
1075
+ FUNNEL_STAGES.map((stage) => {
1076
+ const isHighlight = stage.id === "evaluation" || stage.id === "intent";
1077
+ const isDim = showMapping && !isHighlight;
1078
+ return /* @__PURE__ */ jsxs(
1079
+ motion.div,
1080
+ {
1081
+ className: clsx2(
1082
+ "ds-funnel-scaling__funnel-stage",
1083
+ isHighlight && showMapping && "ds-funnel-scaling__funnel-stage--highlight",
1084
+ isDim && "ds-funnel-scaling__funnel-stage--dim"
1085
+ ),
1086
+ variants: funnelLayer,
1087
+ children: [
1088
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__funnel-num", children: stage.num }),
1089
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__funnel-label", children: stage.label })
1090
+ ]
1091
+ },
1092
+ stage.id
1093
+ );
1094
+ })
1095
+ ]
1096
+ }
1097
+ )
1098
+ ] }),
1099
+ /* @__PURE__ */ jsx(
1100
+ motion.div,
1101
+ {
1102
+ className: "ds-funnel-scaling__meeting",
1103
+ variants: fadeSlideUp,
1104
+ initial: "hidden",
1105
+ animate: showMeeting ? "show" : "hidden",
1106
+ children: /* @__PURE__ */ jsxs(
1107
+ motion.div,
1108
+ {
1109
+ variants: scalePulse,
1110
+ initial: "hidden",
1111
+ animate: showMeeting ? "show" : "hidden",
1112
+ style: { display: "flex", alignItems: "center", gap: "12px" },
1113
+ children: [
1114
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__meeting-icon", children: /* @__PURE__ */ jsx(CalendarIcon, {}) }),
1115
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__meeting-label", children: "Meeting Booked" })
1116
+ ]
1117
+ }
1118
+ )
1119
+ }
1120
+ ),
1121
+ showMeeting && showMapping && /* @__PURE__ */ jsxs(
1122
+ motion.svg,
1123
+ {
1124
+ className: "ds-funnel-scaling__data-line",
1125
+ style: { right: 240, bottom: 80, width: 120, height: 200 },
1126
+ viewBox: "0 0 120 200",
1127
+ initial: { opacity: 0 },
1128
+ animate: { opacity: 0.4 },
1129
+ transition: { delay: 0.3, duration: 0.5 },
1130
+ children: [
1131
+ /* @__PURE__ */ jsx(
1132
+ motion.path,
1133
+ {
1134
+ d: "M 0 200 C 20 150, 80 100, 120 40",
1135
+ stroke: "url(#fscFlowGrad)",
1136
+ strokeWidth: "1.5",
1137
+ fill: "none",
1138
+ strokeLinecap: "round",
1139
+ initial: { pathLength: 0 },
1140
+ animate: { pathLength: 1 },
1141
+ transition: { duration: 0.8, ease: EASE_PREMIUM, delay: 0.2 }
1142
+ }
1143
+ ),
1144
+ /* @__PURE__ */ jsx(
1145
+ motion.circle,
1146
+ {
1147
+ cx: "120",
1148
+ cy: "40",
1149
+ r: "3",
1150
+ fill: "var(--brand-pink)",
1151
+ initial: { opacity: 0, scale: 0 },
1152
+ animate: { opacity: 1, scale: 1 },
1153
+ transition: { delay: 1, duration: 0.3 }
1154
+ }
1155
+ )
1156
+ ]
1157
+ }
1158
+ ),
1159
+ /* @__PURE__ */ jsxs(
1160
+ motion.div,
1161
+ {
1162
+ className: "ds-funnel-scaling__scaling-panel",
1163
+ initial: { opacity: 0, y: 20 },
1164
+ animate: showScaling ? { opacity: 1, y: 0 } : { opacity: 0, y: 20 },
1165
+ transition: { duration: 0.5, ease: EASE_PREMIUM },
1166
+ children: [
1167
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__scaling-header", children: [
1168
+ /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M6 1L11 6L6 11L1 6Z", stroke: "currentColor", strokeWidth: "1.2" }) }),
1169
+ "Scaling Mode"
1170
+ ] }),
1171
+ SCALING_CHECKS.map((item, i) => /* @__PURE__ */ jsxs(
1172
+ motion.div,
1173
+ {
1174
+ className: "ds-funnel-scaling__scaling-item",
1175
+ initial: { opacity: 0, x: -10 },
1176
+ animate: showScaling ? { opacity: 1, x: 0 } : { opacity: 0, x: -10 },
1177
+ transition: { delay: 0.15 + i * 0.12, duration: 0.35, ease: EASE_PREMIUM },
1178
+ children: [
1179
+ /* @__PURE__ */ jsx(
1180
+ motion.div,
1181
+ {
1182
+ initial: { scale: 0 },
1183
+ animate: showScaling ? { scale: 1 } : { scale: 0 },
1184
+ transition: { delay: 0.25 + i * 0.12, duration: 0.3, ease: EASE_PREMIUM },
1185
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
1186
+ }
1187
+ ),
1188
+ item
1189
+ ]
1190
+ },
1191
+ item
1192
+ ))
1193
+ ]
1194
+ }
1195
+ ),
1196
+ /* @__PURE__ */ jsx(
1197
+ motion.div,
1198
+ {
1199
+ className: "ds-funnel-scaling__ant",
1200
+ initial: { opacity: 0, x: -40, y: 100 },
1201
+ animate: showScaling ? { opacity: 1, x: 280, y: 60 } : showMapping ? { opacity: 1, x: 240, y: 160 } : showMeeting ? { opacity: 1, x: 400, y: 280 } : showQualification ? { opacity: 1, x: 380, y: 200 } : showFunnel ? { opacity: 1, x: 320, y: 40 } : showInit ? { opacity: 1, x: 220, y: 30 } : { opacity: 0, x: -40, y: 100 },
1202
+ transition: {
1203
+ duration: 0.8,
1204
+ ease: EASE_PREMIUM,
1205
+ opacity: { duration: 0.4 }
1206
+ },
1207
+ children: /* @__PURE__ */ jsx(AntSVG, {})
1208
+ }
1209
+ )
1210
+ ]
1211
+ }
1212
+ );
1213
+ };
1214
+ FunnelScalingSender.displayName = "FunnelScalingSender";
1215
+
1216
+ export { CursorSpotlight, FunnelScalingSender, MotionContainer, MotionText, RevenueAutomationLoop, SpotlightCard };
1217
+ //# sourceMappingURL=out.js.map
1218
+ //# sourceMappingURL=index.js.map