@salesmind-ai/design-system 0.3.3 → 0.3.4
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/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
- package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
- package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
- package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
- package/dist/admin/index.cjs +2928 -68
- package/dist/admin/index.cjs.map +1 -1
- package/dist/admin/index.js +2915 -5
- package/dist/admin/index.js.map +1 -1
- package/dist/blog/index.cjs +1064 -53
- package/dist/blog/index.cjs.map +1 -1
- package/dist/blog/index.d.cts +1 -1
- package/dist/blog/index.d.ts +1 -1
- package/dist/blog/index.js +1054 -8
- package/dist/blog/index.js.map +1 -1
- package/dist/charts/index.cjs +2694 -46
- package/dist/charts/index.cjs.map +1 -1
- package/dist/charts/index.js +2680 -3
- package/dist/charts/index.js.map +1 -1
- package/dist/core/index.cjs +4333 -807
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +4130 -14
- package/dist/core/index.js.map +1 -1
- package/dist/i18n/index.cjs +558 -86
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +544 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.cjs +17140 -1432
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +24 -13
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +16785 -31
- package/dist/index.js.map +1 -1
- package/dist/marketing/index.cjs +3072 -142
- package/dist/marketing/index.cjs.map +1 -1
- package/dist/marketing/index.d.cts +1 -1
- package/dist/marketing/index.d.ts +1 -1
- package/dist/marketing/index.js +3042 -11
- package/dist/marketing/index.js.map +1 -1
- package/dist/motion/index.cjs +1222 -26
- package/dist/motion/index.cjs.map +1 -1
- package/dist/motion/index.js +1215 -2
- package/dist/motion/index.js.map +1 -1
- package/dist/nav/index.cjs +1518 -101
- package/dist/nav/index.cjs.map +1 -1
- package/dist/nav/index.css +24 -13
- package/dist/nav/index.css.map +1 -1
- package/dist/nav/index.js +1498 -4
- package/dist/nav/index.js.map +1 -1
- package/dist/report/index.cjs +2403 -171
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.js +2363 -3
- package/dist/report/index.js.map +1 -1
- package/dist/sections/index.cjs +382 -28
- package/dist/sections/index.cjs.map +1 -1
- package/dist/sections/index.d.cts +15 -69
- package/dist/sections/index.d.ts +15 -69
- package/dist/sections/index.js +376 -4
- package/dist/sections/index.js.map +1 -1
- package/dist/social-proof/index.cjs +1250 -53
- package/dist/social-proof/index.cjs.map +1 -1
- package/dist/social-proof/index.d.cts +1 -1
- package/dist/social-proof/index.d.ts +1 -1
- package/dist/social-proof/index.js +1235 -6
- package/dist/social-proof/index.js.map +1 -1
- package/dist/theme/index.cjs +565 -38
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +555 -2
- package/dist/theme/index.js.map +1 -1
- package/dist/web/client/index.cjs +491 -38
- package/dist/web/client/index.cjs.map +1 -1
- package/dist/web/client/index.js +483 -4
- package/dist/web/client/index.js.map +1 -1
- package/dist/web/index.cjs +1346 -158
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.js +1305 -9
- package/dist/web/index.js.map +1 -1
- package/dist/web/server/index.cjs +563 -26
- package/dist/web/server/index.cjs.map +1 -1
- package/dist/web/server/index.js +560 -1
- package/dist/web/server/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2GARWEJK.js +0 -17
- package/dist/chunk-2GARWEJK.js.map +0 -1
- package/dist/chunk-3NKRFUAR.js +0 -37
- package/dist/chunk-3NKRFUAR.js.map +0 -1
- package/dist/chunk-3TGSIILM.cjs +0 -201
- package/dist/chunk-3TGSIILM.cjs.map +0 -1
- package/dist/chunk-4GM5BGBN.cjs +0 -801
- package/dist/chunk-4GM5BGBN.cjs.map +0 -1
- package/dist/chunk-5LGDEZWY.cjs +0 -2434
- package/dist/chunk-5LGDEZWY.cjs.map +0 -1
- package/dist/chunk-6H4DSTXR.js +0 -786
- package/dist/chunk-6H4DSTXR.js.map +0 -1
- package/dist/chunk-6UNG76Y2.js +0 -153
- package/dist/chunk-6UNG76Y2.js.map +0 -1
- package/dist/chunk-7PX2AZ6Y.js +0 -39
- package/dist/chunk-7PX2AZ6Y.js.map +0 -1
- package/dist/chunk-B6AVAX4F.js +0 -1415
- package/dist/chunk-B6AVAX4F.js.map +0 -1
- package/dist/chunk-BILT5KD3.js +0 -264
- package/dist/chunk-BILT5KD3.js.map +0 -1
- package/dist/chunk-C2BCDNAV.js +0 -24
- package/dist/chunk-C2BCDNAV.js.map +0 -1
- package/dist/chunk-CH42VPWE.cjs +0 -421
- package/dist/chunk-CH42VPWE.cjs.map +0 -1
- package/dist/chunk-CJ2MKVAF.cjs +0 -46
- package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
- package/dist/chunk-DP74LUXG.cjs +0 -98
- package/dist/chunk-DP74LUXG.cjs.map +0 -1
- package/dist/chunk-E7D6EKJ4.cjs +0 -44
- package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
- package/dist/chunk-ECXBTUH6.cjs +0 -584
- package/dist/chunk-ECXBTUH6.cjs.map +0 -1
- package/dist/chunk-EFRAP5ES.js +0 -157
- package/dist/chunk-EFRAP5ES.js.map +0 -1
- package/dist/chunk-F6YYWMME.js +0 -485
- package/dist/chunk-F6YYWMME.js.map +0 -1
- package/dist/chunk-FAFAP4L5.js +0 -183
- package/dist/chunk-FAFAP4L5.js.map +0 -1
- package/dist/chunk-GUZIMHWS.js +0 -1608
- package/dist/chunk-GUZIMHWS.js.map +0 -1
- package/dist/chunk-H2Y6BSTL.cjs +0 -69
- package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
- package/dist/chunk-HN4PHABT.js +0 -126
- package/dist/chunk-HN4PHABT.js.map +0 -1
- package/dist/chunk-HRENHNDJ.js +0 -211
- package/dist/chunk-HRENHNDJ.js.map +0 -1
- package/dist/chunk-I75BFEYT.cjs +0 -2561
- package/dist/chunk-I75BFEYT.cjs.map +0 -1
- package/dist/chunk-IFRATNLU.js +0 -562
- package/dist/chunk-IFRATNLU.js.map +0 -1
- package/dist/chunk-IYPXJ6YC.cjs +0 -69
- package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
- package/dist/chunk-JPJN4YBC.js +0 -409
- package/dist/chunk-JPJN4YBC.js.map +0 -1
- package/dist/chunk-KBA2LFBG.js +0 -62
- package/dist/chunk-KBA2LFBG.js.map +0 -1
- package/dist/chunk-KCKUSU2M.cjs +0 -166
- package/dist/chunk-KCKUSU2M.cjs.map +0 -1
- package/dist/chunk-KJ2OXQF4.js +0 -287
- package/dist/chunk-KJ2OXQF4.js.map +0 -1
- package/dist/chunk-KNQEIU7O.cjs +0 -1202
- package/dist/chunk-KNQEIU7O.cjs.map +0 -1
- package/dist/chunk-KVGSVGRK.cjs +0 -569
- package/dist/chunk-KVGSVGRK.cjs.map +0 -1
- package/dist/chunk-L352JRV6.cjs +0 -105
- package/dist/chunk-L352JRV6.cjs.map +0 -1
- package/dist/chunk-LJADZITX.cjs +0 -298
- package/dist/chunk-LJADZITX.cjs.map +0 -1
- package/dist/chunk-LMJPWXTZ.cjs +0 -194
- package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
- package/dist/chunk-LOWEAQST.js +0 -701
- package/dist/chunk-LOWEAQST.js.map +0 -1
- package/dist/chunk-MDB2WCRQ.cjs +0 -137
- package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
- package/dist/chunk-MQDEE7HC.cjs +0 -283
- package/dist/chunk-MQDEE7HC.cjs.map +0 -1
- package/dist/chunk-MQRB634A.cjs +0 -34
- package/dist/chunk-MQRB634A.cjs.map +0 -1
- package/dist/chunk-MTI27RDV.js +0 -185
- package/dist/chunk-MTI27RDV.js.map +0 -1
- package/dist/chunk-MU6GW5ZV.js +0 -2317
- package/dist/chunk-MU6GW5ZV.js.map +0 -1
- package/dist/chunk-NN3TUHIH.js +0 -28
- package/dist/chunk-NN3TUHIH.js.map +0 -1
- package/dist/chunk-NT4LBP7D.cjs +0 -111
- package/dist/chunk-NT4LBP7D.cjs.map +0 -1
- package/dist/chunk-OLV7OD3X.cjs +0 -502
- package/dist/chunk-OLV7OD3X.cjs.map +0 -1
- package/dist/chunk-OXNXEQY7.js +0 -2538
- package/dist/chunk-OXNXEQY7.js.map +0 -1
- package/dist/chunk-P5BOFE5A.js +0 -546
- package/dist/chunk-P5BOFE5A.js.map +0 -1
- package/dist/chunk-Q2MFGYTE.cjs +0 -1449
- package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
- package/dist/chunk-Q75DBVDY.cjs +0 -68
- package/dist/chunk-Q75DBVDY.cjs.map +0 -1
- package/dist/chunk-REQ5Q6ZI.js +0 -1022
- package/dist/chunk-REQ5Q6ZI.js.map +0 -1
- package/dist/chunk-SICKWUWB.js +0 -62
- package/dist/chunk-SICKWUWB.js.map +0 -1
- package/dist/chunk-T343CCH5.js +0 -1190
- package/dist/chunk-T343CCH5.js.map +0 -1
- package/dist/chunk-TEC62D4A.cjs +0 -1624
- package/dist/chunk-TEC62D4A.cjs.map +0 -1
- package/dist/chunk-TW5JB35D.js +0 -2122
- package/dist/chunk-TW5JB35D.js.map +0 -1
- package/dist/chunk-VC5LMUVQ.cjs +0 -20
- package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
- package/dist/chunk-VM7WFMKI.cjs +0 -76
- package/dist/chunk-VM7WFMKI.cjs.map +0 -1
- package/dist/chunk-W2WTP6HS.cjs +0 -233
- package/dist/chunk-W2WTP6HS.cjs.map +0 -1
- package/dist/chunk-WH7PYHZY.cjs +0 -35
- package/dist/chunk-WH7PYHZY.cjs.map +0 -1
- package/dist/chunk-XQZVY7JJ.cjs +0 -717
- package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
- package/dist/chunk-XU3OMQ7V.js +0 -98
- package/dist/chunk-XU3OMQ7V.js.map +0 -1
- package/dist/chunk-XWPDRMZG.js +0 -62
- package/dist/chunk-XWPDRMZG.js.map +0 -1
- package/dist/chunk-Y3CPKNB7.js +0 -67
- package/dist/chunk-Y3CPKNB7.js.map +0 -1
- package/dist/chunk-YNVRDD2P.js +0 -98
- package/dist/chunk-YNVRDD2P.js.map +0 -1
- package/dist/chunk-YSYR54XR.js +0 -92
- package/dist/chunk-YSYR54XR.js.map +0 -1
- package/dist/chunk-YTYDQBVY.cjs +0 -162
- package/dist/chunk-YTYDQBVY.cjs.map +0 -1
- package/dist/chunk-ZDLOA2UT.cjs +0 -1042
- package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
- package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
- package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/web/utm/constants.ts","../src/web/utm/validators.ts","../src/web/utm/attribution.ts","../src/web/utm/audit.ts"],"names":[],"mappings":"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","sourcesContent":["/* ============================================================================\n UTM Governance Constants — Enum Arrays (Hard Constraints)\n ============================================================================\n These arrays are the canonical enum lists. Values must never be invented\n outside of a governance update.\n ============================================================================ */\n\nimport type {\n UtmSource,\n UtmMediumMessaging,\n UtmMediumAppPage,\n UtmMediumWebPage,\n UtmMedium,\n UtmCampaign,\n UtmTerm,\n UtmContent,\n UtmSourceRequiringSeller,\n} from './types';\n\n// ── Sources ──────────────────────────────────────────────────────────────────\n\nexport const UTM_SOURCES: readonly UtmSource[] = [\n 'linkedin',\n 'whatsapp',\n 'intercom',\n 'email',\n 'website',\n 'app',\n 'chromeStore',\n 'stripe',\n 'direct',\n] as const;\n\n// ── Mediums ──────────────────────────────────────────────────────────────────\n\nexport const UTM_MEDIUMS_MESSAGING: readonly UtmMediumMessaging[] = [\n 'dm',\n 'group',\n 'email',\n 'inAppChat',\n 'organicPost',\n 'paidAd',\n 'qrCode',\n 'redirect',\n 'storeListing',\n] as const;\n\nexport const UTM_MEDIUMS_APP: readonly UtmMediumAppPage[] = [\n 'appHome',\n 'appDashboard',\n 'appInbox',\n 'appContacts',\n 'appCampaigns',\n 'appSettings',\n 'appBilling',\n 'appCheckout',\n 'appOnboarding',\n 'appSupport',\n 'appCalendar',\n] as const;\n\nexport const UTM_MEDIUMS_WEB: readonly UtmMediumWebPage[] = [\n 'webHome',\n 'webDemo',\n 'webPricing',\n 'webFeatures',\n 'webUseCase',\n 'webSolution',\n 'webIndustry',\n 'webIntegrations',\n 'webBlog',\n 'webBlogPost',\n 'webLanding',\n 'webComparison',\n 'webCaseStudy',\n 'webAbout',\n 'webContact',\n 'webCareers',\n 'webLegal',\n 'webDocs',\n 'webAffiliate',\n] as const;\n\nexport const UTM_MEDIUMS_ALL: readonly UtmMedium[] = [\n ...UTM_MEDIUMS_MESSAGING,\n ...UTM_MEDIUMS_APP,\n ...UTM_MEDIUMS_WEB,\n] as const;\n\n// ── Campaigns ────────────────────────────────────────────────────────────────\n\nexport const UTM_CAMPAIGNS: readonly UtmCampaign[] = [\n 'discoveryCall',\n 'demo',\n 'trial',\n 'onboarding',\n 'upgrade',\n 'renewal',\n 'retention',\n 'accountSupport',\n 'supportCall',\n 'partnerCall',\n 'hiring',\n 'interviewCall',\n] as const;\n\n// ── Terms (seller attribution) ───────────────────────────────────────────────\n\nexport const UTM_TERMS: readonly UtmTerm[] = [\n 'julienGadea',\n 'bramSmith',\n 'florentDupont',\n 'sawLin',\n 'evaSupport',\n 'team',\n 'auto',\n] as const;\n\n// ── Contents (CTA variant) ──────────────────────────────────────────────────\n\nexport const UTM_CONTENTS: readonly UtmContent[] = [\n 'ctaPrimary',\n 'ctaSecondary',\n 'ctaHeader',\n 'ctaFooter',\n 'ctaInline',\n 'buttonPrimary',\n 'buttonSecondary',\n 'banner',\n 'popup',\n 'variantA',\n 'variantB',\n 'variantC',\n] as const;\n\n// ── Sources requiring seller attribution ────────────────────────────────────\n\nexport const UTM_SOURCES_REQUIRING_SELLER: readonly UtmSourceRequiringSeller[] = [\n 'linkedin',\n 'whatsapp',\n 'intercom',\n 'email',\n] as const;\n","/* ============================================================================\n UTM Validators — Hard Governance Enforcement\n ============================================================================\n All validation uses enum-only matching. No creative fixes, no fuzzy matching.\n If a value is not in the governed enum, it is invalid.\n ============================================================================ */\n\nimport type {\n UtmParams,\n UtmComplianceResult,\n UtmComplianceStatus,\n UtmBlockedError,\n} from './types';\n\nimport {\n UTM_SOURCES,\n UTM_MEDIUMS_ALL,\n UTM_CAMPAIGNS,\n UTM_TERMS,\n UTM_CONTENTS,\n} from './constants';\n\nimport { classifyUrl, requiresUtm } from './classifiers';\n\n// ── Field-level validation ───────────────────────────────────────────────────\n\n/**\n * Validate a single UTM field name + value pair against the governed enums.\n *\n * @param field - The UTM field name (e.g., 'source', 'medium', 'campaign', 'term', 'content')\n * @param value - The value to validate\n * @returns true if the value is in the corresponding enum\n */\nexport function validateUtmField(field: string, value: string): boolean {\n switch (field) {\n case 'source':\n return (UTM_SOURCES as readonly string[]).includes(value);\n case 'medium':\n return (UTM_MEDIUMS_ALL as readonly string[]).includes(value);\n case 'campaign':\n return (UTM_CAMPAIGNS as readonly string[]).includes(value);\n case 'term':\n return (UTM_TERMS as readonly string[]).includes(value);\n case 'content':\n return (UTM_CONTENTS as readonly string[]).includes(value);\n default:\n return false;\n }\n}\n\n// ── Param-level validation ───────────────────────────────────────────────────\n\n/**\n * Validate a complete or partial UtmParams object.\n *\n * Returns true only if:\n * - source, medium, and campaign are all present\n * - All present values match their respective enums\n * - Optional fields (term, content) match their enums if provided\n */\nexport function isValidUtmParams(params: Partial<UtmParams>): boolean {\n // Required fields must exist and be non-empty\n if (!params.source || !params.medium || !params.campaign) {\n return false;\n }\n\n // Validate required fields\n if (!validateUtmField('source', params.source)) return false;\n if (!validateUtmField('medium', params.medium)) return false;\n if (!validateUtmField('campaign', params.campaign)) return false;\n\n // Validate optional fields if present\n if (params.term !== undefined && !validateUtmField('term', params.term)) return false;\n if (params.content !== undefined && !validateUtmField('content', params.content)) return false;\n\n return true;\n}\n\n// ── Compliance validation ────────────────────────────────────────────────────\n\n/**\n * Full compliance validation for a URL + UTM params combination.\n *\n * Checks:\n * 1. URL classification (does it require UTMs?)\n * 2. All required params present\n * 3. All values match governed enums\n * 4. No illegal characters (spaces, underscores, hyphens, emojis, ALL CAPS)\n * 5. camelCase format enforcement\n */\nexport function validateCompliance(\n url: string,\n params?: Partial<UtmParams> | null,\n): UtmComplianceResult {\n const errors: string[] = [];\n const classification = classifyUrl(url);\n const needsUtm = requiresUtm(url);\n\n // If URL doesn't require UTMs, it's automatically compliant\n if (!needsUtm) {\n return {\n status: 'compliant',\n url,\n params: params ?? null,\n errors: [],\n };\n }\n\n // UTMs are required but not provided\n if (!params) {\n return {\n status: 'blocked',\n url,\n params: null,\n errors: [`URL classified as '${classification}' requires UTM parameters but none provided`],\n };\n }\n\n // Check required fields\n if (!params.source) errors.push('Missing required field: utm_source');\n if (!params.medium) errors.push('Missing required field: utm_medium');\n if (!params.campaign) errors.push('Missing required field: utm_campaign');\n\n // Validate values against enums\n if (params.source && !validateUtmField('source', params.source)) {\n errors.push(`Invalid utm_source: '${params.source}'. Must be one of: ${UTM_SOURCES.join(', ')}`);\n }\n if (params.medium && !validateUtmField('medium', params.medium)) {\n errors.push(`Invalid utm_medium: '${params.medium}'. Must be one of governed enum values`);\n }\n if (params.campaign && !validateUtmField('campaign', params.campaign)) {\n errors.push(`Invalid utm_campaign: '${params.campaign}'. Must be one of: ${UTM_CAMPAIGNS.join(', ')}`);\n }\n if (params.term !== undefined && params.term && !validateUtmField('term', params.term)) {\n errors.push(`Invalid utm_term: '${params.term}'. Must be one of: ${UTM_TERMS.join(', ')}`);\n }\n if (params.content !== undefined && params.content && !validateUtmField('content', params.content)) {\n errors.push(`Invalid utm_content: '${params.content}'. Must be one of: ${UTM_CONTENTS.join(', ')}`);\n }\n\n // Validate value format (camelCase, no illegal chars)\n const allValues: string[] = [];\n if (params.source) allValues.push(params.source);\n if (params.medium) allValues.push(params.medium);\n if (params.campaign) allValues.push(params.campaign);\n if (params.term) allValues.push(params.term);\n if (params.content) allValues.push(params.content);\n\n for (const value of allValues) {\n if (/\\s/.test(value)) errors.push(`Value '${value}' contains spaces`);\n if (/_/.test(value)) errors.push(`Value '${value}' contains underscores`);\n if (/-/.test(value)) errors.push(`Value '${value}' contains hyphens`);\n if (/[^\\x20-\\x7E]/.test(value)) errors.push(`Value '${value}' contains non-ASCII characters`);\n if (value === value.toUpperCase() && value.length > 1) errors.push(`Value '${value}' is ALL CAPS`);\n }\n\n const status: UtmComplianceStatus = errors.length === 0 ? 'compliant' : 'blocked';\n\n return { status, url, params, errors };\n}\n\n/**\n * Classify a URL and enforce UTM compliance in a single call.\n */\nexport function classifyAndEnforce(\n url: string,\n params?: Partial<UtmParams>,\n): UtmComplianceResult {\n return validateCompliance(url, params);\n}\n\n// ── Error builder ────────────────────────────────────────────────────────────\n\n/**\n * Build a structured blocked-error response.\n */\nexport function buildBlockedError(\n reason: string,\n url?: string,\n): UtmBlockedError {\n return {\n status: 'UTM_COMPLIANCE_BLOCKED',\n reason,\n requiredFix: reason,\n correctedExample: url ?? null,\n };\n}\n","/* ============================================================================\n First-Touch Attribution & Seller Logic\n ============================================================================\n Handles UTM parsing from URLs and first-touch CRM attribution mapping.\n Once first-touch fields are set, they must NEVER be overwritten.\n ============================================================================ */\n\nimport type {\n UtmParams,\n UtmSource,\n UtmTerm,\n FirstTouchAttribution,\n} from './types';\n\nimport {\n UTM_SOURCES,\n UTM_CAMPAIGNS,\n UTM_TERMS,\n UTM_CONTENTS,\n UTM_SOURCES_REQUIRING_SELLER,\n} from './constants';\n\n// ── Parse UTM params from URL search string ──────────────────────────────────\n\n/**\n * Parse UTM parameters from a URL search string.\n *\n * Validates each field against governed enums:\n * - source: must be in UTM_SOURCES (invalid → excluded)\n * - medium: accepted as-is (no enum validation — medium is loosely parsed)\n * - campaign: must be in UTM_CAMPAIGNS (invalid → excluded)\n * - term: must be in UTM_TERMS (invalid → excluded)\n * - content: must be in UTM_CONTENTS (invalid → excluded)\n *\n * @param search - URL search string, with or without leading '?'\n * @returns Partial<UtmParams> with only valid fields included\n */\nexport function parseUtmParams(search: string): Partial<UtmParams> {\n if (!search) return {};\n\n const params = new URLSearchParams(search);\n const result: Partial<UtmParams> = {};\n\n // Source — validate against enum\n const source = params.get('utm_source');\n if (source && (UTM_SOURCES as readonly string[]).includes(source)) {\n result.source = source as UtmSource;\n }\n\n // Medium — loosely parsed (no enum validation per test spec line 674-678)\n const medium = params.get('utm_medium');\n if (medium) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result.medium = medium as any;\n }\n\n // Campaign — validate against enum\n const campaign = params.get('utm_campaign');\n if (campaign && (UTM_CAMPAIGNS as readonly string[]).includes(campaign)) {\n result.campaign = campaign as UtmParams['campaign'];\n }\n\n // Term — validate against enum\n const term = params.get('utm_term');\n if (term && (UTM_TERMS as readonly string[]).includes(term)) {\n result.term = term as UtmTerm;\n }\n\n // Content — validate against enum\n const content = params.get('utm_content');\n if (content && (UTM_CONTENTS as readonly string[]).includes(content)) {\n result.content = content as UtmParams['content'];\n }\n\n return result;\n}\n\n// ── First-touch attribution mapping ──────────────────────────────────────────\n\n/**\n * Map UTM params to CRM first-touch attribution fields.\n *\n * On first lead capture:\n * - utm_source → firstTouchSource\n * - utm_medium → firstTouchMedium\n * - utm_campaign → firstTouchCampaign\n * - utm_term → firstTouchSeller (null if absent)\n *\n * utm_content is intentionally excluded from attribution.\n * These fields must be persisted permanently and never overwritten.\n */\nexport function toFirstTouchAttribution(params: UtmParams): FirstTouchAttribution {\n return {\n firstTouchSource: params.source,\n firstTouchMedium: params.medium,\n firstTouchCampaign: params.campaign,\n firstTouchSeller: params.term ?? null,\n };\n}\n\n// ── Seller attribution check ─────────────────────────────────────────────────\n\n/**\n * Check if a source requires seller attribution (utm_term).\n *\n * Sources requiring seller: linkedin, whatsapp, intercom, email\n * These are manual outbound channels where individual seller tracking matters.\n */\nexport function requiresSellerAttribution(source: UtmSource): boolean {\n return (UTM_SOURCES_REQUIRING_SELLER as readonly string[]).includes(source);\n}\n","/* ============================================================================\n UTM Audit & Observability\n ============================================================================\n Creates structured audit entries for UTM compliance telemetry.\n ============================================================================ */\n\nimport type { UtmParams, UtmConfidence, UtmAuditEntry } from './types';\n\n/**\n * Create a structured audit log entry for a generated/validated link.\n *\n * Every time a link is generated, an audit entry should be logged with:\n * - URL and full UTM string\n * - Generator context (component, agent, or tool that created the link)\n * - Seller attribution (from utm_term)\n * - Timestamp\n * - Confidence flag (valid / corrected / blocked)\n */\nexport function createAuditEntry(\n url: string,\n params: Partial<UtmParams> | null,\n generatorContext: string,\n confidence: UtmConfidence,\n): UtmAuditEntry {\n const utmParts: string[] = [];\n\n if (params) {\n if (params.source) utmParts.push(`utm_source=${params.source}`);\n if (params.medium) utmParts.push(`utm_medium=${params.medium}`);\n if (params.campaign) utmParts.push(`utm_campaign=${params.campaign}`);\n if (params.term) utmParts.push(`utm_term=${params.term}`);\n if (params.content) utmParts.push(`utm_content=${params.content}`);\n }\n\n return {\n url,\n utmString: utmParts.join('&'),\n generatorContext,\n sellerAttribution: params?.term ?? null,\n timestamp: new Date().toISOString(),\n confidence,\n };\n}\n"]}
|
package/dist/chunk-MQRB634A.cjs
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkMDB2WCRQ_cjs = require('./chunk-MDB2WCRQ.cjs');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var clsx = require('clsx');
|
|
6
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
-
|
|
8
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
|
|
10
|
-
var clsx__default = /*#__PURE__*/_interopDefault(clsx);
|
|
11
|
-
|
|
12
|
-
var Stack = react.forwardRef(
|
|
13
|
-
({ direction = "column", align, justify, wrap, className, style, ...props }, ref) => {
|
|
14
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15
|
-
chunkMDB2WCRQ_cjs.Box,
|
|
16
|
-
{
|
|
17
|
-
ref,
|
|
18
|
-
className: clsx__default.default("ds-stack", direction === "row" && "ds-stack--horizontal", className),
|
|
19
|
-
style: {
|
|
20
|
-
alignItems: align,
|
|
21
|
-
justifyContent: justify === "between" ? "space-between" : justify,
|
|
22
|
-
flexWrap: wrap ? "wrap" : void 0,
|
|
23
|
-
...style
|
|
24
|
-
},
|
|
25
|
-
...props
|
|
26
|
-
}
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
Stack.displayName = "Stack";
|
|
31
|
-
|
|
32
|
-
exports.Stack = Stack;
|
|
33
|
-
//# sourceMappingURL=out.js.map
|
|
34
|
-
//# sourceMappingURL=chunk-MQRB634A.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/LayoutPrimitives/Stack.tsx"],"names":[],"mappings":";;;;;AAAA,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AAaX;AAHC,IAAM,QAAQ;AAAA,EACnB,CAAC,EAAE,YAAY,UAAU,OAAO,SAAS,MAAM,WAAW,OAAO,GAAG,MAAM,GAAG,QAAQ;AACnF,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,KAAK,YAAY,cAAc,SAAS,wBAAwB,SAAS;AAAA,QACpF,OAAO;AAAA,UACL,YAAY;AAAA,UACZ,gBAAgB,YAAY,YAAY,kBAAkB;AAAA,UAC1D,UAAU,OAAO,SAAS;AAAA,UAC1B,GAAG;AAAA,QACL;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,MAAM,cAAc","sourcesContent":["import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Box, BoxProps } from './Box';\n\nexport interface StackProps extends BoxProps {\n direction?: 'row' | 'column';\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n wrap?: boolean;\n}\n\nexport const Stack = forwardRef<HTMLElement, StackProps>(\n ({ direction = 'column', align, justify, wrap, className, style, ...props }, ref) => {\n return (\n <Box\n ref={ref}\n className={clsx('ds-stack', direction === 'row' && 'ds-stack--horizontal', className)}\n style={{\n alignItems: align,\n justifyContent: justify === 'between' ? 'space-between' : justify,\n flexWrap: wrap ? 'wrap' : undefined,\n ...style,\n }}\n {...props}\n />\n );\n },\n);\n\nStack.displayName = 'Stack';\n"]}
|
package/dist/chunk-MTI27RDV.js
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { Stack } from './chunk-NN3TUHIH.js';
|
|
2
|
-
import { SectionShell, SectionHeader } from './chunk-KBA2LFBG.js';
|
|
3
|
-
import { Box } from './chunk-HN4PHABT.js';
|
|
4
|
-
import { forwardRef } from 'react';
|
|
5
|
-
import clsx from 'clsx';
|
|
6
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var HeroSection = forwardRef(
|
|
9
|
-
({
|
|
10
|
-
variant = "left",
|
|
11
|
-
title,
|
|
12
|
-
subtitle,
|
|
13
|
-
eyebrow,
|
|
14
|
-
primaryCta,
|
|
15
|
-
secondaryCta,
|
|
16
|
-
media,
|
|
17
|
-
mediaBrowserFrame = false,
|
|
18
|
-
floatingElement,
|
|
19
|
-
floatingPosition = "bottom-left",
|
|
20
|
-
withGrid = false,
|
|
21
|
-
withGlow = false,
|
|
22
|
-
align,
|
|
23
|
-
className,
|
|
24
|
-
children,
|
|
25
|
-
...props
|
|
26
|
-
}, ref) => {
|
|
27
|
-
const isSplit = variant === "split";
|
|
28
|
-
const isCenter = variant === "center";
|
|
29
|
-
const textAlignment = align || (isCenter ? "center" : "left");
|
|
30
|
-
const ContentBlock = /* @__PURE__ */ jsxs("div", { className: clsx("ds-hero__content", `ds-hero__content--${textAlignment}`), children: [
|
|
31
|
-
eyebrow && /* @__PURE__ */ jsx("span", { className: "ds-section-header__eyebrow", style: { marginBottom: "var(--space-2)" }, children: eyebrow }),
|
|
32
|
-
/* @__PURE__ */ jsx("h1", { className: "ds-hero__title", children: title }),
|
|
33
|
-
subtitle && /* @__PURE__ */ jsx("p", { className: "ds-hero__subtitle", children: subtitle }),
|
|
34
|
-
(primaryCta || secondaryCta) && /* @__PURE__ */ jsxs("div", { className: "ds-hero__actions", children: [
|
|
35
|
-
primaryCta,
|
|
36
|
-
secondaryCta
|
|
37
|
-
] }),
|
|
38
|
-
children
|
|
39
|
-
] });
|
|
40
|
-
const MediaBlock = media && /* @__PURE__ */ jsxs("div", { className: "ds-hero__media-wrapper", children: [
|
|
41
|
-
/* @__PURE__ */ jsx("div", { className: clsx("ds-hero__media", mediaBrowserFrame && "ds-hero__media--browser"), children: media }),
|
|
42
|
-
floatingElement && /* @__PURE__ */ jsx("div", { className: clsx("ds-hero__float", `ds-hero__float--${floatingPosition}`), children: floatingElement })
|
|
43
|
-
] });
|
|
44
|
-
return /* @__PURE__ */ jsx(
|
|
45
|
-
SectionShell,
|
|
46
|
-
{
|
|
47
|
-
ref,
|
|
48
|
-
className: clsx(
|
|
49
|
-
"ds-hero",
|
|
50
|
-
`ds-hero--${variant}`,
|
|
51
|
-
withGrid && "ds-hero--bg-grid",
|
|
52
|
-
withGlow && "ds-hero--bg-glow",
|
|
53
|
-
className
|
|
54
|
-
),
|
|
55
|
-
padding: "lg",
|
|
56
|
-
...props,
|
|
57
|
-
children: isSplit ? /* @__PURE__ */ jsxs(
|
|
58
|
-
"div",
|
|
59
|
-
{
|
|
60
|
-
style: {
|
|
61
|
-
display: "grid",
|
|
62
|
-
gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 500px), 1fr))",
|
|
63
|
-
gap: "var(--space-16)",
|
|
64
|
-
alignItems: "center"
|
|
65
|
-
},
|
|
66
|
-
children: [
|
|
67
|
-
/* @__PURE__ */ jsx(Box, { children: ContentBlock }),
|
|
68
|
-
/* @__PURE__ */ jsx(Box, { children: MediaBlock })
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
) : /* @__PURE__ */ jsxs(Stack, { gap: 16, align: isCenter ? "center" : "start", children: [
|
|
72
|
-
ContentBlock,
|
|
73
|
-
MediaBlock && /* @__PURE__ */ jsx(
|
|
74
|
-
Box,
|
|
75
|
-
{
|
|
76
|
-
style: {
|
|
77
|
-
width: "100%",
|
|
78
|
-
display: "flex",
|
|
79
|
-
justifyContent: isCenter ? "center" : "flex-start"
|
|
80
|
-
},
|
|
81
|
-
children: /* @__PURE__ */ jsx("div", { style: { width: "100%", maxWidth: isCenter ? "1200px" : "100%" }, children: MediaBlock })
|
|
82
|
-
}
|
|
83
|
-
)
|
|
84
|
-
] })
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
);
|
|
89
|
-
HeroSection.displayName = "HeroSection";
|
|
90
|
-
var FeatureCard = ({ item }) => /* @__PURE__ */ jsxs("div", { className: "ds-feature-card", children: [
|
|
91
|
-
item.icon && /* @__PURE__ */ jsx("div", { className: "ds-feature-card__icon", children: item.icon }),
|
|
92
|
-
/* @__PURE__ */ jsx("h3", { className: "ds-feature-card__title", children: item.title }),
|
|
93
|
-
/* @__PURE__ */ jsx("div", { className: "ds-feature-card__description", children: item.description }),
|
|
94
|
-
item.cta && /* @__PURE__ */ jsx("div", { className: "ds-feature-card__cta", children: item.cta })
|
|
95
|
-
] });
|
|
96
|
-
var FeatureRow = ({ item }) => /* @__PURE__ */ jsxs("div", { className: "ds-feature-row", children: [
|
|
97
|
-
/* @__PURE__ */ jsxs("div", { className: "ds-feature-row__content", children: [
|
|
98
|
-
item.step && /* @__PURE__ */ jsxs("div", { className: "ds-feature-row__step", children: [
|
|
99
|
-
"STEP ",
|
|
100
|
-
item.step
|
|
101
|
-
] }),
|
|
102
|
-
item.icon && /* @__PURE__ */ jsx("div", { className: "ds-feature-card__icon", children: item.icon }),
|
|
103
|
-
/* @__PURE__ */ jsx("h3", { className: "ds-section-header__title", style: { fontSize: "var(--font-size-2xl)" }, children: item.title }),
|
|
104
|
-
/* @__PURE__ */ jsx("div", { className: "ds-section-header__subtitle", style: { fontSize: "var(--font-size-lg)" }, children: item.description }),
|
|
105
|
-
item.cta && /* @__PURE__ */ jsx("div", { className: "ds-hero__actions", children: item.cta })
|
|
106
|
-
] }),
|
|
107
|
-
/* @__PURE__ */ jsx("div", { className: "ds-feature-row__media", children: item.media || /* @__PURE__ */ jsx("div", { style: { paddingBottom: "56.25%", background: "var(--glass-base-active)" } }) })
|
|
108
|
-
] });
|
|
109
|
-
var FeatureSection = forwardRef(
|
|
110
|
-
({
|
|
111
|
-
variant = "grid",
|
|
112
|
-
columns = 3,
|
|
113
|
-
features,
|
|
114
|
-
title,
|
|
115
|
-
subtitle,
|
|
116
|
-
eyebrow,
|
|
117
|
-
alignHeader = "center",
|
|
118
|
-
className,
|
|
119
|
-
...props
|
|
120
|
-
}, ref) => {
|
|
121
|
-
return /* @__PURE__ */ jsxs(SectionShell, { ref, className: clsx("ds-feature-section", className), ...props, children: [
|
|
122
|
-
/* @__PURE__ */ jsx(SectionHeader, { title, subtitle, eyebrow, align: alignHeader }),
|
|
123
|
-
variant === "grid" ? /* @__PURE__ */ jsx("div", { className: clsx("ds-feature-grid", `ds-feature-grid--${columns}-col`), children: features.map((feature, index) => /* @__PURE__ */ jsx(FeatureCard, { item: feature }, index)) }) : /* @__PURE__ */ jsx("div", { className: "ds-feature-zigzag", children: features.map((feature, index) => /* @__PURE__ */ jsx(FeatureRow, { item: feature }, index)) })
|
|
124
|
-
] });
|
|
125
|
-
}
|
|
126
|
-
);
|
|
127
|
-
FeatureSection.displayName = "FeatureSection";
|
|
128
|
-
var CTASection = forwardRef(
|
|
129
|
-
({
|
|
130
|
-
variant = "center",
|
|
131
|
-
title,
|
|
132
|
-
description,
|
|
133
|
-
primaryCta,
|
|
134
|
-
secondaryCta,
|
|
135
|
-
actions,
|
|
136
|
-
className,
|
|
137
|
-
children,
|
|
138
|
-
...props
|
|
139
|
-
}, ref) => {
|
|
140
|
-
const isBoxed = variant === "boxed";
|
|
141
|
-
const effectiveVariant = isBoxed ? "center" : variant;
|
|
142
|
-
const Content = /* @__PURE__ */ jsxs("div", { className: clsx("ds-cta-section", `ds-cta-section--${effectiveVariant}`), children: [
|
|
143
|
-
effectiveVariant === "split" ? /* @__PURE__ */ jsxs("div", { className: "ds-cta-section--split", children: [
|
|
144
|
-
/* @__PURE__ */ jsxs("div", { className: "ds-cta-content", children: [
|
|
145
|
-
/* @__PURE__ */ jsx("h2", { className: "ds-cta-title", children: title }),
|
|
146
|
-
description && /* @__PURE__ */ jsx("p", { className: "ds-cta-description", children: description })
|
|
147
|
-
] }),
|
|
148
|
-
/* @__PURE__ */ jsx("div", { className: "ds-cta-actions", children: actions || /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
149
|
-
primaryCta,
|
|
150
|
-
secondaryCta
|
|
151
|
-
] }) })
|
|
152
|
-
] }) : /* @__PURE__ */ jsxs("div", { className: "ds-cta-content", children: [
|
|
153
|
-
/* @__PURE__ */ jsx("h2", { className: "ds-cta-title", children: title }),
|
|
154
|
-
description && /* @__PURE__ */ jsx("p", { className: "ds-cta-description", children: description }),
|
|
155
|
-
/* @__PURE__ */ jsx("div", { className: "ds-cta-actions", children: actions || /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
156
|
-
primaryCta,
|
|
157
|
-
secondaryCta
|
|
158
|
-
] }) })
|
|
159
|
-
] }),
|
|
160
|
-
children
|
|
161
|
-
] });
|
|
162
|
-
return /* @__PURE__ */ jsx(SectionShell, { ref, className: clsx(className), ...props, children: isBoxed ? /* @__PURE__ */ jsx("div", { className: "ds-cta-card", children: Content }) : Content });
|
|
163
|
-
}
|
|
164
|
-
);
|
|
165
|
-
CTASection.displayName = "CTASection";
|
|
166
|
-
var StatsSection = forwardRef(
|
|
167
|
-
({ stats, title, subtitle, eyebrow, className, ...props }, ref) => {
|
|
168
|
-
return /* @__PURE__ */ jsxs(SectionShell, { ref, className: clsx("ds-stats-section", className), ...props, children: [
|
|
169
|
-
/* @__PURE__ */ jsx(SectionHeader, { title, subtitle, eyebrow }),
|
|
170
|
-
/* @__PURE__ */ jsx("div", { className: "ds-stats-grid", children: stats.map((stat, idx) => /* @__PURE__ */ jsxs("div", { className: "ds-stat-card", children: [
|
|
171
|
-
/* @__PURE__ */ jsxs("div", { className: "ds-stat-value", children: [
|
|
172
|
-
stat.prefix,
|
|
173
|
-
stat.value,
|
|
174
|
-
/* @__PURE__ */ jsx("span", { className: "ds-stat-suffix", children: stat.suffix })
|
|
175
|
-
] }),
|
|
176
|
-
/* @__PURE__ */ jsx("div", { className: "ds-stat-label", children: stat.label })
|
|
177
|
-
] }, idx)) })
|
|
178
|
-
] });
|
|
179
|
-
}
|
|
180
|
-
);
|
|
181
|
-
StatsSection.displayName = "StatsSection";
|
|
182
|
-
|
|
183
|
-
export { CTASection, FeatureSection, HeroSection, StatsSection };
|
|
184
|
-
//# sourceMappingURL=out.js.map
|
|
185
|
-
//# sourceMappingURL=chunk-MTI27RDV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/HeroSection/HeroSection.tsx","../src/components/FeatureSection/FeatureSection.tsx","../src/components/CTASection/CTASection.tsx","../src/components/StatsSection/StatsSection.tsx"],"names":["forwardRef","clsx","jsx","jsxs"],"mappings":"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","sourcesContent":["import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport { Stack, Box } from '../LayoutPrimitives';\nimport './HeroSection.css';\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface HeroSectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'left' | 'center' | 'split';\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n primaryCta?: React.ReactNode;\n secondaryCta?: React.ReactNode;\n\n /** Main visual (Image, Video, or Component) */\n media?: React.ReactNode;\n /** Adds a browser-like header bar to the media container */\n mediaBrowserFrame?: boolean;\n\n /** Optional floating elements (e.g. SocialProof cards) over the media */\n floatingElement?: React.ReactNode;\n floatingPosition?: 'top-right' | 'bottom-left';\n\n /** Background Visuals */\n withGrid?: boolean;\n withGlow?: boolean;\n\n align?: 'left' | 'center'; // Text alignment overrides variant default\n}\n\n/* ============================================================================\n Component\n ============================================================================ */\n\nexport const HeroSection = forwardRef<HTMLDivElement, HeroSectionProps>(\n (\n {\n variant = 'left',\n title,\n subtitle,\n eyebrow,\n primaryCta,\n secondaryCta,\n media,\n mediaBrowserFrame = false,\n floatingElement,\n floatingPosition = 'bottom-left',\n withGrid = false,\n withGlow = false,\n align,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n // Determine layout based on variant\n const isSplit = variant === 'split';\n const isCenter = variant === 'center';\n\n // Default alignment\n const textAlignment = align || (isCenter ? 'center' : 'left');\n\n const ContentBlock = (\n <div className={clsx('ds-hero__content', `ds-hero__content--${textAlignment}`)}>\n {eyebrow && (\n <span className=\"ds-section-header__eyebrow\" style={{ marginBottom: 'var(--space-2)' }}>\n {eyebrow}\n </span>\n )}\n <h1 className=\"ds-hero__title\">{title}</h1>\n {subtitle && <p className=\"ds-hero__subtitle\">{subtitle}</p>}\n\n {(primaryCta || secondaryCta) && (\n <div className=\"ds-hero__actions\">\n {primaryCta}\n {secondaryCta}\n </div>\n )}\n {children}\n </div>\n );\n\n const MediaBlock = media && (\n <div className=\"ds-hero__media-wrapper\">\n <div className={clsx('ds-hero__media', mediaBrowserFrame && 'ds-hero__media--browser')}>\n {media}\n </div>\n {floatingElement && (\n <div className={clsx('ds-hero__float', `ds-hero__float--${floatingPosition}`)}>\n {floatingElement}\n </div>\n )}\n </div>\n );\n\n return (\n <SectionShell\n ref={ref}\n className={clsx(\n 'ds-hero',\n `ds-hero--${variant}`,\n withGrid && 'ds-hero--bg-grid',\n withGlow && 'ds-hero--bg-glow',\n className,\n )}\n padding=\"lg\"\n {...props}\n >\n {isSplit ? (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 500px), 1fr))',\n gap: 'var(--space-16)',\n alignItems: 'center',\n }}\n >\n <Box>{ContentBlock}</Box>\n <Box>{MediaBlock}</Box>\n </div>\n ) : (\n <Stack gap={16} align={isCenter ? 'center' : 'start'}>\n {ContentBlock}\n {MediaBlock && (\n <Box\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: isCenter ? 'center' : 'flex-start',\n }}\n >\n <div style={{ width: '100%', maxWidth: isCenter ? '1200px' : '100%' }}>\n {MediaBlock}\n </div>\n </Box>\n )}\n </Stack>\n )}\n </SectionShell>\n );\n },\n);\n\nHeroSection.displayName = 'HeroSection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps, SectionHeader } from '../SectionShell/SectionShell';\nimport './FeatureSection.css';\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface FeatureItem {\n title: React.ReactNode;\n description: React.ReactNode;\n icon?: React.ReactNode;\n media?: React.ReactNode; // For ZigZag\n step?: string | number; // For ZigZag steps\n cta?: React.ReactNode;\n}\n\nexport interface FeatureSectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'grid' | 'zigzag';\n columns?: 2 | 3 | 4; // For grid variant\n features: FeatureItem[];\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n alignHeader?: 'left' | 'center' | 'right';\n}\n\n/* ============================================================================\n Components\n ============================================================================ */\n\nconst FeatureCard = ({ item }: { item: FeatureItem }) => (\n <div className=\"ds-feature-card\">\n {item.icon && <div className=\"ds-feature-card__icon\">{item.icon}</div>}\n <h3 className=\"ds-feature-card__title\">{item.title}</h3>\n <div className=\"ds-feature-card__description\">{item.description}</div>\n {item.cta && <div className=\"ds-feature-card__cta\">{item.cta}</div>}\n </div>\n);\n\nconst FeatureRow = ({ item }: { item: FeatureItem }) => (\n <div className=\"ds-feature-row\">\n <div className=\"ds-feature-row__content\">\n {item.step && <div className=\"ds-feature-row__step\">STEP {item.step}</div>}\n {item.icon && <div className=\"ds-feature-card__icon\">{item.icon}</div>}\n <h3 className=\"ds-section-header__title\" style={{ fontSize: 'var(--font-size-2xl)' }}>\n {item.title}\n </h3>\n <div className=\"ds-section-header__subtitle\" style={{ fontSize: 'var(--font-size-lg)' }}>\n {item.description}\n </div>\n {item.cta && <div className=\"ds-hero__actions\">{item.cta}</div>}\n </div>\n <div className=\"ds-feature-row__media\">\n {item.media || (\n <div style={{ paddingBottom: '56.25%', background: 'var(--glass-base-active)' }} />\n )}\n </div>\n </div>\n);\n\nexport const FeatureSection = forwardRef<HTMLDivElement, FeatureSectionProps>(\n (\n {\n variant = 'grid',\n columns = 3,\n features,\n title,\n subtitle,\n eyebrow,\n alignHeader = 'center',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell ref={ref} className={clsx('ds-feature-section', className)} {...props}>\n <SectionHeader title={title} subtitle={subtitle} eyebrow={eyebrow} align={alignHeader} />\n\n {variant === 'grid' ? (\n <div className={clsx('ds-feature-grid', `ds-feature-grid--${columns}-col`)}>\n {features.map((feature, index) => (\n <FeatureCard key={index} item={feature} />\n ))}\n </div>\n ) : (\n <div className=\"ds-feature-zigzag\">\n {features.map((feature, index) => (\n <FeatureRow key={index} item={feature} />\n ))}\n </div>\n )}\n </SectionShell>\n );\n },\n);\nFeatureSection.displayName = 'FeatureSection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport './CTASection.css';\n\nexport interface CTASectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'center' | 'split' | 'boxed';\n title: React.ReactNode;\n description?: React.ReactNode;\n primaryCta?: React.ReactNode;\n secondaryCta?: React.ReactNode;\n actions?: React.ReactNode; // Custom actions slot\n}\n\nexport const CTASection = forwardRef<HTMLDivElement, CTASectionProps>(\n (\n {\n variant = 'center',\n title,\n description,\n primaryCta,\n secondaryCta,\n actions,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n // \"Boxed\" is just centered content inside a card-like container within the section\n const isBoxed = variant === 'boxed';\n const effectiveVariant = isBoxed ? 'center' : variant;\n\n const Content = (\n <div className={clsx('ds-cta-section', `ds-cta-section--${effectiveVariant}`)}>\n {effectiveVariant === 'split' ? (\n <div className=\"ds-cta-section--split\">\n <div className=\"ds-cta-content\">\n <h2 className=\"ds-cta-title\">{title}</h2>\n {description && <p className=\"ds-cta-description\">{description}</p>}\n </div>\n <div className=\"ds-cta-actions\">\n {actions || (\n <>\n {primaryCta}\n {secondaryCta}\n </>\n )}\n </div>\n </div>\n ) : (\n <div className=\"ds-cta-content\">\n <h2 className=\"ds-cta-title\">{title}</h2>\n {description && <p className=\"ds-cta-description\">{description}</p>}\n <div className=\"ds-cta-actions\">\n {actions || (\n <>\n {primaryCta}\n {secondaryCta}\n </>\n )}\n </div>\n </div>\n )}\n {children}\n </div>\n );\n\n return (\n <SectionShell ref={ref} className={clsx(className)} {...props}>\n {isBoxed ? <div className=\"ds-cta-card\">{Content}</div> : Content}\n </SectionShell>\n );\n },\n);\nCTASection.displayName = 'CTASection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps, SectionHeader } from '../SectionShell/SectionShell';\nimport './StatsSection.css';\n\nexport interface StatItem {\n label: string;\n value: string | number;\n suffix?: string;\n prefix?: string;\n}\n\nexport interface StatsSectionProps extends Omit<SectionShellProps, 'title'> {\n stats: StatItem[];\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n}\n\nexport const StatsSection = forwardRef<HTMLDivElement, StatsSectionProps>(\n ({ stats, title, subtitle, eyebrow, className, ...props }, ref) => {\n return (\n <SectionShell ref={ref} className={clsx('ds-stats-section', className)} {...props}>\n <SectionHeader title={title} subtitle={subtitle} eyebrow={eyebrow} />\n\n <div className=\"ds-stats-grid\">\n {stats.map((stat, idx) => (\n <div key={idx} className=\"ds-stat-card\">\n <div className=\"ds-stat-value\">\n {stat.prefix}\n {stat.value}\n <span className=\"ds-stat-suffix\">{stat.suffix}</span>\n </div>\n <div className=\"ds-stat-label\">{stat.label}</div>\n </div>\n ))}\n </div>\n </SectionShell>\n );\n },\n);\nStatsSection.displayName = 'StatsSection';\n"]}
|