@salesmind-ai/design-system 0.3.0 → 0.3.2

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 (212) hide show
  1. package/README.md +32 -2
  2. package/dist/admin/index.cjs +68 -2928
  3. package/dist/admin/index.cjs.map +1 -1
  4. package/dist/admin/index.js +5 -2915
  5. package/dist/admin/index.js.map +1 -1
  6. package/dist/blog/index.cjs +53 -1064
  7. package/dist/blog/index.cjs.map +1 -1
  8. package/dist/blog/index.js +8 -1054
  9. package/dist/blog/index.js.map +1 -1
  10. package/dist/charts/index.cjs +46 -2694
  11. package/dist/charts/index.cjs.map +1 -1
  12. package/dist/charts/index.js +3 -2680
  13. package/dist/charts/index.js.map +1 -1
  14. package/dist/chunk-2GARWEJK.js +17 -0
  15. package/dist/chunk-2GARWEJK.js.map +1 -0
  16. package/dist/chunk-3NKRFUAR.js +37 -0
  17. package/dist/chunk-3NKRFUAR.js.map +1 -0
  18. package/dist/chunk-3TGSIILM.cjs +201 -0
  19. package/dist/chunk-3TGSIILM.cjs.map +1 -0
  20. package/dist/chunk-4GM5BGBN.cjs +801 -0
  21. package/dist/chunk-4GM5BGBN.cjs.map +1 -0
  22. package/dist/chunk-5LGDEZWY.cjs +2434 -0
  23. package/dist/chunk-5LGDEZWY.cjs.map +1 -0
  24. package/dist/chunk-6H4DSTXR.js +786 -0
  25. package/dist/chunk-6H4DSTXR.js.map +1 -0
  26. package/dist/chunk-6UNG76Y2.js +153 -0
  27. package/dist/chunk-6UNG76Y2.js.map +1 -0
  28. package/dist/chunk-7PX2AZ6Y.js +39 -0
  29. package/dist/chunk-7PX2AZ6Y.js.map +1 -0
  30. package/dist/chunk-B6AVAX4F.js +1415 -0
  31. package/dist/chunk-B6AVAX4F.js.map +1 -0
  32. package/dist/chunk-BILT5KD3.js +264 -0
  33. package/dist/chunk-BILT5KD3.js.map +1 -0
  34. package/dist/chunk-C2BCDNAV.js +24 -0
  35. package/dist/chunk-C2BCDNAV.js.map +1 -0
  36. package/dist/chunk-CH42VPWE.cjs +421 -0
  37. package/dist/chunk-CH42VPWE.cjs.map +1 -0
  38. package/dist/chunk-CJ2MKVAF.cjs +46 -0
  39. package/dist/chunk-CJ2MKVAF.cjs.map +1 -0
  40. package/dist/chunk-DP74LUXG.cjs +98 -0
  41. package/dist/chunk-DP74LUXG.cjs.map +1 -0
  42. package/dist/chunk-E7D6EKJ4.cjs +44 -0
  43. package/dist/chunk-E7D6EKJ4.cjs.map +1 -0
  44. package/dist/chunk-ECXBTUH6.cjs +584 -0
  45. package/dist/chunk-ECXBTUH6.cjs.map +1 -0
  46. package/dist/chunk-EFRAP5ES.js +157 -0
  47. package/dist/chunk-EFRAP5ES.js.map +1 -0
  48. package/dist/chunk-F6YYWMME.js +485 -0
  49. package/dist/chunk-F6YYWMME.js.map +1 -0
  50. package/dist/chunk-FAFAP4L5.js +183 -0
  51. package/dist/chunk-FAFAP4L5.js.map +1 -0
  52. package/dist/chunk-GUZIMHWS.js +1608 -0
  53. package/dist/chunk-GUZIMHWS.js.map +1 -0
  54. package/dist/chunk-H2Y6BSTL.cjs +69 -0
  55. package/dist/chunk-H2Y6BSTL.cjs.map +1 -0
  56. package/dist/chunk-HN4PHABT.js +126 -0
  57. package/dist/chunk-HN4PHABT.js.map +1 -0
  58. package/dist/chunk-HRENHNDJ.js +211 -0
  59. package/dist/chunk-HRENHNDJ.js.map +1 -0
  60. package/dist/chunk-I75BFEYT.cjs +2561 -0
  61. package/dist/chunk-I75BFEYT.cjs.map +1 -0
  62. package/dist/chunk-IFRATNLU.js +562 -0
  63. package/dist/chunk-IFRATNLU.js.map +1 -0
  64. package/dist/chunk-IYPXJ6YC.cjs +69 -0
  65. package/dist/chunk-IYPXJ6YC.cjs.map +1 -0
  66. package/dist/chunk-JPJN4YBC.js +409 -0
  67. package/dist/chunk-JPJN4YBC.js.map +1 -0
  68. package/dist/chunk-KBA2LFBG.js +62 -0
  69. package/dist/chunk-KBA2LFBG.js.map +1 -0
  70. package/dist/chunk-KCKUSU2M.cjs +166 -0
  71. package/dist/chunk-KCKUSU2M.cjs.map +1 -0
  72. package/dist/chunk-KJ2OXQF4.js +287 -0
  73. package/dist/chunk-KJ2OXQF4.js.map +1 -0
  74. package/dist/chunk-KNQEIU7O.cjs +1202 -0
  75. package/dist/chunk-KNQEIU7O.cjs.map +1 -0
  76. package/dist/chunk-KVGSVGRK.cjs +569 -0
  77. package/dist/chunk-KVGSVGRK.cjs.map +1 -0
  78. package/dist/chunk-L352JRV6.cjs +105 -0
  79. package/dist/chunk-L352JRV6.cjs.map +1 -0
  80. package/dist/chunk-LJADZITX.cjs +298 -0
  81. package/dist/chunk-LJADZITX.cjs.map +1 -0
  82. package/dist/chunk-LMJPWXTZ.cjs +194 -0
  83. package/dist/chunk-LMJPWXTZ.cjs.map +1 -0
  84. package/dist/chunk-LOWEAQST.js +701 -0
  85. package/dist/chunk-LOWEAQST.js.map +1 -0
  86. package/dist/chunk-MDB2WCRQ.cjs +137 -0
  87. package/dist/chunk-MDB2WCRQ.cjs.map +1 -0
  88. package/dist/chunk-MQDEE7HC.cjs +283 -0
  89. package/dist/chunk-MQDEE7HC.cjs.map +1 -0
  90. package/dist/chunk-MQRB634A.cjs +34 -0
  91. package/dist/chunk-MQRB634A.cjs.map +1 -0
  92. package/dist/chunk-MTI27RDV.js +185 -0
  93. package/dist/chunk-MTI27RDV.js.map +1 -0
  94. package/dist/chunk-MU6GW5ZV.js +2317 -0
  95. package/dist/chunk-MU6GW5ZV.js.map +1 -0
  96. package/dist/chunk-NN3TUHIH.js +28 -0
  97. package/dist/chunk-NN3TUHIH.js.map +1 -0
  98. package/dist/chunk-NT4LBP7D.cjs +111 -0
  99. package/dist/chunk-NT4LBP7D.cjs.map +1 -0
  100. package/dist/chunk-OLV7OD3X.cjs +502 -0
  101. package/dist/chunk-OLV7OD3X.cjs.map +1 -0
  102. package/dist/chunk-OXNXEQY7.js +2538 -0
  103. package/dist/chunk-OXNXEQY7.js.map +1 -0
  104. package/dist/chunk-P5BOFE5A.js +546 -0
  105. package/dist/chunk-P5BOFE5A.js.map +1 -0
  106. package/dist/chunk-Q2MFGYTE.cjs +1449 -0
  107. package/dist/chunk-Q2MFGYTE.cjs.map +1 -0
  108. package/dist/chunk-Q75DBVDY.cjs +68 -0
  109. package/dist/chunk-Q75DBVDY.cjs.map +1 -0
  110. package/dist/chunk-REQ5Q6ZI.js +1022 -0
  111. package/dist/chunk-REQ5Q6ZI.js.map +1 -0
  112. package/dist/chunk-SICKWUWB.js +62 -0
  113. package/dist/chunk-SICKWUWB.js.map +1 -0
  114. package/dist/chunk-T343CCH5.js +1190 -0
  115. package/dist/chunk-T343CCH5.js.map +1 -0
  116. package/dist/chunk-TEC62D4A.cjs +1624 -0
  117. package/dist/chunk-TEC62D4A.cjs.map +1 -0
  118. package/dist/chunk-TW5JB35D.js +2122 -0
  119. package/dist/chunk-TW5JB35D.js.map +1 -0
  120. package/dist/chunk-VC5LMUVQ.cjs +20 -0
  121. package/dist/chunk-VC5LMUVQ.cjs.map +1 -0
  122. package/dist/chunk-VM7WFMKI.cjs +76 -0
  123. package/dist/chunk-VM7WFMKI.cjs.map +1 -0
  124. package/dist/chunk-W2WTP6HS.cjs +233 -0
  125. package/dist/chunk-W2WTP6HS.cjs.map +1 -0
  126. package/dist/chunk-WH7PYHZY.cjs +35 -0
  127. package/dist/chunk-WH7PYHZY.cjs.map +1 -0
  128. package/dist/chunk-XQZVY7JJ.cjs +717 -0
  129. package/dist/chunk-XQZVY7JJ.cjs.map +1 -0
  130. package/dist/chunk-XU3OMQ7V.js +98 -0
  131. package/dist/chunk-XU3OMQ7V.js.map +1 -0
  132. package/dist/chunk-XWPDRMZG.js +62 -0
  133. package/dist/chunk-XWPDRMZG.js.map +1 -0
  134. package/dist/chunk-Y3CPKNB7.js +67 -0
  135. package/dist/chunk-Y3CPKNB7.js.map +1 -0
  136. package/dist/chunk-YNVRDD2P.js +98 -0
  137. package/dist/chunk-YNVRDD2P.js.map +1 -0
  138. package/dist/chunk-YSYR54XR.js +92 -0
  139. package/dist/chunk-YSYR54XR.js.map +1 -0
  140. package/dist/chunk-YTYDQBVY.cjs +162 -0
  141. package/dist/chunk-YTYDQBVY.cjs.map +1 -0
  142. package/dist/chunk-ZDLOA2UT.cjs +1042 -0
  143. package/dist/chunk-ZDLOA2UT.cjs.map +1 -0
  144. package/dist/chunk-ZWUKRCOJ.cjs +2162 -0
  145. package/dist/chunk-ZWUKRCOJ.cjs.map +1 -0
  146. package/dist/core/index.cjs +807 -4333
  147. package/dist/core/index.cjs.map +1 -1
  148. package/dist/core/index.js +14 -4130
  149. package/dist/core/index.js.map +1 -1
  150. package/dist/i18n/index.cjs +86 -558
  151. package/dist/i18n/index.cjs.map +1 -1
  152. package/dist/i18n/index.js +1 -544
  153. package/dist/i18n/index.js.map +1 -1
  154. package/dist/index.cjs +1432 -17139
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.css +11 -7
  157. package/dist/index.css.map +1 -1
  158. package/dist/index.js +31 -16784
  159. package/dist/index.js.map +1 -1
  160. package/dist/marketing/index.cjs +142 -3072
  161. package/dist/marketing/index.cjs.map +1 -1
  162. package/dist/marketing/index.js +11 -3042
  163. package/dist/marketing/index.js.map +1 -1
  164. package/dist/motion/index.cjs +26 -1222
  165. package/dist/motion/index.cjs.map +1 -1
  166. package/dist/motion/index.js +2 -1215
  167. package/dist/motion/index.js.map +1 -1
  168. package/dist/nav/index.cjs +101 -1518
  169. package/dist/nav/index.cjs.map +1 -1
  170. package/dist/nav/index.js +4 -1498
  171. package/dist/nav/index.js.map +1 -1
  172. package/dist/report/index.cjs +171 -2403
  173. package/dist/report/index.cjs.map +1 -1
  174. package/dist/report/index.js +3 -2363
  175. package/dist/report/index.js.map +1 -1
  176. package/dist/sections/index.cjs +28 -378
  177. package/dist/sections/index.cjs.map +1 -1
  178. package/dist/sections/index.css +1 -4
  179. package/dist/sections/index.css.map +1 -1
  180. package/dist/sections/index.js +4 -372
  181. package/dist/sections/index.js.map +1 -1
  182. package/dist/social-proof/index.cjs +53 -1249
  183. package/dist/social-proof/index.cjs.map +1 -1
  184. package/dist/social-proof/index.css +10 -3
  185. package/dist/social-proof/index.css.map +1 -1
  186. package/dist/social-proof/index.js +6 -1234
  187. package/dist/social-proof/index.js.map +1 -1
  188. package/dist/theme/index.cjs +38 -565
  189. package/dist/theme/index.cjs.map +1 -1
  190. package/dist/theme/index.js +2 -555
  191. package/dist/theme/index.js.map +1 -1
  192. package/dist/web/client/index.cjs +48 -0
  193. package/dist/web/client/index.cjs.map +1 -0
  194. package/dist/web/client/index.css +456 -0
  195. package/dist/web/client/index.css.map +1 -0
  196. package/dist/web/client/index.d.cts +172 -0
  197. package/dist/web/client/index.d.ts +172 -0
  198. package/dist/web/client/index.js +7 -0
  199. package/dist/web/client/index.js.map +1 -0
  200. package/dist/web/index.cjs +158 -1346
  201. package/dist/web/index.cjs.map +1 -1
  202. package/dist/web/index.d.cts +5 -893
  203. package/dist/web/index.d.ts +5 -893
  204. package/dist/web/index.js +9 -1305
  205. package/dist/web/index.js.map +1 -1
  206. package/dist/web/server/index.cjs +32 -0
  207. package/dist/web/server/index.cjs.map +1 -0
  208. package/dist/web/server/index.d.cts +725 -0
  209. package/dist/web/server/index.d.ts +725 -0
  210. package/dist/web/server/index.js +3 -0
  211. package/dist/web/server/index.js.map +1 -0
  212. package/package.json +14 -1
@@ -1,1237 +1,9 @@
1
1
  "use client";
2
- import React5, { forwardRef, useState, useRef, useEffect, createContext, useCallback, useContext } from 'react';
3
- import clsx7 from 'clsx';
4
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
- import { motion } from 'framer-motion';
6
- import { Dialog } from '@base-ui/react/dialog';
7
-
8
- // src/components/SocialProof/Card.tsx
9
- var StarRating = forwardRef(
10
- ({
11
- value,
12
- max = 5,
13
- size = "md",
14
- animate = false,
15
- showValue = false,
16
- valueLabel,
17
- className,
18
- ...props
19
- }, ref) => {
20
- const [visible, setVisible] = useState(!animate);
21
- const containerRef = useRef(null);
22
- useEffect(() => {
23
- if (!animate) return;
24
- if (typeof window !== "undefined") {
25
- const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
26
- if (mq.matches) {
27
- setVisible(true);
28
- return;
29
- }
30
- }
31
- const target = containerRef.current;
32
- if (!target) return;
33
- const observer = new IntersectionObserver(
34
- ([entry]) => {
35
- if (entry.isIntersecting) {
36
- setVisible(true);
37
- observer.disconnect();
38
- }
39
- },
40
- { threshold: 0.5 }
41
- );
42
- observer.observe(target);
43
- return () => observer.disconnect();
44
- }, [animate]);
45
- const clampedValue = Math.min(Math.max(value, 0), max);
46
- const stars = Array.from({ length: max }, (_, i) => {
47
- const starIndex = i + 1;
48
- const fillPercent = clampedValue >= starIndex ? 100 : clampedValue > starIndex - 1 ? (clampedValue - (starIndex - 1)) * 100 : 0;
49
- return /* @__PURE__ */ jsxs(
50
- "span",
51
- {
52
- className: clsx7(
53
- "ds-star-rating__star",
54
- visible && "ds-star-rating__star--visible"
55
- ),
56
- style: {
57
- "--star-fill": `${fillPercent}%`,
58
- "--star-delay": animate ? `${i * 100}ms` : "0ms"
59
- },
60
- children: [
61
- /* @__PURE__ */ jsx(
62
- "svg",
63
- {
64
- viewBox: "0 0 24 24",
65
- fill: "none",
66
- xmlns: "http://www.w3.org/2000/svg",
67
- className: "ds-star-rating__svg",
68
- "aria-hidden": "true",
69
- children: /* @__PURE__ */ jsx(
70
- "path",
71
- {
72
- d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",
73
- className: "ds-star-rating__empty"
74
- }
75
- )
76
- }
77
- ),
78
- /* @__PURE__ */ jsx(
79
- "svg",
80
- {
81
- viewBox: "0 0 24 24",
82
- fill: "none",
83
- xmlns: "http://www.w3.org/2000/svg",
84
- className: "ds-star-rating__svg ds-star-rating__svg--filled",
85
- "aria-hidden": "true",
86
- style: {
87
- clipPath: `inset(0 ${100 - fillPercent}% 0 0)`
88
- },
89
- children: /* @__PURE__ */ jsx(
90
- "path",
91
- {
92
- d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",
93
- className: "ds-star-rating__filled"
94
- }
95
- )
96
- }
97
- )
98
- ]
99
- },
100
- i
101
- );
102
- });
103
- return /* @__PURE__ */ jsxs(
104
- "div",
105
- {
106
- ref: (node) => {
107
- containerRef.current = node;
108
- if (typeof ref === "function") ref(node);
109
- else if (ref) ref.current = node;
110
- },
111
- className: clsx7("ds-star-rating", `ds-star-rating--${size}`, className),
112
- role: "img",
113
- "aria-label": `${clampedValue} out of ${max} stars`,
114
- ...props,
115
- children: [
116
- /* @__PURE__ */ jsx("span", { className: "ds-star-rating__stars", children: stars }),
117
- showValue && /* @__PURE__ */ jsxs("span", { className: "ds-star-rating__value", children: [
118
- clampedValue.toLocaleString(void 0, {
119
- minimumFractionDigits: clampedValue % 1 !== 0 ? 1 : 0,
120
- maximumFractionDigits: 1
121
- }),
122
- valueLabel && /* @__PURE__ */ jsx("span", { className: "ds-star-rating__value-label", children: valueLabel })
123
- ] })
124
- ]
125
- }
126
- );
127
- }
128
- );
129
- StarRating.displayName = "StarRating";
130
- var TrustpilotIcon = ({ size }) => /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M12 2l2.9 8.9H24l-7.35 5.34 2.81 8.64L12 19.56l-7.46 5.32 2.81-8.64L0 10.9h9.1L12 2z", fill: "#00B67A" }) });
131
- var G2Icon = ({ size }) => /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
132
- /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z", fill: "#FF492C" }),
133
- /* @__PURE__ */ jsx("text", { x: "50%", y: "54%", dominantBaseline: "middle", textAnchor: "middle", fill: "white", fontWeight: "bold", fontSize: "11", fontFamily: "Arial, sans-serif", children: "G2" })
134
- ] });
135
- var GoogleIcon = ({ size }) => /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
136
- /* @__PURE__ */ jsx("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z", fill: "#4285F4" }),
137
- /* @__PURE__ */ jsx("path", { d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z", fill: "#34A853" }),
138
- /* @__PURE__ */ jsx("path", { d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 001 12c0 1.77.42 3.45 1.18 4.93l3.66-2.84z", fill: "#FBBC05" }),
139
- /* @__PURE__ */ jsx("path", { d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z", fill: "#EA4335" })
140
- ] });
141
- var ChromeWebStoreIcon = ({ size }) => /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
142
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", fill: "#4285F4", opacity: "0.1", stroke: "#4285F4", strokeWidth: "1.5" }),
143
- /* @__PURE__ */ jsx("path", { d: "M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0 8.5c-1.93 0-3.5-1.57-3.5-3.5S10.07 8.5 12 8.5s3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z", fill: "#4285F4" }),
144
- /* @__PURE__ */ jsx("path", { d: "M7.5 10.5L4 5.5", stroke: "#EA4335", strokeWidth: "1.5", strokeLinecap: "round" }),
145
- /* @__PURE__ */ jsx("path", { d: "M16.5 10.5L20 5.5", stroke: "#FBBC05", strokeWidth: "1.5", strokeLinecap: "round" }),
146
- /* @__PURE__ */ jsx("path", { d: "M12 17l-3.5 5", stroke: "#34A853", strokeWidth: "1.5", strokeLinecap: "round" })
147
- ] });
148
- var PLATFORM_ICONS = {
149
- trustpilot: TrustpilotIcon,
150
- g2: G2Icon,
151
- google: GoogleIcon,
152
- "chrome-web-store": ChromeWebStoreIcon
153
- };
154
- var PLATFORM_LABELS = {
155
- trustpilot: "Trustpilot",
156
- g2: "G2",
157
- google: "Google",
158
- "chrome-web-store": "Chrome Web Store"
159
- };
160
- var PLATFORM_COLORS = {
161
- trustpilot: "#00B67A",
162
- g2: "#FF492C",
163
- google: "#4285F4",
164
- "chrome-web-store": "#4285F4"
165
- };
166
- var PlatformBadge = forwardRef(
167
- ({
168
- platform,
169
- variant = "icon-label",
170
- rating,
171
- count,
172
- size = "sm",
173
- className,
174
- ...props
175
- }, ref) => {
176
- const Icon = PLATFORM_ICONS[platform];
177
- const label = PLATFORM_LABELS[platform];
178
- const accentColor = PLATFORM_COLORS[platform];
179
- const iconSize = size === "sm" ? 18 : 22;
180
- return /* @__PURE__ */ jsxs(
181
- "div",
182
- {
183
- ref,
184
- className: clsx7(
185
- "ds-platform-badge",
186
- `ds-platform-badge--${variant}`,
187
- `ds-platform-badge--${size}`,
188
- className
189
- ),
190
- style: { "--platform-accent": accentColor },
191
- "aria-label": variant === "full" && rating ? `${label}: ${rating} stars${count ? ` from ${count} reviews` : ""}` : label,
192
- ...props,
193
- children: [
194
- /* @__PURE__ */ jsx("span", { className: "ds-platform-badge__icon", children: /* @__PURE__ */ jsx(Icon, { size: iconSize }) }),
195
- variant !== "icon-only" && /* @__PURE__ */ jsx("span", { className: "ds-platform-badge__label", children: label }),
196
- variant === "full" && rating != null && /* @__PURE__ */ jsxs("span", { className: "ds-platform-badge__rating", children: [
197
- /* @__PURE__ */ jsx(StarRating, { value: rating, size: "sm" }),
198
- count != null && /* @__PURE__ */ jsxs("span", { className: "ds-platform-badge__count", children: [
199
- "(",
200
- count,
201
- ")"
202
- ] })
203
- ] })
204
- ]
205
- }
206
- );
207
- }
208
- );
209
- PlatformBadge.displayName = "PlatformBadge";
210
- var UtmContext = createContext(null);
211
-
212
- // src/web/utm/useUtmDefaults.ts
213
- function useUtmDefaults() {
214
- return useContext(UtmContext);
215
- }
216
-
217
- // src/web/utm/builders.ts
218
- var PLACEHOLDER_ORIGIN = "https://__placeholder__.internal";
219
- function buildUtmUrl(baseUrl, params) {
220
- const isRelative = baseUrl.startsWith("/");
221
- let url;
222
- try {
223
- url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);
224
- } catch {
225
- return baseUrl;
226
- }
227
- const existingParams = [];
228
- url.searchParams.forEach((value, key) => {
229
- existingParams.push([key, value]);
230
- });
231
- for (const [key] of existingParams) {
232
- url.searchParams.delete(key);
233
- }
234
- for (const [key, value] of existingParams) {
235
- if (!key.startsWith("utm_")) {
236
- url.searchParams.set(key, value);
237
- }
238
- }
239
- url.searchParams.set("utm_source", params.source);
240
- url.searchParams.set("utm_medium", params.medium);
241
- url.searchParams.set("utm_campaign", params.campaign);
242
- if (params.term !== void 0) {
243
- url.searchParams.set("utm_term", params.term);
244
- }
245
- if (params.content !== void 0) {
246
- url.searchParams.set("utm_content", params.content);
247
- }
248
- if (isRelative) {
249
- return url.href.replace(PLACEHOLDER_ORIGIN, "");
250
- }
251
- return url.href;
252
- }
253
-
254
- // src/web/utm/classifiers.ts
255
- var INTERNAL_PATTERNS = [
256
- /^\/(?!\/)/,
257
- // Relative paths
258
- /^https?:\/\/(www\.)?sales-mind\.ai/i,
259
- // Marketing site
260
- /^https?:\/\/app\.sales-mind\.ai/i,
261
- // Web app
262
- /^https?:\/\/apps\.sales-mind\.ai/i,
263
- // Web app (legacy)
264
- /^https?:\/\/meet\.sales-mind\.ai/i,
265
- // Booking
266
- /^https?:\/\/docs\.sales-mind\.ai/i
267
- // Docs
268
- ];
269
- var SYSTEM_PATTERNS = [
270
- /^https?:\/\/.*\/api\//i,
271
- // API endpoints
272
- /^https?:\/\/.*\/webhook/i,
273
- // Webhooks
274
- /^https?:\/\/.*\/oauth/i,
275
- // OAuth callbacks
276
- /^https?:\/\/.*\/callback/i,
277
- // Callbacks
278
- /^https?:\/\/.*\.supabase\.(co|com)/i,
279
- // Supabase
280
- /^https?:\/\/.*\.firebaseapp\.com/i,
281
- // Firebase
282
- /^https?:\/\/.*\.cloudfunctions\.net/i
283
- // Cloud Functions
284
- ];
285
- var ASSET_PATTERNS = [
286
- /\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\?.*)?$/i
287
- ];
288
- var CONVERSION_PATTERNS = [
289
- /^https?:\/\/(www\.)?calendly\.com/i,
290
- /^https?:\/\/(checkout\.)?stripe\.com/i,
291
- /^https?:\/\/buy\.stripe\.com/i,
292
- /^https?:\/\/chromewebstore\.google\.com/i,
293
- /^https?:\/\/meet\.sales-mind\.ai/i
294
- ];
295
- var PROTOCOL_EXEMPT = [
296
- /^mailto:/i,
297
- /^tel:/i,
298
- /^#/,
299
- /^javascript:/i
300
- ];
301
- function classifyUrl(url) {
302
- if (PROTOCOL_EXEMPT.some((p) => p.test(url))) return "protocol";
303
- if (ASSET_PATTERNS.some((p) => p.test(url))) return "asset";
304
- if (SYSTEM_PATTERNS.some((p) => p.test(url))) return "system";
305
- if (CONVERSION_PATTERNS.some((p) => p.test(url))) return "conversion";
306
- if (INTERNAL_PATTERNS.some((p) => p.test(url))) return "internal";
307
- return "external";
308
- }
309
-
310
- // src/components/OutboundLink/outbound-link-utils.ts
311
- var LEGACY_UTM_SOURCE = "salesmind";
312
- var EXEMPT_PATTERNS = [
313
- /^https?:\/\/(www\.)?(stripe\.com|checkout\.stripe\.com|paypal\.com)/i,
314
- /^https?:\/\/(www\.)?github\.com\/login\/oauth/i
315
- ];
316
- var isExemptUrl = (urlStr) => {
317
- if (urlStr.startsWith("mailto:") || urlStr.startsWith("tel:")) return true;
318
- const classification = classifyUrl(urlStr);
319
- if (classification === "system" || classification === "protocol" || classification === "asset") {
320
- return true;
321
- }
322
- return EXEMPT_PATTERNS.some((pattern) => pattern.test(urlStr));
323
- };
324
- var appendGovernedUTMs = (href, params, preserveExisting = true) => {
325
- try {
326
- const url = new URL(href);
327
- if (preserveExisting) {
328
- const hasAll = url.searchParams.has("utm_source") && url.searchParams.has("utm_medium") && url.searchParams.has("utm_campaign");
329
- if (hasAll) return href;
330
- }
331
- return buildUtmUrl(href, params);
332
- } catch {
333
- return href;
334
- }
335
- };
336
- var appendUTMs = (href, context, pageSlug, options) => {
337
- try {
338
- const url = new URL(href);
339
- const { mediumOverride = "outbound_link", campaignOverride, preserveExisting = true } = options;
340
- const utms = {
341
- utm_source: LEGACY_UTM_SOURCE,
342
- utm_medium: mediumOverride,
343
- utm_campaign: campaignOverride || pageSlug,
344
- utm_content: context
345
- };
346
- Object.entries(utms).forEach(([key, value]) => {
347
- if (value) {
348
- if (preserveExisting && url.searchParams.has(key)) {
349
- return;
350
- }
351
- url.searchParams.set(key, value);
352
- }
353
- });
354
- return url.toString();
355
- } catch {
356
- return href;
357
- }
358
- };
359
- var OutboundLink = forwardRef(
360
- ({
361
- href,
362
- context,
363
- campaignOverride,
364
- mediumOverride = "outbound_link",
365
- preserveExistingUTM = true,
366
- openInNewTab = true,
367
- disableTracking = false,
368
- utmParams,
369
- onClick,
370
- children,
371
- ...props
372
- }, ref) => {
373
- const contextParams = useUtmDefaults();
374
- const resolvedUtmParams = utmParams ?? contextParams;
375
- let hostname = "";
376
- try {
377
- const url = new URL(href);
378
- hostname = url.hostname;
379
- } catch {
380
- }
381
- const [finalHref, setFinalHref] = useState(href);
382
- useEffect(() => {
383
- let isExternal = false;
384
- let currentMedium = mediumOverride;
385
- try {
386
- const url = new URL(href);
387
- const currentHost = window.location.hostname;
388
- isExternal = url.hostname !== currentHost;
389
- if (isExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
390
- if (currentMedium === "outbound_link") {
391
- currentMedium = "cross_subdomain";
392
- }
393
- }
394
- } catch {
395
- isExternal = false;
396
- }
397
- const isExempt = isExemptUrl(href) || disableTracking;
398
- if (isExternal && !isExempt) {
399
- if (resolvedUtmParams) {
400
- setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));
401
- } else {
402
- const pageSlug = window.location.pathname.replace(/^\/|\/$/g, "") || "home";
403
- setFinalHref(appendUTMs(href, context, pageSlug, {
404
- mediumOverride: currentMedium,
405
- campaignOverride,
406
- preserveExisting: preserveExistingUTM
407
- }));
408
- }
409
- } else {
410
- setFinalHref(href);
411
- }
412
- }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);
413
- const handleClick = (e) => {
414
- if (typeof window === "undefined" || disableTracking) {
415
- onClick?.(e);
416
- return;
417
- }
418
- let clickExternal = false;
419
- let clickCrossSubdomain = false;
420
- let clickMedium = mediumOverride;
421
- try {
422
- const url = new URL(href);
423
- const currentHost = window.location.hostname;
424
- clickExternal = url.hostname !== currentHost;
425
- if (clickExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
426
- clickCrossSubdomain = true;
427
- if (clickMedium === "outbound_link") {
428
- clickMedium = "cross_subdomain";
429
- }
430
- }
431
- } catch {
432
- }
433
- if (clickExternal) {
434
- const detail = {
435
- destination_domain: hostname,
436
- destination_url: finalHref,
437
- utm_medium_type: clickMedium,
438
- page_slug: window.location.pathname,
439
- component_location: context,
440
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
441
- is_cross_subdomain: clickCrossSubdomain
442
- };
443
- const event = new CustomEvent("outbound_click", { detail });
444
- window.dispatchEvent(event);
445
- }
446
- onClick?.(e);
447
- };
448
- const relParts = [];
449
- let shouldOpenNewTab = openInNewTab;
450
- try {
451
- const url = new URL(href);
452
- if (typeof window !== "undefined") {
453
- const currentHost = window.location.hostname;
454
- if (url.hostname !== currentHost && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
455
- shouldOpenNewTab = false;
456
- }
457
- }
458
- } catch {
459
- }
460
- if (shouldOpenNewTab) relParts.push("noopener", "noreferrer");
461
- if (mediumOverride === "citation") relParts.push("nofollow");
462
- const rel = relParts.length > 0 ? relParts.join(" ") : void 0;
463
- return (
464
- // eslint-disable-next-line no-restricted-syntax
465
- /* @__PURE__ */ jsx(
466
- "a",
467
- {
468
- ref,
469
- href: finalHref,
470
- target: shouldOpenNewTab ? "_blank" : void 0,
471
- rel,
472
- onClick: handleClick,
473
- ...props,
474
- children
475
- }
476
- )
477
- );
478
- }
479
- );
480
- OutboundLink.displayName = "OutboundLink";
481
- var PlayIcon = () => /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M8 5v14l11-7z" }) });
482
- var SocialProofCard = forwardRef(
483
- ({
484
- variant = "simple",
485
- content,
486
- author,
487
- media,
488
- sourceIcon,
489
- platform,
490
- starRating,
491
- date,
492
- badges,
493
- ctaText,
494
- href,
495
- className,
496
- children,
497
- animationDelay,
498
- headline,
499
- logo,
500
- industry,
501
- metrics,
502
- ...props
503
- }, ref) => {
504
- const cardClass = clsx7(
505
- "ds-social-card",
506
- `ds-social-card--${variant}`,
507
- animationDelay != null && "ds-social-card--animated",
508
- className
509
- );
510
- const cardStyle = animationDelay != null ? { "--card-delay": `${animationDelay}ms` } : void 0;
511
- if (variant === "rating-only") {
512
- const inner = /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "ds-social-card__rating-row", children: [
513
- starRating != null && /* @__PURE__ */ jsx(StarRating, { value: starRating, size: "lg" }),
514
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__meta", children: [
515
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__name", children: author.name }),
516
- (author.role || author.company) && /* @__PURE__ */ jsxs("span", { className: "ds-social-card__role", children: [
517
- author.role,
518
- author.role && author.company && " \xB7 ",
519
- author.company
520
- ] })
521
- ] }),
522
- platform && /* @__PURE__ */ jsx(PlatformBadge, { platform, variant: "icon-label", size: "sm" })
523
- ] }) });
524
- if (href) {
525
- return /* @__PURE__ */ jsx(OutboundLink, { ref, href, context: "social-proof-card", className: cardClass, style: cardStyle, openInNewTab: false, ...props, children: inner });
526
- }
527
- return /* @__PURE__ */ jsx("div", { ref, className: cardClass, style: cardStyle, ...props, children: inner });
528
- }
529
- if (variant === "case-study") {
530
- const defaultCta2 = ctaText || "Read Case Study \u2192";
531
- const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
532
- media && /* @__PURE__ */ jsx("div", { className: "ds-social-card__media", children: /* @__PURE__ */ jsx("img", { src: media.src, alt: media.alt || `${author.company} case study` }) }),
533
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__content", children: [
534
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__cs-header", children: [
535
- logo && /* @__PURE__ */ jsx("div", { className: "ds-social-card__cs-logo", children: logo }),
536
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__cs-company", children: [
537
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__name", children: author.company || author.name }),
538
- industry && /* @__PURE__ */ jsx("span", { className: "ds-social-card__cs-industry", children: industry })
539
- ] })
540
- ] }),
541
- headline && /* @__PURE__ */ jsx("h3", { className: "ds-social-card__cs-headline", children: headline }),
542
- metrics && metrics.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-social-card__cs-metrics", children: metrics.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "ds-social-card__cs-metric", children: [
543
- /* @__PURE__ */ jsxs("span", { className: "ds-social-card__cs-metric-value", children: [
544
- m.prefix,
545
- m.value,
546
- m.suffix
547
- ] }),
548
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__cs-metric-label", children: m.label })
549
- ] }, i)) }),
550
- content && /* @__PURE__ */ jsxs("blockquote", { className: "ds-social-card__quote ds-social-card__quote--excerpt", children: [
551
- "\u201C",
552
- content,
553
- "\u201D"
554
- ] }),
555
- href && /* @__PURE__ */ jsx("div", { className: "ds-social-card__cta", children: defaultCta2 })
556
- ] })
557
- ] });
558
- if (href) {
559
- return /* @__PURE__ */ jsx(OutboundLink, { ref, href, context: "social-proof-card", className: cardClass, style: cardStyle, openInNewTab: false, ...props, children: inner });
560
- }
561
- return /* @__PURE__ */ jsx("div", { ref, className: cardClass, style: cardStyle, ...props, children: inner });
562
- }
563
- if (variant === "video") {
564
- const defaultCta2 = ctaText || "Watch Video \u2192";
565
- const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
566
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__media", children: [
567
- media ? /* @__PURE__ */ jsx("img", { src: media.src, alt: media.alt || `${author.name} video` }) : /* @__PURE__ */ jsx("div", { className: "ds-social-card__media-placeholder" }),
568
- /* @__PURE__ */ jsx("div", { className: "ds-social-card__play", children: /* @__PURE__ */ jsx("div", { className: "ds-social-card__play-icon", children: /* @__PURE__ */ jsx(PlayIcon, {}) }) }),
569
- badges && badges.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-social-card__badges", children: badges.map((badge, idx) => /* @__PURE__ */ jsx("span", { className: "ds-social-card__badge", children: badge }, idx)) })
570
- ] }),
571
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__content", children: [
572
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__author", children: [
573
- author.avatar && /* @__PURE__ */ jsx("div", { className: "ds-social-card__avatar", children: /* @__PURE__ */ jsx("img", { src: author.avatar, alt: author.name }) }),
574
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__meta", children: [
575
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__name", children: author.name }),
576
- (author.role || author.company) && /* @__PURE__ */ jsxs("span", { className: "ds-social-card__role", children: [
577
- author.role,
578
- author.role && author.company && " \xB7 ",
579
- author.company
580
- ] })
581
- ] }),
582
- platform && /* @__PURE__ */ jsx(PlatformBadge, { platform, variant: "icon-only", size: "sm" })
583
- ] }),
584
- content && /* @__PURE__ */ jsx("blockquote", { className: "ds-social-card__quote", children: content }),
585
- href && /* @__PURE__ */ jsx("div", { className: "ds-social-card__cta", children: defaultCta2 })
586
- ] })
587
- ] });
588
- if (href) {
589
- return /* @__PURE__ */ jsx(OutboundLink, { ref, href, context: "social-proof-card", className: cardClass, style: cardStyle, openInNewTab: false, ...props, children: inner });
590
- }
591
- return /* @__PURE__ */ jsx("div", { ref, className: cardClass, style: cardStyle, ...props, children: inner });
592
- }
593
- if (variant === "social") {
594
- const inner = /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "ds-social-card__content", children: [
595
- (platform || sourceIcon) && /* @__PURE__ */ jsx("div", { className: "ds-social-card__source", children: platform ? /* @__PURE__ */ jsx(PlatformBadge, { platform, variant: "icon-only", size: "sm" }) : sourceIcon }),
596
- content && /* @__PURE__ */ jsx("blockquote", { className: "ds-social-card__quote ds-social-card__quote--clamp", children: content }),
597
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__author", children: [
598
- author.avatar && /* @__PURE__ */ jsx("div", { className: "ds-social-card__avatar", children: /* @__PURE__ */ jsx("img", { src: author.avatar, alt: author.name }) }),
599
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__meta", children: [
600
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__name", children: author.name }),
601
- (author.role || author.company) && /* @__PURE__ */ jsxs("span", { className: "ds-social-card__role", children: [
602
- author.role,
603
- author.role && author.company && " \xB7 ",
604
- author.company
605
- ] }),
606
- date && /* @__PURE__ */ jsx("span", { className: "ds-social-card__role", children: date })
607
- ] })
608
- ] }),
609
- starRating != null && /* @__PURE__ */ jsx(StarRating, { value: starRating, size: "sm" }),
610
- children
611
- ] }) });
612
- if (href) {
613
- return /* @__PURE__ */ jsx(OutboundLink, { ref, href, context: "social-proof-card", className: cardClass, style: cardStyle, openInNewTab: false, ...props, children: inner });
614
- }
615
- return /* @__PURE__ */ jsx("div", { ref, className: cardClass, style: cardStyle, ...props, children: inner });
616
- }
617
- const BadgeList = badges && badges.length > 0 && /* @__PURE__ */ jsx("div", { className: "ds-social-card__badges", children: badges.map((badge, idx) => /* @__PURE__ */ jsx("span", { className: "ds-social-card__badge", children: badge }, idx)) });
618
- const defaultCta = ctaText || "Read Story \u2192";
619
- const simpleInner = /* @__PURE__ */ jsxs("div", { className: "ds-social-card__content", children: [
620
- /* @__PURE__ */ jsx("div", { className: "ds-social-card__deco-quote", "aria-hidden": "true", children: "\u201C" }),
621
- (platform || sourceIcon) && /* @__PURE__ */ jsx("div", { className: "ds-social-card__source", children: platform ? /* @__PURE__ */ jsx(PlatformBadge, { platform, variant: "icon-only", size: "sm" }) : sourceIcon }),
622
- BadgeList,
623
- content && /* @__PURE__ */ jsx("blockquote", { className: "ds-social-card__quote", children: content }),
624
- starRating != null && /* @__PURE__ */ jsx(StarRating, { value: starRating, size: "sm" }),
625
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__author", children: [
626
- author.avatar && /* @__PURE__ */ jsx("div", { className: "ds-social-card__avatar", children: /* @__PURE__ */ jsx("img", { src: author.avatar, alt: author.name }) }),
627
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__meta", children: [
628
- /* @__PURE__ */ jsxs("span", { className: "ds-social-card__name", children: [
629
- author.name,
630
- author.handle && /* @__PURE__ */ jsxs("span", { className: "ds-social-card__handle", children: [
631
- "@",
632
- author.handle
633
- ] })
634
- ] }),
635
- (author.role || author.company) && /* @__PURE__ */ jsxs("span", { className: "ds-social-card__role", children: [
636
- author.role,
637
- author.role && author.company && " \xB7 ",
638
- author.company
639
- ] }),
640
- date && /* @__PURE__ */ jsx("span", { className: "ds-social-card__role", children: date })
641
- ] })
642
- ] }),
643
- children,
644
- href && /* @__PURE__ */ jsx("div", { className: "ds-social-card__cta", children: defaultCta })
645
- ] });
646
- if (href) {
647
- return /* @__PURE__ */ jsx(OutboundLink, { ref, href, context: "social-proof-card", className: cardClass, style: cardStyle, openInNewTab: false, ...props, children: simpleInner });
648
- }
649
- return /* @__PURE__ */ jsx("div", { ref, className: cardClass, style: cardStyle, ...props, children: simpleInner });
650
- }
651
- );
652
- SocialProofCard.displayName = "SocialProofCard";
653
-
654
- // src/tokens/spacing.ts
655
- var SPACING = {
656
- 1: "var(--space-1)",
657
- 2: "var(--space-2)",
658
- 3: "var(--space-3)",
659
- 4: "var(--space-4)",
660
- 5: "var(--space-5)",
661
- 6: "var(--space-6)",
662
- 8: "var(--space-8)",
663
- 10: "var(--space-10)",
664
- 12: "var(--space-12)",
665
- 16: "var(--space-16)",
666
- 20: "var(--space-20)"
667
- };
668
-
669
- // src/components/LayoutPrimitives/utils.ts
670
- var SPACING_ALIASES = {
671
- xs: "var(--space-2)",
672
- sm: "var(--space-3)",
673
- md: "var(--space-4)",
674
- lg: "var(--space-6)",
675
- xl: "var(--space-8)",
676
- "2xl": "var(--space-12)"
677
- };
678
- function resolveSpacing(value) {
679
- if (value === void 0) return void 0;
680
- if (typeof value === "number" && SPACING[value]) {
681
- return SPACING[value];
682
- }
683
- if (typeof value === "string" && value in SPACING_ALIASES) {
684
- return SPACING_ALIASES[value];
685
- }
686
- return String(value);
687
- }
688
- function extractSpacingStyles(props) {
689
- const styles = {};
690
- if (props.m !== void 0) styles.margin = resolveSpacing(props.m);
691
- if (props.mt !== void 0) styles.marginTop = resolveSpacing(props.mt);
692
- if (props.mb !== void 0) styles.marginBottom = resolveSpacing(props.mb);
693
- if (props.ml !== void 0) styles.marginLeft = resolveSpacing(props.ml);
694
- if (props.mr !== void 0) styles.marginRight = resolveSpacing(props.mr);
695
- if (props.mx !== void 0) {
696
- styles.marginLeft = resolveSpacing(props.mx);
697
- styles.marginRight = resolveSpacing(props.mx);
698
- }
699
- if (props.my !== void 0) {
700
- styles.marginTop = resolveSpacing(props.my);
701
- styles.marginBottom = resolveSpacing(props.my);
702
- }
703
- if (props.p !== void 0) styles.padding = resolveSpacing(props.p);
704
- if (props.pt !== void 0) styles.paddingTop = resolveSpacing(props.pt);
705
- if (props.pb !== void 0) styles.paddingBottom = resolveSpacing(props.pb);
706
- if (props.pl !== void 0) styles.paddingLeft = resolveSpacing(props.pl);
707
- if (props.pr !== void 0) styles.paddingRight = resolveSpacing(props.pr);
708
- if (props.px !== void 0) {
709
- styles.paddingLeft = resolveSpacing(props.px);
710
- styles.paddingRight = resolveSpacing(props.px);
711
- }
712
- if (props.py !== void 0) {
713
- styles.paddingTop = resolveSpacing(props.py);
714
- styles.paddingBottom = resolveSpacing(props.py);
715
- }
716
- if (props.gap !== void 0) styles.gap = resolveSpacing(props.gap);
717
- return styles;
718
- }
719
- var Box = forwardRef(
720
- ({ as: Component = "div", className, style, children, ...props }, ref) => {
721
- const spacingStyles = extractSpacingStyles(props);
722
- const { m, mt, mb, ml, mr, mx, my, p, pt, pb, pl, pr, px, py, gap, ...domProps } = props;
723
- return /* @__PURE__ */ jsx(
724
- Component,
725
- {
726
- ref,
727
- className: clsx7("ds-box", className),
728
- style: { ...spacingStyles, ...style },
729
- ...domProps,
730
- children
731
- }
732
- );
733
- }
734
- );
735
- Box.displayName = "Box";
736
- var CONTAINER_SIZE_MAP = {
737
- sm: "768px",
738
- // 48rem — max-w-3xl
739
- md: "1024px",
740
- // 64rem — max-w-5xl
741
- lg: "1152px",
742
- // 72rem — max-w-6xl
743
- xl: "1280px",
744
- // 80rem — max-w-7xl
745
- full: "100%"
746
- };
747
- var Container = forwardRef(
748
- ({ size, fluid, maxWidth, className, style, ...props }, ref) => {
749
- let resolvedMaxWidth;
750
- if (fluid) {
751
- resolvedMaxWidth = "100%";
752
- } else if (size) {
753
- resolvedMaxWidth = CONTAINER_SIZE_MAP[size];
754
- } else {
755
- resolvedMaxWidth = maxWidth || "var(--container-default-max, 1200px)";
756
- }
757
- return /* @__PURE__ */ jsx(
758
- Box,
759
- {
760
- ref,
761
- className: clsx7("ds-container", className),
762
- style: {
763
- maxWidth: resolvedMaxWidth,
764
- ...style
765
- },
766
- ...props
767
- }
768
- );
769
- }
770
- );
771
- Container.displayName = "Container";
772
- var SectionHeader = forwardRef(
773
- ({ title, subtitle, eyebrow, align = "center", className, ...props }, ref) => {
774
- if (!title && !subtitle && !eyebrow) return null;
775
- return /* @__PURE__ */ jsxs(
776
- "header",
777
- {
778
- ref,
779
- className: clsx7("ds-section-header", `ds-section-header--${align}`, className),
780
- ...props,
781
- children: [
782
- eyebrow && /* @__PURE__ */ jsx("span", { className: "ds-section-header__eyebrow", children: eyebrow }),
783
- title && /* @__PURE__ */ jsx("h2", { className: "ds-section-header__title", children: title }),
784
- subtitle && /* @__PURE__ */ jsx("p", { className: "ds-section-header__subtitle", children: subtitle })
785
- ]
786
- }
787
- );
788
- }
789
- );
790
- SectionHeader.displayName = "SectionHeader";
791
- var SectionShell = forwardRef(
792
- ({
793
- className,
794
- children,
795
- background = "default",
796
- padding = "md",
797
- containerSize,
798
- containerFluid = false,
799
- ...props
800
- }, ref) => {
801
- return /* @__PURE__ */ jsx(
802
- "section",
803
- {
804
- ref,
805
- className: clsx7(
806
- "ds-section",
807
- `ds-section--bg-${background}`,
808
- `ds-section--padding-${padding}`,
809
- className
810
- ),
811
- ...props,
812
- children: /* @__PURE__ */ jsx(
813
- Container,
814
- {
815
- size: containerSize === "fluid" ? "full" : containerSize,
816
- fluid: containerFluid || containerSize === "fluid",
817
- children
818
- }
819
- )
820
- }
821
- );
822
- }
823
- );
824
- SectionShell.displayName = "SectionShell";
825
- var SocialProofGrid = forwardRef(
826
- ({ columns = 3, masonry = false, staggered = false, className, children, ...props }, ref) => {
827
- const enhancedChildren = staggered ? React5.Children.map(children, (child, index) => {
828
- if (!React5.isValidElement(child)) return child;
829
- const delay = Math.min(index * 50, 600);
830
- const childProps = child.props;
831
- return React5.cloneElement(child, {
832
- style: { ...childProps.style, "--card-delay": `${delay}ms` },
833
- className: clsx7(childProps.className, "ds-social-card--animated")
834
- });
835
- }) : children;
836
- return /* @__PURE__ */ jsx(
837
- SectionShell,
838
- {
839
- ref,
840
- padding: "md",
841
- className: clsx7("ds-social-proof", className),
842
- ...props,
843
- children: masonry ? /* @__PURE__ */ jsx("div", { className: "ds-social-masonry", children: enhancedChildren }) : /* @__PURE__ */ jsx("div", { className: clsx7("ds-social-grid", `ds-social-grid--${columns}-col`), children: enhancedChildren })
844
- }
845
- );
846
- }
847
- );
848
- SocialProofGrid.displayName = "SocialProofGrid";
849
- var LogoItemRender = ({ item, className }) => {
850
- const content = item.logo ? item.logo : /* @__PURE__ */ jsx(
851
- "img",
852
- {
853
- src: item.src,
854
- alt: item.alt,
855
- width: 120,
856
- height: 48,
857
- loading: "lazy",
858
- decoding: "async",
859
- style: { objectFit: "contain", width: "auto", height: "100%" }
860
- }
861
- );
862
- const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
863
- content,
864
- item.badge && /* @__PURE__ */ jsx("span", { className: "ds-social-logos__badge", children: item.badge })
865
- ] });
866
- if (item.href) {
867
- const isInternal = item.href.startsWith("/");
868
- return /* @__PURE__ */ jsx(
869
- OutboundLink,
870
- {
871
- href: item.href,
872
- context: "social-proof-logo",
873
- className: clsx7("ds-social-logos__item", className),
874
- title: item.alt,
875
- openInNewTab: !isInternal,
876
- children: innerContent
877
- }
878
- );
879
- }
880
- return /* @__PURE__ */ jsx("div", { className: clsx7("ds-social-logos__item", className), title: item.alt, children: innerContent });
881
- };
882
- var SocialProofLogos = forwardRef(
883
- ({ title, logos, variant = "grid", speed = 40, className, ...props }, ref) => {
884
- return /* @__PURE__ */ jsxs(
885
- SectionShell,
886
- {
887
- ref,
888
- padding: "sm",
889
- className: clsx7("ds-social-logos", className),
890
- ...props,
891
- children: [
892
- title && /* @__PURE__ */ jsx(
893
- "h3",
894
- {
895
- className: "ds-section-header__eyebrow",
896
- style: { textAlign: "center", marginBottom: "var(--space-8)" },
897
- children: title
898
- }
899
- ),
900
- variant === "marquee" ? /* @__PURE__ */ jsxs(
901
- "div",
902
- {
903
- className: "ds-social-logos__marquee",
904
- style: { "--marquee-duration": `${speed}s` },
905
- children: [
906
- /* @__PURE__ */ jsx("div", { className: "ds-social-logos__track", children: logos.map((item) => /* @__PURE__ */ jsx(LogoItemRender, { item }, `set1-${item.id}`)) }),
907
- /* @__PURE__ */ jsx("div", { className: "ds-social-logos__track", "aria-hidden": "true", children: logos.map((item) => /* @__PURE__ */ jsx(LogoItemRender, { item }, `set2-${item.id}`)) })
908
- ]
909
- }
910
- ) : /* @__PURE__ */ jsx("div", { className: "ds-social-grid ds-social-grid--4-col", style: { alignItems: "center" }, children: logos.map((item) => /* @__PURE__ */ jsx(LogoItemRender, { item }, item.id)) })
911
- ]
912
- }
913
- );
914
- }
915
- );
916
- SocialProofLogos.displayName = "SocialProofLogos";
917
- var PlayIconLarge = () => /* @__PURE__ */ jsxs("svg", { width: "64", height: "64", viewBox: "0 0 64 64", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
918
- /* @__PURE__ */ jsx("circle", { cx: "32", cy: "32", r: "32", fill: "white", fillOpacity: "0.9" }),
919
- /* @__PURE__ */ jsx("path", { d: "M42 32L26 41.2376L26 22.7624L42 32Z", fill: "black" })
920
- ] });
921
- var SocialProofFeatured = forwardRef(
922
- ({
923
- quote,
924
- author,
925
- media,
926
- mediaSrc,
927
- orientation = "horizontal",
928
- featuredVariant = "standard",
929
- starRating,
930
- platform,
931
- logo,
932
- className,
933
- ...props
934
- }, ref) => {
935
- const showMedia = media || mediaSrc;
936
- const effectiveOrientation = featuredVariant === "spotlight" ? "vertical" : orientation;
937
- return /* @__PURE__ */ jsx(
938
- SectionShell,
939
- {
940
- ref,
941
- padding: "md",
942
- className: clsx7("ds-social-featured-section", className),
943
- ...props,
944
- children: /* @__PURE__ */ jsxs(
945
- "div",
946
- {
947
- className: clsx7(
948
- "ds-social-featured",
949
- `ds-social-featured--${effectiveOrientation}`,
950
- `ds-social-featured--${featuredVariant}`
951
- ),
952
- children: [
953
- showMedia && featuredVariant !== "spotlight" && /* @__PURE__ */ jsx("div", { className: "ds-social-featured__media", children: media ? media : /* @__PURE__ */ jsxs(Fragment, { children: [
954
- /* @__PURE__ */ jsx(
955
- "img",
956
- {
957
- src: mediaSrc || "https://placehold.co/1920x1080/111/FFF?text=Video+Case+Study",
958
- alt: `Case study by ${author.name}`,
959
- style: { width: "100%", height: "100%", objectFit: "cover" }
960
- }
961
- ),
962
- /* @__PURE__ */ jsx("div", { className: "ds-social-card__play", children: /* @__PURE__ */ jsx(PlayIconLarge, {}) })
963
- ] }) }),
964
- /* @__PURE__ */ jsxs("div", { className: "ds-social-featured__content", children: [
965
- logo && /* @__PURE__ */ jsx("div", { className: "ds-social-featured__logo", children: logo }),
966
- /* @__PURE__ */ jsxs("blockquote", { className: "ds-social-featured__quote", children: [
967
- "\u201C",
968
- quote,
969
- "\u201D"
970
- ] }),
971
- /* @__PURE__ */ jsxs("div", { className: "ds-social-featured__author-large", children: [
972
- author.avatar && /* @__PURE__ */ jsx("div", { className: "ds-social-card__avatar", children: /* @__PURE__ */ jsx("img", { src: author.avatar, alt: author.name }) }),
973
- /* @__PURE__ */ jsxs("div", { className: "ds-social-card__meta", children: [
974
- /* @__PURE__ */ jsx("span", { className: "ds-social-card__name", children: author.name }),
975
- /* @__PURE__ */ jsxs("span", { className: "ds-social-card__role", children: [
976
- author.role,
977
- author.role && author.company && ", ",
978
- author.company
979
- ] })
980
- ] })
981
- ] }),
982
- (starRating != null || platform) && /* @__PURE__ */ jsxs("div", { className: "ds-social-featured__trust", children: [
983
- starRating != null && /* @__PURE__ */ jsx(StarRating, { value: starRating, size: "md", showValue: true }),
984
- platform && /* @__PURE__ */ jsx(PlatformBadge, { platform, variant: "icon-label", size: "md" })
985
- ] })
986
- ] })
987
- ]
988
- }
989
- )
990
- }
991
- );
992
- }
993
- );
994
- SocialProofFeatured.displayName = "SocialProofFeatured";
995
-
996
- // src/tokens/motion.ts
997
- var DURATION = {
998
- // 250ms
999
- medium: 0.5};
1000
- var EASING = {
1001
- standard: [0.16, 1, 0.3, 1]};
1002
- var VARIANTS = {
1003
- fadeIn: {
1004
- hidden: { opacity: 0 },
1005
- visible: { opacity: 1, transition: { duration: DURATION.medium, ease: EASING.standard } }
1006
- }};
1007
- var SocialProofCarousel = forwardRef(
1008
- ({ children, className, ...props }, ref) => {
1009
- return /* @__PURE__ */ jsx(
1010
- SectionShell,
1011
- {
1012
- ref,
1013
- padding: "none",
1014
- containerFluid: true,
1015
- className: clsx7("ds-social-carousel", className),
1016
- ...props,
1017
- children: /* @__PURE__ */ jsxs(
1018
- motion.div,
1019
- {
1020
- className: "ds-social-carousel__track",
1021
- variants: VARIANTS.fadeIn,
1022
- initial: "hidden",
1023
- whileInView: "visible",
1024
- viewport: { once: true, margin: "-10%" },
1025
- children: [
1026
- children,
1027
- children
1028
- ]
1029
- }
1030
- )
1031
- }
1032
- );
1033
- }
1034
- );
1035
- SocialProofCarousel.displayName = "SocialProofCarousel";
1036
- function getShortsEmbedUrl(url) {
1037
- const match = url.match(/(?:youtube\.com\/shorts\/|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]+)/);
1038
- if (match) {
1039
- return `https://www.youtube-nocookie.com/embed/${match[1]}?rel=0&modestbranding=1&playsinline=1&controls=1`;
1040
- }
1041
- return url.replace("youtube.com", "youtube-nocookie.com") + (url.includes("?") ? "&" : "?") + "rel=0&modestbranding=1&playsinline=1";
1042
- }
1043
- function VerticalVideoGrid({ urls, className }) {
1044
- if (!urls || urls.length === 0) return null;
1045
- return /* @__PURE__ */ jsx(SectionShell, { className: clsx7("ds-vertical-video-grid my-16", className), children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4 md:gap-6 max-w-6xl mx-auto", children: urls.map((url, i) => /* @__PURE__ */ jsx(
1046
- "div",
1047
- {
1048
- className: "relative w-full overflow-hidden rounded-[20px] shadow-lg border border-white/10 bg-black",
1049
- style: { aspectRatio: "9/16" },
1050
- children: /* @__PURE__ */ jsx(
1051
- "iframe",
1052
- {
1053
- src: getShortsEmbedUrl(url),
1054
- title: `Short testimonial ${i + 1}`,
1055
- className: "absolute inset-0 w-full h-full",
1056
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
1057
- allowFullScreen: true,
1058
- loading: "lazy"
1059
- }
1060
- )
1061
- },
1062
- i
1063
- )) }) });
1064
- }
1065
-
1066
- // src/components/SocialProof/index.ts
1067
- var SocialProof = {
1068
- Card: SocialProofCard,
1069
- Grid: SocialProofGrid,
1070
- Logos: SocialProofLogos,
1071
- Featured: SocialProofFeatured,
1072
- Carousel: SocialProofCarousel,
1073
- VerticalGrid: VerticalVideoGrid
1074
- };
1075
- function getEmbedUrl(src) {
1076
- const ytMatch = src.match(
1077
- /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]+)/
1078
- );
1079
- if (ytMatch) return `https://www.youtube-nocookie.com/embed/${ytMatch[1]}?autoplay=1&rel=0`;
1080
- const vimeoMatch = src.match(/(?:vimeo\.com\/)(\d+)/);
1081
- if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}?autoplay=1`;
1082
- const loomMatch = src.match(/(?:loom\.com\/share\/)([a-zA-Z0-9]+)/);
1083
- if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;
1084
- return src;
1085
- }
1086
- var PlayIcon2 = () => /* @__PURE__ */ jsxs("svg", { width: "64", height: "64", viewBox: "0 0 64 64", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [
1087
- /* @__PURE__ */ jsx("circle", { cx: "32", cy: "32", r: "32", className: "ds-video-lightbox__play-bg" }),
1088
- /* @__PURE__ */ jsx("path", { d: "M26 20v24l20-12L26 20z", fill: "white" })
1089
- ] });
1090
- var CloseIcon = () => /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
1091
- /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1092
- /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1093
- ] });
1094
- var VideoLightbox = forwardRef(
1095
- ({
1096
- videoUrl,
1097
- thumbnailSrc,
1098
- thumbnailAlt,
1099
- title = "Video",
1100
- trigger,
1101
- className,
1102
- onPlay
1103
- }, ref) => {
1104
- const [open, setOpen] = useState(false);
1105
- const handleOpen = useCallback(() => {
1106
- setOpen(true);
1107
- onPlay?.();
1108
- }, [onPlay]);
1109
- return /* @__PURE__ */ jsx("div", { ref, className: clsx7("ds-video-lightbox", className), children: /* @__PURE__ */ jsxs(Dialog.Root, { open, onOpenChange: setOpen, children: [
1110
- /* @__PURE__ */ jsx(
1111
- Dialog.Trigger,
1112
- {
1113
- className: "ds-video-lightbox__trigger",
1114
- onClick: handleOpen,
1115
- children: trigger || /* @__PURE__ */ jsxs("div", { className: "ds-video-lightbox__thumbnail-wrap", children: [
1116
- thumbnailSrc ? /* @__PURE__ */ jsx(
1117
- "img",
1118
- {
1119
- src: thumbnailSrc,
1120
- alt: thumbnailAlt || `Play: ${title}`,
1121
- className: "ds-video-lightbox__thumbnail",
1122
- loading: "lazy",
1123
- decoding: "async"
1124
- }
1125
- ) : /* @__PURE__ */ jsx("div", { className: "ds-video-lightbox__placeholder" }),
1126
- /* @__PURE__ */ jsx("div", { className: "ds-video-lightbox__overlay", children: /* @__PURE__ */ jsx("div", { className: "ds-video-lightbox__play-btn", children: /* @__PURE__ */ jsx(PlayIcon2, {}) }) })
1127
- ] })
1128
- }
1129
- ),
1130
- /* @__PURE__ */ jsxs(Dialog.Portal, { children: [
1131
- /* @__PURE__ */ jsx(Dialog.Backdrop, { className: "ds-video-lightbox__backdrop" }),
1132
- /* @__PURE__ */ jsxs(Dialog.Popup, { className: "ds-video-lightbox__popup", children: [
1133
- /* @__PURE__ */ jsx(Dialog.Close, { className: "ds-video-lightbox__close", "aria-label": "Close video", children: /* @__PURE__ */ jsx(CloseIcon, {}) }),
1134
- /* @__PURE__ */ jsx(Dialog.Title, { className: "ds-sr-only", children: title }),
1135
- /* @__PURE__ */ jsx("div", { className: "ds-video-lightbox__iframe-wrap", children: open && /* @__PURE__ */ jsx(
1136
- "iframe",
1137
- {
1138
- src: getEmbedUrl(videoUrl),
1139
- title,
1140
- className: "ds-video-lightbox__iframe",
1141
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
1142
- allowFullScreen: true
1143
- }
1144
- ) })
1145
- ] })
1146
- ] })
1147
- ] }) });
1148
- }
1149
- );
1150
- VideoLightbox.displayName = "VideoLightbox";
1151
- var MetricCounter = forwardRef(
1152
- ({
1153
- value,
1154
- prefix = "",
1155
- suffix = "",
1156
- duration = 1500,
1157
- decimals = 0,
1158
- label,
1159
- className,
1160
- ...props
1161
- }, ref) => {
1162
- const [displayValue, setDisplayValue] = useState(0);
1163
- const [hasAnimated, setHasAnimated] = useState(false);
1164
- const containerRef = useRef(null);
1165
- const prefersReducedMotion = useRef(false);
1166
- useEffect(() => {
1167
- prefersReducedMotion.current = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
1168
- if (prefersReducedMotion.current) {
1169
- setDisplayValue(value);
1170
- setHasAnimated(true);
1171
- return;
1172
- }
1173
- const observer = new IntersectionObserver(
1174
- (entries) => {
1175
- if (entries[0].isIntersecting && !hasAnimated) {
1176
- startAnimation();
1177
- observer.disconnect();
1178
- }
1179
- },
1180
- { threshold: 0.5 }
1181
- );
1182
- if (containerRef.current) {
1183
- observer.observe(containerRef.current);
1184
- }
1185
- return () => observer.disconnect();
1186
- }, [value, hasAnimated]);
1187
- const startAnimation = () => {
1188
- let startTime;
1189
- setHasAnimated(true);
1190
- const easeOutExpo = (t) => {
1191
- return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);
1192
- };
1193
- const animate = (currentTime) => {
1194
- if (!startTime) startTime = currentTime;
1195
- const progress = Math.min((currentTime - startTime) / duration, 1);
1196
- const currentMultiplier = easeOutExpo(progress);
1197
- const nextValue = value * currentMultiplier;
1198
- setDisplayValue(nextValue);
1199
- if (progress < 1) {
1200
- requestAnimationFrame(animate);
1201
- } else {
1202
- setDisplayValue(value);
1203
- }
1204
- };
1205
- requestAnimationFrame(animate);
1206
- };
1207
- const formattedValue = displayValue.toLocaleString(void 0, {
1208
- minimumFractionDigits: decimals,
1209
- maximumFractionDigits: decimals
1210
- });
1211
- return /* @__PURE__ */ jsxs(
1212
- "div",
1213
- {
1214
- ref: (node) => {
1215
- containerRef.current = node;
1216
- if (typeof ref === "function") ref(node);
1217
- else if (ref) ref.current = node;
1218
- },
1219
- className: clsx7("ds-metric-counter", className),
1220
- ...props,
1221
- children: [
1222
- /* @__PURE__ */ jsxs("div", { className: "ds-metric-counter__value-wrapper", children: [
1223
- prefix && /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__prefix", children: prefix }),
1224
- /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__value", children: formattedValue }),
1225
- suffix && /* @__PURE__ */ jsx("span", { className: "ds-metric-counter__suffix", children: suffix })
1226
- ] }),
1227
- label && /* @__PURE__ */ jsx("div", { className: "ds-metric-counter__label", children: label })
1228
- ]
1229
- }
1230
- );
1231
- }
1232
- );
1233
- MetricCounter.displayName = "MetricCounter";
1234
-
1235
- export { MetricCounter, PlatformBadge, SocialProof, SocialProofCard, SocialProofCarousel, SocialProofFeatured, SocialProofGrid, SocialProofLogos, StarRating, VerticalVideoGrid, VideoLightbox };
2
+ export { PlatformBadge, SocialProof, SocialProofCard, SocialProofCarousel, SocialProofFeatured, SocialProofGrid, SocialProofLogos, StarRating, VerticalVideoGrid, VideoLightbox } from '../chunk-LOWEAQST.js';
3
+ import '../chunk-YNVRDD2P.js';
4
+ export { MetricCounter } from '../chunk-YSYR54XR.js';
5
+ import '../chunk-KBA2LFBG.js';
6
+ import '../chunk-KJ2OXQF4.js';
7
+ import '../chunk-HN4PHABT.js';
1236
8
  //# sourceMappingURL=out.js.map
1237
9
  //# sourceMappingURL=index.js.map