@getrheo/flow-runtime 1.0.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/agentPrompt/index.d.ts +72 -0
- package/dist/agentPrompt/index.js +739 -0
- package/dist/agentPrompt/index.js.map +1 -0
- package/dist/aiFlowGenerationMerge.d.ts +32 -0
- package/dist/aiFlowGenerationMerge.js +120 -0
- package/dist/aiFlowGenerationMerge.js.map +1 -0
- package/dist/animations.d.ts +110 -0
- package/dist/animations.js +312 -0
- package/dist/animations.js.map +1 -0
- package/dist/assignment.d.ts +7 -0
- package/dist/assignment.js +25 -0
- package/dist/assignment.js.map +1 -0
- package/dist/brandGradient.d.ts +57 -0
- package/dist/brandGradient.js +137 -0
- package/dist/brandGradient.js.map +1 -0
- package/dist/brandGradientManifestIssues.d.ts +11 -0
- package/dist/brandGradientManifestIssues.js +302 -0
- package/dist/brandGradientManifestIssues.js.map +1 -0
- package/dist/buildFlowPreview.d.ts +7 -0
- package/dist/buildFlowPreview.js +81 -0
- package/dist/buildFlowPreview.js.map +1 -0
- package/dist/buttonVariantChrome.d.ts +26 -0
- package/dist/buttonVariantChrome.js +59 -0
- package/dist/buttonVariantChrome.js.map +1 -0
- package/dist/checkboxGlyphStyle.d.ts +31 -0
- package/dist/checkboxGlyphStyle.js +241 -0
- package/dist/checkboxGlyphStyle.js.map +1 -0
- package/dist/choiceOptionSelection.d.ts +11 -0
- package/dist/choiceOptionSelection.js +120 -0
- package/dist/choiceOptionSelection.js.map +1 -0
- package/dist/colorAlpha.d.ts +8 -0
- package/dist/colorAlpha.js +48 -0
- package/dist/colorAlpha.js.map +1 -0
- package/dist/counterLayer.d.ts +42 -0
- package/dist/counterLayer.js +95 -0
- package/dist/counterLayer.js.map +1 -0
- package/dist/decisionEval.d.ts +27 -0
- package/dist/decisionEval.js +197 -0
- package/dist/decisionEval.js.map +1 -0
- package/dist/dropShadow.d.ts +26 -0
- package/dist/dropShadow.js +76 -0
- package/dist/dropShadow.js.map +1 -0
- package/dist/emailPasswordAuthValidation.d.ts +16 -0
- package/dist/emailPasswordAuthValidation.js +25 -0
- package/dist/emailPasswordAuthValidation.js.map +1 -0
- package/dist/flowBuilderRules.d.ts +15 -0
- package/dist/flowBuilderRules.js +368 -0
- package/dist/flowBuilderRules.js.map +1 -0
- package/dist/flowGraph.d.ts +19 -0
- package/dist/flowGraph.js +373 -0
- package/dist/flowGraph.js.map +1 -0
- package/dist/hyperlinkLabel.d.ts +19 -0
- package/dist/hyperlinkLabel.js +232 -0
- package/dist/hyperlinkLabel.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +4200 -0
- package/dist/index.js.map +1 -0
- package/dist/interpolateTemplate.d.ts +44 -0
- package/dist/interpolateTemplate.js +188 -0
- package/dist/interpolateTemplate.js.map +1 -0
- package/dist/layerRotate.d.ts +10 -0
- package/dist/layerRotate.js +9 -0
- package/dist/layerRotate.js.map +1 -0
- package/dist/layerTypography.d.ts +36 -0
- package/dist/layerTypography.js +68 -0
- package/dist/layerTypography.js.map +1 -0
- package/dist/layers.d.ts +69 -0
- package/dist/layers.js +257 -0
- package/dist/layers.js.map +1 -0
- package/dist/layout/index.d.ts +57 -0
- package/dist/layout/index.js +151 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/manifestBillingSlice.d.ts +17 -0
- package/dist/manifestBillingSlice.js +102 -0
- package/dist/manifestBillingSlice.js.map +1 -0
- package/dist/prepareAiGeneratedScreen.d.ts +17 -0
- package/dist/prepareAiGeneratedScreen.js +99 -0
- package/dist/prepareAiGeneratedScreen.js.map +1 -0
- package/dist/publish-exports.json +166 -0
- package/dist/responsive/breakpoints.d.ts +34 -0
- package/dist/responsive/breakpoints.js +52 -0
- package/dist/responsive/breakpoints.js.map +1 -0
- package/dist/responsive/index.d.ts +8 -0
- package/dist/responsive/index.js +307 -0
- package/dist/responsive/index.js.map +1 -0
- package/dist/responsive/layerResolve.d.ts +43 -0
- package/dist/responsive/layerResolve.js +168 -0
- package/dist/responsive/layerResolve.js.map +1 -0
- package/dist/responsive/merge.d.ts +19 -0
- package/dist/responsive/merge.js +74 -0
- package/dist/responsive/merge.js.map +1 -0
- package/dist/responsive/previewSafeAreaInsets.d.ts +14 -0
- package/dist/responsive/previewSafeAreaInsets.js +24 -0
- package/dist/responsive/previewSafeAreaInsets.js.map +1 -0
- package/dist/responsive/screenContainerResolve.d.ts +11 -0
- package/dist/responsive/screenContainerResolve.js +122 -0
- package/dist/responsive/screenContainerResolve.js.map +1 -0
- package/dist/responsive/screenShellInsets.d.ts +11 -0
- package/dist/responsive/screenShellInsets.js +26 -0
- package/dist/responsive/screenShellInsets.js.map +1 -0
- package/dist/restingMotion.d.ts +167 -0
- package/dist/restingMotion.js +484 -0
- package/dist/restingMotion.js.map +1 -0
- package/dist/rheoAgentManifestMerge.d.ts +33 -0
- package/dist/rheoAgentManifestMerge.js +55 -0
- package/dist/rheoAgentManifestMerge.js.map +1 -0
- package/dist/scaleInputStyle.d.ts +35 -0
- package/dist/scaleInputStyle.js +77 -0
- package/dist/scaleInputStyle.js.map +1 -0
- package/dist/scaleValidation.d.ts +9 -0
- package/dist/scaleValidation.js +21 -0
- package/dist/scaleValidation.js.map +1 -0
- package/dist/stateMachine.d.ts +105 -0
- package/dist/stateMachine.js +674 -0
- package/dist/stateMachine.js.map +1 -0
- package/dist/stepResponse-BXgoZ7o-.d.ts +112 -0
- package/dist/textInputValidation.d.ts +14 -0
- package/dist/textInputValidation.js +46 -0
- package/dist/textInputValidation.js.map +1 -0
- package/dist/translationPlaceholders.d.ts +9 -0
- package/dist/translationPlaceholders.js +52 -0
- package/dist/translationPlaceholders.js.map +1 -0
- package/dist/validation.d.ts +31 -0
- package/dist/validation.js +233 -0
- package/dist/validation.js.map +1 -0
- package/package.json +242 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stateMachine/stepResponse.ts","../src/stateMachine/flowSession.ts","../src/brandGradient.ts","../src/layers.ts","../src/decisionEval.ts","../src/stateMachine/graphLanding.ts","../src/stateMachine/flowAdvance.ts","../src/stateMachine/flowTerminal.ts","../src/validation.ts","../src/flowBuilderRules.ts","../src/assignment.ts","../src/brandGradientManifestIssues.ts","../src/colorAlpha.ts","../src/animations.ts","../src/restingMotion/restingMotionEntries.ts","../src/restingMotion/restingMotionTimeline.ts","../src/restingMotion/restingMotionEffects.ts","../src/dropShadow.ts","../src/scaleValidation.ts","../src/textInputValidation.ts","../src/emailPasswordAuthValidation.ts","../src/interpolateTemplate.ts","../src/flowGraph.ts","../src/buildFlowPreview.ts","../src/counterLayer.ts","../src/translationPlaceholders.ts","../src/aiFlowGenerationMerge.ts","../src/rheoAgentManifestMerge.ts","../src/prepareAiGeneratedScreen.ts","../src/buttonVariantChrome.ts","../src/manifestBillingSlice.ts","../src/hyperlinkLabel.ts","../src/layerTypography.ts","../src/layerRotate.ts","../src/checkboxGlyphStyle.ts","../src/scaleInputStyle.ts","../src/layout/scalarLayoutDefaults.ts","../src/responsive/breakpoints.ts","../src/responsive/merge.ts","../src/responsive/layerResolve.ts","../src/choiceOptionSelection.ts","../src/layout/authoringLayoutDefaults.ts","../src/layout/normalizeLayerLayout.ts","../src/layout/stackFlexGrow.ts","../src/responsive/screenContainerResolve.ts","../src/responsive/previewSafeAreaInsets.ts","../src/responsive/screenShellInsets.ts"],"names":["nextResponses","landing","key","oauthLoginResponseKey","emailPasswordAuthResponseKey","nextRaw","EXTERNAL_SURFACE_NO_NEXT","OS_PERMISSION_OUTCOME_END","OS_PERMISSION_OUTCOME_CONTINUE","isInputLayer","s","t","x","y","EMAIL_RE","FIELD_KEY_RE","resolveLocalizedText","screens","merged","deepMergeStyle"],"mappings":"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","file":"index.js","sourcesContent":["\n\nimport type {\n AppReviewOutcome,\n EmailPasswordAuthMode,\n OsPermissionKey,\n OAuthLoginProvider,\n PermissionOutcome,\n} from '@getrheo/contracts/layers';\nimport type {\n NormalizedSurfaceOutcome,\n} from '@getrheo/contracts/externalSurfaces';\n\n/** Reserved-key patch the SDK can merge into the session when an external surface resolves. */\nexport type SurfaceSdkKeyPatch = Record<string, string | number | boolean>;\n\n/** Stable response key used to store an external surface outcome for analytics. */\nexport const externalSurfaceResponseKey = (nodeId: string): string => `surface_${nodeId}`;\n\n/** Input/capture payloads merged when Skip or End flow consumes the screen draft. */\nexport type ConsumedDraftPayload =\n | { kind: 'choice'; choiceId: string }\n | { kind: 'multiChoice'; choiceIds: string[] }\n | { kind: 'text'; value: string; classification: 'safe' | 'sensitive' }\n | { kind: 'scale'; value: number }\n | { kind: 'cta'; action: 'primary' | 'secondary' }\n | { kind: 'carousel' };\n\n/** Payloads issued when advancing a step (excludes {@link screen_commit}). */\nexport type StepResponseCore =\n | { kind: 'choice'; choiceId: string }\n | { kind: 'multiChoice'; choiceIds: string[] }\n | { kind: 'text'; value: string; classification: 'safe' | 'sensitive' }\n | { kind: 'scale'; value: number }\n | { kind: 'checkbox'; fieldKey: string; value: boolean }\n | { kind: 'cta'; action: 'primary' | 'secondary' }\n | { kind: 'carousel' }\n | { kind: 'skip'; consumedDraft?: ConsumedDraftPayload }\n | { kind: 'end_flow'; consumedDraft?: ConsumedDraftPayload }\n /** Recorded under the screen's `fieldKey` when Skip / Go to screen leaves a manual-submit input empty. */\n | { kind: 'bypass_input'; via: 'skip' | 'go_to_screen' }\n | { kind: 'go_to_screen'; screenId: string }\n | {\n kind: 'permission_outcome';\n layerId: string;\n permissionKey: OsPermissionKey;\n outcome: PermissionOutcome;\n }\n | {\n kind: 'app_review_outcome';\n layerId: string;\n outcome: AppReviewOutcome;\n }\n | {\n kind: 'oauth_login_resolve';\n layerId: string;\n provider: OAuthLoginProvider;\n success: boolean;\n customerExternalId?: string;\n error?: unknown;\n }\n | {\n kind: 'email_password_auth_resolve';\n layerId: string;\n fieldKey: string;\n mode: EmailPasswordAuthMode;\n email: string;\n password: string;\n confirmPassword?: string;\n success: boolean;\n error?: unknown;\n }\n | {\n /** Resolved when an external surface (e.g. RevenueCat paywall) finishes. */\n kind: 'external_surface_outcome';\n nodeId: string;\n outcome: NormalizedSurfaceOutcome;\n /** Reserved SDK keys merged into the session (e.g. `onb_rc_last_product_id`). */\n sdkKeyPatch?: SurfaceSdkKeyPatch;\n }\n | { kind: 'go_back'; fallbackScreenId?: string };\n\n/** Single user or SDK action on the flow (may bundle checkbox snapshots on Continue). */\nexport type StepResponse =\n | StepResponseCore\n | {\n kind: 'screen_commit';\n primary: StepResponseCore;\n checkboxValues: Record<string, boolean>;\n /** Input draft captured alongside a non-input primary (e.g. `app_review_outcome`). */\n capturedDraft?: ConsumedDraftPayload;\n };\n\nexport const isEligibleConsumedDraft = (r: StepResponse): r is ConsumedDraftPayload => {\n switch (r.kind) {\n case 'text':\n case 'choice':\n case 'multiChoice':\n case 'scale':\n case 'cta':\n case 'carousel':\n return true;\n default:\n return false;\n }\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\n\n\n\n\nimport type {\n ExternalSurfaceNode,\n} from '@getrheo/contracts/externalSurfaces';\n\nimport type { DecisionEvaluationTelemetry } from '../decisionEval.js';\nimport type { StepResponse } from './stepResponse.js';\n\nexport type FlowSessionContext = {\n locale: string;\n platform: string;\n sdkAttributes: Record<string, unknown>;\n};\n\nexport type FlowState = {\n manifest: FlowManifest;\n currentScreenId: string | null;\n /**\n * Non-null while the flow is awaiting an outcome from an external surface\n * (e.g. RevenueCat paywall). `currentScreenId` is null in this state so the\n * native renderer doesn't try to paint a screen.\n */\n pendingExternalSurface: { nodeId: string } | null;\n history: string[];\n /** Responses keyed by `fieldKey` (or screen id for non-input responses like CTA/skip). */\n responses: Record<string, StepResponse>;\n session: FlowSessionContext;\n status: 'idle' | 'running' | 'completed' | 'abandoned';\n startedAt: string | null;\n completedAt: string | null;\n};\n\nexport type SubmitResponseOptions = {\n now?: string;\n onDecisionEvaluated?: (payload: DecisionEvaluationTelemetry) => void;\n};\n\n\nexport const findScreen = (manifest: FlowManifest, screenId: string): Screen | undefined =>\n manifest.screens.find((s) => s.id === screenId) as Screen | undefined;\n\nexport const findExternalSurface = (\n manifest: FlowManifest,\n nodeId: string,\n): ExternalSurfaceNode | undefined =>\n // Older / hand-constructed manifests may omit `externalSurfaceNodes` entirely;\n // treat that as \"no surfaces\" rather than crashing the state machine.\n (manifest.externalSurfaceNodes ?? []).find((n) => n.id === nodeId);\n\nexport const initFlowState = (\n manifest: FlowManifest,\n sessionPartial?: Partial<FlowSessionContext>,\n): FlowState => ({\n manifest,\n currentScreenId: null,\n pendingExternalSurface: null,\n history: [],\n responses: {},\n session: {\n locale: sessionPartial?.locale ?? manifest.defaultLocale,\n platform: sessionPartial?.platform ?? 'unknown',\n sdkAttributes: sessionPartial?.sdkAttributes ?? {},\n },\n status: 'idle',\n startedAt: null,\n completedAt: null,\n});\n","import type { BrandGradient, Branding } from '@getrheo/contracts/dashboard';\nimport type { ThemedColor } from '@getrheo/contracts/layers';\n\nexport const BRAND_GRADIENT_PREFIX = '$brandGradient:' as const;\n\n/** Serialize a branding gradient preset to a CSS `background` value. */\nexport const brandGradientToCss = (g: BrandGradient): string => {\n const stops = g.stops.map((s) => `${s.color} ${(s.offset * 100).toFixed(0)}%`).join(', ');\n if (g.type === 'linear') {\n const angle = g.angle ?? 180;\n return `linear-gradient(${angle}deg, ${stops})`;\n }\n return `radial-gradient(circle, ${stops})`;\n};\n\nexport const isBrandGradientToken = (s: string): boolean => s.startsWith(BRAND_GRADIENT_PREFIX);\n\n/**\n * Resolve `$brandGradient:<uuid>` using app branding presets.\n * Unknown or missing preset id → `undefined`.\n */\nexport const resolveBrandGradientToken = (\n branding: Branding | undefined,\n token: string,\n): string | undefined => {\n if (!isBrandGradientToken(token)) return undefined;\n const id = token.slice(BRAND_GRADIENT_PREFIX.length);\n const preset = branding?.gradientPresets.find((x) => x.id === id);\n return preset ? brandGradientToCss(preset) : undefined;\n};\n\nconst rawThemedString = (\n palette: 'light' | 'dark',\n value: ThemedColor | undefined,\n): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return value;\n return palette === 'dark' ? (value.dark ?? value.light) : (value.light ?? value.dark);\n};\n\n/** Resolve a manifest themed color to a branding gradient preset if it references `$brandGradient:`. */\nexport const brandGradientFromThemedColor = (\n branding: Branding | undefined,\n palette: 'light' | 'dark',\n value: ThemedColor | undefined,\n): BrandGradient | undefined => {\n const raw = rawThemedString(palette, value);\n if (raw === undefined || !isBrandGradientToken(raw)) return undefined;\n const id = raw.slice(BRAND_GRADIENT_PREFIX.length);\n return branding?.gradientPresets.find((x) => x.id === id);\n};\n\n/** Native `LinearGradient` props for linear brand presets; `null` for radial (use solid fallback). */\nexport type BrandGradientNativeLinear = {\n colors: string[];\n locations: number[];\n start: { x: number; y: number };\n end: { x: number; y: number };\n};\n\nexport const brandGradientNativeLinear = (g: BrandGradient): BrandGradientNativeLinear | null => {\n if (g.type !== 'linear') return null;\n const angleDeg = g.angle ?? 180;\n const θ = (angleDeg * Math.PI) / 180;\n const ux = Math.sin(θ);\n const uy = -Math.cos(θ);\n return {\n colors: g.stops.map((s) => s.color),\n locations: g.stops.map((s) => s.offset),\n start: { x: 0.5 - ux * 0.5, y: 0.5 - uy * 0.5 },\n end: { x: 0.5 + ux * 0.5, y: 0.5 + uy * 0.5 },\n };\n};\n\nexport const brandGradientSolidFallback = (g: BrandGradient): string => g.stops[0]?.color ?? '#808080';\n\nconst HEX_FOR_GRADIENT = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n\n/** Normalize hex for stored CSS gradients (3 → 6 chars; strip alpha channel for 8-char hex). */\nexport const normalizeHexForGradient = (hex: string): string => {\n const t = hex.trim();\n if (!HEX_FOR_GRADIENT.test(t)) return t;\n if (t.length === 4) {\n const [, r, g, b] = t;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n if (t.length === 9) return t.slice(0, 7).toLowerCase();\n return t.toLowerCase();\n};\n\n/** One color stop in a dashboard-authored `linear-gradient(...)` (percent along the axis). */\nexport type LinearGradientStopModel = { color: string; offsetPct: number };\n\nconst clampPct = (n: number): number => Math.min(100, Math.max(0, n));\n\n/** Build canonical `linear-gradient(<deg>deg, #hex <pct>%, ...)` with at least two stops. */\nexport const buildLinearGradientCss = (angleDeg: number, stops: LinearGradientStopModel[]): string => {\n const a = Number.isFinite(angleDeg) ? angleDeg : 180;\n const sorted = [...stops]\n .map((s) => ({\n offsetPct: clampPct(Number.isFinite(s.offsetPct) ? s.offsetPct : 0),\n color: normalizeHexForGradient(s.color),\n }))\n .sort((x, y) => x.offsetPct - y.offsetPct);\n if (sorted.length < 2) {\n throw new Error('linear gradient requires at least 2 color stops');\n }\n for (const s of sorted) {\n if (!HEX_FOR_GRADIENT.test(s.color)) {\n throw new Error(`invalid gradient stop color: ${s.color}`);\n }\n }\n const body = sorted.map((s) => `${s.color} ${s.offsetPct.toFixed(0)}%`).join(', ');\n return `linear-gradient(${a}deg, ${body})`;\n};\n\nexport const buildTwoStopLinearGradientCss = (\n angleDeg: number,\n color0: string,\n color1: string,\n): string =>\n buildLinearGradientCss(angleDeg, [\n { color: color0, offsetPct: 0 },\n { color: color1, offsetPct: 100 },\n ]);\n\nexport const isStoredLinearGradientCss = (s: string): boolean =>\n /^\\s*linear-gradient\\s*\\(/i.test(s.trim());\n\n/** Parse dashboard-authored linear gradients with hex stops and explicit `%` positions. */\nexport const parseLinearGradientCss = (s: string): { angleDeg: number; stops: LinearGradientStopModel[] } | null => {\n const t = s.trim();\n const head = t.match(/^\\s*linear-gradient\\s*\\(\\s*([-0-9.]+)\\s*deg\\s*,\\s*(.*)\\)\\s*$/is);\n if (!head) return null;\n const angleStr = head[1];\n const innerRaw = head[2];\n if (angleStr === undefined || innerRaw === undefined) return null;\n const angleDeg = Number(angleStr);\n if (!Number.isFinite(angleDeg)) return null;\n const inner = innerRaw.trim();\n if (!inner) return null;\n const parts = inner.split(/,(?=\\s*#)/);\n const stops: LinearGradientStopModel[] = [];\n for (const part of parts) {\n const p = part.trim();\n const m = p.match(/^(#[0-9a-fA-F]{3,8})\\s+([-0-9.]+)\\s*%$/i);\n if (!m) return null;\n const hex = m[1];\n const offsetStr = m[2];\n if (hex === undefined || offsetStr === undefined) return null;\n const color = normalizeHexForGradient(hex);\n const offsetPct = Number(offsetStr);\n if (!Number.isFinite(offsetPct)) return null;\n if (!HEX_FOR_GRADIENT.test(color)) return null;\n stops.push({ color, offsetPct });\n }\n if (stops.length < 2) return null;\n return { angleDeg, stops };\n};\n\nexport const parseTwoStopLinearGradientCss = (\n s: string,\n): { angleDeg: number; color0: string; color1: string } | null => {\n const p = parseLinearGradientCss(s);\n if (!p || p.stops.length !== 2) return null;\n const sorted = [...p.stops].sort((a, b) => a.offsetPct - b.offsetPct);\n const s0 = sorted[0];\n const s1 = sorted[1];\n if (!s0 || !s1 || s0.offsetPct !== 0 || s1.offsetPct !== 100) return null;\n return { angleDeg: p.angleDeg, color0: s0.color, color1: s1.color };\n};\n\nexport const nativeLinearFromAngleAndStops = (\n angleDeg: number,\n stops: { color: string; offsetPct: number }[],\n): BrandGradientNativeLinear => {\n const sorted = [...stops]\n .map((s) => ({\n color: normalizeHexForGradient(s.color),\n offsetPct: clampPct(Number.isFinite(s.offsetPct) ? s.offsetPct : 0),\n }))\n .sort((a, b) => a.offsetPct - b.offsetPct);\n const θ = (angleDeg * Math.PI) / 180;\n const ux = Math.sin(θ);\n const uy = -Math.cos(θ);\n return {\n colors: sorted.map((s) => s.color),\n locations: sorted.map((s) => s.offsetPct / 100),\n start: { x: 0.5 - ux * 0.5, y: 0.5 - uy * 0.5 },\n end: { x: 0.5 + ux * 0.5, y: 0.5 + uy * 0.5 },\n };\n};\n\nexport const nativeLinearFromAngleAndTwoColors = (\n angleDeg: number,\n color0: string,\n color1: string,\n): BrandGradientNativeLinear =>\n nativeLinearFromAngleAndStops(angleDeg, [\n { color: color0, offsetPct: 0 },\n { color: color1, offsetPct: 100 },\n ]);\n","import type { Branding } from '@getrheo/contracts/dashboard';\nimport type { FlowManifest, Theme } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport {\n brandGradientFromThemedColor,\n brandGradientNativeLinear,\n brandGradientSolidFallback,\n isStoredLinearGradientCss,\n nativeLinearFromAngleAndStops,\n parseLinearGradientCss,\n resolveBrandGradientToken,\n type BrandGradientNativeLinear,\n} from './brandGradient';\nimport type {\n InputLayer,\n Layer,\n MultipleChoiceLayer,\n ScaleInputLayer,\n SingleChoiceLayer,\n StackLayer,\n TextInputLayer,\n ThemedColor,\n} from '@getrheo/contracts/layers';\nimport type { LocalizedText } from '@getrheo/contracts/localized';\nimport { resolveLocalizedText } from '@getrheo/contracts/localized';\nimport { isInputLayer } from '@getrheo/contracts/layers';\n\n/** Walk a layer tree depth-first. */\nexport const walkLayers = (root: Layer, fn: (l: Layer, depth: number) => void): void => {\n const visit = (l: Layer, depth: number): void => {\n fn(l, depth);\n if (l.kind === 'stack') l.children.forEach((c) => visit(c, depth + 1));\n else if (l.kind === 'carousel') l.slides.forEach((c) => visit(c, depth + 1));\n else if (l.kind === 'button') l.children.forEach((c) => visit(c, depth + 1));\n else if (l.kind === 'back_button') l.children.forEach((c) => visit(c, depth + 1));\n else if (l.kind === 'hyperlink') l.children.forEach((c) => visit(c, depth + 1));\n else if (l.kind === 'single_choice' || l.kind === 'multiple_choice') {\n l.children.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'text_input' || l.kind === 'scale_input') {\n l.children?.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'oauth_login') {\n l.children.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'oauth_provider' && l.variant === 'custom') {\n l.children.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'email_password_auth') {\n l.children.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'email_password_field') {\n l.children?.forEach((c) => visit(c, depth + 1));\n } else if (l.kind === 'email_password_submit') {\n l.children.forEach((c) => visit(c, depth + 1));\n }\n };\n visit(root, 0);\n};\n\n/** Walk every layer in a screen's regions (header → body → footer). */\nexport const walkScreen = (screen: Screen, fn: (l: Layer) => void): void => {\n if (screen.regions.header) walkLayers(screen.regions.header, fn);\n walkLayers(screen.regions.body, fn);\n if (screen.regions.footer) walkLayers(screen.regions.footer, fn);\n};\n\n/** Find the screen's lone input layer (if any). Schema enforces ≤1. */\nexport const findInputLayer = (screen: Screen): InputLayer | null => {\n let found: InputLayer | null = null;\n walkScreen(screen, (l) => {\n if (!found && isInputLayer(l)) found = l;\n });\n return found;\n};\n\n/** Input kinds that use a screen draft and require an explicit Continue to submit. */\nexport const findManualSubmitInputLayer = (\n screen: Screen,\n): MultipleChoiceLayer | TextInputLayer | ScaleInputLayer | null => {\n const input = findInputLayer(screen);\n if (!input) return null;\n if (input.kind === 'multiple_choice' || input.kind === 'text_input' || input.kind === 'scale_input') {\n return input;\n }\n return null;\n};\n\n/**\n * Whether the screen contains any Button layer that submits the screen\n * (i.e. `action.kind === 'continue'`). Used by input layers to decide\n * between auto-submit-on-tap (legacy behaviour for choice-only screens)\n * and writing into the screen-level draft for a Button to submit.\n */\nexport const screenHasContinueButton = (screen: Screen): boolean => {\n let found = false;\n walkScreen(screen, (l) => {\n if (l.kind === 'button' && l.action.kind === 'continue') found = true;\n });\n return found;\n};\n\n/**\n * Resolve a choice layer's option stack by stable optionId via its\n * binding. Returns null when the binding is missing or the bound child\n * was removed (manifest validation rejects that, but runtime stays safe).\n */\nexport const findOptionStackForChoice = (\n layer: SingleChoiceLayer | MultipleChoiceLayer,\n optionId: string,\n): StackLayer | null => {\n const binding = layer.optionBindings.find((b) => b.optionId === optionId);\n if (!binding) return null;\n const stack = layer.children.find((c) => c.id === binding.rootLayerId);\n return stack ?? null;\n};\n\n/**\n * Best-effort textual label for a choice option, used by interpolation\n * (e.g. `{{ goal }}` rendering the chosen option's label) and by editor\n * surfaces that show option rows. Walks the option's child subtree\n * depth-first and returns the first `text` layer's content; falls back\n * to the option's stable id when no text is present.\n */\nexport const choiceOptionLabel = (\n layer: SingleChoiceLayer | MultipleChoiceLayer,\n optionId: string,\n locale: string,\n): string => {\n const stack = findOptionStackForChoice(layer, optionId);\n if (!stack) return '';\n let foundText: LocalizedText | null = null;\n walkLayers(stack, (l) => {\n if (foundText) return;\n if (l.kind === 'text') foundText = l.text;\n });\n if (foundText) return resolveLocalizedText(foundText, locale);\n return optionId;\n};\n\n/** Find a layer in a screen by id, including nested children/slides. */\nexport const findLayerById = (screen: Screen, id: string): Layer | null => {\n let found: Layer | null = null;\n walkScreen(screen, (l) => {\n if (!found && l.id === id) found = l;\n });\n return found;\n};\n\n/** Collect all input fieldKeys across a manifest. */\nexport const collectFieldKeys = (manifest: FlowManifest): { fieldKey: string; screenId: string }[] => {\n const out: { fieldKey: string; screenId: string }[] = [];\n for (const screen of manifest.screens) {\n walkScreen(screen as unknown as Screen, (l) => {\n if (isInputLayer(l)) out.push({ fieldKey: l.fieldKey, screenId: screen.id });\n if (l.kind === 'checkbox') out.push({ fieldKey: l.fieldKey, screenId: screen.id });\n if (l.kind === 'email_password_auth') {\n out.push({ fieldKey: l.fieldKey, screenId: screen.id });\n }\n });\n }\n return out;\n};\n\n/**\n * Pick a snake_case field key starting from `base` that is not in `used`\n * (e.g. `text` → `text_2` → `text_3` when `text` is taken).\n */\nexport const nextUniqueFieldKey = (base: string, used: Iterable<string>): string => {\n const set = used instanceof Set ? used : new Set(used);\n if (!set.has(base)) return base;\n let n = 2;\n while (set.has(`${base}_${n}`)) n += 1;\n return `${base}_${n}`;\n};\n\n/**\n * Resolve a token reference like `$primary` to a literal value from `theme`.\n * Pass-through for non-token strings; returns undefined for `undefined`.\n */\nexport const resolveTokens = <T extends string | undefined>(\n theme: Theme | undefined,\n value: T,\n): T | string => {\n if (value === undefined) return value;\n if (typeof value !== 'string' || !value.startsWith('$')) return value;\n const key = value.slice(1) as keyof Theme;\n const literal = theme?.[key];\n if (typeof literal === 'string') return literal;\n return value;\n};\n\n/**\n * Resolve a layer color for the current appearance (`light` | `dark`).\n * Plain string uses `resolveTokens` for both modes (legacy). Object form\n * picks `light` / `dark` with fallback to the other key when one is omitted.\n */\nexport const resolveThemedColor = (\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n value: ThemedColor | undefined,\n): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return resolveTokens(theme, value) as string;\n const raw = palette === 'dark' ? (value.dark ?? value.light) : (value.light ?? value.dark);\n if (raw === undefined) return undefined;\n return resolveTokens(theme, raw) as string;\n};\n\n/**\n * Resolve a themed value used for CSS `background` (or RN background fill).\n * Supports `$brandGradient:<uuid>` when branding presets are provided; other values match {@link resolveThemedColor}.\n */\nexport const resolveThemedBackground = (\n theme: Theme | undefined,\n branding: Branding | undefined,\n palette: 'light' | 'dark',\n value: ThemedColor | undefined,\n): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === 'string') {\n if (value.startsWith('$brandGradient:')) {\n return resolveBrandGradientToken(branding, value);\n }\n return resolveTokens(theme, value) as string;\n }\n const raw = palette === 'dark' ? (value.dark ?? value.light) : (value.light ?? value.dark);\n if (raw === undefined) return undefined;\n if (raw.startsWith('$brandGradient:')) {\n return resolveBrandGradientToken(branding, raw);\n }\n return resolveTokens(theme, raw) as string;\n};\n\nexport const nativeBrandBackgroundFromThemedColor = (\n theme: Theme | undefined,\n branding: Branding | undefined,\n palette: 'light' | 'dark',\n value: ThemedColor | undefined,\n): { solid?: string; linear?: BrandGradientNativeLinear } => {\n const preset = brandGradientFromThemedColor(branding, palette, value);\n if (preset) {\n const lin = brandGradientNativeLinear(preset);\n if (lin) return { linear: lin };\n return { solid: brandGradientSolidFallback(preset) };\n }\n const bg = resolveThemedBackground(theme, branding, palette, value) as string | undefined;\n if (!bg) return {};\n const parsed = parseLinearGradientCss(bg);\n if (parsed) {\n return {\n linear: nativeLinearFromAngleAndStops(\n parsed.angleDeg,\n parsed.stops.map((s) => ({ color: s.color, offsetPct: s.offsetPct })),\n ),\n };\n }\n if (isStoredLinearGradientCss(bg)) {\n const first = bg.match(/#[0-9a-fA-F]{3,8}/);\n return { solid: first ? first[0] : '#808080' };\n }\n return { solid: bg };\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { DecisionExpr, DecisionNode, FlowJumpTarget } from '@getrheo/contracts/decisions';\n\nexport type DecisionEvaluationTelemetry = {\n decisionNodeId: string;\n /** Matched segment id, or null when no case matched (else branch). */\n matchedCaseId: string | null;\n clauseDigest: string;\n};\n\nexport const findDecisionNode = (manifest: FlowManifest, id: string): DecisionNode | undefined =>\n (manifest.decisionNodes ?? []).find((d) => d.id === id);\n\nexport const decisionTargetIds = (manifest: FlowManifest): Set<string> =>\n new Set((manifest.decisionNodes ?? []).map((d) => d.id));\n\nconst stableSerialize = (value: unknown): string => {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(stableSerialize).join(',')}]`;\n const keys = Object.keys(value as Record<string, unknown>).sort();\n const parts = keys.map((k) => `${JSON.stringify(k)}:${stableSerialize((value as Record<string, unknown>)[k])}`);\n return `{${parts.join(',')}}`;\n};\n\n/** Stable digest of the expression shape and literal predicate values (not runtime answers). */\nexport const digestDecisionExpression = (expr: DecisionExpr): string => {\n const s = stableSerialize(expr);\n let h = 5381;\n for (let i = 0; i < s.length; i += 1) {\n h = (h * 33) ^ s.charCodeAt(i)!;\n }\n return `d${(h >>> 0).toString(16)}`;\n};\n\ntype EvalCtx = {\n locale: string;\n platform: string;\n sdkAttributes: Record<string, unknown>;\n responses: Record<string, unknown>;\n};\n\nconst responseForField = (\n fieldKey: string,\n responses: Record<string, unknown>,\n): unknown => responses[fieldKey];\n\nconst normalizeResponseValue = (r: unknown): unknown => {\n if (!r || typeof r !== 'object') return undefined;\n const o = r as Record<string, unknown>;\n switch (o.kind) {\n case 'choice':\n return typeof o.choiceId === 'string' ? o.choiceId : undefined;\n case 'multiChoice':\n return Array.isArray(o.choiceIds) ? o.choiceIds : undefined;\n case 'text':\n return typeof o.value === 'string' ? o.value : undefined;\n case 'scale':\n return typeof o.value === 'number' ? o.value : undefined;\n case 'checkbox':\n return typeof o.value === 'boolean' ? o.value : undefined;\n default:\n return undefined;\n }\n};\nconst normalizeScalarForStringPred = (raw: unknown): string | undefined => {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw === 'string') return raw;\n if (typeof raw === 'number' && Number.isFinite(raw)) return String(raw);\n return undefined;\n};\n\nconst normalizeNumber = (raw: unknown): number | undefined => {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) return undefined;\n return raw;\n};\n\nconst normalizeChoiceId = (raw: unknown): string | undefined =>\n typeof raw === 'string' && raw.length > 0 ? raw : undefined;\n\nconst normalizeChoiceIds = (raw: unknown): string[] | undefined => {\n if (!Array.isArray(raw)) return undefined;\n const ids = raw.filter((x): x is string => typeof x === 'string' && x.length > 0);\n return ids;\n};\n\nconst normalizeBoolean = (raw: unknown): boolean | undefined => {\n if (typeof raw === 'boolean') return raw;\n if (typeof raw === 'number' && Number.isFinite(raw)) return raw !== 0;\n if (typeof raw === 'string') {\n const s = raw.trim().toLowerCase();\n if (s === 'true' || s === '1' || s === 'yes') return true;\n if (s === 'false' || s === '0' || s === 'no') return false;\n }\n return undefined;\n};\n\ntype PredicateVariable = Extract<DecisionExpr, { kind: 'predicate' }>['variable'];\n\nconst resolveVariableValue = (variable: PredicateVariable, ctx: EvalCtx): unknown => {\n if (variable.kind === 'builtin') {\n if (variable.name === 'locale') return ctx.locale;\n return ctx.platform;\n }\n if (variable.kind === 'sdk') return ctx.sdkAttributes[variable.key];\n const r = responseForField(variable.fieldKey, ctx.responses);\n return normalizeResponseValue(r);\n};\n\nconst evalStringPred = (left: string, pred: { op: string; value: string }): boolean => {\n switch (pred.op) {\n case 'eq':\n return left === pred.value;\n case 'neq':\n return left !== pred.value;\n case 'contains':\n return left.includes(pred.value);\n default:\n return false;\n }\n};\n\nconst evalNumberPred = (left: number, pred: { op: string; value: number }): boolean => {\n switch (pred.op) {\n case 'eq':\n return left === pred.value;\n case 'neq':\n return left !== pred.value;\n case 'lt':\n return left < pred.value;\n case 'lte':\n return left <= pred.value;\n case 'gt':\n return left > pred.value;\n case 'gte':\n return left >= pred.value;\n default:\n return false;\n }\n};\n\nconst evalChoicePred = (\n choiceId: string,\n pred:\n | { op: 'eq'; optionId: string }\n | { op: 'one_of'; optionIds: string[] },\n): boolean => {\n if (pred.op === 'eq') return choiceId === pred.optionId;\n return pred.optionIds.includes(choiceId);\n};\n\nconst setIntersect = (a: string[], b: string[]): string[] => {\n const bs = new Set(b);\n return a.filter((x) => bs.has(x));\n};\n\nconst evalBooleanPred = (\n left: boolean,\n pred: { op: 'eq' | 'neq'; value: boolean },\n): boolean => {\n if (pred.op === 'eq') return left === pred.value;\n return left !== pred.value;\n};\n\nconst evalMultiPred = (\n selected: string[],\n pred:\n | { op: 'intersects'; optionIds: string[] }\n | { op: 'contains_all'; optionIds: string[] }\n | { op: 'subset_of'; optionIds: string[] },\n): boolean => {\n const required = pred.optionIds;\n switch (pred.op) {\n case 'intersects':\n return setIntersect(selected, required).length > 0;\n case 'contains_all': {\n const sel = new Set(selected);\n return required.every((id) => sel.has(id));\n }\n case 'subset_of': {\n const allow = new Set(required);\n return selected.every((id) => allow.has(id));\n }\n default:\n return false;\n }\n};\n\nexport const evaluateDecisionExpression = (expr: DecisionExpr, ctx: EvalCtx): boolean => {\n if (expr.kind === 'empty') return false;\n if (expr.kind === 'group') {\n if (expr.op === 'and') {\n for (const c of expr.children) {\n if (!evaluateDecisionExpression(c, ctx)) return false;\n }\n return true;\n }\n for (const c of expr.children) {\n if (evaluateDecisionExpression(c, ctx)) return true;\n }\n return false;\n }\n\n const raw = resolveVariableValue(expr.variable, ctx);\n const { predicate } = expr;\n\n switch (predicate.type) {\n case 'string': {\n const s = normalizeScalarForStringPred(raw);\n if (s === undefined) return false;\n return evalStringPred(s, predicate.pred);\n }\n case 'number': {\n const n = normalizeNumber(raw);\n if (n === undefined) return false;\n return evalNumberPred(n, predicate.pred);\n }\n case 'choice': {\n const id = normalizeChoiceId(raw);\n if (!id) return false;\n return evalChoicePred(id, predicate.pred);\n }\n case 'multi': {\n const ids = normalizeChoiceIds(raw);\n if (!ids) return false;\n return evalMultiPred(ids, predicate.pred);\n }\n case 'boolean': {\n const b = normalizeBoolean(raw);\n if (b === undefined) return false;\n return evalBooleanPred(b, predicate.pred);\n }\n default:\n return false;\n }\n};\n\nexport const evaluateDecisionNode = (\n node: DecisionNode,\n ctx: EvalCtx,\n): { matchedCaseId: string | null; next: FlowJumpTarget; clauseDigest: string } => {\n for (const c of node.cases) {\n if (evaluateDecisionExpression(c.expression, ctx)) {\n return {\n matchedCaseId: c.id,\n next: c.next,\n clauseDigest: digestDecisionExpression(c.expression),\n };\n }\n }\n return {\n matchedCaseId: null,\n next: node.elseNext,\n clauseDigest: 'else',\n };\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport {\n OS_PERMISSION_OUTCOME_CONTINUE,\n OS_PERMISSION_OUTCOME_END,\n appReviewCaptureFieldKey,\n emailPasswordAuthResponseKey,\n oauthLoginResponseKey,\n permissionCaptureFieldKey,\n} from '@getrheo/contracts/layers';\n\n\n\n\n\nimport { findInputLayer, findLayerById } from '../layers.js';\nimport { evaluateDecisionNode, findDecisionNode } from '../decisionEval.js';\nimport type { DecisionEvaluationTelemetry } from '../decisionEval.js';\nimport type { FlowSessionContext, FlowState } from './flowSession.js';\nimport { findExternalSurface } from './flowSession.js';\nimport type { StepResponse } from './stepResponse.js';\n\n/**\n * Result of walking the manifest from a cursor id past decision nodes:\n * either we landed on a screen (renderable), an external surface (await\n * outcome), or fell off the graph (flow complete).\n */\nexport type GraphLanding =\n | { kind: 'screen'; screenId: string }\n | { kind: 'surface'; nodeId: string }\n | { kind: 'end' };\n\nconst resolveOsPermissionDestination = (\n screen: Screen,\n response: Extract<StepResponse, { kind: 'permission_outcome' }>,\n): string | null => {\n const layer = findLayerById(screen, response.layerId);\n if (!layer || layer.kind !== 'button' || layer.action.kind !== 'request_os_permission')\n return null;\n if (layer.action.permissionKey !== response.permissionKey) return null;\n const target = layer.action.outcomes[response.outcome];\n if (target === OS_PERMISSION_OUTCOME_END) return null;\n if (target === OS_PERMISSION_OUTCOME_CONTINUE) return screen.next.default ?? null;\n return target;\n};\n\nexport const resolveNextScreenId = (screen: Screen, response: StepResponse): string | null => {\n if (response.kind === 'screen_commit') {\n return resolveNextScreenId(screen, response.primary);\n }\n if (response.kind === 'go_to_screen') return response.screenId;\n\n if (response.kind === 'permission_outcome') {\n const nextId = resolveOsPermissionDestination(screen, response);\n return nextId ?? screen.next.default ?? null;\n }\n\n if (response.kind === 'app_review_outcome') {\n const layer = findLayerById(screen, response.layerId);\n if (!layer || layer.kind !== 'button' || layer.action.kind !== 'request_app_review') {\n return screen.next.default ?? null;\n }\n return screen.next.default ?? null;\n }\n\n if (response.kind === 'oauth_login_resolve') {\n return screen.next.default ?? null;\n }\n\n if (response.kind === 'email_password_auth_resolve') {\n return screen.next.default ?? null;\n }\n\n const input = findInputLayer(screen);\n if (\n input &&\n (input.kind === 'single_choice' || input.kind === 'multiple_choice') &&\n input.branching.enabled\n ) {\n if (response.kind === 'choice') {\n const m = input.branching.conditions.find((c) => c.choiceId === response.choiceId);\n if (m) return m.goTo;\n } else if (response.kind === 'multiChoice') {\n const m = input.branching.conditions.find((c) => response.choiceIds.includes(c.choiceId));\n if (m) return m.goTo;\n }\n }\n return screen.next.default ?? null;\n};\n\nexport const resolveThroughGraph = (\n manifest: FlowManifest,\n cursor: string | null,\n responses: Record<string, StepResponse>,\n session: FlowSessionContext,\n onDecisionEvaluated?: (payload: DecisionEvaluationTelemetry) => void,\n): GraphLanding => {\n let cur = cursor;\n const evalCtx = {\n locale: session.locale,\n platform: session.platform,\n sdkAttributes: session.sdkAttributes,\n responses: responses as Record<string, unknown>,\n };\n while (cur) {\n const dn = findDecisionNode(manifest, cur);\n if (!dn) break;\n const evalResult = evaluateDecisionNode(dn, evalCtx);\n onDecisionEvaluated?.({\n decisionNodeId: dn.id,\n matchedCaseId: evalResult.matchedCaseId,\n clauseDigest: evalResult.clauseDigest,\n });\n cur = evalResult.next;\n if (cur == null) break;\n }\n if (cur == null) return { kind: 'end' };\n if (findExternalSurface(manifest, cur)) return { kind: 'surface', nodeId: cur };\n return { kind: 'screen', screenId: cur };\n};\n\n/** Determine the storage key for a response on a given screen. Input layers\n * use their `fieldKey`; others use the screen id (for analytics breadcrumbs). */\nexport const responseKeyFor = (screen: Screen, response: StepResponse): string => {\n if (\n response.kind === 'text' ||\n response.kind === 'choice' ||\n response.kind === 'multiChoice' ||\n response.kind === 'scale' ||\n response.kind === 'checkbox'\n ) {\n const input = findInputLayer(screen);\n if (input) return input.fieldKey;\n }\n if (response.kind === 'permission_outcome') return permissionCaptureFieldKey(response.permissionKey);\n if (response.kind === 'app_review_outcome') return appReviewCaptureFieldKey(response.layerId);\n if (response.kind === 'checkbox') return response.fieldKey;\n if (response.kind === 'oauth_login_resolve') return oauthLoginResponseKey(response.layerId);\n if (response.kind === 'email_password_auth_resolve') {\n return emailPasswordAuthResponseKey(response.layerId);\n }\n return screen.id;\n};\n\n/** Apply a surface landing to a state update (history + pending flag). */\nexport const applyGraphLanding = (\n base: FlowState,\n landing: GraphLanding,\n nextResponses: Record<string, StepResponse>,\n now: string,\n): FlowState => {\n if (landing.kind === 'end') {\n return {\n ...base,\n responses: nextResponses,\n currentScreenId: null,\n pendingExternalSurface: null,\n status: 'completed',\n completedAt: now,\n };\n }\n if (landing.kind === 'surface') {\n return {\n ...base,\n responses: nextResponses,\n currentScreenId: null,\n pendingExternalSurface: { nodeId: landing.nodeId },\n history: [...base.history, landing.nodeId],\n };\n }\n return {\n ...base,\n responses: nextResponses,\n currentScreenId: landing.screenId,\n pendingExternalSurface: null,\n history: [...base.history, landing.screenId],\n };\n};\n","import {\n emailPasswordAuthResponseKey,\n oauthLoginResponseKey,\n} from '@getrheo/contracts/layers';\n\n\n\n\n\nimport { EXTERNAL_SURFACE_NO_NEXT } from '@getrheo/contracts/decisions';\nimport { findManualSubmitInputLayer } from '../layers.js';\nimport type { DecisionEvaluationTelemetry } from '../decisionEval.js';\nimport type { FlowState, FlowSessionContext, SubmitResponseOptions } from './flowSession.js';\nimport { findExternalSurface, findScreen } from './flowSession.js';\nimport {\n applyGraphLanding,\n resolveNextScreenId,\n resolveThroughGraph,\n responseKeyFor,\n} from './graphLanding.js';\nimport type { StepResponse } from './stepResponse.js';\nimport { externalSurfaceResponseKey } from './stepResponse.js';\n\nexport type { DecisionEvaluationTelemetry } from '../decisionEval.js';\n\nexport type StartFlowOptions = {\n now?: string;\n onDecisionEvaluated?: (payload: DecisionEvaluationTelemetry) => void;\n};\n\nexport const startFlow = (\n state: FlowState,\n second?: string | StartFlowOptions,\n): FlowState => {\n const opts: StartFlowOptions = typeof second === 'string' ? { now: second } : second ?? {};\n const now = opts.now ?? new Date().toISOString();\n const entry = state.manifest.entryScreenId;\n if (entry == null) {\n return {\n ...state,\n status: 'idle',\n currentScreenId: null,\n pendingExternalSurface: null,\n history: [],\n startedAt: null,\n completedAt: null,\n };\n }\n\n // Walk decisions starting at entry so a flow can begin on a decision or surface.\n // With no responses yet, decision branches that depend on responses fall through\n // to their `false` branch — same behaviour as evaluating a missing field today.\n const landing = resolveThroughGraph(\n state.manifest,\n entry,\n {},\n {\n ...state.session,\n },\n opts.onDecisionEvaluated,\n );\n\n if (landing.kind === 'end') {\n return {\n ...state,\n status: 'completed',\n currentScreenId: null,\n pendingExternalSurface: null,\n history: [entry],\n startedAt: now,\n completedAt: now,\n };\n }\n if (landing.kind === 'surface') {\n return {\n ...state,\n status: 'running',\n currentScreenId: null,\n pendingExternalSurface: { nodeId: landing.nodeId },\n history: [landing.nodeId],\n startedAt: now,\n };\n }\n return {\n ...state,\n status: 'running',\n currentScreenId: landing.screenId,\n pendingExternalSurface: null,\n history: [landing.screenId],\n startedAt: now,\n };\n};\n\nexport const submitResponse = (\n state: FlowState,\n response: StepResponse,\n third?: string | SubmitResponseOptions,\n): FlowState => {\n const opts: SubmitResponseOptions = typeof third === 'string' ? { now: third } : third ?? {};\n const now = opts.now ?? new Date().toISOString();\n\n if (state.status !== 'running') return state;\n\n // Surface outcomes are the only response kind valid while pending on a surface.\n if (response.kind === 'external_surface_outcome') {\n const pending = state.pendingExternalSurface;\n if (!pending || pending.nodeId !== response.nodeId) return state;\n const surface = findExternalSurface(state.manifest, pending.nodeId);\n if (!surface) return state;\n\n const nextSession: FlowSessionContext = response.sdkKeyPatch\n ? {\n ...state.session,\n sdkAttributes: { ...state.session.sdkAttributes, ...response.sdkKeyPatch },\n }\n : state.session;\n\n const target = surface.outcomes[response.outcome] ?? surface.fallback;\n const nextResponses = {\n ...state.responses,\n [externalSurfaceResponseKey(pending.nodeId)]: response,\n };\n if (target === EXTERNAL_SURFACE_NO_NEXT) {\n return {\n ...state,\n session: nextSession,\n responses: nextResponses,\n pendingExternalSurface: null,\n currentScreenId: null,\n status: 'completed',\n completedAt: now,\n };\n }\n const landing = resolveThroughGraph(\n state.manifest,\n target,\n nextResponses,\n nextSession,\n opts.onDecisionEvaluated,\n );\n return applyGraphLanding(\n { ...state, session: nextSession },\n landing,\n nextResponses,\n now,\n );\n }\n\n if (!state.currentScreenId) return state;\n const screen = findScreen(state.manifest, state.currentScreenId);\n if (!screen) return state;\n\n if (response.kind === 'screen_commit') {\n const mergedResponses = { ...state.responses };\n for (const [fk, value] of Object.entries(response.checkboxValues)) {\n mergedResponses[fk] = { kind: 'checkbox', fieldKey: fk, value };\n }\n if (response.capturedDraft) {\n mergedResponses[responseKeyFor(screen, response.capturedDraft)] = response.capturedDraft;\n }\n return submitResponse({ ...state, responses: mergedResponses }, response.primary, opts);\n }\n\n if (response.kind === 'go_back') {\n const fallback = response.fallbackScreenId;\n if (state.history.length > 1) {\n const nextHistory = state.history.slice(0, -1);\n const prevId = nextHistory[nextHistory.length - 1];\n if (!prevId) return state;\n return {\n ...state,\n currentScreenId: prevId,\n history: nextHistory,\n };\n }\n if (fallback && findScreen(state.manifest, fallback)) {\n return {\n ...state,\n currentScreenId: fallback,\n history: [fallback],\n };\n }\n return state;\n }\n\n if (response.kind === 'oauth_login_resolve' && !response.success) {\n const key = oauthLoginResponseKey(response.layerId);\n return {\n ...state,\n responses: { ...state.responses, [key]: response },\n };\n }\n\n if (response.kind === 'email_password_auth_resolve' && !response.success) {\n const key = emailPasswordAuthResponseKey(response.layerId);\n return {\n ...state,\n responses: { ...state.responses, [key]: response },\n };\n }\n\n if (response.kind === 'end_flow') {\n const nextResponses = { ...state.responses };\n if (response.consumedDraft) {\n nextResponses[responseKeyFor(screen, response.consumedDraft)] = response.consumedDraft;\n }\n nextResponses[responseKeyFor(screen, { kind: 'end_flow' })] = { kind: 'end_flow' };\n return {\n ...state,\n responses: nextResponses,\n currentScreenId: null,\n status: 'completed',\n completedAt: now,\n };\n }\n\n if (response.kind === 'skip') {\n const nextResponses = { ...state.responses };\n const manualInput = findManualSubmitInputLayer(screen);\n if (manualInput) {\n nextResponses[manualInput.fieldKey] = { kind: 'bypass_input', via: 'skip' };\n }\n nextResponses[responseKeyFor(screen, { kind: 'skip' })] = { kind: 'skip' };\n const nextRaw = resolveNextScreenId(screen, { kind: 'skip' });\n const landing = resolveThroughGraph(\n state.manifest,\n nextRaw,\n nextResponses,\n state.session,\n opts.onDecisionEvaluated,\n );\n return applyGraphLanding(state, landing, nextResponses, now);\n }\n\n const key = responseKeyFor(screen, response);\n const nextResponses = { ...state.responses, [key]: response };\n if (response.kind === 'go_to_screen') {\n const manualInput = findManualSubmitInputLayer(screen);\n if (manualInput) {\n nextResponses[manualInput.fieldKey] = { kind: 'bypass_input', via: 'go_to_screen' };\n }\n }\n const nextRaw = resolveNextScreenId(screen, response);\n\n const landing = resolveThroughGraph(\n state.manifest,\n nextRaw,\n nextResponses,\n state.session,\n opts.onDecisionEvaluated,\n );\n return applyGraphLanding(state, landing, nextResponses, now);\n};\n","import type { EmailPasswordAuthMode, OAuthLoginProvider } from '@getrheo/contracts/layers';\nimport type { NormalizedSurfaceOutcome } from '@getrheo/contracts/externalSurfaces';\nimport type { FlowState } from './flowSession.js';\nimport type { StepResponse } from './stepResponse.js';\n\nconst TERMINAL_EXPORT_AUTH_RESPONSE_KEY_PREFIXES = ['oauth:', 'email_pw:'] as const;\n\n/** Response map keys produced by OAuth / email-password layers (see `oauthLoginResponseKey`, `emailPasswordAuthResponseKey`). */\nexport const isAuthTerminalExportResponseKey = (key: string): boolean =>\n TERMINAL_EXPORT_AUTH_RESPONSE_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n\n/** Copy of `responses` without OAuth / email-password auth entries (hosts use auth provider callbacks for those). */\nexport const stripAuthResponsesForTerminalExport = (\n responses: Record<string, StepResponse>,\n): Record<string, StepResponse> => {\n const out: Record<string, StepResponse> = {};\n for (const [k, v] of Object.entries(responses)) {\n if (isAuthTerminalExportResponseKey(k)) continue;\n out[k] = v;\n }\n return out;\n};\n\n/** Values stored under each field key in {@link buildCompletionResponses} / terminal `answers`. */\nexport type FlowTerminalAnswerEntryValue =\n | string\n | string[]\n | number\n | { value: string; classification: string }\n | { success: boolean; customerExternalId?: string; provider: OAuthLoginProvider }\n | { success: boolean; mode: EmailPasswordAuthMode; email: string }\n | { bypassed: true; via: 'skip' | 'go_to_screen' }\n | { outcome: NormalizedSurfaceOutcome }\n | boolean\n | 'end_flow'\n | 'skip'\n | 'carousel'\n | { goToScreen: string };\n\n/**\n * Maps one stored {@link StepResponse} to a JSON-safe completion value.\n * `screen_commit` should not appear in `FlowState.responses` (it unwraps in `submitResponse`).\n */\nexport const stepResponseToCompletionValue = (\n r: StepResponse,\n): FlowTerminalAnswerEntryValue | undefined => {\n if (r.kind === 'screen_commit') return undefined;\n switch (r.kind) {\n case 'choice':\n return r.choiceId;\n case 'multiChoice':\n return r.choiceIds;\n case 'text':\n return { value: r.value, classification: r.classification };\n case 'scale':\n return r.value;\n case 'checkbox':\n return r.value;\n case 'cta':\n return r.action;\n case 'carousel':\n return 'carousel';\n case 'end_flow':\n return 'end_flow';\n case 'skip':\n return 'skip';\n case 'permission_outcome':\n return r.outcome;\n case 'app_review_outcome':\n return r.outcome;\n case 'oauth_login_resolve':\n return {\n success: r.success,\n customerExternalId: r.customerExternalId,\n provider: r.provider,\n };\n case 'email_password_auth_resolve':\n return {\n success: r.success,\n mode: r.mode,\n email: r.email,\n };\n case 'bypass_input':\n return { bypassed: true, via: r.via };\n case 'external_surface_outcome':\n return { outcome: r.outcome };\n case 'go_to_screen':\n return { goToScreen: r.screenId };\n case 'go_back':\n return undefined;\n default: {\n const _never: never = r;\n return _never;\n }\n }\n};\n\nexport const buildCompletionResponses = (\n state: FlowState,\n): Record<string, FlowTerminalAnswerEntryValue> => {\n const out: Record<string, FlowTerminalAnswerEntryValue> = {};\n for (const [key, r] of Object.entries(state.responses)) {\n const v = stepResponseToCompletionValue(r);\n if (v !== undefined) out[key] = v;\n }\n return out;\n};\n\n/** Normalized `answers` map in {@link FlowTerminalSnapshot} (from {@link buildCompletionResponses}). */\nexport type FlowTerminalAnswerMap = ReturnType<typeof buildCompletionResponses>;\n\nexport const abandonFlow = (\n state: FlowState,\n now: string = new Date().toISOString(),\n): FlowState => ({\n ...state,\n status: 'abandoned',\n completedAt: now,\n});\n","import type { z } from 'zod';\nimport { FlowManifestSchema, migrateLegacyManifest } from '@getrheo/contracts';\nimport type { FlowManifest } from '@getrheo/contracts';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport { OS_PERMISSION_OUTCOME_CONTINUE, OS_PERMISSION_OUTCOME_END } from '@getrheo/contracts/layers';\nimport { EXTERNAL_SURFACE_NO_NEXT } from '@getrheo/contracts/decisions';\nimport { findInputLayer, walkScreen } from './layers';\n\nexport type ManifestValidationIssue = {\n /** Screen id when the issue is screen-scoped, null otherwise. Field name kept as `stepId` for back-compat with API/dashboard wire types. */\n stepId?: string | null;\n path: (string | number)[];\n message: string;\n code: string;\n};\n\nexport const validateManifest = (\n data: unknown,\n):\n | { ok: true; manifest: FlowManifest }\n | { ok: false; issues: ManifestValidationIssue[] } => {\n const migrated = migrateLegacyManifest(data);\n const result = FlowManifestSchema.safeParse(migrated);\n if (result.success) return { ok: true, manifest: result.data };\n return {\n ok: false,\n issues: result.error.issues.map((i: z.ZodIssue) => {\n const screenIdx = i.path[1];\n const screenId =\n typeof screenIdx === 'number' && Array.isArray((data as FlowManifest)?.screens)\n ? (data as FlowManifest).screens[screenIdx]?.id\n : undefined;\n return {\n stepId: screenId ?? null,\n path: [...i.path],\n message: i.message,\n code: i.code,\n };\n }),\n };\n};\n\nexport type ValidatePublishableResult = {\n /** False when there are blocking {@link issues} (empty flow or no completion path). */\n ok: boolean;\n /** Blocking publish issues. */\n issues: ManifestValidationIssue[];\n /**\n * Non-blocking notices (e.g. screens not on any path from entry). The runtime\n * only serves the reachable subgraph; orphans stay in the draft but are not shown.\n */\n warnings: ManifestValidationIssue[];\n};\n\n/** Publish-time gate. Runs semantic checks beyond the schema. */\nexport const validatePublishable = (manifest: FlowManifest): ValidatePublishableResult => {\n const issues: ManifestValidationIssue[] = [];\n const warnings: ManifestValidationIssue[] = [];\n\n if (manifest.screens.length === 0) {\n issues.push({\n path: ['screens'],\n message: 'flow must have at least one screen',\n code: 'flow.no_screens',\n });\n }\n\n if (manifest.entryScreenId == null && manifest.screens.length > 0) {\n issues.push({\n path: ['entryScreenId'],\n message:\n 'flow entry is not connected — connect the entry node on the canvas to a screen, decision, or integration step before publishing',\n code: 'flow.no_entry',\n });\n }\n\n const screenMap = new Map(\n manifest.screens.map((s) => [s.id, s as unknown as Screen] as const),\n );\n const decisionMap = new Map((manifest.decisionNodes ?? []).map((d) => [d.id, d] as const));\n const surfaceMap = new Map((manifest.externalSurfaceNodes ?? []).map((s) => [s.id, s] as const));\n\n const enqueueGraphNode = (t: string | null | undefined): void => {\n if (t === null || t === undefined) return;\n if (screenMap.has(t) || decisionMap.has(t) || surfaceMap.has(t)) {\n queue.push(t);\n }\n };\n\n // Reachability: BFS from entry across screens, decision vertices, and external surfaces (e.g. RevenueCat paywall).\n const reachable = new Set<string>();\n const queue: string[] = [];\n if (manifest.entryScreenId != null) {\n queue.push(manifest.entryScreenId);\n }\n let canTerminate = false;\n while (queue.length) {\n const id = queue.shift()!;\n if (reachable.has(id)) continue;\n reachable.add(id);\n\n const decision = decisionMap.get(id);\n if (decision) {\n for (const c of decision.cases) {\n if (c.next != null) enqueueGraphNode(c.next);\n }\n if (decision.elseNext != null) enqueueGraphNode(decision.elseNext);\n continue;\n }\n\n const surface = surfaceMap.get(id);\n if (surface) {\n const outcomeTargets = Object.values(surface.outcomes);\n if (\n outcomeTargets.some((t) => t === EXTERNAL_SURFACE_NO_NEXT) ||\n surface.fallback === EXTERNAL_SURFACE_NO_NEXT\n ) {\n canTerminate = true;\n }\n if (surface.fallback != null && surface.fallback !== EXTERNAL_SURFACE_NO_NEXT) {\n enqueueGraphNode(surface.fallback);\n }\n for (const t of outcomeTargets) {\n if (t != null && t !== EXTERNAL_SURFACE_NO_NEXT) enqueueGraphNode(t);\n }\n continue;\n }\n\n const screen = screenMap.get(id);\n if (!screen) continue;\n const targets: (string | null)[] = [];\n targets.push(screen.next.default);\n const input = findInputLayer(screen);\n if (\n input &&\n (input.kind === 'single_choice' || input.kind === 'multiple_choice') &&\n input.branching.enabled\n ) {\n for (const c of input.branching.conditions) targets.push(c.goTo);\n }\n walkScreen(screen, (l) => {\n if (l.kind === 'button' && l.action.kind === 'go_to_step') {\n targets.push(l.action.screenId);\n }\n if (l.kind === 'button' && l.action.kind === 'end_flow') {\n targets.push(null);\n }\n if (l.kind === 'button' && l.action.kind === 'request_app_review') {\n targets.push(screen.next.default);\n }\n if (l.kind === 'button' && l.action.kind === 'request_os_permission') {\n const o = l.action.outcomes;\n for (const t of [o.granted, o.denied, o.blocked]) {\n if (t === OS_PERMISSION_OUTCOME_END) {\n targets.push(null);\n } else if (t === OS_PERMISSION_OUTCOME_CONTINUE) {\n targets.push(screen.next.default);\n } else {\n targets.push(t);\n }\n }\n }\n if (l.kind === 'button' && l.action.kind === 'go_back_one_screen' && l.action.fallbackScreenId) {\n targets.push(l.action.fallbackScreenId);\n }\n if (l.kind === 'back_button' && l.fallbackScreenId) {\n targets.push(l.fallbackScreenId);\n }\n });\n if (targets.every((t) => t === null || t === undefined)) {\n canTerminate = true;\n }\n for (const t of targets) {\n if (t === null || t === undefined) {\n canTerminate = true;\n } else {\n enqueueGraphNode(t);\n }\n }\n }\n\n if (manifest.entryScreenId != null && !canTerminate) {\n issues.push({\n path: ['screens'],\n message: 'no path from entry screen reaches completion',\n code: 'flow.no_completion_path',\n });\n }\n\n for (const screen of manifest.screens) {\n if (manifest.entryScreenId != null && !reachable.has(screen.id)) {\n warnings.push({\n stepId: screen.id,\n path: ['screens', screen.id],\n message: `screen \"${screen.id}\" is not reachable from entry`,\n code: 'screen.unreachable',\n });\n }\n }\n\n for (const sn of manifest.externalSurfaceNodes ?? []) {\n if (manifest.entryScreenId != null && !reachable.has(sn.id)) {\n warnings.push({\n stepId: null,\n path: ['externalSurfaceNodes', sn.id],\n message: `external surface \"${sn.name ?? sn.id}\" is not reachable from entry`,\n code: 'external_surface.unreachable',\n });\n }\n }\n\n for (const dn of manifest.decisionNodes ?? []) {\n if (manifest.entryScreenId != null && !reachable.has(dn.id)) {\n warnings.push({\n stepId: null,\n path: ['decisionNodes', dn.id],\n message: `decision \"${dn.id}\" is not reachable from entry`,\n code: 'decision.unreachable',\n });\n }\n for (const c of dn.cases) {\n if (c.next == null) {\n issues.push({\n stepId: null,\n path: ['decisionNodes', dn.id, 'cases', c.id],\n message: `decision \"${dn.id}\" segment \"${c.name ?? c.id}\" must have a next step before publishing`,\n code: 'decision.incomplete_branches',\n });\n }\n }\n if (dn.elseNext == null) {\n issues.push({\n stepId: null,\n path: ['decisionNodes', dn.id, 'elseNext'],\n message: `decision \"${dn.id}\" needs an \"everyone else\" branch connected before publishing`,\n code: 'decision.incomplete_branches',\n });\n }\n }\n\n return { ok: issues.length === 0, issues, warnings };\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen, ScreenBackgroundVideoFill } from '@getrheo/contracts';\nimport { isScreenBackgroundPlaybackId, screenBackgroundPlaybackId } from '@getrheo/contracts';\nimport {\n isInputLayer,\n OS_PERMISSION_OUTCOME_CONTINUE,\n OS_PERMISSION_OUTCOME_END,\n type ButtonLayer,\n type IconLayer,\n type LottieLayer,\n type TextLayer,\n type VideoLayer,\n} from '@getrheo/contracts/layers';\nimport { findLayerById, walkScreen } from './layers';\n\n/** Agent-facing bullets for rules enforced by {@link collectFlowBuilderIssues}. Keep in sync with checks below. */\nexport const BUILDER_RULES_AGENT_BULLETS: readonly string[] = [\n 'Connect flow entry on the canvas before publishing (entryScreenId must exist when screens are present).',\n 'Every text and icon layer needs explicit style.color (including nested button label text — native does not inherit colors).',\n 'Screens with text_input, multiple_choice, or scale_input need a button with action.kind \"continue\".',\n 'At most one input layer per screen (single_choice, multiple_choice, text_input, scale_input).',\n 'Do not combine oauth_login or email_password_auth with other input layers on the same screen.',\n 'Only one oauth_login and one email_password_auth per screen; never both on the same screen.',\n 'fieldKey values must be unique snake_case across the flow.',\n 'Choice branch goTo and go_to_step screenId must reference existing screen ids.',\n 'request_app_review buttons require screen.next.default wired to a valid target.',\n 'request_os_permission outcomes must target existing screens, \"continue\", or \"end\".',\n 'Lottie/video with autoPlay false needs a button with action.kind \"play_media\" targeting that layer (or screen background video id).',\n 'play_media targetLayerIds must reference Lottie/video layers on the same screen or the screen background video playback id.',\n];\n\nconst FIELD_KEY_RE = /^[a-z][a-z0-9_]*$/;\n\nconst styleBucketHasColor = (s: { color?: unknown } | undefined): boolean =>\n s !== undefined && s.color !== undefined;\n\n/** Text must carry explicit `color` (base or any breakpoint) so native SDK matches canvas without CSS inheritance. */\nexport const textLayerHasAuthoringColor = (l: TextLayer): boolean => {\n if (styleBucketHasColor(l.style)) return true;\n const bp = l.styleBreakpoints;\n if (!bp) return false;\n return (\n styleBucketHasColor(bp.sm) ||\n styleBucketHasColor(bp.md) ||\n styleBucketHasColor(bp.lg) ||\n styleBucketHasColor(bp.xl) ||\n styleBucketHasColor(bp['2xl'])\n );\n};\n\nexport const iconLayerHasAuthoringColor = (l: IconLayer): boolean => {\n if (styleBucketHasColor(l.style)) return true;\n const bp = l.styleBreakpoints;\n if (!bp) return false;\n return (\n styleBucketHasColor(bp.sm) ||\n styleBucketHasColor(bp.md) ||\n styleBucketHasColor(bp.lg) ||\n styleBucketHasColor(bp.xl) ||\n styleBucketHasColor(bp['2xl'])\n );\n};\n\n/**\n * Builder / dashboard semantic checks beyond {@link FlowManifestSchema}.\n * Kept in flow-runtime so seeds, API, and the web editor share one definition.\n */\nexport const collectFlowBuilderIssues = (manifest: FlowManifest): string[] => {\n const issues: string[] = [];\n const fieldKeyOwners = new Map<string, string[]>();\n const screenIds = new Set(manifest.screens.map((s) => s.id));\n const jumpTargetIds = new Set<string>([\n ...screenIds,\n ...manifest.decisionNodes.map((d) => d.id),\n ...(manifest.externalSurfaceNodes ?? []).map((n) => n.id),\n ]);\n\n if (manifest.entryScreenId == null) {\n if (manifest.screens.length > 0) {\n issues.push(\n 'Connect the flow entry node on the canvas to where the flow starts (a screen, decision, or integration step).',\n );\n }\n } else if (!jumpTargetIds.has(manifest.entryScreenId)) {\n issues.push(`Flow entry target \"${manifest.entryScreenId}\" does not exist.`);\n }\n\n for (const screen of manifest.screens as unknown as Screen[]) {\n let inputCount = 0;\n let oauthLoginLayerCount = 0;\n let emailPasswordAuthLayerCount = 0;\n let needsManualSubmit = false;\n let hasContinueButton = false;\n const screenLabel = screen.name || screen.id;\n const mediaLayerIds = new Set<string>();\n const buttonLayerIds = new Set<string>();\n const shellPlaybackId = screenBackgroundPlaybackId(screen.id);\n const shellFill = screen.containerStyle?.backgroundFill;\n const shellVideoFill =\n shellFill?.kind === 'video' ? (shellFill as ScreenBackgroundVideoFill) : undefined;\n\n walkScreen(screen, (l) => {\n if (l.kind === 'button') buttonLayerIds.add(l.id);\n });\n\n if (shellFill?.kind === 'image' || shellFill?.kind === 'video') {\n if (!shellFill.media?.mediaAssetId) {\n issues.push(\n `Screen \"${screenLabel}\" ${shellFill.kind} background needs a media asset.`,\n );\n }\n }\n\n if (shellVideoFill) {\n if (shellVideoFill.autoPlay === false) {\n const triggerId = shellVideoFill.triggerLayerId?.trim();\n if (!triggerId) {\n issues.push(\n `Screen \"${screenLabel}\" background video needs a trigger button when auto-play is off.`,\n );\n } else if (!buttonLayerIds.has(triggerId)) {\n issues.push(\n `Screen \"${screenLabel}\" background video references a missing trigger button \"${triggerId}\".`,\n );\n } else {\n const btn = findLayerById(screen, triggerId) as ButtonLayer | null;\n if (!btn || btn.kind !== 'button') {\n issues.push(\n `Screen \"${screenLabel}\" background video trigger must be a button layer.`,\n );\n } else if (btn.action.kind !== 'play_media') {\n issues.push(\n `Screen \"${screenLabel}\" background video trigger button must use On Tap → Play media.`,\n );\n } else if (!btn.action.targetLayerIds.includes(shellPlaybackId)) {\n issues.push(\n `Screen \"${screenLabel}\" background video is not listed on trigger button \"${triggerId}\".`,\n );\n }\n }\n } else if (shellVideoFill.triggerLayerId) {\n const btn = findLayerById(screen, shellVideoFill.triggerLayerId);\n if (\n btn?.kind === 'button' &&\n btn.action.kind === 'play_media' &&\n !btn.action.targetLayerIds.includes(shellPlaybackId)\n ) {\n issues.push(\n `Screen \"${screenLabel}\" background video trigger button does not target the screen background.`,\n );\n }\n }\n }\n\n walkScreen(screen, (l) => {\n if (l.kind === 'lottie' || l.kind === 'video') mediaLayerIds.add(l.id);\n if (l.kind === 'oauth_login') {\n oauthLoginLayerCount += 1;\n }\n if (l.kind === 'email_password_auth') {\n emailPasswordAuthLayerCount += 1;\n }\n if (l.kind === 'button' && l.action.kind === 'continue') {\n hasContinueButton = true;\n }\n if (isInputLayer(l)) {\n inputCount += 1;\n if (l.kind === 'multiple_choice' || l.kind === 'text_input' || l.kind === 'scale_input') {\n needsManualSubmit = true;\n }\n const key = l.fieldKey;\n const label = screen.name || screen.id;\n if (!key || key.length === 0) {\n issues.push(`Screen \"${label}\" is missing a variable name (fieldKey).`);\n } else if (!FIELD_KEY_RE.test(key)) {\n issues.push(\n `Screen \"${label}\" has an invalid variable name \"${key}\" — use snake_case (a–z, 0–9, _).`,\n );\n } else {\n const owners = fieldKeyOwners.get(key) ?? [];\n owners.push(label);\n fieldKeyOwners.set(key, owners);\n }\n\n if (l.kind === 'single_choice' || l.kind === 'multiple_choice') {\n for (const cond of l.branching.conditions) {\n if (!screenIds.has(cond.goTo)) {\n issues.push(\n `Screen \"${label}\" branches choice \"${cond.choiceId}\" to a missing screen \"${cond.goTo}\".`,\n );\n }\n }\n }\n }\n if (l.kind === 'button' && l.action.kind === 'go_to_step') {\n if (!screenIds.has(l.action.screenId)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" targets a missing screen \"${l.action.screenId}\".`,\n );\n }\n }\n if (l.kind === 'button' && l.action.kind === 'request_app_review') {\n const def = screen.next?.default;\n if (def == null) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" requests app review but the screen has no default next step.`,\n );\n } else if (!screenIds.has(def) && !manifest.decisionNodes?.some((d) => d.id === def)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" requests app review but default next \"${def}\" is missing.`,\n );\n }\n }\n if (l.kind === 'button' && l.action.kind === 'request_os_permission') {\n const o = l.action.outcomes;\n for (const slot of ['granted', 'denied', 'blocked'] as const) {\n const sid = o[slot];\n if (sid === OS_PERMISSION_OUTCOME_END) {\n continue;\n }\n if (sid === OS_PERMISSION_OUTCOME_CONTINUE) {\n const def = screen.next?.default;\n if (def == null) {\n continue;\n }\n if (!screenIds.has(def) && !manifest.decisionNodes?.some((d) => d.id === def)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" (${slot}) continues to missing target \"${def}\".`,\n );\n }\n continue;\n }\n if (!screenIds.has(sid)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" (${slot}) targets a missing screen \"${sid}\".`,\n );\n }\n }\n }\n if (l.kind === 'back_button' && l.fallbackScreenId && !screenIds.has(l.fallbackScreenId)) {\n issues.push(\n `Back button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" uses a missing fallback screen \"${l.fallbackScreenId}\".`,\n );\n }\n if (l.kind === 'button' && l.action.kind === 'go_back_one_screen' && l.action.fallbackScreenId) {\n if (!screenIds.has(l.action.fallbackScreenId)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screen.name || screen.id}\" uses a missing fallback screen \"${l.action.fallbackScreenId}\".`,\n );\n }\n }\n if (l.kind === 'lottie' || l.kind === 'video') {\n const media = l as LottieLayer | VideoLayer;\n if (media.autoPlay === false) {\n const triggerId = media.triggerLayerId?.trim();\n if (!triggerId) {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" needs a trigger button when auto-play is off.`,\n );\n } else if (!buttonLayerIds.has(triggerId)) {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" references a missing trigger button \"${triggerId}\".`,\n );\n } else {\n const btn = findLayerById(screen, triggerId) as ButtonLayer | null;\n if (!btn || btn.kind !== 'button') {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" trigger must be a button layer.`,\n );\n } else if (btn.action.kind !== 'play_media') {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" trigger button must use On Tap → Play media (or pick the trigger again from this screen).`,\n );\n } else if (!btn.action.targetLayerIds.includes(media.id)) {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" is not listed on trigger button \"${triggerId}\".`,\n );\n }\n }\n } else if (media.triggerLayerId) {\n const btn = findLayerById(screen, media.triggerLayerId);\n if (btn?.kind === 'button' && btn.action.kind === 'play_media' && !btn.action.targetLayerIds.includes(media.id)) {\n issues.push(\n `${media.kind === 'video' ? 'Video' : 'Lottie'} \"${media.name || media.id}\" on screen \"${screenLabel}\" trigger button does not target this layer.`,\n );\n }\n }\n }\n if (l.kind === 'button' && l.action.kind === 'play_media') {\n for (const targetId of l.action.targetLayerIds) {\n if (targetId === shellPlaybackId) {\n if (!shellVideoFill) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screenLabel}\" targets screen background video, but this screen has no video background.`,\n );\n }\n continue;\n }\n if (isScreenBackgroundPlaybackId(targetId)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screenLabel}\" play-media target \"${targetId}\" is not valid for this screen.`,\n );\n continue;\n }\n if (!mediaLayerIds.has(targetId)) {\n issues.push(\n `Button \"${l.name || l.id}\" on screen \"${screenLabel}\" play-media target \"${targetId}\" must be a Lottie or video layer on this screen, or screen background video.`,\n );\n }\n }\n }\n });\n\n if (oauthLoginLayerCount > 0 && inputCount > 0) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" cannot combine OAuth Login with input layers (${inputCount}). Split them onto separate screens.`,\n );\n }\n\n if (emailPasswordAuthLayerCount > 0 && inputCount > 0) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" cannot combine Email / password login with input layers (${inputCount}). Split them onto separate screens.`,\n );\n }\n\n if (oauthLoginLayerCount > 0 && emailPasswordAuthLayerCount > 0) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" cannot combine OAuth Login with Email / password login. Use one login block per screen.`,\n );\n }\n\n if (emailPasswordAuthLayerCount > 1) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" has ${emailPasswordAuthLayerCount} Email / password login layers; only one is allowed per screen.`,\n );\n }\n\n if (oauthLoginLayerCount > 1) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" has ${oauthLoginLayerCount} OAuth Login layers; only one is allowed per screen.`,\n );\n }\n\n if (inputCount > 1) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" has ${inputCount} input layers; only one is allowed.`,\n );\n }\n\n if (needsManualSubmit && !hasContinueButton) {\n issues.push(\n `Screen \"${screen.name || screen.id}\" has a multiple_choice, text_input, or scale_input but no Button with action \"continue\". Add a Continue button so users can submit.`,\n );\n }\n }\n\n for (const [key, owners] of fieldKeyOwners) {\n if (owners.length > 1) {\n issues.push(`Variable name \"${key}\" is used by multiple screens: ${owners.join(', ')}.`);\n }\n }\n\n for (const screen of manifest.screens as unknown as Screen[]) {\n walkScreen(screen, (l) => {\n const screenLabel = screen.name || screen.id;\n if (l.kind === 'text' && !textLayerHasAuthoringColor(l)) {\n issues.push(\n `Screen \"${screenLabel}\": text layer \"${l.id}\" must set style.color for light and dark (CSS inheritance does not apply on native).`,\n );\n }\n if (l.kind === 'icon' && !iconLayerHasAuthoringColor(l)) {\n issues.push(\n `Screen \"${screenLabel}\": icon layer \"${l.id}\" must set style.color for light and dark.`,\n );\n }\n });\n }\n\n return issues;\n};\n","import type { Variant } from '@getrheo/contracts';\n\n/** Stable string hash (FNV-1a 32-bit). Suitable for non-cryptographic bucketing. */\nexport const fnv1a = (input: string): number => {\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = (hash * 0x01000193) >>> 0;\n }\n return hash >>> 0;\n};\n\nexport const assignVariant = (\n experimentId: string,\n appUserId: string,\n variants: Variant[],\n): Variant | null => {\n if (variants.length === 0) return null;\n const totalWeight = variants.reduce((sum, v) => sum + v.weight, 0);\n if (totalWeight <= 0) return variants[0] ?? null;\n const bucket = fnv1a(`${experimentId}:${appUserId}`) % totalWeight;\n let acc = 0;\n for (const v of variants) {\n acc += v.weight;\n if (bucket < acc) return v;\n }\n return variants[variants.length - 1] ?? null;\n};\n","import type { Branding } from '@getrheo/contracts/dashboard';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type {\n CarouselPageControl,\n CheckboxGlyphStyle,\n CommonStyle,\n Layer,\n TextStyle,\n ThemedColor,\n} from '@getrheo/contracts/layers';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport type { ManifestValidationIssue } from './validation';\nimport { isBrandGradientToken, isStoredLinearGradientCss, resolveBrandGradientToken } from './brandGradient';\nimport { walkScreen } from './layers';\n\nconst BP_KEYS = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\n\nconst themedStrings = (tc: ThemedColor | undefined): string[] => {\n if (tc === undefined) return [];\n if (typeof tc === 'string') return [tc];\n const out: string[] = [];\n if (tc.light !== undefined) out.push(tc.light);\n if (tc.dark !== undefined) out.push(tc.dark);\n return out;\n};\n\nconst pushIssue = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n field: string,\n message: string,\n code: string,\n): void => {\n issues.push({\n stepId,\n path: ['screens', stepId, layerId, field],\n message,\n code,\n });\n};\n\nconst checkThemed = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n field: string,\n tc: ThemedColor | undefined,\n allowGradient: boolean,\n branding: Branding | undefined,\n): void => {\n for (const s of themedStrings(tc)) {\n if (isBrandGradientToken(s)) {\n if (!allowGradient) {\n pushIssue(\n issues,\n stepId,\n layerId,\n field,\n `Brand gradient presets can only be used on background fills (not ${field}).`,\n 'brand_gradient.disallowed_field',\n );\n return;\n }\n if (branding !== undefined && resolveBrandGradientToken(branding, s) === undefined) {\n pushIssue(\n issues,\n stepId,\n layerId,\n field,\n `Brand gradient preset not found: ${s}`,\n 'brand_gradient.unknown_preset',\n );\n }\n continue;\n }\n if (isStoredLinearGradientCss(s)) {\n if (!allowGradient) {\n pushIssue(\n issues,\n stepId,\n layerId,\n field,\n `CSS linear gradients can only be used on background fills in v1 (not ${field}).`,\n 'brand_gradient.linear_css_disallowed_field',\n );\n return;\n }\n }\n }\n};\n\nconst checkCommon = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n fieldPrefix: string,\n s: CommonStyle | undefined,\n branding: Branding | undefined,\n): void => {\n if (!s) return;\n checkThemed(issues, stepId, layerId, `${fieldPrefix}background`, s.background, true, branding);\n checkThemed(issues, stepId, layerId, `${fieldPrefix}border.color`, s.border?.color, false, branding);\n checkThemed(issues, stepId, layerId, `${fieldPrefix}shadow.color`, s.shadow?.color, false, branding);\n};\n\nconst checkTextLike = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n fieldPrefix: string,\n s: TextStyle | undefined,\n branding: Branding | undefined,\n): void => {\n if (!s) return;\n checkCommon(issues, stepId, layerId, fieldPrefix, s, branding);\n checkThemed(issues, stepId, layerId, `${fieldPrefix}color`, s.color, false, branding);\n};\n\nconst walkCommonBreakpoints = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n base: CommonStyle | undefined,\n breakpoints:\n | Partial<Record<(typeof BP_KEYS)[number], Partial<CommonStyle> | undefined>>\n | undefined,\n branding: Branding | undefined,\n): void => {\n checkCommon(issues, stepId, layerId, 'style.', base, branding);\n if (!breakpoints) return;\n for (const k of BP_KEYS) {\n const patch = breakpoints[k];\n if (patch) checkCommon(issues, stepId, layerId, `styleBreakpoints.${k}.`, patch, branding);\n }\n};\n\nconst walkTextBreakpoints = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n base: TextStyle | undefined,\n breakpoints:\n | Partial<Record<(typeof BP_KEYS)[number], Partial<TextStyle> | undefined>>\n | undefined,\n branding: Branding | undefined,\n): void => {\n checkTextLike(issues, stepId, layerId, 'style.', base, branding);\n if (!breakpoints) return;\n for (const k of BP_KEYS) {\n const patch = breakpoints[k];\n if (patch) checkTextLike(issues, stepId, layerId, `styleBreakpoints.${k}.`, patch, branding);\n }\n};\n\nconst checkCheckboxGlyph = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n suffix: string,\n g: CheckboxGlyphStyle | undefined,\n branding: Branding | undefined,\n): void => {\n if (!g) return;\n const p = suffix ? `${suffix}.` : '';\n checkThemed(issues, stepId, layerId, `${p}background`, g.background, true, branding);\n checkThemed(issues, stepId, layerId, `${p}border.color`, g.border?.color, false, branding);\n checkThemed(issues, stepId, layerId, `${p}shadow.color`, g.shadow?.color, false, branding);\n checkThemed(issues, stepId, layerId, `${p}checkColor`, g.checkColor, false, branding);\n};\n\nconst checkCarouselPageControl = (\n issues: ManifestValidationIssue[],\n stepId: string,\n layerId: string,\n pc: CarouselPageControl | undefined,\n branding: Branding | undefined,\n): void => {\n if (!pc) return;\n const ind = pc.indicators;\n if (ind) {\n checkThemed(issues, stepId, layerId, 'pageControl.indicators.defaultColor', ind.defaultColor, false, branding);\n checkThemed(issues, stepId, layerId, 'pageControl.indicators.activeColor', ind.activeColor, false, branding);\n checkThemed(issues, stepId, layerId, 'pageControl.indicators.border.color', ind.border?.color, false, branding);\n checkThemed(\n issues,\n stepId,\n layerId,\n 'pageControl.indicators.activeBorder.color',\n ind.activeBorder?.color,\n false,\n branding,\n );\n }\n checkThemed(issues, stepId, layerId, 'pageControl.border.color', pc.border?.color, false, branding);\n checkThemed(issues, stepId, layerId, 'pageControl.shadow.color', pc.shadow?.color, false, branding);\n};\n\nconst scanLayer = (issues: ManifestValidationIssue[], screen: Screen, layer: Layer, branding: Branding | undefined) => {\n const stepId = screen.id;\n const id = layer.id;\n\n switch (layer.kind) {\n case 'stack':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n checkCommon(issues, stepId, id, 'selectedStyle.', layer.selectedStyle, branding);\n return;\n case 'text':\n walkTextBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'image':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'lottie':\n case 'video':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'icon': {\n const base = layer.style;\n checkCommon(issues, stepId, id, 'style.', base, branding);\n checkThemed(issues, stepId, id, 'style.color', base?.color, false, branding);\n const bp = layer.styleBreakpoints;\n if (bp) {\n for (const k of BP_KEYS) {\n const patch = bp[k];\n if (!patch) continue;\n checkCommon(issues, stepId, id, `styleBreakpoints.${k}.`, patch, branding);\n checkThemed(issues, stepId, id, `styleBreakpoints.${k}.color`, patch.color, false, branding);\n }\n }\n return;\n }\n case 'button':\n case 'back_button': {\n const base = layer.style;\n checkTextLike(issues, stepId, id, 'style.', base, branding);\n const bp = layer.styleBreakpoints;\n if (bp) {\n for (const k of BP_KEYS) {\n const patch = bp[k];\n if (patch) checkTextLike(issues, stepId, id, `styleBreakpoints.${k}.`, patch, branding);\n }\n }\n return;\n }\n case 'hyperlink':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'progress':\n checkCommon(issues, stepId, id, 'style.', layer.style, branding);\n checkThemed(issues, stepId, id, 'trackColor', layer.trackColor, false, branding);\n checkThemed(issues, stepId, id, 'fillColor', layer.fillColor, false, branding);\n return;\n case 'loader':\n checkCommon(issues, stepId, id, 'style.', layer.style, branding);\n checkThemed(issues, stepId, id, 'trackColor', layer.trackColor, false, branding);\n checkThemed(issues, stepId, id, 'fillColor', layer.fillColor, false, branding);\n return;\n case 'counter':\n walkTextBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'checkbox':\n checkCheckboxGlyph(issues, stepId, id, 'uncheckedStyle', layer.uncheckedStyle, branding);\n checkCheckboxGlyph(issues, stepId, id, 'checkedStyle', layer.checkedStyle, branding);\n return;\n case 'carousel':\n walkCommonBreakpoints(issues, stepId, id, layer.style, undefined, branding);\n checkCarouselPageControl(issues, stepId, id, layer.pageControl, branding);\n return;\n case 'single_choice':\n case 'multiple_choice':\n return;\n case 'text_input':\n walkCommonBreakpoints(issues, stepId, id, layer.style, undefined, branding);\n return;\n case 'scale_input':\n walkCommonBreakpoints(issues, stepId, id, layer.style, undefined, branding);\n checkThemed(issues, stepId, id, 'labelStyle.color', layer.labelStyle?.color, false, branding);\n checkThemed(issues, stepId, id, 'valueStyle.color', layer.valueStyle?.color, false, branding);\n checkThemed(issues, stepId, id, 'trackColor', layer.trackColor, false, branding);\n checkThemed(issues, stepId, id, 'fillColor', layer.fillColor, false, branding);\n checkThemed(issues, stepId, id, 'thumbColor', layer.thumbColor, false, branding);\n return;\n case 'oauth_login':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'oauth_provider':\n if (layer.variant === 'preset') {\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n } else {\n const base = layer.style;\n checkTextLike(issues, stepId, id, 'style.', base, branding);\n const bp = layer.styleBreakpoints;\n if (bp) {\n for (const k of BP_KEYS) {\n const patch = bp[k];\n if (patch) checkTextLike(issues, stepId, id, `styleBreakpoints.${k}.`, patch, branding);\n }\n }\n }\n return;\n case 'email_password_auth':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'email_password_field':\n walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);\n return;\n case 'email_password_submit': {\n const base = layer.style;\n checkTextLike(issues, stepId, id, 'style.', base, branding);\n const bp = layer.styleBreakpoints;\n if (bp) {\n for (const k of BP_KEYS) {\n const patch = bp[k];\n if (patch) checkTextLike(issues, stepId, id, `styleBreakpoints.${k}.`, patch, branding);\n }\n }\n return;\n }\n default:\n return;\n }\n};\n\n/**\n * Non-schema checks: `$brandGradient:` is only valid on background-like fields; optional unknown-id check when `branding` is set.\n */\nexport const collectBrandGradientManifestIssues = (\n manifest: FlowManifest,\n branding: Branding | undefined,\n): ManifestValidationIssue[] => {\n const issues: ManifestValidationIssue[] = [];\n for (const screen of manifest.screens) {\n walkScreen(screen as Screen, (layer) => scanLayer(issues, screen as Screen, layer, branding));\n }\n return issues;\n};\n","/**\n * Multiply the alpha of a resolved CSS color by `factor` (0–1).\n * Used so text layers can dim only the background fill without applying `opacity` to the whole node.\n * Supports #RGB, #RRGGBB, #RRGGBBAA, rgb(), rgba(). Unrecognized strings are returned as-is (no alpha change).\n */\nexport const multiplyColorAlpha = (\n color: string | undefined,\n factor: number | undefined,\n): string | undefined => {\n if (color === undefined) return undefined;\n if (factor === undefined || factor >= 1 - 1e-6) return color;\n if (factor <= 1e-6) return 'rgba(0,0,0,0)';\n\n const hex8 = /^#([0-9a-fA-F]{8})$/;\n const hex6 = /^#([0-9a-fA-F]{6})$/;\n const hex3 = /^#([0-9a-fA-F]{3})$/;\n const rgba = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/;\n\n let r: number;\n let g: number;\n let b: number;\n let a = 1;\n\n const m8 = color.match(hex8);\n const m6 = color.match(hex6);\n const m3 = color.match(hex3);\n const mr = color.match(rgba);\n\n if (m8) {\n const h = m8[1]!;\n r = parseInt(h.slice(0, 2), 16);\n g = parseInt(h.slice(2, 4), 16);\n b = parseInt(h.slice(4, 6), 16);\n a = parseInt(h.slice(6, 8), 16) / 255;\n } else if (m6) {\n const h = m6[1]!;\n r = parseInt(h.slice(0, 2), 16);\n g = parseInt(h.slice(2, 4), 16);\n b = parseInt(h.slice(4, 6), 16);\n } else if (m3) {\n const h = m3[1]!;\n r = parseInt(h[0]! + h[0]!, 16);\n g = parseInt(h[1]! + h[1]!, 16);\n b = parseInt(h[2]! + h[2]!, 16);\n } else if (mr) {\n r = Number(mr[1]);\n g = Number(mr[2]);\n b = Number(mr[3]);\n if (mr[4] !== undefined) a = Number(mr[4]);\n } else {\n return color;\n }\n\n const outA = Math.min(1, Math.max(0, a * factor));\n return `rgba(${r},${g},${b},${outA})`;\n};\n","import {\n type AnimatableProperty,\n type AnimationClip,\n type EasingToken,\n type Keyframe,\n type KeyframeTrack,\n} from '@getrheo/contracts/animations';\nimport type { Layer, LayerKind, StackLayer } from '@getrheo/contracts/layers';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport { walkScreen } from './layers';\n\n/**\n * Cubic-bezier control points for every named easing token. The exact\n * numbers are shared between web (CSS keyframes / `cubic-bezier(...)`)\n * and native (Reanimated `Easing.bezier`) so playback matches sample by\n * sample.\n */\nexport const EASING_BEZIERS: Record<EasingToken, [number, number, number, number]> = {\n linear: [0, 0, 1, 1],\n 'ease-in': [0.42, 0, 1, 1],\n 'ease-out': [0, 0, 0.58, 1],\n 'ease-in-out': [0.42, 0, 0.58, 1],\n // Material-style \"standard\" / \"emphasized\" curves — useful defaults\n // for product animations without inviting per-platform divergence.\n standard: [0.2, 0, 0, 1],\n emphasized: [0.3, 0, 0, 1],\n};\n\nconst sampleBezier = (\n t: number,\n [x1, y1, x2, y2]: [number, number, number, number],\n): number => {\n // Robust numeric solver for the parametric cubic-bezier curve. We need\n // to find the parameter `s` such that `bezierX(s) === t`, then return\n // `bezierY(s)`. Newton-Raphson with a fallback bisection keeps us\n // accurate at the curve endpoints (where derivatives near zero make\n // pure Newton flaky).\n if (x1 === y1 && x2 === y2) return t;\n const ax = 3 * x1 - 3 * x2 + 1;\n const bx = 3 * x2 - 6 * x1;\n const cx = 3 * x1;\n const ay = 3 * y1 - 3 * y2 + 1;\n const by = 3 * y2 - 6 * y1;\n const cy = 3 * y1;\n const xAt = (s: number) => ((ax * s + bx) * s + cx) * s;\n const yAt = (s: number) => ((ay * s + by) * s + cy) * s;\n const dxAt = (s: number) => (3 * ax * s + 2 * bx) * s + cx;\n let s = t;\n for (let i = 0; i < 8; i++) {\n const x = xAt(s) - t;\n const dx = dxAt(s);\n if (Math.abs(x) < 1e-6) return yAt(s);\n if (Math.abs(dx) < 1e-6) break;\n s -= x / dx;\n }\n let lo = 0;\n let hi = 1;\n s = t;\n for (let i = 0; i < 24; i++) {\n const x = xAt(s);\n if (Math.abs(x - t) < 1e-6) return yAt(s);\n if (x < t) lo = s;\n else hi = s;\n s = (lo + hi) / 2;\n }\n return yAt(s);\n};\n\n/**\n * Map an authoring time `tNorm ∈ [0,1]` to the eased value for a single\n * track. Returns the final value when t ≥ last keyframe and the first\n * value when t ≤ first keyframe so renderers can hold pre/post values\n * without special-casing edges.\n */\nexport const sampleTrack = (track: KeyframeTrack, tNorm: number): number => {\n const ks = track.keyframes;\n if (tNorm <= ks[0]!.t) return ks[0]!.value;\n if (tNorm >= ks[ks.length - 1]!.t) return ks[ks.length - 1]!.value;\n let prev: Keyframe = ks[0]!;\n let next: Keyframe = ks[ks.length - 1]!;\n for (let i = 0; i < ks.length - 1; i++) {\n if (ks[i]!.t <= tNorm && ks[i + 1]!.t >= tNorm) {\n prev = ks[i]!;\n next = ks[i + 1]!;\n break;\n }\n }\n const span = next.t - prev.t;\n const localT = span === 0 ? 0 : (tNorm - prev.t) / span;\n const eased = sampleBezier(localT, EASING_BEZIERS[prev.easing ?? 'linear']);\n return prev.value + (next.value - prev.value) * eased;\n};\n\nexport type SampledClip = Partial<Record<AnimatableProperty, number>>;\n\n/** Effective delay for a clip given its owning screen's stagger config. */\nexport const effectiveDelayMs = (clip: AnimationClip, screen: Screen): number => {\n const base = clip.delayMs ?? 0;\n if (clip.trigger === 'stagger' && clip.staggerIndex !== undefined) {\n const step = screen.stagger?.stepMs ?? 60;\n return base + clip.staggerIndex * step;\n }\n return base;\n};\n\n/**\n * Sample every track of a clip at an absolute time `tMs` measured from\n * the clip's mount. Honors `delayMs` (incl. stagger). Always returns the\n * authored property keys, even if the clip has not yet started, so\n * renderers can treat the result as a stable style overlay.\n */\nexport const sampleClipAt = (\n clip: AnimationClip,\n screen: Screen,\n tMs: number,\n): SampledClip => {\n const delay = effectiveDelayMs(clip, screen);\n const local = clip.durationMs > 0 ? (tMs - delay) / clip.durationMs : 1;\n const tNorm = Math.min(1, Math.max(0, local));\n const out: SampledClip = {};\n for (const track of clip.tracks) {\n out[track.property] = sampleTrack(track, tNorm);\n }\n return out;\n};\n\n/** Merge sampled clips: later keys override; only defined keys from `overlay` win. */\nexport const mergeSampledClips = (base: SampledClip, overlay: SampledClip): SampledClip => {\n const out: SampledClip = { ...base };\n for (const k of Object.keys(overlay) as (keyof SampledClip)[]) {\n const v = overlay[k];\n if (v !== undefined) out[k] = v;\n }\n return out;\n};\n\n/**\n * Sample all clips for `layerId` at global screen time `tMs`.\n *\n * Clips are applied in order of increasing start time (`effectiveDelayMs`),\n * then stable `id`. Each clip contributes once its start time has been\n * reached; after it ends, its **final** sampled values stay merged into\n * state so later clips override animating properties. For **mount** and\n * **stagger** clips, while `tMs` is before that clip's delay, we merge its\n * **start** keyframe values unless some **earlier** clip is inside its own\n * `[delay, delay + duration)` window — so a delayed fade-in stays at opacity\n * 0 during the wait, but a move that overlaps the fade's delay still shows\n * default opacity until the fade segment begins. **Unmount** clips never\n * apply pre-delay sampling. This supports multiple appear / hide segments on\n * the same layer (web sim / builder scrub).\n *\n * **Native:** `LayerMotionShell` still uses the first mount + first unmount\n * clip only until RN playback is extended for arbitrary sequences.\n */\nexport const sampleLayerAnimAt = (screen: Screen, layerId: string, tMs: number): SampledClip => {\n const list = clipsByLayerId(screen).get(layerId) ?? [];\n if (list.length === 0) return {};\n\n const sorted = [...list].sort((a, b) => {\n const da = effectiveDelayMs(a, screen);\n const db = effectiveDelayMs(b, screen);\n if (da !== db) return da - db;\n return a.id.localeCompare(b.id);\n });\n\n let state: SampledClip = {};\n for (let i = 0; i < sorted.length; i++) {\n const clip = sorted[i]!;\n const d = effectiveDelayMs(clip, screen);\n const end = d + clip.durationMs;\n if (tMs < d) {\n if (clip.trigger === 'unmount') continue;\n if (clip.trigger !== 'mount' && clip.trigger !== 'stagger') continue;\n const earlierAnimating = sorted.slice(0, i).some((earlier) => {\n const dE = effectiveDelayMs(earlier, screen);\n const endE = dE + earlier.durationMs;\n return tMs >= dE && tMs < endE;\n });\n if (earlierAnimating) continue;\n const pending = sampleClipAt(clip, screen, d);\n state = mergeSampledClips(state, pending);\n continue;\n }\n const at = tMs <= end ? tMs : end;\n state = mergeSampledClips(state, sampleClipAt(clip, screen, at));\n }\n return state;\n};\n\n/** True if this layer has any animation clip (mount, unmount, or legacy stagger). */\nexport const layerHasAnimationClips = (screen: Screen | undefined, layerId: string): boolean =>\n (screen?.animations ?? []).some((c) => c.targetLayerId === layerId);\n\n/** Total time (ms) before the screen's animations are visually settled. */\nexport const screenAnimationsDurationMs = (screen: Screen): number => {\n if (!screen.animations || screen.animations.length === 0) return 0;\n let max = 0;\n for (const clip of screen.animations) {\n const total = effectiveDelayMs(clip, screen) + clip.durationMs;\n if (total > max) max = total;\n }\n return max;\n};\n\n/** End of the loader fill segment on the timeline (ms from screen mount), for one loader layer. */\nexport const loaderLayerFillTimelineEndMs = (layer: Extract<Layer, { kind: 'loader' }>): number =>\n (layer.fillDelayMs ?? 0) + (layer.durationMs ?? 2000);\n\n/** Latest end time (ms from screen mount) of any loader timed fill on this screen. */\nexport const screenLoaderTimelineExtentMs = (screen: Screen): number => {\n let max = 0;\n walkScreen(screen, (l) => {\n if (l.kind !== 'loader') return;\n const end = loaderLayerFillTimelineEndMs(l);\n if (end > max) max = end;\n });\n return max;\n};\n\n/**\n * Fill progress 0–1 for scrubber / motion clock time `tMs` (linear; no easing).\n */\nexport const loaderFillProgressAtGlobalMs = (\n tMs: number,\n fillDelayMs: number,\n durationMs: number,\n): number => {\n if (durationMs <= 0) return tMs >= fillDelayMs ? 1 : 0;\n return Math.min(1, Math.max(0, (tMs - fillDelayMs) / durationMs));\n};\n\n/** Default timeline play span when a Lottie layer has no {@link durationMs}. */\nexport const DEFAULT_LOTTIE_PLAY_DURATION_MS = 2_000;\n\ntype LottieJsonMeta = { fr?: number; ip?: number; op?: number };\n\n/** Duration (ms) from Lottie JSON `ip` / `op` / `fr` when present. */\nexport const lottieJsonDurationMs = (animationData: object): number => {\n const j = animationData as LottieJsonMeta;\n const fr = typeof j.fr === 'number' && j.fr > 0 ? j.fr : 60;\n const ip = typeof j.ip === 'number' ? j.ip : 0;\n const op = typeof j.op === 'number' ? j.op : 60;\n const frames = Math.max(0, op - ip);\n return Math.max(1, Math.round((frames / fr) * 1000));\n};\n\n/**\n * @deprecated Prefer {@link workbenchTimelineTotalMs} from `@getrheo/flow-runtime/restingMotion`.\n * Kept for tests; returns mount/unmount clip extent only (no 10s floor).\n */\nexport const MIN_ANIMATION_TIMELINE_AUTHORING_SPAN_MS = 10_000;\n\n/** Mount/unmount clip extent only — does not include loader/Lottie/video/resting spans. */\nexport const animationTimelineAuthoringEndMs = (screen: Screen): number =>\n screenAnimationsDurationMs(screen);\n\n/**\n * Convert legacy `stagger` clips to `mount` with combined delay and drop\n * `screen.stagger` so authoring uses a single delay per clip.\n */\nexport const migrateStaggerClipsToMount = (screen: Screen): Screen => {\n const staggerClipPresent = screen.animations?.some((c) => c.trigger === 'stagger');\n const staggerFieldPresent = screen.stagger !== undefined;\n if (!staggerClipPresent && !staggerFieldPresent) return screen;\n\n const step = screen.stagger?.stepMs ?? 60;\n const { stagger: _st, ...rest } = screen;\n\n if (!staggerClipPresent) {\n return { ...rest };\n }\n\n const nextAnimations = (screen.animations ?? []).map((c) => {\n if (c.trigger !== 'stagger') return c;\n const base = c.delayMs ?? 0;\n const extra = (c.staggerIndex ?? 0) * step;\n return {\n ...c,\n trigger: 'mount' as const,\n delayMs: base + extra,\n staggerIndex: undefined,\n };\n });\n\n return { ...rest, animations: nextAnimations };\n};\n\nconst hasStaggerClip = (screen: Screen, layerId: string): boolean =>\n (screen.animations ?? []).some((c) => c.targetLayerId === layerId && c.trigger === 'stagger');\n\n/**\n * Reassigns `staggerIndex` on every stagger clip from **direct child order**\n * under each {@link StackLayer}. Matches how authors think about sibling\n * sequencing in the layer tree.\n */\nexport const applyStaggerIndicesFromTreeOrder = (screen: Screen): Screen => {\n if (!screen.animations?.some((c) => c.trigger === 'stagger')) return screen;\n\n const staggerIndexByLayerId = new Map<string, number>();\n\n const visitStackChildren = (stack: StackLayer): void => {\n let idx = 0;\n for (const ch of stack.children) {\n if (hasStaggerClip(screen, ch.id)) {\n staggerIndexByLayerId.set(ch.id, idx);\n idx += 1;\n }\n visit(ch);\n }\n };\n\n const visit = (l: Layer): void => {\n if (l.kind === 'stack') {\n visitStackChildren(l);\n return;\n }\n if (l.kind === 'carousel') {\n for (const s of l.slides) visit(s);\n return;\n }\n if (l.kind === 'button' || l.kind === 'back_button') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'hyperlink') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'single_choice' || l.kind === 'multiple_choice') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'text_input' || l.kind === 'scale_input') {\n l.children?.forEach(visit);\n return;\n }\n if (l.kind === 'oauth_login') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'oauth_provider' && l.variant === 'custom') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_auth') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_field') {\n l.children?.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_submit') {\n l.children.forEach(visit);\n return;\n }\n };\n\n if (screen.regions.header) visit(screen.regions.header);\n visit(screen.regions.body);\n if (screen.regions.footer) visit(screen.regions.footer);\n\n const nextAnimations = screen.animations.map((c) => {\n if (c.trigger !== 'stagger') return c;\n const nextIdx = staggerIndexByLayerId.get(c.targetLayerId);\n if (nextIdx === undefined) return c;\n if (c.staggerIndex === nextIdx) return c;\n return { ...c, staggerIndex: nextIdx };\n });\n\n if (nextAnimations.every((c, i) => c === screen.animations![i])) return screen;\n return { ...screen, animations: nextAnimations };\n};\n\n/**\n * Index clips by `targetLayerId` so renderers don't re-walk the full\n * animations array per layer per frame.\n */\nexport const clipsByLayerId = (screen: Screen): Map<string, AnimationClip[]> => {\n const map = new Map<string, AnimationClip[]>();\n if (!screen.animations) return map;\n for (const clip of screen.animations) {\n const list = map.get(clip.targetLayerId) ?? [];\n list.push(clip);\n map.set(clip.targetLayerId, list);\n }\n return map;\n};\n\n/**\n * Reduced-motion policy used by every runtime. The default behavior is\n * conservative: animations snap to their final keyframe (no movement),\n * and screen transitions become instantaneous. Authors who want more\n * latitude can extend this in the future without diverging the\n * renderers.\n */\nexport type ReducedMotionPolicy = 'play' | 'snap-to-end';\n\nexport const applyReducedMotion = (\n clip: AnimationClip,\n policy: ReducedMotionPolicy,\n): AnimationClip => {\n if (policy === 'play') return clip;\n return {\n ...clip,\n durationMs: 0,\n delayMs: 0,\n tracks: clip.tracks.map((t) => ({\n ...t,\n keyframes: t.keyframes.map((k) => ({ ...k, t: k.t === 0 ? 0 : 1 })),\n })),\n };\n};\n\n/**\n * Whitelist of animatable properties per layer kind. Keep this in sync\n * with renderer support so the editor can disable unsupported tracks\n * before they hit the manifest. Today every layer supports the same\n * style-token subset; we keep the function shape so future layer kinds\n * can opt-in / opt-out without schema changes.\n */\nexport const listAnimatablePropsForLayerKind = (\n _kind: LayerKind,\n): readonly AnimatableProperty[] => ['opacity', 'translateX', 'translateY', 'scale'];\n\nexport const isPropertyAllowedOnLayer = (\n layer: Layer,\n property: AnimatableProperty,\n): boolean => listAnimatablePropsForLayerKind(layer.kind).includes(property);\n","import type { RestingMotion, RestingMotionEntry, RestingMotionPreset } from '@getrheo/contracts/layers';\n\n\nexport type RuntimeStyle = Record<string, string | number | undefined>;\n\nexport const RESTING_MOTION_DEFAULT_DURATION_MS: Record<RestingMotionPreset, number> = {\n translate: 2400,\n bounce: 2000,\n scale: 2200,\n pulse: 1800,\n rotate: 3200,\n};\n\n/** Matches {@link RestingMotionSchema} `durationMs` / `scalePatternDurationMs` bounds. */\nexport const RESTING_MOTION_SEGMENT_DURATION_MS_MIN = 200;\nexport const RESTING_MOTION_SEGMENT_DURATION_MS_MAX = 20_000;\n\nexport const clampRestingMotionSegmentDurationMs = (ms: number): number =>\n Math.min(\n RESTING_MOTION_SEGMENT_DURATION_MS_MAX,\n Math.max(RESTING_MOTION_SEGMENT_DURATION_MS_MIN, Math.round(ms)),\n );\n\n/** Synthetic id for manifests that only had {@link Layer.restingMotion} (no `restingMotions`). */\nexport const LEGACY_RESTING_MOTION_ID = '__legacy' as const;\n\n/**\n * Canonical list of motion segments for a layer (array wins; legacy single field becomes one entry).\n */\nexport const layerRestingMotionEntries = (layer: {\n restingMotion?: RestingMotion;\n restingMotions?: RestingMotionEntry[] | null;\n}): RestingMotionEntry[] => {\n const list = layer.restingMotions;\n if (list && list.length > 0) return list;\n if (layer.restingMotion) {\n return [{ ...layer.restingMotion, id: LEGACY_RESTING_MOTION_ID }];\n }\n return [];\n};\n\n/** Persist motion segments; clears legacy single field when using the array. */\nexport const layerWithRestingMotionEntries = <\n L extends { restingMotion?: RestingMotion; restingMotions?: RestingMotionEntry[] },\n>(\n layer: L,\n entries: RestingMotionEntry[],\n): L => {\n if (entries.length === 0) {\n const next = { ...layer } as Record<string, unknown>;\n delete next.restingMotion;\n delete next.restingMotions;\n return next as L;\n }\n return {\n ...layer,\n restingMotions: entries.map((e) => ({ ...e })),\n restingMotion: undefined,\n };\n};\n\n/**\n * Non-loop scale: keep timeline segment and pattern duration identical in saved state.\n * Call when updating motion speed or clip length from the builder.\n */\nexport const restingMotionSyncScaleNonLoopClipAndPattern = (\n r: RestingMotion,\n ms: number,\n): RestingMotion => {\n const v = clampRestingMotionSegmentDurationMs(ms);\n return { ...r, durationMs: v, scalePatternDurationMs: v };\n};\n\n/** Align stored fields after paste/import when scale is one-shot. */\nexport const restingMotionNormalizeScaleNonLoopClip = (r: RestingMotion): RestingMotion => {\n if (r.preset !== 'scale' || r.loop === true) return r;\n const ms = clampRestingMotionSegmentDurationMs(\n r.durationMs ?? r.scalePatternDurationMs ?? RESTING_MOTION_DEFAULT_DURATION_MS.scale,\n );\n return { ...r, durationMs: ms, scalePatternDurationMs: ms };\n};\n\n/** Timeline segment length: motion runs from start until start + this value. */\nexport const restingMotionEffectiveDurationMs = (r: RestingMotion): number =>\n r.durationMs ?? RESTING_MOTION_DEFAULT_DURATION_MS[r.preset];\n\n/** One full pattern cycle (ms), used when looping. */\nexport const restingMotionCycleDurationMs = (r: RestingMotion): number =>\n r.cycleDurationMs ?? RESTING_MOTION_DEFAULT_DURATION_MS[r.preset];\n\n/**\n * Value for the Motion speed slider: one-shot → clip length ({@link restingMotionEffectiveDurationMs});\n * looping → one repeat ({@link restingMotionCycleDurationMs}).\n */\nexport const restingMotionMotionSpeedSliderMs = (r: RestingMotion): number =>\n r.loop === true ? restingMotionCycleDurationMs(r) : restingMotionEffectiveDurationMs(r);\n\nexport const restingMotionIntensity = (r: RestingMotion): number => {\n 'worklet';\n return r.intensity ?? 1;\n};\n\nexport const restingMotionDelayAfterMountEndMs = (r: RestingMotion): number =>\n r.delayMsAfterMountEnd ?? 0;\n","import type { RestingMotion } from '@getrheo/contracts/layers';\nimport type { Screen } from '@getrheo/contracts/screens';\n\nimport {\n effectiveDelayMs,\n screenAnimationsDurationMs,\n screenLoaderTimelineExtentMs,\n} from '../animations.js';\nimport { walkScreen } from '../layers.js';\nimport {\n layerRestingMotionEntries,\n restingMotionDelayAfterMountEndMs,\n restingMotionEffectiveDurationMs,\n} from './restingMotionEntries.js';\n\n/**\n * Latest end time (ms from screen mount) of mount/stagger clips for a layer.\n * `0` when none — layer motion may run immediately.\n */\nexport const layerMountClipsEndMs = (screen: Screen, layerId: string): number => {\n const clips =\n screen.animations?.filter(\n (c) => c.targetLayerId === layerId && (c.trigger === 'mount' || c.trigger === 'stagger'),\n ) ?? [];\n let maxEnd = 0;\n for (const c of clips) {\n maxEnd = Math.max(maxEnd, effectiveDelayMs(c, screen) + c.durationMs);\n }\n return maxEnd;\n};\n\n/**\n * Absolute time (ms from screen mount) when layer motion should begin: after all\n * mount/stagger clips end, plus optional author delay.\n */\nexport const layerRestingMotionStartMs = (\n screen: Screen,\n layerId: string,\n cfg: RestingMotion,\n): number =>\n cfg.timelineStartMs !== undefined\n ? cfg.timelineStartMs\n : layerMountClipsEndMs(screen, layerId) + restingMotionDelayAfterMountEndMs(cfg);\n\n/** Latest end (ms) of any layer motion segment (start + segment duration) — for timeline rulers. */\nexport const screenRestingTimelineExtentMs = (screen: Screen): number => {\n let max = 0;\n walkScreen(screen, (l) => {\n for (const r of layerRestingMotionEntries(l)) {\n const start = layerRestingMotionStartMs(screen, l.id, r);\n max = Math.max(max, start + restingMotionEffectiveDurationMs(r));\n }\n });\n return max;\n};\n\n/**\n * Upper bound for editor scrub time (ms from screen mount). Mount/unmount clips\n * alone cap at {@link screenAnimationsDurationMs}; layer motion may start and\n * end later, so the scrub clock must allow times up to this value or motion\n * never becomes \"allowed\" in the preview.\n */\nexport const motionTimelineScrubClampMs = (screen: Screen): number =>\n Math.max(\n screenAnimationsDurationMs(screen),\n screenRestingTimelineExtentMs(screen),\n screenLoaderTimelineExtentMs(screen),\n );\n\n/** Default ruler span when the screen has no timed motion content yet. */\nexport const DEFAULT_WORKBENCH_TIMELINE_MS = 10_000;\n\n/**\n * Animation workbench ruler/scrub length (ms). Grows with clips, resting motion,\n * and timed loader segments; never capped. Uses\n * {@link DEFAULT_WORKBENCH_TIMELINE_MS} only when nothing is scheduled yet.\n */\nexport const workbenchTimelineTotalMs = (screen: Screen): number => {\n const extent = motionTimelineScrubClampMs(screen);\n return extent > 0 ? extent : DEFAULT_WORKBENCH_TIMELINE_MS;\n};\n\nexport const layerRestingMotionEndMs = (\n screen: Screen,\n layerId: string,\n cfg: RestingMotion,\n): number => layerRestingMotionStartMs(screen, layerId, cfg) + restingMotionEffectiveDurationMs(cfg);\n\n/** Pure gate for tests and web scrub (no React): inside the motion segment [start, end). */\nexport const restingMotionAllowedAtTime = (\n screen: Screen,\n layerId: string,\n tMs: number,\n cfg: RestingMotion,\n): boolean => {\n const start = layerRestingMotionStartMs(screen, layerId, cfg);\n const end = start + restingMotionEffectiveDurationMs(cfg);\n return tMs >= start && tMs < end;\n};\n\n/** Elapsed ms inside the motion segment, or null if outside [start, end). */\nexport const restingMotionLocalElapsedMs = (\n screen: Screen,\n layerId: string,\n cfg: RestingMotion,\n tMs: number,\n): number | null => {\n if (!restingMotionAllowedAtTime(screen, layerId, tMs, cfg)) return null;\n return tMs - layerRestingMotionStartMs(screen, layerId, cfg);\n};\n","import type { RestingMotion } from '@getrheo/contracts/layers';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport {\n RESTING_MOTION_DEFAULT_DURATION_MS,\n restingMotionCycleDurationMs,\n restingMotionEffectiveDurationMs,\n restingMotionIntensity,\n type RuntimeStyle,\n} from './restingMotionEntries.js';\nimport {\n restingMotionLocalElapsedMs,\n} from './restingMotionTimeline.js';\n\n/** Peak lift (px) matched to legacy `14 * intensity` when {@link RestingMotion.bounceAmplitudePx} is unset. */\nexport const RESTING_MOTION_BOUNCE_BASE_PX = 14;\n\nexport const restingMotionBounceAmplitudePx = (r: RestingMotion): number =>\n r.bounceAmplitudePx ?? RESTING_MOTION_BOUNCE_BASE_PX * restingMotionIntensity(r);\n\n/** Single bounce arc: 0 → peak → 0 over phase ∈ [0, 1]. Negative Y is upward. */\nexport const bouncePhaseToTranslateY = (ph: number, amplitudePx: number): number =>\n -amplitudePx * Math.sin(Math.PI * ph);\n\n/** Default scale magnitude (%), used when {@link RestingMotion.scalePercent} / legacy fields omitted. */\nexport const RESTING_MOTION_DEFAULT_SCALE_UP_PERCENT = 8;\nexport const RESTING_MOTION_DEFAULT_SCALE_DOWN_PERCENT = 0;\nexport const RESTING_MOTION_DEFAULT_SCALE_PERCENT = RESTING_MOTION_DEFAULT_SCALE_UP_PERCENT;\n\n/** Default peak Y (% of layer box) when translate percent peaks omitted (no legacy px). */\nexport const RESTING_MOTION_DEFAULT_TRANSLATE_PEAK_Y_PERCENT = 6;\n/** Default legacy peak Y in px when only deprecated {@link RestingMotion.translateRangePx} applies. */\nexport const RESTING_MOTION_DEFAULT_TRANSLATE_PEAK_Y_PX = 6;\n/** @deprecated Use {@link RESTING_MOTION_DEFAULT_TRANSLATE_PEAK_Y_PX}. */\nexport const RESTING_MOTION_DEFAULT_TRANSLATE_RANGE_PX = RESTING_MOTION_DEFAULT_TRANSLATE_PEAK_Y_PX;\n/** Default peak rotation (°) from rest when {@link RestingMotion.rotateMaxDeg} is omitted. */\nexport const RESTING_MOTION_DEFAULT_ROTATE_DEG = 5;\nexport const RESTING_MOTION_PULSE_DIP_BASE = 0.38;\n\n/** Scale preset: ms for one rest → peak → rest cycle (authoring + native + web fallback). */\nexport const restingMotionScalePatternDurationMs = (r: RestingMotion): number => {\n const def = RESTING_MOTION_DEFAULT_DURATION_MS.scale;\n if (r.preset !== 'scale') return def;\n if (r.loop !== true) {\n return r.durationMs ?? r.scalePatternDurationMs ?? r.cycleDurationMs ?? def;\n }\n return r.scalePatternDurationMs ?? r.cycleDurationMs ?? def;\n};\n\n/**\n * Phase 0..1 for the current motion pattern. Non-loop: one full pattern stretched over segment.\n * Loop: pattern repeats every cycle duration within the segment.\n */\nexport const restingMotionPhase01 = (cfg: RestingMotion, localMs: number): number => {\n const segment = restingMotionEffectiveDurationMs(cfg);\n const cycle = restingMotionCycleDurationMs(cfg);\n if (segment <= 0) return 0;\n\n if (cfg.preset === 'scale') {\n const pattern = restingMotionScalePatternDurationMs(cfg);\n if (pattern <= 0) return 0;\n if (cfg.loop === true) {\n const u = ((localMs % pattern) + pattern) % pattern;\n return u / pattern;\n }\n return Math.min(1, Math.max(0, localMs / pattern));\n }\n\n if (cfg.loop === true && cycle > 0) {\n const u = ((localMs % cycle) + cycle) % cycle;\n return u / cycle;\n }\n return Math.min(1, Math.max(0, localMs / segment));\n};\n\nexport const restingMotionScaleDirection = (r: RestingMotion): 'up' | 'down' => {\n 'worklet';\n if (r.scaleDirection === 'down') return 'down';\n if (r.scaleDirection === 'up') return 'up';\n const down = r.scaleDownPercent ?? 0;\n const up = r.scaleUpPercent ?? 0;\n if (down > 0 && up === 0) return 'down';\n return 'up';\n};\n\nexport const restingMotionScalePercentResolved = (r: RestingMotion): number => {\n 'worklet';\n if (r.scalePercent !== undefined) return r.scalePercent;\n if (restingMotionScaleDirection(r) === 'down') {\n return r.scaleDownPercent !== undefined\n ? r.scaleDownPercent\n : (r.scaleUpPercent ?? RESTING_MOTION_DEFAULT_SCALE_DOWN_PERCENT);\n }\n return r.scaleUpPercent ?? RESTING_MOTION_DEFAULT_SCALE_UP_PERCENT;\n};\n\nexport const restingMotionScaleAmountFraction = (r: RestingMotion): number => {\n 'worklet';\n return (restingMotionScalePercentResolved(r) / 100) * restingMotionIntensity(r);\n};\n\n/** Scale preset: return to rest after the peak (default). If false, ramp to peak and hold (per cycle when looping). */\nexport const restingMotionScaleSpringBack = (r: RestingMotion): boolean => {\n 'worklet';\n return r.scaleSpringBack !== false;\n};\n\n/** @deprecated Prefer {@link restingMotionScaleAmountFraction} / {@link restingMotionScalePeakMultiplier}. */\nexport const restingMotionScaleUpFraction = (r: RestingMotion): number =>\n restingMotionScaleDirection(r) === 'up' ? restingMotionScaleAmountFraction(r) : 0;\n\n/** @deprecated Prefer {@link restingMotionScaleAmountFraction} / {@link restingMotionScalePeakMultiplier}. */\nexport const restingMotionScaleDownFraction = (r: RestingMotion): number =>\n restingMotionScaleDirection(r) === 'down' ? restingMotionScaleAmountFraction(r) : 0;\n\n/** Peak scale multiplier (1±amount) for CSS vars and authoring; independent of {@link restingMotionScaleSpringBack}. */\nexport const restingMotionScalePeakMultiplier = (cfg: RestingMotion): number => {\n 'worklet';\n const amt = restingMotionScaleAmountFraction(cfg);\n const dir = restingMotionScaleDirection(cfg);\n return dir === 'up' ? 1 + amt : 1 - amt;\n};\n\n/**\n * One scale cycle over ph ∈ [0,1]: rest (1) → peak (1±amount) → rest when spring back is on;\n * linear rest → peak when off (matches rotate ramp semantics).\n */\nexport const restingMotionScaleAtPhase = (cfg: RestingMotion, ph: number): number => {\n 'worklet';\n const peak = restingMotionScalePeakMultiplier(cfg);\n const p = Math.min(1, Math.max(0, ph));\n if (!restingMotionScaleSpringBack(cfg)) {\n return 1 + (peak - 1) * p;\n }\n if (p < 0.5) {\n const t = p * 2;\n return 1 + (peak - 1) * t;\n }\n const t = (p - 0.5) * 2;\n return peak + (1 - peak) * t;\n};\n\nconst legacyTranslatePxToDisplayPercent = (px: number): number =>\n Math.max(-200, Math.min(200, Math.round((px / 80) * 200)));\n\ntype TranslatePeakBase =\n | { unit: 'percent'; x: number; y: number }\n | { unit: 'px'; x: number; y: number };\n\nconst restingMotionTranslateBasePeak = (r: RestingMotion): TranslatePeakBase => {\n 'worklet';\n const hasPercent =\n r.translatePeakXPercent !== undefined || r.translatePeakYPercent !== undefined;\n const hasPx = r.translatePeakXPx !== undefined || r.translatePeakYPx !== undefined;\n const hasLegacyRange = r.translateRangePx !== undefined;\n\n if (hasPercent) {\n return {\n unit: 'percent',\n x: r.translatePeakXPercent ?? 0,\n y: r.translatePeakYPercent ?? 0,\n };\n }\n if (hasPx || hasLegacyRange) {\n if (hasPx) {\n return {\n unit: 'px',\n x: r.translatePeakXPx ?? 0,\n y: r.translatePeakYPx ?? 0,\n };\n }\n return { unit: 'px', x: 0, y: r.translateRangePx ?? 0 };\n }\n return { unit: 'percent', x: 0, y: RESTING_MOTION_DEFAULT_TRANSLATE_PEAK_Y_PERCENT };\n};\n\n/**\n * Authoring translate peaks in % of the layer box (−200–200) for the editor. Maps legacy px fields\n * to a comparable % for display (old ±80 px range → full ±200% scale).\n */\nexport const restingMotionTranslateAuthoringPeakPercent = (r: RestingMotion): { x: number; y: number } => {\n const base = restingMotionTranslateBasePeak(r);\n if (base.unit === 'percent') return { x: base.x, y: base.y };\n return {\n x: legacyTranslatePxToDisplayPercent(base.x),\n y: legacyTranslatePxToDisplayPercent(base.y),\n };\n};\n\n/** @deprecated Use {@link restingMotionTranslateAuthoringPeakPercent} or {@link restingMotionTranslatePeakResolved}. */\nexport const restingMotionTranslateAuthoringPeakPx = (r: RestingMotion): { x: number; y: number } => {\n const base = restingMotionTranslateBasePeak(r);\n if (base.unit === 'px') return { x: base.x, y: base.y };\n return { x: 0, y: 0 };\n};\n\n/** Resolved peak translation for transform: % of layer box, or legacy px. After intensity; clamped. */\nexport const restingMotionTranslatePeakResolved = (\n r: RestingMotion,\n): { unit: 'percent' | 'px'; x: number; y: number } => {\n 'worklet';\n const base = restingMotionTranslateBasePeak(r);\n const i = restingMotionIntensity(r);\n if (base.unit === 'percent') {\n let x = base.x * i;\n let y = base.y * i;\n x = Math.max(-200, Math.min(200, x));\n y = Math.max(-200, Math.min(200, y));\n return { unit: 'percent', x, y };\n }\n let x = base.x * i;\n let y = base.y * i;\n x = Math.max(-200, Math.min(200, x));\n y = Math.max(-200, Math.min(200, y));\n return { unit: 'px', x, y };\n};\n\n/** @deprecated Use {@link restingMotionTranslatePeakResolved}. */\nexport const restingMotionTranslatePeakPx = (r: RestingMotion): { x: number; y: number } => {\n const r2 = restingMotionTranslatePeakResolved(r);\n return { x: r2.x, y: r2.y };\n};\n\n/** Translate preset: spring back to origin after the peak (default). */\nexport const restingMotionTranslateSpringBack = (r: RestingMotion): boolean => {\n 'worklet';\n return r.translateSpringBack !== false;\n};\n\n/** Resolved peak rotation (°), clamped to [0, 360]. Intensity scales the authored angle. */\nexport const restingMotionRotateMaxDeg = (r: RestingMotion): number => {\n 'worklet';\n const raw = (r.rotateMaxDeg ?? RESTING_MOTION_DEFAULT_ROTATE_DEG) * restingMotionIntensity(r);\n return Math.max(0, Math.min(360, raw));\n};\n\n/** Rotate preset: oscillate back to 0° after the peak (default). If false, ramp to peak and hold (per cycle when looping). */\nexport const restingMotionRotateSpringBack = (r: RestingMotion): boolean => {\n 'worklet';\n return r.rotateSpringBack !== false;\n};\n\n/** Rotate preset: authored spin direction (default clockwise). */\nexport const restingMotionRotateDirection = (\n r: RestingMotion,\n): 'clockwise' | 'counterclockwise' => {\n 'worklet';\n return r.rotateDirection === 'counterclockwise' ? 'counterclockwise' : 'clockwise';\n};\n\n/** +1 for clockwise, −1 for counter-clockwise (anti-clockwise). */\nexport const restingMotionRotateSign = (r: RestingMotion): 1 | -1 => {\n 'worklet';\n return restingMotionRotateDirection(r) === 'counterclockwise' ? -1 : 1;\n};\n\nexport const restingMotionPulseMinOpacity = (r: RestingMotion): number => {\n 'worklet';\n if (r.pulseMinOpacity !== undefined) {\n return Math.max(0, Math.min(1, r.pulseMinOpacity));\n }\n return Math.max(\n 0,\n Math.min(1, 1 - RESTING_MOTION_PULSE_DIP_BASE * restingMotionIntensity(r)),\n );\n};\n\n/** Sample motion at phase 0..1 (same geometry as web keyframes / native worklets). */\nexport const restingMotionSampleStyle = (cfg: RestingMotion, ph: number): RuntimeStyle => {\n switch (cfg.preset) {\n case 'translate': {\n const peak = restingMotionTranslatePeakResolved(cfg);\n const env = restingMotionTranslateSpringBack(cfg) ? Math.sin(ph * Math.PI) : ph;\n let tx = env * peak.x;\n let ty = env * peak.y;\n if (Math.abs(tx) < 1e-6) tx = 0;\n if (Math.abs(ty) < 1e-6) ty = 0;\n if (peak.unit === 'percent') {\n return { transform: `translate(${tx}%, ${ty}%)`, willChange: 'transform' };\n }\n return { transform: `translate(${tx}px, ${ty}px)`, willChange: 'transform' };\n }\n case 'bounce': {\n const y = bouncePhaseToTranslateY(ph, restingMotionBounceAmplitudePx(cfg));\n return { transform: `translateY(${y}px)`, willChange: 'transform' };\n }\n case 'scale': {\n const sc = restingMotionScaleAtPhase(cfg, ph);\n return { transform: `scale(${sc})`, willChange: 'transform' };\n }\n case 'pulse': {\n const omin = restingMotionPulseMinOpacity(cfg);\n const dip = 1 - omin;\n const op = ph <= 0.5 ? 1 - ph * 2 * dip : 1 - (1 - ph) * 2 * dip;\n return { opacity: op, willChange: 'opacity' };\n }\n case 'rotate': {\n const peakDeg = restingMotionRotateMaxDeg(cfg);\n let deg =\n restingMotionRotateSign(cfg) *\n (restingMotionRotateSpringBack(cfg)\n ? Math.sin(ph * Math.PI) * peakDeg\n : ph * peakDeg);\n // sin(π) is not exactly 0 in JS — snap so endpoints read as 0° and match keyframes.\n if (Math.abs(deg) < 1e-6) deg = 0;\n return { transform: `rotate(${deg}deg)`, willChange: 'transform' };\n }\n default:\n return {};\n }\n};\n\n/** Driven by timeline clock (editor / scrub). Returns null outside the motion segment. */\nexport const restingMotionStyleAtTime = (\n screen: Screen,\n layerId: string,\n cfg: RestingMotion,\n tMs: number,\n): RuntimeStyle | null => {\n const local = restingMotionLocalElapsedMs(screen, layerId, cfg, tMs);\n if (local === null) return null;\n const ph = restingMotionPhase01(cfg, local);\n return restingMotionSampleStyle(cfg, ph);\n};\n\n/**\n * Injected once in web sim DOM. Intensity scales via `--ob-rm-i` on the\n * animated element (default 1).\n */\nexport const RESTING_MOTION_KEYFRAMES_CSS = `\n@keyframes ob-rm-translate {\n 0%, 100% { transform: translate(0, 0); }\n 50% {\n transform: translate(var(--ob-rm-translate-peak-x, 0%), var(--ob-rm-translate-peak-y, 6%));\n }\n}\n@keyframes ob-rm-translate-ramp {\n 0% { transform: translate(0, 0); }\n 100% {\n transform: translate(var(--ob-rm-translate-peak-x, 0%), var(--ob-rm-translate-peak-y, 6%));\n }\n}\n@keyframes ob-rm-bounce {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(calc(-1 * var(--ob-rm-bounce-px, 14px))); }\n}\n@keyframes ob-rm-scale {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(var(--ob-rm-scale-peak, 1.08)); }\n}\n@keyframes ob-rm-scale-ramp {\n 0% { transform: scale(1); }\n 100% { transform: scale(var(--ob-rm-scale-peak, 1.08)); }\n}\n@keyframes ob-rm-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: var(--ob-rm-pulse-min, 0.62); }\n}\n@keyframes ob-rm-rotate {\n 0%, 100% { transform: rotate(0deg); }\n 50% { transform: rotate(var(--ob-rm-rotate-peak, 5deg)); }\n}\n@keyframes ob-rm-rotate-ramp {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(var(--ob-rm-rotate-peak, 5deg)); }\n}\n`.trim();\n\nconst restingMotionWebAnimationName = (config: RestingMotion): string => {\n if (config.preset === 'rotate' && !restingMotionRotateSpringBack(config)) {\n return 'ob-rm-rotate-ramp';\n }\n if (config.preset === 'translate' && !restingMotionTranslateSpringBack(config)) {\n return 'ob-rm-translate-ramp';\n }\n if (config.preset === 'scale' && !restingMotionScaleSpringBack(config)) {\n return 'ob-rm-scale-ramp';\n }\n return `ob-rm-${config.preset}`;\n};\n\n/**\n * Fallback when no motion clock is available (e.g. static export). Prefer\n * {@link restingMotionStyleAtTime} in the editor where the timeline drives sampling.\n */\nexport const restingMotionWebStyle = (config: RestingMotion): RuntimeStyle | null => {\n const duration = restingMotionEffectiveDurationMs(config);\n const intensity = restingMotionIntensity(config);\n const name = restingMotionWebAnimationName(config);\n const oneCycleMs =\n config.preset === 'scale'\n ? restingMotionScalePatternDurationMs(config)\n : config.loop === true\n ? restingMotionCycleDurationMs(config)\n : duration;\n const iter = config.loop === true ? 'infinite' : '1 forwards';\n const base = {\n ['--ob-rm-i']: String(intensity),\n animation: `${name} ${oneCycleMs}ms ease-in-out ${iter}`,\n willChange: config.preset === 'pulse' ? 'opacity' : 'transform',\n } as RuntimeStyle;\n if (config.preset === 'bounce') {\n return {\n ...base,\n ['--ob-rm-bounce-px']: `${restingMotionBounceAmplitudePx(config)}px`,\n } as RuntimeStyle;\n }\n if (config.preset === 'scale') {\n return {\n ...base,\n ['--ob-rm-scale-peak']: String(restingMotionScalePeakMultiplier(config)),\n } as RuntimeStyle;\n }\n if (config.preset === 'translate') {\n const peak = restingMotionTranslatePeakResolved(config);\n const sx = peak.unit === 'percent' ? `${peak.x}%` : `${peak.x}px`;\n const sy = peak.unit === 'percent' ? `${peak.y}%` : `${peak.y}px`;\n return {\n ...base,\n ['--ob-rm-translate-peak-x']: sx,\n ['--ob-rm-translate-peak-y']: sy,\n } as RuntimeStyle;\n }\n if (config.preset === 'rotate') {\n const signedPeak = restingMotionRotateSign(config) * restingMotionRotateMaxDeg(config);\n return {\n ...base,\n ['--ob-rm-rotate-peak']: `${signedPeak}deg`,\n } as RuntimeStyle;\n }\n if (config.preset === 'pulse') {\n return {\n ...base,\n ['--ob-rm-pulse-min']: String(restingMotionPulseMinOpacity(config)),\n } as RuntimeStyle;\n }\n return base;\n};\n","import type { DropShadow } from '@getrheo/contracts/layers';\nimport type { Theme } from '@getrheo/contracts/manifest';\nimport { resolveThemedColor } from './layers';\n\nconst clamp01 = (n: number) => Math.max(0, Math.min(1, n));\n\nconst hexToRgba = (hex: string, alpha: number): string => {\n const raw = hex.trim().replace(/^#/, '');\n if (!/^([0-9a-f]{3}|[0-9a-f]{6})$/i.test(raw)) return `rgba(0,0,0,${clamp01(alpha)})`;\n const full =\n raw.length === 3\n ? raw\n .split('')\n .map((c) => c + c)\n .join('')\n : raw;\n const r = parseInt(full.slice(0, 2), 16);\n const g = parseInt(full.slice(2, 4), 16);\n const b = parseInt(full.slice(4, 6), 16);\n return `rgba(${r},${g},${b},${clamp01(alpha)})`;\n};\n\nconst colorWithOpacity = (resolved: string | undefined, opacity: number): string => {\n const o = clamp01(opacity);\n if (!resolved) return `rgba(0,0,0,${o})`;\n const t = resolved.trim();\n if (t.startsWith('#')) return hexToRgba(t, o);\n const m = t.match(/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i);\n if (m) return `rgba(${m[1]},${m[2]},${m[3]},${o})`;\n return t;\n};\n\nconst shadowHasAnyField = (sh: DropShadow | undefined): boolean =>\n sh !== undefined && Object.values(sh).some((v) => v !== undefined);\n\n/**\n * CSS `boxShadow` string from structured shadow. Returns `undefined` when\n * `shadow` is absent or empty so callers can omit the property.\n */\nexport const dropShadowToBoxShadow = (\n sh: DropShadow | undefined,\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n): string | undefined => {\n if (!shadowHasAnyField(sh)) return undefined;\n const ox = sh!.offsetX ?? 0;\n const oy = sh!.offsetY ?? 2;\n const blur = sh!.blur ?? 8;\n const spread = sh!.spread ?? 0;\n const opacity = sh!.opacity ?? 0.25;\n const base = resolveThemedColor(theme, palette, sh!.color);\n const color = colorWithOpacity(base, opacity);\n return `${ox}px ${oy}px ${blur}px ${spread}px ${color}`;\n};\n\n/** Web `CSSProperties` fragment for `boxShadow`. */\nexport const dropShadowToWebStyle = (\n sh: DropShadow | undefined,\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n): { boxShadow?: string } => {\n const boxShadow = dropShadowToBoxShadow(sh, theme, palette);\n return boxShadow ? { boxShadow } : {};\n};\n\n/** React Native–compatible shadow props (no `react-native` import here). */\nexport type NativeDropShadowStyle = {\n shadowOffset?: { width: number; height: number };\n shadowOpacity?: number;\n shadowRadius?: number;\n shadowColor?: string;\n elevation?: number;\n};\n\nexport const dropShadowToNativeStyle = (\n sh: DropShadow | undefined,\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n): NativeDropShadowStyle => {\n if (!shadowHasAnyField(sh)) return {};\n const ox = sh!.offsetX ?? 0;\n const oy = sh!.offsetY ?? 2;\n const blur = sh!.blur ?? 8;\n const opacity = sh!.opacity ?? 0.25;\n const base = resolveThemedColor(theme, palette, sh!.color);\n const color = colorWithOpacity(base, opacity);\n return {\n shadowOffset: { width: ox, height: oy },\n shadowOpacity: 1,\n shadowRadius: blur,\n shadowColor: color,\n elevation: Math.min(24, Math.max(0, Math.round(blur / 2 + Math.abs(oy)))),\n };\n};\n","import type { ScaleInputLayer } from '@getrheo/contracts/layers';\n\nexport const scaleStep = (layer: ScaleInputLayer): number => layer.step ?? 1;\n\n/** Snap `raw` to the nearest valid value on the discrete scale. */\nexport const snapScaleValue = (layer: ScaleInputLayer, raw: number): number => {\n const step = scaleStep(layer);\n const { min, max } = layer;\n const n = Math.round((raw - min) / step);\n const v = min + n * step;\n if (v < min) return min;\n if (v > max) return max;\n return v;\n};\n\nexport const scaleValueIsOnStep = (layer: ScaleInputLayer, value: number): boolean => {\n const step = scaleStep(layer);\n const n = (value - layer.min) / step;\n return Number.isFinite(n) && Math.abs(n - Math.round(n)) < 1e-6;\n};\n\nexport const scaleValueInRange = (layer: ScaleInputLayer, value: number): boolean =>\n value >= layer.min && value <= layer.max;\n","import type { TextInputLayer } from '@getrheo/contracts/layers';\n\nconst EMAIL_RE =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u;\n\n/** Phone: raw string as typed; allow common dial characters, length bounds. */\nconst PHONE_RE = /^[\\d\\s+().-]{3,32}$/u;\n\nconst isProbablyUrl = (s: string): boolean => {\n try {\n const withProto = /^[a-z]+:/iu.test(s) ? s : `https://${s}`;\n const u = new URL(withProto);\n return u.hostname.length > 0;\n } catch {\n return false;\n }\n};\n\nexport type TextInputValidateResult = { ok: true } | { ok: false; reason: string };\n\nconst effectiveInputType = (layer: TextInputLayer) => layer.inputType ?? 'plain';\n\nconst effectiveRequired = (layer: TextInputLayer): boolean => layer.required !== false;\n\n/**\n * Validate trimmed text for a `text_input` layer (length, required, format by inputType).\n */\nexport const validateTextInputValue = (layer: TextInputLayer, raw: string): TextInputValidateResult => {\n const trimmed = raw.trim();\n const required = effectiveRequired(layer);\n\n if (trimmed.length === 0) {\n if (!required) return { ok: true };\n return { ok: false, reason: 'Text is empty' };\n }\n\n if (layer.minLength !== undefined && trimmed.length < layer.minLength) {\n return { ok: false, reason: `Enter at least ${layer.minLength} characters` };\n }\n\n if (layer.maxLength !== undefined && trimmed.length > layer.maxLength) {\n return { ok: false, reason: `Exceeds max length of ${layer.maxLength}` };\n }\n\n const mode = effectiveInputType(layer);\n switch (mode) {\n case 'plain':\n case 'multiline':\n return { ok: true };\n case 'email':\n return EMAIL_RE.test(trimmed)\n ? { ok: true }\n : { ok: false, reason: 'Enter a valid email address' };\n case 'phone':\n return PHONE_RE.test(trimmed)\n ? { ok: true }\n : { ok: false, reason: 'Enter a valid phone number (digits and common symbols only)' };\n case 'url':\n return isProbablyUrl(trimmed) ? { ok: true } : { ok: false, reason: 'Enter a valid URL' };\n default:\n return { ok: true };\n }\n};\n","/** Basic email shape check — host apps should still verify server-side. */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport type ValidateEmailPasswordAuthArgs = {\n mode: 'sign_in' | 'sign_up';\n email: string;\n password: string;\n confirmPassword: string;\n minPasswordLength: number;\n};\n\nexport type ValidateEmailPasswordAuthResult =\n | { ok: true }\n | { ok: false; message: string };\n\nexport const validateEmailPasswordAuthFields = (\n args: ValidateEmailPasswordAuthArgs,\n): ValidateEmailPasswordAuthResult => {\n const email = args.email.trim();\n if (!email) return { ok: false, message: 'Email is required' };\n if (!EMAIL_RE.test(email)) return { ok: false, message: 'Enter a valid email' };\n if (!args.password) return { ok: false, message: 'Password is required' };\n if (args.password.length < args.minPasswordLength) {\n return {\n ok: false,\n message: `Password must be at least ${args.minPasswordLength} characters`,\n };\n }\n if (args.mode === 'sign_up') {\n if (!args.confirmPassword) return { ok: false, message: 'Confirm your password' };\n if (args.password !== args.confirmPassword) {\n return { ok: false, message: 'Passwords do not match' };\n }\n }\n return { ok: true };\n};\n","import { FIELD_KEY_RE } from '@getrheo/contracts/fields';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport type { LocalizedText } from '@getrheo/contracts/localized';\nimport { resolveLocalizedText } from '@getrheo/contracts/localized';\nimport { choiceOptionLabel, findInputLayer } from './layers';\nimport type { StepResponse } from './stateMachine';\n\n/** Runtime substitution for Text layer copy (after locale resolution). */\nexport type InterpolationRuntimeContext = {\n manifest: FlowManifest;\n locale: string;\n responses: Record<string, StepResponse>;\n customProperties?: Record<string, string>;\n};\n\n/** Props-sized slice passed into renderers. */\nexport type InterpolationContext = {\n responses: Record<string, StepResponse>;\n customProperties?: Record<string, string>;\n /** When true, the flow has a prior step so back navigation is available. */\n canGoBack?: boolean;\n};\n\nexport const extractLiquidTemplateBodies = (s: string): string[] => {\n const out: string[] = [];\n let i = 0;\n while (i < s.length) {\n const open = s.indexOf('{{', i);\n if (open === -1) break;\n const close = s.indexOf('}}', open + 2);\n if (close === -1) break;\n out.push(s.slice(open + 2, close));\n i = close + 2;\n }\n return out;\n};\n\nconst FIELD_KEY_SOURCE = FIELD_KEY_RE.source.replace(/^\\^|\\$$/g, '');\n\nconst parseDefaultFilter = (\n inner: string,\n): { exprPart: string; defaultValue?: string } => {\n const m = inner.match(/\\s*\\|\\s*default\\s*:/i);\n if (!m || m.index === undefined) return { exprPart: inner.trim() };\n\n const exprPart = inner.slice(0, m.index).trim();\n let tail = inner.slice(m.index + m[0].length).trim();\n if (tail.startsWith('\"')) {\n const end = tail.indexOf('\"', 1);\n if (end > 0) tail = tail.slice(1, end);\n else tail = tail.slice(1);\n }\n return { exprPart, defaultValue: tail };\n};\n\nconst parseExpression = (\n exprRaw: string,\n):\n | { kind: 'custom'; key: string }\n | { kind: 'field'; fieldKey: string; mode: 'label' | 'id' }\n | { kind: 'invalid' } => {\n const expr = exprRaw.trim();\n const customM = expr.match(new RegExp(`^custom\\\\.(${FIELD_KEY_SOURCE})$`));\n if (customM) return { kind: 'custom', key: customM[1]! };\n\n const idM = expr.match(new RegExp(`^(${FIELD_KEY_SOURCE})\\\\.id$`));\n if (idM) return { kind: 'field', fieldKey: idM[1]!, mode: 'id' };\n\n const plainM = expr.match(new RegExp(`^(${FIELD_KEY_SOURCE})$`));\n if (plainM) return { kind: 'field', fieldKey: plainM[1]!, mode: 'label' };\n\n return { kind: 'invalid' };\n};\n\nexport type InterpolationExprAnalysis =\n | { kind: 'custom'; key: string }\n | { kind: 'field'; fieldKey: string; mode: 'label' | 'id' }\n | { kind: 'invalid' };\n\n/** Parse one `{{ … }}` inner (after stripping delimiters) for diagnostics / validation. */\nexport const analyzeLiquidTemplateInner = (\n inner: string,\n): { expr: InterpolationExprAnalysis; defaultValue?: string } => {\n const { exprPart, defaultValue } = parseDefaultFilter(inner);\n const p = parseExpression(exprPart);\n if (p.kind === 'invalid') return { expr: { kind: 'invalid' }, defaultValue };\n if (p.kind === 'custom') return { expr: { kind: 'custom', key: p.key }, defaultValue };\n return { expr: { kind: 'field', fieldKey: p.fieldKey, mode: p.mode }, defaultValue };\n};\n\nconst findInputOwner = (\n manifest: FlowManifest,\n fieldKey: string,\n): { screen: Screen; input: NonNullable<ReturnType<typeof findInputLayer>> } | null => {\n for (const screen of manifest.screens) {\n const input = findInputLayer(screen as Screen);\n if (input && input.fieldKey === fieldKey) return { screen: screen as Screen, input };\n }\n return null;\n};\n\nconst choiceLabelFor = (\n manifest: FlowManifest,\n fieldKey: string,\n choiceId: string,\n locale: string,\n): string => {\n const owner = findInputOwner(manifest, fieldKey);\n if (!owner) return '';\n const { input } = owner;\n if (input.kind !== 'single_choice' && input.kind !== 'multiple_choice') return '';\n return choiceOptionLabel(input, choiceId, locale);\n};\n\nconst responseToDisplayString = (\n manifest: FlowManifest,\n fieldKey: string,\n response: StepResponse | undefined,\n mode: 'label' | 'id',\n locale: string,\n): string => {\n if (!response) return '';\n switch (response.kind) {\n case 'text':\n return mode === 'id' ? '' : response.value;\n case 'scale':\n return mode === 'id' ? '' : String(response.value);\n case 'choice':\n if (mode === 'id') return response.choiceId;\n return choiceLabelFor(manifest, fieldKey, response.choiceId, locale);\n case 'multiChoice':\n if (mode === 'id') return response.choiceIds.join(', ');\n return response.choiceIds\n .map((id) => choiceLabelFor(manifest, fieldKey, id, locale))\n .filter(Boolean)\n .join(', ');\n case 'checkbox':\n return mode === 'id' ? '' : response.value ? 'true' : 'false';\n case 'bypass_input':\n return '';\n default:\n return '';\n }\n};\n\nconst evalParsed = (\n parsed:\n | { kind: 'custom'; key: string }\n | { kind: 'field'; fieldKey: string; mode: 'label' | 'id' }\n | { kind: 'invalid' },\n ctx: InterpolationRuntimeContext,\n): string => {\n if (parsed.kind === 'invalid') return '';\n if (parsed.kind === 'custom') {\n const v = ctx.customProperties?.[parsed.key];\n return v === undefined || v === '' ? '' : String(v);\n }\n const owner = findInputOwner(ctx.manifest, parsed.fieldKey);\n const r = ctx.responses[parsed.fieldKey];\n if (parsed.mode === 'id' && owner && owner.input.kind !== 'single_choice' && owner.input.kind !== 'multiple_choice') {\n return '';\n }\n return responseToDisplayString(ctx.manifest, parsed.fieldKey, r, parsed.mode, ctx.locale);\n};\n\n/**\n * Interpolate `{{ … }}` segments in a plain string (already localized).\n * Supports `custom.key`, `field_key`, `field_key.id`, and `| default: …`.\n */\nexport const interpolateTemplateString = (\n template: string,\n ctx: InterpolationRuntimeContext,\n): string => {\n let i = 0;\n let out = '';\n while (i < template.length) {\n const open = template.indexOf('{{', i);\n if (open === -1) {\n out += template.slice(i);\n break;\n }\n out += template.slice(i, open);\n const close = template.indexOf('}}', open + 2);\n if (close === -1) {\n out += template.slice(open);\n break;\n }\n const inner = template.slice(open + 2, close);\n const { exprPart, defaultValue } = parseDefaultFilter(inner);\n const parsed = parseExpression(exprPart);\n let value = evalParsed(parsed, ctx);\n if ((value === '' || value === undefined) && defaultValue !== undefined) {\n value = defaultValue;\n }\n out += value;\n i = close + 2;\n }\n return out;\n};\n\nexport const resolveAndInterpolateLocalizedText = (\n text: LocalizedText,\n ctx: InterpolationRuntimeContext,\n): string => {\n const localized = resolveLocalizedText(text, ctx.locale);\n return interpolateTemplateString(localized, ctx);\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport type { LocalizedText } from '@getrheo/contracts/localized';\nimport { OS_PERMISSION_OUTCOME_CONTINUE, OS_PERMISSION_OUTCOME_END } from '@getrheo/contracts/layers';\nimport { collectDecisionFieldKeysFromNode } from '@getrheo/contracts/decisions';\nimport { collectFieldKeys, findInputLayer, walkScreen } from './layers';\nimport { findScreen } from './stateMachine';\nimport { analyzeLiquidTemplateInner, extractLiquidTemplateBodies } from './interpolateTemplate';\n\nconst localizedStrings = (t: LocalizedText): string[] => {\n const out: string[] = [t.default];\n if (t.translations) {\n for (const loc of Object.keys(t.translations)) {\n if (/^[a-z]{2}(-[A-Z]{2})?$/.test(loc)) {\n const v = t.translations[loc];\n if (v) out.push(v);\n }\n }\n }\n return out;\n};\n\nconst collectOutgoingTargets = (screen: Screen): string[] => {\n const out: string[] = [];\n if (screen.next.default) out.push(screen.next.default);\n walkScreen(screen, (l) => {\n if (l.kind === 'single_choice' || l.kind === 'multiple_choice') {\n if (l.branching.enabled) {\n for (const c of l.branching.conditions) out.push(c.goTo);\n }\n }\n if (l.kind === 'button' && l.action.kind === 'go_to_step') out.push(l.action.screenId);\n if (l.kind === 'button' && l.action.kind === 'request_os_permission') {\n const o = l.action.outcomes;\n for (const t of [o.granted, o.denied, o.blocked]) {\n if (t === OS_PERMISSION_OUTCOME_END) {\n // Terminal branch — no outgoing edge.\n } else if (t === OS_PERMISSION_OUTCOME_CONTINUE) {\n if (screen.next.default) out.push(screen.next.default);\n } else {\n out.push(t);\n }\n }\n }\n if (l.kind === 'button' && l.action.kind === 'go_back_one_screen' && l.action.fallbackScreenId) {\n out.push(l.action.fallbackScreenId);\n }\n if (l.kind === 'back_button' && l.fallbackScreenId) out.push(l.fallbackScreenId);\n });\n return out;\n};\n\nconst buildForwardAdjacency = (manifest: FlowManifest): Map<string, string[]> => {\n const m = new Map<string, string[]>();\n for (const s of manifest.screens) {\n m.set(s.id, collectOutgoingTargets(s as Screen));\n }\n for (const d of manifest.decisionNodes ?? []) {\n const outs = [\n ...d.cases.map((c) => c.next).filter((x): x is string => x != null),\n d.elseNext,\n ].filter((x): x is string => x != null);\n m.set(d.id, outs);\n }\n return m;\n};\n\nconst reverseAdjacency = (forward: Map<string, string[]>): Map<string, string[]> => {\n const rev = new Map<string, string[]>();\n for (const [u, vs] of forward) {\n for (const v of vs) {\n const arr = rev.get(v) ?? [];\n arr.push(u);\n rev.set(v, arr);\n }\n }\n return rev;\n};\n\nconst bfsForward = (entry: string | null, forward: Map<string, string[]>): Set<string> => {\n if (entry == null) return new Set();\n const seen = new Set<string>([entry]);\n const q = [entry];\n while (q.length) {\n const u = q.shift()!;\n for (const v of forward.get(u) ?? []) {\n if (!seen.has(v)) {\n seen.add(v);\n q.push(v);\n }\n }\n }\n return seen;\n};\n\n/** All screens `t` (including `targetId`) such that some path `t → … → targetId` exists, restricted to `allowed` nodes. */\nconst reverseReachable = (\n targetId: string,\n rev: Map<string, string[]>,\n allowed: Set<string>,\n): Set<string> => {\n const seen = new Set<string>([targetId]);\n const q = [targetId];\n while (q.length) {\n const u = q.shift()!;\n for (const v of rev.get(u) ?? []) {\n if (!allowed.has(v)) continue;\n if (!seen.has(v)) {\n seen.add(v);\n q.push(v);\n }\n }\n }\n return seen;\n};\n\n/**\n * Screens that may have already been completed before `screenId` is shown\n * (strict predecessors on some path from entry), intersected with reachability from entry.\n */\nexport const upstreamScreenIdsForPicker = (manifest: FlowManifest, screenId: string): string[] => {\n const forward = buildForwardAdjacency(manifest);\n const rev = reverseAdjacency(forward);\n const entry = manifest.entryScreenId;\n if (entry == null) return [];\n const reachFromEntry = bfsForward(entry, forward);\n const ancestors = reverseReachable(screenId, rev, reachFromEntry);\n const screenSet = new Set(manifest.screens.map((s) => s.id));\n return [...ancestors].filter((id) => id !== screenId && screenSet.has(id));\n};\n\n/** Dominator sets for nodes reachable from entry (each set includes the node itself). */\nexport const computeDominators = (manifest: FlowManifest): Map<string, Set<string>> => {\n const forward = buildForwardAdjacency(manifest);\n const entry = manifest.entryScreenId;\n if (entry == null) return new Map();\n const reachable = bfsForward(entry, forward);\n const nodes = [...reachable];\n\n const pred = new Map<string, string[]>();\n for (const [u, vs] of forward) {\n for (const v of vs) {\n if (!reachable.has(v)) continue;\n const arr = pred.get(v) ?? [];\n arr.push(u);\n pred.set(v, arr);\n }\n }\n\n const all = new Set(nodes);\n const dom = new Map<string, Set<string>>();\n for (const n of nodes) {\n if (n === entry) dom.set(n, new Set([entry]));\n else dom.set(n, new Set(all));\n }\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const n of nodes) {\n if (n === entry) continue;\n const ps = (pred.get(n) ?? []).filter((p) => reachable.has(p));\n let nextDom: Set<string>;\n if (ps.length === 0) {\n nextDom = new Set([n]);\n } else {\n nextDom = new Set([n]);\n const first = dom.get(ps[0]!) ?? new Set(all);\n let inter = new Set(first);\n for (let i = 1; i < ps.length; i++) {\n const d = dom.get(ps[i]!) ?? new Set(all);\n inter = new Set([...inter].filter((x) => d.has(x)));\n }\n for (const x of inter) nextDom.add(x);\n }\n const cur = dom.get(n)!;\n if (cur.size !== nextDom.size || [...nextDom].some((x) => !cur.has(x))) {\n dom.set(n, nextDom);\n changed = true;\n }\n }\n }\n return dom;\n};\n\nconst fieldKeyOwnerScreenId = (manifest: FlowManifest, fieldKey: string): string | null => {\n for (const e of collectFieldKeys(manifest)) {\n if (e.fieldKey === fieldKey) return e.screenId;\n }\n return null;\n};\n\nconst scanLocalizedForWarnings = (\n manifest: FlowManifest,\n hostScreenId: string,\n text: LocalizedText,\n layerId: string,\n dom: Map<string, Set<string>>,\n seen: Set<string>,\n out: string[],\n): void => {\n const screenLabel =\n manifest.screens.find((s) => s.id === hostScreenId)?.name ?? hostScreenId;\n\n for (const str of localizedStrings(text)) {\n for (const inner of extractLiquidTemplateBodies(str)) {\n const { expr } = analyzeLiquidTemplateInner(inner);\n if (expr.kind === 'invalid') {\n const key = `invalid:${hostScreenId}:${layerId}:${inner}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" text layer \"${layerId}\" has an invalid template token \"{{${inner}}}\".`,\n );\n continue;\n }\n if (expr.kind === 'custom') {\n const key = `custom:${hostScreenId}`;\n if (!seen.has(key)) {\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" uses \\`custom.*\\` template variables — values are supplied by the host SDK at runtime.`,\n );\n }\n continue;\n }\n\n const ownerId = fieldKeyOwnerScreenId(manifest, expr.fieldKey);\n if (!ownerId) {\n const key = `unknown:${hostScreenId}:${layerId}:${expr.fieldKey}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" references unknown variable \"{{${expr.fieldKey}}}\" (no matching input fieldKey).`,\n );\n continue;\n }\n\n if (expr.mode === 'id') {\n const ownerScreen = findScreen(manifest, ownerId);\n const input = ownerScreen ? findInputLayer(ownerScreen) : null;\n if (input?.kind !== 'single_choice' && input?.kind !== 'multiple_choice') {\n const key = `id:${hostScreenId}:${layerId}:${expr.fieldKey}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" uses \"{{${expr.fieldKey}.id}}\" but \"${expr.fieldKey}\" is not a choice input — \\`.id\\` only applies to single or multiple choice.`,\n );\n }\n }\n\n if (ownerId === hostScreenId) {\n const key = `same:${hostScreenId}:${layerId}:${expr.fieldKey}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" references \"{{${expr.fieldKey}}}\" which is collected on the same screen — it will be empty until after the user submits.`,\n );\n continue;\n }\n\n const dset = dom.get(hostScreenId);\n if (dset && !dset.has(ownerId)) {\n const key = `path:${hostScreenId}:${layerId}:${expr.fieldKey}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(\n `Warning: Screen \"${screenLabel}\" references \"{{${expr.fieldKey}}}\" which may be empty on some paths (not collected before this screen on every route).`,\n );\n }\n }\n }\n};\n\n/**\n * Non-blocking warnings for Text layer `{{ … }}` usage (dominance, same-screen, invalid tokens).\n */\nexport const collectInterpolationWarnings = (manifest: FlowManifest): string[] => {\n const dom = computeDominators(manifest);\n const out: string[] = [];\n const seen = new Set<string>();\n\n for (const screen of manifest.screens as Screen[]) {\n walkScreen(screen, (l) => {\n if (l.kind !== 'text') return;\n scanLocalizedForWarnings(manifest, screen.id, l.text, l.id, dom, seen, out);\n });\n }\n\n return out;\n};\n\n/** Dominance warnings for `fieldKey` references inside decision expressions. */\nexport const collectDecisionWarnings = (manifest: FlowManifest): string[] => {\n const dom = computeDominators(manifest);\n const out: string[] = [];\n for (const dn of manifest.decisionNodes ?? []) {\n const label = dn.name ?? dn.id;\n const dset = dom.get(dn.id);\n for (const fk of collectDecisionFieldKeysFromNode(dn)) {\n const ownerId = fieldKeyOwnerScreenId(manifest, fk);\n if (!ownerId) {\n out.push(`Warning: Decision \"${label}\" references unknown fieldKey \"${fk}\".`);\n continue;\n }\n if (dset && !dset.has(ownerId)) {\n out.push(\n `Warning: Decision \"${label}\" references \"${fk}\" which may be empty on some paths (not collected before this decision on every route).`,\n );\n }\n }\n }\n return out;\n};\n\n/** `fieldKey` values available in the variable picker for `screenId`. */\nexport const upstreamFieldKeysForPicker = (manifest: FlowManifest, screenId: string): string[] => {\n const upstream = new Set(upstreamScreenIdsForPicker(manifest, screenId));\n const keys = collectFieldKeys(manifest)\n .filter((e) => upstream.has(e.screenId))\n .map((e) => e.fieldKey);\n return [...new Set(keys)].sort();\n};\n","import type { FlowPreview } from '@getrheo/contracts/dashboard';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport { findInputLayer } from './layers';\n\n/** Canvas thumbnail nodes/edges for dashboard flow list and template previews. */\nexport const buildFlowPreview = (manifest: FlowManifest): FlowPreview => {\n const screens = Array.isArray(manifest?.screens) ? manifest.screens : [];\n const stored =\n (manifest?.builderMeta as\n | { layout?: { nodes?: { id: string; x: number; y: number }[] } }\n | undefined)?.layout?.nodes ?? [];\n const positions = new Map(stored.map((n) => [n.id, { x: n.x, y: n.y }]));\n\n const nodes = screens.map((screen, idx) => {\n const pos = positions.get(screen.id) ?? { x: 80 + idx * 360, y: 120 };\n return {\n id: screen.id,\n x: pos.x,\n y: pos.y,\n isEntry: manifest?.entryScreenId === screen.id,\n };\n });\n\n const edges: FlowPreview['edges'] = [];\n for (const screen of screens as unknown as Screen[]) {\n const input = findInputLayer(screen);\n const branchingOn =\n input &&\n (input.kind === 'single_choice' || input.kind === 'multiple_choice') &&\n input.branching.enabled;\n const nextDefault = screen.next?.default;\n\n if (branchingOn) {\n for (const cond of input.branching.conditions) {\n if (cond.goTo) {\n edges.push({ source: screen.id, target: cond.goTo, branching: true });\n }\n }\n if (nextDefault) {\n edges.push({ source: screen.id, target: nextDefault, branching: true });\n }\n } else if (nextDefault) {\n edges.push({ source: screen.id, target: nextDefault });\n }\n }\n\n return { nodes, edges };\n};\n","import type { CounterDisplayKind, CounterTimeFormat } from '@getrheo/contracts/layers';\n\n/**\n * Pretty-print animated counter values for display (web + native).\n * `decimalPlaces` is clamped to 0–20. Trailing fractional zeros are trimmed\n * except when `decimalPlaces === 0` (integer rounding via `toFixed(0)`).\n */\nexport const formatCounterLayerValue = (n: number, decimalPlaces = 0): string => {\n if (!Number.isFinite(n)) return '';\n const p = Math.max(0, Math.min(20, Math.trunc(decimalPlaces)));\n const s = n.toFixed(p);\n if (p === 0) return s;\n const trimmed = s.replace(/\\.?0+$/, '');\n return trimmed === '' || trimmed === '-' ? '0' : trimmed;\n};\n\nconst pad2 = (n: number): string => String(n).padStart(2, '0');\n\n/**\n * Format a non-negative whole-second count as M:SS, H:MM:SS, or D:HH:MM:SS.\n * Fractional input uses `floor`; negative totals clamp to zero.\n */\nexport const formatCounterAsTime = (totalSeconds: number, format: CounterTimeFormat): string => {\n if (!Number.isFinite(totalSeconds)) return '';\n const whole = Math.max(0, Math.floor(totalSeconds));\n\n switch (format) {\n case 'mm_ss': {\n const minutes = Math.floor(whole / 60);\n const seconds = whole % 60;\n return `${minutes}:${pad2(seconds)}`;\n }\n case 'hh_mm_ss': {\n const hours = Math.floor(whole / 3600);\n const minutes = Math.floor((whole % 3600) / 60);\n const seconds = whole % 60;\n return `${hours}:${pad2(minutes)}:${pad2(seconds)}`;\n }\n case 'dd_hh_mm_ss': {\n const days = Math.floor(whole / 86400);\n const hours = Math.floor((whole % 86400) / 3600);\n const minutes = Math.floor((whole % 3600) / 60);\n const seconds = whole % 60;\n return `${days}:${pad2(hours)}:${pad2(minutes)}:${pad2(seconds)}`;\n }\n default:\n return '';\n }\n};\n\nexport type CounterLayerDisplayOpts = {\n displayKind?: CounterDisplayKind;\n decimalPlaces?: number;\n timeFormat?: CounterTimeFormat;\n};\n\n/** Routes to numeric or time formatting based on layer display settings. */\nexport const formatCounterLayerDisplay = (n: number, opts: CounterLayerDisplayOpts): string => {\n const kind = opts.displayKind ?? 'number';\n if (kind === 'time') {\n const tf = opts.timeFormat ?? 'mm_ss';\n return formatCounterAsTime(n, tf);\n }\n return formatCounterLayerValue(n, opts.decimalPlaces ?? 0);\n};\n\n/** Components for the counter inspector when editing time mode (all non‑negative integers). */\nexport type CounterTimeParts = {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n};\n\nexport const splitSecondsForTimeFormat = (\n totalSeconds: number,\n format: CounterTimeFormat,\n): CounterTimeParts => {\n const whole = Math.max(0, Math.floor(Number.isFinite(totalSeconds) ? totalSeconds : 0));\n switch (format) {\n case 'mm_ss':\n return {\n days: 0,\n hours: 0,\n minutes: Math.floor(whole / 60),\n seconds: whole % 60,\n };\n case 'hh_mm_ss': {\n const hours = Math.floor(whole / 3600);\n const minutes = Math.floor((whole % 3600) / 60);\n const seconds = whole % 60;\n return { days: 0, hours, minutes, seconds };\n }\n case 'dd_hh_mm_ss': {\n const days = Math.floor(whole / 86400);\n const hours = Math.floor((whole % 86400) / 3600);\n const minutes = Math.floor((whole % 3600) / 60);\n const seconds = whole % 60;\n return { days, hours, minutes, seconds };\n }\n default:\n return { days: 0, hours: 0, minutes: 0, seconds: 0 };\n }\n};\n\nconst clamp59 = (n: number): number =>\n Math.max(0, Math.min(59, Math.trunc(Number.isFinite(n) ? n : 0)));\n\nconst clampHour23 = (n: number): number =>\n Math.max(0, Math.min(23, Math.trunc(Number.isFinite(n) ? n : 0)));\n\n/** Compose UI units into total seconds (matches {@link splitSecondsForTimeFormat}). */\nexport const mergePartsForTimeFormat = (parts: CounterTimeParts, format: CounterTimeFormat): number => {\n switch (format) {\n case 'mm_ss':\n return Math.max(0, Math.trunc(Number.isFinite(parts.minutes) ? parts.minutes : 0)) * 60 +\n clamp59(parts.seconds);\n case 'hh_mm_ss':\n return (\n Math.max(0, Math.trunc(Number.isFinite(parts.hours) ? parts.hours : 0)) * 3600 +\n clamp59(parts.minutes) * 60 +\n clamp59(parts.seconds)\n );\n case 'dd_hh_mm_ss':\n return (\n Math.max(0, Math.trunc(Number.isFinite(parts.days) ? parts.days : 0)) * 86400 +\n clampHour23(parts.hours) * 3600 +\n clamp59(parts.minutes) * 60 +\n clamp59(parts.seconds)\n );\n default:\n return 0;\n }\n};\n\n/**\n * Time mode advances one displayed second per real second over |end − start|.\n * Number mode uses authored `durationMs` (default 3000).\n */\nexport const resolveCounterAnimationDurationMs = (opts: {\n displayKind?: CounterDisplayKind;\n durationMs?: number;\n startValue: number;\n endValue: number;\n}): number => {\n if ((opts.displayKind ?? 'number') === 'time') {\n return Math.max(0, Math.round(Math.abs(opts.endValue - opts.startValue) * 1000));\n }\n return opts.durationMs ?? 3000;\n};\n","import { extractLiquidTemplateBodies } from './interpolateTemplate';\n\n/**\n * Serialized placeholder tokens for parity checks (sorted, JSON-stable).\n */\nconst sortedJson = (tokens: string[]): string => JSON.stringify([...tokens].sort());\n\n/**\n * Strips `{{ ... }}` Liquid regions from a string so lone `{foo}` patterns\n * aren't confused with Liquid delimiters.\n */\nconst stripLiquidRegions = (s: string): string => {\n let out = '';\n let i = 0;\n while (i < s.length) {\n const open = s.indexOf('{{', i);\n if (open === -1) return out + s.slice(i);\n out += s.slice(i, open);\n const close = s.indexOf('}}', open + 2);\n if (close === -1) return out + s.slice(open);\n i = close + 2;\n }\n return out;\n};\n\n/**\n * Tokens that must be preserved verbatim when translating (Liquid `{{ ... }}`\n * tags and simple `{identifier}` placeholders). Used for server-side validation.\n */\nexport const extractTranslationPlaceholders = (s: string): string[] => {\n const liquids = extractLiquidTemplateBodies(s).map((inner) => `{{${inner.trim()}}}`);\n const stripped = stripLiquidRegions(s);\n const singles: string[] = [];\n const re = /\\{([a-zA-Z_]\\w*)\\}/g;\n for (const m of stripped.matchAll(re)) {\n singles.push(`{${m[1]}}`);\n }\n return [...liquids, ...singles];\n};\n\n/** True when both strings contain the same multiset of placeholder markers. */\nexport const translationPlaceholdersMatch = (source: string, translated: string): boolean =>\n sortedJson(extractTranslationPlaceholders(source)) ===\n sortedJson(extractTranslationPlaceholders(translated));\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\n\n/** Blank seed from {@link buildBlankManifest}: single empty screen awaiting AI replacement. */\nexport const AI_FLOW_PLACEHOLDER_SCREEN_ID = 'scr_blank';\n\nconst bodyStackChildrenLen = (screen: Screen): number => {\n const body = screen.regions.body;\n if (body.kind !== 'stack') return -1;\n return body.children.length;\n};\n\nexport const isAiFlowPlaceholderManifest = (manifest: FlowManifest): boolean =>\n manifest.screens.length === 1 &&\n manifest.screens[0]?.id === AI_FLOW_PLACEHOLDER_SCREEN_ID &&\n bodyStackChildrenLen(manifest.screens[0]) === 0;\n\n/** Last screen on the default-next chain starting at entry (linear v1 assumption for AI expansion). */\nexport const findDefaultPathTailScreen = (manifest: FlowManifest): Screen | undefined => {\n const map = new Map(manifest.screens.map((s) => [s.id, s]));\n const startId = manifest.entryScreenId ?? manifest.screens[0]?.id;\n let cur = startId ? map.get(startId) : undefined;\n const seen = new Set<string>();\n let last: Screen | undefined;\n while (cur && !seen.has(cur.id)) {\n seen.add(cur.id);\n last = cur;\n const n = cur.next.default;\n if (!n) break;\n cur = map.get(n);\n }\n return last;\n};\n\nexport const ensureLayoutNodes = (manifest: FlowManifest): FlowManifest => {\n const existing = new Map(\n (manifest.builderMeta?.layout?.nodes ?? []).map((n) => [n.id, n] as const),\n );\n const nodes = manifest.screens.map((s, idx) => {\n const hit = existing.get(s.id);\n if (hit) return { ...hit };\n return { id: s.id, x: 80 + idx * 360, y: 120 };\n });\n return {\n ...manifest,\n builderMeta: {\n ...(manifest.builderMeta ?? {}),\n layout: {\n ...(manifest.builderMeta?.layout ?? {}),\n nodes,\n },\n },\n };\n};\n\n/**\n * Insert a model-generated screen into a draft manifest.\n * — Replaces the blank placeholder as the first screen when still on the initial seed.\n * — Otherwise appends after the default-path tail and wires `next`.\n */\nexport const mergeAiGeneratedScreenIntoManifest = (\n manifest: FlowManifest,\n screen: Screen,\n): FlowManifest => {\n if (isAiFlowPlaceholderManifest(manifest)) {\n const screens: Screen[] = [{ ...screen, next: { default: null } }];\n let builderMeta = manifest.builderMeta;\n const oldEntry = manifest.entryScreenId;\n if (builderMeta?.layout?.nodes?.length) {\n builderMeta = {\n ...builderMeta,\n layout: {\n ...builderMeta.layout,\n nodes: builderMeta.layout.nodes.map((n) =>\n n.id === oldEntry ? { ...n, id: screen.id } : { ...n },\n ),\n },\n };\n }\n const merged: FlowManifest = {\n ...manifest,\n screens,\n entryScreenId: screen.id,\n builderMeta,\n };\n return ensureLayoutNodes(merged);\n }\n\n const tail = findDefaultPathTailScreen(manifest);\n if (!tail) {\n throw new Error('mergeAiGeneratedScreenIntoManifest: no tail on default path');\n }\n if (tail.next.default !== null) {\n throw new Error('mergeAiGeneratedScreenIntoManifest: tail must end the default path (next is null)');\n }\n\n const screens: Screen[] = manifest.screens.map((s) =>\n s.id === tail.id ? { ...s, next: { default: screen.id } } : s,\n );\n screens.push({ ...screen, next: { default: null } });\n const merged: FlowManifest = { ...manifest, screens };\n return ensureLayoutNodes(merged);\n};\n\n/**\n * Appends a model-generated screen without changing any existing screen's `next` links.\n * The new screen always ends with `next: { default: null }` (canvas: user wires edges manually).\n */\nexport const appendGeneratedScreenToManifest = (manifest: FlowManifest, newScreen: Screen): FlowManifest => {\n const wiredNew: Screen = {\n ...newScreen,\n next: { default: null },\n };\n const merged: FlowManifest = {\n ...manifest,\n screens: [...manifest.screens, wiredNew],\n };\n return ensureLayoutNodes(merged);\n};\n\n/**\n * Inserts `newScreen` immediately after `anchorScreenId` on the default-next chain:\n * anchor → newScreen → (previous successor of anchor, if any).\n */\nexport const insertScreenAfterAnchorInManifest = (\n manifest: FlowManifest,\n anchorScreenId: string,\n newScreen: Screen,\n): FlowManifest => {\n const anchor = manifest.screens.find((s) => s.id === anchorScreenId);\n if (!anchor) {\n throw new Error('insertScreenAfterAnchorInManifest: anchor screen not found');\n }\n\n const forwarded = anchor.next.default;\n const wiredNew: Screen = {\n ...newScreen,\n next: { default: forwarded ?? null },\n };\n\n const screens: Screen[] = manifest.screens.map((s) =>\n s.id === anchorScreenId ? { ...s, next: { default: wiredNew.id } } : s,\n );\n screens.push(wiredNew);\n const merged: FlowManifest = { ...manifest, screens };\n return ensureLayoutNodes(merged);\n};\n\n/**\n * Applies a slim model manifest onto the authoritative draft while preserving\n * `builderMeta` (canvas layout) and ensuring layout nodes exist for new screens.\n */\nexport const mergeSlimManifestPreservingBuilderMeta = (\n draft: FlowManifest,\n slim: FlowManifest,\n): FlowManifest => {\n const merged: FlowManifest = {\n ...slim,\n builderMeta: draft.builderMeta,\n };\n return ensureLayoutNodes(merged);\n};\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport type { DecisionNode } from '@getrheo/contracts/decisions';\nimport type { ExternalSurfaceNode } from '@getrheo/contracts/externalSurfaces';\nimport { ensureLayoutNodes } from './aiFlowGenerationMerge';\n\n/**\n * Partial manifest edit emitted by Rheo Agent in patch mode. Only the fields the\n * model intends to change are present; everything else is preserved from the draft.\n */\nexport type RheoAgentManifestPatch = {\n /** Upserted by `id`: replaces a matching screen, otherwise appended. */\n screens?: Screen[];\n /** Screen ids to drop from the draft. */\n removeScreenIds?: string[];\n /** Upserted by `id` when provided; omit to leave decision nodes unchanged. */\n decisionNodes?: DecisionNode[];\n /** Upserted by `id` when provided; omit to leave external surface nodes unchanged. */\n externalSurfaceNodes?: ExternalSurfaceNode[];\n /** Applied only when present. */\n entryScreenId?: string;\n /** Replaces the full key list only when present. */\n sdkAttributeKeys?: string[];\n};\n\nconst upsertById = <T extends { id: string }>(existing: T[], incoming: T[]): T[] => {\n const incomingById = new Map(incoming.map((item) => [item.id, item]));\n const merged = existing.map((item) => incomingById.get(item.id) ?? item);\n const existingIds = new Set(existing.map((item) => item.id));\n for (const item of incoming) {\n if (!existingIds.has(item.id)) merged.push(item);\n }\n return merged;\n};\n\n/**\n * Applies a Rheo Agent patch onto the authoritative draft, preserving `builderMeta`\n * (canvas layout) and ensuring layout nodes exist for any newly added screens.\n *\n * Identity fields (`flowId`, `schemaVersion`, `version`, `defaultLocale`, `locales`,\n * `theme`) are always taken from the draft and never accepted from the patch.\n */\nexport const mergeRheoAgentPatchIntoDraft = (\n draft: FlowManifest,\n patch: RheoAgentManifestPatch,\n): FlowManifest => {\n const removeIds = new Set(patch.removeScreenIds ?? []);\n\n let screens = patch.screens ? upsertById(draft.screens, patch.screens) : draft.screens;\n if (removeIds.size > 0) {\n screens = screens.filter((screen) => !removeIds.has(screen.id));\n }\n\n const decisionNodes = patch.decisionNodes\n ? upsertById(draft.decisionNodes ?? [], patch.decisionNodes)\n : draft.decisionNodes;\n\n const externalSurfaceNodes = patch.externalSurfaceNodes\n ? upsertById(draft.externalSurfaceNodes ?? [], patch.externalSurfaceNodes)\n : draft.externalSurfaceNodes;\n\n const merged: FlowManifest = {\n ...draft,\n screens,\n decisionNodes,\n externalSurfaceNodes,\n ...(patch.entryScreenId !== undefined ? { entryScreenId: patch.entryScreenId } : {}),\n ...(patch.sdkAttributeKeys !== undefined ? { sdkAttributeKeys: patch.sdkAttributeKeys } : {}),\n builderMeta: draft.builderMeta,\n };\n\n return ensureLayoutNodes(merged);\n};\n","import type { Layer } from '@getrheo/contracts/layers';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Screen } from '@getrheo/contracts/screens';\nimport { walkScreenLayers } from '@getrheo/contracts/screens';\n\nconst randomHex = (byteLength: number): string => {\n const bytes = new Uint8Array(byteLength);\n if (typeof globalThis.crypto?.getRandomValues === 'function') {\n globalThis.crypto.getRandomValues(bytes);\n } else {\n for (let i = 0; i < byteLength; i++) bytes[i] = Math.floor(Math.random() * 256);\n }\n return [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\n/** All layer ids across every screen (manifest-level uniqueness). */\nexport const collectManifestLayerIds = (manifest: FlowManifest): Set<string> => {\n const ids = new Set<string>();\n for (const s of manifest.screens) {\n walkScreenLayers(s, (l) => {\n ids.add(l.id);\n });\n }\n return ids;\n};\n\n/**\n * Rewrites the screen's id and every layer id so they cannot collide with an existing manifest.\n * Uses JSON substitution with longest-id-first ordering to avoid partial replacements.\n */\nexport const remapScreenIdsForManifestIngest = (\n manifest: FlowManifest,\n screen: Screen,\n): Screen => {\n const screenIds = new Set(manifest.screens.map((s) => s.id));\n let newScreenId = `scr_ai_${randomHex(4)}`;\n let sn = 0;\n while (screenIds.has(newScreenId)) {\n newScreenId = `scr_ai_${randomHex(4)}_${sn++}`.slice(0, 64);\n }\n\n const usedLayers = collectManifestLayerIds(manifest);\n const token = randomHex(3);\n const map = new Map<string, string>();\n\n walkScreenLayers(screen, (l) => {\n if (map.has(l.id)) return;\n const tail = l.id.replace(/^lyr_/i, '').replace(/[^a-z0-9_]/gi, '_') || 'layer';\n let nid = `lyr_ai_${token}_${tail}`;\n let i = 0;\n for (;;) {\n const taken =\n usedLayers.has(nid) || [...map.values()].some((v) => v === nid);\n if (!taken) break;\n i += 1;\n nid = `lyr_ai_${token}_${tail}_${i}`.slice(0, 64);\n }\n map.set(l.id, nid);\n usedLayers.add(nid);\n });\n\n let json = JSON.stringify({ ...screen, id: newScreenId });\n const pairs = [...map.entries()].sort((a, b) => b[0].length - a[0].length);\n for (const [oldId, newId] of pairs) {\n json = json.split(oldId).join(newId);\n }\n return JSON.parse(json) as Screen;\n};\n\n/**\n * After in-place AI screen replace, ensure layer ids are unique across the manifest:\n * forbidden = ids used on other screens; duplicate ids within the replacement tree are remapped.\n */\nexport const remapReplacedScreenLayerCollisionsInManifest = (\n manifest: FlowManifest,\n targetScreenId: string,\n screen: Screen,\n): Screen => {\n const forbidden = new Set<string>();\n for (const s of manifest.screens) {\n if (s.id === targetScreenId) continue;\n walkScreenLayers(s, (l) => forbidden.add(l.id));\n }\n\n const next = JSON.parse(JSON.stringify(screen)) as Screen;\n const seen = new Set<string>();\n const used = new Set(forbidden);\n\n const alloc = (): string => {\n let i = 0;\n for (;;) {\n const nid = `lyr_ai_${randomHex(4)}_${i++}`.slice(0, 64);\n if (!used.has(nid)) {\n used.add(nid);\n return nid;\n }\n }\n };\n\n const fix = (layer: Layer): void => {\n if (forbidden.has(layer.id) || seen.has(layer.id)) {\n layer.id = alloc();\n }\n seen.add(layer.id);\n\n if (layer.kind === 'stack') layer.children.forEach(fix);\n else if (layer.kind === 'carousel') layer.slides.forEach(fix);\n else if (layer.kind === 'button' || layer.kind === 'back_button') layer.children.forEach(fix);\n else if (layer.kind === 'hyperlink') layer.children.forEach(fix);\n else if (layer.kind === 'single_choice' || layer.kind === 'multiple_choice') {\n layer.children.forEach(fix);\n } else if (layer.kind === 'text_input' || layer.kind === 'scale_input') {\n layer.children?.forEach(fix);\n } else if (layer.kind === 'oauth_login') layer.children.forEach(fix);\n else if (layer.kind === 'oauth_provider' && layer.variant === 'custom') layer.children.forEach(fix);\n else if (layer.kind === 'email_password_auth') layer.children.forEach(fix);\n else if (layer.kind === 'email_password_field') layer.children?.forEach(fix);\n else if (layer.kind === 'email_password_submit') layer.children.forEach(fix);\n };\n\n if (next.regions.header) fix(next.regions.header);\n fix(next.regions.body);\n if (next.regions.footer) fix(next.regions.footer);\n return next;\n};\n","import type { ButtonLayerVariant, ButtonStyle, ThemedColor, WidthValue } from '@getrheo/contracts/layers';\nimport { deepMergeStyle } from '@getrheo/flow-runtime/responsive/merge';\n\nexport type ResolvedButtonVariantChrome = {\n bg: string;\n color: string;\n border: string;\n};\n\nconst FG_LIGHT = '#0a0a0a';\nconst FG_DARK = '#fafafa';\n\n/** Default fill, label, and outline for a preset — used by web sim and native previews. */\nexport const buttonVariantChromeForTheme = (\n variant: ButtonLayerVariant,\n theme: 'light' | 'dark',\n): ResolvedButtonVariantChrome => {\n const dark = theme === 'dark';\n switch (variant) {\n case 'primary':\n return dark\n ? { bg: FG_DARK, color: FG_LIGHT, border: 'transparent' }\n : { bg: FG_LIGHT, color: FG_DARK, border: 'transparent' };\n case 'secondary':\n return dark\n ? { bg: 'transparent', color: FG_DARK, border: '#27272a' }\n : { bg: 'transparent', color: FG_LIGHT, border: '#e4e4e7' };\n case 'ghost':\n return dark\n ? { bg: 'transparent', color: FG_DARK, border: 'transparent' }\n : { bg: 'transparent', color: FG_LIGHT, border: 'transparent' };\n case 'destructive':\n return dark\n ? { bg: '#ef4444', color: FG_DARK, border: 'transparent' }\n : { bg: '#dc2626', color: FG_DARK, border: 'transparent' };\n }\n};\n\nconst pairThemedColor = (light: string, dark: string): ThemedColor =>\n light === dark ? light : { light, dark };\n\n/**\n * Full variant chrome for manifests and variant-switch patches: themed fill/label/outline\n * plus layout/type tokens that match web sim `buttonBaseStyle` / native `buttonPalette` rows.\n */\nexport const buttonVariantAuthoringStyleDefaults = (\n variant: ButtonLayerVariant,\n): Partial<ButtonStyle> => {\n const l = buttonVariantChromeForTheme(variant, 'light');\n const d = buttonVariantChromeForTheme(variant, 'dark');\n return {\n /** Matches web sim `buttonBaseStyle` (radius, type scale, width). */\n radius: 10,\n fontSize: 13,\n fontWeight: 600,\n width: 'full' as WidthValue,\n height: 'auto',\n background: pairThemedColor(l.bg, d.bg),\n color: pairThemedColor(l.color, d.color),\n border: {\n width: 1,\n color: pairThemedColor(l.border, d.border),\n },\n };\n};\n\n/**\n * Deep-merge variant chrome under an authored `style` so manifests include everything\n * the sim paints by default (padding and other keys from `style` win on conflict).\n */\nexport const mergeAuthoringButtonStyleWithLayer = (\n variant: ButtonLayerVariant,\n style: ButtonStyle | undefined,\n): ButtonStyle =>\n deepMergeStyle(\n buttonVariantAuthoringStyleDefaults(variant) as Record<string, unknown>,\n (style ?? {}) as Record<string, unknown>,\n ) as ButtonStyle;\n\n/** Variant outline fallback when authored style omits `border` (flat iOS alert rows use transparent fill). */\nexport const buttonPaletteBorderFallback = (\n variant: ButtonLayerVariant,\n theme: 'light' | 'dark',\n authoredStyle: Pick<ButtonStyle, 'border' | 'background'> | undefined,\n resolvedBackground: string | undefined,\n): { borderWidth: number; borderColor?: string } => {\n const authoredWidth = authoredStyle?.border?.width;\n if (authoredWidth !== undefined) {\n return { borderWidth: authoredWidth, borderColor: undefined };\n }\n if (resolvedBackground === 'transparent') {\n return { borderWidth: 0, borderColor: undefined };\n }\n const chrome = buttonVariantChromeForTheme(variant, theme);\n return {\n borderWidth: chrome.border === 'transparent' ? 0 : 1,\n borderColor: chrome.border === 'transparent' ? undefined : chrome.border,\n };\n};\n","import type { Layer } from '@getrheo/contracts/layers';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport { walkScreen } from './layers.js';\n\n/** Deep clone manifest JSON shape for SDK responses. */\nexport const cloneManifestForBillingSlice = (m: FlowManifest): FlowManifest =>\n structuredClone(m) as FlowManifest;\n\nconst stripRestingMotionFromLayer = (layer: Layer): void => {\n const l = layer as { restingMotion?: unknown; restingMotions?: unknown };\n delete l.restingMotion;\n delete l.restingMotions;\n};\n\n/** Removes per-screen animation clips (timeline / transitions). */\nexport const stripManifestAnimations = (manifest: FlowManifest): FlowManifest => {\n const next = cloneManifestForBillingSlice(manifest);\n for (const screen of next.screens) {\n const s = screen as { animations?: unknown; stagger?: unknown };\n delete s.animations;\n delete s.stagger;\n }\n return next;\n};\n\n/** Removes screen clips, stagger defaults, and per-layer resting motion. */\nexport const stripManifestMotion = (manifest: FlowManifest): FlowManifest => {\n const next = stripManifestAnimations(manifest);\n for (const screen of next.screens) {\n walkScreen(screen, stripRestingMotionFromLayer);\n }\n return next;\n};\n\nconst collapseLocalizedObjects = (node: unknown): void => {\n if (node === null || node === undefined) return;\n if (Array.isArray(node)) {\n for (const x of node) collapseLocalizedObjects(x);\n return;\n }\n if (typeof node !== 'object') return;\n const o = node as Record<string, unknown>;\n if (\n typeof o.default === 'string' &&\n Object.prototype.hasOwnProperty.call(o, 'translations')\n ) {\n delete o.translations;\n }\n for (const v of Object.values(o)) collapseLocalizedObjects(v);\n};\n\n/** Drops `translations` on every LocalizedText-shaped object; trims locales list to default only. */\nexport const collapseManifestToDefaultLocaleOnly = (manifest: FlowManifest): FlowManifest => {\n const next = cloneManifestForBillingSlice(manifest);\n collapseLocalizedObjects(next);\n next.locales = [next.defaultLocale];\n return next;\n};\n\nexport const manifestHasScreenAnimations = (manifest: FlowManifest): boolean =>\n manifest.screens.some((s) => {\n const anim = (s as { animations?: unknown }).animations;\n return Array.isArray(anim) && anim.length > 0;\n });\n\nconst recordHasNonEmptyTranslations = (node: unknown): boolean => {\n if (node === null || node === undefined) return false;\n if (Array.isArray(node)) return node.some(recordHasNonEmptyTranslations);\n if (typeof node !== 'object') return false;\n const o = node as Record<string, unknown>;\n const tr = o.translations;\n if (tr && typeof tr === 'object' && Object.keys(tr as object).length > 0) return true;\n return Object.values(o).some(recordHasNonEmptyTranslations);\n};\n\n/** True when manifest carries locale variants editors expect Grow+ for. */\nexport const manifestUsesTranslationsBeyondDefault = (manifest: FlowManifest): boolean => {\n if (manifest.locales.length > 1) return true;\n return recordHasNonEmptyTranslations(manifest);\n};\n\n/** True when manifest includes an external integration step with a concrete provider (Grow+). */\nexport const manifestUsesExternalIntegrations = (manifest: FlowManifest): boolean =>\n (manifest.externalSurfaceNodes ?? []).some(\n (n) => n.config?.provider != null && n.config.provider !== 'unspecified',\n );\n","import type { FlowManifest } from '@getrheo/contracts/manifest';\nimport type { Layer } from '@getrheo/contracts/layers';\nimport { resolveLocalizedText } from '@getrheo/contracts/localized';\nimport { resolveAndInterpolateLocalizedText } from './interpolateTemplate';\nimport type { InterpolationContext } from './interpolateTemplate';\n\nexport type ResolveHyperlinkPreviewLabelArgs = {\n manifest: FlowManifest;\n locale: string;\n interpolationContext?: InterpolationContext;\n};\n\n/**\n * First resolved text substring under a hyperlink’s children (preview / dialogs / a11y).\n * Depth-first; ignores non-text subtrees until a Text layer is found.\n */\nexport const resolveHyperlinkPreviewLabel = (\n roots: Layer[],\n args: ResolveHyperlinkPreviewLabelArgs,\n): string => {\n const { manifest, locale, interpolationContext } = args;\n let found = '';\n\n const visit = (l: Layer): void => {\n if (found) return;\n if (l.kind === 'text') {\n found = interpolationContext\n ? resolveAndInterpolateLocalizedText(l.text, {\n manifest,\n locale,\n responses: interpolationContext.responses,\n customProperties: interpolationContext.customProperties,\n })\n : resolveLocalizedText(l.text, locale);\n return;\n }\n if (l.kind === 'stack') {\n for (const c of l.children) visit(c);\n return;\n }\n if (l.kind === 'carousel') {\n for (const s of l.slides) visit(s);\n return;\n }\n if (l.kind === 'button' || l.kind === 'back_button') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'hyperlink') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'single_choice' || l.kind === 'multiple_choice') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'text_input' || l.kind === 'scale_input') {\n l.children?.forEach(visit);\n return;\n }\n if (l.kind === 'oauth_login') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'oauth_provider' && l.variant === 'custom') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_auth') {\n l.children.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_field') {\n l.children?.forEach(visit);\n return;\n }\n if (l.kind === 'email_password_submit') {\n l.children.forEach(visit);\n return;\n }\n };\n\n for (const r of roots) visit(r);\n return found;\n};\n","import type { Branding } from '@getrheo/contracts/dashboard';\nimport type { Theme } from '@getrheo/contracts/manifest';\n\n/** Stored on {@link TextStyle.fontFamily} to force the document system stack (ignores `theme.fontFamily`). */\nexport const TEXT_FONT_FAMILY_SYSTEM_UI = '__rheo_system_ui__';\n\n/** Web sim / builder root stack when no `theme.fontFamily` is set (matches `LayerRenderer` container). */\nexport const WEB_DOCUMENT_FONT_STACK =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif';\n\nconst quoteCssFamilyName = (name: string): string => {\n const t = name.trim();\n if (!t) return '';\n const safe = /^[-_a-zA-Z0-9]+$/.test(t);\n return safe ? t : JSON.stringify(t);\n};\n\nconst fontStackWithPrimary = (primary: string | undefined): string =>\n primary ? `${primary}, ${WEB_DOCUMENT_FONT_STACK}` : WEB_DOCUMENT_FONT_STACK;\n\n/**\n * CSS `font-family` for the flow shell so `text` layers with no `fontFamily` inherit the theme body font.\n */\nexport const resolveWebRootFontFamilyCss = (theme: Theme | undefined): string | undefined => {\n const raw = theme?.fontFamily?.trim();\n if (!raw) return undefined;\n if (raw.includes(',')) return raw;\n return fontStackWithPrimary(quoteCssFamilyName(raw));\n};\n\n/**\n * CSS `font-family` for a text layer `div` (undefined layer value → inherit shell).\n */\nexport const resolveWebTextFontFamilyCss = (layerFont: string | undefined): string | undefined => {\n if (layerFont === TEXT_FONT_FAMILY_SYSTEM_UI) return WEB_DOCUMENT_FONT_STACK;\n const raw = layerFont?.trim();\n if (!raw) return undefined;\n if (raw.includes(',')) return raw;\n return fontStackWithPrimary(quoteCssFamilyName(raw));\n};\n\n/**\n * Inline `@font-face` rules for uploaded branding fonts (web / sim only).\n */\nexport const brandingWebFontFacesCss = (branding: Branding | undefined): string => {\n if (!branding?.fontFamilies?.length) return '';\n const blocks: string[] = [];\n for (const fam of branding.fontFamilies) {\n const famCss = quoteCssFamilyName(fam.name);\n for (const st of fam.styles) {\n if (!st.url?.trim()) continue;\n const url = JSON.stringify(st.url);\n blocks.push(\n `@font-face{font-family:${famCss};src:url(${url});font-weight:${st.weight};font-style:${st.italic ? 'italic' : 'normal'};font-display:swap;}`,\n );\n }\n }\n return blocks.join('');\n};\n\n/**\n * Expo / RN registration name for a single uploaded style row (see {@link buildBrandingFontLoadMap}).\n */\nexport const nativeFontRegistrationNameForStyle = (styleId: string): string => `RheoFont__${styleId}`;\n\n/**\n * Map of **native font registration name → font file URL** for every branding style that has a `url`.\n * Pass the result to your host runtime’s font loader (e.g. `expo-font`’s `loadAsync`, a bare-RN native\n * module, or pre-linked assets). Keys match {@link resolveNativeTextFontFamilyName} after fonts are registered.\n */\nexport const buildBrandingFontLoadMap = (\n branding: Branding | null | undefined,\n): Record<string, string> => {\n const map: Record<string, string> = {};\n if (!branding?.fontFamilies?.length) return map;\n for (const fam of branding.fontFamilies) {\n for (const st of fam.styles) {\n const u = st.url?.trim();\n if (!u) continue;\n map[nativeFontRegistrationNameForStyle(st.id)] = u;\n }\n }\n return map;\n};\n\n/**\n * Resolves the RN `fontFamily` string for a logical family name, preferring a loaded branding file\n * that matches weight (and falls back to nearest uploaded style with a URL).\n */\nexport const resolveNativeTextFontFamilyName = (\n branding: Branding | undefined,\n logicalFamily: string | undefined,\n fontWeight: number | undefined,\n): string | undefined => {\n if (!logicalFamily?.trim()) return undefined;\n if (logicalFamily === TEXT_FONT_FAMILY_SYSTEM_UI) return undefined;\n const fam = branding?.fontFamilies.find((f) => f.name === logicalFamily);\n if (!fam) return logicalFamily;\n const w = fontWeight ?? 400;\n const withUrl = fam.styles.filter((s) => !!s.url?.trim());\n if (withUrl.length === 0) return logicalFamily;\n const exact = withUrl.find((s) => s.weight === w && !s.italic);\n const st = exact ?? withUrl.find((s) => s.weight === w) ?? withUrl[0];\n if (!st) return logicalFamily;\n return nativeFontRegistrationNameForStyle(st.id);\n};\n","/** Authored layer rotation (CSS `rotate`, RN `transform.rotate`, Swift `rotationEffect`). */\nexport const LAYER_ROTATE_DEG_MIN = -360;\nexport const LAYER_ROTATE_DEG_MAX = 360;\n\nexport const layerRotateCssTransform = (deg: number | undefined): string | undefined =>\n deg === undefined ? undefined : `rotate(${deg}deg)`;\n\n/** React Native `transform` entry for authored rotation. */\nexport const layerRotateNativeTransform = (\n deg: number | undefined,\n): Array<{ rotate: string }> | undefined =>\n deg === undefined ? undefined : [{ rotate: `${deg}deg` }];\n","import type { CheckboxGlyphStyle, Border, DropShadow } from '@getrheo/contracts/layers';\nimport type { Theme } from '@getrheo/contracts/manifest';\nimport type { Branding } from '@getrheo/contracts/dashboard';\nimport type { BrandGradientNativeLinear } from './brandGradient';\nimport {\n nativeBrandBackgroundFromThemedColor,\n resolveThemedColor,\n resolveThemedBackground,\n} from './layers';\n\nconst DEFAULT_UNCHECKED: CheckboxGlyphStyle = {\n size: 18,\n radius: 4,\n border: { width: 2, color: { light: '#71717a', dark: '#a1a1aa' } },\n background: 'transparent',\n opacity: 1,\n};\n\nconst DEFAULT_CHECKED_OVERLAY: CheckboxGlyphStyle = {\n background: { light: '#18181b', dark: '#e4e4e7' },\n checkColor: { light: '#ffffff', dark: '#18181b' },\n};\n\nconst mergeBorder = (a: Border | undefined, b: Border | undefined): Border | undefined => {\n if (!a && !b) return undefined;\n return { ...a, ...b };\n};\n\nconst mergeGlyph = (a: CheckboxGlyphStyle, b?: CheckboxGlyphStyle): CheckboxGlyphStyle => {\n if (!b) return { ...a };\n const out: CheckboxGlyphStyle = { ...a };\n (Object.keys(b) as (keyof CheckboxGlyphStyle)[]).forEach((k) => {\n const v = b[k];\n if (v === undefined) return;\n if (k === 'border') {\n const merged = mergeBorder(out.border, v as Border);\n if (merged && Object.values(merged).some((x) => x !== undefined)) out.border = merged;\n else delete out.border;\n return;\n }\n if (k === 'shadow') {\n out.shadow = v as DropShadow;\n return;\n }\n (out as Record<string, unknown>)[k] = v;\n });\n return out;\n};\n\n/**\n * Merge author patches into stored checkbox glyph style (inspector).\n * `undefined` values in `patch` remove that key so defaults apply at render time.\n */\nexport const mergeCheckboxGlyphStyle = (\n prev: CheckboxGlyphStyle | undefined,\n patch: Partial<CheckboxGlyphStyle>,\n): CheckboxGlyphStyle | undefined => {\n const out: CheckboxGlyphStyle = { ...(prev ?? {}) };\n for (const key of Object.keys(patch) as (keyof CheckboxGlyphStyle)[]) {\n const v = patch[key];\n if (key === 'border') {\n if (v === undefined) delete out.border;\n else out.border = mergeBorder(out.border, v as Border);\n if (out.border && !Object.values(out.border).some((x) => x !== undefined)) delete out.border;\n continue;\n }\n if (key === 'shadow') {\n if (v === undefined) delete out.shadow;\n else out.shadow = v as DropShadow;\n continue;\n }\n if (v === undefined) delete (out as Record<string, unknown>)[key];\n else (out as Record<string, unknown>)[key] = v;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\nexport type ResolvedCheckboxGlyph = {\n sizePx: number;\n radiusPx: number;\n /** CSS `background` (solid or gradient string). Web sim applies this directly. */\n background: string | undefined;\n /** Solid fill for native, or underlay when {@link nativeLinearGradient} is null. */\n nativeBackgroundColor: string | undefined;\n /** Brand linear gradient for native; radial presets use solid fallback only. */\n nativeLinearGradient: BrandGradientNativeLinear | null;\n borderWidth: number | undefined;\n borderColor: string | undefined;\n opacity: number;\n checkColor: string | undefined;\n shadow: CheckboxGlyphStyle['shadow'];\n};\n\n/**\n * Resolved colors and numbers for painting the checkbox square (web or native).\n */\nexport const resolveCheckboxGlyphForRender = (\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n unchecked: CheckboxGlyphStyle | undefined,\n checkedOverlay: CheckboxGlyphStyle | undefined,\n isChecked: boolean,\n branding?: Branding,\n): ResolvedCheckboxGlyph => {\n const base = mergeGlyph(DEFAULT_UNCHECKED, unchecked);\n const merged = isChecked ? mergeGlyph(mergeGlyph(base, DEFAULT_CHECKED_OVERLAY), checkedOverlay) : base;\n\n const sizePx = merged.size ?? 18;\n const radiusPx = merged.radius ?? 4;\n const borderWidth = merged.border?.width;\n const borderColor = resolveThemedColor(theme, palette, merged.border?.color);\n const background = resolveThemedBackground(theme, branding, palette, merged.background);\n const nb = nativeBrandBackgroundFromThemedColor(theme, branding, palette, merged.background);\n const opacity = merged.opacity ?? 1;\n const checkColor = isChecked\n ? resolveThemedColor(theme, palette, merged.checkColor)\n : undefined;\n\n return {\n sizePx,\n radiusPx,\n background,\n nativeBackgroundColor: nb.solid,\n nativeLinearGradient: nb.linear ?? null,\n borderWidth,\n borderColor,\n opacity,\n checkColor,\n shadow: merged.shadow,\n };\n};\n","import type { ScaleInputLabelStyle, ScaleInputLayer, ThemedColor } from '@getrheo/contracts/layers';\nimport type { Theme } from '@getrheo/contracts/manifest';\nimport { resolveThemedColor } from './layers';\n\nexport type ResolvedScaleInputTextStyle = {\n fontFamily: string | undefined;\n fontSizePx: number;\n fontWeight: number | undefined;\n color: string;\n textAlign: ScaleInputLabelStyle['align'];\n lineHeight: number | undefined;\n opacity: number;\n};\n\nexport type ResolvedScaleInputSliderStyle = {\n showLabels: boolean;\n showValue: boolean;\n trackHeightPx: number;\n trackColor: string;\n fillColor: string;\n thumbSizePx: number;\n thumbColor: string;\n label: ResolvedScaleInputTextStyle;\n value: ResolvedScaleInputTextStyle;\n};\n\n/** @deprecated Use {@link ResolvedScaleInputTextStyle}. */\nexport type ResolvedScaleInputLabelStyle = ResolvedScaleInputTextStyle;\n\nconst defaultTrackColor = (palette: 'light' | 'dark'): string =>\n palette === 'dark' ? '#3f3f46' : '#e4e4e7';\n\nconst defaultFillColor = (\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n): string => {\n const fromTheme = theme?.primary\n ? (resolveThemedColor(theme, palette, theme.primary) as string | undefined)\n : undefined;\n return fromTheme ?? (palette === 'dark' ? '#fafafa' : '#0a0a0a');\n};\n\nconst defaultLabelColor = (palette: 'light' | 'dark'): string =>\n palette === 'dark' ? '#a1a1aa' : '#52525b';\n\nconst defaultValueColor = (palette: 'light' | 'dark'): string =>\n palette === 'dark' ? '#fafafa' : '#0a0a0a';\n\n/**\n * Merge author patches into stored scale-input text style (inspector).\n * `undefined` values in `patch` remove that key so defaults apply at render time.\n */\nexport const mergeScaleInputLabelStyle = (\n prev: ScaleInputLabelStyle | undefined,\n patch: Partial<ScaleInputLabelStyle>,\n): ScaleInputLabelStyle | undefined => {\n const out: ScaleInputLabelStyle = { ...(prev ?? {}) };\n for (const key of Object.keys(patch) as (keyof ScaleInputLabelStyle)[]) {\n const v = patch[key];\n if (v === undefined) delete (out as Record<string, unknown>)[key];\n else (out as Record<string, unknown>)[key] = v;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\n/** Alias for {@link mergeScaleInputLabelStyle} — same shape for label and value typography. */\nexport const mergeScaleInputValueStyle = mergeScaleInputLabelStyle;\n\nconst resolveColor = (\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n color: ThemedColor | undefined,\n fallback: string,\n): string =>\n (resolveThemedColor(theme, palette, color) as string | undefined) ?? fallback;\n\nconst resolveTextStyle = (\n style: ScaleInputLabelStyle | undefined,\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n defaults: {\n fontSizePx: number;\n fontWeight?: number;\n color: string;\n opacity: number;\n textAlign?: ScaleInputLabelStyle['align'];\n },\n): ResolvedScaleInputTextStyle => ({\n fontFamily: style?.fontFamily,\n fontSizePx: style?.fontSize ?? defaults.fontSizePx,\n fontWeight: style?.fontWeight ?? defaults.fontWeight,\n color: resolveColor(theme, palette, style?.color, defaults.color),\n textAlign: style?.align ?? defaults.textAlign,\n lineHeight: style?.lineHeight,\n opacity: style?.opacity ?? defaults.opacity,\n});\n\nexport const resolveScaleInputSliderForRender = (\n layer: Pick<\n ScaleInputLayer,\n | 'labelStyle'\n | 'valueStyle'\n | 'showLabels'\n | 'showValue'\n | 'trackHeight'\n | 'trackColor'\n | 'fillColor'\n | 'thumbSize'\n | 'thumbColor'\n >,\n theme: Theme | undefined,\n palette: 'light' | 'dark',\n): ResolvedScaleInputSliderStyle => {\n const trackFallback = defaultTrackColor(palette);\n const fillFallback = defaultFillColor(theme, palette);\n return {\n showLabels: layer.showLabels !== false,\n showValue: layer.showValue !== false,\n trackHeightPx: layer.trackHeight ?? 4,\n trackColor: resolveColor(theme, palette, layer.trackColor, trackFallback),\n fillColor: resolveColor(theme, palette, layer.fillColor, fillFallback),\n thumbSizePx: layer.thumbSize ?? 16,\n thumbColor: resolveColor(theme, palette, layer.thumbColor, fillFallback),\n label: resolveTextStyle(layer.labelStyle, theme, palette, {\n fontSizePx: 11,\n color: defaultLabelColor(palette),\n opacity: 0.75,\n }),\n value: resolveTextStyle(layer.valueStyle, theme, palette, {\n fontSizePx: 14,\n fontWeight: 600,\n color: defaultValueColor(palette),\n opacity: 1,\n textAlign: 'center',\n }),\n };\n};\n","import type { CommonStyle, LayerKind, LoaderLayer } from '@getrheo/contracts/layers';\n\n/** Bar thickness (px) for a linear progress bar when `style.height` is omitted. */\nexport const DEFAULT_PROGRESS_LINEAR_HEIGHT_PX = 6;\n/** Bar thickness (px) for a linear loader when `style.height` is omitted. */\nexport const DEFAULT_LOADER_LINEAR_HEIGHT_PX = 6;\n/** Diameter (px) for a circular loader when `style.width`/`style.height` are omitted. */\nexport const DEFAULT_LOADER_CIRCULAR_SIZE_PX = 48;\n/** Ring thickness (px) for a circular loader when `style.strokeWidth` is omitted. */\nexport const DEFAULT_LOADER_STROKE_WIDTH_PX = 4;\n\n/**\n * Standard child spacing (px) for kinds that lay out children in a flex\n * container. Mirrors the authoring defaults in `createLayer*` and the\n * historical renderer fallbacks (`?? 8` / `?? 0`). Kinds without a `gap`\n * field, or where spacing does not apply, are absent (→ `null`).\n */\nconst GAP_BY_KIND: Partial<Record<LayerKind, number>> = {\n stack: 12,\n single_choice: 8,\n multiple_choice: 8,\n oauth_login: 8,\n email_password_auth: 8,\n email_password_submit: 8,\n button: 8,\n back_button: 8,\n oauth_provider: 8,\n hyperlink: 0,\n};\n\nexport const defaultGapForLayerKind = (kind: LayerKind): number | null =>\n GAP_BY_KIND[kind] ?? null;\n\n/**\n * Explicit scalar dimensions for feedback layers (progress / loader) whose\n * sizing lives directly on `style` as pixel values. Used by ingress\n * normalization to backfill omitted dimensions and by the inspector to show\n * the effective size. Renderers keep their own safety nets via the resolvers\n * in `responsive/layerResolve`.\n */\nexport const defaultFeedbackStyleScalars = (\n kind: 'progress' | 'loader',\n variant?: LoaderLayer['variant'],\n): Partial<CommonStyle> | null => {\n if (kind === 'progress') {\n return { height: DEFAULT_PROGRESS_LINEAR_HEIGHT_PX };\n }\n if (variant === 'circular') {\n return {\n width: DEFAULT_LOADER_CIRCULAR_SIZE_PX,\n height: DEFAULT_LOADER_CIRCULAR_SIZE_PX,\n strokeWidth: DEFAULT_LOADER_STROKE_WIDTH_PX,\n };\n }\n return { height: DEFAULT_LOADER_LINEAR_HEIGHT_PX };\n};\n","/**\n * Tailwind CSS default `screens` min-width values (px). Single source of truth\n * for preview buckets, manifest breakpoints, and runtime style resolution.\n *\n * @see https://tailwindcss.com/docs/screens\n */\nexport const TAILWIND_DEFAULT_BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const;\n\n/** Viewport classification used by preview UI and editing scope. */\nexport type ScreenSizeBucket = 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/** Ordered keys stored on layers (`styleBreakpoints`) and merged mobile-first. */\nexport const STYLE_BREAKPOINT_MERGE_ORDER = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\nexport type StyleBreakpointKey = (typeof STYLE_BREAKPOINT_MERGE_ORDER)[number];\n\nexport const SCREEN_SIZE_BUCKET_ORDER: readonly ScreenSizeBucket[] = [\n 'default',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n] as const;\n\n/** Buckets shown in the flow builder inspector (xl / 2xl omitted from authoring UI). */\nexport const BUILDER_INSPECTOR_BUCKET_ORDER: readonly ScreenSizeBucket[] = [\n 'default',\n 'sm',\n 'md',\n 'lg',\n] as const;\n\n/** Human-readable bucket titles; ranges lie between consecutive breakpoints. */\nexport const SCREEN_SIZE_BUCKET_LABEL: Record<ScreenSizeBucket, string> = {\n default: 'Default (< 640px)',\n sm: 'sm (640–767px)',\n md: 'md (768–1023px)',\n lg: 'lg (1024–1279px)',\n xl: 'xl (1280–1535px)',\n '2xl': '2xl (1536px+)',\n};\n\n/** Fallback viewport width when no `previewWidthPx` is passed (simulator / static previews). */\nexport const DEFAULT_PREVIEW_VIEWPORT_WIDTH_PX = 390;\n\n/** Maps viewport width (CSS px) to the Tailwind viewport bucket. */\nexport const getScreenSizeBucketForWidth = (width: number): ScreenSizeBucket => {\n const { sm, md, lg, xl, '2xl': xxl } = TAILWIND_DEFAULT_BREAKPOINTS;\n if (width < sm) return 'default';\n if (width < md) return 'sm';\n if (width < lg) return 'md';\n if (width < xl) return 'lg';\n if (width < xxl) return 'xl';\n return '2xl';\n};\n\n/**\n * Breakpoint keys whose partials apply at this width (mobile-first), e.g.\n * width 800 → `['sm','md']`.\n */\nexport const getActiveStyleBreakpointChain = (widthPx: number): StyleBreakpointKey[] => {\n const bucket = getScreenSizeBucketForWidth(widthPx);\n if (bucket === 'default') return [];\n const idx = STYLE_BREAKPOINT_MERGE_ORDER.indexOf(bucket as StyleBreakpointKey);\n if (idx < 0) return [];\n return STYLE_BREAKPOINT_MERGE_ORDER.slice(0, idx + 1) as StyleBreakpointKey[];\n};\n","import {\n STYLE_BREAKPOINT_MERGE_ORDER,\n getActiveStyleBreakpointChain,\n} from './breakpoints';\nimport type { StyleBreakpointKey } from './breakpoints';\n\nconst isPlainObject = (v: unknown): v is Record<string, unknown> =>\n v !== null && typeof v === 'object' && !Array.isArray(v);\n\n/**\n * Deep-merge style-like objects: nested plain objects merge per-key; scalars\n * and arrays replace. Suitable for padding/margin/border/shadow objects.\n */\nexport const deepMergeStyle = <T extends Record<string, unknown>>(\n base: T | undefined,\n ...overrides: (Partial<T> | undefined)[]\n): T | undefined => {\n let acc: T | undefined = base ? ({ ...base } as T) : undefined;\n for (const o of overrides) {\n if (!o) continue;\n acc = acc ?? ({} as T);\n for (const [k, v] of Object.entries(o) as [keyof T, T[keyof T] | undefined][]) {\n if (v === undefined) continue;\n const prev = acc[k as keyof T] as unknown;\n if (isPlainObject(v) && isPlainObject(prev)) {\n const merged = deepMergeStyle(prev as Record<string, unknown>, v as Partial<T>);\n if (merged !== undefined) (acc as Record<string, unknown>)[k as string] = merged;\n } else {\n (acc as Record<string, unknown>)[k as string] = v as unknown;\n }\n }\n }\n return acc;\n};\n\n/**\n * Mobile-first merge: `base` applies below `sm`; each breakpoint partial stacks\n * from `sm` through the bucket implied by `widthPx`.\n */\nexport const mergeResponsivePartial = <T extends Record<string, unknown>>(\n base: Partial<T> | undefined,\n breakpoints: Partial<Record<StyleBreakpointKey, Partial<T>>> | undefined,\n widthPx: number,\n): Partial<T> | undefined => {\n const chain = getActiveStyleBreakpointChain(widthPx);\n if (chain.length === 0) return base ? { ...base } : undefined;\n let acc = base ? ({ ...base } as Partial<T>) : undefined;\n for (const key of chain) {\n const patch = breakpoints?.[key];\n if (!patch) continue;\n acc = deepMergeStyle(acc as Record<string, unknown> | undefined, patch as Partial<T>) as\n | Partial<T>\n | undefined;\n }\n return acc;\n};\n\n/**\n * Merge breakpoint partials up to and including `bucket` (not using viewport width).\n * Use when editing a specific bucket's effective preview.\n */\nexport const mergeResponsivePartialUpToBucket = <T extends Record<string, unknown>>(\n base: Partial<T> | undefined,\n breakpoints: Partial<Record<StyleBreakpointKey, Partial<T>>> | undefined,\n bucket: StyleBreakpointKey | 'default',\n): Partial<T> | undefined => {\n if (bucket === 'default') return base ? { ...base } : undefined;\n const end = STYLE_BREAKPOINT_MERGE_ORDER.indexOf(bucket);\n if (end < 0) return base ? { ...base } : undefined;\n let acc = base ? ({ ...base } as Partial<T>) : undefined;\n for (let i = 0; i <= end; i++) {\n const key = STYLE_BREAKPOINT_MERGE_ORDER[i]!;\n const patch = breakpoints?.[key];\n if (!patch) continue;\n acc = deepMergeStyle(acc as Record<string, unknown> | undefined, patch as Partial<T>) as\n | Partial<T>\n | undefined;\n }\n return acc;\n};\n","import type {\n BackButtonLayer,\n ButtonLayer,\n ButtonStyle,\n CommonLayoutHeight,\n CommonStyle,\n IconStyle,\n ImageStyle,\n LayerKind,\n StackLayer,\n TextLayer,\n TextStyle,\n WidthValue,\n} from '@getrheo/contracts/layers';\nimport {\n DEFAULT_LOADER_CIRCULAR_SIZE_PX,\n DEFAULT_LOADER_LINEAR_HEIGHT_PX,\n DEFAULT_LOADER_STROKE_WIDTH_PX,\n DEFAULT_PROGRESS_LINEAR_HEIGHT_PX,\n defaultGapForLayerKind,\n} from '../layout/scalarLayoutDefaults';\nimport type { StyleBreakpointKey } from './breakpoints';\nimport { getActiveStyleBreakpointChain } from './breakpoints';\nimport { mergeResponsivePartial, mergeResponsivePartialUpToBucket } from './merge';\n\n/**\n * Effective child spacing (px) for a layer, falling back to the per-kind\n * default and finally `0`. Single runtime source of truth so renderers stop\n * hard-coding `?? 8` / `?? 0`.\n */\nexport const resolveLayerGap = (kind: LayerKind, gap: number | undefined): number =>\n gap ?? defaultGapForLayerKind(kind) ?? 0;\n\n/** Effective bar thickness (px) for a linear progress bar. */\nexport const resolveProgressLinearHeightPx = (\n height: CommonLayoutHeight | undefined,\n): number => (typeof height === 'number' ? height : DEFAULT_PROGRESS_LINEAR_HEIGHT_PX);\n\n/** Effective bar thickness (px) for a linear loader. */\nexport const resolveLoaderLinearHeightPx = (\n height: CommonLayoutHeight | undefined,\n): number => (typeof height === 'number' ? height : DEFAULT_LOADER_LINEAR_HEIGHT_PX);\n\n/** Effective diameter (px) for a circular loader (sized via `style.width`). */\nexport const resolveLoaderCircularSizePx = (width: WidthValue | undefined): number =>\n typeof width === 'number' ? width : DEFAULT_LOADER_CIRCULAR_SIZE_PX;\n\n/** Effective ring thickness (px) for a circular loader. */\nexport const resolveLoaderStrokeWidthPx = (strokeWidth: number | undefined): number =>\n strokeWidth ?? DEFAULT_LOADER_STROKE_WIDTH_PX;\n\nexport type StackLayoutBreakpointPatch = {\n gap?: number;\n direction?: 'vertical' | 'horizontal';\n};\n\nexport type ButtonLayoutBreakpointPatch = {\n gap?: number;\n direction?: 'vertical' | 'horizontal';\n};\n\nexport const resolveCommonStyleAtWidth = (\n base: CommonStyle | undefined,\n breakpoints:\n | Partial<Record<StyleBreakpointKey, Partial<CommonStyle>>>\n | undefined,\n widthPx: number,\n): CommonStyle | undefined =>\n mergeResponsivePartial(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n widthPx,\n ) as CommonStyle | undefined;\n\nexport const resolveTextStyleAtWidth = (\n base: TextStyle | undefined,\n breakpoints:\n | Partial<Record<StyleBreakpointKey, Partial<TextStyle>>>\n | undefined,\n widthPx: number,\n): TextStyle | undefined =>\n mergeResponsivePartial(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n widthPx,\n ) as TextStyle | undefined;\n\nexport const resolveImageStyleAtWidth = (\n base: ImageStyle | undefined,\n breakpoints:\n | Partial<Record<StyleBreakpointKey, Partial<ImageStyle>>>\n | undefined,\n widthPx: number,\n): ImageStyle | undefined =>\n mergeResponsivePartial(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n widthPx,\n ) as ImageStyle | undefined;\n\nexport const resolveIconStyleAtWidth = (\n base: IconStyle | undefined,\n breakpoints:\n | Partial<Record<StyleBreakpointKey, Partial<IconStyle>>>\n | undefined,\n widthPx: number,\n): IconStyle | undefined =>\n mergeResponsivePartial(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n widthPx,\n ) as IconStyle | undefined;\n\nexport const resolveButtonStyleAtWidth = (\n base: ButtonStyle | undefined,\n breakpoints:\n | Partial<Record<StyleBreakpointKey, Partial<ButtonStyle>>>\n | undefined,\n widthPx: number,\n): ButtonStyle | undefined =>\n mergeResponsivePartial(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n widthPx,\n ) as ButtonStyle | undefined;\n\nconst mergeLayoutScalars = <T extends Record<string, unknown>>(\n base: T,\n breakpoints: Partial<Record<StyleBreakpointKey, Partial<T>>> | undefined,\n widthPx: number,\n): T => {\n const chain = getActiveStyleBreakpointChain(widthPx);\n let acc = { ...base };\n for (const key of chain) {\n const p = breakpoints?.[key];\n if (!p) continue;\n acc = { ...acc, ...p };\n }\n return acc;\n};\n\nexport const resolveStackLayoutAtWidth = (\n layer: Pick<\n StackLayer,\n 'gap' | 'direction' | 'stackLayoutBreakpoints'\n >,\n widthPx: number,\n): { gap: number | undefined; direction: StackLayer['direction'] } => {\n const base = {\n gap: layer.gap,\n direction: layer.direction,\n };\n const merged = mergeLayoutScalars(\n base,\n layer.stackLayoutBreakpoints as\n | Partial<Record<StyleBreakpointKey, Partial<{ gap?: number; direction?: StackLayer['direction'] }>>>\n | undefined,\n widthPx,\n );\n return {\n gap: merged.gap,\n direction: merged.direction ?? layer.direction,\n };\n};\n\nexport const resolveButtonLayoutAtWidth = (\n layer: Pick<ButtonLayer | BackButtonLayer, 'gap' | 'direction' | 'buttonLayoutBreakpoints'>,\n widthPx: number,\n): { gap: number | undefined; direction: ButtonLayer['direction'] | undefined } => {\n const merged = mergeLayoutScalars(\n { gap: layer.gap, direction: layer.direction },\n layer.buttonLayoutBreakpoints as\n | Partial<\n Record<\n StyleBreakpointKey,\n Partial<{ gap?: number; direction?: ButtonLayer['direction'] }>\n >\n >\n | undefined,\n widthPx,\n );\n return { gap: merged.gap, direction: merged.direction };\n};\n\n/** Effective styles for editor preview at the bucket implied by device width. */\nexport const resolveTextStyleForEditBucket = (\n base: TextStyle | undefined,\n breakpoints: TextLayer['styleBreakpoints'],\n bucket: StyleBreakpointKey | 'default',\n): TextStyle | undefined =>\n mergeResponsivePartialUpToBucket(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n bucket,\n ) as TextStyle | undefined;\n\nexport const resolveCommonStyleForEditBucket = (\n base: CommonStyle | undefined,\n breakpoints: StackLayer['styleBreakpoints'],\n bucket: StyleBreakpointKey | 'default',\n): CommonStyle | undefined =>\n mergeResponsivePartialUpToBucket(\n base as Record<string, unknown> | undefined,\n breakpoints as Partial<Record<StyleBreakpointKey, Partial<Record<string, unknown>>>> | undefined,\n bucket,\n ) as CommonStyle | undefined;\n","import type { IconLayer, Layer, StackLayer } from '@getrheo/contracts/layers';\nimport { resolveCommonStyleAtWidth } from './responsive/layerResolve';\n\n/** Icon id suffix: visible only when the containing choice option is selected. */\nexport const CHOICE_OPTION_SELECTED_ICON_SUFFIX = '_sel';\n\n/** Icon id suffix: visible only when the containing choice option is unselected. */\nexport const CHOICE_OPTION_UNSELECTED_ICON_SUFFIX = '_unsel';\n\nexport const stackWithSelectedStyle = (\n stack: StackLayer,\n isSelected: boolean,\n widthPx: number,\n): StackLayer => {\n if (!isSelected || !stack.selectedStyle) return stack;\n const resolved = resolveCommonStyleAtWidth(stack.style, stack.styleBreakpoints, widthPx);\n return {\n ...stack,\n style: { ...(resolved ?? {}), ...stack.selectedStyle },\n styleBreakpoints: undefined,\n };\n};\n\nconst iconVisibilityForChoiceOption = (layer: IconLayer, isSelected: boolean): IconLayer => {\n const baseOpacity = layer.style?.opacity ?? 1;\n if (layer.id.endsWith(CHOICE_OPTION_SELECTED_ICON_SUFFIX)) {\n return {\n ...layer,\n style: { ...layer.style, opacity: isSelected ? baseOpacity : 0 },\n };\n }\n if (layer.id.endsWith(CHOICE_OPTION_UNSELECTED_ICON_SUFFIX)) {\n return {\n ...layer,\n style: { ...layer.style, opacity: isSelected ? 0 : baseOpacity },\n };\n }\n return layer;\n};\n\nconst mapChoiceOptionChildForSelection = (\n child: Layer,\n isSelected: boolean,\n widthPx: number,\n): Layer => {\n if (child.kind === 'stack') {\n const stack = child as StackLayer;\n const nestedSelected = isSelected && !!stack.selectedStyle;\n const styled = stackWithSelectedStyle(stack, nestedSelected, widthPx);\n const children = styled.children?.map((c) =>\n mapChoiceOptionChildForSelection(c, isSelected, widthPx),\n );\n return children ? ({ ...styled, children } as StackLayer) : styled;\n }\n if (child.kind === 'icon') {\n return iconVisibilityForChoiceOption(child, isSelected);\n }\n return child;\n};\n\n/** Applies root + nested `selectedStyle` and toggles `_sel` / `_unsel` indicator icons. */\nexport const applyChoiceOptionSelectionToStack = (\n stack: StackLayer,\n isSelected: boolean,\n widthPx: number,\n): StackLayer => {\n const styled = stackWithSelectedStyle(stack, isSelected, widthPx);\n if (!styled.children) return styled;\n return {\n ...styled,\n children: styled.children.map((c) => mapChoiceOptionChildForSelection(c, isSelected, widthPx)),\n };\n};\n","import type { CommonLayoutHeight, LayerKind, WidthValue } from '@getrheo/contracts/layers';\nimport {\n DEFAULT_LOADER_LINEAR_HEIGHT_PX,\n DEFAULT_PROGRESS_LINEAR_HEIGHT_PX,\n} from './scalarLayoutDefaults';\n\nexport type AuthoringLayoutDefaults = {\n width: WidthValue;\n height: CommonLayoutHeight;\n};\n\nconst LAYOUT_FULL_HUG: AuthoringLayoutDefaults = { width: 'full', height: 'auto' };\nconst LAYOUT_FULL_FILL: AuthoringLayoutDefaults = { width: 'full', height: 'fill' };\nconst LAYOUT_HUG_HUG: AuthoringLayoutDefaults = { width: 'auto', height: 'auto' };\nconst LAYOUT_FULL_FIXED_H160: AuthoringLayoutDefaults = { width: 'full', height: 160 };\n// Feedback bars span their container width but use a fixed px thickness; the\n// circular loader's square sizing is handled by `defaultFeedbackStyleScalars`.\nconst LAYOUT_PROGRESS: AuthoringLayoutDefaults = {\n width: 'full',\n height: DEFAULT_PROGRESS_LINEAR_HEIGHT_PX,\n};\nconst LAYOUT_LOADER_LINEAR: AuthoringLayoutDefaults = {\n width: 'full',\n height: DEFAULT_LOADER_LINEAR_HEIGHT_PX,\n};\n\n/** Explicit width/height for new layers (inspector always shows a selected mode). */\nexport const defaultLayoutStyleForKind = (kind: LayerKind): AuthoringLayoutDefaults | null => {\n switch (kind) {\n case 'stack':\n return LAYOUT_FULL_FILL;\n case 'text':\n case 'counter':\n return LAYOUT_HUG_HUG;\n case 'hyperlink':\n return LAYOUT_HUG_HUG;\n case 'image':\n case 'lottie':\n case 'video':\n return LAYOUT_FULL_FIXED_H160;\n case 'icon':\n return LAYOUT_HUG_HUG;\n case 'button':\n case 'back_button':\n case 'oauth_provider':\n case 'email_password_submit':\n return LAYOUT_FULL_HUG;\n case 'text_input':\n case 'scale_input':\n case 'email_password_auth':\n case 'email_password_field':\n case 'oauth_login':\n return LAYOUT_FULL_FILL;\n case 'progress':\n return LAYOUT_PROGRESS;\n case 'loader':\n return LAYOUT_LOADER_LINEAR;\n case 'checkbox':\n case 'single_choice':\n case 'multiple_choice':\n return LAYOUT_FULL_HUG;\n case 'carousel':\n return null;\n default:\n return null;\n }\n};\n\nexport const mergeLayoutDefaultsIntoStyle = <T extends Record<string, unknown>>(\n kind: LayerKind,\n style: T | undefined,\n): T => {\n const defaults = defaultLayoutStyleForKind(kind);\n if (!defaults) return (style ?? {}) as T;\n return { ...defaults, ...style } as unknown as T;\n};\n","import type { LayerKind } from '@getrheo/contracts/layers';\nimport type { FlowManifest } from '@getrheo/contracts/manifest';\nimport { defaultLayoutStyleForKind, mergeLayoutDefaultsIntoStyle } from './authoringLayoutDefaults';\nimport { defaultFeedbackStyleScalars, defaultGapForLayerKind } from './scalarLayoutDefaults';\n\n/** Minimal shape every layer satisfies: `kind` plus optional layout fields. */\ntype LayerLike = { kind?: unknown; style?: unknown; gap?: unknown; variant?: unknown };\n\nconst isObj = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\n/** Backfill explicit `width`/`height` (and circular-loader scalars). */\nconst applyAxisDefaultsInPlace = (layer: LayerLike, kind: LayerKind): void => {\n const current = isObj(layer.style) ? layer.style : undefined;\n if (kind === 'loader' && layer.variant === 'circular') {\n const feedback = defaultFeedbackStyleScalars('loader', 'circular');\n layer.style = { ...feedback, ...(current ?? {}) };\n return;\n }\n if (!defaultLayoutStyleForKind(kind)) return;\n layer.style = mergeLayoutDefaultsIntoStyle(kind, current);\n};\n\n/** Backfill the per-kind child spacing default when `gap` is omitted. */\nconst applyGapDefaultInPlace = (layer: LayerLike, kind: LayerKind): void => {\n const gapDefault = defaultGapForLayerKind(kind);\n if (gapDefault === null) return;\n // Preset OAuth provider rows have no `gap` field; only custom rows do.\n if (kind === 'oauth_provider' && layer.variant !== 'custom') return;\n if (layer.gap === undefined) layer.gap = gapDefault;\n};\n\n/**\n * Backfill explicit sizing for a single layer based on its kind: `width`/\n * `height` axis modes, per-kind child spacing (`gap`), and feedback scalar\n * dimensions. Existing values always win; kinds without a default (e.g.\n * `carousel`) are left untouched. Loose-typed so it runs on validated `Layer`\n * trees and on JSON-shaped layers (pre-validation AI / import).\n */\nexport const applyLayoutDefaultsToLayerInPlace = (layer: LayerLike): void => {\n if (typeof layer.kind !== 'string') return;\n const kind = layer.kind as LayerKind;\n applyAxisDefaultsInPlace(layer, kind);\n applyGapDefaultInPlace(layer, kind);\n};\n\nconst recurseChildren = (parent: Record<string, unknown>, key: 'children' | 'slides'): void => {\n const kids = parent[key];\n if (!Array.isArray(kids)) return;\n for (const child of kids) {\n if (isObj(child)) normalizeLayerLayoutInPlace(child);\n }\n};\n\n/**\n * Backfill explicit sizing for a layer and its descendants in place.\n * Recursion mirrors the manifest migrate tree walk (stack/button/back_button/\n * carousel/choice/input/oauth/email-password/hyperlink children).\n */\nexport const normalizeLayerLayoutInPlace = (layer: Record<string, unknown>): void => {\n applyLayoutDefaultsToLayerInPlace(layer as LayerLike);\n const kind = layer.kind;\n if (kind === 'carousel') {\n recurseChildren(layer, 'slides');\n return;\n }\n // Every other container kind nests under `children`; non-containers have none.\n recurseChildren(layer, 'children');\n};\n\n/** Backfill explicit sizing across a manifest's screens, in place. */\nexport const normalizeManifestLayoutInPlace = (manifest: FlowManifest): void => {\n const screens = (manifest as { screens?: unknown }).screens;\n if (!Array.isArray(screens)) return;\n for (const screen of screens) {\n if (!isObj(screen)) continue;\n const regions = screen.regions;\n if (!isObj(regions)) continue;\n for (const key of ['header', 'body', 'footer'] as const) {\n const region = regions[key];\n if (isObj(region)) normalizeLayerLayoutInPlace(region);\n }\n }\n};\n","import type { CommonLayoutHeight } from '@getrheo/contracts/layers';\n\n/** Whether a stack should grow on the parent stack main axis (web/RN StackView parity with SwiftUI). */\nexport const stackMainAxisFillHeight = (\n height: CommonLayoutHeight | undefined,\n): boolean => height === 'fill' || height === 'full';\n","import type {\n ScreenBackgroundFill,\n ScreenBackgroundFillPatch,\n ScreenContainerStyle,\n ScreenContainerStyleBreakpoints,\n} from '@getrheo/contracts';\nimport type { StyleBreakpointKey } from './breakpoints';\nimport { getActiveStyleBreakpointChain, STYLE_BREAKPOINT_MERGE_ORDER } from './breakpoints';\nimport { deepMergeStyle } from './merge';\n\nconst mergeBackgroundFillPatch = (\n fill: ScreenBackgroundFill,\n patch: ScreenBackgroundFillPatch,\n): ScreenBackgroundFill => {\n if (fill.kind === 'color') {\n return {\n ...fill,\n kind: 'color',\n ...(patch.color !== undefined ? { color: patch.color } : {}),\n ...(patch.opacity !== undefined ? { opacity: patch.opacity } : {}),\n };\n }\n const scrim =\n patch.scrim !== undefined\n ? deepMergeStyle(fill.scrim as Record<string, unknown> | undefined, patch.scrim)\n : fill.scrim;\n const shared = {\n ...fill,\n ...(patch.fit !== undefined ? { fit: patch.fit } : {}),\n ...(patch.opacity !== undefined ? { opacity: patch.opacity } : {}),\n ...(scrim !== undefined ? { scrim } : {}),\n };\n if (fill.kind === 'image') {\n return shared as ScreenBackgroundFill;\n }\n return {\n ...shared,\n ...(patch.loop !== undefined ? { loop: patch.loop } : {}),\n ...(patch.autoPlay !== undefined ? { autoPlay: patch.autoPlay } : {}),\n ...(patch.triggerLayerId !== undefined ? { triggerLayerId: patch.triggerLayerId } : {}),\n ...(patch.onComplete !== undefined ? { onComplete: patch.onComplete } : {}),\n ...(patch.audioEnabled !== undefined ? { audioEnabled: patch.audioEnabled } : {}),\n } as ScreenBackgroundFill;\n};\n\nexport const resolveScreenContainerStyleAtWidth = (\n base: ScreenContainerStyle | undefined,\n breakpoints: ScreenContainerStyleBreakpoints | undefined,\n widthPx: number,\n): ScreenContainerStyle | undefined => {\n const chain = getActiveStyleBreakpointChain(widthPx);\n let acc: ScreenContainerStyle | undefined = base ? { ...base } : undefined;\n for (const key of chain) {\n const patch = breakpoints?.[key as StyleBreakpointKey];\n if (!patch) continue;\n acc = acc ?? {};\n if (patch.padding !== undefined) acc = { ...acc, padding: patch.padding };\n if (patch.margin !== undefined) acc = { ...acc, margin: patch.margin };\n if (patch.insetSafeArea !== undefined) acc = { ...acc, insetSafeArea: patch.insetSafeArea };\n if (patch.backgroundFillPatch && acc.backgroundFill) {\n acc = {\n ...acc,\n backgroundFill: mergeBackgroundFillPatch(acc.backgroundFill, patch.backgroundFillPatch),\n };\n }\n }\n return acc;\n};\n\nexport const screenBackgroundFillUsesMedia = (\n fill: ScreenBackgroundFill | undefined,\n): fill is Extract<ScreenBackgroundFill, { kind: 'image' | 'video' }> =>\n fill?.kind === 'image' || fill?.kind === 'video';\n\n/** Effective shell style for builder inspector at a specific breakpoint bucket. */\nexport const resolveScreenContainerForEditBucket = (\n base: ScreenContainerStyle | undefined,\n breakpoints: ScreenContainerStyleBreakpoints | undefined,\n bucket: StyleBreakpointKey | 'default',\n): ScreenContainerStyle | undefined => {\n if (bucket === 'default') return base ? { ...base } : undefined;\n const end = STYLE_BREAKPOINT_MERGE_ORDER.indexOf(bucket);\n if (end < 0) return base ? { ...base } : undefined;\n let acc: ScreenContainerStyle | undefined = base ? { ...base } : {};\n for (let i = 0; i <= end; i++) {\n const patch = breakpoints?.[STYLE_BREAKPOINT_MERGE_ORDER[i]!];\n if (!patch) continue;\n acc = acc ?? {};\n if (patch.padding !== undefined) acc = { ...acc, padding: patch.padding };\n if (patch.margin !== undefined) acc = { ...acc, margin: patch.margin };\n if (patch.insetSafeArea !== undefined) acc = { ...acc, insetSafeArea: patch.insetSafeArea };\n if (patch.backgroundFillPatch && acc.backgroundFill) {\n acc = {\n ...acc,\n backgroundFill: mergeBackgroundFillPatch(acc.backgroundFill, patch.backgroundFillPatch),\n };\n }\n }\n const hasKeys =\n acc &&\n (acc.padding !== undefined ||\n acc.margin !== undefined ||\n acc.insetSafeArea !== undefined ||\n acc.backgroundFill !== undefined);\n return hasKeys ? acc : undefined;\n};\n","/** Preview / sim status bar + home-indicator insets (portrait phone). */\n\nexport type PreviewPhoneSystemUi = 'ios' | 'android';\n\nexport const previewPhoneSafeAreaInsetTopPx = (width: number): number => {\n const statusChromePadY = Math.max(6, Math.round(width * 0.016));\n const chromePadBottom = Math.max(4, Math.round(width * 0.01));\n const padY = Math.max(5, Math.round(width * 0.012));\n const statusH = Math.max(23, Math.round(width * 0.058));\n return statusChromePadY + statusH + 2 * padY + chromePadBottom;\n};\n\nexport const previewPhoneSafeAreaInsetBottomPx = (\n width: number,\n systemUi: PreviewPhoneSystemUi = 'ios',\n): number => {\n const pad = systemUi === 'ios' ? 8 : 10;\n const pill = systemUi === 'ios' ? 5 : 4;\n return pad + pill + Math.max(6, Math.round(width * 0.014));\n};\n\n/** Portrait phone preview: no horizontal inset (matches RN `SafeAreaView` in portrait). */\nexport const previewPhoneSafeAreaInsetHorizontalPx = (_width: number): number => 0;\n\nexport const previewPhoneSafeAreaPadding = (\n widthPx: number,\n systemUi: PreviewPhoneSystemUi = 'ios',\n): { t: number; r: number; b: number; l: number } => ({\n t: previewPhoneSafeAreaInsetTopPx(widthPx),\n r: previewPhoneSafeAreaInsetHorizontalPx(widthPx),\n b: previewPhoneSafeAreaInsetBottomPx(widthPx, systemUi),\n l: previewPhoneSafeAreaInsetHorizontalPx(widthPx),\n});\n","import type { Padding } from '@getrheo/contracts';\n\nconst edge = (a: number | undefined, b: number | undefined): number | undefined => {\n const sum = (a ?? 0) + (b ?? 0);\n return sum === 0 ? undefined : sum;\n};\n\n/** Per-edge sum of two padding objects; omits zero edges. */\nexport const addPadding = (a?: Padding, b?: Padding): Padding | undefined => {\n if (!a && !b) return undefined;\n const out: Padding = {\n t: edge(a?.t, b?.t),\n r: edge(a?.r, b?.r),\n b: edge(a?.b, b?.b),\n l: edge(a?.l, b?.l),\n };\n const cleaned = Object.fromEntries(\n Object.entries(out).filter(([, v]) => v !== undefined),\n ) as Padding;\n return Object.keys(cleaned).length === 0 ? undefined : cleaned;\n};\n\nexport const resolveEffectiveScreenShellPadding = (opts: {\n manual?: Padding;\n insetSafeArea?: boolean;\n safeAreaInsets: Padding;\n}): Padding | undefined => {\n if (!opts.insetSafeArea) return opts.manual;\n return addPadding(opts.manual, opts.safeAreaInsets);\n};\n"]}
|