@bravely-studios/account-web 0.3.10 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +159 -5
  2. package/dist/ActivationStateMachine.d.ts +1 -1
  3. package/dist/ActivationStateMachine.d.ts.map +1 -1
  4. package/dist/ActivationStateMachine.js +6 -2
  5. package/dist/ActivationStateMachine.js.map +1 -1
  6. package/dist/BravelyAccountManager.d.ts +108 -2
  7. package/dist/BravelyAccountManager.d.ts.map +1 -1
  8. package/dist/BravelyAccountManager.js +376 -29
  9. package/dist/BravelyAccountManager.js.map +1 -1
  10. package/dist/components/BravelyProviderButtons.d.ts.map +1 -1
  11. package/dist/components/BravelyProviderButtons.js.map +1 -1
  12. package/dist/components/BravelySignInScreen.d.ts +65 -0
  13. package/dist/components/BravelySignInScreen.d.ts.map +1 -0
  14. package/dist/components/BravelySignInScreen.js +156 -0
  15. package/dist/components/BravelySignInScreen.js.map +1 -0
  16. package/dist/components/OfferSlotGrid.d.ts +228 -0
  17. package/dist/components/OfferSlotGrid.d.ts.map +1 -0
  18. package/dist/components/OfferSlotGrid.js +554 -0
  19. package/dist/components/OfferSlotGrid.js.map +1 -0
  20. package/dist/index.d.ts +5 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/installMetrics.d.ts +40 -0
  25. package/dist/installMetrics.d.ts.map +1 -0
  26. package/dist/installMetrics.js +128 -0
  27. package/dist/installMetrics.js.map +1 -0
  28. package/dist/storage.d.ts +23 -10
  29. package/dist/storage.d.ts.map +1 -1
  30. package/dist/storage.js +52 -16
  31. package/dist/storage.js.map +1 -1
  32. package/dist/types.d.ts +8 -1
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js +2 -1
  35. package/dist/types.js.map +1 -1
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BravelyProviderButtons.d.ts","sourceRoot":"","sources":["../../src/components/BravelyProviderButtons.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAClC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,0BAA0B,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAyJD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,YAAY,CAkGd"}
1
+ {"version":3,"file":"BravelyProviderButtons.d.ts","sourceRoot":"","sources":["../../src/components/BravelyProviderButtons.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAClC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,0BAA0B,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAyJD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,YAAY,CAkGd"}
@@ -1 +1 @@
1
- {"version":3,"file":"BravelyProviderButtons.js","sourceRoot":"","sources":["../../src/components/BravelyProviderButtons.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BravelyProviderButtons.js","sourceRoot":"","sources":["../../src/components/BravelyProviderButtons.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type CSSProperties, type ReactElement, type ReactNode } from "react";
2
+ import { type BravelyProviderButtonStyle, type ProviderHint } from "./BravelyProviderButtons.js";
3
+ /** Locked copy for the offline (can't-reach) recoverable state. */
4
+ export declare const SIGN_IN_OFFLINE_HEADLINE = "Can't reach Bravely";
5
+ export declare const SIGN_IN_OFFLINE_BODY = "Check your connection and try again.";
6
+ export declare const SIGN_IN_OFFLINE_RETRY_LABEL = "Retry";
7
+ /**
8
+ * PER-STEP sizing (D3 v1.2, Jeff field feedback 2026-06-11): the sign-in
9
+ * step is COMPACT NATURAL (≈460-540 wide) and must never inherit offer
10
+ * geometry. On web that lands as this max-width cap on the screen's column —
11
+ * the component self-centers inside any full-viewport parent.
12
+ */
13
+ export declare const SIGN_IN_COMPACT_MAX_WIDTH = 480;
14
+ export interface BravelySignInScreenProps {
15
+ /** App display name (e.g. "Todoing.ly"). Rendered under the icon. */
16
+ appName: string;
17
+ /** App icon image URL (square; rendered at 72×72 with rounded corners). */
18
+ appIconSrc?: string;
19
+ /** Custom icon node — wins over `appIconSrc` when both are provided. */
20
+ icon?: ReactNode;
21
+ /** The ONE value-prop line. Exactly one sentence; no marketing stack. */
22
+ valueProp: string;
23
+ /** Theme + per-app accent (same contract as `BravelyProviderButtons`). */
24
+ style: BravelyProviderButtonStyle;
25
+ /** True while an auth attempt is in flight; disables and dims the picker. */
26
+ isBusy?: boolean;
27
+ /**
28
+ * Provider pick handler. Forward the hint to
29
+ * `manager.signIn({ provider })` so the hosted shell's provider-hint fast
30
+ * lane skips the duplicate picker.
31
+ */
32
+ onContinue: (provider: ProviderHint) => void;
33
+ /**
34
+ * Offline/can't-reach state (recoverable, screen one). When true the
35
+ * picker is replaced by the locked "Can't reach Bravely" copy + Retry.
36
+ */
37
+ offline?: boolean;
38
+ /** Retry handler for the offline state. */
39
+ onRetry?: () => void;
40
+ /**
41
+ * Fired exactly once per mount when the screen is presented. The host
42
+ * emits `login_screen_shown` (exact name) here with the `install_id`.
43
+ * Fires in the offline state too — an offline first screen is still a
44
+ * presented login screen (it closes first-screen drop-out blindness).
45
+ */
46
+ onShown?: () => void;
47
+ /** Privacy Policy footer link. Defaults to the Bravely hub page. */
48
+ privacyHref?: string;
49
+ /** Terms of Service footer link. Defaults to the Bravely hub page. */
50
+ termsHref?: string;
51
+ /** Optional class name applied to the outer container. */
52
+ className?: string;
53
+ /** Optional inline style applied to the outer container. */
54
+ containerStyle?: CSSProperties;
55
+ }
56
+ /**
57
+ * Render the canonical login-first screen. Centered single column — the
58
+ * whole screen is capped at the COMPACT sign-in-step width
59
+ * (`SIGN_IN_COMPACT_MAX_WIDTH`, 480px; D3 v1.2 per-step sizing) with the
60
+ * picker itself at 360px (the hosted-shell width) — vertically centered in
61
+ * its container. Give it a full-viewport parent; it self-centers and never
62
+ * spreads to offer geometry.
63
+ */
64
+ export declare function BravelySignInScreen(props: BravelySignInScreenProps): ReactElement;
65
+ //# sourceMappingURL=BravelySignInScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BravelySignInScreen.d.ts","sourceRoot":"","sources":["../../src/components/BravelySignInScreen.tsx"],"names":[],"mappings":"AAgDA,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjG,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAKrC,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAC3E,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,EAAE,0BAA0B,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CAmKjF"}
@@ -0,0 +1,156 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // `<BravelySignInScreen>` — the canonical login-first first screen for the
3
+ // Bravely web family (login-first cutover D1, spec `onboarding.login_first`).
4
+ //
5
+ // The FIRST screen on first launch, everywhere: app icon + name, ONE
6
+ // value-prop line, the locked `BravelyProviderButtons` picker
7
+ // [Sign in with Apple, Sign in with Google, Continue with email], and
8
+ // passive Privacy/Terms footer links. The screen IS both sign-in and
9
+ // sign-up — the server creates-or-matches the account (ADR 0014 hosted
10
+ // shell untouched).
11
+ //
12
+ // Hard rules (enforced by construction — do NOT add these as props):
13
+ // - NO skip, NO guest lane, NO free lane.
14
+ // - NO "already have an account" fork (no fork exists; one screen).
15
+ // - NO pre-auth welcome/survey/cross-sell content.
16
+ //
17
+ // Offline first launch (D1): pass `offline` to render the recoverable
18
+ // "Can't reach Bravely" state with a Retry button on screen one. Signed-in
19
+ // RELAUNCHES never hard-block offline — that's the manager's job (72h
20
+ // entitlement cache + tokens never wiped on transport failure); this screen
21
+ // only ever shows to signed-out users.
22
+ //
23
+ // Metrics (D6, spec `analytics.install_path`): `onShown` fires exactly once
24
+ // per mount — the host MUST emit `login_screen_shown` (exact name) there,
25
+ // carrying the `install_id` from `getOrMintInstallId()`. Do not strip it.
26
+ //
27
+ // Usage:
28
+ //
29
+ // ```tsx
30
+ // import {
31
+ // BravelySignInScreen,
32
+ // getOrMintInstallId,
33
+ // } from "@bravely-studios/account-web";
34
+ //
35
+ // <BravelySignInScreen
36
+ // appName="Todoing.ly"
37
+ // appIconSrc="/icon-256.png"
38
+ // valueProp="Every task, every device, always in sync."
39
+ // style={{ variant: "dark", accent: "#3B6EF0" }}
40
+ // isBusy={isAuthorizing}
41
+ // onContinue={(provider) => manager.signIn({ provider })}
42
+ // onShown={async () => {
43
+ // posthog.capture("login_screen_shown", {
44
+ // install_id: await getOrMintInstallId(),
45
+ // });
46
+ // }}
47
+ // />
48
+ // ```
49
+ import { useEffect, useRef } from "react";
50
+ import { BravelyProviderButtons, } from "./BravelyProviderButtons.js";
51
+ const SYSTEM_FONT = '-apple-system, BlinkMacSystemFont, "Segoe UI Variable", "Segoe UI", Roboto, "Inter", "Helvetica Neue", Arial, sans-serif';
52
+ /** Locked copy for the offline (can't-reach) recoverable state. */
53
+ export const SIGN_IN_OFFLINE_HEADLINE = "Can't reach Bravely";
54
+ export const SIGN_IN_OFFLINE_BODY = "Check your connection and try again.";
55
+ export const SIGN_IN_OFFLINE_RETRY_LABEL = "Retry";
56
+ /**
57
+ * PER-STEP sizing (D3 v1.2, Jeff field feedback 2026-06-11): the sign-in
58
+ * step is COMPACT NATURAL (≈460-540 wide) and must never inherit offer
59
+ * geometry. On web that lands as this max-width cap on the screen's column —
60
+ * the component self-centers inside any full-viewport parent.
61
+ */
62
+ export const SIGN_IN_COMPACT_MAX_WIDTH = 480;
63
+ const DEFAULT_PRIVACY_HREF = "https://bravely.dev/privacy";
64
+ const DEFAULT_TERMS_HREF = "https://bravely.dev/terms";
65
+ /**
66
+ * Render the canonical login-first screen. Centered single column — the
67
+ * whole screen is capped at the COMPACT sign-in-step width
68
+ * (`SIGN_IN_COMPACT_MAX_WIDTH`, 480px; D3 v1.2 per-step sizing) with the
69
+ * picker itself at 360px (the hosted-shell width) — vertically centered in
70
+ * its container. Give it a full-viewport parent; it self-centers and never
71
+ * spreads to offer geometry.
72
+ */
73
+ export function BravelySignInScreen(props) {
74
+ const { appName, appIconSrc, icon, valueProp, style, isBusy = false, onContinue, offline = false, onRetry, onShown, privacyHref = DEFAULT_PRIVACY_HREF, termsHref = DEFAULT_TERMS_HREF, className, containerStyle, } = props;
75
+ const isLight = style.variant === "light";
76
+ const fg = isLight ? "#1f1a16" : "#f5f3ff";
77
+ const muted = isLight ? "rgba(31, 26, 22, 0.62)" : "rgba(245, 243, 255, 0.6)";
78
+ // `login_screen_shown` seam — once per mount, guarded against StrictMode
79
+ // double-invocation of effects.
80
+ const shownRef = useRef(false);
81
+ useEffect(() => {
82
+ if (shownRef.current)
83
+ return;
84
+ shownRef.current = true;
85
+ onShown?.();
86
+ // Mount-only by design; `onShown` identity changes must not re-fire.
87
+ }, []);
88
+ const container = {
89
+ boxSizing: "border-box",
90
+ display: "flex",
91
+ flexDirection: "column",
92
+ alignItems: "center",
93
+ justifyContent: "center",
94
+ gap: 0,
95
+ width: "100%",
96
+ // Per-step sizing (D3 v1.2): sign-in renders compact natural — never
97
+ // offer-page geometry. Centered horizontally in wide parents.
98
+ maxWidth: SIGN_IN_COMPACT_MAX_WIDTH,
99
+ marginLeft: "auto",
100
+ marginRight: "auto",
101
+ minHeight: "100%",
102
+ padding: "48px 24px",
103
+ fontFamily: SYSTEM_FONT,
104
+ color: fg,
105
+ textAlign: "center",
106
+ ...containerStyle,
107
+ };
108
+ const linkStyle = {
109
+ color: muted,
110
+ textDecoration: "underline",
111
+ textUnderlineOffset: 3,
112
+ fontSize: 12.5,
113
+ fontWeight: 500,
114
+ };
115
+ return (_jsxs("div", { className: className, style: container, "data-bravely-component": "sign-in-screen", "data-variant": style.variant, children: [icon ??
116
+ (appIconSrc ? (_jsx("img", { src: appIconSrc, alt: `${appName} icon`, width: 72, height: 72, style: { width: 72, height: 72, borderRadius: 16, display: "block" } })) : null), _jsx("h1", { style: {
117
+ margin: "16px 0 0",
118
+ fontSize: 26,
119
+ fontWeight: 800,
120
+ letterSpacing: "-0.02em",
121
+ lineHeight: 1.2,
122
+ }, children: appName }), _jsx("p", { "data-bravely-sign-in": "value-prop", style: {
123
+ margin: "10px 0 0",
124
+ maxWidth: 360,
125
+ fontSize: 15,
126
+ fontWeight: 400,
127
+ lineHeight: 1.45,
128
+ color: muted,
129
+ }, children: valueProp }), _jsx("div", { style: { width: "100%", maxWidth: 360, marginTop: 28 }, children: offline ? (_jsxs("div", { "data-bravely-sign-in": "offline", style: { display: "flex", flexDirection: "column", gap: 10 }, children: [_jsx("div", { style: { fontSize: 16, fontWeight: 700, color: fg }, children: SIGN_IN_OFFLINE_HEADLINE }), _jsx("div", { style: { fontSize: 13.5, color: muted }, children: SIGN_IN_OFFLINE_BODY }), _jsx("button", { type: "button", onClick: () => onRetry?.(), "aria-label": SIGN_IN_OFFLINE_RETRY_LABEL, "data-bravely-sign-in": "retry", style: {
130
+ boxSizing: "border-box",
131
+ width: "100%",
132
+ minHeight: 48,
133
+ marginTop: 6,
134
+ padding: "0 14px",
135
+ display: "inline-flex",
136
+ alignItems: "center",
137
+ justifyContent: "center",
138
+ borderRadius: 12,
139
+ border: "1px solid transparent",
140
+ background: style.accent,
141
+ color: isLight ? "#ffffff" : "#0b0716",
142
+ fontFamily: SYSTEM_FONT,
143
+ fontSize: 14,
144
+ fontWeight: 600,
145
+ cursor: "pointer",
146
+ appearance: "none",
147
+ WebkitAppearance: "none",
148
+ }, children: SIGN_IN_OFFLINE_RETRY_LABEL })] })) : (_jsx(BravelyProviderButtons, { style: style, isBusy: isBusy, onTap: onContinue })) }), _jsxs("footer", { "data-bravely-sign-in": "legal", style: {
149
+ marginTop: 24,
150
+ display: "flex",
151
+ gap: 16,
152
+ alignItems: "center",
153
+ justifyContent: "center",
154
+ }, children: [_jsx("a", { href: privacyHref, target: "_blank", rel: "noreferrer", style: linkStyle, children: "Privacy Policy" }), _jsx("a", { href: termsHref, target: "_blank", rel: "noreferrer", style: linkStyle, children: "Terms of Service" })] })] }));
155
+ }
156
+ //# sourceMappingURL=BravelySignInScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BravelySignInScreen.js","sourceRoot":"","sources":["../../src/components/BravelySignInScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import { type CSSProperties, type ReactElement, type ReactNode } from "react";
2
+ import type { CheckoutPlan } from "../types.js";
3
+ /**
4
+ * The three offer slots. Maps 1:1 to the `slot` parameter the
5
+ * `/api/payfirst/checkout-sessions` endpoint accepts.
6
+ */
7
+ export type OfferSlotKind = "HOOK" | "GSO" | "FRONT_LTV";
8
+ /**
9
+ * App "value application" type. RVA HOOK = recurring $0/7d → $9.99/mo trial;
10
+ * IVA HOOK = $19.99 one-time, no trial.
11
+ */
12
+ export type OfferAppType = "RVA" | "IVA";
13
+ /** CTA visual variant: ghost (HOOK), loud (GSO hero), solid (FRONT_LTV). */
14
+ export type OfferCtaVariant = "ghost" | "loud" | "solid";
15
+ /** One styled text segment; `em` tints it accent or cyan (bold). */
16
+ export interface OfferRichSeg {
17
+ text: string;
18
+ em?: "accent" | "cyan";
19
+ }
20
+ export type OfferRich = OfferRichSeg[];
21
+ /** One bonus-bundle example app row. */
22
+ export interface OfferBonusApp {
23
+ name: string;
24
+ note: string;
25
+ slug: string;
26
+ /**
27
+ * Optional icon URL (host-served). When absent the grid renders an
28
+ * accent-tinted letter monogram — the package bundles no image assets.
29
+ */
30
+ iconSrc?: string;
31
+ }
32
+ /** The rich bonus block on the GSO / FRONT_LTV cards. */
33
+ export interface OfferBonus {
34
+ label: string;
35
+ headline: OfferRich;
36
+ apps: OfferBonusApp[];
37
+ more: string;
38
+ value: string;
39
+ footer: string;
40
+ }
41
+ /** One rendered slot card's locked copy. */
42
+ export interface OfferSlotCopy {
43
+ kind: OfferSlotKind;
44
+ badge?: string;
45
+ /** Bare plan name ("Monthly" / "Bravely Premium" — never "Name — desc"). */
46
+ name: string;
47
+ /** Muted plan-word descriptor beside the name ("Annual" / "Lifetime"). */
48
+ nameSub?: string;
49
+ /** Muted tagline under the name (locked value-stack line on bundle slots). */
50
+ tagline?: string;
51
+ priceBig: string;
52
+ priceUnit?: string;
53
+ priceSub?: OfferRich;
54
+ bullets: string[];
55
+ /** Guarantee badge line; absent on the RVA HOOK by design. */
56
+ guarantee?: string;
57
+ bonus?: OfferBonus;
58
+ nudge?: OfferRich;
59
+ cta: OfferCtaVariant;
60
+ ctaLabel: string;
61
+ highlighted?: boolean;
62
+ }
63
+ /**
64
+ * The per-app accent system, mirroring the Swift `OfferTheme` / web
65
+ * `LandingTheme`: `accent` paints eyebrow/em/ghost-border/solid-CTA;
66
+ * `accentStrong` paints the GSO border + CTA gradient end + pills; `cyan`
67
+ * (the app's SECONDARY color) paints the GSO price + bullet checks +
68
+ * Best-Value badge + bonus border + value pill + loud-CTA start.
69
+ */
70
+ export interface OfferTheme {
71
+ accent: string;
72
+ accentStrong: string;
73
+ cyan: string;
74
+ }
75
+ /** The 30-day guarantee label. */
76
+ export declare const OFFER_GUARANTEE_LINE = "30-Day Money-Back Guarantee";
77
+ /** Hover/disclosure tooltip for the guarantee badge. */
78
+ export declare const OFFER_GUARANTEE_TOOLTIP = "I-Hate-Your-Apps-Give-Me-My-Money-Back: 30 days, no questions.";
79
+ /** Footer note under the whole grid. */
80
+ export declare const OFFER_FOOTER_NOTE = "Bravely Studios \u00B7 one account, every device.";
81
+ /** Footer line inside both bonus blocks. */
82
+ export declare const OFFER_BONUS_FOOTER = "One sign-in \u00B7 instant unlock \u00B7 sync everywhere";
83
+ /**
84
+ * The LOCKED value-stack-dominant tagline (2026-06-01) rendered under the
85
+ * plan name on BOTH bundle slots. Verbatim from `bravely-offer-structure.md`.
86
+ */
87
+ export declare const OFFER_BUNDLE_TAGLINE = "all 9 apps, every platform, every device, + the bonus bundle";
88
+ /** Per-app offer themes for the 9 production utilities. */
89
+ export declare const OFFER_THEMES: Record<string, OfferTheme>;
90
+ /**
91
+ * Resolve a theme from the canonical app slug. Falls back to Scry's
92
+ * purple/cyan if the slug is unknown (mirrors the Swift lib).
93
+ */
94
+ export declare function offerThemeForSlug(slug: string): OfferTheme;
95
+ /**
96
+ * The catalog plan token `openCheckout()` should send for a slot. Slot-1
97
+ * tokens are interval-true per the 2026-06-10 catalog rename: `monthly` for
98
+ * RVA apps, `onetime` for IVA apps (the server also aliases legacy tokens,
99
+ * but new clients send the canonical key). GSO/FRONT_LTV resolve server-side
100
+ * to the universal bundle plans.
101
+ */
102
+ export declare function planTokenForSlot(slot: OfferSlotKind, type: OfferAppType): CheckoutPlan;
103
+ /** Telemetry value per the count-funnel spec (`offer_slot` property). */
104
+ export declare function telemetryValueForSlot(slot: OfferSlotKind): "hook" | "gso" | "ltv";
105
+ /**
106
+ * The canonical bonus-bundle example apps, in order: Scry → PrintScreen.ly →
107
+ * ASAPDF, "+ 5 more". Collision rule: if `<app>` IS one of those 3, drop it
108
+ * and append Diskaroo so the customer always sees 3 *other* apps.
109
+ */
110
+ export declare function bonusAppsForSlug(slug: string): OfferBonusApp[];
111
+ export interface BuildOfferSlotsArgs {
112
+ /** Display name (e.g. "Scry", "PrintScreen.ly"). */
113
+ appName: string;
114
+ /** Canonical slug — drives the bonus-app collision rule + per-app bullets. */
115
+ appSlug: string;
116
+ /** `RVA` (trial monthly HOOK) or `IVA` (one-time HOOK). */
117
+ type: OfferAppType;
118
+ /** Extra HOOK bullets (between "Full Pro access" and "Cancel anytime"). */
119
+ extraHookBullets?: string[];
120
+ /**
121
+ * Per-bonus-app icon URL resolver (host-served assets). Absent ⇒ letter
122
+ * monograms.
123
+ */
124
+ bonusIconSrc?: (slug: string) => string | undefined;
125
+ }
126
+ /**
127
+ * Build the canonical 3-slot offer copy — the verbatim strings from the
128
+ * locked offer structure, so every app's purchase surface reads identically
129
+ * (only `<App>` swaps). Render a subset by filtering the result (provisioned
130
+ * slots only).
131
+ */
132
+ export declare function buildOfferSlots(args: BuildOfferSlotsArgs): OfferSlotCopy[];
133
+ /** Below this viewport width the cards stack single-column + scroll. */
134
+ export declare const OFFER_FIT_MIN_WIDTH = 901;
135
+ /** Scale clamp floor — below this the scale floors and the page scrolls. */
136
+ export declare const OFFER_FIT_MIN_SCALE = 0.5;
137
+ /** Scale clamp ceiling — scale-up allowed to fill large displays. */
138
+ export declare const OFFER_FIT_MAX_SCALE = 3;
139
+ /**
140
+ * @deprecated v1.2 (2026-06-11): the height-first formula replaced the
141
+ * fixed-pad math with the 0.92/0.95 work-area fractions. Kept exported so
142
+ * existing imports keep compiling; `computeOfferFit` ignores `pad` now.
143
+ */
144
+ export declare const OFFER_FIT_PAD = 24;
145
+ /** HEIGHT-FIRST (v1.2): the offer fills this fraction of the viewport height. */
146
+ export declare const OFFER_FIT_HEIGHT_FRACTION = 0.92;
147
+ /** HEIGHT-FIRST (v1.2): scaled content width is capped at this viewport fraction. */
148
+ export declare const OFFER_FIT_WIDTH_CAP_FRACTION = 0.95;
149
+ /** The grid's natural design width (px) used as the scale-fit basis. */
150
+ export declare const OFFER_NATURAL_WIDTH = 1200;
151
+ export interface OfferFitInput {
152
+ viewportWidth: number;
153
+ viewportHeight: number;
154
+ naturalWidth: number;
155
+ naturalHeight: number;
156
+ /**
157
+ * @deprecated v1.2: ignored — breathing room now comes from the
158
+ * height/width fractions (0.92 / 0.95), not a fixed pixel pad.
159
+ */
160
+ pad?: number;
161
+ }
162
+ export type OfferFitResult = {
163
+ mode: "stacked";
164
+ } | {
165
+ mode: "fit";
166
+ /** Uniform scale, clamped to [0.5, 3.0]. */
167
+ scale: number;
168
+ /** True when the raw fit was below the 0.5 floor ⇒ page scrolls. */
169
+ scrollFallback: boolean;
170
+ /**
171
+ * True when the 0.95-viewport width cap bound the scale (otherwise the
172
+ * scaled grid fills the 0.92 height target — the height-first default).
173
+ */
174
+ widthCapBound: boolean;
175
+ };
176
+ /**
177
+ * The canonical fit formula (plan §4, v1.2 HEIGHT-FIRST, Jeff field feedback
178
+ * 2026-06-11): the scale is chosen so the scaled grid FILLS
179
+ * `viewportHeight × 0.92`; the width only binds as a cap — if the scaled
180
+ * natural width would exceed `viewportWidth × 0.95`, the scale drops to the
181
+ * min of both axes. Clamped to [0.5, 3.0]; below 0.5 the scale floors and
182
+ * the surface falls back to scrolling — never clipping. Pure so tests can
183
+ * pin the math.
184
+ *
185
+ * The single-arg signature is unchanged from v1.1 and is the offer-step
186
+ * formula (the sign-in step never scales — it renders compact natural,
187
+ * see `SIGN_IN_COMPACT_MAX_WIDTH`).
188
+ */
189
+ export declare function computeOfferFit(input: OfferFitInput): OfferFitResult;
190
+ export interface OfferSlotGridProps {
191
+ /**
192
+ * The slot cards to render — EXACTLY these, in order (provisioned slots
193
+ * only). Build with `buildOfferSlots()` and filter as needed.
194
+ */
195
+ slots: OfferSlotCopy[];
196
+ /** Per-app theme (`offerThemeForSlug(appSlug)`). */
197
+ theme: OfferTheme;
198
+ /** CTA click — the `slot_selected` / checkout entry point. */
199
+ onSelect: (slot: OfferSlotKind) => void;
200
+ /** Fired once per rendered slot per mount — the `slot_viewed` hook. */
201
+ onSlotViewed?: (slot: OfferSlotKind) => void;
202
+ /** Optional content rendered inside the fitted region, above the grid. */
203
+ header?: ReactNode;
204
+ /**
205
+ * Footer note under the grid. Defaults to the locked
206
+ * `OFFER_FOOTER_NOTE`; pass `null` to omit.
207
+ */
208
+ footerNote?: string | null;
209
+ /** Guarantee badge tooltip. Defaults to the locked copy. */
210
+ guaranteeTooltip?: string;
211
+ /**
212
+ * Scale the content to the viewport (default true). Disable only for
213
+ * embedded/preview contexts; the offer PAGE must keep it on.
214
+ */
215
+ fitToViewport?: boolean;
216
+ /** Natural design width for the fit basis. Default 1200. */
217
+ naturalWidth?: number;
218
+ /** True while a checkout session is being minted; disables the CTAs. */
219
+ isBusy?: boolean;
220
+ className?: string;
221
+ containerStyle?: CSSProperties;
222
+ }
223
+ /**
224
+ * Render the canonical 3-up offer grid with full-viewport scale-to-fit.
225
+ * Mount it on a near-full-viewport surface; it owns its own scaling.
226
+ */
227
+ export declare function OfferSlotGrid(props: OfferSlotGridProps): ReactElement;
228
+ //# sourceMappingURL=OfferSlotGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OfferSlotGrid.d.ts","sourceRoot":"","sources":["../../src/components/OfferSlotGrid.tsx"],"names":[],"mappings":"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"}