@churnkey/react 0.1.1 → 0.2.0
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/README.md +1 -1
- package/dist/{chunk-QTMZI5I2.js → chunk-CPCWJTSG.js} +3 -3
- package/dist/{chunk-QTMZI5I2.js.map → chunk-CPCWJTSG.js.map} +1 -1
- package/dist/{chunk-SIYJ4R4B.cjs → chunk-EHZJAQQ5.cjs} +39 -11
- package/dist/chunk-EHZJAQQ5.cjs.map +1 -0
- package/dist/{chunk-IFVMM2LB.js → chunk-OL5HQUE4.js} +4 -2
- package/dist/chunk-OL5HQUE4.js.map +1 -0
- package/dist/{chunk-GCQ75J4G.js → chunk-SXGORJOX.js} +39 -11
- package/dist/chunk-SXGORJOX.js.map +1 -0
- package/dist/{chunk-XU7KDCXO.cjs → chunk-YSNMTOAW.cjs} +6 -6
- package/dist/{chunk-XU7KDCXO.cjs.map → chunk-YSNMTOAW.cjs.map} +1 -1
- package/dist/{chunk-CPBEP4NW.cjs → chunk-ZEYUKGAR.cjs} +4 -2
- package/dist/chunk-ZEYUKGAR.cjs.map +1 -0
- package/dist/core.cjs +12 -12
- package/dist/core.d.cts +2 -2
- package/dist/core.d.ts +2 -2
- package/dist/core.js +2 -2
- package/dist/headless.cjs +3 -3
- package/dist/headless.d.cts +1 -1
- package/dist/headless.d.ts +1 -1
- package/dist/headless.js +2 -2
- package/dist/index.cjs +126 -147
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +48 -69
- package/dist/index.js.map +1 -1
- package/dist/{step-graph-ChdI-VXV.d.ts → step-graph-Cbi0DRHX.d.cts} +53 -4
- package/dist/{step-graph-ChdI-VXV.d.cts → step-graph-Cbi0DRHX.d.ts} +53 -4
- package/dist/styles.css +133 -66
- package/dist/styles.css.d.ts +1 -0
- package/package.json +14 -11
- package/dist/chunk-CPBEP4NW.cjs.map +0 -1
- package/dist/chunk-GCQ75J4G.js.map +0 -1
- package/dist/chunk-IFVMM2LB.js.map +0 -1
- package/dist/chunk-SIYJ4R4B.cjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/rich-text.tsx","../src/components/steps/default-confirm.tsx","../src/components/steps/default-feedback.tsx","../src/components/steps/offer/default-contact-offer.tsx","../src/components/steps/offer/default-discount-offer.tsx","../src/components/steps/offer/default-pause-offer.tsx","../src/components/steps/shared.tsx","../src/components/steps/offer/default-plan-change-offer.tsx","../src/components/steps/offer/default-redirect-offer.tsx","../src/components/steps/offer/default-trial-extension-offer.tsx","../src/components/steps/default-offer.tsx","../src/components/steps/default-success.tsx","../src/components/steps/default-survey.tsx","../src/components/structural/default-back-button.tsx","../src/components/structural/default-close-button.tsx","../src/components/structural/default-modal.tsx","../src/components/use-color-scheme.ts","../src/components/cancel-flow.tsx"],"names":["jsx","jsxs","useState","useRef","useCallback","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 type { ConfirmStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultConfirm({\n title,\n description,\n confirmLabel,\n goBackLabel,\n periodEnd,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n}: ConfirmStepProps) {\n return (\n <div className={cn('ck-step ck-step-confirm', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n {periodEnd && (\n <p className={cn('ck-period-end', classNames?.periodEndNotice)}>Your access continues until {periodEnd}.</p>\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-danger', classNames?.confirmButton)}\n onClick={onConfirm}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : confirmLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.goBackButton)} onClick={onGoBack}>\n {goBackLabel}\n </button>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { FeedbackStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultFeedback({\n title,\n description,\n placeholder,\n required,\n minLength,\n value,\n onChange,\n onSubmit,\n classNames,\n}: FeedbackStepProps) {\n const [focused, setFocused] = useState(false)\n const hasMin = minLength > 0\n const isUnderMin = hasMin && value.length > 0 && value.length < minLength\n const isValid = !required || value.length >= minLength\n const placeholderText = placeholder ?? (hasMin ? `At least ${minLength} characters…` : 'Type your thoughts…')\n\n return (\n <div className={cn('ck-step ck-step-feedback', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n className={cn(\n 'ck-feedback-field',\n focused && 'ck-feedback-field--focused',\n isUnderMin && 'ck-feedback-field--invalid',\n )}\n >\n <textarea\n className={cn('ck-textarea', classNames?.textarea)}\n placeholder={placeholderText}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n rows={3}\n />\n {hasMin && (\n <div\n className={cn(\n 'ck-character-count',\n isUnderMin && 'ck-character-count--invalid',\n classNames?.characterCount,\n )}\n >\n {value.length} / {minLength}\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.submitButton)}\n onClick={onSubmit}\n disabled={!isValid}\n >\n Continue\n </button>\n </div>\n )\n}\n","import type { OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\n// Contact offers render no body by default — title and description carry the\n// pitch, the accept button triggers the consumer's handleContact callback\n// (which usually opens the offer's url). Override the slot to add an\n// avatar/SLA/etc. specific to your support team.\nexport function DefaultContactOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultDiscountOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & {\n percentOff?: number\n amountOff?: number\n currency?: string\n durationInMonths?: number\n }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const phrase = discountPhrase(o)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-offer-discount\">\n <div className=\"ck-offer-discount-eyebrow\">Limited-time offer</div>\n <div className=\"ck-offer-discount-phrase\">{phrase}</div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatShortDate } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultPauseOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { months: number }\n const max = Math.max(1, o.months)\n // Default to 2 months when the offer allows it — long enough to feel like\n // a real break, short enough that most subscribers come back.\n const [months, setMonths] = useState<number>(Math.min(2, max))\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const options = Array.from({ length: max }, (_, i) => i + 1)\n const resumeAt = new Date()\n resumeAt.setMonth(resumeAt.getMonth() + months)\n const resumeDate = formatShortDate(resumeAt)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-offer-pause\">\n <div className=\"ck-pause-segments\" style={{ gridTemplateColumns: `repeat(${max}, 1fr)` }}>\n {options.map((m) => {\n const isSelected = m === months\n return (\n <button\n key={m}\n type=\"button\"\n onClick={() => setMonths(m)}\n className={cn('ck-pause-segment', isSelected && 'ck-pause-segment--selected')}\n >\n {m} {m === 1 ? 'month' : 'months'}\n </button>\n )\n })}\n </div>\n <div className=\"ck-pause-resume\">\n <div>\n <div className=\"ck-pause-resume-label\">Billing resumes</div>\n <div className=\"ck-pause-resume-date\">{resumeDate}</div>\n </div>\n <CalendarIcon />\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept({ months })}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n\nfunction CalendarIcon() {\n return (\n <svg\n className=\"ck-pause-resume-icon\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"3\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n )\n}\n","export function Checkmark({ color = 'currentColor', size = 14 }: { color?: string; size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","import { useState } from 'react'\nimport { formatPriceFromMinor } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps, PlanOption } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\nimport { Checkmark } from '../shared'\n\nexport function DefaultPlanChangeOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { plans?: PlanOption[] }\n const plans = o.plans ?? []\n const [selectedPlanId, setSelectedPlanId] = useState<string | null>(plans[0]?.id ?? null)\n const selectedPlan = plans.find((p) => p.id === selectedPlanId) ?? null\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const ctaLabel = isProcessing\n ? 'Processing...'\n : selectedPlan?.name\n ? `Switch to ${selectedPlan.name}`\n : offer.copy.cta\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-plan-grid\">\n {plans.map((plan) => {\n const interval = plan.duration?.interval ?? 'month'\n const currency = plan.amount.currency ?? 'USD'\n const isSelected = plan.id === selectedPlanId\n\n return (\n <button\n type=\"button\"\n key={plan.id}\n onClick={() => setSelectedPlanId(plan.id)}\n className={cn('ck-plan-card', isSelected && 'ck-plan-card--selected')}\n aria-pressed={isSelected}\n >\n <div className=\"ck-plan-name\">{plan.name ?? plan.id}</div>\n {plan.tagline && <div className=\"ck-plan-tagline\">{plan.tagline}</div>}\n\n <div className=\"ck-plan-price-row\">\n <span className=\"ck-plan-amount\">{formatPriceFromMinor(plan.amount.value, currency)}</span>\n <span className=\"ck-plan-period\">/{interval}</span>\n {plan.msrp && <span className=\"ck-plan-msrp\">{plan.msrp}</span>}\n </div>\n\n {plan.features && plan.features.length > 0 && (\n <ul className=\"ck-plan-features\">\n {plan.features.map((feature, i) => (\n <li key={`${plan.id}-feature-${i}`} className=\"ck-plan-feature\">\n <span className=\"ck-plan-feature-check\">\n <Checkmark size={11} />\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )}\n </button>\n )\n })}\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => selectedPlanId && onAccept({ planId: selectedPlanId })}\n disabled={isProcessing || !selectedPlanId}\n >\n {ctaLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultRedirectOffer({ title, description, offer, onDecline, classNames }: OfferStepProps) {\n const url = (offer as OfferDecision & { url: string }).url\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details\">\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className=\"ck-redirect-link\">\n <span>{offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n\nfunction ExternalIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ck-redirect-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n )\n}\n","import { formatMonthDay } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultTrialExtensionOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { days: number }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const end = new Date()\n end.setDate(end.getDate() + o.days)\n const newEnd = formatMonthDay(end)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-trial-block\">\n <div className=\"ck-trial-badge\">\n <div className=\"ck-trial-days\">+{o.days}</div>\n <div className=\"ck-trial-unit\">{o.days === 1 ? 'day' : 'days'}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">New end date</div>\n <div className=\"ck-trial-end-date\">{newEnd}</div>\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { ReactElement } from 'react'\nimport type { OfferStepProps } from '../../core/types'\nimport { DefaultContactOffer } from './offer/default-contact-offer'\nimport { DefaultDiscountOffer } from './offer/default-discount-offer'\nimport { DefaultPauseOffer } from './offer/default-pause-offer'\nimport { DefaultPlanChangeOffer } from './offer/default-plan-change-offer'\nimport { DefaultRedirectOffer } from './offer/default-redirect-offer'\nimport { DefaultTrialExtensionOffer } from './offer/default-trial-extension-offer'\n\n// Routes to the per-type component, which owns its full canvas. Two\n// override seams: replace one type via `components.PauseOffer` (etc.), or\n// take over the whole offer step via the `Offer` slot.\nexport function DefaultOffer(props: OfferStepProps) {\n const { offer, components } = props\n const Component = pickOfferComponent(offer.type, components)\n // Custom offer types are dispatched upstream against `customComponents`,\n // so an unknown type reaching this switcher is bad data.\n if (!Component) return null\n return (\n <Component\n // Remount on offer change so per-type selection state (pause months,\n // plan id) doesn't leak across reason switches.\n key={offer.decisionId ?? offer.type}\n {...props}\n />\n )\n}\n\nfunction pickOfferComponent(\n type: string,\n components: OfferStepProps['components'],\n): ((props: OfferStepProps) => ReactElement) | null {\n switch (type) {\n case 'discount':\n return components?.DiscountOffer ?? DefaultDiscountOffer\n case 'pause':\n return components?.PauseOffer ?? DefaultPauseOffer\n case 'trial_extension':\n return components?.TrialExtensionOffer ?? DefaultTrialExtensionOffer\n case 'plan_change':\n return components?.PlanChangeOffer ?? DefaultPlanChangeOffer\n case 'contact':\n return components?.ContactOffer ?? DefaultContactOffer\n case 'redirect':\n return components?.RedirectOffer ?? DefaultRedirectOffer\n default:\n return null\n }\n}\n","import type { SuccessStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nexport function DefaultSuccess({ title, description, onClose, classNames }: SuccessStepProps) {\n return (\n <div className={cn('ck-step ck-step-success', classNames?.root)}>\n <div className={cn('ck-success-icon', classNames?.icon)}>\n <Checkmark color=\"currentColor\" size={26} />\n </div>\n\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n Done\n </button>\n </div>\n </div>\n )\n}\n","import { useCallback, useRef } from 'react'\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 tabIndex={isSelected ? 0 : -1}\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 onNext,\n classNames,\n components,\n}: SurveyStepProps) {\n const ReasonButton = components?.ReasonButton ?? DefaultReasonButton\n const listRef = useRef<HTMLDivElement>(null)\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n e.preventDefault()\n\n const currentIdx = reasons.findIndex((r) => r.id === selectedReason)\n let nextIdx: number\n if (e.key === 'ArrowDown') {\n nextIdx = currentIdx < reasons.length - 1 ? currentIdx + 1 : 0\n } else {\n nextIdx = currentIdx > 0 ? currentIdx - 1 : reasons.length - 1\n }\n onSelectReason(reasons[nextIdx].id)\n\n const buttons = listRef.current?.querySelectorAll<HTMLElement>('[role=\"radio\"]')\n buttons?.[nextIdx]?.focus()\n },\n [reasons, selectedReason, onSelectReason],\n )\n\n return (\n <div className={cn('ck-step ck-step-survey', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n ref={listRef}\n className={cn('ck-reason-list', classNames?.reasonList)}\n role=\"radiogroup\"\n aria-label={title}\n onKeyDown={handleKeyDown}\n >\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 <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.continueButton)}\n onClick={onNext}\n disabled={!selectedReason}\n >\n Continue\n </button>\n </div>\n )\n}\n\nexport { DefaultReasonButton }\n","import type { BackButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultBackButton({ onBack, className }: BackButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-back-button', className)} onClick={onBack}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 4L6.5 10l6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span>Back</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport type { ModalProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\n// Only traps visible, enabled elements\nfunction trapFocus(container: HTMLElement): () => void {\n const focusableSelector = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled)',\n 'textarea:not(:disabled)',\n 'select:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter(\n (el) => el.offsetParent !== null,\n ) // visible only\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', handleKeyDown)\n return () => container.removeEventListener('keydown', handleKeyDown)\n}\n\nexport function DefaultModal({ open, onClose, children, className }: 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=\"ck-overlay\"\n onClick={(e) => {\n if (e.target === overlayRef.current) onClose()\n }}\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"ck-dialog-title\"\n tabIndex={-1}\n className={cn('ck-modal', className)}\n >\n {children}\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\ntype ColorScheme = 'light' | 'dark'\n\nconst query = '(prefers-color-scheme: dark)'\n\nfunction getSystemScheme(): ColorScheme {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light'\n return window.matchMedia(query).matches ? 'dark' : 'light'\n}\n\nexport function useColorScheme(preference?: 'auto' | 'light' | 'dark'): ColorScheme {\n const [system, setSystem] = useState(getSystemScheme)\n\n useEffect(() => {\n if (preference !== 'auto' || typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mql = window.matchMedia(query)\n const onChange = () => setSystem(mql.matches ? 'dark' : 'light')\n mql.addEventListener('change', onChange)\n return () => mql.removeEventListener('change', onChange)\n }, [preference])\n\n if (!preference || preference === 'light') return 'light'\n if (preference === 'dark') return 'dark'\n return system\n}\n","import { type ReactElement, useEffect } from 'react'\nimport type { CancelFlowMachine } from '../core/machine'\nimport type {\n CancelFlowProps,\n ComponentOverrides,\n ConfirmStep,\n CustomComponents,\n CustomOfferProps,\n CustomStepProps,\n FeedbackStep,\n FlowState,\n OfferStep,\n SuccessStep,\n SurveyStep,\n} from '../core/types'\nimport { appearanceToStyle, defaultTitles } from '../core/utils'\nimport { useCancelFlowMachine } from '../headless/use-cancel-flow-machine'\nimport { DefaultConfirm } from './steps/default-confirm'\nimport { DefaultFeedback } from './steps/default-feedback'\nimport { DefaultOffer } from './steps/default-offer'\nimport { DefaultSuccess } from './steps/default-success'\nimport { DefaultSurvey } from './steps/default-survey'\nimport { DefaultBackButton } from './structural/default-back-button'\nimport { DefaultCloseButton } from './structural/default-close-button'\nimport { DefaultModal } from './structural/default-modal'\nimport { useColorScheme } from './use-color-scheme'\n\nexport function CancelFlow(props: CancelFlowProps) {\n const { machine, state, isLoading, loadError, retry } = useCancelFlowMachine(props)\n\n if (isLoading || loadError) {\n return (\n <LoadStatus\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n onClose={props.onClose}\n isLoading={isLoading}\n loadError={loadError}\n onRetry={retry}\n />\n )\n }\n\n return (\n <FlowShell\n machine={machine}\n state={state}\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n customComponents={props.customComponents}\n />\n )\n}\n\nfunction LoadStatus({\n appearance,\n classNames,\n components,\n onClose,\n isLoading,\n loadError,\n onRetry,\n}: {\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n onClose?: CancelFlowProps['onClose']\n isLoading: boolean\n loadError: Error | null\n onRetry: () => void\n}) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const handleClose = onClose ?? (() => {})\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={handleClose} className={classNames?.modal}>\n <CloseButton onClose={handleClose} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {isLoading && (\n <div className=\"ck-loading\" style={{ padding: '32px', textAlign: 'center' }}>\n <div\n className=\"ck-loading-spinner\"\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--ck-color-border, #e5e7eb)',\n borderTopColor: 'var(--ck-color-primary, #2563eb)',\n borderRadius: '50%',\n animation: 'ck-spin 0.6s linear infinite',\n margin: '0 auto 16px',\n }}\n />\n <p style={{ color: 'var(--ck-color-text-secondary, #6b7280)' }}>Loading your options...</p>\n </div>\n )}\n {loadError && (\n <div className=\"ck-error\" role=\"alert\" style={{ padding: '32px', textAlign: 'center' }}>\n <p className=\"ck-error-message\" style={{ marginBottom: 16 }}>\n We couldn't load your cancellation options. Please try again.\n </p>\n <button\n type=\"button\"\n className=\"ck-retry-button\"\n onClick={onRetry}\n style={{\n padding: '8px 20px',\n fontSize: 14,\n fontWeight: 600,\n background: 'var(--ck-color-primary, #2563eb)',\n color: '#fff',\n border: 'none',\n borderRadius: 'var(--ck-border-radius, 8px)',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </div>\n )}\n </div>\n </Modal>\n </div>\n )\n}\n\ninterface FlowShellProps {\n machine: CancelFlowMachine\n state: FlowState\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n customComponents?: CustomComponents\n}\n\nfunction FlowShell({ machine, state, appearance, classNames, components, customComponents }: FlowShellProps) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const BackButton = components?.BackButton ?? DefaultBackButton\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={machine.close} className={classNames?.modal}>\n <CloseButton onClose={machine.close} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {machine.canGoBack && <BackButton onBack={machine.back} className={classNames?.backButton} />}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">Something went wrong. Please try again.</p>\n </div>\n )}\n <StepRenderer state={state} machine={machine} components={components} customComponents={customComponents} />\n </div>\n </Modal>\n </div>\n )\n}\n\nfunction StepRenderer({\n state,\n machine,\n components,\n customComponents,\n}: {\n state: FlowState\n machine: CancelFlowMachine\n components?: Partial<ComponentOverrides>\n customComponents?: CustomComponents\n}) {\n const stepConfig = machine.currentStep\n\n switch (state.step) {\n case 'survey': {\n const Survey = components?.Survey ?? DefaultSurvey\n const config = stepConfig as SurveyStep | undefined\n return (\n <Survey\n title={config?.title ?? defaultTitles.survey}\n description={config?.description}\n reasons={machine.reasons}\n selectedReason={state.selectedReason}\n onSelectReason={machine.selectReason}\n onNext={machine.next}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'offer': {\n const offer = machine.currentOffer\n if (!offer) return null\n // Custom offer types (e.g. 'change-seats') match against\n // customComponents first; built-ins fall through to DefaultOffer.\n const CustomOffer = customComponents?.[offer.type] as ((props: CustomOfferProps) => ReactElement) | undefined\n if (CustomOffer) {\n return (\n <CustomOffer\n offer={offer}\n customer={state.customer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n />\n )\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 offer={offer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'feedback': {\n const Feedback = components?.Feedback ?? DefaultFeedback\n const config = stepConfig as FeedbackStep | undefined\n return (\n <Feedback\n title={config?.title ?? defaultTitles.feedback}\n description={config?.description}\n placeholder={config?.placeholder}\n required={config?.required ?? false}\n minLength={config?.minLength ?? 0}\n value={state.feedback}\n onChange={machine.setFeedback}\n onSubmit={machine.next}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'confirm': {\n const Confirm = components?.Confirm ?? DefaultConfirm\n const config = stepConfig as ConfirmStep | undefined\n return (\n <Confirm\n title={config?.title ?? defaultTitles.confirm}\n description={config?.description}\n confirmLabel={config?.confirmLabel ?? 'Cancel subscription'}\n goBackLabel={config?.goBackLabel ?? 'Go back'}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'success': {\n const Success = components?.Success ?? DefaultSuccess\n const config = stepConfig as SuccessStep | undefined\n const isSaved = state.outcome === 'saved'\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n title={\n isSaved ? (config?.savedTitle ?? 'Welcome back!') : (config?.cancelledTitle ?? 'Subscription cancelled')\n }\n description={\n isSaved\n ? (config?.savedDescription ?? 'Your offer has been applied.')\n : (config?.cancelledDescription ?? \"We're sorry to see you go.\")\n }\n onClose={machine.close}\n classNames={config?.classNames}\n />\n )\n }\n\n default: {\n const CustomStep = customComponents?.[state.step] as ((props: CustomStepProps) => ReactElement) | undefined\n\n if (!CustomStep) {\n return <UnregisteredStepFallback step={state.step} onSkip={machine.next} />\n }\n\n const config = stepConfig as CustomStepProps['step'] | undefined\n\n return (\n <CustomStep\n step={{\n type: state.step,\n title: config?.title,\n description: config?.description,\n data: config?.data,\n }}\n customer={state.customer}\n onNext={machine.next}\n onBack={machine.back}\n />\n )\n }\n }\n}\n\n// Skips a custom step the consumer didn't register a component for. The skip\n// 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/rich-text.tsx","../src/components/steps/default-confirm.tsx","../src/components/steps/default-feedback.tsx","../src/components/steps/offer/default-contact-offer.tsx","../src/components/steps/offer/default-discount-offer.tsx","../src/components/steps/offer/default-pause-offer.tsx","../src/components/steps/shared.tsx","../src/components/steps/offer/default-plan-change-offer.tsx","../src/components/steps/offer/default-redirect-offer.tsx","../src/components/steps/offer/default-trial-extension-offer.tsx","../src/components/steps/default-offer.tsx","../src/components/steps/default-success.tsx","../src/components/steps/default-survey.tsx","../src/components/structural/default-back-button.tsx","../src/components/structural/default-close-button.tsx","../src/components/structural/default-modal.tsx","../src/components/use-color-scheme.ts","../src/components/cancel-flow.tsx"],"names":["jsx","jsxs","useState","useRef","useCallback","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 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 periodEnd,\n onConfirm,\n onGoBack,\n isProcessing,\n classNames,\n}: ConfirmStepProps) {\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 && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n {hasLosses && (\n <div className={cn('ck-loss-block', classNames?.lossList)}>\n <div className={cn('ck-loss-label', classNames?.lossLabel)}>{lossesLabel ?? \"You'll lose access to:\"}</div>\n <ul className=\"ck-loss-list\">\n {losses.map((item) => (\n <li key={item} className={cn('ck-loss-item', classNames?.lossItem)}>\n <span aria-hidden className={cn('ck-loss-bullet', classNames?.lossBullet)}>\n ●\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {periodEnd && (\n <p className={cn('ck-period-end', classNames?.periodEndNotice)}>Your access continues until {periodEnd}.</p>\n )}\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-danger', classNames?.confirmButton)}\n onClick={onConfirm}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : confirmLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.goBackButton)} onClick={onGoBack}>\n {goBackLabel}\n </button>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { FeedbackStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\n\nexport function DefaultFeedback({\n title,\n description,\n placeholder,\n required,\n minLength,\n value,\n onChange,\n onSubmit,\n classNames,\n}: FeedbackStepProps) {\n const [focused, setFocused] = useState(false)\n const hasMin = minLength > 0\n const isUnderMin = hasMin && value.length > 0 && value.length < minLength\n const isValid = !required || value.length >= minLength\n const placeholderText = placeholder ?? (hasMin ? `At least ${minLength} characters…` : 'Type your thoughts…')\n\n return (\n <div className={cn('ck-step ck-step-feedback', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n className={cn(\n 'ck-feedback-field',\n focused && 'ck-feedback-field--focused',\n isUnderMin && 'ck-feedback-field--invalid',\n )}\n >\n <textarea\n className={cn('ck-textarea', classNames?.textarea)}\n placeholder={placeholderText}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n rows={3}\n />\n {hasMin && (\n <div\n className={cn(\n 'ck-character-count',\n isUnderMin && 'ck-character-count--invalid',\n classNames?.characterCount,\n )}\n >\n {value.length} / {minLength}\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.submitButton)}\n onClick={onSubmit}\n disabled={!isValid}\n >\n Continue\n </button>\n </div>\n )\n}\n","import type { OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\n// Contact offers render no body by default — title and description carry the\n// pitch, the accept button triggers the consumer's handleContact callback\n// (which usually opens the offer's url). Override the slot to add an\n// avatar/SLA/etc. specific to your support team.\nexport function DefaultContactOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { discountPhrase } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultDiscountOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & {\n percentOff?: number\n amountOff?: number\n currency?: string\n durationInMonths?: number\n }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const phrase = discountPhrase(o)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-offer-discount\">\n <div className=\"ck-offer-discount-eyebrow\">Limited-time offer</div>\n <div className=\"ck-offer-discount-phrase\">{phrase}</div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { formatMonthDayLong } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultPauseOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { months: number }\n const max = Math.max(1, o.months)\n const [months, setMonths] = useState<number>(1)\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n const resume = new Date()\n resume.setMonth(resume.getMonth() + months)\n const resumeDate = formatMonthDayLong(resume)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card ck-pause-card', classNames?.card)}>\n <div className=\"ck-pause-eyebrow\">We'll see you back on</div>\n <div className=\"ck-pause-date\">{resumeDate}</div>\n <div className={cn('ck-pause-chips', classNames?.pauseSlider)}>\n {Array.from({ length: max }, (_, i) => i + 1).map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => setMonths(m)}\n className={cn('ck-pause-chip', m === months && 'ck-pause-chip--selected')}\n aria-pressed={m === months}\n >\n {m} {m === 1 ? 'month' : 'months'}\n </button>\n ))}\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept({ months })}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n )\n}\n","export function Checkmark({ color = 'currentColor', size = 14 }: { color?: string; size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","import { useState } from 'react'\nimport { formatPriceFromMinor } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps, PlanOption } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\nimport { Checkmark } from '../shared'\n\nexport function DefaultPlanChangeOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { plans?: PlanOption[] }\n const plans = o.plans ?? []\n const [selectedPlanId, setSelectedPlanId] = useState<string | null>(plans[0]?.id ?? null)\n const selectedPlan = plans.find((p) => p.id === selectedPlanId) ?? null\n\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const ctaLabel = isProcessing\n ? 'Processing...'\n : selectedPlan?.name\n ? `Switch to ${selectedPlan.name}`\n : offer.copy.cta\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-plan-grid\">\n {plans.map((plan) => {\n const interval = plan.duration?.interval ?? 'month'\n const currency = plan.amount.currency ?? 'USD'\n const isSelected = plan.id === selectedPlanId\n\n return (\n <button\n type=\"button\"\n key={plan.id}\n onClick={() => setSelectedPlanId(plan.id)}\n className={cn('ck-plan-card', isSelected && 'ck-plan-card--selected')}\n aria-pressed={isSelected}\n >\n <div className=\"ck-plan-name\">{plan.name ?? plan.id}</div>\n {plan.tagline && <div className=\"ck-plan-tagline\">{plan.tagline}</div>}\n\n <div className=\"ck-plan-price-row\">\n <span className=\"ck-plan-amount\">{formatPriceFromMinor(plan.amount.value, currency)}</span>\n <span className=\"ck-plan-period\">/{interval}</span>\n {plan.msrp && <span className=\"ck-plan-msrp\">{plan.msrp}</span>}\n </div>\n\n {plan.features && plan.features.length > 0 && (\n <ul className=\"ck-plan-features\">\n {plan.features.map((feature, i) => (\n <li key={`${plan.id}-feature-${i}`} className=\"ck-plan-feature\">\n <span className=\"ck-plan-feature-check\">\n <Checkmark size={11} />\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )}\n </button>\n )\n })}\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => selectedPlanId && onAccept({ planId: selectedPlanId })}\n disabled={isProcessing || !selectedPlanId}\n >\n {ctaLabel}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultRedirectOffer({ title, description, offer, onDecline, classNames }: OfferStepProps) {\n const url = (offer as OfferDecision & { url: string }).url\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details\">\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\" className=\"ck-redirect-link\">\n <span>{offer.copy.cta}</span>\n <ExternalIcon />\n </a>\n </div>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n\nfunction ExternalIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"ck-redirect-icon\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n )\n}\n","import { formatMonthDay } from '../../../core/format'\nimport type { OfferDecision, OfferStepProps } from '../../../core/types'\nimport { cn } from '../../../core/utils'\nimport { RichText } from '../../rich-text'\n\nexport function DefaultTrialExtensionOffer({\n title,\n description,\n offer,\n onAccept,\n onDecline,\n isProcessing,\n classNames,\n}: OfferStepProps) {\n const o = offer as OfferDecision & { days: number }\n const headline = title ?? offer.copy.headline\n const body = description ?? offer.copy.body\n const end = new Date()\n end.setDate(end.getDate() + o.days)\n const newEnd = formatMonthDay(end)\n\n return (\n <div className={cn('ck-step ck-step-offer', classNames?.root)}>\n {headline && <h2 className={cn('ck-step-title', classNames?.title)}>{headline}</h2>}\n {body && <RichText html={body} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className={cn('ck-offer-card', classNames?.card)}>\n <div className=\"ck-offer-details ck-trial-block\">\n <div className=\"ck-trial-badge\">\n <div className=\"ck-trial-days\">+{o.days}</div>\n <div className=\"ck-trial-unit\">{o.days === 1 ? 'day' : 'days'}</div>\n </div>\n <div>\n <div className=\"ck-trial-end-label\">New end date</div>\n <div className=\"ck-trial-end-date\">{newEnd}</div>\n </div>\n </div>\n <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.acceptButton)}\n onClick={() => onAccept()}\n disabled={isProcessing}\n >\n {isProcessing ? 'Processing...' : offer.copy.cta}\n </button>\n <button type=\"button\" className={cn('ck-button-link', classNames?.declineButton)} onClick={onDecline}>\n {offer.copy.declineCta}\n </button>\n </div>\n </div>\n )\n}\n","import type { ReactElement } from 'react'\nimport type { OfferStepProps } from '../../core/types'\nimport { DefaultContactOffer } from './offer/default-contact-offer'\nimport { DefaultDiscountOffer } from './offer/default-discount-offer'\nimport { DefaultPauseOffer } from './offer/default-pause-offer'\nimport { DefaultPlanChangeOffer } from './offer/default-plan-change-offer'\nimport { DefaultRedirectOffer } from './offer/default-redirect-offer'\nimport { DefaultTrialExtensionOffer } from './offer/default-trial-extension-offer'\n\n// Routes to the per-type component, which owns its full canvas. Two\n// override seams: replace one type via `components.PauseOffer` (etc.), or\n// take over the whole offer step via the `Offer` slot.\nexport function DefaultOffer(props: OfferStepProps) {\n const { offer, components } = props\n const Component = pickOfferComponent(offer.type, components)\n // Custom offer types are dispatched upstream against `customComponents`,\n // so an unknown type reaching this switcher is bad data.\n if (!Component) return null\n return (\n <Component\n // Remount on offer change so per-type selection state (pause months,\n // plan id) doesn't leak across reason switches.\n key={offer.decisionId ?? offer.type}\n {...props}\n />\n )\n}\n\nfunction pickOfferComponent(\n type: string,\n components: OfferStepProps['components'],\n): ((props: OfferStepProps) => ReactElement) | null {\n switch (type) {\n case 'discount':\n return components?.DiscountOffer ?? DefaultDiscountOffer\n case 'pause':\n return components?.PauseOffer ?? DefaultPauseOffer\n case 'trial_extension':\n return components?.TrialExtensionOffer ?? DefaultTrialExtensionOffer\n case 'plan_change':\n return components?.PlanChangeOffer ?? DefaultPlanChangeOffer\n case 'contact':\n return components?.ContactOffer ?? DefaultContactOffer\n case 'redirect':\n return components?.RedirectOffer ?? DefaultRedirectOffer\n default:\n return null\n }\n}\n","import type { SuccessStepProps } from '../../core/types'\nimport { cn } from '../../core/utils'\nimport { RichText } from '../rich-text'\nimport { Checkmark } from './shared'\n\nexport function DefaultSuccess({ title, description, onClose, classNames }: SuccessStepProps) {\n return (\n <div className={cn('ck-step ck-step-success', classNames?.root)}>\n <div className={cn('ck-success-icon', classNames?.icon)}>\n <Checkmark color=\"currentColor\" size={26} />\n </div>\n\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div className=\"ck-success-actions\">\n <button type=\"button\" className={cn('ck-button ck-button-primary', classNames?.closeButton)} onClick={onClose}>\n Done\n </button>\n </div>\n </div>\n )\n}\n","import { useCallback, useRef } from 'react'\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 tabIndex={isSelected ? 0 : -1}\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 onNext,\n classNames,\n components,\n}: SurveyStepProps) {\n const ReasonButton = components?.ReasonButton ?? DefaultReasonButton\n const listRef = useRef<HTMLDivElement>(null)\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n e.preventDefault()\n\n const currentIdx = reasons.findIndex((r) => r.id === selectedReason)\n let nextIdx: number\n if (e.key === 'ArrowDown') {\n nextIdx = currentIdx < reasons.length - 1 ? currentIdx + 1 : 0\n } else {\n nextIdx = currentIdx > 0 ? currentIdx - 1 : reasons.length - 1\n }\n onSelectReason(reasons[nextIdx].id)\n\n const buttons = listRef.current?.querySelectorAll<HTMLElement>('[role=\"radio\"]')\n buttons?.[nextIdx]?.focus()\n },\n [reasons, selectedReason, onSelectReason],\n )\n\n return (\n <div className={cn('ck-step ck-step-survey', classNames?.root)}>\n <h2 className={cn('ck-step-title', classNames?.title)}>{title}</h2>\n {description && <RichText html={description} className={cn('ck-step-description', classNames?.description)} />}\n\n <div\n ref={listRef}\n className={cn('ck-reason-list', classNames?.reasonList)}\n role=\"radiogroup\"\n aria-label={title}\n onKeyDown={handleKeyDown}\n >\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 <button\n type=\"button\"\n className={cn('ck-button ck-button-primary', classNames?.continueButton)}\n onClick={onNext}\n disabled={!selectedReason}\n >\n Continue\n </button>\n </div>\n )\n}\n\nexport { DefaultReasonButton }\n","import type { BackButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultBackButton({ onBack, className }: BackButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-back-button', className)} onClick={onBack}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12.5 4L6.5 10l6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span>Back</span>\n </button>\n )\n}\n","import type { CloseButtonProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\nexport function DefaultCloseButton({ onClose, className }: CloseButtonProps) {\n return (\n <button type=\"button\" className={cn('ck-close-button', className)} onClick={onClose} aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport type { ModalProps } from '../../core/types'\nimport { cn } from '../../core/utils'\n\n// Only traps visible, enabled elements\nfunction trapFocus(container: HTMLElement): () => void {\n const focusableSelector = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled)',\n 'textarea:not(:disabled)',\n 'select:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter(\n (el) => el.offsetParent !== null,\n ) // visible only\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n\n container.addEventListener('keydown', handleKeyDown)\n return () => container.removeEventListener('keydown', handleKeyDown)\n}\n\nexport function DefaultModal({ open, onClose, children, className }: 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=\"ck-overlay\"\n onClick={(e) => {\n if (e.target === overlayRef.current) onClose()\n }}\n >\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"ck-dialog-title\"\n tabIndex={-1}\n className={cn('ck-modal', className)}\n >\n {children}\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\ntype ColorScheme = 'light' | 'dark'\n\nconst query = '(prefers-color-scheme: dark)'\n\nfunction getSystemScheme(): ColorScheme {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light'\n return window.matchMedia(query).matches ? 'dark' : 'light'\n}\n\nexport function useColorScheme(preference?: 'auto' | 'light' | 'dark'): ColorScheme {\n const [system, setSystem] = useState(getSystemScheme)\n\n useEffect(() => {\n if (preference !== 'auto' || typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mql = window.matchMedia(query)\n const onChange = () => setSystem(mql.matches ? 'dark' : 'light')\n mql.addEventListener('change', onChange)\n return () => mql.removeEventListener('change', onChange)\n }, [preference])\n\n if (!preference || preference === 'light') return 'light'\n if (preference === 'dark') return 'dark'\n return system\n}\n","import { type ReactElement, useEffect } from 'react'\nimport type { CancelFlowMachine } from '../core/machine'\nimport type {\n CancelFlowProps,\n ComponentOverrides,\n ConfirmStep,\n CustomComponents,\n CustomOfferProps,\n CustomStepProps,\n FeedbackStep,\n FlowState,\n OfferStep,\n SuccessStep,\n SurveyStep,\n} from '../core/types'\nimport { appearanceToStyle, defaultTitles } from '../core/utils'\nimport { useCancelFlowMachine } from '../headless/use-cancel-flow-machine'\nimport { DefaultConfirm } from './steps/default-confirm'\nimport { DefaultFeedback } from './steps/default-feedback'\nimport { DefaultOffer } from './steps/default-offer'\nimport { DefaultSuccess } from './steps/default-success'\nimport { DefaultSurvey } from './steps/default-survey'\nimport { DefaultBackButton } from './structural/default-back-button'\nimport { DefaultCloseButton } from './structural/default-close-button'\nimport { DefaultModal } from './structural/default-modal'\nimport { useColorScheme } from './use-color-scheme'\n\nexport function CancelFlow(props: CancelFlowProps) {\n const { machine, state, isLoading, loadError, retry } = useCancelFlowMachine(props)\n\n if (isLoading || loadError) {\n return (\n <LoadStatus\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n onClose={props.onClose}\n isLoading={isLoading}\n loadError={loadError}\n onRetry={retry}\n />\n )\n }\n\n return (\n <FlowShell\n machine={machine}\n state={state}\n appearance={props.appearance}\n classNames={props.classNames}\n components={props.components}\n customComponents={props.customComponents}\n />\n )\n}\n\nfunction LoadStatus({\n appearance,\n classNames,\n components,\n onClose,\n isLoading,\n loadError,\n onRetry,\n}: {\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n onClose?: CancelFlowProps['onClose']\n isLoading: boolean\n loadError: Error | null\n onRetry: () => void\n}) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const handleClose = onClose ?? (() => {})\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={handleClose} className={classNames?.modal}>\n <CloseButton onClose={handleClose} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {isLoading && (\n <div className=\"ck-loading\" style={{ padding: '32px', textAlign: 'center' }}>\n <div\n className=\"ck-loading-spinner\"\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--ck-color-border, #e5e7eb)',\n borderTopColor: 'var(--ck-color-primary, #2563eb)',\n borderRadius: '50%',\n animation: 'ck-spin 0.6s linear infinite',\n margin: '0 auto 16px',\n }}\n />\n <p style={{ color: 'var(--ck-color-text-secondary, #6b7280)' }}>Loading your options...</p>\n </div>\n )}\n {loadError && (\n <div className=\"ck-error\" role=\"alert\" style={{ padding: '32px', textAlign: 'center' }}>\n <p className=\"ck-error-message\" style={{ marginBottom: 16 }}>\n We couldn't load your cancellation options. Please try again.\n </p>\n <button\n type=\"button\"\n className=\"ck-retry-button\"\n onClick={onRetry}\n style={{\n padding: '8px 20px',\n fontSize: 14,\n fontWeight: 600,\n background: 'var(--ck-color-primary, #2563eb)',\n color: '#fff',\n border: 'none',\n borderRadius: 'var(--ck-border-radius, 8px)',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </div>\n )}\n </div>\n </Modal>\n </div>\n )\n}\n\ninterface FlowShellProps {\n machine: CancelFlowMachine\n state: FlowState\n appearance?: CancelFlowProps['appearance']\n classNames?: CancelFlowProps['classNames']\n components?: CancelFlowProps['components']\n customComponents?: CustomComponents\n}\n\nfunction FlowShell({ machine, state, appearance, classNames, components, customComponents }: FlowShellProps) {\n const scheme = useColorScheme(appearance?.colorScheme)\n const appearanceStyle = appearanceToStyle(appearance)\n\n const Modal = components?.Modal ?? DefaultModal\n const CloseButton = components?.CloseButton ?? DefaultCloseButton\n const BackButton = components?.BackButton ?? DefaultBackButton\n\n return (\n <div className=\"ck-cancel-flow\" data-color-scheme={scheme} style={appearanceStyle}>\n <Modal open={true} onClose={machine.close} className={classNames?.modal}>\n <CloseButton onClose={machine.close} className={classNames?.closeButton} />\n <div className=\"ck-content\">\n {machine.canGoBack && <BackButton onBack={machine.back} className={classNames?.backButton} />}\n {state.error && (\n <div className=\"ck-error\" role=\"alert\">\n <p className=\"ck-error-message\">Something went wrong. Please try again.</p>\n </div>\n )}\n <StepRenderer state={state} machine={machine} components={components} customComponents={customComponents} />\n </div>\n </Modal>\n </div>\n )\n}\n\nfunction StepRenderer({\n state,\n machine,\n components,\n customComponents,\n}: {\n state: FlowState\n machine: CancelFlowMachine\n components?: Partial<ComponentOverrides>\n customComponents?: CustomComponents\n}) {\n const stepConfig = machine.currentStep\n\n switch (state.step) {\n case 'survey': {\n const Survey = components?.Survey ?? DefaultSurvey\n const config = stepConfig as SurveyStep | undefined\n return (\n <Survey\n title={config?.title ?? defaultTitles.survey}\n description={config?.description}\n reasons={machine.reasons}\n selectedReason={state.selectedReason}\n onSelectReason={machine.selectReason}\n onNext={machine.next}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'offer': {\n const offer = machine.currentOffer\n if (!offer) return null\n // Custom offer types (e.g. 'change-seats') match against\n // customComponents first; built-ins fall through to DefaultOffer.\n const CustomOffer = customComponents?.[offer.type] as ((props: CustomOfferProps) => ReactElement) | undefined\n if (CustomOffer) {\n return (\n <CustomOffer\n offer={offer}\n customer={state.customer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n />\n )\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 offer={offer}\n onAccept={machine.accept}\n onDecline={machine.decline}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n components={components}\n />\n )\n }\n\n case 'feedback': {\n const Feedback = components?.Feedback ?? DefaultFeedback\n const config = stepConfig as FeedbackStep | undefined\n return (\n <Feedback\n title={config?.title ?? defaultTitles.feedback}\n description={config?.description}\n placeholder={config?.placeholder}\n required={config?.required ?? false}\n minLength={config?.minLength ?? 0}\n value={state.feedback}\n onChange={machine.setFeedback}\n onSubmit={machine.next}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'confirm': {\n const Confirm = components?.Confirm ?? DefaultConfirm\n const config = stepConfig as ConfirmStep | undefined\n return (\n <Confirm\n title={config?.title ?? defaultTitles.confirm}\n description={config?.description}\n losses={config?.losses}\n lossesLabel={config?.lossesLabel}\n confirmLabel={config?.confirmLabel ?? 'Cancel subscription'}\n goBackLabel={config?.goBackLabel ?? 'Go back'}\n onConfirm={machine.cancel}\n onGoBack={machine.back}\n isProcessing={state.isProcessing}\n classNames={config?.classNames}\n />\n )\n }\n\n case 'success': {\n const Success = components?.Success ?? DefaultSuccess\n const config = stepConfig as SuccessStep | undefined\n const isSaved = state.outcome === 'saved'\n return (\n <Success\n outcome={state.outcome ?? 'cancelled'}\n offer={machine.currentOffer ?? undefined}\n title={\n isSaved ? (config?.savedTitle ?? 'Welcome back!') : (config?.cancelledTitle ?? 'Subscription cancelled')\n }\n description={\n isSaved\n ? (config?.savedDescription ?? 'Your offer has been applied.')\n : (config?.cancelledDescription ?? \"We're sorry to see you go.\")\n }\n onClose={machine.close}\n classNames={config?.classNames}\n />\n )\n }\n\n default: {\n const CustomStep = customComponents?.[state.step] as ((props: CustomStepProps) => ReactElement) | undefined\n\n if (!CustomStep) {\n return <UnregisteredStepFallback step={state.step} onSkip={machine.next} />\n }\n\n const config = stepConfig as CustomStepProps['step'] | undefined\n\n return (\n <CustomStep\n step={{\n type: state.step,\n title: config?.title,\n description: config?.description,\n data: config?.data,\n }}\n customer={state.customer}\n onNext={machine.next}\n onBack={machine.back}\n />\n )\n }\n }\n}\n\n// Skips a custom step the consumer didn't register a component for. The skip\n// 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"]}
|
|
@@ -227,6 +227,10 @@ interface ConfirmStep {
|
|
|
227
227
|
guid?: string;
|
|
228
228
|
title?: string;
|
|
229
229
|
description?: string;
|
|
230
|
+
/** Optional bullet list of what the customer is giving up. Rendered between the description and the period-end notice. */
|
|
231
|
+
losses?: string[];
|
|
232
|
+
/** Heading above the loss list. Defaults to "You'll lose access to:". */
|
|
233
|
+
lossesLabel?: string;
|
|
230
234
|
confirmLabel?: string;
|
|
231
235
|
goBackLabel?: string;
|
|
232
236
|
classNames?: ConfirmClassNames;
|
|
@@ -289,6 +293,10 @@ interface ConfirmClassNames {
|
|
|
289
293
|
root?: string;
|
|
290
294
|
title?: string;
|
|
291
295
|
description?: string;
|
|
296
|
+
lossList?: string;
|
|
297
|
+
lossLabel?: string;
|
|
298
|
+
lossItem?: string;
|
|
299
|
+
lossBullet?: string;
|
|
292
300
|
confirmButton?: string;
|
|
293
301
|
goBackButton?: string;
|
|
294
302
|
periodEndNotice?: string;
|
|
@@ -306,18 +314,55 @@ interface StructuralClassNames {
|
|
|
306
314
|
closeButton?: string;
|
|
307
315
|
backButton?: string;
|
|
308
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Typed surface for `appearance.variables`. Every key maps to a `--ck-*`
|
|
319
|
+
* CSS custom property. Consumers who need a token not in this list can
|
|
320
|
+
* still set the underlying CSS variable directly — these are the ones
|
|
321
|
+
* exposed through the typed JS API.
|
|
322
|
+
*/
|
|
309
323
|
interface AppearanceVariables {
|
|
310
|
-
colorPrimary: string;
|
|
311
|
-
colorPrimaryHover: string;
|
|
312
324
|
colorBackground: string;
|
|
325
|
+
colorSurface: string;
|
|
326
|
+
colorSurfaceMuted: string;
|
|
327
|
+
colorBorder: string;
|
|
328
|
+
colorBorderStrong: string;
|
|
313
329
|
colorText: string;
|
|
314
330
|
colorTextSecondary: string;
|
|
315
|
-
|
|
316
|
-
|
|
331
|
+
colorTextMuted: string;
|
|
332
|
+
colorPrimary: string;
|
|
333
|
+
colorPrimaryHover: string;
|
|
334
|
+
colorPrimarySoft: string;
|
|
317
335
|
colorSuccess: string;
|
|
336
|
+
colorSuccessSoft: string;
|
|
337
|
+
colorDanger: string;
|
|
338
|
+
colorDangerHover: string;
|
|
339
|
+
colorDangerSoft: string;
|
|
318
340
|
fontFamily: string;
|
|
341
|
+
fontFamilyMono: string;
|
|
342
|
+
/**
|
|
343
|
+
* Display face used by step titles and other visual headlines. Defaults
|
|
344
|
+
* to `fontFamily`. Set this when your brand uses a separate display face
|
|
345
|
+
* (Tiempos, Canela, etc.) for headings.
|
|
346
|
+
*/
|
|
347
|
+
fontFamilyDisplay: string;
|
|
319
348
|
fontSize: string;
|
|
349
|
+
/** Weight applied to the step title. Default `'600'`. */
|
|
350
|
+
fontWeightDisplay: string;
|
|
351
|
+
/** Letter spacing applied to the step title. Default `'-0.015em'`. */
|
|
352
|
+
letterSpacingDisplay: string;
|
|
320
353
|
borderRadius: string;
|
|
354
|
+
radiusSm: string;
|
|
355
|
+
radiusMd: string;
|
|
356
|
+
radiusLg: string;
|
|
357
|
+
radiusXl: string;
|
|
358
|
+
shadowModal: string;
|
|
359
|
+
shadowCard: string;
|
|
360
|
+
/**
|
|
361
|
+
* Color of the dim behind the modal. Accepts any CSS color (rgba,
|
|
362
|
+
* color-mix, etc.). Defaults to a tinted version of the primary color
|
|
363
|
+
* so any primary swap automatically re-tints the overlay.
|
|
364
|
+
*/
|
|
365
|
+
overlayColor: string;
|
|
321
366
|
}
|
|
322
367
|
interface Appearance {
|
|
323
368
|
/**
|
|
@@ -416,6 +461,8 @@ interface FeedbackStepProps {
|
|
|
416
461
|
interface ConfirmStepProps {
|
|
417
462
|
title: string;
|
|
418
463
|
description?: string;
|
|
464
|
+
losses?: string[];
|
|
465
|
+
lossesLabel?: string;
|
|
419
466
|
confirmLabel: string;
|
|
420
467
|
goBackLabel: string;
|
|
421
468
|
periodEnd?: string;
|
|
@@ -529,6 +576,8 @@ interface ResolvedStep {
|
|
|
529
576
|
placeholder?: string;
|
|
530
577
|
required?: boolean;
|
|
531
578
|
minLength?: number;
|
|
579
|
+
losses?: string[];
|
|
580
|
+
lossesLabel?: string;
|
|
532
581
|
savedTitle?: string;
|
|
533
582
|
savedDescription?: string;
|
|
534
583
|
cancelledTitle?: string;
|
|
@@ -227,6 +227,10 @@ interface ConfirmStep {
|
|
|
227
227
|
guid?: string;
|
|
228
228
|
title?: string;
|
|
229
229
|
description?: string;
|
|
230
|
+
/** Optional bullet list of what the customer is giving up. Rendered between the description and the period-end notice. */
|
|
231
|
+
losses?: string[];
|
|
232
|
+
/** Heading above the loss list. Defaults to "You'll lose access to:". */
|
|
233
|
+
lossesLabel?: string;
|
|
230
234
|
confirmLabel?: string;
|
|
231
235
|
goBackLabel?: string;
|
|
232
236
|
classNames?: ConfirmClassNames;
|
|
@@ -289,6 +293,10 @@ interface ConfirmClassNames {
|
|
|
289
293
|
root?: string;
|
|
290
294
|
title?: string;
|
|
291
295
|
description?: string;
|
|
296
|
+
lossList?: string;
|
|
297
|
+
lossLabel?: string;
|
|
298
|
+
lossItem?: string;
|
|
299
|
+
lossBullet?: string;
|
|
292
300
|
confirmButton?: string;
|
|
293
301
|
goBackButton?: string;
|
|
294
302
|
periodEndNotice?: string;
|
|
@@ -306,18 +314,55 @@ interface StructuralClassNames {
|
|
|
306
314
|
closeButton?: string;
|
|
307
315
|
backButton?: string;
|
|
308
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Typed surface for `appearance.variables`. Every key maps to a `--ck-*`
|
|
319
|
+
* CSS custom property. Consumers who need a token not in this list can
|
|
320
|
+
* still set the underlying CSS variable directly — these are the ones
|
|
321
|
+
* exposed through the typed JS API.
|
|
322
|
+
*/
|
|
309
323
|
interface AppearanceVariables {
|
|
310
|
-
colorPrimary: string;
|
|
311
|
-
colorPrimaryHover: string;
|
|
312
324
|
colorBackground: string;
|
|
325
|
+
colorSurface: string;
|
|
326
|
+
colorSurfaceMuted: string;
|
|
327
|
+
colorBorder: string;
|
|
328
|
+
colorBorderStrong: string;
|
|
313
329
|
colorText: string;
|
|
314
330
|
colorTextSecondary: string;
|
|
315
|
-
|
|
316
|
-
|
|
331
|
+
colorTextMuted: string;
|
|
332
|
+
colorPrimary: string;
|
|
333
|
+
colorPrimaryHover: string;
|
|
334
|
+
colorPrimarySoft: string;
|
|
317
335
|
colorSuccess: string;
|
|
336
|
+
colorSuccessSoft: string;
|
|
337
|
+
colorDanger: string;
|
|
338
|
+
colorDangerHover: string;
|
|
339
|
+
colorDangerSoft: string;
|
|
318
340
|
fontFamily: string;
|
|
341
|
+
fontFamilyMono: string;
|
|
342
|
+
/**
|
|
343
|
+
* Display face used by step titles and other visual headlines. Defaults
|
|
344
|
+
* to `fontFamily`. Set this when your brand uses a separate display face
|
|
345
|
+
* (Tiempos, Canela, etc.) for headings.
|
|
346
|
+
*/
|
|
347
|
+
fontFamilyDisplay: string;
|
|
319
348
|
fontSize: string;
|
|
349
|
+
/** Weight applied to the step title. Default `'600'`. */
|
|
350
|
+
fontWeightDisplay: string;
|
|
351
|
+
/** Letter spacing applied to the step title. Default `'-0.015em'`. */
|
|
352
|
+
letterSpacingDisplay: string;
|
|
320
353
|
borderRadius: string;
|
|
354
|
+
radiusSm: string;
|
|
355
|
+
radiusMd: string;
|
|
356
|
+
radiusLg: string;
|
|
357
|
+
radiusXl: string;
|
|
358
|
+
shadowModal: string;
|
|
359
|
+
shadowCard: string;
|
|
360
|
+
/**
|
|
361
|
+
* Color of the dim behind the modal. Accepts any CSS color (rgba,
|
|
362
|
+
* color-mix, etc.). Defaults to a tinted version of the primary color
|
|
363
|
+
* so any primary swap automatically re-tints the overlay.
|
|
364
|
+
*/
|
|
365
|
+
overlayColor: string;
|
|
321
366
|
}
|
|
322
367
|
interface Appearance {
|
|
323
368
|
/**
|
|
@@ -416,6 +461,8 @@ interface FeedbackStepProps {
|
|
|
416
461
|
interface ConfirmStepProps {
|
|
417
462
|
title: string;
|
|
418
463
|
description?: string;
|
|
464
|
+
losses?: string[];
|
|
465
|
+
lossesLabel?: string;
|
|
419
466
|
confirmLabel: string;
|
|
420
467
|
goBackLabel: string;
|
|
421
468
|
periodEnd?: string;
|
|
@@ -529,6 +576,8 @@ interface ResolvedStep {
|
|
|
529
576
|
placeholder?: string;
|
|
530
577
|
required?: boolean;
|
|
531
578
|
minLength?: number;
|
|
579
|
+
losses?: string[];
|
|
580
|
+
lossesLabel?: string;
|
|
532
581
|
savedTitle?: string;
|
|
533
582
|
savedDescription?: string;
|
|
534
583
|
cancelledTitle?: string;
|