@churnkey/react 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/{chunk-42SJA62X.cjs → chunk-4BMB42WI.cjs} +6 -6
  2. package/dist/{chunk-42SJA62X.cjs.map → chunk-4BMB42WI.cjs.map} +1 -1
  3. package/dist/{chunk-LVUDBCQ2.cjs → chunk-BDBZ5OS3.cjs} +4 -3
  4. package/dist/chunk-BDBZ5OS3.cjs.map +1 -0
  5. package/dist/{chunk-YZERGV7F.js → chunk-F4ESJBOS.js} +3 -3
  6. package/dist/{chunk-YZERGV7F.js.map → chunk-F4ESJBOS.js.map} +1 -1
  7. package/dist/{chunk-SQ35G4LA.js → chunk-G57YLYM5.js} +4 -3
  8. package/dist/chunk-G57YLYM5.js.map +1 -0
  9. package/dist/{chunk-UNSSI6KX.js → chunk-QYNW3HF3.js} +35 -5
  10. package/dist/chunk-QYNW3HF3.js.map +1 -0
  11. package/dist/{chunk-2VQNWZWO.cjs → chunk-SNTKIKHU.cjs} +35 -5
  12. package/dist/chunk-SNTKIKHU.cjs.map +1 -0
  13. package/dist/core.cjs +14 -14
  14. package/dist/core.d.cts +18 -4
  15. package/dist/core.d.ts +18 -4
  16. package/dist/core.js +2 -2
  17. package/dist/headless.cjs +3 -3
  18. package/dist/headless.d.cts +1 -1
  19. package/dist/headless.d.ts +1 -1
  20. package/dist/headless.js +2 -2
  21. package/dist/index.cjs +151 -99
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +5 -3
  24. package/dist/index.d.ts +5 -3
  25. package/dist/index.js +57 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/{step-graph-ChlSCUGk.d.cts → step-graph-DKvaV3Dg.d.cts} +17 -2
  28. package/dist/{step-graph-ChlSCUGk.d.ts → step-graph-DKvaV3Dg.d.ts} +17 -2
  29. package/dist/styles.css +45 -8
  30. package/package.json +1 -1
  31. package/dist/chunk-2VQNWZWO.cjs.map +0 -1
  32. package/dist/chunk-LVUDBCQ2.cjs.map +0 -1
  33. package/dist/chunk-SQ35G4LA.js.map +0 -1
  34. package/dist/chunk-UNSSI6KX.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/rich-text.tsx","../src/components/steps/default-confirm.tsx","../src/components/steps/default-feedback.tsx","../src/components/steps/offer/default-contact-offer.tsx","../src/components/steps/offer/default-discount-offer.tsx","../src/components/steps/offer/default-pause-offer.tsx","../src/components/steps/shared.tsx","../src/components/steps/offer/default-plan-change-offer.tsx","../src/components/steps/offer/default-redirect-offer.tsx","../src/components/steps/offer/default-trial-extension-offer.tsx","../src/components/steps/default-offer.tsx","../src/components/steps/default-success.tsx","../src/components/steps/default-survey.tsx","../src/components/structural/default-back-button.tsx","../src/components/structural/default-close-button.tsx","../src/components/structural/default-modal.tsx","../src/components/use-color-scheme.ts","../src/components/cancel-flow.tsx"],"names":["jsx","jsxs","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["// Renders copy that may contain dashboard-authored HTML (offer body, step\n// descriptions) as actual HTML rather than escaped text. Copy comes from a\n// user's Churnkey dashboard, not user input, and\n// merge fields are pre-substituted in the transform layer before the string\n// reaches this component. If we ever need stricter hardening, sanitization\n// (e.g. DOMPurify) should go here, not at every call site.\n\ntype RichTextTag = 'p' | 'div' | 'span'\n\ninterface RichTextProps {\n html: string | undefined | null\n as?: RichTextTag\n className?: string\n}\n\nexport function RichText({ html, as = 'p', className }: RichTextProps) {\n if (!html) return null\n const Tag = as\n return (\n <Tag\n className={className}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: see file-level comment\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n","import { formatPeriodEnd } from '../../core/format'\nimport type { ConfirmStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultConfirm({\n title,\n description,\n subscriptions,\n losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n}: ConfirmStepProps) {\n const hasLosses = Array.isArray(losses) && losses.length > 0\n const periodEnd = formatPeriodEnd(subscriptions)\n return (\n <div className={cn('ck-step ck-step-confirm', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? \"You'll lose access to:\"}</div>\n <ul className=\"ck-loss-list\">\n {losses.map((item) => (\n <li key={item} className={cn('ck-loss-item', classNames?.lossItem)}>\n <span aria-hidden className={cn('ck-loss-bullet', classNames?.lossBullet)}>\n ●\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {periodEnd && (\n <p className={cn('ck-period-end', classNames?.periodEndNotice)}>Your access continues until {periodEnd}.</p>\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-danger', classNames?.confirmButton)}\n onClick={onConfirm}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : confirmLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.goBackButton)} onClick={onGoBack}>\n {goBackLabel}\n </button>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { FeedbackStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultFeedback({\n title,\n description,\n placeholder,\n required,\n minLength,\n value,\n onChange,\n onSubmit,\n classNames,\n}: FeedbackStepProps) {\n const [focused, setFocused] = useState(false)\n const hasMin = minLength > 0\n const isUnderMin = hasMin && value.length > 0 && value.length < minLength\n const isValid = !required || value.length >= minLength\n const placeholderText = placeholder ?? (hasMin ? `At least ${minLength} characters…` : 'Type your thoughts…')\n\n return (\n <div className={cn('ck-step ck-step-feedback', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n className={cn(\n 'ck-feedback-field',\n focused && 'ck-feedback-field--focused',\n isUnderMin && 'ck-feedback-field--invalid',\n )}\n >\n <textarea\n className={cn('ck-textarea', classNames?.textarea)}\n placeholder={placeholderText}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n rows={3}\n />\n {hasMin && (\n <div\n className={cn(\n 'ck-character-count',\n isUnderMin && 'ck-character-count--invalid',\n classNames?.characterCount,\n )}\n >\n {value.length} / {minLength}\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.submitButton)}\n onClick={onSubmit}\n disabled={!isValid}\n >\n Continue\n </button>\n </div>\n )\n}\n","import type { OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\n// Contact offers render no body by default — title and description carry the\n// pitch, the accept button triggers the consumer's handleContact callback\n// (which usually opens the offer's url). Override the slot to add an\n// avatar/SLA/etc. specific to your support team.\nexport function DefaultContactOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultDiscountOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & {\n percentOff?: number\n amountOff?: number\n currency?: string\n durationInMonths?: number\n }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const phrase = discountPhrase(o)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-offer-discount\">\n <div className=\"ck-offer-discount-eyebrow\">Limited-time offer</div>\n <div className=\"ck-offer-discount-phrase\">{phrase}</div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultPauseOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { months: number }\n const max = Math.max(1, o.months)\n const [months, setMonths] = useState<number>(1)\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n const resume = new Date()\n resume.setMonth(resume.getMonth() + months)\n const resumeDate = formatMonthDayLong(resume)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card ck-pause-card', classNames?.card)}>\n <div className=\"ck-pause-eyebrow\">We&apos;ll see you back on</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n <div className={cn('ck-pause-chips', classNames?.pauseSlider)}>\n {Array.from({ length: max }, (_, i) => i + 1).map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => setMonths(m)}\n className={cn('ck-pause-chip', m === months && 'ck-pause-chip--selected')}\n aria-pressed={m === months}\n >\n {m} {m === 1 ? 'month' : 'months'}\n </button>\n ))}\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept({ months })}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n )\n}\n","export function Checkmark({ color = 'currentColor', size = 14 }: { color?: string; size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","import { useState } from 'react'\nimport { formatPriceFromMinor } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps, PlanOption } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\nimport { Checkmark } from '../shared'\n\nexport function DefaultPlanChangeOffer({\n title,\n description,\n subscriptions,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { plans?: PlanOption[] }\n const plans = o.plans ?? []\n // Mark the customer's current plan via their first subscription's first\n // price; switching to that same plan would be a no-op so it gets disabled.\n const currentPlanId = subscriptions[0]?.items[0]?.price.id\n const initialPlanId = plans.find((p) => p.id !== currentPlanId)?.id ?? null\n const [selectedPlanId, setSelectedPlanId] = useState<string | null>(initialPlanId)\n const selectedPlan = plans.find((p) => p.id === selectedPlanId) ?? null\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const ctaLabel = isProcessing\n ? 'Processing...'\n : selectedPlan?.name\n ? `Switch to ${selectedPlan.name}`\n : offer.copy.cta\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-plan-grid\">\n {plans.map((plan) => {\n const interval = plan.duration?.interval ?? 'month'\n const currency = plan.amount.currency ?? 'USD'\n const isSelected = plan.id === selectedPlanId\n const isCurrent = plan.id === currentPlanId\n\n return (\n <button\n type=\"button\"\n key={plan.id}\n onClick={() => setSelectedPlanId(plan.id)}\n disabled={isCurrent}\n className={cn(\n 'ck-plan-card',\n isSelected && 'ck-plan-card--selected',\n isCurrent && 'ck-plan-card--current',\n )}\n aria-pressed={isSelected}\n >\n <div className=\"ck-plan-name\">\n {plan.name ?? plan.id}\n {isCurrent && <span className=\"ck-plan-current-badge\">Current</span>}\n </div>\n {plan.tagline && <div className=\"ck-plan-tagline\">{plan.tagline}</div>}\n\n <div className=\"ck-plan-price-row\">\n <span className=\"ck-plan-amount\">{formatPriceFromMinor(plan.amount.value, currency)}</span>\n <span className=\"ck-plan-period\">/{interval}</span>\n {plan.msrp && <span className=\"ck-plan-msrp\">{plan.msrp}</span>}\n </div>\n\n {plan.features && plan.features.length > 0 && (\n <ul className=\"ck-plan-features\">\n {plan.features.map((feature, i) => (\n <li key={`${plan.id}-feature-${i}`} className=\"ck-plan-feature\">\n <span className=\"ck-plan-feature-check\">\n <Checkmark size={11} />\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )}\n </button>\n )\n })}\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => selectedPlanId && onAccept({ planId: selectedPlanId })}\n disabled={isProcessing || !selectedPlanId}\n >\n {ctaLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultRedirectOffer({ title, description, offer, onDecline, classNames }: OfferStepProps) {\n const url = (offer as OfferDecision & { url: string }).url\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details\">\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className=\"ck-redirect-link\">\n <span>{offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n\nfunction ExternalIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ck-redirect-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n )\n}\n","import { formatMonthDay } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultTrialExtensionOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { days: number }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const end = new Date()\n end.setDate(end.getDate() + o.days)\n const newEnd = formatMonthDay(end)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-trial-block\">\n <div className=\"ck-trial-badge\">\n <div className=\"ck-trial-days\">+{o.days}</div>\n <div className=\"ck-trial-unit\">{o.days === 1 ? 'day' : 'days'}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">New end date</div>\n <div className=\"ck-trial-end-date\">{newEnd}</div>\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { ReactElement } from 'react'\nimport type { OfferStepProps } from '../../core/types'\nimport { DefaultContactOffer } from './offer/default-contact-offer'\nimport { DefaultDiscountOffer } from './offer/default-discount-offer'\nimport { DefaultPauseOffer } from './offer/default-pause-offer'\nimport { DefaultPlanChangeOffer } from './offer/default-plan-change-offer'\nimport { DefaultRedirectOffer } from './offer/default-redirect-offer'\nimport { DefaultTrialExtensionOffer } from './offer/default-trial-extension-offer'\n\n// Routes to the per-type component, which owns its full canvas. Two\n// override seams: replace one type via `components.PauseOffer` (etc.), or\n// take over the whole offer step via the `Offer` slot.\nexport function DefaultOffer(props: OfferStepProps) {\n const { offer, components } = props\n const Component = pickOfferComponent(offer.type, components)\n // Custom offer types are dispatched upstream against `customComponents`,\n // so an unknown type reaching this switcher is bad data.\n if (!Component) return null\n return (\n <Component\n // Remount on offer change so per-type selection state (pause months,\n // plan id) doesn't leak across reason switches.\n key={offer.decisionId ?? offer.type}\n {...props}\n />\n )\n}\n\nfunction pickOfferComponent(\n type: string,\n components: OfferStepProps['components'],\n): ((props: OfferStepProps) => ReactElement) | null {\n switch (type) {\n case 'discount':\n return components?.DiscountOffer ?? DefaultDiscountOffer\n case 'pause':\n return components?.PauseOffer ?? DefaultPauseOffer\n case 'trial_extension':\n return components?.TrialExtensionOffer ?? DefaultTrialExtensionOffer\n case 'plan_change':\n return components?.PlanChangeOffer ?? DefaultPlanChangeOffer\n case 'contact':\n return components?.ContactOffer ?? DefaultContactOffer\n case 'redirect':\n return components?.RedirectOffer ?? DefaultRedirectOffer\n default:\n return null\n }\n}\n","import type { SuccessStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nexport function DefaultSuccess({ title, description, onClose, classNames }: SuccessStepProps) {\n return (\n <div className={cn('ck-step ck-step-success', classNames?.root)}>\n <div className={cn('ck-success-icon', classNames?.icon)}>\n <Checkmark color=\"currentColor\" size={26} />\n </div>\n\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n Done\n </button>\n </div>\n </div>\n )\n}\n","import type { ReasonButtonProps, SurveyStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nfunction DefaultReasonButton({ reason, index, isSelected, onSelect }: ReasonButtonProps) {\n const letter = String.fromCharCode(65 + index)\n\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onSelect(reason.id)}\n className={cn('ck-reason-button', isSelected && 'ck-reason-button--selected')}\n >\n <span aria-hidden className=\"ck-reason-badge\">\n {isSelected ? <Checkmark color=\"#fff\" size={12} /> : letter}\n </span>\n <span className=\"ck-reason-label\">{reason.label}</span>\n </button>\n )\n}\n\nexport function DefaultSurvey({\n title,\n description,\n reasons,\n selectedReason,\n onSelectReason,\n followupResponse,\n onFollowupResponseChange,\n onNext,\n classNames,\n components,\n}: SurveyStepProps) {\n const ReasonButton = components?.ReasonButton ?? DefaultReasonButton\n const selected = reasons.find((r) => r.id === selectedReason)\n const showFollowup = selected?.freeform === true\n\n return (\n <div className={cn('ck-step ck-step-survey', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-reason-list', classNames?.reasonList)} role=\"radiogroup\" aria-label={title}>\n {reasons.map((reason, i) => (\n <ReasonButton\n key={reason.id}\n reason={reason}\n index={i}\n isSelected={selectedReason === reason.id}\n onSelect={onSelectReason}\n />\n ))}\n </div>\n\n {showFollowup && (\n <textarea\n className={cn('ck-reason-followup', classNames?.followupInput)}\n placeholder=\"Tell us more (optional)\"\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label=\"Additional detail\"\n />\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.continueButton)}\n onClick={onNext}\n disabled={!selectedReason}\n >\n Continue\n </button>\n </div>\n )\n}\n\nexport { DefaultReasonButton }\n","import type { BackButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultBackButton({ onBack, className }: BackButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-back-button', className)} onClick={onBack}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 4L6.5 10l6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span>Back</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport type { ModalProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\n// Only traps visible, enabled elements\nfunction trapFocus(container: HTMLElement): () => void {\n const focusableSelector = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled)',\n 'textarea:not(:disabled)',\n 'select:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter(\n (el) => el.offsetParent !== null,\n ) // visible only\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', handleKeyDown)\n return () => container.removeEventListener('keydown', handleKeyDown)\n}\n\nexport function DefaultModal({ open, onClose, children, className, overlayClassName }: ModalProps) {\n const overlayRef = useRef<HTMLDivElement>(null)\n const modalRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n\n // Save focus, set up trap, restore on unmount\n useEffect(() => {\n if (!open || !modalRef.current) return\n\n previousFocusRef.current = document.activeElement as HTMLElement\n modalRef.current.focus()\n\n const cleanup = trapFocus(modalRef.current)\n return () => {\n cleanup()\n previousFocusRef.current?.focus()\n }\n }, [open])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n },\n [onClose],\n )\n\n useEffect(() => {\n if (!open) return\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, handleKeyDown])\n\n if (!open) return null\n\n return (\n <div\n ref={overlayRef}\n className={cn('ck-overlay', overlayClassName)}\n onClick={(e) => {\n if (e.target === overlayRef.current) onClose()\n }}\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"ck-dialog-title\"\n tabIndex={-1}\n className={cn('ck-modal', className)}\n >\n {children}\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\ntype ColorScheme = 'light' | 'dark'\n\nconst query = '(prefers-color-scheme: dark)'\n\nfunction getSystemScheme(): ColorScheme {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light'\n return window.matchMedia(query).matches ? 'dark' : 'light'\n}\n\nexport function useColorScheme(preference?: 'auto' | 'light' | 'dark'): ColorScheme {\n const [system, setSystem] = useState(getSystemScheme)\n\n useEffect(() => {\n if (preference !== 'auto' || typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mql = window.matchMedia(query)\n const onChange = () => setSystem(mql.matches ? 'dark' : 'light')\n mql.addEventListener('change', onChange)\n return () => mql.removeEventListener('change', onChange)\n }, [preference])\n\n if (!preference || preference === 'light') return 'light'\n if (preference === 'dark') return 'dark'\n return system\n}\n","import { type ReactElement, useEffect } from 'react'\nimport type { CancelFlowMachine } from '../core/machine'\nimport type {\n CancelFlowProps,\n ComponentOverrides,\n ConfirmStep,\n CustomComponents,\n CustomOfferProps,\n CustomStepProps,\n FeedbackStep,\n FlowState,\n OfferStep,\n SuccessStep,\n SurveyStep,\n} from '../core/types'\nimport { appearanceToStyle, BUILT_IN_OFFER_TYPES, defaultTitles } from '../core/utils'\nimport { useCancelFlowMachine } from '../headless/use-cancel-flow-machine'\nimport { DefaultConfirm } from './steps/default-confirm'\nimport { DefaultFeedback } from './steps/default-feedback'\nimport { DefaultOffer } from './steps/default-offer'\nimport { DefaultSuccess } from './steps/default-success'\nimport { DefaultSurvey } from './steps/default-survey'\nimport { DefaultBackButton } from './structural/default-back-button'\nimport { DefaultCloseButton } from './structural/default-close-button'\nimport { DefaultModal } from './structural/default-modal'\nimport { useColorScheme } from './use-color-scheme'\n\nexport function CancelFlow(props: CancelFlowProps) {\n const { machine, state, isLoading, loadError, retry } = useCancelFlowMachine(props)\n\n if (isLoading || loadError) {\n return (\n <LoadStatus\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n onClose={props.onClose}\n isLoading={isLoading}\n loadError={loadError}\n onRetry={retry}\n />\n )\n }\n\n return (\n <FlowShell\n machine={machine}\n state={state}\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n customComponents={props.customComponents}\n />\n )\n}\n\nfunction LoadStatus({\n appearance,\n classNames,\n components,\n onClose,\n isLoading,\n loadError,\n onRetry,\n}: {\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n onClose?: CancelFlowProps['onClose']\n isLoading: boolean\n loadError: Error | null\n onRetry: () => void\n}) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const handleClose = onClose ?? (() => {})\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={handleClose} className={classNames?.modal} overlayClassName={classNames?.overlay}>\n <CloseButton onClose={handleClose} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {isLoading && (\n <div className=\"ck-loading\" style={{ padding: '32px', textAlign: 'center' }}>\n <div\n className=\"ck-loading-spinner\"\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--ck-color-border, #e5e7eb)',\n borderTopColor: 'var(--ck-color-primary, #2563eb)',\n borderRadius: '50%',\n animation: 'ck-spin 0.6s linear infinite',\n margin: '0 auto 16px',\n }}\n />\n <p style={{ color: 'var(--ck-color-text-secondary, #6b7280)' }}>Loading your options...</p>\n </div>\n )}\n {loadError && (\n <div className=\"ck-error\" role=\"alert\" style={{ padding: '32px', textAlign: 'center' }}>\n <p className=\"ck-error-message\" style={{ marginBottom: 16 }}>\n We couldn't load your cancellation options. Please try again.\n </p>\n <button\n type=\"button\"\n className=\"ck-retry-button\"\n onClick={onRetry}\n style={{\n padding: '8px 20px',\n fontSize: 14,\n fontWeight: 600,\n background: 'var(--ck-color-primary, #2563eb)',\n color: '#fff',\n border: 'none',\n borderRadius: 'var(--ck-border-radius, 8px)',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </div>\n )}\n </div>\n </Modal>\n </div>\n )\n}\n\ninterface FlowShellProps {\n machine: CancelFlowMachine\n state: FlowState\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n customComponents?: CustomComponents\n}\n\nfunction FlowShell({ machine, state, appearance, classNames, components, customComponents }: FlowShellProps) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const BackButton = components?.BackButton ?? DefaultBackButton\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={machine.close} className={classNames?.modal} overlayClassName={classNames?.overlay}>\n <CloseButton onClose={machine.close} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {machine.canGoBack && <BackButton onBack={machine.back} className={classNames?.backButton} />}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">Something went wrong. Please try again.</p>\n </div>\n )}\n <StepRenderer state={state} machine={machine} components={components} customComponents={customComponents} />\n </div>\n </Modal>\n </div>\n )\n}\n\nfunction StepRenderer({\n state,\n machine,\n components,\n customComponents,\n}: {\n state: FlowState\n machine: CancelFlowMachine\n components?: Partial<ComponentOverrides>\n customComponents?: CustomComponents\n}) {\n const stepConfig = machine.currentStep\n\n switch (state.step) {\n case 'survey': {\n const Survey = components?.Survey ?? DefaultSurvey\n const config = stepConfig as SurveyStep | undefined\n return (\n <Survey\n title={config?.title ?? defaultTitles.survey}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n reasons={machine.reasons}\n selectedReason={state.selectedReason}\n onSelectReason={machine.selectReason}\n followupResponse={state.followupResponse}\n onFollowupResponseChange={machine.setFollowupResponse}\n onNext={machine.next}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'offer': {\n const offer = machine.currentOffer\n if (!offer) return null\n // Custom offer types (e.g. 'change-seats') match against\n // customComponents first; built-ins fall through to DefaultOffer.\n const CustomOffer = customComponents?.[offer.type] as ((props: CustomOfferProps) => ReactElement) | undefined\n if (CustomOffer) {\n return (\n <CustomOffer\n offer={offer}\n customer={state.customer}\n subscriptions={state.subscriptions}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n />\n )\n }\n if (!BUILT_IN_OFFER_TYPES.includes(offer.type)) {\n return <UnregisteredOfferFallback offerType={offer.type} onSkip={machine.decline} />\n }\n const Offer = components?.Offer ?? DefaultOffer\n const config = stepConfig as OfferStep | undefined\n return (\n <Offer\n title={config?.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n offer={offer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'feedback': {\n const Feedback = components?.Feedback ?? DefaultFeedback\n const config = stepConfig as FeedbackStep | undefined\n return (\n <Feedback\n title={config?.title ?? defaultTitles.feedback}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n placeholder={config?.placeholder}\n required={config?.required ?? false}\n minLength={config?.minLength ?? 0}\n value={state.feedback}\n onChange={machine.setFeedback}\n onSubmit={machine.next}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'confirm': {\n const Confirm = components?.Confirm ?? DefaultConfirm\n const config = stepConfig as ConfirmStep | undefined\n return (\n <Confirm\n title={config?.title ?? defaultTitles.confirm}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? 'Cancel subscription'}\n goBackLabel={config?.goBackLabel ?? 'Go back'}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'success': {\n const Success = components?.Success ?? DefaultSuccess\n const config = stepConfig as SuccessStep | undefined\n const isSaved = state.outcome === 'saved'\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n title={\n isSaved ? (config?.savedTitle ?? 'Welcome back!') : (config?.cancelledTitle ?? 'Subscription cancelled')\n }\n description={\n isSaved\n ? (config?.savedDescription ?? 'Your offer has been applied.')\n : (config?.cancelledDescription ?? \"We're sorry to see you go.\")\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n />\n )\n }\n\n default: {\n const CustomStep = customComponents?.[state.step] as ((props: CustomStepProps) => ReactElement) | undefined\n\n if (!CustomStep) {\n return <UnregisteredStepFallback step={state.step} onSkip={machine.next} />\n }\n\n const config = stepConfig as CustomStepProps['step'] | undefined\n\n return (\n <CustomStep\n step={{\n type: state.step,\n title: config?.title,\n description: config?.description,\n data: config?.data,\n }}\n customer={state.customer}\n subscriptions={state.subscriptions}\n onNext={machine.next}\n onBack={machine.back}\n />\n )\n }\n }\n}\n\n// Skip runs in an effect so we don't mutate machine state during render.\nfunction UnregisteredStepFallback({ step, onSkip }: { step: string; onSkip: () => void }) {\n useEffect(() => {\n console.warn(`[churnkey] No component registered for step type \"${step}\". Skipping.`)\n onSkip()\n }, [step, onSkip])\n return null\n}\n\n// Pass machine.decline as onSkip so the auto-advance doesn't record an accept.\nfunction UnregisteredOfferFallback({ offerType, onSkip }: { offerType: string; onSkip: () => void }) {\n useEffect(() => {\n console.warn(`[churnkey] No component registered for offer type \"${offerType}\". Skipping.`)\n onSkip()\n }, [offerType, onSkip])\n return null\n}\n"]}
1
+ {"version":3,"sources":["../src/components/rich-text.tsx","../src/components/steps/default-confirm.tsx","../src/components/steps/default-feedback.tsx","../src/components/steps/offer/default-contact-offer.tsx","../src/components/steps/offer/default-discount-offer.tsx","../src/components/steps/offer/default-pause-offer.tsx","../src/components/steps/shared.tsx","../src/components/steps/offer/default-plan-change-offer.tsx","../src/components/steps/offer/default-rebate-offer.tsx","../src/components/steps/offer/default-redirect-offer.tsx","../src/components/steps/offer/default-trial-extension-offer.tsx","../src/components/steps/default-offer.tsx","../src/components/steps/default-success.tsx","../src/components/steps/default-survey.tsx","../src/components/structural/default-back-button.tsx","../src/components/structural/default-close-button.tsx","../src/components/structural/default-modal.tsx","../src/components/use-color-scheme.ts","../src/components/cancel-flow.tsx"],"names":["jsx","jsxs","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["// Renders copy that may contain dashboard-authored HTML (offer body, step\n// descriptions) as actual HTML rather than escaped text. Copy comes from a\n// user's Churnkey dashboard, not user input, and\n// merge fields are pre-substituted in the transform layer before the string\n// reaches this component. If we ever need stricter hardening, sanitization\n// (e.g. DOMPurify) should go here, not at every call site.\n\ntype RichTextTag = 'p' | 'div' | 'span'\n\ninterface RichTextProps {\n html: string | undefined | null\n as?: RichTextTag\n className?: string\n}\n\nexport function RichText({ html, as = 'p', className }: RichTextProps) {\n if (!html) return null\n const Tag = as\n return (\n <Tag\n className={className}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: see file-level comment\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n","import { formatPeriodEnd } from '../../core/format'\nimport type { ConfirmStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultConfirm({\n title,\n description,\n subscriptions,\n losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n}: ConfirmStepProps) {\n const hasLosses = Array.isArray(losses) && losses.length > 0\n const periodEnd = formatPeriodEnd(subscriptions)\n return (\n <div className={cn('ck-step ck-step-confirm', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? \"You'll lose access to:\"}</div>\n <ul className=\"ck-loss-list\">\n {losses.map((item) => (\n <li key={item} className={cn('ck-loss-item', classNames?.lossItem)}>\n <span aria-hidden className={cn('ck-loss-bullet', classNames?.lossBullet)}>\n ●\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {periodEnd && (\n <p className={cn('ck-period-end', classNames?.periodEndNotice)}>Your access continues until {periodEnd}.</p>\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-danger', classNames?.confirmButton)}\n onClick={onConfirm}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : confirmLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.goBackButton)} onClick={onGoBack}>\n {goBackLabel}\n </button>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { FeedbackStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultFeedback({\n title,\n description,\n placeholder,\n required,\n minLength,\n value,\n onChange,\n onSubmit,\n classNames,\n}: FeedbackStepProps) {\n const [focused, setFocused] = useState(false)\n const hasMin = minLength > 0\n const isUnderMin = hasMin && value.length > 0 && value.length < minLength\n const isValid = !required || value.length >= minLength\n const placeholderText = placeholder ?? (hasMin ? `At least ${minLength} characters…` : 'Type your thoughts…')\n\n return (\n <div className={cn('ck-step ck-step-feedback', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n className={cn(\n 'ck-feedback-field',\n focused && 'ck-feedback-field--focused',\n isUnderMin && 'ck-feedback-field--invalid',\n )}\n >\n <textarea\n className={cn('ck-textarea', classNames?.textarea)}\n placeholder={placeholderText}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n rows={3}\n />\n {hasMin && (\n <div\n className={cn(\n 'ck-character-count',\n isUnderMin && 'ck-character-count--invalid',\n classNames?.characterCount,\n )}\n >\n {value.length} / {minLength}\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.submitButton)}\n onClick={onSubmit}\n disabled={!isValid}\n >\n Continue\n </button>\n </div>\n )\n}\n","import type { OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\n// Contact offers render no body by default — title and description carry the\n// pitch, the accept button triggers the consumer's handleContact callback\n// (which usually opens the offer's url). Override the slot to add an\n// avatar/SLA/etc. specific to your support team.\nexport function DefaultContactOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultDiscountOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & {\n percentOff?: number\n amountOff?: number\n currency?: string\n durationInMonths?: number\n }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const phrase = discountPhrase(o)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-offer-discount\">\n <div className=\"ck-offer-discount-eyebrow\">Limited-time offer</div>\n <div className=\"ck-offer-discount-phrase\">{phrase}</div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultPauseOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { months: number }\n const max = Math.max(1, o.months)\n const [months, setMonths] = useState<number>(1)\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n const resume = new Date()\n resume.setMonth(resume.getMonth() + months)\n const resumeDate = formatMonthDayLong(resume)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card ck-pause-card', classNames?.card)}>\n <div className=\"ck-pause-eyebrow\">We&apos;ll see you back on</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n <div className={cn('ck-pause-chips', classNames?.pauseSlider)}>\n {Array.from({ length: max }, (_, i) => i + 1).map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => setMonths(m)}\n className={cn('ck-pause-chip', m === months && 'ck-pause-chip--selected')}\n aria-pressed={m === months}\n >\n {m} {m === 1 ? 'month' : 'months'}\n </button>\n ))}\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept({ months })}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n )\n}\n","export function Checkmark({ color = 'currentColor', size = 14 }: { color?: string; size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","import { useState } from 'react'\nimport { formatPriceFromMinor } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps, PlanOption } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\nimport { Checkmark } from '../shared'\n\nexport function DefaultPlanChangeOffer({\n title,\n description,\n subscriptions,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { plans?: PlanOption[] }\n const plans = o.plans ?? []\n // Mark the customer's current plan via their first subscription's first\n // price; switching to that same plan would be a no-op so it gets disabled.\n const currentPlanId = subscriptions[0]?.items[0]?.price.id\n const initialPlanId = plans.find((p) => p.id !== currentPlanId)?.id ?? null\n const [selectedPlanId, setSelectedPlanId] = useState<string | null>(initialPlanId)\n const selectedPlan = plans.find((p) => p.id === selectedPlanId) ?? null\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const ctaLabel = isProcessing\n ? 'Processing...'\n : selectedPlan?.name\n ? `Switch to ${selectedPlan.name}`\n : offer.copy.cta\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-plan-grid\">\n {plans.map((plan) => {\n const interval = plan.duration?.interval ?? 'month'\n const currency = plan.amount.currency ?? 'USD'\n const isSelected = plan.id === selectedPlanId\n const isCurrent = plan.id === currentPlanId\n\n return (\n <button\n type=\"button\"\n key={plan.id}\n onClick={() => setSelectedPlanId(plan.id)}\n disabled={isCurrent}\n className={cn(\n 'ck-plan-card',\n isSelected && 'ck-plan-card--selected',\n isCurrent && 'ck-plan-card--current',\n )}\n aria-pressed={isSelected}\n >\n <div className=\"ck-plan-name\">\n {plan.name ?? plan.id}\n {isCurrent && <span className=\"ck-plan-current-badge\">Current</span>}\n </div>\n {plan.tagline && <div className=\"ck-plan-tagline\">{plan.tagline}</div>}\n\n <div className=\"ck-plan-price-row\">\n <span className=\"ck-plan-amount\">{formatPriceFromMinor(plan.amount.value, currency)}</span>\n <span className=\"ck-plan-period\">/{interval}</span>\n {plan.msrp && <span className=\"ck-plan-msrp\">{plan.msrp}</span>}\n </div>\n\n {plan.features && plan.features.length > 0 && (\n <ul className=\"ck-plan-features\">\n {plan.features.map((feature, i) => (\n <li key={`${plan.id}-feature-${i}`} className=\"ck-plan-feature\">\n <span className=\"ck-plan-feature-check\">\n <Checkmark size={11} />\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )}\n </button>\n )\n })}\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => selectedPlanId && onAccept({ planId: selectedPlanId })}\n disabled={isProcessing || !selectedPlanId}\n >\n {ctaLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { formatPriceFromMinor } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\ntype RebateDecision = OfferDecision & {\n amountMinor?: number\n currency?: string\n amountPaidMinor?: number\n netAfterRebateMinor?: number\n}\n\nexport function DefaultRebateOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as RebateDecision\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const currency = o.currency ?? 'usd'\n const amount = o.amountMinor ?? 0\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n {/* Itemized like an invoice: what they already paid this period, the\n rebate we credit (the accented line), and the net after the refund.\n Paid and net are server-resolved in token mode, so each renders\n only when present. */}\n <div className=\"ck-offer-rebate\">\n {o.amountPaidMinor != null && (\n <div className=\"ck-offer-rebate-row\">\n <span>You paid this period</span>\n <span>{formatPriceFromMinor(o.amountPaidMinor, currency)}</span>\n </div>\n )}\n <div className=\"ck-offer-rebate-row ck-offer-rebate-credit\">\n <span>Cancellation rebate</span>\n <span>−{formatPriceFromMinor(amount, currency)}</span>\n </div>\n {o.netAfterRebateMinor != null && (\n <div className=\"ck-offer-rebate-row ck-offer-rebate-total\">\n <span>Your net for this period</span>\n <span>{formatPriceFromMinor(o.netAfterRebateMinor, currency)}</span>\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultRedirectOffer({ title, description, offer, onDecline, classNames }: OfferStepProps) {\n const url = (offer as OfferDecision & { url: string }).url\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details\">\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className=\"ck-redirect-link\">\n <span>{offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n\nfunction ExternalIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ck-redirect-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n )\n}\n","import { formatMonthDay } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultTrialExtensionOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { days: number }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const end = new Date()\n end.setDate(end.getDate() + o.days)\n const newEnd = formatMonthDay(end)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-trial-block\">\n <div className=\"ck-trial-badge\">\n <div className=\"ck-trial-days\">+{o.days}</div>\n <div className=\"ck-trial-unit\">{o.days === 1 ? 'day' : 'days'}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">New end date</div>\n <div className=\"ck-trial-end-date\">{newEnd}</div>\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { ReactElement } from 'react'\nimport type { OfferStepProps } from '../../core/types'\nimport { DefaultContactOffer } from './offer/default-contact-offer'\nimport { DefaultDiscountOffer } from './offer/default-discount-offer'\nimport { DefaultPauseOffer } from './offer/default-pause-offer'\nimport { DefaultPlanChangeOffer } from './offer/default-plan-change-offer'\nimport { DefaultRebateOffer } from './offer/default-rebate-offer'\nimport { DefaultRedirectOffer } from './offer/default-redirect-offer'\nimport { DefaultTrialExtensionOffer } from './offer/default-trial-extension-offer'\n\n// Routes to the per-type component, which owns its full canvas. Two\n// override seams: replace one type via `components.PauseOffer` (etc.), or\n// take over the whole offer step via the `Offer` slot.\nexport function DefaultOffer(props: OfferStepProps) {\n const { offer, components } = props\n const Component = pickOfferComponent(offer.type, components)\n // Custom offer types are dispatched upstream against `customComponents`,\n // so an unknown type reaching this switcher is bad data.\n if (!Component) return null\n return (\n <Component\n // Remount on offer change so per-type selection state (pause months,\n // plan id) doesn't leak across reason switches.\n key={offer.decisionId ?? offer.type}\n {...props}\n />\n )\n}\n\nfunction pickOfferComponent(\n type: string,\n components: OfferStepProps['components'],\n): ((props: OfferStepProps) => ReactElement) | null {\n switch (type) {\n case 'discount':\n return components?.DiscountOffer ?? DefaultDiscountOffer\n case 'pause':\n return components?.PauseOffer ?? DefaultPauseOffer\n case 'trial_extension':\n return components?.TrialExtensionOffer ?? DefaultTrialExtensionOffer\n case 'plan_change':\n return components?.PlanChangeOffer ?? DefaultPlanChangeOffer\n case 'contact':\n return components?.ContactOffer ?? DefaultContactOffer\n case 'redirect':\n return components?.RedirectOffer ?? DefaultRedirectOffer\n case 'rebate':\n return components?.RebateOffer ?? DefaultRebateOffer\n default:\n return null\n }\n}\n","import type { SuccessStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nexport function DefaultSuccess({ title, description, onClose, classNames }: SuccessStepProps) {\n return (\n <div className={cn('ck-step ck-step-success', classNames?.root)}>\n <div className={cn('ck-success-icon', classNames?.icon)}>\n <Checkmark color=\"currentColor\" size={26} />\n </div>\n\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n Done\n </button>\n </div>\n </div>\n )\n}\n","import type { ReasonButtonProps, SurveyStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nfunction DefaultReasonButton({ reason, index, isSelected, onSelect }: ReasonButtonProps) {\n const letter = String.fromCharCode(65 + index)\n\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onSelect(reason.id)}\n className={cn('ck-reason-button', isSelected && 'ck-reason-button--selected')}\n >\n <span aria-hidden className=\"ck-reason-badge\">\n {isSelected ? <Checkmark color=\"#fff\" size={12} /> : letter}\n </span>\n <span className=\"ck-reason-label\">{reason.label}</span>\n </button>\n )\n}\n\nexport function DefaultSurvey({\n title,\n description,\n reasons,\n selectedReason,\n onSelectReason,\n followupResponse,\n onFollowupResponseChange,\n onNext,\n classNames,\n components,\n}: SurveyStepProps) {\n const ReasonButton = components?.ReasonButton ?? DefaultReasonButton\n const selected = reasons.find((r) => r.id === selectedReason)\n const showFollowup = selected?.freeform === true\n\n return (\n <div className={cn('ck-step ck-step-survey', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-reason-list', classNames?.reasonList)} role=\"radiogroup\" aria-label={title}>\n {reasons.map((reason, i) => (\n <ReasonButton\n key={reason.id}\n reason={reason}\n index={i}\n isSelected={selectedReason === reason.id}\n onSelect={onSelectReason}\n />\n ))}\n </div>\n\n {showFollowup && (\n <textarea\n className={cn('ck-reason-followup', classNames?.followupInput)}\n placeholder=\"Tell us more (optional)\"\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label=\"Additional detail\"\n />\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.continueButton)}\n onClick={onNext}\n disabled={!selectedReason}\n >\n Continue\n </button>\n </div>\n )\n}\n\nexport { DefaultReasonButton }\n","import type { BackButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultBackButton({ onBack, className }: BackButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-back-button', className)} onClick={onBack}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 4L6.5 10l6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span>Back</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport type { ModalProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\n// Only traps visible, enabled elements\nfunction trapFocus(container: HTMLElement): () => void {\n const focusableSelector = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled)',\n 'textarea:not(:disabled)',\n 'select:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter(\n (el) => el.offsetParent !== null,\n ) // visible only\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', handleKeyDown)\n return () => container.removeEventListener('keydown', handleKeyDown)\n}\n\nexport function DefaultModal({ open, onClose, children, className, overlayClassName }: ModalProps) {\n const overlayRef = useRef<HTMLDivElement>(null)\n const modalRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n\n // Save focus, set up trap, restore on unmount\n useEffect(() => {\n if (!open || !modalRef.current) return\n\n previousFocusRef.current = document.activeElement as HTMLElement\n modalRef.current.focus()\n\n const cleanup = trapFocus(modalRef.current)\n return () => {\n cleanup()\n previousFocusRef.current?.focus()\n }\n }, [open])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n },\n [onClose],\n )\n\n useEffect(() => {\n if (!open) return\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, handleKeyDown])\n\n if (!open) return null\n\n return (\n <div\n ref={overlayRef}\n className={cn('ck-overlay', overlayClassName)}\n onClick={(e) => {\n if (e.target === overlayRef.current) onClose()\n }}\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"ck-dialog-title\"\n tabIndex={-1}\n className={cn('ck-modal', className)}\n >\n {children}\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\ntype ColorScheme = 'light' | 'dark'\n\nconst query = '(prefers-color-scheme: dark)'\n\nfunction getSystemScheme(): ColorScheme {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light'\n return window.matchMedia(query).matches ? 'dark' : 'light'\n}\n\nexport function useColorScheme(preference?: 'auto' | 'light' | 'dark'): ColorScheme {\n const [system, setSystem] = useState(getSystemScheme)\n\n useEffect(() => {\n if (preference !== 'auto' || typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mql = window.matchMedia(query)\n const onChange = () => setSystem(mql.matches ? 'dark' : 'light')\n mql.addEventListener('change', onChange)\n return () => mql.removeEventListener('change', onChange)\n }, [preference])\n\n if (!preference || preference === 'light') return 'light'\n if (preference === 'dark') return 'dark'\n return system\n}\n","import { type ReactElement, useEffect } from 'react'\nimport type { CancelFlowMachine } from '../core/machine'\nimport type {\n CancelFlowProps,\n ComponentOverrides,\n ConfirmStep,\n CustomComponents,\n CustomOfferProps,\n CustomStepProps,\n FeedbackStep,\n FlowState,\n OfferStep,\n SuccessStep,\n SurveyStep,\n} from '../core/types'\nimport { appearanceToStyle, BUILT_IN_OFFER_TYPES, defaultTitles } from '../core/utils'\nimport { useCancelFlowMachine } from '../headless/use-cancel-flow-machine'\nimport { DefaultConfirm } from './steps/default-confirm'\nimport { DefaultFeedback } from './steps/default-feedback'\nimport { DefaultOffer } from './steps/default-offer'\nimport { DefaultSuccess } from './steps/default-success'\nimport { DefaultSurvey } from './steps/default-survey'\nimport { DefaultBackButton } from './structural/default-back-button'\nimport { DefaultCloseButton } from './structural/default-close-button'\nimport { DefaultModal } from './structural/default-modal'\nimport { useColorScheme } from './use-color-scheme'\n\nexport function CancelFlow(props: CancelFlowProps) {\n const { machine, state, isLoading, loadError, retry } = useCancelFlowMachine(props)\n\n if (isLoading || loadError) {\n return (\n <LoadStatus\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n onClose={props.onClose}\n isLoading={isLoading}\n loadError={loadError}\n onRetry={retry}\n />\n )\n }\n\n return (\n <FlowShell\n machine={machine}\n state={state}\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n customComponents={props.customComponents}\n />\n )\n}\n\nfunction LoadStatus({\n appearance,\n classNames,\n components,\n onClose,\n isLoading,\n loadError,\n onRetry,\n}: {\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n onClose?: CancelFlowProps['onClose']\n isLoading: boolean\n loadError: Error | null\n onRetry: () => void\n}) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const handleClose = onClose ?? (() => {})\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={handleClose} className={classNames?.modal} overlayClassName={classNames?.overlay}>\n <CloseButton onClose={handleClose} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {isLoading && (\n <div className=\"ck-loading\" style={{ padding: '32px', textAlign: 'center' }}>\n <div\n className=\"ck-loading-spinner\"\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--ck-color-border, #e5e7eb)',\n borderTopColor: 'var(--ck-color-primary, #2563eb)',\n borderRadius: '50%',\n animation: 'ck-spin 0.6s linear infinite',\n margin: '0 auto 16px',\n }}\n />\n <p style={{ color: 'var(--ck-color-text-secondary, #6b7280)' }}>Loading your options...</p>\n </div>\n )}\n {loadError && (\n <div className=\"ck-error\" role=\"alert\" style={{ padding: '32px', textAlign: 'center' }}>\n <p className=\"ck-error-message\" style={{ marginBottom: 16 }}>\n We couldn't load your cancellation options. Please try again.\n </p>\n <button\n type=\"button\"\n className=\"ck-retry-button\"\n onClick={onRetry}\n style={{\n padding: '8px 20px',\n fontSize: 14,\n fontWeight: 600,\n background: 'var(--ck-color-primary, #2563eb)',\n color: '#fff',\n border: 'none',\n borderRadius: 'var(--ck-border-radius, 8px)',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </div>\n )}\n </div>\n </Modal>\n </div>\n )\n}\n\ninterface FlowShellProps {\n machine: CancelFlowMachine\n state: FlowState\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n customComponents?: CustomComponents\n}\n\nfunction FlowShell({ machine, state, appearance, classNames, components, customComponents }: FlowShellProps) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const BackButton = components?.BackButton ?? DefaultBackButton\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={machine.close} className={classNames?.modal} overlayClassName={classNames?.overlay}>\n <CloseButton onClose={machine.close} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {machine.canGoBack && <BackButton onBack={machine.back} className={classNames?.backButton} />}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">Something went wrong. Please try again.</p>\n </div>\n )}\n <StepRenderer state={state} machine={machine} components={components} customComponents={customComponents} />\n </div>\n </Modal>\n </div>\n )\n}\n\nfunction StepRenderer({\n state,\n machine,\n components,\n customComponents,\n}: {\n state: FlowState\n machine: CancelFlowMachine\n components?: Partial<ComponentOverrides>\n customComponents?: CustomComponents\n}) {\n const stepConfig = machine.currentStep\n\n switch (state.step) {\n case 'survey': {\n const Survey = components?.Survey ?? DefaultSurvey\n const config = stepConfig as SurveyStep | undefined\n return (\n <Survey\n title={config?.title ?? defaultTitles.survey}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n reasons={machine.reasons}\n selectedReason={state.selectedReason}\n onSelectReason={machine.selectReason}\n followupResponse={state.followupResponse}\n onFollowupResponseChange={machine.setFollowupResponse}\n onNext={machine.next}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'offer': {\n const offer = machine.currentOffer\n if (!offer) return null\n // Custom offer types (e.g. 'change-seats') match against\n // customComponents first; built-ins fall through to DefaultOffer.\n const CustomOffer = customComponents?.[offer.type] as ((props: CustomOfferProps) => ReactElement) | undefined\n if (CustomOffer) {\n return (\n <CustomOffer\n offer={offer}\n customer={state.customer}\n subscriptions={state.subscriptions}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n />\n )\n }\n if (!BUILT_IN_OFFER_TYPES.includes(offer.type)) {\n return <UnregisteredOfferFallback offerType={offer.type} onSkip={machine.decline} />\n }\n const Offer = components?.Offer ?? DefaultOffer\n const config = stepConfig as OfferStep | undefined\n return (\n <Offer\n title={config?.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n offer={offer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'feedback': {\n const Feedback = components?.Feedback ?? DefaultFeedback\n const config = stepConfig as FeedbackStep | undefined\n return (\n <Feedback\n title={config?.title ?? defaultTitles.feedback}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n placeholder={config?.placeholder}\n required={config?.required ?? false}\n minLength={config?.minLength ?? 0}\n value={state.feedback}\n onChange={machine.setFeedback}\n onSubmit={machine.next}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'confirm': {\n const Confirm = components?.Confirm ?? DefaultConfirm\n const config = stepConfig as ConfirmStep | undefined\n return (\n <Confirm\n title={config?.title ?? defaultTitles.confirm}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? 'Cancel subscription'}\n goBackLabel={config?.goBackLabel ?? 'Go back'}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'success': {\n const Success = components?.Success ?? DefaultSuccess\n const config = stepConfig as SuccessStep | undefined\n const isSaved = state.outcome === 'saved'\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n title={\n isSaved ? (config?.savedTitle ?? 'Welcome back!') : (config?.cancelledTitle ?? 'Subscription cancelled')\n }\n description={\n isSaved\n ? (config?.savedDescription ?? 'Your offer has been applied.')\n : (config?.cancelledDescription ?? \"We're sorry to see you go.\")\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n />\n )\n }\n\n default: {\n const CustomStep = customComponents?.[state.step] as ((props: CustomStepProps) => ReactElement) | undefined\n\n if (!CustomStep) {\n return <UnregisteredStepFallback step={state.step} onSkip={machine.next} />\n }\n\n const config = stepConfig as CustomStepProps['step'] | undefined\n\n return (\n <CustomStep\n step={{\n type: state.step,\n title: config?.title,\n description: config?.description,\n data: config?.data,\n }}\n customer={state.customer}\n subscriptions={state.subscriptions}\n onNext={machine.next}\n onBack={machine.back}\n />\n )\n }\n }\n}\n\n// Skip runs in an effect so we don't mutate machine state during render.\nfunction UnregisteredStepFallback({ step, onSkip }: { step: string; onSkip: () => void }) {\n useEffect(() => {\n console.warn(`[churnkey] No component registered for step type \"${step}\". Skipping.`)\n onSkip()\n }, [step, onSkip])\n return null\n}\n\n// Pass machine.decline as onSkip so the auto-advance doesn't record an accept.\nfunction UnregisteredOfferFallback({ offerType, onSkip }: { offerType: string; onSkip: () => void }) {\n useEffect(() => {\n console.warn(`[churnkey] No component registered for offer type \"${offerType}\". Skipping.`)\n onSkip()\n }, [offerType, onSkip])\n return null\n}\n"]}
@@ -162,11 +162,23 @@ interface RedirectOffer {
162
162
  url: string;
163
163
  label: string;
164
164
  }
165
+ interface RebateOffer {
166
+ type: 'rebate';
167
+ /** Cash refunded to the card, smallest currency unit. */
168
+ amountMinor: number;
169
+ currency: string;
170
+ /** Gross paid on the target invoice. Server-resolved in token mode. */
171
+ amountPaidMinor?: number;
172
+ /** amountPaidMinor − amountMinor. Server-resolved in token mode. */
173
+ netAfterRebateMinor?: number;
174
+ paymentMethodBrand?: string;
175
+ paymentMethodLast4?: string;
176
+ }
165
177
  interface CustomOfferConfig {
166
178
  type: string;
167
179
  data?: Record<string, unknown>;
168
180
  }
169
- type BuiltInOfferConfig = DiscountOffer | PauseOffer | PlanChangeOffer | TrialExtensionOffer | ContactOffer | RedirectOffer;
181
+ type BuiltInOfferConfig = DiscountOffer | PauseOffer | PlanChangeOffer | TrialExtensionOffer | ContactOffer | RedirectOffer | RebateOffer;
170
182
  type OfferConfig = BuiltInOfferConfig | CustomOfferConfig;
171
183
  type OfferDecision = OfferConfig & {
172
184
  copy: OfferCopy;
@@ -411,6 +423,7 @@ interface ComponentOverrides {
411
423
  TrialExtensionOffer?: (props: OfferStepProps) => ReactElement;
412
424
  ContactOffer?: (props: OfferStepProps) => ReactElement;
413
425
  RedirectOffer?: (props: OfferStepProps) => ReactElement;
426
+ RebateOffer?: (props: OfferStepProps) => ReactElement;
414
427
  }
415
428
  type CustomComponents = Record<string, ComponentType<CustomStepProps> | ComponentType<CustomOfferProps>>;
416
429
  interface ModalProps {
@@ -555,12 +568,14 @@ interface FlowCallbacks {
555
568
  handlePause?: OfferCallback;
556
569
  handlePlanChange?: OfferCallback;
557
570
  handleTrialExtension?: OfferCallback;
571
+ handleRebate?: OfferCallback;
558
572
  handleCancel?: CancelCallback;
559
573
  onAccept?: OfferCallback;
560
574
  onDiscount?: OfferCallback;
561
575
  onPause?: OfferCallback;
562
576
  onPlanChange?: OfferCallback;
563
577
  onTrialExtension?: OfferCallback;
578
+ onRebate?: OfferCallback;
564
579
  onCancel?: CancelCallback;
565
580
  onClose?: () => void;
566
581
  onStepChange?: (step: string, prevStep: string) => void;
@@ -606,4 +621,4 @@ interface ResolvedStep {
606
621
  classNames?: unknown;
607
622
  }
608
623
 
609
- export type { SurveyStep as $, AcceptedOffer as A, BackButtonProps as B, CancelFlowProps as C, DirectAddress as D, FlowState as E, FeedbackStepProps as F, OfferClassNames as G, OfferConfig as H, OfferCopy as I, OfferDecision as J, OfferStep as K, PlanChangeOffer as L, ModalProps as M, PlanOption as N, OfferStepProps as O, PauseOffer as P, ReasonConfig as Q, ReasonButtonProps as R, SuccessStepProps as S, RedirectOffer as T, ResolvedStep as U, Step as V, StructuralClassNames as W, SubscriptionStatus as X, SuccessClassNames as Y, SuccessStep as Z, SurveyClassNames as _, ConfirmStepProps as a, TrialExtensionOffer as a0, SurveyStepProps as b, CloseButtonProps as c, Appearance as d, AppearanceVariables as e, BuiltInOfferConfig as f, BuiltInStep as g, BuiltInStepType as h, ComponentOverrides as i, ConfirmClassNames as j, ConfirmStep as k, ContactOffer as l, CustomComponents as m, CustomOfferConfig as n, CustomOfferProps as o, CustomStepConfig as p, CustomStepProps as q, DirectCoupon as r, DirectCustomer as s, DirectPrice as t, DirectSubscription as u, DirectSubscriptionItem as v, DiscountOffer as w, FeedbackClassNames as x, FeedbackStep as y, FlowConfig as z };
624
+ export type { SurveyClassNames as $, AcceptedOffer as A, BackButtonProps as B, CancelFlowProps as C, DirectAddress as D, FlowState as E, FeedbackStepProps as F, OfferClassNames as G, OfferConfig as H, OfferCopy as I, OfferDecision as J, OfferStep as K, PlanChangeOffer as L, ModalProps as M, PlanOption as N, OfferStepProps as O, PauseOffer as P, ReasonConfig as Q, ReasonButtonProps as R, SuccessStepProps as S, RebateOffer as T, RedirectOffer as U, ResolvedStep as V, Step as W, StructuralClassNames as X, SubscriptionStatus as Y, SuccessClassNames as Z, SuccessStep as _, ConfirmStepProps as a, SurveyStep as a0, TrialExtensionOffer as a1, SurveyStepProps as b, CloseButtonProps as c, Appearance as d, AppearanceVariables as e, BuiltInOfferConfig as f, BuiltInStep as g, BuiltInStepType as h, ComponentOverrides as i, ConfirmClassNames as j, ConfirmStep as k, ContactOffer as l, CustomComponents as m, CustomOfferConfig as n, CustomOfferProps as o, CustomStepConfig as p, CustomStepProps as q, DirectCoupon as r, DirectCustomer as s, DirectPrice as t, DirectSubscription as u, DirectSubscriptionItem as v, DiscountOffer as w, FeedbackClassNames as x, FeedbackStep as y, FlowConfig as z };
@@ -162,11 +162,23 @@ interface RedirectOffer {
162
162
  url: string;
163
163
  label: string;
164
164
  }
165
+ interface RebateOffer {
166
+ type: 'rebate';
167
+ /** Cash refunded to the card, smallest currency unit. */
168
+ amountMinor: number;
169
+ currency: string;
170
+ /** Gross paid on the target invoice. Server-resolved in token mode. */
171
+ amountPaidMinor?: number;
172
+ /** amountPaidMinor − amountMinor. Server-resolved in token mode. */
173
+ netAfterRebateMinor?: number;
174
+ paymentMethodBrand?: string;
175
+ paymentMethodLast4?: string;
176
+ }
165
177
  interface CustomOfferConfig {
166
178
  type: string;
167
179
  data?: Record<string, unknown>;
168
180
  }
169
- type BuiltInOfferConfig = DiscountOffer | PauseOffer | PlanChangeOffer | TrialExtensionOffer | ContactOffer | RedirectOffer;
181
+ type BuiltInOfferConfig = DiscountOffer | PauseOffer | PlanChangeOffer | TrialExtensionOffer | ContactOffer | RedirectOffer | RebateOffer;
170
182
  type OfferConfig = BuiltInOfferConfig | CustomOfferConfig;
171
183
  type OfferDecision = OfferConfig & {
172
184
  copy: OfferCopy;
@@ -411,6 +423,7 @@ interface ComponentOverrides {
411
423
  TrialExtensionOffer?: (props: OfferStepProps) => ReactElement;
412
424
  ContactOffer?: (props: OfferStepProps) => ReactElement;
413
425
  RedirectOffer?: (props: OfferStepProps) => ReactElement;
426
+ RebateOffer?: (props: OfferStepProps) => ReactElement;
414
427
  }
415
428
  type CustomComponents = Record<string, ComponentType<CustomStepProps> | ComponentType<CustomOfferProps>>;
416
429
  interface ModalProps {
@@ -555,12 +568,14 @@ interface FlowCallbacks {
555
568
  handlePause?: OfferCallback;
556
569
  handlePlanChange?: OfferCallback;
557
570
  handleTrialExtension?: OfferCallback;
571
+ handleRebate?: OfferCallback;
558
572
  handleCancel?: CancelCallback;
559
573
  onAccept?: OfferCallback;
560
574
  onDiscount?: OfferCallback;
561
575
  onPause?: OfferCallback;
562
576
  onPlanChange?: OfferCallback;
563
577
  onTrialExtension?: OfferCallback;
578
+ onRebate?: OfferCallback;
564
579
  onCancel?: CancelCallback;
565
580
  onClose?: () => void;
566
581
  onStepChange?: (step: string, prevStep: string) => void;
@@ -606,4 +621,4 @@ interface ResolvedStep {
606
621
  classNames?: unknown;
607
622
  }
608
623
 
609
- export type { SurveyStep as $, AcceptedOffer as A, BackButtonProps as B, CancelFlowProps as C, DirectAddress as D, FlowState as E, FeedbackStepProps as F, OfferClassNames as G, OfferConfig as H, OfferCopy as I, OfferDecision as J, OfferStep as K, PlanChangeOffer as L, ModalProps as M, PlanOption as N, OfferStepProps as O, PauseOffer as P, ReasonConfig as Q, ReasonButtonProps as R, SuccessStepProps as S, RedirectOffer as T, ResolvedStep as U, Step as V, StructuralClassNames as W, SubscriptionStatus as X, SuccessClassNames as Y, SuccessStep as Z, SurveyClassNames as _, ConfirmStepProps as a, TrialExtensionOffer as a0, SurveyStepProps as b, CloseButtonProps as c, Appearance as d, AppearanceVariables as e, BuiltInOfferConfig as f, BuiltInStep as g, BuiltInStepType as h, ComponentOverrides as i, ConfirmClassNames as j, ConfirmStep as k, ContactOffer as l, CustomComponents as m, CustomOfferConfig as n, CustomOfferProps as o, CustomStepConfig as p, CustomStepProps as q, DirectCoupon as r, DirectCustomer as s, DirectPrice as t, DirectSubscription as u, DirectSubscriptionItem as v, DiscountOffer as w, FeedbackClassNames as x, FeedbackStep as y, FlowConfig as z };
624
+ export type { SurveyClassNames as $, AcceptedOffer as A, BackButtonProps as B, CancelFlowProps as C, DirectAddress as D, FlowState as E, FeedbackStepProps as F, OfferClassNames as G, OfferConfig as H, OfferCopy as I, OfferDecision as J, OfferStep as K, PlanChangeOffer as L, ModalProps as M, PlanOption as N, OfferStepProps as O, PauseOffer as P, ReasonConfig as Q, ReasonButtonProps as R, SuccessStepProps as S, RebateOffer as T, RedirectOffer as U, ResolvedStep as V, Step as W, StructuralClassNames as X, SubscriptionStatus as Y, SuccessClassNames as Z, SuccessStep as _, ConfirmStepProps as a, SurveyStep as a0, TrialExtensionOffer as a1, SurveyStepProps as b, CloseButtonProps as c, Appearance as d, AppearanceVariables as e, BuiltInOfferConfig as f, BuiltInStep as g, BuiltInStepType as h, ComponentOverrides as i, ConfirmClassNames as j, ConfirmStep as k, ContactOffer as l, CustomComponents as m, CustomOfferConfig as n, CustomOfferProps as o, CustomStepConfig as p, CustomStepProps as q, DirectCoupon as r, DirectCustomer as s, DirectPrice as t, DirectSubscription as u, DirectSubscriptionItem as v, DiscountOffer as w, FeedbackClassNames as x, FeedbackStep as y, FlowConfig as z };
package/dist/styles.css CHANGED
@@ -431,10 +431,17 @@
431
431
  margin-bottom: 20px;
432
432
  }
433
433
 
434
- /* Discount: centered phrase in a soft tinted panel. */
435
- .ck-cancel-flow .ck-offer-discount {
436
- background: var(--ck-color-primary-soft);
434
+ /* Offer panels are soft callouts (colorSurfaceMuted), not selected-state
435
+ highlights (colorPrimarySoft). Shared so the offer types stay consistent. */
436
+ .ck-cancel-flow .ck-offer-discount,
437
+ .ck-cancel-flow .ck-pause-card,
438
+ .ck-cancel-flow .ck-trial-block {
439
+ background: var(--ck-color-surface-muted);
437
440
  border-radius: var(--ck-radius-lg);
441
+ }
442
+
443
+ /* Discount: centered phrase. */
444
+ .ck-cancel-flow .ck-offer-discount {
438
445
  padding: 24px 20px;
439
446
  text-align: center;
440
447
  }
@@ -457,11 +464,43 @@
457
464
  color: var(--ck-color-text);
458
465
  }
459
466
 
467
+ /* Rebate: an itemized invoice for the period — the charge, the rebate we
468
+ credit (accented), and what's still due. Lines sit on the surface rather
469
+ than in a filled panel. */
470
+ .ck-cancel-flow .ck-offer-rebate {
471
+ margin: 4px 0 26px;
472
+ font-variant-numeric: tabular-nums;
473
+ }
474
+
475
+ .ck-cancel-flow .ck-offer-rebate-row {
476
+ display: flex;
477
+ justify-content: space-between;
478
+ align-items: baseline;
479
+ gap: 12px;
480
+ padding: 7px 0;
481
+ font-size: 13px;
482
+ color: var(--ck-color-text-muted);
483
+ }
484
+
485
+ /* The rebate line — the figure we want the eye to land on. */
486
+ .ck-cancel-flow .ck-offer-rebate-credit {
487
+ font-size: 14px;
488
+ font-weight: 600;
489
+ color: var(--ck-color-primary);
490
+ }
491
+
492
+ .ck-cancel-flow .ck-offer-rebate-total {
493
+ margin-top: 6px;
494
+ padding-top: 14px;
495
+ border-top: 1px solid var(--ck-color-border);
496
+ font-size: 15px;
497
+ font-weight: 600;
498
+ color: var(--ck-color-text);
499
+ }
500
+
460
501
  /* Pause: resume date is the typographic anchor, month chips below. */
461
502
  .ck-cancel-flow .ck-pause-card {
462
503
  padding: 32px 24px 22px;
463
- background: var(--ck-color-surface-muted);
464
- border-radius: var(--ck-radius-lg);
465
504
  text-align: center;
466
505
  margin: 8px 0 20px;
467
506
  }
@@ -515,14 +554,12 @@
515
554
  border-color: var(--ck-color-primary);
516
555
  }
517
556
 
518
- /* Trial extension: day count badge + new end date in accent-soft container. */
557
+ /* Trial extension: day count badge + new end date. */
519
558
  .ck-cancel-flow .ck-trial-block {
520
559
  display: flex;
521
560
  align-items: center;
522
561
  gap: 16px;
523
562
  padding: 20px;
524
- background: var(--ck-color-primary-soft);
525
- border-radius: var(--ck-radius-lg);
526
563
  }
527
564
 
528
565
  .ck-cancel-flow .ck-trial-badge {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@churnkey/react",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Production-ready cancel flow for React. Drop-in component, headless hook, or full customization. Works standalone or with Churnkey for AI-powered retention.",
5
5
  "license": "MIT",
6
6
  "repository": {