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