@burdenoff/website-sdk 2026.1031.2 → 2026.1101.1

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 (53) hide show
  1. package/dist/analytics/index.d.mts +41 -1
  2. package/dist/analytics/index.d.ts +41 -1
  3. package/dist/analytics/index.js +40 -0
  4. package/dist/analytics/index.js.map +1 -1
  5. package/dist/analytics/index.mjs +38 -1
  6. package/dist/analytics/index.mjs.map +1 -1
  7. package/dist/components/contact.js +12 -12
  8. package/dist/components/contact.js.map +1 -1
  9. package/dist/components/contact.mjs +12 -12
  10. package/dist/components/contact.mjs.map +1 -1
  11. package/dist/components/explore.js +12 -12
  12. package/dist/components/explore.js.map +1 -1
  13. package/dist/components/explore.mjs +12 -12
  14. package/dist/components/explore.mjs.map +1 -1
  15. package/dist/components/newsletter.js +12 -12
  16. package/dist/components/newsletter.js.map +1 -1
  17. package/dist/components/newsletter.mjs +12 -12
  18. package/dist/components/newsletter.mjs.map +1 -1
  19. package/dist/components/partners.js +12 -12
  20. package/dist/components/partners.js.map +1 -1
  21. package/dist/components/partners.mjs +12 -12
  22. package/dist/components/partners.mjs.map +1 -1
  23. package/dist/components/pricing.js +12 -12
  24. package/dist/components/pricing.js.map +1 -1
  25. package/dist/components/pricing.mjs +12 -12
  26. package/dist/components/pricing.mjs.map +1 -1
  27. package/dist/components/unsubscribe.js +12 -12
  28. package/dist/components/unsubscribe.js.map +1 -1
  29. package/dist/components/unsubscribe.mjs +12 -12
  30. package/dist/components/unsubscribe.mjs.map +1 -1
  31. package/dist/components/waitlist.js +51 -12
  32. package/dist/components/waitlist.js.map +1 -1
  33. package/dist/components/waitlist.mjs +51 -12
  34. package/dist/components/waitlist.mjs.map +1 -1
  35. package/dist/content/index.js +12 -12
  36. package/dist/content/index.js.map +1 -1
  37. package/dist/content/index.mjs +12 -12
  38. package/dist/content/index.mjs.map +1 -1
  39. package/dist/index.d.mts +2 -2
  40. package/dist/index.d.ts +2 -2
  41. package/dist/index.js +52 -12
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +52 -13
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/seo/index.js +12 -12
  46. package/dist/seo/index.js.map +1 -1
  47. package/dist/seo/index.mjs +12 -12
  48. package/dist/seo/index.mjs.map +1 -1
  49. package/dist/store/index.js +12 -12
  50. package/dist/store/index.js.map +1 -1
  51. package/dist/store/index.mjs +12 -12
  52. package/dist/store/index.mjs.map +1 -1
  53. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -568,24 +568,24 @@ function PageHead({
568
568
  return /* @__PURE__ */ jsxs(Helmet, { children: [
569
569
  /* @__PURE__ */ jsx("title", { children: fullTitle }),
570
570
  /* @__PURE__ */ jsx("meta", { name: "title", content: fullTitle }),
571
- description && /* @__PURE__ */ jsx("meta", { name: "description", content: description }),
572
- keywords && /* @__PURE__ */ jsx("meta", { name: "keywords", content: keywords }),
573
- author && /* @__PURE__ */ jsx("meta", { name: "author", content: author }),
571
+ description ? /* @__PURE__ */ jsx("meta", { name: "description", content: description }) : null,
572
+ keywords ? /* @__PURE__ */ jsx("meta", { name: "keywords", content: keywords }) : null,
573
+ author ? /* @__PURE__ */ jsx("meta", { name: "author", content: author }) : null,
574
574
  /* @__PURE__ */ jsx("meta", { name: "robots", content: robots }),
575
- resolvedUrl && /* @__PURE__ */ jsx("link", { rel: "canonical", href: resolvedUrl }),
576
- favicon && /* @__PURE__ */ jsx("link", { rel: "icon", href: favicon }),
575
+ resolvedUrl ? /* @__PURE__ */ jsx("link", { rel: "canonical", href: resolvedUrl }) : null,
576
+ favicon ? /* @__PURE__ */ jsx("link", { rel: "icon", href: favicon }) : null,
577
577
  /* @__PURE__ */ jsx("meta", { property: "og:type", content: "website" }),
578
578
  /* @__PURE__ */ jsx("meta", { property: "og:title", content: fullTitle }),
579
- description && /* @__PURE__ */ jsx("meta", { property: "og:description", content: description }),
580
- fullImageUrl && /* @__PURE__ */ jsx("meta", { property: "og:image", content: fullImageUrl }),
581
- resolvedUrl && /* @__PURE__ */ jsx("meta", { property: "og:url", content: resolvedUrl }),
579
+ description ? /* @__PURE__ */ jsx("meta", { property: "og:description", content: description }) : null,
580
+ fullImageUrl ? /* @__PURE__ */ jsx("meta", { property: "og:image", content: fullImageUrl }) : null,
581
+ resolvedUrl ? /* @__PURE__ */ jsx("meta", { property: "og:url", content: resolvedUrl }) : null,
582
582
  /* @__PURE__ */ jsx("meta", { property: "og:locale", content: locale }),
583
- productName && /* @__PURE__ */ jsx("meta", { property: "og:site_name", content: productName }),
583
+ productName ? /* @__PURE__ */ jsx("meta", { property: "og:site_name", content: productName }) : null,
584
584
  /* @__PURE__ */ jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
585
585
  /* @__PURE__ */ jsx("meta", { name: "twitter:title", content: fullTitle }),
586
- description && /* @__PURE__ */ jsx("meta", { name: "twitter:description", content: description }),
587
- fullImageUrl && /* @__PURE__ */ jsx("meta", { name: "twitter:image", content: fullImageUrl }),
588
- twitterHandle && /* @__PURE__ */ jsx("meta", { name: "twitter:creator", content: twitterHandle }),
586
+ description ? /* @__PURE__ */ jsx("meta", { name: "twitter:description", content: description }) : null,
587
+ fullImageUrl ? /* @__PURE__ */ jsx("meta", { name: "twitter:image", content: fullImageUrl }) : null,
588
+ twitterHandle ? /* @__PURE__ */ jsx("meta", { name: "twitter:creator", content: twitterHandle }) : null,
589
589
  /* @__PURE__ */ jsx("meta", { name: "theme-color", content: themeColor }),
590
590
  structuredDataItems.map((data, index) => /* @__PURE__ */ jsx("script", { type: "application/ld+json", children: serializeJsonLd(data) }, `ld-${index}`)),
591
591
  additionalMeta?.map((meta, index) => /* @__PURE__ */ jsx(
@@ -3827,6 +3827,43 @@ function PricingPage(props) {
3827
3827
  /* @__PURE__ */ jsx(PricingSection, { ...props })
3828
3828
  ] });
3829
3829
  }
3830
+
3831
+ // src/analytics/events.ts
3832
+ var MAX_PROPERTY_LENGTH = 64;
3833
+ var EMAIL_LIKE = /[^\s@]+@[^\s@]+/;
3834
+ function sanitizeWebsiteEventProperties(properties) {
3835
+ const safe = {};
3836
+ if (!properties) return safe;
3837
+ for (const [key, value] of Object.entries(properties)) {
3838
+ if (typeof value === "boolean") {
3839
+ safe[key] = value;
3840
+ } else if (typeof value === "number") {
3841
+ if (Number.isFinite(value)) safe[key] = value;
3842
+ } else if (typeof value === "string") {
3843
+ const trimmed = value.trim();
3844
+ if (trimmed.length > 0 && trimmed.length <= MAX_PROPERTY_LENGTH && !EMAIL_LIKE.test(trimmed)) {
3845
+ safe[key] = trimmed;
3846
+ }
3847
+ }
3848
+ }
3849
+ return safe;
3850
+ }
3851
+ function trackWebsiteEvent(name, properties) {
3852
+ if (typeof window === "undefined") return false;
3853
+ try {
3854
+ const rybbit = window.rybbit;
3855
+ if (typeof rybbit?.event !== "function") return false;
3856
+ const safe = sanitizeWebsiteEventProperties(properties);
3857
+ if (Object.keys(safe).length > 0) {
3858
+ rybbit.event(name, safe);
3859
+ } else {
3860
+ rybbit.event(name);
3861
+ }
3862
+ return true;
3863
+ } catch {
3864
+ return false;
3865
+ }
3866
+ }
3830
3867
  var waitlistPageSchema = z.object({
3831
3868
  name: z.string().min(1, "Name is required"),
3832
3869
  email: z.string().email("Please enter a valid email address"),
@@ -4098,6 +4135,7 @@ function WaitlistPage({
4098
4135
  product?.id || config.productId
4099
4136
  );
4100
4137
  if (result.success) {
4138
+ trackWebsiteEvent("waitlist.signed_up", { form: "page" });
4101
4139
  toast.success(result.message ?? successMessage);
4102
4140
  reset();
4103
4141
  } else {
@@ -4248,6 +4286,7 @@ function WaitlistForm({
4248
4286
  product?.id || config.productId
4249
4287
  );
4250
4288
  if (result.success) {
4289
+ trackWebsiteEvent("waitlist.signed_up", { form: "inline" });
4251
4290
  toast.success(result.message ?? "You have been added to the waitlist!");
4252
4291
  setEmail("");
4253
4292
  setName("");
@@ -20924,6 +20963,6 @@ function formatFreshnessReport(issues) {
20924
20963
  ].join("\n");
20925
20964
  }
20926
20965
 
20927
- export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, AnswersPage, BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_COMPARISON_MAX_AGE_DAYS, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ESCALATE_EXPLORE_CONVERSATION_MUTATION, EXPLORE_CATALOG_QUERY, EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, EXPLORE_ESCALATION_NOTE_SOFT_MAX, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_PREFILL_MAX_LENGTH, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreAnswerBody, ExploreAnswerStyles, ExploreChatProvider, ExploreCta, ExplorePage, ExplorePanel, FALLBACK_EXPLORE_LIMITS, FOOTERLESS_ROUTES, Input, LEGAL_DOCUMENTS, LEGAL_DOCUMENT_KEYS, Label, LaunchCountdown, LegalPage, Markdown, NewsletterForm, NewsletterPage, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, PUBLISHED_ANSWER_FIELDS, PageHead, PartnersPage, PressKitPage, PricingPage, PricingProductKeyError, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, answerPath, answerPlainText, answerSourceHost, answerSpeechText, answerStrings, availablePlanCurrencies, buttonVariants, checkComparisonFreshness, classifyExploreError, cleanPlanDisplayName, cn, conceptPath, detectElectronPlatform, emitProductSlug, exploreQuestionHref, fetchLegalContent, fetchLegalContentPage, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, fetchPublicProduct, findLegalDocument, formatAnswerDate, formatDownloads, formatFreshnessReport, formatLegalDate, formatPrice2 as formatPrice, getAnswerBySlug, getConceptBySlug, getRecaptchaV3Token, hasCustomerSignOff, inlineImageOrigins, isFooterlessPath, isInlineImageAllowed, isInlineVideoAllowed, isPublishedSourceUrl, isSameProductSlug, isUuidLike, isValidUrl, latestVerification, legacyProductSlug, loadRecaptchaV3, looksLikeDeliverableEmail, normalizeProductSlug, normalizeRoutePath, oldestVerification, parseVerifiedAt, planPriceIn, productSlugVariants, productSlugsByOrigin, resolvePricingProductKey, shouldRenderSiteFooter, speechLocaleOf, splitLeadingHeading, stopSpeaking, useContentPage, useContentPages, useExploreChat, useExploreConversation, useProduct, useProductConfig, useProgressiveReveal, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useSpeechOutput, useWebSDK, useWebSDKConfig };
20966
+ export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, AnswersPage, BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_COMPARISON_MAX_AGE_DAYS, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ESCALATE_EXPLORE_CONVERSATION_MUTATION, EXPLORE_CATALOG_QUERY, EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, EXPLORE_ESCALATION_NOTE_SOFT_MAX, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_PREFILL_MAX_LENGTH, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreAnswerBody, ExploreAnswerStyles, ExploreChatProvider, ExploreCta, ExplorePage, ExplorePanel, FALLBACK_EXPLORE_LIMITS, FOOTERLESS_ROUTES, Input, LEGAL_DOCUMENTS, LEGAL_DOCUMENT_KEYS, Label, LaunchCountdown, LegalPage, Markdown, NewsletterForm, NewsletterPage, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, PUBLISHED_ANSWER_FIELDS, PageHead, PartnersPage, PressKitPage, PricingPage, PricingProductKeyError, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, answerPath, answerPlainText, answerSourceHost, answerSpeechText, answerStrings, availablePlanCurrencies, buttonVariants, checkComparisonFreshness, classifyExploreError, cleanPlanDisplayName, cn, conceptPath, detectElectronPlatform, emitProductSlug, exploreQuestionHref, fetchLegalContent, fetchLegalContentPage, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, fetchPublicProduct, findLegalDocument, formatAnswerDate, formatDownloads, formatFreshnessReport, formatLegalDate, formatPrice2 as formatPrice, getAnswerBySlug, getConceptBySlug, getRecaptchaV3Token, hasCustomerSignOff, inlineImageOrigins, isFooterlessPath, isInlineImageAllowed, isInlineVideoAllowed, isPublishedSourceUrl, isSameProductSlug, isUuidLike, isValidUrl, latestVerification, legacyProductSlug, loadRecaptchaV3, looksLikeDeliverableEmail, normalizeProductSlug, normalizeRoutePath, oldestVerification, parseVerifiedAt, planPriceIn, productSlugVariants, productSlugsByOrigin, resolvePricingProductKey, shouldRenderSiteFooter, speechLocaleOf, splitLeadingHeading, stopSpeaking, trackWebsiteEvent, useContentPage, useContentPages, useExploreChat, useExploreConversation, useProduct, useProductConfig, useProgressiveReveal, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useSpeechOutput, useWebSDK, useWebSDKConfig };
20928
20967
  //# sourceMappingURL=index.mjs.map
20929
20968
  //# sourceMappingURL=index.mjs.map