@salesmind-ai/design-system 0.3.2 → 0.3.4

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