@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,569 +1,32 @@
1
1
  'use strict';
2
2
 
3
- var jsxRuntime = require('react/jsx-runtime');
3
+ var chunkKVGSVGRK_cjs = require('../../chunk-KVGSVGRK.cjs');
4
4
 
5
- // src/web/seo/schema-generators.ts
6
- function toISO8601Duration(duration) {
7
- if (duration.startsWith("PT")) return duration;
8
- const parts = duration.split(":").map(Number);
9
- if (parts.some(isNaN)) return duration;
10
- if (parts.length === 3) return `PT${parts[0]}H${parts[1]}M${parts[2]}S`;
11
- if (parts.length === 2) return `PT${parts[0]}M${parts[1]}S`;
12
- return `PT${parts[0]}S`;
13
- }
14
- function toEmbedUrl(url) {
15
- try {
16
- const parsed = new URL(url);
17
- if (parsed.hostname.includes("youtube.com") && parsed.searchParams.has("v")) {
18
- return `https://www.youtube.com/embed/${parsed.searchParams.get("v")}`;
19
- }
20
- if (parsed.hostname === "youtu.be") {
21
- return `https://www.youtube.com/embed${parsed.pathname}`;
22
- }
23
- return url;
24
- } catch {
25
- return void 0;
26
- }
27
- }
28
- function mapEmploymentType(type) {
29
- if (!type) return "FULL_TIME";
30
- const lower = type.toLowerCase();
31
- if (lower.includes("part")) return "PART_TIME";
32
- if (lower.includes("contract")) return "CONTRACTOR";
33
- if (lower.includes("intern")) return "INTERN";
34
- if (lower.includes("temporary") || lower.includes("temp")) return "TEMPORARY";
35
- return "FULL_TIME";
36
- }
37
- function createEntityIds(brand) {
38
- return {
39
- organization: `${brand.url}/#organization`,
40
- website: `${brand.url}/#website`,
41
- software: `${brand.url}/#software`,
42
- product: `${brand.url}/pricing#product`,
43
- webpage: (path) => `${brand.url}${path}#webpage`,
44
- article: (path) => `${brand.url}${path}#article`,
45
- faq: (path) => `${brand.url}${path}#faq`,
46
- breadcrumb: (path) => `${brand.url}${path}#breadcrumb`,
47
- person: (slug) => `${brand.url}/company/team#person-${slug}`,
48
- video: (path) => `${brand.url}${path}#video`,
49
- review: (id) => `${brand.url}/#review-${id}`,
50
- service: (slug) => `${brand.url}/#service-${slug}`,
51
- customerOrganization: (slug) => `${brand.url}/#customer-org-${slug}`,
52
- customerPerson: (slug) => `${brand.url}/#customer-person-${slug}`
53
- };
54
- }
55
- function createSchemaGenerators(brand, supportedLanguages = ["en", "fr", "es"]) {
56
- const ENTITY_IDS = createEntityIds(brand);
57
- return {
58
- /** Organization schema — Homepage + About page. */
59
- organization(locale = "en") {
60
- return {
61
- "@context": "https://schema.org",
62
- "@type": "Organization",
63
- "@id": ENTITY_IDS.organization,
64
- name: brand.name,
65
- url: brand.url,
66
- logo: {
67
- "@type": "ImageObject",
68
- url: `${brand.url}/logo.svg`
69
- },
70
- description: brand.description,
71
- inLanguage: locale,
72
- availableLanguage: [...supportedLanguages],
73
- founder: {
74
- "@type": "Person",
75
- name: brand.founder
76
- },
77
- sameAs: [],
78
- contactPoint: [],
79
- areaServed: "Worldwide"
80
- };
81
- },
82
- /** WebSite schema — Homepage only (with SearchAction). */
83
- website(locale = "en") {
84
- return {
85
- "@context": "https://schema.org",
86
- "@type": "WebSite",
87
- "@id": ENTITY_IDS.website,
88
- name: brand.name,
89
- url: brand.url,
90
- description: brand.tagline,
91
- inLanguage: locale,
92
- publisher: {
93
- "@type": "Organization",
94
- "@id": ENTITY_IDS.organization,
95
- name: brand.name
96
- },
97
- potentialAction: [
98
- {
99
- "@type": "SearchAction",
100
- target: {
101
- "@type": "EntryPoint",
102
- urlTemplate: `${brand.url}/blog?q={search_term_string}`
103
- },
104
- "query-input": "required name=search_term_string"
105
- },
106
- {
107
- "@type": "ReadAction",
108
- target: brand.url
109
- }
110
- ]
111
- };
112
- },
113
- /** WebPage schema — Every public page. Links to WebSite + Breadcrumb via @id. */
114
- webPage(path, title, description, locale = "en", speakable) {
115
- return {
116
- "@context": "https://schema.org",
117
- "@type": "WebPage",
118
- "@id": ENTITY_IDS.webpage(path),
119
- url: `${brand.url}${path}`,
120
- name: title,
121
- description,
122
- inLanguage: locale,
123
- isPartOf: { "@type": "WebSite", "@id": ENTITY_IDS.website },
124
- breadcrumb: { "@id": ENTITY_IDS.breadcrumb(path) },
125
- potentialAction: {
126
- "@type": "ReadAction",
127
- target: `${brand.url}${path}`
128
- },
129
- ...speakable ? { speakable } : {}
130
- };
131
- },
132
- /** SoftwareApplication schema — Platform Hub, Platform Feature, Pricing. */
133
- softwareApplication(name, description, url, locale = "en") {
134
- return {
135
- "@context": "https://schema.org",
136
- "@type": "SoftwareApplication",
137
- "@id": ENTITY_IDS.software,
138
- name: name || brand.name,
139
- description: description || brand.description,
140
- url: url || brand.url,
141
- applicationCategory: "BusinessApplication",
142
- operatingSystem: "Web",
143
- inLanguage: locale,
144
- availableLanguage: [...supportedLanguages],
145
- offers: {
146
- "@type": "AggregateOffer",
147
- priceCurrency: "USD",
148
- lowPrice: "0",
149
- highPrice: "0",
150
- offerCount: "2",
151
- priceSpecification: {
152
- "@type": "PriceSpecification",
153
- description: "Custom pricing \u2014 contact sales for a tailored quote"
154
- }
155
- },
156
- author: {
157
- "@type": "Organization",
158
- "@id": ENTITY_IDS.organization,
159
- name: brand.name
160
- }
161
- };
162
- },
163
- /** Article schema — Blog posts, Comparison pages. */
164
- article(meta, locale = "en") {
165
- let path;
166
- try {
167
- path = new URL(meta.url).pathname;
168
- } catch {
169
- path = meta.url.startsWith("/") ? meta.url : `/${meta.url}`;
170
- }
171
- return {
172
- "@context": "https://schema.org",
173
- "@type": "Article",
174
- "@id": ENTITY_IDS.article(path),
175
- headline: meta.title,
176
- description: meta.description,
177
- url: meta.url.startsWith("http") ? meta.url : `${brand.url}${meta.url}`,
178
- image: meta.image || `${brand.url}/og-default.png`,
179
- datePublished: meta.publishedTime,
180
- dateModified: meta.modifiedTime,
181
- inLanguage: locale,
182
- author: meta.authorSlug ? { "@id": ENTITY_IDS.person(meta.authorSlug) } : {
183
- "@type": "Person",
184
- name: meta.authorName,
185
- url: meta.authorUrl || `${brand.url}/company/team`
186
- },
187
- publisher: {
188
- "@type": "Organization",
189
- "@id": ENTITY_IDS.organization,
190
- name: brand.name,
191
- logo: {
192
- "@type": "ImageObject",
193
- url: `${brand.url}/logo.svg`
194
- }
195
- },
196
- isPartOf: { "@type": "WebSite", "@id": ENTITY_IDS.website },
197
- mainEntityOfPage: { "@id": ENTITY_IDS.webpage(path) },
198
- articleSection: meta.section,
199
- keywords: meta.tags?.join(", "),
200
- speakable: {
201
- "@type": "SpeakableSpecification",
202
- cssSelector: meta.speakableCssSelectors || ["article h1", "article .summary", "article .lead"]
203
- },
204
- ...meta.about ? { about: meta.about } : {},
205
- ...meta.video ? { video: meta.video } : {}
206
- };
207
- },
208
- /** FAQPage schema — FAQ hub, Solutions, Platform Features, Comparisons, Integrations. */
209
- faqPage(items, pageUrl, locale = "en") {
210
- return {
211
- "@context": "https://schema.org",
212
- "@type": "FAQPage",
213
- "@id": ENTITY_IDS.faq(pageUrl),
214
- inLanguage: locale,
215
- mainEntity: items.map((item) => ({
216
- "@type": "Question",
217
- name: item.question,
218
- acceptedAnswer: {
219
- "@type": "Answer",
220
- text: item.answer,
221
- inLanguage: locale
222
- }
223
- }))
224
- };
225
- },
226
- /** BreadcrumbList schema — Every public page. */
227
- breadcrumb(items, locale = "en") {
228
- const lastUrl = items.length > 0 ? items[items.length - 1].url : "/";
229
- const path = lastUrl.startsWith("http") ? new URL(lastUrl).pathname : lastUrl;
230
- return {
231
- "@context": "https://schema.org",
232
- "@type": "BreadcrumbList",
233
- "@id": ENTITY_IDS.breadcrumb(path),
234
- inLanguage: locale,
235
- itemListElement: items.map((item, index) => ({
236
- "@type": "ListItem",
237
- position: index + 1,
238
- name: item.name,
239
- item: item.url.startsWith("http") ? item.url : `${brand.url}${item.url}`
240
- }))
241
- };
242
- },
243
- /** Person schema — Team page, Blog author, Comparison author. */
244
- person(person, locale = "en") {
245
- const slug = person.slug || person.name.toLowerCase().replace(/\s+/g, "-");
246
- return {
247
- "@context": "https://schema.org",
248
- "@type": "Person",
249
- "@id": person.entityIdOverride || ENTITY_IDS.person(slug),
250
- name: person.name,
251
- jobTitle: person.jobTitle,
252
- url: person.url,
253
- image: person.image,
254
- inLanguage: locale,
255
- worksFor: person.worksFor || {
256
- "@type": "Organization",
257
- "@id": ENTITY_IDS.organization,
258
- name: brand.name
259
- },
260
- sameAs: person.sameAs || []
261
- };
262
- },
263
- /** Review schema — Generated from testimonials. */
264
- review(testimonial) {
265
- return {
266
- "@context": "https://schema.org",
267
- "@type": "Review",
268
- "@id": ENTITY_IDS.review(testimonial.id),
269
- author: {
270
- "@type": "Person",
271
- ...testimonial.authorEntityId ? { "@id": testimonial.authorEntityId } : {},
272
- name: testimonial.customer_name,
273
- ...testimonial.occupation ? { jobTitle: testimonial.occupation } : {}
274
- },
275
- reviewBody: testimonial.quote || "",
276
- ...testimonial.star_rating ? {
277
- reviewRating: {
278
- "@type": "Rating",
279
- ratingValue: String(testimonial.star_rating),
280
- bestRating: "5",
281
- worstRating: "1"
282
- }
283
- } : {},
284
- ...testimonial.review_date ? { datePublished: testimonial.review_date } : {},
285
- itemReviewed: {
286
- "@type": "SoftwareApplication",
287
- "@id": ENTITY_IDS.software,
288
- name: brand.name
289
- },
290
- ...testimonial.review_source ? {
291
- publisher: {
292
- "@type": "Organization",
293
- name: testimonial.review_source
294
- }
295
- } : {}
296
- };
297
- },
298
- /** Product + multiple Offers schema — Pricing page. */
299
- productWithOffers(plans, testimonials = [], locale = "en") {
300
- return {
301
- "@context": "https://schema.org",
302
- "@type": "Product",
303
- "@id": ENTITY_IDS.product,
304
- name: brand.name,
305
- description: brand.description,
306
- brand: {
307
- "@type": "Organization",
308
- "@id": ENTITY_IDS.organization,
309
- name: brand.name
310
- },
311
- inLanguage: locale,
312
- ...testimonials.length > 0 ? { aggregateRating: aggregateRatingFromTestimonials(testimonials) } : {},
313
- offers: plans.map((plan) => ({
314
- "@type": "Offer",
315
- name: plan.name,
316
- description: plan.description,
317
- price: plan.price.replace(/[^0-9.]/g, "") || "0",
318
- priceCurrency: plan.priceCurrency || "USD",
319
- availability: "https://schema.org/InStock",
320
- url: `${brand.url}/pricing`,
321
- ...plan.billingPeriod ? {
322
- priceSpecification: {
323
- "@type": "UnitPriceSpecification",
324
- price: plan.price.replace(/[^0-9.]/g, "") || "0",
325
- priceCurrency: plan.priceCurrency || "USD",
326
- billingDuration: plan.billingPeriod
327
- }
328
- } : {}
329
- }))
330
- };
331
- },
332
- /** VideoObject schema — Transcript detail pages. */
333
- videoObject(transcript, locale = "en") {
334
- const path = transcript.path || `/resources/transcripts/${transcript.slug}`;
335
- return {
336
- "@context": "https://schema.org",
337
- "@type": "VideoObject",
338
- "@id": ENTITY_IDS.video(path),
339
- name: transcript.title,
340
- description: transcript.summary || transcript.title,
341
- ...transcript.video_link ? { contentUrl: transcript.video_link } : {},
342
- ...transcript.video_link ? { embedUrl: toEmbedUrl(transcript.video_link) } : {},
343
- ...transcript.duration ? { duration: toISO8601Duration(transcript.duration) } : {},
344
- ...transcript.published_at ? { uploadDate: transcript.published_at } : {},
345
- ...transcript.thumbnailUrl ? { thumbnailUrl: transcript.thumbnailUrl } : {},
346
- inLanguage: locale,
347
- publisher: {
348
- "@type": "Organization",
349
- "@id": ENTITY_IDS.organization,
350
- name: brand.name
351
- },
352
- ...transcript.transcript_text ? { transcript: transcript.transcript_text } : {}
353
- };
354
- },
355
- /** CustomerOrganization schema — Customer's company for Success Story pages. */
356
- customerOrganization(meta) {
357
- return {
358
- "@context": "https://schema.org",
359
- "@type": "Organization",
360
- "@id": ENTITY_IDS.customerOrganization(meta.slug),
361
- name: meta.name,
362
- ...meta.url ? { url: meta.url } : {},
363
- ...meta.logo ? { logo: meta.logo } : {},
364
- ...meta.description ? { description: meta.description } : {},
365
- ...meta.industry ? { industry: meta.industry } : {},
366
- ...meta.sameAs && meta.sameAs.length > 0 ? { sameAs: meta.sameAs } : {}
367
- };
368
- },
369
- /** Generic VideoObject — Success story main video and shorts. */
370
- videoObjectGeneric(meta, locale = "en") {
371
- const videoId = meta.fragment ? `${brand.url}${meta.path}#${meta.fragment}` : ENTITY_IDS.video(meta.path);
372
- return {
373
- "@context": "https://schema.org",
374
- "@type": "VideoObject",
375
- "@id": videoId,
376
- name: meta.title,
377
- ...meta.description ? { description: meta.description } : {},
378
- ...meta.videoUrl ? { contentUrl: meta.videoUrl } : {},
379
- ...meta.embedUrl ? { embedUrl: meta.embedUrl } : {},
380
- ...meta.thumbnailUrl ? { thumbnailUrl: meta.thumbnailUrl } : {},
381
- ...meta.duration ? { duration: meta.duration } : {},
382
- ...meta.uploadDate ? { uploadDate: meta.uploadDate } : {},
383
- ...meta.transcript ? { transcript: meta.transcript } : {},
384
- inLanguage: locale,
385
- publisher: { "@id": ENTITY_IDS.organization }
386
- };
387
- },
388
- /** HowTo schema — Solution pages, tutorial blog posts. */
389
- howTo(steps, meta, locale = "en") {
390
- return {
391
- "@context": "https://schema.org",
392
- "@type": "HowTo",
393
- name: meta.name,
394
- description: meta.description,
395
- inLanguage: locale,
396
- ...meta.totalTime ? { totalTime: meta.totalTime } : {},
397
- ...meta.image ? { image: meta.image } : {},
398
- step: steps.map((step, index) => ({
399
- "@type": "HowToStep",
400
- position: index + 1,
401
- name: step.name,
402
- text: step.text,
403
- ...step.url ? { url: step.url } : {},
404
- ...step.image ? { image: step.image } : {}
405
- }))
406
- };
407
- },
408
- /** Service schema — Growth motion service offerings. */
409
- service(motion, locale = "en") {
410
- return {
411
- "@context": "https://schema.org",
412
- "@type": "Service",
413
- "@id": ENTITY_IDS.service(motion.slug),
414
- name: motion.name,
415
- description: motion.description,
416
- url: motion.url.startsWith("http") ? motion.url : `${brand.url}${motion.url}`,
417
- provider: {
418
- "@type": "Organization",
419
- "@id": ENTITY_IDS.organization,
420
- name: brand.name
421
- },
422
- inLanguage: locale,
423
- availableLanguage: [...supportedLanguages],
424
- areaServed: "Worldwide",
425
- ...motion.price ? {
426
- offers: {
427
- "@type": "Offer",
428
- price: motion.price.replace(/[^0-9.]/g, "") || "0",
429
- priceCurrency: motion.priceCurrency || "USD",
430
- availability: "https://schema.org/InStock"
431
- }
432
- } : {},
433
- termsOfService: `${brand.url}/legal/terms`
434
- };
435
- },
436
- /** JobPosting schema — Career detail pages. */
437
- jobPosting(job, locale = "en") {
438
- return {
439
- "@context": "https://schema.org",
440
- "@type": "JobPosting",
441
- "@id": `${brand.url}/careers/${job.slug}#jobposting`,
442
- title: job.title,
443
- description: job.description || "",
444
- datePosted: job.published_at || job.created_at,
445
- employmentType: mapEmploymentType(job.type),
446
- hiringOrganization: {
447
- "@type": "Organization",
448
- "@id": ENTITY_IDS.organization,
449
- name: brand.name,
450
- sameAs: brand.url
451
- },
452
- ...job.location ? {
453
- jobLocation: {
454
- "@type": "Place",
455
- address: {
456
- "@type": "PostalAddress",
457
- addressLocality: job.location
458
- }
459
- }
460
- } : {
461
- jobLocationType: "TELECOMMUTE"
462
- },
463
- inLanguage: locale
464
- };
465
- },
466
- /** ItemList schema — Hub/listing pages. */
467
- itemList(items, listName) {
468
- return {
469
- "@context": "https://schema.org",
470
- "@type": "ItemList",
471
- name: listName,
472
- numberOfItems: items.length,
473
- itemListElement: items.map((item, index) => ({
474
- "@type": "ListItem",
475
- position: item.position ?? index + 1,
476
- name: item.name,
477
- url: item.url.startsWith("http") ? item.url : `${brand.url}${item.url}`,
478
- ...item.description ? { description: item.description } : {},
479
- ...item.image ? { image: item.image } : {}
480
- }))
481
- };
482
- },
483
- /** DefinedTermSet schema — Glossary page. */
484
- definedTermSet(terms, locale = "en") {
485
- return {
486
- "@context": "https://schema.org",
487
- "@type": "DefinedTermSet",
488
- "@id": `${brand.url}/resources/glossary#termset`,
489
- name: "AI Sales Glossary",
490
- inLanguage: locale,
491
- hasDefinedTerm: terms.map((term) => ({
492
- "@type": "DefinedTerm",
493
- name: term.term,
494
- description: term.definition,
495
- url: term.url || `${brand.url}/resources/glossary#${term.slug}`
496
- }))
497
- };
498
- },
499
- /** Speakable — marks content sections suitable for voice assistant reading. */
500
- speakable(cssSelectors) {
501
- return {
502
- "@type": "SpeakableSpecification",
503
- cssSelector: cssSelectors
504
- };
505
- },
506
- /** Access the entity IDs for cross-referencing */
507
- entityIds: ENTITY_IDS
508
- };
509
- }
510
- function aggregateRatingFromTestimonials(testimonials) {
511
- const rated = testimonials.filter((t) => t.star_rating != null && t.star_rating > 0);
512
- if (rated.length === 0) {
513
- return {
514
- "@type": "AggregateRating",
515
- ratingValue: "4.7",
516
- ratingCount: "150",
517
- bestRating: "5",
518
- worstRating: "1"
519
- };
520
- }
521
- const sum = rated.reduce((acc, t) => acc + (t.star_rating || 0), 0);
522
- const avg = (sum / rated.length).toFixed(1);
523
- return {
524
- "@type": "AggregateRating",
525
- ratingValue: avg,
526
- ratingCount: String(rated.length),
527
- bestRating: "5",
528
- worstRating: "1"
529
- };
530
- }
531
- function buildPageGraph(...schemas) {
532
- const graph = schemas.map((schema) => {
533
- const { "@context": _, ...rest } = schema;
534
- return rest;
535
- });
536
- return {
537
- "@context": "https://schema.org",
538
- "@graph": graph
539
- };
540
- }
541
- function canonicalUrl(baseUrl, pathname, locale) {
542
- const clean = pathname === "/" ? "/" : pathname.replace(/\/+$/, "");
543
- if (locale && locale !== "en") {
544
- const stripped = clean.replace(new RegExp(`^/${locale}(/|$)`), "$1") || "/";
545
- const path = stripped === "/" ? "" : stripped;
546
- return `${baseUrl}/${locale}${path}`;
547
- }
548
- return `${baseUrl}${clean}`;
549
- }
550
- function JsonLd({ data, nonce }) {
551
- const json = JSON.stringify(data).replace(/<\/script>/gi, "<\\/script>");
552
- return /* @__PURE__ */ jsxRuntime.jsx(
553
- "script",
554
- {
555
- type: "application/ld+json",
556
- nonce,
557
- dangerouslySetInnerHTML: { __html: json }
558
- }
559
- );
560
- }
561
5
 
562
- exports.JsonLd = JsonLd;
563
- exports.aggregateRatingFromTestimonials = aggregateRatingFromTestimonials;
564
- exports.buildPageGraph = buildPageGraph;
565
- exports.canonicalUrl = canonicalUrl;
566
- exports.createEntityIds = createEntityIds;
567
- exports.createSchemaGenerators = createSchemaGenerators;
6
+
7
+ Object.defineProperty(exports, "JsonLd", {
8
+ enumerable: true,
9
+ get: function () { return chunkKVGSVGRK_cjs.JsonLd; }
10
+ });
11
+ Object.defineProperty(exports, "aggregateRatingFromTestimonials", {
12
+ enumerable: true,
13
+ get: function () { return chunkKVGSVGRK_cjs.aggregateRatingFromTestimonials; }
14
+ });
15
+ Object.defineProperty(exports, "buildPageGraph", {
16
+ enumerable: true,
17
+ get: function () { return chunkKVGSVGRK_cjs.buildPageGraph; }
18
+ });
19
+ Object.defineProperty(exports, "canonicalUrl", {
20
+ enumerable: true,
21
+ get: function () { return chunkKVGSVGRK_cjs.canonicalUrl; }
22
+ });
23
+ Object.defineProperty(exports, "createEntityIds", {
24
+ enumerable: true,
25
+ get: function () { return chunkKVGSVGRK_cjs.createEntityIds; }
26
+ });
27
+ Object.defineProperty(exports, "createSchemaGenerators", {
28
+ enumerable: true,
29
+ get: function () { return chunkKVGSVGRK_cjs.createSchemaGenerators; }
30
+ });
568
31
  //# sourceMappingURL=out.js.map
569
32
  //# sourceMappingURL=index.cjs.map