@churnkey/react 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -12,7 +12,7 @@ function RichText({ html, as = "p", className }) {
12
12
  return /* @__PURE__ */ jsxRuntime.jsx(
13
13
  Tag,
14
14
  {
15
- className,
15
+ className: chunkER6YITYC_cjs.cn("ck-rich-text", className),
16
16
  dangerouslySetInnerHTML: { __html: html }
17
17
  }
18
18
  );
@@ -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-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","defaultMessages","cn","jsxs","useState","formatMessage","discountPhrase","formatMonthDayLong","formatPriceFromMinor","formatMonthDay","useRef","useEffect","useCallback","useCancelFlowMachine","appearanceToStyle","BUILT_IN_OFFER_TYPES","selectTiming","formatShortDate","formatPeriodEnd"],"mappings":"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","file":"index.cjs","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 { defaultMessages } from '../../core/messages'\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 losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n periodEndNotice,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n messages,\n}: ConfirmStepProps) {\n const m = messages ?? defaultMessages\n const hasLosses = Array.isArray(losses) && losses.length > 0\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? m.confirm.lossesLabel}</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 {periodEndNotice && <p className={cn('ck-period-end', classNames?.periodEndNotice)}>{periodEndNotice}</p>}\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 ? m.common.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 { defaultMessages, formatMessage } from '../../core/messages'\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 messages,\n}: FeedbackStepProps) {\n const m = messages ?? defaultMessages\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 =\n placeholder ?? (hasMin ? formatMessage(m.feedback.placeholderWithMin, { minLength }) : m.feedback.placeholder)\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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 {m.common.continue}\n </button>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.processing : msg.offer.acceptCta.contact || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.limitedTimeEyebrow}</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 ? msg.common.processing : msg.offer.acceptCta.discount || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.pauseEyebrow}</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n {max > 1 && (\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 ? msg.common.month : msg.common.months}\n </button>\n ))}\n </div>\n )}\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 ? msg.common.processing : msg.offer.acceptCta.pause || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 ? msg.common.processing\n : selectedPlan?.name\n ? formatMessage(msg.offer.switchToCta, { planName: selectedPlan.name })\n : msg.offer.acceptCta.plan_change || 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 as=\"div\" 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\">{msg.offer.currentPlanBadge}</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 {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { formatPriceFromMinor } from '../../../core/format'\nimport { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 // refund = paid - net; tax = refund - rebate. The server's net already\n // accounts for tax refunded on the rebate, so no tax means refund == rebate.\n const refund =\n o.amountPaidMinor != null && o.netAfterRebateMinor != null ? o.amountPaidMinor - o.netAfterRebateMinor : amount\n const taxRefunded = refund - amount\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 as=\"div\" html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n {/* paid / money back / net, like an invoice. Paid and net only exist in token mode. */}\n <div className=\"ck-offer-rebate\">\n {o.amountPaidMinor != null && (\n <div className=\"ck-offer-rebate-row\">\n <span>{msg.offer.rebate.paidLabel}</span>\n <span>{formatPriceFromMinor(o.amountPaidMinor, currency)}</span>\n </div>\n )}\n <div className=\"ck-offer-rebate-row ck-offer-rebate-credit\">\n <span>\n {msg.offer.rebate.moneyBackLabel}\n {taxRefunded > 0 && (\n <span className=\"ck-offer-rebate-tax\">\n {' '}\n {formatMessage(msg.offer.rebate.inclTax, { amount: formatPriceFromMinor(taxRefunded, currency) })}\n </span>\n )}\n </span>\n <span>−{formatPriceFromMinor(refund, currency)}</span>\n </div>\n {o.netAfterRebateMinor != null && (\n <div className=\"ck-offer-rebate-row ck-offer-rebate-total\">\n <span>{msg.offer.rebate.netLabel}</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 ? msg.common.processing : msg.offer.acceptCta.rebate || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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, messages }: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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>{msg.offer.acceptCta.redirect || offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.day : msg.common.days}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">{msg.offer.newEndDateLabel}</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 ? msg.common.processing : msg.offer.acceptCta.trial_extension || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../core/messages'\nimport 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, messages }: SuccessStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n {m.common.done}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../core/messages'\nimport 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 messages,\n}: SurveyStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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={m.survey.followupPlaceholder}\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label={m.survey.followupAriaLabel}\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 {m.common.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, label }: 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>{label ?? 'Back'}</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className, label }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label={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 { formatPeriodEnd, formatShortDate } from '../core/format'\nimport type { CancelFlowMachine } from '../core/machine'\nimport { type CancelFlowMessages, formatMessage, type SavedOfferCopy, selectTiming } from '../core/messages'\nimport type {\n AcceptedOffer,\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 } 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 messages={machine.messages}\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 messages,\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 messages: CancelFlowMessages\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} label={messages.common.close} />\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)' }}>{messages.common.loading}</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 {messages.common.loadError}\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 {messages.common.tryAgain}\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 const messages = machine.messages\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} label={messages.common.close} />\n <div className=\"ck-content\">\n {machine.canGoBack && (\n <BackButton onBack={machine.back} className={classNames?.backButton} label={messages.common.back} />\n )}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">{messages.common.error}</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 const messages = machine.messages\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 ?? messages.survey.title}\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 messages={messages}\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 messages={messages}\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 ?? messages.feedback.title}\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 messages={messages}\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 ?? messages.confirm.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? selectTiming(messages.confirm.cta, state.cancelAtPeriodEnd)}\n goBackLabel={config?.goBackLabel ?? messages.confirm.goBack}\n periodEndNotice={resolvePeriodEndNotice(state, messages)}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n messages={messages}\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 const perOffer = isSaved ? savedOfferCopy(messages, state.acceptedOffer) : undefined\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n acceptedOffer={state.acceptedOffer ?? undefined}\n title={\n isSaved\n ? (config?.savedTitle ?? perOffer?.title ?? messages.success.saved.title)\n : (config?.cancelledTitle ?? selectTiming(messages.success.cancelled.title, state.cancelAtPeriodEnd))\n }\n description={\n isSaved\n ? (config?.savedDescription ??\n pauseResumeDescription(messages, state.acceptedOffer) ??\n perOffer?.description ??\n messages.success.saved.description)\n : (config?.cancelledDescription ??\n selectTiming(messages.success.cancelled.description, state.cancelAtPeriodEnd))\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n messages={messages}\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// Offer types with their own success copy. Others (contact, redirect,\n// custom types) fall back to the generic saved copy.\nconst SAVED_OFFER_COPY_TYPES = ['discount', 'pause', 'trial_extension', 'plan_change', 'rebate'] as const\n\nfunction savedOfferCopy(messages: CancelFlowMessages, offer: AcceptedOffer | null): SavedOfferCopy | undefined {\n if (!offer) return undefined\n if (!(SAVED_OFFER_COPY_TYPES as readonly string[]).includes(offer.type)) return undefined\n return messages.success.saved[offer.type as (typeof SAVED_OFFER_COPY_TYPES)[number]]\n}\n\n// The built-in pause UI always passes the selected duration on accept;\n// without it there's no resume date to promise, so the plain description\n// renders instead.\nfunction pauseResumeDescription(messages: CancelFlowMessages, offer: AcceptedOffer | null): string | undefined {\n if (offer?.type !== 'pause') return undefined\n const months = offer.result?.months\n if (typeof months !== 'number' || months < 1) return undefined\n const resume = new Date()\n if ((offer as { interval?: 'month' | 'week' }).interval === 'week') {\n resume.setDate(resume.getDate() + months * 7)\n } else {\n resume.setMonth(resume.getMonth() + months)\n }\n return formatMessage(messages.success.saved.pause.resumeDescription, { resumeDate: formatShortDate(resume) })\n}\n\n// The notice makes a factual claim about billing behavior, so it requires the\n// timing to be KNOWN to be period-end — server-resolved in token mode, or the\n// developer's explicit cancelAtPeriodEnd declaration in local mode. `null`\n// (undeclared local mode) stays silent: an earlier hardcoded version of this\n// notice was removed precisely because it could contradict the merchant's\n// actual setting. Also empty when the period end can't be determined or the\n// resolved message is blank.\nfunction resolvePeriodEndNotice(state: FlowState, messages: CancelFlowMessages): string | undefined {\n if (state.cancelAtPeriodEnd !== true) return undefined\n const template = selectTiming(messages.confirm.periodEndNotice, state.cancelAtPeriodEnd)\n if (!template) return undefined\n const periodEnd = formatPeriodEnd(state.subscriptions)\n if (!periodEnd) return undefined\n return formatMessage(template, { periodEnd })\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","cn","defaultMessages","jsxs","useState","formatMessage","discountPhrase","formatMonthDayLong","formatPriceFromMinor","formatMonthDay","useRef","useEffect","useCallback","useCancelFlowMachine","appearanceToStyle","BUILT_IN_OFFER_TYPES","selectTiming","formatShortDate","formatPeriodEnd"],"mappings":"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","file":"index.cjs","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\nimport { cn } from '../core/utils'\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 // The SDK's scoped reset intentionally neutralizes bare HTML elements\n // so host-app styles cannot leak into the flow. This class opts authored\n // content back into the semantic prose rules in cancel-flow.css.\n className={cn('ck-rich-text', className)}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: see file-level comment\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n","import { defaultMessages } from '../../core/messages'\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 losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n periodEndNotice,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n messages,\n}: ConfirmStepProps) {\n const m = messages ?? defaultMessages\n const hasLosses = Array.isArray(losses) && losses.length > 0\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? m.confirm.lossesLabel}</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 {periodEndNotice && <p className={cn('ck-period-end', classNames?.periodEndNotice)}>{periodEndNotice}</p>}\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 ? m.common.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 { defaultMessages, formatMessage } from '../../core/messages'\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 messages,\n}: FeedbackStepProps) {\n const m = messages ?? defaultMessages\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 =\n placeholder ?? (hasMin ? formatMessage(m.feedback.placeholderWithMin, { minLength }) : m.feedback.placeholder)\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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 {m.common.continue}\n </button>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.processing : msg.offer.acceptCta.contact || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.limitedTimeEyebrow}</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 ? msg.common.processing : msg.offer.acceptCta.discount || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.pauseEyebrow}</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n {max > 1 && (\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 ? msg.common.month : msg.common.months}\n </button>\n ))}\n </div>\n )}\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 ? msg.common.processing : msg.offer.acceptCta.pause || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 ? msg.common.processing\n : selectedPlan?.name\n ? formatMessage(msg.offer.switchToCta, { planName: selectedPlan.name })\n : msg.offer.acceptCta.plan_change || 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 as=\"div\" 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\">{msg.offer.currentPlanBadge}</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 {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { formatPriceFromMinor } from '../../../core/format'\nimport { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 // refund = paid - net; tax = refund - rebate. The server's net already\n // accounts for tax refunded on the rebate, so no tax means refund == rebate.\n const refund =\n o.amountPaidMinor != null && o.netAfterRebateMinor != null ? o.amountPaidMinor - o.netAfterRebateMinor : amount\n const taxRefunded = refund - amount\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 as=\"div\" html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n {/* paid / money back / net, like an invoice. Paid and net only exist in token mode. */}\n <div className=\"ck-offer-rebate\">\n {o.amountPaidMinor != null && (\n <div className=\"ck-offer-rebate-row\">\n <span>{msg.offer.rebate.paidLabel}</span>\n <span>{formatPriceFromMinor(o.amountPaidMinor, currency)}</span>\n </div>\n )}\n <div className=\"ck-offer-rebate-row ck-offer-rebate-credit\">\n <span>\n {msg.offer.rebate.moneyBackLabel}\n {taxRefunded > 0 && (\n <span className=\"ck-offer-rebate-tax\">\n {' '}\n {formatMessage(msg.offer.rebate.inclTax, { amount: formatPriceFromMinor(taxRefunded, currency) })}\n </span>\n )}\n </span>\n <span>−{formatPriceFromMinor(refund, currency)}</span>\n </div>\n {o.netAfterRebateMinor != null && (\n <div className=\"ck-offer-rebate-row ck-offer-rebate-total\">\n <span>{msg.offer.rebate.netLabel}</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 ? msg.common.processing : msg.offer.acceptCta.rebate || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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, messages }: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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>{msg.offer.acceptCta.redirect || offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.day : msg.common.days}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">{msg.offer.newEndDateLabel}</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 ? msg.common.processing : msg.offer.acceptCta.trial_extension || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../core/messages'\nimport 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, messages }: SuccessStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n {m.common.done}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../core/messages'\nimport 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 messages,\n}: SurveyStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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={m.survey.followupPlaceholder}\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label={m.survey.followupAriaLabel}\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 {m.common.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, label }: 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>{label ?? 'Back'}</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className, label }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label={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 { formatPeriodEnd, formatShortDate } from '../core/format'\nimport type { CancelFlowMachine } from '../core/machine'\nimport { type CancelFlowMessages, formatMessage, type SavedOfferCopy, selectTiming } from '../core/messages'\nimport type {\n AcceptedOffer,\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 } 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 messages={machine.messages}\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 messages,\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 messages: CancelFlowMessages\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} label={messages.common.close} />\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)' }}>{messages.common.loading}</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 {messages.common.loadError}\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 {messages.common.tryAgain}\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 const messages = machine.messages\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} label={messages.common.close} />\n <div className=\"ck-content\">\n {machine.canGoBack && (\n <BackButton onBack={machine.back} className={classNames?.backButton} label={messages.common.back} />\n )}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">{messages.common.error}</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 const messages = machine.messages\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 ?? messages.survey.title}\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 messages={messages}\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 messages={messages}\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 ?? messages.feedback.title}\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 messages={messages}\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 ?? messages.confirm.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? selectTiming(messages.confirm.cta, state.cancelAtPeriodEnd)}\n goBackLabel={config?.goBackLabel ?? messages.confirm.goBack}\n periodEndNotice={resolvePeriodEndNotice(state, messages)}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n messages={messages}\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 const perOffer = isSaved ? savedOfferCopy(messages, state.acceptedOffer) : undefined\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n acceptedOffer={state.acceptedOffer ?? undefined}\n title={\n isSaved\n ? (config?.savedTitle ?? perOffer?.title ?? messages.success.saved.title)\n : (config?.cancelledTitle ?? selectTiming(messages.success.cancelled.title, state.cancelAtPeriodEnd))\n }\n description={\n isSaved\n ? (config?.savedDescription ??\n pauseResumeDescription(messages, state.acceptedOffer) ??\n perOffer?.description ??\n messages.success.saved.description)\n : (config?.cancelledDescription ??\n selectTiming(messages.success.cancelled.description, state.cancelAtPeriodEnd))\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n messages={messages}\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// Offer types with their own success copy. Others (contact, redirect,\n// custom types) fall back to the generic saved copy.\nconst SAVED_OFFER_COPY_TYPES = ['discount', 'pause', 'trial_extension', 'plan_change', 'rebate'] as const\n\nfunction savedOfferCopy(messages: CancelFlowMessages, offer: AcceptedOffer | null): SavedOfferCopy | undefined {\n if (!offer) return undefined\n if (!(SAVED_OFFER_COPY_TYPES as readonly string[]).includes(offer.type)) return undefined\n return messages.success.saved[offer.type as (typeof SAVED_OFFER_COPY_TYPES)[number]]\n}\n\n// The built-in pause UI always passes the selected duration on accept;\n// without it there's no resume date to promise, so the plain description\n// renders instead.\nfunction pauseResumeDescription(messages: CancelFlowMessages, offer: AcceptedOffer | null): string | undefined {\n if (offer?.type !== 'pause') return undefined\n const months = offer.result?.months\n if (typeof months !== 'number' || months < 1) return undefined\n const resume = new Date()\n if ((offer as { interval?: 'month' | 'week' }).interval === 'week') {\n resume.setDate(resume.getDate() + months * 7)\n } else {\n resume.setMonth(resume.getMonth() + months)\n }\n return formatMessage(messages.success.saved.pause.resumeDescription, { resumeDate: formatShortDate(resume) })\n}\n\n// The notice makes a factual claim about billing behavior, so it requires the\n// timing to be KNOWN to be period-end — server-resolved in token mode, or the\n// developer's explicit cancelAtPeriodEnd declaration in local mode. `null`\n// (undeclared local mode) stays silent: an earlier hardcoded version of this\n// notice was removed precisely because it could contradict the merchant's\n// actual setting. Also empty when the period end can't be determined or the\n// resolved message is blank.\nfunction resolvePeriodEndNotice(state: FlowState, messages: CancelFlowMessages): string | undefined {\n if (state.cancelAtPeriodEnd !== true) return undefined\n const template = selectTiming(messages.confirm.periodEndNotice, state.cancelAtPeriodEnd)\n if (!template) return undefined\n const periodEnd = formatPeriodEnd(state.subscriptions)\n if (!periodEnd) return undefined\n return formatMessage(template, { periodEnd })\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"]}
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ function RichText({ html, as = "p", className }) {
13
13
  return /* @__PURE__ */ jsx(
14
14
  Tag,
15
15
  {
16
- className,
16
+ className: cn("ck-rich-text", className),
17
17
  dangerouslySetInnerHTML: { __html: html }
18
18
  }
19
19
  );
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-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 { defaultMessages } from '../../core/messages'\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 losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n periodEndNotice,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n messages,\n}: ConfirmStepProps) {\n const m = messages ?? defaultMessages\n const hasLosses = Array.isArray(losses) && losses.length > 0\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? m.confirm.lossesLabel}</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 {periodEndNotice && <p className={cn('ck-period-end', classNames?.periodEndNotice)}>{periodEndNotice}</p>}\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 ? m.common.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 { defaultMessages, formatMessage } from '../../core/messages'\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 messages,\n}: FeedbackStepProps) {\n const m = messages ?? defaultMessages\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 =\n placeholder ?? (hasMin ? formatMessage(m.feedback.placeholderWithMin, { minLength }) : m.feedback.placeholder)\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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 {m.common.continue}\n </button>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.processing : msg.offer.acceptCta.contact || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.limitedTimeEyebrow}</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 ? msg.common.processing : msg.offer.acceptCta.discount || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.pauseEyebrow}</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n {max > 1 && (\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 ? msg.common.month : msg.common.months}\n </button>\n ))}\n </div>\n )}\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 ? msg.common.processing : msg.offer.acceptCta.pause || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 ? msg.common.processing\n : selectedPlan?.name\n ? formatMessage(msg.offer.switchToCta, { planName: selectedPlan.name })\n : msg.offer.acceptCta.plan_change || 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 as=\"div\" 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\">{msg.offer.currentPlanBadge}</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 {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { formatPriceFromMinor } from '../../../core/format'\nimport { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 // refund = paid - net; tax = refund - rebate. The server's net already\n // accounts for tax refunded on the rebate, so no tax means refund == rebate.\n const refund =\n o.amountPaidMinor != null && o.netAfterRebateMinor != null ? o.amountPaidMinor - o.netAfterRebateMinor : amount\n const taxRefunded = refund - amount\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 as=\"div\" html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n {/* paid / money back / net, like an invoice. Paid and net only exist in token mode. */}\n <div className=\"ck-offer-rebate\">\n {o.amountPaidMinor != null && (\n <div className=\"ck-offer-rebate-row\">\n <span>{msg.offer.rebate.paidLabel}</span>\n <span>{formatPriceFromMinor(o.amountPaidMinor, currency)}</span>\n </div>\n )}\n <div className=\"ck-offer-rebate-row ck-offer-rebate-credit\">\n <span>\n {msg.offer.rebate.moneyBackLabel}\n {taxRefunded > 0 && (\n <span className=\"ck-offer-rebate-tax\">\n {' '}\n {formatMessage(msg.offer.rebate.inclTax, { amount: formatPriceFromMinor(taxRefunded, currency) })}\n </span>\n )}\n </span>\n <span>−{formatPriceFromMinor(refund, currency)}</span>\n </div>\n {o.netAfterRebateMinor != null && (\n <div className=\"ck-offer-rebate-row ck-offer-rebate-total\">\n <span>{msg.offer.rebate.netLabel}</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 ? msg.common.processing : msg.offer.acceptCta.rebate || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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, messages }: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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>{msg.offer.acceptCta.redirect || offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.day : msg.common.days}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">{msg.offer.newEndDateLabel}</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 ? msg.common.processing : msg.offer.acceptCta.trial_extension || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../core/messages'\nimport 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, messages }: SuccessStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n {m.common.done}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../core/messages'\nimport 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 messages,\n}: SurveyStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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={m.survey.followupPlaceholder}\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label={m.survey.followupAriaLabel}\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 {m.common.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, label }: 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>{label ?? 'Back'}</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className, label }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label={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 { formatPeriodEnd, formatShortDate } from '../core/format'\nimport type { CancelFlowMachine } from '../core/machine'\nimport { type CancelFlowMessages, formatMessage, type SavedOfferCopy, selectTiming } from '../core/messages'\nimport type {\n AcceptedOffer,\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 } 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 messages={machine.messages}\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 messages,\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 messages: CancelFlowMessages\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} label={messages.common.close} />\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)' }}>{messages.common.loading}</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 {messages.common.loadError}\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 {messages.common.tryAgain}\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 const messages = machine.messages\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} label={messages.common.close} />\n <div className=\"ck-content\">\n {machine.canGoBack && (\n <BackButton onBack={machine.back} className={classNames?.backButton} label={messages.common.back} />\n )}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">{messages.common.error}</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 const messages = machine.messages\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 ?? messages.survey.title}\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 messages={messages}\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 messages={messages}\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 ?? messages.feedback.title}\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 messages={messages}\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 ?? messages.confirm.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? selectTiming(messages.confirm.cta, state.cancelAtPeriodEnd)}\n goBackLabel={config?.goBackLabel ?? messages.confirm.goBack}\n periodEndNotice={resolvePeriodEndNotice(state, messages)}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n messages={messages}\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 const perOffer = isSaved ? savedOfferCopy(messages, state.acceptedOffer) : undefined\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n acceptedOffer={state.acceptedOffer ?? undefined}\n title={\n isSaved\n ? (config?.savedTitle ?? perOffer?.title ?? messages.success.saved.title)\n : (config?.cancelledTitle ?? selectTiming(messages.success.cancelled.title, state.cancelAtPeriodEnd))\n }\n description={\n isSaved\n ? (config?.savedDescription ??\n pauseResumeDescription(messages, state.acceptedOffer) ??\n perOffer?.description ??\n messages.success.saved.description)\n : (config?.cancelledDescription ??\n selectTiming(messages.success.cancelled.description, state.cancelAtPeriodEnd))\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n messages={messages}\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// Offer types with their own success copy. Others (contact, redirect,\n// custom types) fall back to the generic saved copy.\nconst SAVED_OFFER_COPY_TYPES = ['discount', 'pause', 'trial_extension', 'plan_change', 'rebate'] as const\n\nfunction savedOfferCopy(messages: CancelFlowMessages, offer: AcceptedOffer | null): SavedOfferCopy | undefined {\n if (!offer) return undefined\n if (!(SAVED_OFFER_COPY_TYPES as readonly string[]).includes(offer.type)) return undefined\n return messages.success.saved[offer.type as (typeof SAVED_OFFER_COPY_TYPES)[number]]\n}\n\n// The built-in pause UI always passes the selected duration on accept;\n// without it there's no resume date to promise, so the plain description\n// renders instead.\nfunction pauseResumeDescription(messages: CancelFlowMessages, offer: AcceptedOffer | null): string | undefined {\n if (offer?.type !== 'pause') return undefined\n const months = offer.result?.months\n if (typeof months !== 'number' || months < 1) return undefined\n const resume = new Date()\n if ((offer as { interval?: 'month' | 'week' }).interval === 'week') {\n resume.setDate(resume.getDate() + months * 7)\n } else {\n resume.setMonth(resume.getMonth() + months)\n }\n return formatMessage(messages.success.saved.pause.resumeDescription, { resumeDate: formatShortDate(resume) })\n}\n\n// The notice makes a factual claim about billing behavior, so it requires the\n// timing to be KNOWN to be period-end — server-resolved in token mode, or the\n// developer's explicit cancelAtPeriodEnd declaration in local mode. `null`\n// (undeclared local mode) stays silent: an earlier hardcoded version of this\n// notice was removed precisely because it could contradict the merchant's\n// actual setting. Also empty when the period end can't be determined or the\n// resolved message is blank.\nfunction resolvePeriodEndNotice(state: FlowState, messages: CancelFlowMessages): string | undefined {\n if (state.cancelAtPeriodEnd !== true) return undefined\n const template = selectTiming(messages.confirm.periodEndNotice, state.cancelAtPeriodEnd)\n if (!template) return undefined\n const periodEnd = formatPeriodEnd(state.subscriptions)\n if (!periodEnd) return undefined\n return formatMessage(template, { periodEnd })\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\nimport { cn } from '../core/utils'\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 // The SDK's scoped reset intentionally neutralizes bare HTML elements\n // so host-app styles cannot leak into the flow. This class opts authored\n // content back into the semantic prose rules in cancel-flow.css.\n className={cn('ck-rich-text', className)}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: see file-level comment\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n","import { defaultMessages } from '../../core/messages'\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 losses,\n lossesLabel,\n confirmLabel,\n goBackLabel,\n periodEndNotice,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n messages,\n}: ConfirmStepProps) {\n const m = messages ?? defaultMessages\n const hasLosses = Array.isArray(losses) && losses.length > 0\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? m.confirm.lossesLabel}</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 {periodEndNotice && <p className={cn('ck-period-end', classNames?.periodEndNotice)}>{periodEndNotice}</p>}\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 ? m.common.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 { defaultMessages, formatMessage } from '../../core/messages'\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 messages,\n}: FeedbackStepProps) {\n const m = messages ?? defaultMessages\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 =\n placeholder ?? (hasMin ? formatMessage(m.feedback.placeholderWithMin, { minLength }) : m.feedback.placeholder)\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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 {m.common.continue}\n </button>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.processing : msg.offer.acceptCta.contact || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.limitedTimeEyebrow}</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 ? msg.common.processing : msg.offer.acceptCta.discount || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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\">{msg.offer.pauseEyebrow}</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n {max > 1 && (\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 ? msg.common.month : msg.common.months}\n </button>\n ))}\n </div>\n )}\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 ? msg.common.processing : msg.offer.acceptCta.pause || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 ? msg.common.processing\n : selectedPlan?.name\n ? formatMessage(msg.offer.switchToCta, { planName: selectedPlan.name })\n : msg.offer.acceptCta.plan_change || 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 as=\"div\" 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\">{msg.offer.currentPlanBadge}</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 {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { formatPriceFromMinor } from '../../../core/format'\nimport { defaultMessages, formatMessage } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 // refund = paid - net; tax = refund - rebate. The server's net already\n // accounts for tax refunded on the rebate, so no tax means refund == rebate.\n const refund =\n o.amountPaidMinor != null && o.netAfterRebateMinor != null ? o.amountPaidMinor - o.netAfterRebateMinor : amount\n const taxRefunded = refund - amount\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 as=\"div\" html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n {/* paid / money back / net, like an invoice. Paid and net only exist in token mode. */}\n <div className=\"ck-offer-rebate\">\n {o.amountPaidMinor != null && (\n <div className=\"ck-offer-rebate-row\">\n <span>{msg.offer.rebate.paidLabel}</span>\n <span>{formatPriceFromMinor(o.amountPaidMinor, currency)}</span>\n </div>\n )}\n <div className=\"ck-offer-rebate-row ck-offer-rebate-credit\">\n <span>\n {msg.offer.rebate.moneyBackLabel}\n {taxRefunded > 0 && (\n <span className=\"ck-offer-rebate-tax\">\n {' '}\n {formatMessage(msg.offer.rebate.inclTax, { amount: formatPriceFromMinor(taxRefunded, currency) })}\n </span>\n )}\n </span>\n <span>−{formatPriceFromMinor(refund, currency)}</span>\n </div>\n {o.netAfterRebateMinor != null && (\n <div className=\"ck-offer-rebate-row ck-offer-rebate-total\">\n <span>{msg.offer.rebate.netLabel}</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 ? msg.common.processing : msg.offer.acceptCta.rebate || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../../core/messages'\nimport 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, messages }: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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>{msg.offer.acceptCta.redirect || offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../../core/messages'\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 messages,\n}: OfferStepProps) {\n const msg = messages ?? defaultMessages\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 as=\"div\" 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 ? msg.common.day : msg.common.days}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">{msg.offer.newEndDateLabel}</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 ? msg.common.processing : msg.offer.acceptCta.trial_extension || offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {msg.offer.declineCta || 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 { defaultMessages } from '../../core/messages'\nimport 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, messages }: SuccessStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n {m.common.done}\n </button>\n </div>\n </div>\n )\n}\n","import { defaultMessages } from '../../core/messages'\nimport 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 messages,\n}: SurveyStepProps) {\n const m = messages ?? defaultMessages\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 && (\n <RichText as=\"div\" html={description} className={cn('ck-step-description', classNames?.description)} />\n )}\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={m.survey.followupPlaceholder}\n rows={3}\n value={followupResponse}\n onChange={(e) => onFollowupResponseChange(e.target.value)}\n aria-label={m.survey.followupAriaLabel}\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 {m.common.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, label }: 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>{label ?? 'Back'}</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className, label }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label={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 { formatPeriodEnd, formatShortDate } from '../core/format'\nimport type { CancelFlowMachine } from '../core/machine'\nimport { type CancelFlowMessages, formatMessage, type SavedOfferCopy, selectTiming } from '../core/messages'\nimport type {\n AcceptedOffer,\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 } 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 messages={machine.messages}\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 messages,\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 messages: CancelFlowMessages\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} label={messages.common.close} />\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)' }}>{messages.common.loading}</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 {messages.common.loadError}\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 {messages.common.tryAgain}\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 const messages = machine.messages\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} label={messages.common.close} />\n <div className=\"ck-content\">\n {machine.canGoBack && (\n <BackButton onBack={machine.back} className={classNames?.backButton} label={messages.common.back} />\n )}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">{messages.common.error}</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 const messages = machine.messages\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 ?? messages.survey.title}\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 messages={messages}\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 messages={messages}\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 ?? messages.feedback.title}\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 messages={messages}\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 ?? messages.confirm.title}\n description={config?.description}\n customer={state.customer}\n subscriptions={state.subscriptions}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? selectTiming(messages.confirm.cta, state.cancelAtPeriodEnd)}\n goBackLabel={config?.goBackLabel ?? messages.confirm.goBack}\n periodEndNotice={resolvePeriodEndNotice(state, messages)}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n messages={messages}\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 const perOffer = isSaved ? savedOfferCopy(messages, state.acceptedOffer) : undefined\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n acceptedOffer={state.acceptedOffer ?? undefined}\n title={\n isSaved\n ? (config?.savedTitle ?? perOffer?.title ?? messages.success.saved.title)\n : (config?.cancelledTitle ?? selectTiming(messages.success.cancelled.title, state.cancelAtPeriodEnd))\n }\n description={\n isSaved\n ? (config?.savedDescription ??\n pauseResumeDescription(messages, state.acceptedOffer) ??\n perOffer?.description ??\n messages.success.saved.description)\n : (config?.cancelledDescription ??\n selectTiming(messages.success.cancelled.description, state.cancelAtPeriodEnd))\n }\n customer={state.customer}\n subscriptions={state.subscriptions}\n onClose={machine.close}\n classNames={config?.classNames}\n messages={messages}\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// Offer types with their own success copy. Others (contact, redirect,\n// custom types) fall back to the generic saved copy.\nconst SAVED_OFFER_COPY_TYPES = ['discount', 'pause', 'trial_extension', 'plan_change', 'rebate'] as const\n\nfunction savedOfferCopy(messages: CancelFlowMessages, offer: AcceptedOffer | null): SavedOfferCopy | undefined {\n if (!offer) return undefined\n if (!(SAVED_OFFER_COPY_TYPES as readonly string[]).includes(offer.type)) return undefined\n return messages.success.saved[offer.type as (typeof SAVED_OFFER_COPY_TYPES)[number]]\n}\n\n// The built-in pause UI always passes the selected duration on accept;\n// without it there's no resume date to promise, so the plain description\n// renders instead.\nfunction pauseResumeDescription(messages: CancelFlowMessages, offer: AcceptedOffer | null): string | undefined {\n if (offer?.type !== 'pause') return undefined\n const months = offer.result?.months\n if (typeof months !== 'number' || months < 1) return undefined\n const resume = new Date()\n if ((offer as { interval?: 'month' | 'week' }).interval === 'week') {\n resume.setDate(resume.getDate() + months * 7)\n } else {\n resume.setMonth(resume.getMonth() + months)\n }\n return formatMessage(messages.success.saved.pause.resumeDescription, { resumeDate: formatShortDate(resume) })\n}\n\n// The notice makes a factual claim about billing behavior, so it requires the\n// timing to be KNOWN to be period-end — server-resolved in token mode, or the\n// developer's explicit cancelAtPeriodEnd declaration in local mode. `null`\n// (undeclared local mode) stays silent: an earlier hardcoded version of this\n// notice was removed precisely because it could contradict the merchant's\n// actual setting. Also empty when the period end can't be determined or the\n// resolved message is blank.\nfunction resolvePeriodEndNotice(state: FlowState, messages: CancelFlowMessages): string | undefined {\n if (state.cancelAtPeriodEnd !== true) return undefined\n const template = selectTiming(messages.confirm.periodEndNotice, state.cancelAtPeriodEnd)\n if (!template) return undefined\n const periodEnd = formatPeriodEnd(state.subscriptions)\n if (!periodEnd) return undefined\n return formatMessage(template, { periodEnd })\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"]}
package/dist/styles.css CHANGED
@@ -275,17 +275,75 @@
275
275
  margin: 0 0 20px;
276
276
  }
277
277
 
278
- /* Embedded video (YouTube/Vimeo/Wistia/Brightcove iframes) authored into a
279
- step description. Overrides the inline height="480" the TipTap YouTube node
280
- emits and makes the player fill the width at a 16:9 box. */
281
- .ck-cancel-flow .ck-step-description :is(iframe, video),
282
- .ck-cancel-flow .ck-step-description [data-youtube-video] {
278
+ /* --- Dashboard-authored rich text ---
279
+ The scoped reset above keeps host-app element styles out of the flow, but
280
+ it also neutralizes semantic HTML defaults. Restore those semantics only
281
+ inside RichText so SDK chrome remains fully normalized. :where() keeps the
282
+ selectors easy for consumers to override while .ck-rich-text provides
283
+ enough specificity to beat the reset. */
284
+ .ck-cancel-flow .ck-rich-text :where(strong, b) {
285
+ font-weight: 700;
286
+ }
287
+
288
+ .ck-cancel-flow .ck-rich-text :where(em, i) {
289
+ font-style: italic;
290
+ }
291
+
292
+ .ck-cancel-flow .ck-rich-text :where(u) {
293
+ text-decoration: underline;
294
+ text-underline-offset: 2px;
295
+ }
296
+
297
+ .ck-cancel-flow .ck-rich-text :where(s, del) {
298
+ text-decoration: line-through;
299
+ }
300
+
301
+ .ck-cancel-flow .ck-rich-text :where(a) {
302
+ color: var(--ck-color-primary);
303
+ font-weight: 600;
304
+ text-decoration: underline;
305
+ text-underline-offset: 2px;
306
+ }
307
+
308
+ .ck-cancel-flow .ck-rich-text :where(a:hover) {
309
+ color: var(--ck-color-primary-hover);
310
+ }
311
+
312
+ .ck-cancel-flow .ck-rich-text :where(ul, ol) {
313
+ /* Match the TipTap builder preview. The SDK reset already supplies the
314
+ compact zero-margin rhythm used by both the builder and embed. */
315
+ padding-inline-start: 1.1em;
316
+ }
317
+
318
+ .ck-cancel-flow .ck-rich-text :where(ul) {
319
+ list-style: disc outside;
320
+ }
321
+
322
+ .ck-cancel-flow .ck-rich-text :where(ol) {
323
+ list-style: decimal outside;
324
+ }
325
+
326
+ .ck-cancel-flow .ck-rich-text :where(li > p) {
327
+ margin: 0;
328
+ }
329
+
330
+ .ck-cancel-flow .ck-rich-text :where(img) {
331
+ display: block;
332
+ max-width: 100%;
333
+ height: auto;
334
+ }
335
+
336
+ /* Embedded video (YouTube/Vimeo/Wistia/Brightcove). Overrides the inline
337
+ height="480" the TipTap YouTube node emits and makes the player fill the
338
+ available width at a 16:9 ratio. */
339
+ .ck-cancel-flow .ck-rich-text :where(iframe, video),
340
+ .ck-cancel-flow .ck-rich-text :where([data-youtube-video]) {
283
341
  display: block;
284
342
  width: 100%;
285
343
  height: auto;
286
344
  aspect-ratio: 16 / 9;
287
345
  border: 0;
288
- border-radius: 10px;
346
+ border-radius: 8px;
289
347
  }
290
348
 
291
349
  /* --- Buttons --- */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@churnkey/react",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
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": {