@salesmind-ai/design-system 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/admin/index.cjs +68 -2928
  2. package/dist/admin/index.cjs.map +1 -1
  3. package/dist/admin/index.js +5 -2915
  4. package/dist/admin/index.js.map +1 -1
  5. package/dist/blog/index.cjs +53 -1064
  6. package/dist/blog/index.cjs.map +1 -1
  7. package/dist/blog/index.js +8 -1054
  8. package/dist/blog/index.js.map +1 -1
  9. package/dist/charts/index.cjs +46 -2694
  10. package/dist/charts/index.cjs.map +1 -1
  11. package/dist/charts/index.js +3 -2680
  12. package/dist/charts/index.js.map +1 -1
  13. package/dist/chunk-2GARWEJK.js +17 -0
  14. package/dist/chunk-2GARWEJK.js.map +1 -0
  15. package/dist/chunk-2KQVZ5FB.js +485 -0
  16. package/dist/chunk-2KQVZ5FB.js.map +1 -0
  17. package/dist/chunk-2ZNR2F2V.cjs +194 -0
  18. package/dist/chunk-2ZNR2F2V.cjs.map +1 -0
  19. package/dist/chunk-3NKRFUAR.js +37 -0
  20. package/dist/chunk-3NKRFUAR.js.map +1 -0
  21. package/dist/chunk-3TGSIILM.cjs +201 -0
  22. package/dist/chunk-3TGSIILM.cjs.map +1 -0
  23. package/dist/chunk-4GM5BGBN.cjs +801 -0
  24. package/dist/chunk-4GM5BGBN.cjs.map +1 -0
  25. package/dist/chunk-5LGDEZWY.cjs +2434 -0
  26. package/dist/chunk-5LGDEZWY.cjs.map +1 -0
  27. package/dist/chunk-6H4DSTXR.js +786 -0
  28. package/dist/chunk-6H4DSTXR.js.map +1 -0
  29. package/dist/chunk-6HKQ5ILL.cjs +1624 -0
  30. package/dist/chunk-6HKQ5ILL.cjs.map +1 -0
  31. package/dist/chunk-6UNG76Y2.js +153 -0
  32. package/dist/chunk-6UNG76Y2.js.map +1 -0
  33. package/dist/chunk-7PX2AZ6Y.js +39 -0
  34. package/dist/chunk-7PX2AZ6Y.js.map +1 -0
  35. package/dist/chunk-B6AVAX4F.js +1415 -0
  36. package/dist/chunk-B6AVAX4F.js.map +1 -0
  37. package/dist/chunk-BILT5KD3.js +264 -0
  38. package/dist/chunk-BILT5KD3.js.map +1 -0
  39. package/dist/chunk-C2BCDNAV.js +24 -0
  40. package/dist/chunk-C2BCDNAV.js.map +1 -0
  41. package/dist/chunk-CH42VPWE.cjs +421 -0
  42. package/dist/chunk-CH42VPWE.cjs.map +1 -0
  43. package/dist/chunk-CJ2MKVAF.cjs +46 -0
  44. package/dist/chunk-CJ2MKVAF.cjs.map +1 -0
  45. package/dist/chunk-DP74LUXG.cjs +98 -0
  46. package/dist/chunk-DP74LUXG.cjs.map +1 -0
  47. package/dist/chunk-E7D6EKJ4.cjs +44 -0
  48. package/dist/chunk-E7D6EKJ4.cjs.map +1 -0
  49. package/dist/chunk-ECXBTUH6.cjs +584 -0
  50. package/dist/chunk-ECXBTUH6.cjs.map +1 -0
  51. package/dist/chunk-EFRAP5ES.js +157 -0
  52. package/dist/chunk-EFRAP5ES.js.map +1 -0
  53. package/dist/chunk-EM7JHRYW.cjs +69 -0
  54. package/dist/chunk-EM7JHRYW.cjs.map +1 -0
  55. package/dist/chunk-FAFAP4L5.js +183 -0
  56. package/dist/chunk-FAFAP4L5.js.map +1 -0
  57. package/dist/chunk-H2Y6BSTL.cjs +69 -0
  58. package/dist/chunk-H2Y6BSTL.cjs.map +1 -0
  59. package/dist/chunk-HN4PHABT.js +126 -0
  60. package/dist/chunk-HN4PHABT.js.map +1 -0
  61. package/dist/chunk-HRENHNDJ.js +211 -0
  62. package/dist/chunk-HRENHNDJ.js.map +1 -0
  63. package/dist/chunk-I75BFEYT.cjs +2561 -0
  64. package/dist/chunk-I75BFEYT.cjs.map +1 -0
  65. package/dist/chunk-IFRATNLU.js +562 -0
  66. package/dist/chunk-IFRATNLU.js.map +1 -0
  67. package/dist/chunk-JNASH4OQ.js +1022 -0
  68. package/dist/chunk-JNASH4OQ.js.map +1 -0
  69. package/dist/chunk-JPJN4YBC.js +409 -0
  70. package/dist/chunk-JPJN4YBC.js.map +1 -0
  71. package/dist/chunk-KCKUSU2M.cjs +166 -0
  72. package/dist/chunk-KCKUSU2M.cjs.map +1 -0
  73. package/dist/chunk-KDLH35OI.cjs +1042 -0
  74. package/dist/chunk-KDLH35OI.cjs.map +1 -0
  75. package/dist/chunk-KJ2OXQF4.js +287 -0
  76. package/dist/chunk-KJ2OXQF4.js.map +1 -0
  77. package/dist/chunk-KK5UO2P4.cjs +717 -0
  78. package/dist/chunk-KK5UO2P4.cjs.map +1 -0
  79. package/dist/chunk-KNQEIU7O.cjs +1202 -0
  80. package/dist/chunk-KNQEIU7O.cjs.map +1 -0
  81. package/dist/chunk-KVGSVGRK.cjs +569 -0
  82. package/dist/chunk-KVGSVGRK.cjs.map +1 -0
  83. package/dist/chunk-L352JRV6.cjs +105 -0
  84. package/dist/chunk-L352JRV6.cjs.map +1 -0
  85. package/dist/chunk-LGNMFBLF.cjs +502 -0
  86. package/dist/chunk-LGNMFBLF.cjs.map +1 -0
  87. package/dist/chunk-LJADZITX.cjs +298 -0
  88. package/dist/chunk-LJADZITX.cjs.map +1 -0
  89. package/dist/chunk-MDB2WCRQ.cjs +137 -0
  90. package/dist/chunk-MDB2WCRQ.cjs.map +1 -0
  91. package/dist/chunk-MQDEE7HC.cjs +283 -0
  92. package/dist/chunk-MQDEE7HC.cjs.map +1 -0
  93. package/dist/chunk-MQRB634A.cjs +34 -0
  94. package/dist/chunk-MQRB634A.cjs.map +1 -0
  95. package/dist/chunk-MU6GW5ZV.js +2317 -0
  96. package/dist/chunk-MU6GW5ZV.js.map +1 -0
  97. package/dist/chunk-NN3TUHIH.js +28 -0
  98. package/dist/chunk-NN3TUHIH.js.map +1 -0
  99. package/dist/chunk-NT4LBP7D.cjs +111 -0
  100. package/dist/chunk-NT4LBP7D.cjs.map +1 -0
  101. package/dist/chunk-OGKGIXFC.cjs +2162 -0
  102. package/dist/chunk-OGKGIXFC.cjs.map +1 -0
  103. package/dist/chunk-OXNXEQY7.js +2538 -0
  104. package/dist/chunk-OXNXEQY7.js.map +1 -0
  105. package/dist/chunk-P5BOFE5A.js +546 -0
  106. package/dist/chunk-P5BOFE5A.js.map +1 -0
  107. package/dist/chunk-PE2KJVRN.js +185 -0
  108. package/dist/chunk-PE2KJVRN.js.map +1 -0
  109. package/dist/chunk-Q2MFGYTE.cjs +1449 -0
  110. package/dist/chunk-Q2MFGYTE.cjs.map +1 -0
  111. package/dist/chunk-Q75DBVDY.cjs +68 -0
  112. package/dist/chunk-Q75DBVDY.cjs.map +1 -0
  113. package/dist/chunk-RQUFZAZ7.js +1608 -0
  114. package/dist/chunk-RQUFZAZ7.js.map +1 -0
  115. package/dist/chunk-SICKWUWB.js +62 -0
  116. package/dist/chunk-SICKWUWB.js.map +1 -0
  117. package/dist/chunk-T343CCH5.js +1190 -0
  118. package/dist/chunk-T343CCH5.js.map +1 -0
  119. package/dist/chunk-T5H5PNLN.js +701 -0
  120. package/dist/chunk-T5H5PNLN.js.map +1 -0
  121. package/dist/chunk-U3LK2GID.js +2122 -0
  122. package/dist/chunk-U3LK2GID.js.map +1 -0
  123. package/dist/chunk-UFAJY2DM.js +62 -0
  124. package/dist/chunk-UFAJY2DM.js.map +1 -0
  125. package/dist/chunk-VC5LMUVQ.cjs +20 -0
  126. package/dist/chunk-VC5LMUVQ.cjs.map +1 -0
  127. package/dist/chunk-VM7WFMKI.cjs +76 -0
  128. package/dist/chunk-VM7WFMKI.cjs.map +1 -0
  129. package/dist/chunk-W2WTP6HS.cjs +233 -0
  130. package/dist/chunk-W2WTP6HS.cjs.map +1 -0
  131. package/dist/chunk-WH7PYHZY.cjs +35 -0
  132. package/dist/chunk-WH7PYHZY.cjs.map +1 -0
  133. package/dist/chunk-XU3OMQ7V.js +98 -0
  134. package/dist/chunk-XU3OMQ7V.js.map +1 -0
  135. package/dist/chunk-XWPDRMZG.js +62 -0
  136. package/dist/chunk-XWPDRMZG.js.map +1 -0
  137. package/dist/chunk-Y3CPKNB7.js +67 -0
  138. package/dist/chunk-Y3CPKNB7.js.map +1 -0
  139. package/dist/chunk-YNVRDD2P.js +98 -0
  140. package/dist/chunk-YNVRDD2P.js.map +1 -0
  141. package/dist/chunk-YSYR54XR.js +92 -0
  142. package/dist/chunk-YSYR54XR.js.map +1 -0
  143. package/dist/chunk-YTYDQBVY.cjs +162 -0
  144. package/dist/chunk-YTYDQBVY.cjs.map +1 -0
  145. package/dist/core/index.cjs +807 -4333
  146. package/dist/core/index.cjs.map +1 -1
  147. package/dist/core/index.js +14 -4130
  148. package/dist/core/index.js.map +1 -1
  149. package/dist/i18n/index.cjs +86 -558
  150. package/dist/i18n/index.cjs.map +1 -1
  151. package/dist/i18n/index.js +1 -544
  152. package/dist/i18n/index.js.map +1 -1
  153. package/dist/index.cjs +1432 -17140
  154. package/dist/index.cjs.map +1 -1
  155. package/dist/index.js +31 -16785
  156. package/dist/index.js.map +1 -1
  157. package/dist/marketing/index.cjs +142 -3072
  158. package/dist/marketing/index.cjs.map +1 -1
  159. package/dist/marketing/index.js +11 -3042
  160. package/dist/marketing/index.js.map +1 -1
  161. package/dist/motion/index.cjs +26 -1222
  162. package/dist/motion/index.cjs.map +1 -1
  163. package/dist/motion/index.js +2 -1215
  164. package/dist/motion/index.js.map +1 -1
  165. package/dist/nav/index.cjs +101 -1518
  166. package/dist/nav/index.cjs.map +1 -1
  167. package/dist/nav/index.js +4 -1498
  168. package/dist/nav/index.js.map +1 -1
  169. package/dist/report/index.cjs +171 -2403
  170. package/dist/report/index.cjs.map +1 -1
  171. package/dist/report/index.js +3 -2363
  172. package/dist/report/index.js.map +1 -1
  173. package/dist/sections/index.cjs +22 -377
  174. package/dist/sections/index.cjs.map +1 -1
  175. package/dist/sections/index.js +6 -369
  176. package/dist/sections/index.js.map +1 -1
  177. package/dist/social-proof/index.cjs +53 -1250
  178. package/dist/social-proof/index.cjs.map +1 -1
  179. package/dist/social-proof/index.js +6 -1235
  180. package/dist/social-proof/index.js.map +1 -1
  181. package/dist/theme/index.cjs +38 -565
  182. package/dist/theme/index.cjs.map +1 -1
  183. package/dist/theme/index.js +2 -555
  184. package/dist/theme/index.js.map +1 -1
  185. package/dist/web/client/index.cjs +38 -491
  186. package/dist/web/client/index.cjs.map +1 -1
  187. package/dist/web/client/index.js +4 -483
  188. package/dist/web/client/index.js.map +1 -1
  189. package/dist/web/index.cjs +158 -1346
  190. package/dist/web/index.cjs.map +1 -1
  191. package/dist/web/index.js +9 -1305
  192. package/dist/web/index.js.map +1 -1
  193. package/dist/web/server/index.cjs +26 -563
  194. package/dist/web/server/index.cjs.map +1 -1
  195. package/dist/web/server/index.js +1 -560
  196. package/dist/web/server/index.js.map +1 -1
  197. package/package.json +1 -1
@@ -1,1358 +1,170 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkKVGSVGRK_cjs = require('../chunk-KVGSVGRK.cjs');
5
+ var chunkYTYDQBVY_cjs = require('../chunk-YTYDQBVY.cjs');
6
+ var chunkMQDEE7HC_cjs = require('../chunk-MQDEE7HC.cjs');
7
+ require('../chunk-H2Y6BSTL.cjs');
8
+ var chunkVC5LMUVQ_cjs = require('../chunk-VC5LMUVQ.cjs');
9
+ var chunkLJADZITX_cjs = require('../chunk-LJADZITX.cjs');
4
10
  var jsxRuntime = require('react/jsx-runtime');
5
- var React = require('react');
6
- var reactSlot = require('@radix-ui/react-slot');
7
- var clsx = require('clsx');
8
- var lucideReact = require('lucide-react');
9
11
 
10
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
-
12
- var React__default = /*#__PURE__*/_interopDefault(React);
13
- var clsx__default = /*#__PURE__*/_interopDefault(clsx);
14
-
15
- // src/web/seo/schema-generators.ts
16
- function toISO8601Duration(duration) {
17
- if (duration.startsWith("PT")) return duration;
18
- const parts = duration.split(":").map(Number);
19
- if (parts.some(isNaN)) return duration;
20
- if (parts.length === 3) return `PT${parts[0]}H${parts[1]}M${parts[2]}S`;
21
- if (parts.length === 2) return `PT${parts[0]}M${parts[1]}S`;
22
- return `PT${parts[0]}S`;
23
- }
24
- function toEmbedUrl(url) {
25
- try {
26
- const parsed = new URL(url);
27
- if (parsed.hostname.includes("youtube.com") && parsed.searchParams.has("v")) {
28
- return `https://www.youtube.com/embed/${parsed.searchParams.get("v")}`;
29
- }
30
- if (parsed.hostname === "youtu.be") {
31
- return `https://www.youtube.com/embed${parsed.pathname}`;
32
- }
33
- return url;
34
- } catch {
35
- return void 0;
36
- }
37
- }
38
- function mapEmploymentType(type) {
39
- if (!type) return "FULL_TIME";
40
- const lower = type.toLowerCase();
41
- if (lower.includes("part")) return "PART_TIME";
42
- if (lower.includes("contract")) return "CONTRACTOR";
43
- if (lower.includes("intern")) return "INTERN";
44
- if (lower.includes("temporary") || lower.includes("temp")) return "TEMPORARY";
45
- return "FULL_TIME";
46
- }
47
- function createEntityIds(brand) {
48
- return {
49
- organization: `${brand.url}/#organization`,
50
- website: `${brand.url}/#website`,
51
- software: `${brand.url}/#software`,
52
- product: `${brand.url}/pricing#product`,
53
- webpage: (path) => `${brand.url}${path}#webpage`,
54
- article: (path) => `${brand.url}${path}#article`,
55
- faq: (path) => `${brand.url}${path}#faq`,
56
- breadcrumb: (path) => `${brand.url}${path}#breadcrumb`,
57
- person: (slug) => `${brand.url}/company/team#person-${slug}`,
58
- video: (path) => `${brand.url}${path}#video`,
59
- review: (id) => `${brand.url}/#review-${id}`,
60
- service: (slug) => `${brand.url}/#service-${slug}`,
61
- customerOrganization: (slug) => `${brand.url}/#customer-org-${slug}`,
62
- customerPerson: (slug) => `${brand.url}/#customer-person-${slug}`
63
- };
64
- }
65
- function createSchemaGenerators(brand, supportedLanguages = ["en", "fr", "es"]) {
66
- const ENTITY_IDS = createEntityIds(brand);
67
- return {
68
- /** Organization schema — Homepage + About page. */
69
- organization(locale = "en") {
70
- return {
71
- "@context": "https://schema.org",
72
- "@type": "Organization",
73
- "@id": ENTITY_IDS.organization,
74
- name: brand.name,
75
- url: brand.url,
76
- logo: {
77
- "@type": "ImageObject",
78
- url: `${brand.url}/logo.svg`
79
- },
80
- description: brand.description,
81
- inLanguage: locale,
82
- availableLanguage: [...supportedLanguages],
83
- founder: {
84
- "@type": "Person",
85
- name: brand.founder
86
- },
87
- sameAs: [],
88
- contactPoint: [],
89
- areaServed: "Worldwide"
90
- };
91
- },
92
- /** WebSite schema — Homepage only (with SearchAction). */
93
- website(locale = "en") {
94
- return {
95
- "@context": "https://schema.org",
96
- "@type": "WebSite",
97
- "@id": ENTITY_IDS.website,
98
- name: brand.name,
99
- url: brand.url,
100
- description: brand.tagline,
101
- inLanguage: locale,
102
- publisher: {
103
- "@type": "Organization",
104
- "@id": ENTITY_IDS.organization,
105
- name: brand.name
106
- },
107
- potentialAction: [
108
- {
109
- "@type": "SearchAction",
110
- target: {
111
- "@type": "EntryPoint",
112
- urlTemplate: `${brand.url}/blog?q={search_term_string}`
113
- },
114
- "query-input": "required name=search_term_string"
115
- },
116
- {
117
- "@type": "ReadAction",
118
- target: brand.url
119
- }
120
- ]
121
- };
122
- },
123
- /** WebPage schema — Every public page. Links to WebSite + Breadcrumb via @id. */
124
- webPage(path, title, description, locale = "en", speakable) {
125
- return {
126
- "@context": "https://schema.org",
127
- "@type": "WebPage",
128
- "@id": ENTITY_IDS.webpage(path),
129
- url: `${brand.url}${path}`,
130
- name: title,
131
- description,
132
- inLanguage: locale,
133
- isPartOf: { "@type": "WebSite", "@id": ENTITY_IDS.website },
134
- breadcrumb: { "@id": ENTITY_IDS.breadcrumb(path) },
135
- potentialAction: {
136
- "@type": "ReadAction",
137
- target: `${brand.url}${path}`
138
- },
139
- ...speakable ? { speakable } : {}
140
- };
141
- },
142
- /** SoftwareApplication schema — Platform Hub, Platform Feature, Pricing. */
143
- softwareApplication(name, description, url, locale = "en") {
144
- return {
145
- "@context": "https://schema.org",
146
- "@type": "SoftwareApplication",
147
- "@id": ENTITY_IDS.software,
148
- name: name || brand.name,
149
- description: description || brand.description,
150
- url: url || brand.url,
151
- applicationCategory: "BusinessApplication",
152
- operatingSystem: "Web",
153
- inLanguage: locale,
154
- availableLanguage: [...supportedLanguages],
155
- offers: {
156
- "@type": "AggregateOffer",
157
- priceCurrency: "USD",
158
- lowPrice: "0",
159
- highPrice: "0",
160
- offerCount: "2",
161
- priceSpecification: {
162
- "@type": "PriceSpecification",
163
- description: "Custom pricing \u2014 contact sales for a tailored quote"
164
- }
165
- },
166
- author: {
167
- "@type": "Organization",
168
- "@id": ENTITY_IDS.organization,
169
- name: brand.name
170
- }
171
- };
172
- },
173
- /** Article schema — Blog posts, Comparison pages. */
174
- article(meta, locale = "en") {
175
- let path;
176
- try {
177
- path = new URL(meta.url).pathname;
178
- } catch {
179
- path = meta.url.startsWith("/") ? meta.url : `/${meta.url}`;
180
- }
181
- return {
182
- "@context": "https://schema.org",
183
- "@type": "Article",
184
- "@id": ENTITY_IDS.article(path),
185
- headline: meta.title,
186
- description: meta.description,
187
- url: meta.url.startsWith("http") ? meta.url : `${brand.url}${meta.url}`,
188
- image: meta.image || `${brand.url}/og-default.png`,
189
- datePublished: meta.publishedTime,
190
- dateModified: meta.modifiedTime,
191
- inLanguage: locale,
192
- author: meta.authorSlug ? { "@id": ENTITY_IDS.person(meta.authorSlug) } : {
193
- "@type": "Person",
194
- name: meta.authorName,
195
- url: meta.authorUrl || `${brand.url}/company/team`
196
- },
197
- publisher: {
198
- "@type": "Organization",
199
- "@id": ENTITY_IDS.organization,
200
- name: brand.name,
201
- logo: {
202
- "@type": "ImageObject",
203
- url: `${brand.url}/logo.svg`
204
- }
205
- },
206
- isPartOf: { "@type": "WebSite", "@id": ENTITY_IDS.website },
207
- mainEntityOfPage: { "@id": ENTITY_IDS.webpage(path) },
208
- articleSection: meta.section,
209
- keywords: meta.tags?.join(", "),
210
- speakable: {
211
- "@type": "SpeakableSpecification",
212
- cssSelector: meta.speakableCssSelectors || ["article h1", "article .summary", "article .lead"]
213
- },
214
- ...meta.about ? { about: meta.about } : {},
215
- ...meta.video ? { video: meta.video } : {}
216
- };
217
- },
218
- /** FAQPage schema — FAQ hub, Solutions, Platform Features, Comparisons, Integrations. */
219
- faqPage(items, pageUrl, locale = "en") {
220
- return {
221
- "@context": "https://schema.org",
222
- "@type": "FAQPage",
223
- "@id": ENTITY_IDS.faq(pageUrl),
224
- inLanguage: locale,
225
- mainEntity: items.map((item) => ({
226
- "@type": "Question",
227
- name: item.question,
228
- acceptedAnswer: {
229
- "@type": "Answer",
230
- text: item.answer,
231
- inLanguage: locale
232
- }
233
- }))
234
- };
235
- },
236
- /** BreadcrumbList schema — Every public page. */
237
- breadcrumb(items, locale = "en") {
238
- const lastUrl = items.length > 0 ? items[items.length - 1].url : "/";
239
- const path = lastUrl.startsWith("http") ? new URL(lastUrl).pathname : lastUrl;
240
- return {
241
- "@context": "https://schema.org",
242
- "@type": "BreadcrumbList",
243
- "@id": ENTITY_IDS.breadcrumb(path),
244
- inLanguage: locale,
245
- itemListElement: items.map((item, index) => ({
246
- "@type": "ListItem",
247
- position: index + 1,
248
- name: item.name,
249
- item: item.url.startsWith("http") ? item.url : `${brand.url}${item.url}`
250
- }))
251
- };
252
- },
253
- /** Person schema — Team page, Blog author, Comparison author. */
254
- person(person, locale = "en") {
255
- const slug = person.slug || person.name.toLowerCase().replace(/\s+/g, "-");
256
- return {
257
- "@context": "https://schema.org",
258
- "@type": "Person",
259
- "@id": person.entityIdOverride || ENTITY_IDS.person(slug),
260
- name: person.name,
261
- jobTitle: person.jobTitle,
262
- url: person.url,
263
- image: person.image,
264
- inLanguage: locale,
265
- worksFor: person.worksFor || {
266
- "@type": "Organization",
267
- "@id": ENTITY_IDS.organization,
268
- name: brand.name
269
- },
270
- sameAs: person.sameAs || []
271
- };
272
- },
273
- /** Review schema — Generated from testimonials. */
274
- review(testimonial) {
275
- return {
276
- "@context": "https://schema.org",
277
- "@type": "Review",
278
- "@id": ENTITY_IDS.review(testimonial.id),
279
- author: {
280
- "@type": "Person",
281
- ...testimonial.authorEntityId ? { "@id": testimonial.authorEntityId } : {},
282
- name: testimonial.customer_name,
283
- ...testimonial.occupation ? { jobTitle: testimonial.occupation } : {}
284
- },
285
- reviewBody: testimonial.quote || "",
286
- ...testimonial.star_rating ? {
287
- reviewRating: {
288
- "@type": "Rating",
289
- ratingValue: String(testimonial.star_rating),
290
- bestRating: "5",
291
- worstRating: "1"
292
- }
293
- } : {},
294
- ...testimonial.review_date ? { datePublished: testimonial.review_date } : {},
295
- itemReviewed: {
296
- "@type": "SoftwareApplication",
297
- "@id": ENTITY_IDS.software,
298
- name: brand.name
299
- },
300
- ...testimonial.review_source ? {
301
- publisher: {
302
- "@type": "Organization",
303
- name: testimonial.review_source
304
- }
305
- } : {}
306
- };
307
- },
308
- /** Product + multiple Offers schema — Pricing page. */
309
- productWithOffers(plans, testimonials = [], locale = "en") {
310
- return {
311
- "@context": "https://schema.org",
312
- "@type": "Product",
313
- "@id": ENTITY_IDS.product,
314
- name: brand.name,
315
- description: brand.description,
316
- brand: {
317
- "@type": "Organization",
318
- "@id": ENTITY_IDS.organization,
319
- name: brand.name
320
- },
321
- inLanguage: locale,
322
- ...testimonials.length > 0 ? { aggregateRating: aggregateRatingFromTestimonials(testimonials) } : {},
323
- offers: plans.map((plan) => ({
324
- "@type": "Offer",
325
- name: plan.name,
326
- description: plan.description,
327
- price: plan.price.replace(/[^0-9.]/g, "") || "0",
328
- priceCurrency: plan.priceCurrency || "USD",
329
- availability: "https://schema.org/InStock",
330
- url: `${brand.url}/pricing`,
331
- ...plan.billingPeriod ? {
332
- priceSpecification: {
333
- "@type": "UnitPriceSpecification",
334
- price: plan.price.replace(/[^0-9.]/g, "") || "0",
335
- priceCurrency: plan.priceCurrency || "USD",
336
- billingDuration: plan.billingPeriod
337
- }
338
- } : {}
339
- }))
340
- };
341
- },
342
- /** VideoObject schema — Transcript detail pages. */
343
- videoObject(transcript, locale = "en") {
344
- const path = transcript.path || `/resources/transcripts/${transcript.slug}`;
345
- return {
346
- "@context": "https://schema.org",
347
- "@type": "VideoObject",
348
- "@id": ENTITY_IDS.video(path),
349
- name: transcript.title,
350
- description: transcript.summary || transcript.title,
351
- ...transcript.video_link ? { contentUrl: transcript.video_link } : {},
352
- ...transcript.video_link ? { embedUrl: toEmbedUrl(transcript.video_link) } : {},
353
- ...transcript.duration ? { duration: toISO8601Duration(transcript.duration) } : {},
354
- ...transcript.published_at ? { uploadDate: transcript.published_at } : {},
355
- ...transcript.thumbnailUrl ? { thumbnailUrl: transcript.thumbnailUrl } : {},
356
- inLanguage: locale,
357
- publisher: {
358
- "@type": "Organization",
359
- "@id": ENTITY_IDS.organization,
360
- name: brand.name
361
- },
362
- ...transcript.transcript_text ? { transcript: transcript.transcript_text } : {}
363
- };
364
- },
365
- /** CustomerOrganization schema — Customer's company for Success Story pages. */
366
- customerOrganization(meta) {
367
- return {
368
- "@context": "https://schema.org",
369
- "@type": "Organization",
370
- "@id": ENTITY_IDS.customerOrganization(meta.slug),
371
- name: meta.name,
372
- ...meta.url ? { url: meta.url } : {},
373
- ...meta.logo ? { logo: meta.logo } : {},
374
- ...meta.description ? { description: meta.description } : {},
375
- ...meta.industry ? { industry: meta.industry } : {},
376
- ...meta.sameAs && meta.sameAs.length > 0 ? { sameAs: meta.sameAs } : {}
377
- };
378
- },
379
- /** Generic VideoObject — Success story main video and shorts. */
380
- videoObjectGeneric(meta, locale = "en") {
381
- const videoId = meta.fragment ? `${brand.url}${meta.path}#${meta.fragment}` : ENTITY_IDS.video(meta.path);
382
- return {
383
- "@context": "https://schema.org",
384
- "@type": "VideoObject",
385
- "@id": videoId,
386
- name: meta.title,
387
- ...meta.description ? { description: meta.description } : {},
388
- ...meta.videoUrl ? { contentUrl: meta.videoUrl } : {},
389
- ...meta.embedUrl ? { embedUrl: meta.embedUrl } : {},
390
- ...meta.thumbnailUrl ? { thumbnailUrl: meta.thumbnailUrl } : {},
391
- ...meta.duration ? { duration: meta.duration } : {},
392
- ...meta.uploadDate ? { uploadDate: meta.uploadDate } : {},
393
- ...meta.transcript ? { transcript: meta.transcript } : {},
394
- inLanguage: locale,
395
- publisher: { "@id": ENTITY_IDS.organization }
396
- };
397
- },
398
- /** HowTo schema — Solution pages, tutorial blog posts. */
399
- howTo(steps, meta, locale = "en") {
400
- return {
401
- "@context": "https://schema.org",
402
- "@type": "HowTo",
403
- name: meta.name,
404
- description: meta.description,
405
- inLanguage: locale,
406
- ...meta.totalTime ? { totalTime: meta.totalTime } : {},
407
- ...meta.image ? { image: meta.image } : {},
408
- step: steps.map((step, index) => ({
409
- "@type": "HowToStep",
410
- position: index + 1,
411
- name: step.name,
412
- text: step.text,
413
- ...step.url ? { url: step.url } : {},
414
- ...step.image ? { image: step.image } : {}
415
- }))
416
- };
417
- },
418
- /** Service schema — Growth motion service offerings. */
419
- service(motion, locale = "en") {
420
- return {
421
- "@context": "https://schema.org",
422
- "@type": "Service",
423
- "@id": ENTITY_IDS.service(motion.slug),
424
- name: motion.name,
425
- description: motion.description,
426
- url: motion.url.startsWith("http") ? motion.url : `${brand.url}${motion.url}`,
427
- provider: {
428
- "@type": "Organization",
429
- "@id": ENTITY_IDS.organization,
430
- name: brand.name
431
- },
432
- inLanguage: locale,
433
- availableLanguage: [...supportedLanguages],
434
- areaServed: "Worldwide",
435
- ...motion.price ? {
436
- offers: {
437
- "@type": "Offer",
438
- price: motion.price.replace(/[^0-9.]/g, "") || "0",
439
- priceCurrency: motion.priceCurrency || "USD",
440
- availability: "https://schema.org/InStock"
441
- }
442
- } : {},
443
- termsOfService: `${brand.url}/legal/terms`
444
- };
445
- },
446
- /** JobPosting schema — Career detail pages. */
447
- jobPosting(job, locale = "en") {
448
- return {
449
- "@context": "https://schema.org",
450
- "@type": "JobPosting",
451
- "@id": `${brand.url}/careers/${job.slug}#jobposting`,
452
- title: job.title,
453
- description: job.description || "",
454
- datePosted: job.published_at || job.created_at,
455
- employmentType: mapEmploymentType(job.type),
456
- hiringOrganization: {
457
- "@type": "Organization",
458
- "@id": ENTITY_IDS.organization,
459
- name: brand.name,
460
- sameAs: brand.url
461
- },
462
- ...job.location ? {
463
- jobLocation: {
464
- "@type": "Place",
465
- address: {
466
- "@type": "PostalAddress",
467
- addressLocality: job.location
468
- }
469
- }
470
- } : {
471
- jobLocationType: "TELECOMMUTE"
472
- },
473
- inLanguage: locale
474
- };
475
- },
476
- /** ItemList schema — Hub/listing pages. */
477
- itemList(items, listName) {
478
- return {
479
- "@context": "https://schema.org",
480
- "@type": "ItemList",
481
- name: listName,
482
- numberOfItems: items.length,
483
- itemListElement: items.map((item, index) => ({
484
- "@type": "ListItem",
485
- position: item.position ?? index + 1,
486
- name: item.name,
487
- url: item.url.startsWith("http") ? item.url : `${brand.url}${item.url}`,
488
- ...item.description ? { description: item.description } : {},
489
- ...item.image ? { image: item.image } : {}
490
- }))
491
- };
492
- },
493
- /** DefinedTermSet schema — Glossary page. */
494
- definedTermSet(terms, locale = "en") {
495
- return {
496
- "@context": "https://schema.org",
497
- "@type": "DefinedTermSet",
498
- "@id": `${brand.url}/resources/glossary#termset`,
499
- name: "AI Sales Glossary",
500
- inLanguage: locale,
501
- hasDefinedTerm: terms.map((term) => ({
502
- "@type": "DefinedTerm",
503
- name: term.term,
504
- description: term.definition,
505
- url: term.url || `${brand.url}/resources/glossary#${term.slug}`
506
- }))
507
- };
508
- },
509
- /** Speakable — marks content sections suitable for voice assistant reading. */
510
- speakable(cssSelectors) {
511
- return {
512
- "@type": "SpeakableSpecification",
513
- cssSelector: cssSelectors
514
- };
515
- },
516
- /** Access the entity IDs for cross-referencing */
517
- entityIds: ENTITY_IDS
518
- };
519
- }
520
- function aggregateRatingFromTestimonials(testimonials) {
521
- const rated = testimonials.filter((t) => t.star_rating != null && t.star_rating > 0);
522
- if (rated.length === 0) {
523
- return {
524
- "@type": "AggregateRating",
525
- ratingValue: "4.7",
526
- ratingCount: "150",
527
- bestRating: "5",
528
- worstRating: "1"
529
- };
530
- }
531
- const sum = rated.reduce((acc, t) => acc + (t.star_rating || 0), 0);
532
- const avg = (sum / rated.length).toFixed(1);
533
- return {
534
- "@type": "AggregateRating",
535
- ratingValue: avg,
536
- ratingCount: String(rated.length),
537
- bestRating: "5",
538
- worstRating: "1"
539
- };
540
- }
541
- function buildPageGraph(...schemas) {
542
- const graph = schemas.map((schema) => {
543
- const { "@context": _, ...rest } = schema;
544
- return rest;
545
- });
546
- return {
547
- "@context": "https://schema.org",
548
- "@graph": graph
549
- };
550
- }
551
- function canonicalUrl(baseUrl, pathname, locale) {
552
- const clean = pathname === "/" ? "/" : pathname.replace(/\/+$/, "");
553
- if (locale && locale !== "en") {
554
- const stripped = clean.replace(new RegExp(`^/${locale}(/|$)`), "$1") || "/";
555
- const path = stripped === "/" ? "" : stripped;
556
- return `${baseUrl}/${locale}${path}`;
557
- }
558
- return `${baseUrl}${clean}`;
559
- }
560
- function JsonLd({ data, nonce }) {
561
- const json = JSON.stringify(data).replace(/<\/script>/gi, "<\\/script>");
562
- return /* @__PURE__ */ jsxRuntime.jsx(
563
- "script",
564
- {
565
- type: "application/ld+json",
566
- nonce,
567
- dangerouslySetInnerHTML: { __html: json }
568
- }
569
- );
12
+ function UtmProvider({ params, children }) {
13
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLJADZITX_cjs.UtmContext.Provider, { value: params, children });
570
14
  }
571
15
 
572
- // src/web/analytics/create-analytics-loader.ts
573
- function createAnalyticsLoader(config) {
574
- return (trackingId) => {
575
- if (typeof document === "undefined") return;
576
- if (document.getElementById(config.id)) return;
577
- const script = document.createElement("script");
578
- script.id = config.id;
579
- if (config.inlineScript) {
580
- script.textContent = config.inlineScript(trackingId);
581
- } else {
582
- script.async = config.async ?? true;
583
- script.src = config.src(trackingId);
584
- }
585
- document.head.appendChild(script);
586
- config.onLoad?.(trackingId);
587
- };
588
- }
589
- var loadGoogleAnalytics = createAnalyticsLoader({
590
- id: "ga-script",
591
- src: (gaId) => `https://www.googletagmanager.com/gtag/js?id=${gaId}`,
592
- onLoad: (gaId) => {
593
- window.dataLayer = window.dataLayer || [];
594
- window.dataLayer.push(["js", /* @__PURE__ */ new Date()]);
595
- window.dataLayer.push(["config", gaId]);
596
- }
16
+ Object.defineProperty(exports, "JsonLd", {
17
+ enumerable: true,
18
+ get: function () { return chunkKVGSVGRK_cjs.JsonLd; }
597
19
  });
598
- var loadClarity = createAnalyticsLoader({
599
- id: "clarity-script",
600
- src: (clarityId) => `https://www.clarity.ms/tag/${clarityId}`,
601
- onLoad: () => {
602
- if (!window.clarity) {
603
- const queue = [];
604
- window.clarity = (...args) => {
605
- queue.push(args);
606
- };
607
- window.clarity.q = queue;
608
- }
609
- }
20
+ Object.defineProperty(exports, "aggregateRatingFromTestimonials", {
21
+ enumerable: true,
22
+ get: function () { return chunkKVGSVGRK_cjs.aggregateRatingFromTestimonials; }
23
+ });
24
+ Object.defineProperty(exports, "buildPageGraph", {
25
+ enumerable: true,
26
+ get: function () { return chunkKVGSVGRK_cjs.buildPageGraph; }
27
+ });
28
+ Object.defineProperty(exports, "canonicalUrl", {
29
+ enumerable: true,
30
+ get: function () { return chunkKVGSVGRK_cjs.canonicalUrl; }
31
+ });
32
+ Object.defineProperty(exports, "createEntityIds", {
33
+ enumerable: true,
34
+ get: function () { return chunkKVGSVGRK_cjs.createEntityIds; }
35
+ });
36
+ Object.defineProperty(exports, "createSchemaGenerators", {
37
+ enumerable: true,
38
+ get: function () { return chunkKVGSVGRK_cjs.createSchemaGenerators; }
39
+ });
40
+ Object.defineProperty(exports, "AnalyticsProvider", {
41
+ enumerable: true,
42
+ get: function () { return chunkYTYDQBVY_cjs.AnalyticsProvider; }
43
+ });
44
+ Object.defineProperty(exports, "COOKIE_CONSENT_EVENT", {
45
+ enumerable: true,
46
+ get: function () { return chunkYTYDQBVY_cjs.COOKIE_CONSENT_EVENT; }
47
+ });
48
+ Object.defineProperty(exports, "COOKIE_CONSENT_KEY", {
49
+ enumerable: true,
50
+ get: function () { return chunkYTYDQBVY_cjs.COOKIE_CONSENT_KEY; }
51
+ });
52
+ Object.defineProperty(exports, "CookieConsent", {
53
+ enumerable: true,
54
+ get: function () { return chunkYTYDQBVY_cjs.CookieConsent; }
55
+ });
56
+ Object.defineProperty(exports, "createAnalyticsLoader", {
57
+ enumerable: true,
58
+ get: function () { return chunkYTYDQBVY_cjs.createAnalyticsLoader; }
59
+ });
60
+ Object.defineProperty(exports, "loadClarity", {
61
+ enumerable: true,
62
+ get: function () { return chunkYTYDQBVY_cjs.loadClarity; }
63
+ });
64
+ Object.defineProperty(exports, "loadGoogleAnalytics", {
65
+ enumerable: true,
66
+ get: function () { return chunkYTYDQBVY_cjs.loadGoogleAnalytics; }
67
+ });
68
+ Object.defineProperty(exports, "useCookieConsent", {
69
+ enumerable: true,
70
+ get: function () { return chunkYTYDQBVY_cjs.useCookieConsent; }
71
+ });
72
+ Object.defineProperty(exports, "UTM_CAMPAIGNS", {
73
+ enumerable: true,
74
+ get: function () { return chunkMQDEE7HC_cjs.UTM_CAMPAIGNS; }
75
+ });
76
+ Object.defineProperty(exports, "UTM_CONTENTS", {
77
+ enumerable: true,
78
+ get: function () { return chunkMQDEE7HC_cjs.UTM_CONTENTS; }
79
+ });
80
+ Object.defineProperty(exports, "UTM_MEDIUMS_ALL", {
81
+ enumerable: true,
82
+ get: function () { return chunkMQDEE7HC_cjs.UTM_MEDIUMS_ALL; }
83
+ });
84
+ Object.defineProperty(exports, "UTM_MEDIUMS_APP", {
85
+ enumerable: true,
86
+ get: function () { return chunkMQDEE7HC_cjs.UTM_MEDIUMS_APP; }
87
+ });
88
+ Object.defineProperty(exports, "UTM_MEDIUMS_MESSAGING", {
89
+ enumerable: true,
90
+ get: function () { return chunkMQDEE7HC_cjs.UTM_MEDIUMS_MESSAGING; }
91
+ });
92
+ Object.defineProperty(exports, "UTM_MEDIUMS_WEB", {
93
+ enumerable: true,
94
+ get: function () { return chunkMQDEE7HC_cjs.UTM_MEDIUMS_WEB; }
95
+ });
96
+ Object.defineProperty(exports, "UTM_SOURCES", {
97
+ enumerable: true,
98
+ get: function () { return chunkMQDEE7HC_cjs.UTM_SOURCES; }
99
+ });
100
+ Object.defineProperty(exports, "UTM_SOURCES_REQUIRING_SELLER", {
101
+ enumerable: true,
102
+ get: function () { return chunkMQDEE7HC_cjs.UTM_SOURCES_REQUIRING_SELLER; }
103
+ });
104
+ Object.defineProperty(exports, "UTM_TERMS", {
105
+ enumerable: true,
106
+ get: function () { return chunkMQDEE7HC_cjs.UTM_TERMS; }
107
+ });
108
+ Object.defineProperty(exports, "buildBlockedError", {
109
+ enumerable: true,
110
+ get: function () { return chunkMQDEE7HC_cjs.buildBlockedError; }
111
+ });
112
+ Object.defineProperty(exports, "classifyAndEnforce", {
113
+ enumerable: true,
114
+ get: function () { return chunkMQDEE7HC_cjs.classifyAndEnforce; }
115
+ });
116
+ Object.defineProperty(exports, "createAuditEntry", {
117
+ enumerable: true,
118
+ get: function () { return chunkMQDEE7HC_cjs.createAuditEntry; }
119
+ });
120
+ Object.defineProperty(exports, "isValidUtmParams", {
121
+ enumerable: true,
122
+ get: function () { return chunkMQDEE7HC_cjs.isValidUtmParams; }
123
+ });
124
+ Object.defineProperty(exports, "parseUtmParams", {
125
+ enumerable: true,
126
+ get: function () { return chunkMQDEE7HC_cjs.parseUtmParams; }
127
+ });
128
+ Object.defineProperty(exports, "requiresSellerAttribution", {
129
+ enumerable: true,
130
+ get: function () { return chunkMQDEE7HC_cjs.requiresSellerAttribution; }
131
+ });
132
+ Object.defineProperty(exports, "toFirstTouchAttribution", {
133
+ enumerable: true,
134
+ get: function () { return chunkMQDEE7HC_cjs.toFirstTouchAttribution; }
135
+ });
136
+ Object.defineProperty(exports, "validateCompliance", {
137
+ enumerable: true,
138
+ get: function () { return chunkMQDEE7HC_cjs.validateCompliance; }
139
+ });
140
+ Object.defineProperty(exports, "validateUtmField", {
141
+ enumerable: true,
142
+ get: function () { return chunkMQDEE7HC_cjs.validateUtmField; }
143
+ });
144
+ Object.defineProperty(exports, "useAnalytics", {
145
+ enumerable: true,
146
+ get: function () { return chunkVC5LMUVQ_cjs.useAnalytics; }
147
+ });
148
+ Object.defineProperty(exports, "buildUtmUrl", {
149
+ enumerable: true,
150
+ get: function () { return chunkLJADZITX_cjs.buildUtmUrl; }
151
+ });
152
+ Object.defineProperty(exports, "classifyUrl", {
153
+ enumerable: true,
154
+ get: function () { return chunkLJADZITX_cjs.classifyUrl; }
155
+ });
156
+ Object.defineProperty(exports, "isUtmExempt", {
157
+ enumerable: true,
158
+ get: function () { return chunkLJADZITX_cjs.isUtmExempt; }
159
+ });
160
+ Object.defineProperty(exports, "requiresUtm", {
161
+ enumerable: true,
162
+ get: function () { return chunkLJADZITX_cjs.requiresUtm; }
163
+ });
164
+ Object.defineProperty(exports, "useUtmDefaults", {
165
+ enumerable: true,
166
+ get: function () { return chunkLJADZITX_cjs.useUtmDefaults; }
610
167
  });
611
- var Button = React__default.default.forwardRef(
612
- ({ className, variant = "primary", size = "md", asChild = false, isLoading = false, children, disabled, ...props }, ref) => {
613
- const buttonClass = clsx__default.default(
614
- "ds-button",
615
- `ds-button--${variant}`,
616
- size === "icon" ? "ds-button--icon ds-button--md" : `ds-button--${size}`,
617
- isLoading && "ds-button--loading",
618
- className
619
- );
620
- if (asChild) {
621
- return /* @__PURE__ */ jsxRuntime.jsx(
622
- reactSlot.Slot,
623
- {
624
- ref,
625
- "aria-disabled": isLoading || disabled || void 0,
626
- className: buttonClass,
627
- ...props,
628
- children
629
- }
630
- );
631
- }
632
- return /* @__PURE__ */ jsxRuntime.jsxs(
633
- "button",
634
- {
635
- ref,
636
- disabled: isLoading || disabled,
637
- className: buttonClass,
638
- ...props,
639
- children: [
640
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(
641
- "svg",
642
- {
643
- className: "ds-button__spinner",
644
- xmlns: "http://www.w3.org/2000/svg",
645
- width: "1em",
646
- height: "1em",
647
- viewBox: "0 0 24 24",
648
- fill: "none",
649
- stroke: "currentColor",
650
- strokeWidth: "2",
651
- strokeLinecap: "round",
652
- strokeLinejoin: "round",
653
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
654
- }
655
- ),
656
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx__default.default("ds-button__content", isLoading && "ds-button__content--hidden"), children })
657
- ]
658
- }
659
- );
660
- }
661
- );
662
- Button.displayName = "Button";
663
- var UtmContext = React.createContext(null);
664
-
665
- // src/web/utm/useUtmDefaults.ts
666
- function useUtmDefaults() {
667
- return React.useContext(UtmContext);
668
- }
669
-
670
- // src/web/utm/builders.ts
671
- var PLACEHOLDER_ORIGIN = "https://__placeholder__.internal";
672
- function buildUtmUrl(baseUrl, params) {
673
- const isRelative = baseUrl.startsWith("/");
674
- let url;
675
- try {
676
- url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);
677
- } catch {
678
- return baseUrl;
679
- }
680
- const existingParams = [];
681
- url.searchParams.forEach((value, key) => {
682
- existingParams.push([key, value]);
683
- });
684
- for (const [key] of existingParams) {
685
- url.searchParams.delete(key);
686
- }
687
- for (const [key, value] of existingParams) {
688
- if (!key.startsWith("utm_")) {
689
- url.searchParams.set(key, value);
690
- }
691
- }
692
- url.searchParams.set("utm_source", params.source);
693
- url.searchParams.set("utm_medium", params.medium);
694
- url.searchParams.set("utm_campaign", params.campaign);
695
- if (params.term !== void 0) {
696
- url.searchParams.set("utm_term", params.term);
697
- }
698
- if (params.content !== void 0) {
699
- url.searchParams.set("utm_content", params.content);
700
- }
701
- if (isRelative) {
702
- return url.href.replace(PLACEHOLDER_ORIGIN, "");
703
- }
704
- return url.href;
705
- }
706
-
707
- // src/web/utm/classifiers.ts
708
- var INTERNAL_PATTERNS = [
709
- /^\/(?!\/)/,
710
- // Relative paths
711
- /^https?:\/\/(www\.)?sales-mind\.ai/i,
712
- // Marketing site
713
- /^https?:\/\/app\.sales-mind\.ai/i,
714
- // Web app
715
- /^https?:\/\/apps\.sales-mind\.ai/i,
716
- // Web app (legacy)
717
- /^https?:\/\/meet\.sales-mind\.ai/i,
718
- // Booking
719
- /^https?:\/\/docs\.sales-mind\.ai/i
720
- // Docs
721
- ];
722
- var SYSTEM_PATTERNS = [
723
- /^https?:\/\/.*\/api\//i,
724
- // API endpoints
725
- /^https?:\/\/.*\/webhook/i,
726
- // Webhooks
727
- /^https?:\/\/.*\/oauth/i,
728
- // OAuth callbacks
729
- /^https?:\/\/.*\/callback/i,
730
- // Callbacks
731
- /^https?:\/\/.*\.supabase\.(co|com)/i,
732
- // Supabase
733
- /^https?:\/\/.*\.firebaseapp\.com/i,
734
- // Firebase
735
- /^https?:\/\/.*\.cloudfunctions\.net/i
736
- // Cloud Functions
737
- ];
738
- var ASSET_PATTERNS = [
739
- /\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\?.*)?$/i
740
- ];
741
- var CONVERSION_PATTERNS = [
742
- /^https?:\/\/(www\.)?calendly\.com/i,
743
- /^https?:\/\/(checkout\.)?stripe\.com/i,
744
- /^https?:\/\/buy\.stripe\.com/i,
745
- /^https?:\/\/chromewebstore\.google\.com/i,
746
- /^https?:\/\/meet\.sales-mind\.ai/i
747
- ];
748
- var PROTOCOL_EXEMPT = [
749
- /^mailto:/i,
750
- /^tel:/i,
751
- /^#/,
752
- /^javascript:/i
753
- ];
754
- function classifyUrl(url) {
755
- if (PROTOCOL_EXEMPT.some((p) => p.test(url))) return "protocol";
756
- if (ASSET_PATTERNS.some((p) => p.test(url))) return "asset";
757
- if (SYSTEM_PATTERNS.some((p) => p.test(url))) return "system";
758
- if (CONVERSION_PATTERNS.some((p) => p.test(url))) return "conversion";
759
- if (INTERNAL_PATTERNS.some((p) => p.test(url))) return "internal";
760
- return "external";
761
- }
762
- function requiresUtm(url) {
763
- const classification = classifyUrl(url);
764
- return classification === "external" || classification === "conversion";
765
- }
766
- function isUtmExempt(url) {
767
- const classification = classifyUrl(url);
768
- return classification === "protocol" || classification === "asset" || classification === "system" || classification === "internal";
769
- }
770
-
771
- // src/components/OutboundLink/outbound-link-utils.ts
772
- var LEGACY_UTM_SOURCE = "salesmind";
773
- var EXEMPT_PATTERNS = [
774
- /^https?:\/\/(www\.)?(stripe\.com|checkout\.stripe\.com|paypal\.com)/i,
775
- /^https?:\/\/(www\.)?github\.com\/login\/oauth/i
776
- ];
777
- var isExemptUrl = (urlStr) => {
778
- if (urlStr.startsWith("mailto:") || urlStr.startsWith("tel:")) return true;
779
- const classification = classifyUrl(urlStr);
780
- if (classification === "system" || classification === "protocol" || classification === "asset") {
781
- return true;
782
- }
783
- return EXEMPT_PATTERNS.some((pattern) => pattern.test(urlStr));
784
- };
785
- var appendGovernedUTMs = (href, params, preserveExisting = true) => {
786
- try {
787
- const url = new URL(href);
788
- if (preserveExisting) {
789
- const hasAll = url.searchParams.has("utm_source") && url.searchParams.has("utm_medium") && url.searchParams.has("utm_campaign");
790
- if (hasAll) return href;
791
- }
792
- return buildUtmUrl(href, params);
793
- } catch {
794
- return href;
795
- }
796
- };
797
- var appendUTMs = (href, context, pageSlug, options) => {
798
- try {
799
- const url = new URL(href);
800
- const { mediumOverride = "outbound_link", campaignOverride, preserveExisting = true } = options;
801
- const utms = {
802
- utm_source: LEGACY_UTM_SOURCE,
803
- utm_medium: mediumOverride,
804
- utm_campaign: campaignOverride || pageSlug,
805
- utm_content: context
806
- };
807
- Object.entries(utms).forEach(([key, value]) => {
808
- if (value) {
809
- if (preserveExisting && url.searchParams.has(key)) {
810
- return;
811
- }
812
- url.searchParams.set(key, value);
813
- }
814
- });
815
- return url.toString();
816
- } catch {
817
- return href;
818
- }
819
- };
820
- var OutboundLink = React.forwardRef(
821
- ({
822
- href,
823
- context,
824
- campaignOverride,
825
- mediumOverride = "outbound_link",
826
- preserveExistingUTM = true,
827
- openInNewTab = true,
828
- disableTracking = false,
829
- utmParams,
830
- onClick,
831
- children,
832
- ...props
833
- }, ref) => {
834
- const contextParams = useUtmDefaults();
835
- const resolvedUtmParams = utmParams ?? contextParams;
836
- let hostname = "";
837
- try {
838
- const url = new URL(href);
839
- hostname = url.hostname;
840
- } catch {
841
- }
842
- const [finalHref, setFinalHref] = React.useState(href);
843
- React.useEffect(() => {
844
- let isExternal = false;
845
- let currentMedium = mediumOverride;
846
- try {
847
- const url = new URL(href);
848
- const currentHost = window.location.hostname;
849
- isExternal = url.hostname !== currentHost;
850
- if (isExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
851
- if (currentMedium === "outbound_link") {
852
- currentMedium = "cross_subdomain";
853
- }
854
- }
855
- } catch {
856
- isExternal = false;
857
- }
858
- const isExempt = isExemptUrl(href) || disableTracking;
859
- if (isExternal && !isExempt) {
860
- if (resolvedUtmParams) {
861
- setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));
862
- } else {
863
- const pageSlug = window.location.pathname.replace(/^\/|\/$/g, "") || "home";
864
- setFinalHref(appendUTMs(href, context, pageSlug, {
865
- mediumOverride: currentMedium,
866
- campaignOverride,
867
- preserveExisting: preserveExistingUTM
868
- }));
869
- }
870
- } else {
871
- setFinalHref(href);
872
- }
873
- }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);
874
- const handleClick = (e) => {
875
- if (typeof window === "undefined" || disableTracking) {
876
- onClick?.(e);
877
- return;
878
- }
879
- let clickExternal = false;
880
- let clickCrossSubdomain = false;
881
- let clickMedium = mediumOverride;
882
- try {
883
- const url = new URL(href);
884
- const currentHost = window.location.hostname;
885
- clickExternal = url.hostname !== currentHost;
886
- if (clickExternal && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
887
- clickCrossSubdomain = true;
888
- if (clickMedium === "outbound_link") {
889
- clickMedium = "cross_subdomain";
890
- }
891
- }
892
- } catch {
893
- }
894
- if (clickExternal) {
895
- const detail = {
896
- destination_domain: hostname,
897
- destination_url: finalHref,
898
- utm_medium_type: clickMedium,
899
- page_slug: window.location.pathname,
900
- component_location: context,
901
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
902
- is_cross_subdomain: clickCrossSubdomain
903
- };
904
- const event = new CustomEvent("outbound_click", { detail });
905
- window.dispatchEvent(event);
906
- }
907
- onClick?.(e);
908
- };
909
- const relParts = [];
910
- let shouldOpenNewTab = openInNewTab;
911
- try {
912
- const url = new URL(href);
913
- if (typeof window !== "undefined") {
914
- const currentHost = window.location.hostname;
915
- if (url.hostname !== currentHost && currentHost.includes("sales-mind.ai") && url.hostname.includes("sales-mind.ai")) {
916
- shouldOpenNewTab = false;
917
- }
918
- }
919
- } catch {
920
- }
921
- if (shouldOpenNewTab) relParts.push("noopener", "noreferrer");
922
- if (mediumOverride === "citation") relParts.push("nofollow");
923
- const rel = relParts.length > 0 ? relParts.join(" ") : void 0;
924
- return (
925
- // eslint-disable-next-line no-restricted-syntax
926
- /* @__PURE__ */ jsxRuntime.jsx(
927
- "a",
928
- {
929
- ref,
930
- href: finalHref,
931
- target: shouldOpenNewTab ? "_blank" : void 0,
932
- rel,
933
- onClick: handleClick,
934
- ...props,
935
- children
936
- }
937
- )
938
- );
939
- }
940
- );
941
- OutboundLink.displayName = "OutboundLink";
942
- var COOKIE_CONSENT_EVENT = "cookie_consent_granted";
943
- var COOKIE_CONSENT_KEY = "cookie_consent";
944
- function CookieConsent({
945
- delay = 1e3,
946
- privacyUrl = "/legal/privacy",
947
- onAccept,
948
- onDecline,
949
- labels,
950
- className
951
- }) {
952
- const [state, setState] = React.useState("idle");
953
- React.useEffect(() => {
954
- const consent = localStorage.getItem(COOKIE_CONSENT_KEY);
955
- if (!consent) {
956
- const timer = setTimeout(() => setState("open"), delay);
957
- return () => clearTimeout(timer);
958
- } else {
959
- setState("closed");
960
- }
961
- }, [delay]);
962
- const handleDismiss = React.useCallback(() => {
963
- setState("closing");
964
- }, []);
965
- const handleAccept = React.useCallback(() => {
966
- localStorage.setItem(COOKIE_CONSENT_KEY, "granted");
967
- handleDismiss();
968
- if (typeof window !== "undefined") {
969
- window.dispatchEvent(new Event(COOKIE_CONSENT_EVENT));
970
- }
971
- onAccept?.();
972
- }, [onAccept, handleDismiss]);
973
- const handleDecline = React.useCallback(() => {
974
- localStorage.setItem(COOKIE_CONSENT_KEY, "denied");
975
- handleDismiss();
976
- onDecline?.();
977
- }, [onDecline, handleDismiss]);
978
- const handleTransitionEnd = React.useCallback(() => {
979
- if (state === "closing") {
980
- setState("closed");
981
- }
982
- }, [state]);
983
- if (state === "idle" || state === "closed") return null;
984
- return /* @__PURE__ */ jsxRuntime.jsx(
985
- "div",
986
- {
987
- className: `ds-cookie-consent ${className ?? ""}`,
988
- "data-state": state === "open" ? "open" : "closed",
989
- onTransitionEnd: handleTransitionEnd,
990
- role: "dialog",
991
- "aria-label": labels?.title ?? "Cookie consent",
992
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-cookie-consent__inner", children: [
993
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-cookie-consent__content", children: [
994
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "ds-cookie-consent__title", children: labels?.title ?? "We use cookies" }),
995
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "ds-cookie-consent__description", children: [
996
- labels?.description ?? "We use tracking cookies to understand how you use the product and help us improve it.",
997
- /* @__PURE__ */ jsxRuntime.jsx(OutboundLink, { href: privacyUrl, context: "cookie-consent-privacy", className: "ds-cookie-consent__link", children: labels?.privacyLinkText ?? "Privacy Policy" })
998
- ] })
999
- ] }),
1000
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-cookie-consent__actions", children: [
1001
- /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", size: "sm", onClick: handleDecline, children: labels?.declineLabel ?? "Decline" }),
1002
- /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", size: "sm", onClick: handleAccept, children: labels?.acceptLabel ?? "Accept" })
1003
- ] }),
1004
- /* @__PURE__ */ jsxRuntime.jsx(
1005
- "button",
1006
- {
1007
- onClick: handleDecline,
1008
- className: "ds-cookie-consent__close",
1009
- "aria-label": "Close",
1010
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: 16 })
1011
- }
1012
- )
1013
- ] })
1014
- }
1015
- );
1016
- }
1017
-
1018
- // src/web/analytics/use-cookie-consent.ts
1019
- function useCookieConsent() {
1020
- const [status, setStatus] = React.useState(() => {
1021
- if (typeof window === "undefined") return null;
1022
- const stored = localStorage.getItem(COOKIE_CONSENT_KEY);
1023
- if (stored === "granted") return "granted";
1024
- if (stored === "denied") return "denied";
1025
- return null;
1026
- });
1027
- React.useEffect(() => {
1028
- const handleConsent = () => setStatus("granted");
1029
- window.addEventListener(COOKIE_CONSENT_EVENT, handleConsent);
1030
- return () => window.removeEventListener(COOKIE_CONSENT_EVENT, handleConsent);
1031
- }, []);
1032
- return status;
1033
- }
1034
- var AnalyticsContext = React.createContext(null);
1035
- function AnalyticsProvider({ onTrack, debug = false, children }) {
1036
- const track = React.useCallback(
1037
- (event, props) => {
1038
- if (debug && typeof console !== "undefined") {
1039
- console.log("[DS Analytics]", event, props);
1040
- }
1041
- onTrack(event, props);
1042
- },
1043
- [onTrack, debug]
1044
- );
1045
- const value = React.useMemo(() => ({ track }), [track]);
1046
- return /* @__PURE__ */ jsxRuntime.jsx(AnalyticsContext.Provider, { value, children });
1047
- }
1048
- var NOOP_VALUE = {
1049
- track: () => {
1050
- }
1051
- };
1052
- function useAnalytics() {
1053
- return React.useContext(AnalyticsContext) ?? NOOP_VALUE;
1054
- }
1055
-
1056
- // src/web/utm/constants.ts
1057
- var UTM_SOURCES = [
1058
- "linkedin",
1059
- "whatsapp",
1060
- "intercom",
1061
- "email",
1062
- "website",
1063
- "app",
1064
- "chromeStore",
1065
- "stripe",
1066
- "direct"
1067
- ];
1068
- var UTM_MEDIUMS_MESSAGING = [
1069
- "dm",
1070
- "group",
1071
- "email",
1072
- "inAppChat",
1073
- "organicPost",
1074
- "paidAd",
1075
- "qrCode",
1076
- "redirect",
1077
- "storeListing"
1078
- ];
1079
- var UTM_MEDIUMS_APP = [
1080
- "appHome",
1081
- "appDashboard",
1082
- "appInbox",
1083
- "appContacts",
1084
- "appCampaigns",
1085
- "appSettings",
1086
- "appBilling",
1087
- "appCheckout",
1088
- "appOnboarding",
1089
- "appSupport",
1090
- "appCalendar"
1091
- ];
1092
- var UTM_MEDIUMS_WEB = [
1093
- "webHome",
1094
- "webDemo",
1095
- "webPricing",
1096
- "webFeatures",
1097
- "webUseCase",
1098
- "webSolution",
1099
- "webIndustry",
1100
- "webIntegrations",
1101
- "webBlog",
1102
- "webBlogPost",
1103
- "webLanding",
1104
- "webComparison",
1105
- "webCaseStudy",
1106
- "webAbout",
1107
- "webContact",
1108
- "webCareers",
1109
- "webLegal",
1110
- "webDocs",
1111
- "webAffiliate"
1112
- ];
1113
- var UTM_MEDIUMS_ALL = [
1114
- ...UTM_MEDIUMS_MESSAGING,
1115
- ...UTM_MEDIUMS_APP,
1116
- ...UTM_MEDIUMS_WEB
1117
- ];
1118
- var UTM_CAMPAIGNS = [
1119
- "discoveryCall",
1120
- "demo",
1121
- "trial",
1122
- "onboarding",
1123
- "upgrade",
1124
- "renewal",
1125
- "retention",
1126
- "accountSupport",
1127
- "supportCall",
1128
- "partnerCall",
1129
- "hiring",
1130
- "interviewCall"
1131
- ];
1132
- var UTM_TERMS = [
1133
- "julienGadea",
1134
- "bramSmith",
1135
- "florentDupont",
1136
- "sawLin",
1137
- "evaSupport",
1138
- "team",
1139
- "auto"
1140
- ];
1141
- var UTM_CONTENTS = [
1142
- "ctaPrimary",
1143
- "ctaSecondary",
1144
- "ctaHeader",
1145
- "ctaFooter",
1146
- "ctaInline",
1147
- "buttonPrimary",
1148
- "buttonSecondary",
1149
- "banner",
1150
- "popup",
1151
- "variantA",
1152
- "variantB",
1153
- "variantC"
1154
- ];
1155
- var UTM_SOURCES_REQUIRING_SELLER = [
1156
- "linkedin",
1157
- "whatsapp",
1158
- "intercom",
1159
- "email"
1160
- ];
1161
-
1162
- // src/web/utm/validators.ts
1163
- function validateUtmField(field, value) {
1164
- switch (field) {
1165
- case "source":
1166
- return UTM_SOURCES.includes(value);
1167
- case "medium":
1168
- return UTM_MEDIUMS_ALL.includes(value);
1169
- case "campaign":
1170
- return UTM_CAMPAIGNS.includes(value);
1171
- case "term":
1172
- return UTM_TERMS.includes(value);
1173
- case "content":
1174
- return UTM_CONTENTS.includes(value);
1175
- default:
1176
- return false;
1177
- }
1178
- }
1179
- function isValidUtmParams(params) {
1180
- if (!params.source || !params.medium || !params.campaign) {
1181
- return false;
1182
- }
1183
- if (!validateUtmField("source", params.source)) return false;
1184
- if (!validateUtmField("medium", params.medium)) return false;
1185
- if (!validateUtmField("campaign", params.campaign)) return false;
1186
- if (params.term !== void 0 && !validateUtmField("term", params.term)) return false;
1187
- if (params.content !== void 0 && !validateUtmField("content", params.content)) return false;
1188
- return true;
1189
- }
1190
- function validateCompliance(url, params) {
1191
- const errors = [];
1192
- const classification = classifyUrl(url);
1193
- const needsUtm = requiresUtm(url);
1194
- if (!needsUtm) {
1195
- return {
1196
- status: "compliant",
1197
- url,
1198
- params: params ?? null,
1199
- errors: []
1200
- };
1201
- }
1202
- if (!params) {
1203
- return {
1204
- status: "blocked",
1205
- url,
1206
- params: null,
1207
- errors: [`URL classified as '${classification}' requires UTM parameters but none provided`]
1208
- };
1209
- }
1210
- if (!params.source) errors.push("Missing required field: utm_source");
1211
- if (!params.medium) errors.push("Missing required field: utm_medium");
1212
- if (!params.campaign) errors.push("Missing required field: utm_campaign");
1213
- if (params.source && !validateUtmField("source", params.source)) {
1214
- errors.push(`Invalid utm_source: '${params.source}'. Must be one of: ${UTM_SOURCES.join(", ")}`);
1215
- }
1216
- if (params.medium && !validateUtmField("medium", params.medium)) {
1217
- errors.push(`Invalid utm_medium: '${params.medium}'. Must be one of governed enum values`);
1218
- }
1219
- if (params.campaign && !validateUtmField("campaign", params.campaign)) {
1220
- errors.push(`Invalid utm_campaign: '${params.campaign}'. Must be one of: ${UTM_CAMPAIGNS.join(", ")}`);
1221
- }
1222
- if (params.term !== void 0 && params.term && !validateUtmField("term", params.term)) {
1223
- errors.push(`Invalid utm_term: '${params.term}'. Must be one of: ${UTM_TERMS.join(", ")}`);
1224
- }
1225
- if (params.content !== void 0 && params.content && !validateUtmField("content", params.content)) {
1226
- errors.push(`Invalid utm_content: '${params.content}'. Must be one of: ${UTM_CONTENTS.join(", ")}`);
1227
- }
1228
- const allValues = [];
1229
- if (params.source) allValues.push(params.source);
1230
- if (params.medium) allValues.push(params.medium);
1231
- if (params.campaign) allValues.push(params.campaign);
1232
- if (params.term) allValues.push(params.term);
1233
- if (params.content) allValues.push(params.content);
1234
- for (const value of allValues) {
1235
- if (/\s/.test(value)) errors.push(`Value '${value}' contains spaces`);
1236
- if (/_/.test(value)) errors.push(`Value '${value}' contains underscores`);
1237
- if (/-/.test(value)) errors.push(`Value '${value}' contains hyphens`);
1238
- if (/[^\x20-\x7E]/.test(value)) errors.push(`Value '${value}' contains non-ASCII characters`);
1239
- if (value === value.toUpperCase() && value.length > 1) errors.push(`Value '${value}' is ALL CAPS`);
1240
- }
1241
- const status = errors.length === 0 ? "compliant" : "blocked";
1242
- return { status, url, params, errors };
1243
- }
1244
- function classifyAndEnforce(url, params) {
1245
- return validateCompliance(url, params);
1246
- }
1247
- function buildBlockedError(reason, url) {
1248
- return {
1249
- status: "UTM_COMPLIANCE_BLOCKED",
1250
- reason,
1251
- requiredFix: reason,
1252
- correctedExample: url ?? null
1253
- };
1254
- }
1255
-
1256
- // src/web/utm/attribution.ts
1257
- function parseUtmParams(search) {
1258
- if (!search) return {};
1259
- const params = new URLSearchParams(search);
1260
- const result = {};
1261
- const source = params.get("utm_source");
1262
- if (source && UTM_SOURCES.includes(source)) {
1263
- result.source = source;
1264
- }
1265
- const medium = params.get("utm_medium");
1266
- if (medium) {
1267
- result.medium = medium;
1268
- }
1269
- const campaign = params.get("utm_campaign");
1270
- if (campaign && UTM_CAMPAIGNS.includes(campaign)) {
1271
- result.campaign = campaign;
1272
- }
1273
- const term = params.get("utm_term");
1274
- if (term && UTM_TERMS.includes(term)) {
1275
- result.term = term;
1276
- }
1277
- const content = params.get("utm_content");
1278
- if (content && UTM_CONTENTS.includes(content)) {
1279
- result.content = content;
1280
- }
1281
- return result;
1282
- }
1283
- function toFirstTouchAttribution(params) {
1284
- return {
1285
- firstTouchSource: params.source,
1286
- firstTouchMedium: params.medium,
1287
- firstTouchCampaign: params.campaign,
1288
- firstTouchSeller: params.term ?? null
1289
- };
1290
- }
1291
- function requiresSellerAttribution(source) {
1292
- return UTM_SOURCES_REQUIRING_SELLER.includes(source);
1293
- }
1294
-
1295
- // src/web/utm/audit.ts
1296
- function createAuditEntry(url, params, generatorContext, confidence) {
1297
- const utmParts = [];
1298
- if (params) {
1299
- if (params.source) utmParts.push(`utm_source=${params.source}`);
1300
- if (params.medium) utmParts.push(`utm_medium=${params.medium}`);
1301
- if (params.campaign) utmParts.push(`utm_campaign=${params.campaign}`);
1302
- if (params.term) utmParts.push(`utm_term=${params.term}`);
1303
- if (params.content) utmParts.push(`utm_content=${params.content}`);
1304
- }
1305
- return {
1306
- url,
1307
- utmString: utmParts.join("&"),
1308
- generatorContext,
1309
- sellerAttribution: params?.term ?? null,
1310
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1311
- confidence
1312
- };
1313
- }
1314
- function UtmProvider({ params, children }) {
1315
- return /* @__PURE__ */ jsxRuntime.jsx(UtmContext.Provider, { value: params, children });
1316
- }
1317
-
1318
- exports.AnalyticsProvider = AnalyticsProvider;
1319
- exports.COOKIE_CONSENT_EVENT = COOKIE_CONSENT_EVENT;
1320
- exports.COOKIE_CONSENT_KEY = COOKIE_CONSENT_KEY;
1321
- exports.CookieConsent = CookieConsent;
1322
- exports.JsonLd = JsonLd;
1323
- exports.UTM_CAMPAIGNS = UTM_CAMPAIGNS;
1324
- exports.UTM_CONTENTS = UTM_CONTENTS;
1325
- exports.UTM_MEDIUMS_ALL = UTM_MEDIUMS_ALL;
1326
- exports.UTM_MEDIUMS_APP = UTM_MEDIUMS_APP;
1327
- exports.UTM_MEDIUMS_MESSAGING = UTM_MEDIUMS_MESSAGING;
1328
- exports.UTM_MEDIUMS_WEB = UTM_MEDIUMS_WEB;
1329
- exports.UTM_SOURCES = UTM_SOURCES;
1330
- exports.UTM_SOURCES_REQUIRING_SELLER = UTM_SOURCES_REQUIRING_SELLER;
1331
- exports.UTM_TERMS = UTM_TERMS;
1332
168
  exports.UtmProvider = UtmProvider;
1333
- exports.aggregateRatingFromTestimonials = aggregateRatingFromTestimonials;
1334
- exports.buildBlockedError = buildBlockedError;
1335
- exports.buildPageGraph = buildPageGraph;
1336
- exports.buildUtmUrl = buildUtmUrl;
1337
- exports.canonicalUrl = canonicalUrl;
1338
- exports.classifyAndEnforce = classifyAndEnforce;
1339
- exports.classifyUrl = classifyUrl;
1340
- exports.createAnalyticsLoader = createAnalyticsLoader;
1341
- exports.createAuditEntry = createAuditEntry;
1342
- exports.createEntityIds = createEntityIds;
1343
- exports.createSchemaGenerators = createSchemaGenerators;
1344
- exports.isUtmExempt = isUtmExempt;
1345
- exports.isValidUtmParams = isValidUtmParams;
1346
- exports.loadClarity = loadClarity;
1347
- exports.loadGoogleAnalytics = loadGoogleAnalytics;
1348
- exports.parseUtmParams = parseUtmParams;
1349
- exports.requiresSellerAttribution = requiresSellerAttribution;
1350
- exports.requiresUtm = requiresUtm;
1351
- exports.toFirstTouchAttribution = toFirstTouchAttribution;
1352
- exports.useAnalytics = useAnalytics;
1353
- exports.useCookieConsent = useCookieConsent;
1354
- exports.useUtmDefaults = useUtmDefaults;
1355
- exports.validateCompliance = validateCompliance;
1356
- exports.validateUtmField = validateUtmField;
1357
169
  //# sourceMappingURL=out.js.map
1358
170
  //# sourceMappingURL=index.cjs.map