@salesmind-ai/design-system 0.1.7 → 0.1.9

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.
package/dist/index.d.cts CHANGED
@@ -4,9 +4,10 @@ export { Accordion, AccordionContent, AccordionContentProps, AccordionItem, Acco
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { S as SectionShellProps } from './index-B64suAAc.cjs';
6
6
  export { A as AgitationPoint, a as AnnouncementBar, b as AnnouncementBarProps, c as ArchitectureConnection, d as ArchitectureDiagram, e as ArchitectureDiagramProps, f as ArchitectureNode, g as ArchitectureNodeType, h as ArticleCard, i as ArticleCardProps, j as ArticleLayout, k as ArticleLayoutProps, l as Author, m as AuthorBio, n as AuthorBioProps, o as AuthorLink, B as BeforeAfterBlock, p as BeforeAfterBlockProps, q as BeforeAfterItem, r as BeforeAfterSide, s as BookingEmbed, t as BookingEmbedProps, u as BrowserFrame, v as BrowserFrameProps, C as CTASection, w as CTASectionProps, x as CardMetric, y as CaseStudyCard, z as CaseStudyCardProps, D as CaseStudyMetric, E as CaseStudySection, F as CaseStudySectionProps, G as ComparisonColumn, H as ComparisonRow, I as ComparisonTable, J as ComparisonTableProps, K as CompetitorDiff, L as CompetitorDiffItem, M as CompetitorDiffProps, N as ComplianceGrid, O as ComplianceGridProps, P as ComplianceItem, Q as ComplianceStatus, R as ExitIntentOverlay, T as ExitIntentOverlayProps, U as FeatureItem, V as FeatureSection, W as FeatureSectionProps, X as GuaranteeHighlight, Y as GuaranteeHighlightProps, Z as HeroSection, _ as HeroSectionProps, $ as ICPFilter, a0 as ICPFilterItem, a1 as ICPFilterProps, a2 as IntegrationEntry, a3 as IntegrationShowcase, a4 as IntegrationShowcaseProps, a5 as IntentCTA, a6 as IntentCTAProps, a7 as IntentStage, a8 as IntentTriggerType, a9 as LeadCaptureForm, aa as LeadCaptureFormProps, ab as LogoItem, ac as ManifestoAttribution, ad as ManifestoBlock, ae as ManifestoBlockProps, af as Media, ag as MetricCounter, ah as MetricCounterProps, ai as MotionContainer, aj as MotionContainerProps, ak as MotionText, al as MotionTextProps, am as ObjectionFAQ, an as ObjectionFAQProps, ao as ObjectionItem, ap as Platform, aq as PlatformBadge, ar as PlatformBadgeProps, as as PricingCard, at as PricingCardProps, au as PricingFeature, av as PricingSection, aw as PricingSectionProps, ax as PricingToggle, ay as PricingToggleProps, az as ProblemAgitation, aA as ProblemAgitationProps, aB as ProcessTimeline, aC as ProcessTimelineProps, aD as ROICalculator, aE as ROICalculatorProps, aF as ROIComparisonItem, aG as RelatedContent, aH as RelatedContentProps, aI as SectionHeader, aJ as SectionHeaderProps, aK as SectionShell, aL as SecurityBlock, aM as SecurityBlockProps, aN as SecurityCertification, aO as SegmentSwitch, aP as SegmentSwitchProps, aQ as SocialProof, aR as SocialProofCard, aS as SocialProofCardProps, aT as SocialProofCarousel, aU as SocialProofCarouselProps, aV as SocialProofFeatured, aW as SocialProofFeaturedProps, aX as SocialProofGrid, aY as SocialProofGridProps, aZ as SocialProofLogos, a_ as SocialProofLogosProps, a$ as StakeholderContent, b0 as StakeholderDefinition, b1 as StakeholderTabs, b2 as StakeholderTabsProps, b3 as StatItem, b4 as StatsSection, b5 as StatsSectionProps, b6 as StickyActionBar, b7 as StickyActionBarProps, b8 as TOCItem, b9 as TableOfContents, ba as TableOfContentsProps, bb as TimelineStep, bc as ValueAnchor, bd as ValueAnchorInput, be as ValueAnchorOutput, bf as ValueAnchorProps, bg as VerticalVideoGrid, bh as VerticalVideoGridProps, bi as VideoEmbed, bj as VideoEmbedProps } from './index-B64suAAc.cjs';
7
+ import { U as UtmParams } from './audit-CiyPkxk1.cjs';
8
+ export { F as FirstTouchAttribution, a as UTM_CAMPAIGNS, b as UTM_CONTENTS, c as UTM_MEDIUMS_ALL, d as UTM_MEDIUMS_APP, e as UTM_MEDIUMS_MESSAGING, f as UTM_MEDIUMS_WEB, g as UTM_SOURCES, h as UTM_SOURCES_REQUIRING_SELLER, i as UTM_TERMS, j as UrlClassification, k as UtmAuditEntry, l as UtmBlockedError, m as UtmCampaign, n as UtmComplianceResult, o as UtmComplianceStatus, p as UtmConfidence, q as UtmContent, r as UtmMedium, s as UtmMediumAppPage, t as UtmMediumMessaging, u as UtmMediumWebPage, v as UtmOverrides, w as UtmSource, x as UtmSourceRequiringSeller, y as UtmTerm, z as buildBlockedError, A as buildUtmUrl, B as classifyAndEnforce, C as classifyUrl, D as createAuditEntry, E as isUtmExempt, G as isValidUtmParams, H as parseUtmParams, I as requiresSellerAttribution, J as requiresUtm, K as toFirstTouchAttribution, L as validateCompliance, M as validateUtmField } from './audit-CiyPkxk1.cjs';
7
9
  export { FormattedDate, FormattedMessage, FormattedNumber, MessageDescriptor, defineMessages } from 'react-intl';
8
10
  export { B as BarChart, d as BarChartProps, e as BarConfig, g as CaveatBlock, h as CaveatBlockProps, i as Chart, j as ChartContainer, k as ChartContainerProps, m as ChartDimension, p as ChartMeasure, r as ChartProps, s as ChartSwitchControl, t as ChartSwitchControlProps, E as ConfidenceIndicator, F as ConfidenceIndicatorProps, H as DataCoverageBadge, J as DataCoverageBadgeProps, K as DataStateIndicator, L as DataStateIndicatorProps, N as EvidenceGroup, O as EvidenceGroupProps, P as ExecutiveThesis, Q as ExecutiveThesisProps, S as ExportFormat, T as ExportMenu, U as ExportMenuProps, V as ExportOption, X as FunnelChart, Y as FunnelChartProps, Z as FunnelStage, $ as HeatmapCell, a0 as HeatmapChart, a1 as HeatmapChartProps, a3 as InsightBlock, a4 as InsightBlockProps, a5 as KeyMetric, a6 as KeyMetricProps, a7 as LineChart, a8 as LineChartProps, a9 as LineConfig, aa as MBTIDimensions, ab as MBTIRadar, ac as MBTIRadarProps, ae as MBTITypeCount, af as MBTITypeGrid, ag as MBTITypeGridProps, ah as MethodologyNote, ai as MethodologyNoteLabels, aj as MethodologyNoteProps, ak as PieChart, al as PieChartDataItem, am as PieChartProps, ao as ReportShell, ap as ReportShellProps, aq as Select, ar as SelectContent, as as SelectContentProps, at as SelectGroup, au as SelectGroupProps, av as SelectItem, aw as SelectItemProps, ax as SelectProps, ay as SelectSeparator, az as SelectTrigger, aA as SelectTriggerProps, aD as TrendIndicator, aE as TrendIndicatorProps } from './ExportMenu-hEe5MhLq.cjs';
9
- import '@base-ui/react';
10
11
  import '@base-ui/react/dialog';
11
12
  import '@base-ui/react/tooltip';
12
13
  import '@base-ui/react/menu';
@@ -451,6 +452,14 @@ interface OutboundLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
451
452
  preserveExistingUTM?: boolean;
452
453
  openInNewTab?: boolean;
453
454
  disableTracking?: boolean;
455
+ /**
456
+ * Governed UTM parameters. When provided, the link uses the UTM governance
457
+ * system (buildUtmUrl) instead of the legacy appendUTMs approach.
458
+ *
459
+ * Preferred for all new code. Existing usages without utmParams continue
460
+ * to work via the legacy path.
461
+ */
462
+ utmParams?: UtmParams;
454
463
  children: React__default.ReactNode;
455
464
  }
456
465
  interface OutboundClickEventDetail {
@@ -464,7 +473,26 @@ interface OutboundClickEventDetail {
464
473
  }
465
474
  declare const OutboundLink: React__default.ForwardRefExoticComponent<OutboundLinkProps & React__default.RefAttributes<HTMLAnchorElement>>;
466
475
 
476
+ /**
477
+ * Check if a URL is exempt from UTM tagging.
478
+ * Uses both legacy patterns and governed URL classification.
479
+ */
467
480
  declare const isExemptUrl: (urlStr: string) => boolean;
481
+ /**
482
+ * Append governed UTM parameters to a URL using `buildUtmUrl`.
483
+ * Preferred over the legacy `appendUTMs` function.
484
+ */
485
+ declare const appendGovernedUTMs: (href: string, params: UtmParams, preserveExisting?: boolean) => string;
486
+ /**
487
+ * @deprecated Prefer `appendGovernedUTMs` with governed `UtmParams`.
488
+ *
489
+ * Legacy UTM append function. Uses non-governed defaults:
490
+ * - utm_source = 'salesmind' (not in governed enum)
491
+ * - utm_medium = 'outbound_link' (snake_case, not in governed enum)
492
+ *
493
+ * Retained for backward compatibility. Consumers should migrate to
494
+ * the `utmParams` prop on OutboundLink.
495
+ */
468
496
  declare const appendUTMs: (href: string, context: string, pageSlug: string, options: {
469
497
  mediumOverride?: string;
470
498
  campaignOverride?: string;
@@ -1298,4 +1326,4 @@ interface FunnelScalingSenderProps {
1298
1326
  }
1299
1327
  declare const FunnelScalingSender: React__default.FC<FunnelScalingSenderProps>;
1300
1328
 
1301
- export { type AnalysisProgress, type BehavioralSignals, ChangeEmail, type ChangeEmailLabels, type ChangeEmailProps, ColorPicker, type ColorPickerProps, CursorSpotlight, type CursorSpotlightProps, DataHighlight, type DataHighlightProps, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, type DataTableProps, DataTableRow, type EcosystemConnection, EcosystemDiagram, type EcosystemDiagramProps, type EcosystemLayer, type EngagementTip, type EnterpriseSLA, type EnterpriseSignalCategory, type EnterpriseSignalItem, type EnterpriseSignalStatus, EnterpriseSignaling, type EnterpriseSignalingProps, type EraSentiment, type EvolutionEra, EvolutionTimeline, type EvolutionTimelineProps, FloatingTabBar, type FloatingTabBarProps, type FooterCTA, type FooterLink, type FooterSection, type FooterTrustBadge, ForgotPassword, type ForgotPasswordLabels, type ForgotPasswordProps, FunnelScalingSender, type FunnelScalingSenderProps, InsightCallout, type InsightCalloutProps, IntelligenceBlock, type IntelligenceBlockProps, type IntelligenceCapability, type IntelligenceMetric, type LeadProfile, type LeadProfileState, LeadProfileView, type LeadProfileViewProps, LocaleDropdown, type LocaleDropdownProps, type LocaleOption, Login, type LoginLabels, type LoginProps, LongFormLayout, type LongFormLayoutProps, type MBTIScore, MDXOutboundLink, type NavItem, NavPlacement, Navbar, NavbarActions, NavbarBrand, type NavbarBrandProps, NavbarContent, NavbarItem, type NavbarItemProps, NavbarMegaMenu, NavbarMegaMenuItem, type NavbarMegaMenuItemProps, type NavbarMegaMenuProps, NavbarMegaMenuSection, type NavbarMegaMenuSectionProps, NavbarMobileActions, NavbarMobileNavItem, type NavbarMobileNavItemProps, NavbarMobileSeparator, type NavbarProps, NavbarSearchTrigger, type NavbarSearchTriggerProps, NavbarV2, NavbarV2Actions, NavbarV2Brand, type NavbarV2BrandProps, type NavbarV2Props, NavbarV2Tab, NavbarV2TabMenu, type NavbarV2TabMenuProps, type NavbarV2TabProps, NavbarV2Tabs, type OutboundClickEventDetail, OutboundLink, type OutboundLinkProps, type PartnerBenefit, type PartnerCalcInput, type PartnerCalcOutput, type PartnerDifferentiator, PartnerValueProp, type PartnerValuePropProps, ReadingProgress, type ReadingProgressProps, RevenueAutomationLoop, type RevenueAutomationLoopProps, SectionShellProps, type SeriesEdition, Shell, type ShellProps, Sidebar, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Signup, type SignupLabels, type SignupProps, SiteFooter, type SiteFooterProps, SpotlightCard, type SpotlightCardProps, StarRating, type StarRatingProps, TabItem, type TabItemProps, ThemeSelector, type ThemeSelectorProps, VersionedSeriesNavigator, type VersionedSeriesNavigatorProps, VersionedUpgradeAlert, type VersionedUpgradeAlertProps, VideoLightbox, type VideoLightboxProps, VoidBackground, type VoidBackgroundProps, appendUTMs, isExemptUrl };
1329
+ export { type AnalysisProgress, type BehavioralSignals, ChangeEmail, type ChangeEmailLabels, type ChangeEmailProps, ColorPicker, type ColorPickerProps, CursorSpotlight, type CursorSpotlightProps, DataHighlight, type DataHighlightProps, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, type DataTableProps, DataTableRow, type EcosystemConnection, EcosystemDiagram, type EcosystemDiagramProps, type EcosystemLayer, type EngagementTip, type EnterpriseSLA, type EnterpriseSignalCategory, type EnterpriseSignalItem, type EnterpriseSignalStatus, EnterpriseSignaling, type EnterpriseSignalingProps, type EraSentiment, type EvolutionEra, EvolutionTimeline, type EvolutionTimelineProps, FloatingTabBar, type FloatingTabBarProps, type FooterCTA, type FooterLink, type FooterSection, type FooterTrustBadge, ForgotPassword, type ForgotPasswordLabels, type ForgotPasswordProps, FunnelScalingSender, type FunnelScalingSenderProps, InsightCallout, type InsightCalloutProps, IntelligenceBlock, type IntelligenceBlockProps, type IntelligenceCapability, type IntelligenceMetric, type LeadProfile, type LeadProfileState, LeadProfileView, type LeadProfileViewProps, LocaleDropdown, type LocaleDropdownProps, type LocaleOption, Login, type LoginLabels, type LoginProps, LongFormLayout, type LongFormLayoutProps, type MBTIScore, MDXOutboundLink, type NavItem, NavPlacement, Navbar, NavbarActions, NavbarBrand, type NavbarBrandProps, NavbarContent, NavbarItem, type NavbarItemProps, NavbarMegaMenu, NavbarMegaMenuItem, type NavbarMegaMenuItemProps, type NavbarMegaMenuProps, NavbarMegaMenuSection, type NavbarMegaMenuSectionProps, NavbarMobileActions, NavbarMobileNavItem, type NavbarMobileNavItemProps, NavbarMobileSeparator, type NavbarProps, NavbarSearchTrigger, type NavbarSearchTriggerProps, NavbarV2, NavbarV2Actions, NavbarV2Brand, type NavbarV2BrandProps, type NavbarV2Props, NavbarV2Tab, NavbarV2TabMenu, type NavbarV2TabMenuProps, type NavbarV2TabProps, NavbarV2Tabs, type OutboundClickEventDetail, OutboundLink, type OutboundLinkProps, type PartnerBenefit, type PartnerCalcInput, type PartnerCalcOutput, type PartnerDifferentiator, PartnerValueProp, type PartnerValuePropProps, ReadingProgress, type ReadingProgressProps, RevenueAutomationLoop, type RevenueAutomationLoopProps, SectionShellProps, type SeriesEdition, Shell, type ShellProps, Sidebar, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Signup, type SignupLabels, type SignupProps, SiteFooter, type SiteFooterProps, SpotlightCard, type SpotlightCardProps, StarRating, type StarRatingProps, TabItem, type TabItemProps, ThemeSelector, type ThemeSelectorProps, UtmParams, VersionedSeriesNavigator, type VersionedSeriesNavigatorProps, VersionedUpgradeAlert, type VersionedUpgradeAlertProps, VideoLightbox, type VideoLightboxProps, VoidBackground, type VoidBackgroundProps, appendGovernedUTMs, appendUTMs, isExemptUrl };
package/dist/index.d.ts CHANGED
@@ -4,9 +4,10 @@ export { Accordion, AccordionContent, AccordionContentProps, AccordionItem, Acco
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { S as SectionShellProps } from './index-B64suAAc.js';
6
6
  export { A as AgitationPoint, a as AnnouncementBar, b as AnnouncementBarProps, c as ArchitectureConnection, d as ArchitectureDiagram, e as ArchitectureDiagramProps, f as ArchitectureNode, g as ArchitectureNodeType, h as ArticleCard, i as ArticleCardProps, j as ArticleLayout, k as ArticleLayoutProps, l as Author, m as AuthorBio, n as AuthorBioProps, o as AuthorLink, B as BeforeAfterBlock, p as BeforeAfterBlockProps, q as BeforeAfterItem, r as BeforeAfterSide, s as BookingEmbed, t as BookingEmbedProps, u as BrowserFrame, v as BrowserFrameProps, C as CTASection, w as CTASectionProps, x as CardMetric, y as CaseStudyCard, z as CaseStudyCardProps, D as CaseStudyMetric, E as CaseStudySection, F as CaseStudySectionProps, G as ComparisonColumn, H as ComparisonRow, I as ComparisonTable, J as ComparisonTableProps, K as CompetitorDiff, L as CompetitorDiffItem, M as CompetitorDiffProps, N as ComplianceGrid, O as ComplianceGridProps, P as ComplianceItem, Q as ComplianceStatus, R as ExitIntentOverlay, T as ExitIntentOverlayProps, U as FeatureItem, V as FeatureSection, W as FeatureSectionProps, X as GuaranteeHighlight, Y as GuaranteeHighlightProps, Z as HeroSection, _ as HeroSectionProps, $ as ICPFilter, a0 as ICPFilterItem, a1 as ICPFilterProps, a2 as IntegrationEntry, a3 as IntegrationShowcase, a4 as IntegrationShowcaseProps, a5 as IntentCTA, a6 as IntentCTAProps, a7 as IntentStage, a8 as IntentTriggerType, a9 as LeadCaptureForm, aa as LeadCaptureFormProps, ab as LogoItem, ac as ManifestoAttribution, ad as ManifestoBlock, ae as ManifestoBlockProps, af as Media, ag as MetricCounter, ah as MetricCounterProps, ai as MotionContainer, aj as MotionContainerProps, ak as MotionText, al as MotionTextProps, am as ObjectionFAQ, an as ObjectionFAQProps, ao as ObjectionItem, ap as Platform, aq as PlatformBadge, ar as PlatformBadgeProps, as as PricingCard, at as PricingCardProps, au as PricingFeature, av as PricingSection, aw as PricingSectionProps, ax as PricingToggle, ay as PricingToggleProps, az as ProblemAgitation, aA as ProblemAgitationProps, aB as ProcessTimeline, aC as ProcessTimelineProps, aD as ROICalculator, aE as ROICalculatorProps, aF as ROIComparisonItem, aG as RelatedContent, aH as RelatedContentProps, aI as SectionHeader, aJ as SectionHeaderProps, aK as SectionShell, aL as SecurityBlock, aM as SecurityBlockProps, aN as SecurityCertification, aO as SegmentSwitch, aP as SegmentSwitchProps, aQ as SocialProof, aR as SocialProofCard, aS as SocialProofCardProps, aT as SocialProofCarousel, aU as SocialProofCarouselProps, aV as SocialProofFeatured, aW as SocialProofFeaturedProps, aX as SocialProofGrid, aY as SocialProofGridProps, aZ as SocialProofLogos, a_ as SocialProofLogosProps, a$ as StakeholderContent, b0 as StakeholderDefinition, b1 as StakeholderTabs, b2 as StakeholderTabsProps, b3 as StatItem, b4 as StatsSection, b5 as StatsSectionProps, b6 as StickyActionBar, b7 as StickyActionBarProps, b8 as TOCItem, b9 as TableOfContents, ba as TableOfContentsProps, bb as TimelineStep, bc as ValueAnchor, bd as ValueAnchorInput, be as ValueAnchorOutput, bf as ValueAnchorProps, bg as VerticalVideoGrid, bh as VerticalVideoGridProps, bi as VideoEmbed, bj as VideoEmbedProps } from './index-B64suAAc.js';
7
+ import { U as UtmParams } from './audit-CiyPkxk1.js';
8
+ export { F as FirstTouchAttribution, a as UTM_CAMPAIGNS, b as UTM_CONTENTS, c as UTM_MEDIUMS_ALL, d as UTM_MEDIUMS_APP, e as UTM_MEDIUMS_MESSAGING, f as UTM_MEDIUMS_WEB, g as UTM_SOURCES, h as UTM_SOURCES_REQUIRING_SELLER, i as UTM_TERMS, j as UrlClassification, k as UtmAuditEntry, l as UtmBlockedError, m as UtmCampaign, n as UtmComplianceResult, o as UtmComplianceStatus, p as UtmConfidence, q as UtmContent, r as UtmMedium, s as UtmMediumAppPage, t as UtmMediumMessaging, u as UtmMediumWebPage, v as UtmOverrides, w as UtmSource, x as UtmSourceRequiringSeller, y as UtmTerm, z as buildBlockedError, A as buildUtmUrl, B as classifyAndEnforce, C as classifyUrl, D as createAuditEntry, E as isUtmExempt, G as isValidUtmParams, H as parseUtmParams, I as requiresSellerAttribution, J as requiresUtm, K as toFirstTouchAttribution, L as validateCompliance, M as validateUtmField } from './audit-CiyPkxk1.js';
7
9
  export { FormattedDate, FormattedMessage, FormattedNumber, MessageDescriptor, defineMessages } from 'react-intl';
8
10
  export { B as BarChart, d as BarChartProps, e as BarConfig, g as CaveatBlock, h as CaveatBlockProps, i as Chart, j as ChartContainer, k as ChartContainerProps, m as ChartDimension, p as ChartMeasure, r as ChartProps, s as ChartSwitchControl, t as ChartSwitchControlProps, E as ConfidenceIndicator, F as ConfidenceIndicatorProps, H as DataCoverageBadge, J as DataCoverageBadgeProps, K as DataStateIndicator, L as DataStateIndicatorProps, N as EvidenceGroup, O as EvidenceGroupProps, P as ExecutiveThesis, Q as ExecutiveThesisProps, S as ExportFormat, T as ExportMenu, U as ExportMenuProps, V as ExportOption, X as FunnelChart, Y as FunnelChartProps, Z as FunnelStage, $ as HeatmapCell, a0 as HeatmapChart, a1 as HeatmapChartProps, a3 as InsightBlock, a4 as InsightBlockProps, a5 as KeyMetric, a6 as KeyMetricProps, a7 as LineChart, a8 as LineChartProps, a9 as LineConfig, aa as MBTIDimensions, ab as MBTIRadar, ac as MBTIRadarProps, ae as MBTITypeCount, af as MBTITypeGrid, ag as MBTITypeGridProps, ah as MethodologyNote, ai as MethodologyNoteLabels, aj as MethodologyNoteProps, ak as PieChart, al as PieChartDataItem, am as PieChartProps, ao as ReportShell, ap as ReportShellProps, aq as Select, ar as SelectContent, as as SelectContentProps, at as SelectGroup, au as SelectGroupProps, av as SelectItem, aw as SelectItemProps, ax as SelectProps, ay as SelectSeparator, az as SelectTrigger, aA as SelectTriggerProps, aD as TrendIndicator, aE as TrendIndicatorProps } from './ExportMenu-hEe5MhLq.js';
9
- import '@base-ui/react';
10
11
  import '@base-ui/react/dialog';
11
12
  import '@base-ui/react/tooltip';
12
13
  import '@base-ui/react/menu';
@@ -451,6 +452,14 @@ interface OutboundLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
451
452
  preserveExistingUTM?: boolean;
452
453
  openInNewTab?: boolean;
453
454
  disableTracking?: boolean;
455
+ /**
456
+ * Governed UTM parameters. When provided, the link uses the UTM governance
457
+ * system (buildUtmUrl) instead of the legacy appendUTMs approach.
458
+ *
459
+ * Preferred for all new code. Existing usages without utmParams continue
460
+ * to work via the legacy path.
461
+ */
462
+ utmParams?: UtmParams;
454
463
  children: React__default.ReactNode;
455
464
  }
456
465
  interface OutboundClickEventDetail {
@@ -464,7 +473,26 @@ interface OutboundClickEventDetail {
464
473
  }
465
474
  declare const OutboundLink: React__default.ForwardRefExoticComponent<OutboundLinkProps & React__default.RefAttributes<HTMLAnchorElement>>;
466
475
 
476
+ /**
477
+ * Check if a URL is exempt from UTM tagging.
478
+ * Uses both legacy patterns and governed URL classification.
479
+ */
467
480
  declare const isExemptUrl: (urlStr: string) => boolean;
481
+ /**
482
+ * Append governed UTM parameters to a URL using `buildUtmUrl`.
483
+ * Preferred over the legacy `appendUTMs` function.
484
+ */
485
+ declare const appendGovernedUTMs: (href: string, params: UtmParams, preserveExisting?: boolean) => string;
486
+ /**
487
+ * @deprecated Prefer `appendGovernedUTMs` with governed `UtmParams`.
488
+ *
489
+ * Legacy UTM append function. Uses non-governed defaults:
490
+ * - utm_source = 'salesmind' (not in governed enum)
491
+ * - utm_medium = 'outbound_link' (snake_case, not in governed enum)
492
+ *
493
+ * Retained for backward compatibility. Consumers should migrate to
494
+ * the `utmParams` prop on OutboundLink.
495
+ */
468
496
  declare const appendUTMs: (href: string, context: string, pageSlug: string, options: {
469
497
  mediumOverride?: string;
470
498
  campaignOverride?: string;
@@ -1298,4 +1326,4 @@ interface FunnelScalingSenderProps {
1298
1326
  }
1299
1327
  declare const FunnelScalingSender: React__default.FC<FunnelScalingSenderProps>;
1300
1328
 
1301
- export { type AnalysisProgress, type BehavioralSignals, ChangeEmail, type ChangeEmailLabels, type ChangeEmailProps, ColorPicker, type ColorPickerProps, CursorSpotlight, type CursorSpotlightProps, DataHighlight, type DataHighlightProps, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, type DataTableProps, DataTableRow, type EcosystemConnection, EcosystemDiagram, type EcosystemDiagramProps, type EcosystemLayer, type EngagementTip, type EnterpriseSLA, type EnterpriseSignalCategory, type EnterpriseSignalItem, type EnterpriseSignalStatus, EnterpriseSignaling, type EnterpriseSignalingProps, type EraSentiment, type EvolutionEra, EvolutionTimeline, type EvolutionTimelineProps, FloatingTabBar, type FloatingTabBarProps, type FooterCTA, type FooterLink, type FooterSection, type FooterTrustBadge, ForgotPassword, type ForgotPasswordLabels, type ForgotPasswordProps, FunnelScalingSender, type FunnelScalingSenderProps, InsightCallout, type InsightCalloutProps, IntelligenceBlock, type IntelligenceBlockProps, type IntelligenceCapability, type IntelligenceMetric, type LeadProfile, type LeadProfileState, LeadProfileView, type LeadProfileViewProps, LocaleDropdown, type LocaleDropdownProps, type LocaleOption, Login, type LoginLabels, type LoginProps, LongFormLayout, type LongFormLayoutProps, type MBTIScore, MDXOutboundLink, type NavItem, NavPlacement, Navbar, NavbarActions, NavbarBrand, type NavbarBrandProps, NavbarContent, NavbarItem, type NavbarItemProps, NavbarMegaMenu, NavbarMegaMenuItem, type NavbarMegaMenuItemProps, type NavbarMegaMenuProps, NavbarMegaMenuSection, type NavbarMegaMenuSectionProps, NavbarMobileActions, NavbarMobileNavItem, type NavbarMobileNavItemProps, NavbarMobileSeparator, type NavbarProps, NavbarSearchTrigger, type NavbarSearchTriggerProps, NavbarV2, NavbarV2Actions, NavbarV2Brand, type NavbarV2BrandProps, type NavbarV2Props, NavbarV2Tab, NavbarV2TabMenu, type NavbarV2TabMenuProps, type NavbarV2TabProps, NavbarV2Tabs, type OutboundClickEventDetail, OutboundLink, type OutboundLinkProps, type PartnerBenefit, type PartnerCalcInput, type PartnerCalcOutput, type PartnerDifferentiator, PartnerValueProp, type PartnerValuePropProps, ReadingProgress, type ReadingProgressProps, RevenueAutomationLoop, type RevenueAutomationLoopProps, SectionShellProps, type SeriesEdition, Shell, type ShellProps, Sidebar, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Signup, type SignupLabels, type SignupProps, SiteFooter, type SiteFooterProps, SpotlightCard, type SpotlightCardProps, StarRating, type StarRatingProps, TabItem, type TabItemProps, ThemeSelector, type ThemeSelectorProps, VersionedSeriesNavigator, type VersionedSeriesNavigatorProps, VersionedUpgradeAlert, type VersionedUpgradeAlertProps, VideoLightbox, type VideoLightboxProps, VoidBackground, type VoidBackgroundProps, appendUTMs, isExemptUrl };
1329
+ export { type AnalysisProgress, type BehavioralSignals, ChangeEmail, type ChangeEmailLabels, type ChangeEmailProps, ColorPicker, type ColorPickerProps, CursorSpotlight, type CursorSpotlightProps, DataHighlight, type DataHighlightProps, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, type DataTableProps, DataTableRow, type EcosystemConnection, EcosystemDiagram, type EcosystemDiagramProps, type EcosystemLayer, type EngagementTip, type EnterpriseSLA, type EnterpriseSignalCategory, type EnterpriseSignalItem, type EnterpriseSignalStatus, EnterpriseSignaling, type EnterpriseSignalingProps, type EraSentiment, type EvolutionEra, EvolutionTimeline, type EvolutionTimelineProps, FloatingTabBar, type FloatingTabBarProps, type FooterCTA, type FooterLink, type FooterSection, type FooterTrustBadge, ForgotPassword, type ForgotPasswordLabels, type ForgotPasswordProps, FunnelScalingSender, type FunnelScalingSenderProps, InsightCallout, type InsightCalloutProps, IntelligenceBlock, type IntelligenceBlockProps, type IntelligenceCapability, type IntelligenceMetric, type LeadProfile, type LeadProfileState, LeadProfileView, type LeadProfileViewProps, LocaleDropdown, type LocaleDropdownProps, type LocaleOption, Login, type LoginLabels, type LoginProps, LongFormLayout, type LongFormLayoutProps, type MBTIScore, MDXOutboundLink, type NavItem, NavPlacement, Navbar, NavbarActions, NavbarBrand, type NavbarBrandProps, NavbarContent, NavbarItem, type NavbarItemProps, NavbarMegaMenu, NavbarMegaMenuItem, type NavbarMegaMenuItemProps, type NavbarMegaMenuProps, NavbarMegaMenuSection, type NavbarMegaMenuSectionProps, NavbarMobileActions, NavbarMobileNavItem, type NavbarMobileNavItemProps, NavbarMobileSeparator, type NavbarProps, NavbarSearchTrigger, type NavbarSearchTriggerProps, NavbarV2, NavbarV2Actions, NavbarV2Brand, type NavbarV2BrandProps, type NavbarV2Props, NavbarV2Tab, NavbarV2TabMenu, type NavbarV2TabMenuProps, type NavbarV2TabProps, NavbarV2Tabs, type OutboundClickEventDetail, OutboundLink, type OutboundLinkProps, type PartnerBenefit, type PartnerCalcInput, type PartnerCalcOutput, type PartnerDifferentiator, PartnerValueProp, type PartnerValuePropProps, ReadingProgress, type ReadingProgressProps, RevenueAutomationLoop, type RevenueAutomationLoopProps, SectionShellProps, type SeriesEdition, Shell, type ShellProps, Sidebar, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Signup, type SignupLabels, type SignupProps, SiteFooter, type SiteFooterProps, SpotlightCard, type SpotlightCardProps, StarRating, type StarRatingProps, TabItem, type TabItemProps, ThemeSelector, type ThemeSelectorProps, UtmParams, VersionedSeriesNavigator, type VersionedSeriesNavigatorProps, VersionedUpgradeAlert, type VersionedUpgradeAlertProps, VideoLightbox, type VideoLightboxProps, VoidBackground, type VoidBackgroundProps, appendGovernedUTMs, appendUTMs, isExemptUrl };
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
10
10
  import ReactDOM, { createPortal } from 'react-dom';
11
11
  import { AnimatePresence, motion, useInView, useReducedMotion } from 'framer-motion';
12
12
  import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
13
- import { ArrowRight, X, Check, Clock, Sun, Moon } from 'lucide-react';
13
+ import { ArrowRight, X, Check, FileText, Clock, Sun, Moon } from 'lucide-react';
14
14
  import { defineMessages, useIntl, IntlProvider } from 'react-intl';
15
15
  export { FormattedDate, FormattedMessage, FormattedNumber, defineMessages } from 'react-intl';
16
16
  import { Menu } from '@base-ui/react/menu';
@@ -4043,23 +4043,146 @@ var PlatformBadge = forwardRef(
4043
4043
  }
4044
4044
  );
4045
4045
  PlatformBadge.displayName = "PlatformBadge";
4046
+ var UtmContext = createContext(null);
4047
+
4048
+ // src/web/utm/useUtmDefaults.ts
4049
+ function useUtmDefaults() {
4050
+ return useContext(UtmContext);
4051
+ }
4052
+
4053
+ // src/web/utm/builders.ts
4054
+ var PLACEHOLDER_ORIGIN = "https://__placeholder__.internal";
4055
+ function buildUtmUrl(baseUrl, params) {
4056
+ const isRelative = baseUrl.startsWith("/");
4057
+ let url;
4058
+ try {
4059
+ url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);
4060
+ } catch {
4061
+ return baseUrl;
4062
+ }
4063
+ const existingParams = [];
4064
+ url.searchParams.forEach((value, key) => {
4065
+ existingParams.push([key, value]);
4066
+ });
4067
+ for (const [key] of existingParams) {
4068
+ url.searchParams.delete(key);
4069
+ }
4070
+ for (const [key, value] of existingParams) {
4071
+ if (!key.startsWith("utm_")) {
4072
+ url.searchParams.set(key, value);
4073
+ }
4074
+ }
4075
+ url.searchParams.set("utm_source", params.source);
4076
+ url.searchParams.set("utm_medium", params.medium);
4077
+ url.searchParams.set("utm_campaign", params.campaign);
4078
+ if (params.term !== void 0) {
4079
+ url.searchParams.set("utm_term", params.term);
4080
+ }
4081
+ if (params.content !== void 0) {
4082
+ url.searchParams.set("utm_content", params.content);
4083
+ }
4084
+ if (isRelative) {
4085
+ return url.href.replace(PLACEHOLDER_ORIGIN, "");
4086
+ }
4087
+ return url.href;
4088
+ }
4089
+
4090
+ // src/web/utm/classifiers.ts
4091
+ var INTERNAL_PATTERNS = [
4092
+ /^\/(?!\/)/,
4093
+ // Relative paths
4094
+ /^https?:\/\/(www\.)?sales-mind\.ai/i,
4095
+ // Marketing site
4096
+ /^https?:\/\/app\.sales-mind\.ai/i,
4097
+ // Web app
4098
+ /^https?:\/\/apps\.sales-mind\.ai/i,
4099
+ // Web app (legacy)
4100
+ /^https?:\/\/meet\.sales-mind\.ai/i,
4101
+ // Booking
4102
+ /^https?:\/\/docs\.sales-mind\.ai/i
4103
+ // Docs
4104
+ ];
4105
+ var SYSTEM_PATTERNS = [
4106
+ /^https?:\/\/.*\/api\//i,
4107
+ // API endpoints
4108
+ /^https?:\/\/.*\/webhook/i,
4109
+ // Webhooks
4110
+ /^https?:\/\/.*\/oauth/i,
4111
+ // OAuth callbacks
4112
+ /^https?:\/\/.*\/callback/i,
4113
+ // Callbacks
4114
+ /^https?:\/\/.*\.supabase\.(co|com)/i,
4115
+ // Supabase
4116
+ /^https?:\/\/.*\.firebaseapp\.com/i,
4117
+ // Firebase
4118
+ /^https?:\/\/.*\.cloudfunctions\.net/i
4119
+ // Cloud Functions
4120
+ ];
4121
+ var ASSET_PATTERNS = [
4122
+ /\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\?.*)?$/i
4123
+ ];
4124
+ var CONVERSION_PATTERNS = [
4125
+ /^https?:\/\/(www\.)?calendly\.com/i,
4126
+ /^https?:\/\/(checkout\.)?stripe\.com/i,
4127
+ /^https?:\/\/buy\.stripe\.com/i,
4128
+ /^https?:\/\/chromewebstore\.google\.com/i,
4129
+ /^https?:\/\/meet\.sales-mind\.ai/i
4130
+ ];
4131
+ var PROTOCOL_EXEMPT = [
4132
+ /^mailto:/i,
4133
+ /^tel:/i,
4134
+ /^#/,
4135
+ /^javascript:/i
4136
+ ];
4137
+ function classifyUrl(url) {
4138
+ if (PROTOCOL_EXEMPT.some((p) => p.test(url))) return "protocol";
4139
+ if (ASSET_PATTERNS.some((p) => p.test(url))) return "asset";
4140
+ if (SYSTEM_PATTERNS.some((p) => p.test(url))) return "system";
4141
+ if (CONVERSION_PATTERNS.some((p) => p.test(url))) return "conversion";
4142
+ if (INTERNAL_PATTERNS.some((p) => p.test(url))) return "internal";
4143
+ return "external";
4144
+ }
4145
+ function requiresUtm(url) {
4146
+ const classification = classifyUrl(url);
4147
+ return classification === "external" || classification === "conversion";
4148
+ }
4149
+ function isUtmExempt(url) {
4150
+ const classification = classifyUrl(url);
4151
+ return classification === "protocol" || classification === "asset" || classification === "system" || classification === "internal";
4152
+ }
4046
4153
 
4047
4154
  // src/components/OutboundLink/outbound-link-utils.ts
4048
- var CONSTANT_UTM_SOURCE = "salesmind";
4155
+ var LEGACY_UTM_SOURCE = "salesmind";
4049
4156
  var EXEMPT_PATTERNS = [
4050
4157
  /^https?:\/\/(www\.)?(stripe\.com|checkout\.stripe\.com|paypal\.com)/i,
4051
4158
  /^https?:\/\/(www\.)?github\.com\/login\/oauth/i
4052
4159
  ];
4053
4160
  var isExemptUrl = (urlStr) => {
4054
4161
  if (urlStr.startsWith("mailto:") || urlStr.startsWith("tel:")) return true;
4162
+ const classification = classifyUrl(urlStr);
4163
+ if (classification === "system" || classification === "protocol" || classification === "asset") {
4164
+ return true;
4165
+ }
4055
4166
  return EXEMPT_PATTERNS.some((pattern) => pattern.test(urlStr));
4056
4167
  };
4168
+ var appendGovernedUTMs = (href, params, preserveExisting = true) => {
4169
+ try {
4170
+ const url = new URL(href);
4171
+ if (preserveExisting) {
4172
+ const hasAll = url.searchParams.has("utm_source") && url.searchParams.has("utm_medium") && url.searchParams.has("utm_campaign");
4173
+ if (hasAll) return href;
4174
+ }
4175
+ return buildUtmUrl(href, params);
4176
+ } catch {
4177
+ return href;
4178
+ }
4179
+ };
4057
4180
  var appendUTMs = (href, context, pageSlug, options) => {
4058
4181
  try {
4059
4182
  const url = new URL(href);
4060
4183
  const { mediumOverride = "outbound_link", campaignOverride, preserveExisting = true } = options;
4061
4184
  const utms = {
4062
- utm_source: CONSTANT_UTM_SOURCE,
4185
+ utm_source: LEGACY_UTM_SOURCE,
4063
4186
  utm_medium: mediumOverride,
4064
4187
  utm_campaign: campaignOverride || pageSlug,
4065
4188
  utm_content: context
@@ -4086,10 +4209,13 @@ var OutboundLink = forwardRef(
4086
4209
  preserveExistingUTM = true,
4087
4210
  openInNewTab = true,
4088
4211
  disableTracking = false,
4212
+ utmParams,
4089
4213
  onClick,
4090
4214
  children,
4091
4215
  ...props
4092
4216
  }, ref) => {
4217
+ const contextParams = useUtmDefaults();
4218
+ const resolvedUtmParams = utmParams ?? contextParams;
4093
4219
  let hostname = "";
4094
4220
  try {
4095
4221
  const url = new URL(href);
@@ -4114,16 +4240,20 @@ var OutboundLink = forwardRef(
4114
4240
  }
4115
4241
  const isExempt = isExemptUrl(href) || disableTracking;
4116
4242
  if (isExternal && !isExempt) {
4117
- const pageSlug = window.location.pathname.replace(/^\/|\/$/g, "") || "home";
4118
- setFinalHref(appendUTMs(href, context, pageSlug, {
4119
- mediumOverride: currentMedium,
4120
- campaignOverride,
4121
- preserveExisting: preserveExistingUTM
4122
- }));
4243
+ if (resolvedUtmParams) {
4244
+ setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));
4245
+ } else {
4246
+ const pageSlug = window.location.pathname.replace(/^\/|\/$/g, "") || "home";
4247
+ setFinalHref(appendUTMs(href, context, pageSlug, {
4248
+ mediumOverride: currentMedium,
4249
+ campaignOverride,
4250
+ preserveExisting: preserveExistingUTM
4251
+ }));
4252
+ }
4123
4253
  } else {
4124
4254
  setFinalHref(href);
4125
4255
  }
4126
- }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking]);
4256
+ }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);
4127
4257
  const handleClick = (e) => {
4128
4258
  if (typeof window === "undefined" || disableTracking) {
4129
4259
  onClick?.(e);
@@ -5897,7 +6027,7 @@ var ArticleCard = forwardRef(
5897
6027
  onClick: handleClick,
5898
6028
  ...props,
5899
6029
  children: [
5900
- imageUrl && /* @__PURE__ */ jsxs("div", { className: "ds-article-card__image-wrapper", children: [
6030
+ imageUrl ? /* @__PURE__ */ jsxs("div", { className: "ds-article-card__image-wrapper", children: [
5901
6031
  /* @__PURE__ */ jsx(
5902
6032
  "img",
5903
6033
  {
@@ -5908,9 +6038,11 @@ var ArticleCard = forwardRef(
5908
6038
  }
5909
6039
  ),
5910
6040
  category && /* @__PURE__ */ jsx("span", { className: "ds-article-card__category-badge", children: category })
6041
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "ds-article-card__placeholder", children: [
6042
+ /* @__PURE__ */ jsx(FileText, { className: "ds-article-card__placeholder-icon", "aria-hidden": "true" }),
6043
+ category && /* @__PURE__ */ jsx("span", { className: "ds-article-card__category-badge", children: category })
5911
6044
  ] }),
5912
6045
  /* @__PURE__ */ jsxs("div", { className: "ds-article-card__content", children: [
5913
- !imageUrl && category && /* @__PURE__ */ jsx("span", { className: "ds-article-card__category-text", children: category }),
5914
6046
  /* @__PURE__ */ jsx("h3", { className: "ds-article-card__title", children: title }),
5915
6047
  /* @__PURE__ */ jsx("p", { className: "ds-article-card__excerpt", children: excerpt }),
5916
6048
  /* @__PURE__ */ jsxs("div", { className: "ds-article-card__meta", children: [
@@ -16685,6 +16817,265 @@ function JsonIcon() {
16685
16817
  );
16686
16818
  }
16687
16819
 
16688
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AnnouncementBar, AppearancePanel, AppearanceProvider, ArchitectureDiagram, ArticleCard, ArticleLayout, AspectRatio, AuthorBio, Avatar, AvatarFallback, AvatarImage, BREAKPOINTS, Badge, BarChart, BeforeAfterBlock, BookingEmbed, Box, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BrowserFrame, Button, ButtonGroup, COLORS, CONTAINER_SIZE_MAP, CTASection, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CaseStudyCard, CaseStudySection, CaveatBlock, ChangeEmail, Chart, ChartContainer, ChartSwitchControl, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorPicker, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, ComparisonTable, CompetitorDiff, ComplianceGrid, ConfidenceIndicator, Container, ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuTrigger, CursorSpotlight, DISTANCE, DSIntlProvider, DURATION, DataCoverageBadge, DataHighlight, DataStateIndicator, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, DataTableRow, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EASING, EcosystemDiagram, EmptyState, EnterpriseSignaling, EvidenceGroup, EvolutionTimeline, ExecutiveThesis, ExitIntentOverlay, ExportMenu, FONT_FAMILY, FONT_SIZE, FONT_WEIGHT, FeatureSection, FloatingTabBar, ForgotPassword, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FunnelChart, FunnelScalingSender, Grid, GuaranteeHighlight, Heading, HeatmapChart, HeroSection, HoverCard, HoverCardContent, HoverCardTrigger, ICPFilter, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InsightBlock, InsightCallout, IntegrationShowcase, IntelligenceBlock, IntentCTA, KeyMetric, LINE_HEIGHT, Label, LeadCaptureForm, LeadProfileView, LineChart, LocaleDropdown, Login, LongFormLayout, MBTIRadar, MBTITypeGrid, MDXOutboundLink, MEDIA_QUERIES, MOTION, ManifestoBlock, MethodologyNote, MetricCounter, MotionContainer, MotionText, Navbar, NavbarActions, NavbarBrand, NavbarContent, NavbarItem, NavbarMegaMenu, NavbarMegaMenuItem, NavbarMegaMenuSection, NavbarMobileActions, NavbarMobileNavItem, NavbarMobileSeparator, NavbarSearchTrigger, NavbarV2, NavbarV2Actions, NavbarV2Brand, NavbarV2Tab, NavbarV2TabMenu, NavbarV2Tabs, ObjectionFAQ, OutboundLink, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PartnerValueProp, PieChart, PlatformBadge, Popover, PopoverClose, PopoverContent, PopoverTrigger, PricingCard, PricingSection, PricingToggle, ProblemAgitation, ProcessTimeline, Progress, Prose, RADIUS, ROICalculator, Radio, RadioGroup, ReadingProgress, RelatedContent, ReportShell, RevenueAutomationLoop, SHADOWS, SPACING, ScrollArea, ScrollBar, Section, SectionHeader, SectionShell, SecurityBlock, SegmentSwitch, Select, SelectContent, SelectGroup, SelectItem, SelectSeparator, SelectTrigger, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Shell, Sidebar, SidebarItem, SidebarSection, Signup, SiteFooter, Skeleton, Slider, SocialProof, SocialProofCard, SocialProofCarousel, SocialProofFeatured, SocialProofGrid, SocialProofLogos, SpotlightCard, Stack, StakeholderTabs, StarRating, StatsSection, StatusBadge, StickyActionBar, Switch, TRANSITION, TabItem, TableOfContents, Tabs, TabsContent, TabsList, TabsTrigger, Text, TextArea, TextField, ThemeSelector, ToastContext, ToastItem, ToastProvider, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger, TrendIndicator, VARIANTS, ValueAnchor, VersionedSeriesNavigator, VersionedUpgradeAlert, VerticalVideoGrid, VideoEmbed, VideoLightbox, VisuallyHidden, VoidBackground, Z_INDEX, alertMessages, allMessages, appearanceMessages, appendUTMs, authMessages, calendarMessages, carouselMessages, commonMessages, dialogMessages, extractSpacingStyles, formMessages, hexToRgb, initializeAppearance, isExemptUrl, methodologyMessages, navigationMessages, paginationMessages, prefersReducedMotion, reportMessages, resolveSpacing, toastMessages, useAppearance, useDateFormat, useFormField, useIsRTL, useLocale, useMessage, useNumberFormat, useRelativeTime, useTextDirection, useToast };
16689
- //# sourceMappingURL=index.js.map
16820
+ // src/web/utm/constants.ts
16821
+ var UTM_SOURCES = [
16822
+ "linkedin",
16823
+ "whatsapp",
16824
+ "intercom",
16825
+ "email",
16826
+ "website",
16827
+ "app",
16828
+ "chromeStore",
16829
+ "stripe",
16830
+ "direct"
16831
+ ];
16832
+ var UTM_MEDIUMS_MESSAGING = [
16833
+ "dm",
16834
+ "group",
16835
+ "email",
16836
+ "inAppChat",
16837
+ "organicPost",
16838
+ "paidAd",
16839
+ "qrCode",
16840
+ "redirect",
16841
+ "storeListing"
16842
+ ];
16843
+ var UTM_MEDIUMS_APP = [
16844
+ "appHome",
16845
+ "appDashboard",
16846
+ "appInbox",
16847
+ "appContacts",
16848
+ "appCampaigns",
16849
+ "appSettings",
16850
+ "appBilling",
16851
+ "appCheckout",
16852
+ "appOnboarding",
16853
+ "appSupport",
16854
+ "appCalendar"
16855
+ ];
16856
+ var UTM_MEDIUMS_WEB = [
16857
+ "webHome",
16858
+ "webDemo",
16859
+ "webPricing",
16860
+ "webFeatures",
16861
+ "webUseCase",
16862
+ "webSolution",
16863
+ "webIndustry",
16864
+ "webIntegrations",
16865
+ "webBlog",
16866
+ "webBlogPost",
16867
+ "webLanding",
16868
+ "webComparison",
16869
+ "webCaseStudy",
16870
+ "webAbout",
16871
+ "webContact",
16872
+ "webCareers",
16873
+ "webLegal",
16874
+ "webDocs",
16875
+ "webAffiliate"
16876
+ ];
16877
+ var UTM_MEDIUMS_ALL = [
16878
+ ...UTM_MEDIUMS_MESSAGING,
16879
+ ...UTM_MEDIUMS_APP,
16880
+ ...UTM_MEDIUMS_WEB
16881
+ ];
16882
+ var UTM_CAMPAIGNS = [
16883
+ "discoveryCall",
16884
+ "demo",
16885
+ "trial",
16886
+ "onboarding",
16887
+ "upgrade",
16888
+ "renewal",
16889
+ "retention",
16890
+ "accountSupport",
16891
+ "supportCall",
16892
+ "partnerCall",
16893
+ "hiring",
16894
+ "interviewCall"
16895
+ ];
16896
+ var UTM_TERMS = [
16897
+ "julienGadea",
16898
+ "bramSmith",
16899
+ "florentDupont",
16900
+ "sawLin",
16901
+ "evaSupport",
16902
+ "team",
16903
+ "auto"
16904
+ ];
16905
+ var UTM_CONTENTS = [
16906
+ "ctaPrimary",
16907
+ "ctaSecondary",
16908
+ "ctaHeader",
16909
+ "ctaFooter",
16910
+ "ctaInline",
16911
+ "buttonPrimary",
16912
+ "buttonSecondary",
16913
+ "banner",
16914
+ "popup",
16915
+ "variantA",
16916
+ "variantB",
16917
+ "variantC"
16918
+ ];
16919
+ var UTM_SOURCES_REQUIRING_SELLER = [
16920
+ "linkedin",
16921
+ "whatsapp",
16922
+ "intercom",
16923
+ "email"
16924
+ ];
16925
+
16926
+ // src/web/utm/validators.ts
16927
+ function validateUtmField(field, value) {
16928
+ switch (field) {
16929
+ case "source":
16930
+ return UTM_SOURCES.includes(value);
16931
+ case "medium":
16932
+ return UTM_MEDIUMS_ALL.includes(value);
16933
+ case "campaign":
16934
+ return UTM_CAMPAIGNS.includes(value);
16935
+ case "term":
16936
+ return UTM_TERMS.includes(value);
16937
+ case "content":
16938
+ return UTM_CONTENTS.includes(value);
16939
+ default:
16940
+ return false;
16941
+ }
16942
+ }
16943
+ function isValidUtmParams(params) {
16944
+ if (!params.source || !params.medium || !params.campaign) {
16945
+ return false;
16946
+ }
16947
+ if (!validateUtmField("source", params.source)) return false;
16948
+ if (!validateUtmField("medium", params.medium)) return false;
16949
+ if (!validateUtmField("campaign", params.campaign)) return false;
16950
+ if (params.term !== void 0 && !validateUtmField("term", params.term)) return false;
16951
+ if (params.content !== void 0 && !validateUtmField("content", params.content)) return false;
16952
+ return true;
16953
+ }
16954
+ function validateCompliance(url, params) {
16955
+ const errors = [];
16956
+ const classification = classifyUrl(url);
16957
+ const needsUtm = requiresUtm(url);
16958
+ if (!needsUtm) {
16959
+ return {
16960
+ status: "compliant",
16961
+ url,
16962
+ params: params ?? null,
16963
+ errors: []
16964
+ };
16965
+ }
16966
+ if (!params) {
16967
+ return {
16968
+ status: "blocked",
16969
+ url,
16970
+ params: null,
16971
+ errors: [`URL classified as '${classification}' requires UTM parameters but none provided`]
16972
+ };
16973
+ }
16974
+ if (!params.source) errors.push("Missing required field: utm_source");
16975
+ if (!params.medium) errors.push("Missing required field: utm_medium");
16976
+ if (!params.campaign) errors.push("Missing required field: utm_campaign");
16977
+ if (params.source && !validateUtmField("source", params.source)) {
16978
+ errors.push(`Invalid utm_source: '${params.source}'. Must be one of: ${UTM_SOURCES.join(", ")}`);
16979
+ }
16980
+ if (params.medium && !validateUtmField("medium", params.medium)) {
16981
+ errors.push(`Invalid utm_medium: '${params.medium}'. Must be one of governed enum values`);
16982
+ }
16983
+ if (params.campaign && !validateUtmField("campaign", params.campaign)) {
16984
+ errors.push(`Invalid utm_campaign: '${params.campaign}'. Must be one of: ${UTM_CAMPAIGNS.join(", ")}`);
16985
+ }
16986
+ if (params.term !== void 0 && params.term && !validateUtmField("term", params.term)) {
16987
+ errors.push(`Invalid utm_term: '${params.term}'. Must be one of: ${UTM_TERMS.join(", ")}`);
16988
+ }
16989
+ if (params.content !== void 0 && params.content && !validateUtmField("content", params.content)) {
16990
+ errors.push(`Invalid utm_content: '${params.content}'. Must be one of: ${UTM_CONTENTS.join(", ")}`);
16991
+ }
16992
+ const allValues = [];
16993
+ if (params.source) allValues.push(params.source);
16994
+ if (params.medium) allValues.push(params.medium);
16995
+ if (params.campaign) allValues.push(params.campaign);
16996
+ if (params.term) allValues.push(params.term);
16997
+ if (params.content) allValues.push(params.content);
16998
+ for (const value of allValues) {
16999
+ if (/\s/.test(value)) errors.push(`Value '${value}' contains spaces`);
17000
+ if (/_/.test(value)) errors.push(`Value '${value}' contains underscores`);
17001
+ if (/-/.test(value)) errors.push(`Value '${value}' contains hyphens`);
17002
+ if (/[^\x20-\x7E]/.test(value)) errors.push(`Value '${value}' contains non-ASCII characters`);
17003
+ if (value === value.toUpperCase() && value.length > 1) errors.push(`Value '${value}' is ALL CAPS`);
17004
+ }
17005
+ const status = errors.length === 0 ? "compliant" : "blocked";
17006
+ return { status, url, params, errors };
17007
+ }
17008
+ function classifyAndEnforce(url, params) {
17009
+ return validateCompliance(url, params);
17010
+ }
17011
+ function buildBlockedError(reason, url) {
17012
+ return {
17013
+ status: "UTM_COMPLIANCE_BLOCKED",
17014
+ reason,
17015
+ requiredFix: reason,
17016
+ correctedExample: url ?? null
17017
+ };
17018
+ }
17019
+
17020
+ // src/web/utm/attribution.ts
17021
+ function parseUtmParams(search) {
17022
+ if (!search) return {};
17023
+ const params = new URLSearchParams(search);
17024
+ const result = {};
17025
+ const source = params.get("utm_source");
17026
+ if (source && UTM_SOURCES.includes(source)) {
17027
+ result.source = source;
17028
+ }
17029
+ const medium = params.get("utm_medium");
17030
+ if (medium) {
17031
+ result.medium = medium;
17032
+ }
17033
+ const campaign = params.get("utm_campaign");
17034
+ if (campaign && UTM_CAMPAIGNS.includes(campaign)) {
17035
+ result.campaign = campaign;
17036
+ }
17037
+ const term = params.get("utm_term");
17038
+ if (term && UTM_TERMS.includes(term)) {
17039
+ result.term = term;
17040
+ }
17041
+ const content = params.get("utm_content");
17042
+ if (content && UTM_CONTENTS.includes(content)) {
17043
+ result.content = content;
17044
+ }
17045
+ return result;
17046
+ }
17047
+ function toFirstTouchAttribution(params) {
17048
+ return {
17049
+ firstTouchSource: params.source,
17050
+ firstTouchMedium: params.medium,
17051
+ firstTouchCampaign: params.campaign,
17052
+ firstTouchSeller: params.term ?? null
17053
+ };
17054
+ }
17055
+ function requiresSellerAttribution(source) {
17056
+ return UTM_SOURCES_REQUIRING_SELLER.includes(source);
17057
+ }
17058
+
17059
+ // src/web/utm/audit.ts
17060
+ function createAuditEntry(url, params, generatorContext, confidence) {
17061
+ const utmParts = [];
17062
+ if (params) {
17063
+ if (params.source) utmParts.push(`utm_source=${params.source}`);
17064
+ if (params.medium) utmParts.push(`utm_medium=${params.medium}`);
17065
+ if (params.campaign) utmParts.push(`utm_campaign=${params.campaign}`);
17066
+ if (params.term) utmParts.push(`utm_term=${params.term}`);
17067
+ if (params.content) utmParts.push(`utm_content=${params.content}`);
17068
+ }
17069
+ return {
17070
+ url,
17071
+ utmString: utmParts.join("&"),
17072
+ generatorContext,
17073
+ sellerAttribution: params?.term ?? null,
17074
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
17075
+ confidence
17076
+ };
17077
+ }
17078
+
17079
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AnnouncementBar, AppearancePanel, AppearanceProvider, ArchitectureDiagram, ArticleCard, ArticleLayout, AspectRatio, AuthorBio, Avatar, AvatarFallback, AvatarImage, BREAKPOINTS, Badge, BarChart, BeforeAfterBlock, BookingEmbed, Box, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BrowserFrame, Button, ButtonGroup, COLORS, CONTAINER_SIZE_MAP, CTASection, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CaseStudyCard, CaseStudySection, CaveatBlock, ChangeEmail, Chart, ChartContainer, ChartSwitchControl, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorPicker, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, ComparisonTable, CompetitorDiff, ComplianceGrid, ConfidenceIndicator, Container, ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuTrigger, CursorSpotlight, DISTANCE, DSIntlProvider, DURATION, DataCoverageBadge, DataHighlight, DataStateIndicator, DataTable, DataTableBody, DataTableCell, DataTableHead, DataTableHeader, DataTableRow, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EASING, EcosystemDiagram, EmptyState, EnterpriseSignaling, EvidenceGroup, EvolutionTimeline, ExecutiveThesis, ExitIntentOverlay, ExportMenu, FONT_FAMILY, FONT_SIZE, FONT_WEIGHT, FeatureSection, FloatingTabBar, ForgotPassword, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FunnelChart, FunnelScalingSender, Grid, GuaranteeHighlight, Heading, HeatmapChart, HeroSection, HoverCard, HoverCardContent, HoverCardTrigger, ICPFilter, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InsightBlock, InsightCallout, IntegrationShowcase, IntelligenceBlock, IntentCTA, KeyMetric, LINE_HEIGHT, Label, LeadCaptureForm, LeadProfileView, LineChart, LocaleDropdown, Login, LongFormLayout, MBTIRadar, MBTITypeGrid, MDXOutboundLink, MEDIA_QUERIES, MOTION, ManifestoBlock, MethodologyNote, MetricCounter, MotionContainer, MotionText, Navbar, NavbarActions, NavbarBrand, NavbarContent, NavbarItem, NavbarMegaMenu, NavbarMegaMenuItem, NavbarMegaMenuSection, NavbarMobileActions, NavbarMobileNavItem, NavbarMobileSeparator, NavbarSearchTrigger, NavbarV2, NavbarV2Actions, NavbarV2Brand, NavbarV2Tab, NavbarV2TabMenu, NavbarV2Tabs, ObjectionFAQ, OutboundLink, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PartnerValueProp, PieChart, PlatformBadge, Popover, PopoverClose, PopoverContent, PopoverTrigger, PricingCard, PricingSection, PricingToggle, ProblemAgitation, ProcessTimeline, Progress, Prose, RADIUS, ROICalculator, Radio, RadioGroup, ReadingProgress, RelatedContent, ReportShell, RevenueAutomationLoop, SHADOWS, SPACING, ScrollArea, ScrollBar, Section, SectionHeader, SectionShell, SecurityBlock, SegmentSwitch, Select, SelectContent, SelectGroup, SelectItem, SelectSeparator, SelectTrigger, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Shell, Sidebar, SidebarItem, SidebarSection, Signup, SiteFooter, Skeleton, Slider, SocialProof, SocialProofCard, SocialProofCarousel, SocialProofFeatured, SocialProofGrid, SocialProofLogos, SpotlightCard, Stack, StakeholderTabs, StarRating, StatsSection, StatusBadge, StickyActionBar, Switch, TRANSITION, TabItem, TableOfContents, Tabs, TabsContent, TabsList, TabsTrigger, Text, TextArea, TextField, ThemeSelector, ToastContext, ToastItem, ToastProvider, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger, TrendIndicator, UTM_CAMPAIGNS, UTM_CONTENTS, UTM_MEDIUMS_ALL, UTM_MEDIUMS_APP, UTM_MEDIUMS_MESSAGING, UTM_MEDIUMS_WEB, UTM_SOURCES, UTM_SOURCES_REQUIRING_SELLER, UTM_TERMS, VARIANTS, ValueAnchor, VersionedSeriesNavigator, VersionedUpgradeAlert, VerticalVideoGrid, VideoEmbed, VideoLightbox, VisuallyHidden, VoidBackground, Z_INDEX, alertMessages, allMessages, appearanceMessages, appendGovernedUTMs, appendUTMs, authMessages, buildBlockedError, buildUtmUrl, calendarMessages, carouselMessages, classifyAndEnforce, classifyUrl, commonMessages, createAuditEntry, dialogMessages, extractSpacingStyles, formMessages, hexToRgb, initializeAppearance, isExemptUrl, isUtmExempt, isValidUtmParams, methodologyMessages, navigationMessages, paginationMessages, parseUtmParams, prefersReducedMotion, reportMessages, requiresSellerAttribution, requiresUtm, resolveSpacing, toFirstTouchAttribution, toastMessages, useAppearance, useDateFormat, useFormField, useIsRTL, useLocale, useMessage, useNumberFormat, useRelativeTime, useTextDirection, useToast, validateCompliance, validateUtmField };
17080
+ //# sourceMappingURL=out.js.map
16690
17081
  //# sourceMappingURL=index.js.map