@amplifyup/sdk 0.1.67 → 0.1.68

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/aws.ts","../src/storage.ts","../src/targets.ts","../src/preview.ts","../src/field-envelope.ts","../src/page-context.ts","../src/page-resource-runtime.ts","../src/debug.ts","../src/edge/normalizeRoute.ts","../src/edge/variantKeys.ts","../src/edge/resolve.ts","../src/edge/mapResolvedToPageConfig.ts","../src/content/fetchContent.ts","../src/edge/select.ts","../src/edge/query.ts","../src/index.ts","../src/composer-store.ts","../src/composer-provider.tsx","../src/AmplifyRenderer.tsx","../src/EmptySlotHint.tsx","../src/AmplifyPageContent.tsx","../src/composer-edit-mode.ts","../src/components.tsx","../src/react.tsx"],"names":["orchestratorUrl","isPageResourceSentinel","nodeId","jsx","useEffect","rawTree","layoutTree","Fragment","jsxs","createContext","useContext","useSyncExternalStore","useState","useRef","React","normalizeRoutePath"],"mappings":"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","file":"react.mjs","sourcesContent":["/**\n * AWS Native CDP Adapter\n * \n * Implements the CDPAdapter interface using AWS API Gateway directly.\n * Pure AWS architecture adapter for event ingestion.\n */\n\nimport { CDPAdapter, AmplifyUpConfig, PageProperties, TrackProperties, IdentifyTraits, IdentifyInput, ProfileFieldsInput } from '../types';\n\n// Internal config type that includes URLs (not part of user config)\ninterface InternalConfig extends AmplifyUpConfig {\n apiGatewayUrl?: string;\n orchestratorUrl?: string;\n decisionApiUrl?: string;\n}\n\nexport class AWSAdapter implements CDPAdapter {\n private initialized = false;\n private config: AmplifyUpConfig | null = null;\n private apiGatewayUrl: string = '';\n\n async init(config: InternalConfig): Promise<void> {\n if (typeof window === 'undefined') {\n console.warn('AmplifyUp SDK: Window object not available (SSR)');\n return;\n }\n\n if (this.initialized) {\n return;\n }\n\n this.config = {\n trackingId: config.trackingId,\n debug: config.debug,\n dev: config.dev,\n };\n this.apiGatewayUrl = config.apiGatewayUrl || '';\n\n if (!this.apiGatewayUrl) {\n console.warn('AmplifyUp SDK: AWS API Gateway URL not configured. Tracking disabled.');\n return;\n }\n\n this.initialized = true;\n\n if (config.debug) {\n console.log('AmplifyUp SDK: AWS adapter initialized', {\n apiGatewayUrl: this.apiGatewayUrl,\n });\n }\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n private async sendEvent(endpoint: string, eventData: any): Promise<void> {\n if (!this.apiGatewayUrl) {\n console.warn('AmplifyUp SDK: AWS configuration missing');\n return;\n }\n\n const url = `${this.apiGatewayUrl}${endpoint}`;\n \n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(eventData),\n // Keep the request alive through tab close so the single Time on Page\n // flush on pagehide is not cancelled with the document.\n keepalive: true,\n });\n\n if (!response.ok) {\n if (this.config.debug) {\n console.warn(`AmplifyUp SDK: Event tracking failed: ${response.status} ${response.statusText}`);\n }\n } else if (this.config.debug) {\n const result = await response.json().catch(() => ({}));\n console.log('AmplifyUp SDK: Event tracked', result);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('AmplifyUp SDK: Event tracking error:', error);\n }\n }\n }\n\n page(properties: PageProperties): void {\n if (!this.initialized) {\n return;\n }\n\n // CRITICAL: Double-check preview mode at adapter level - exit immediately\n if (typeof window !== 'undefined') {\n // Check preview flag\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Silent exit\n }\n // Check URL path for proxy route\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Silent exit\n }\n // Check query params\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Silent exit\n }\n // Check if in iframe\n if (window.self !== window.top) {\n return; // Silent exit - iframe = preview mode\n }\n // Check URL string\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Silent exit\n }\n }\n\n const eventData = {\n type: 'page',\n anonymousId: properties.instanceId,\n sessionId: properties.sessionId,\n userId: properties.userId,\n properties: {\n path: properties.path || properties.url,\n referrer: properties.referrer,\n ...properties,\n },\n context: {\n page: {\n path: properties.path || properties.url,\n referrer: properties.referrer,\n },\n },\n timestamp: properties.timestamp || new Date().toISOString(),\n };\n\n this.sendEvent('/v1/page', eventData);\n }\n\n track(eventName: string, properties: TrackProperties): void {\n if (!this.initialized) {\n return;\n }\n\n // CRITICAL: Double-check preview mode at adapter level - exit immediately\n if (typeof window !== 'undefined') {\n // Check preview flag\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Silent exit\n }\n // Check URL path for proxy route\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Silent exit\n }\n // Check query params\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Silent exit\n }\n // Check if in iframe\n if (window.self !== window.top) {\n return; // Silent exit - iframe = preview mode\n }\n // Check URL string\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Silent exit\n }\n }\n\n const eventData = {\n type: 'track',\n event: eventName,\n anonymousId: properties.instanceId,\n sessionId: properties.sessionId,\n userId: properties.userId,\n properties: {\n ...properties,\n },\n context: {\n url: properties.url || (typeof window !== 'undefined' ? window.location.href : ''),\n },\n timestamp: properties.timestamp || new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n identify(userIdOrIdentifiers: IdentifyInput, traits: IdentifyTraits = {}): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Call init() first.');\n return;\n }\n\n const isMap =\n userIdOrIdentifiers !== null &&\n typeof userIdOrIdentifiers === 'object' &&\n !Array.isArray(userIdOrIdentifiers);\n\n const identifiers = isMap\n ? (userIdOrIdentifiers as Record<string, string | number>)\n : traits.identifiers;\n\n const userId = isMap\n ? undefined\n : String(userIdOrIdentifiers);\n\n const eventData: Record<string, unknown> = {\n type: 'identify',\n anonymousId: traits.instanceId,\n sessionId: traits.sessionId,\n traits: {\n ...traits,\n ...(identifiers ? { identifiers } : {}),\n },\n ...(identifiers ? { identifiers } : {}),\n ...(userId ? { userId } : {}),\n timestamp: new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n setProfileFields(fields: ProfileFieldsInput, context: IdentifyTraits = {}): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Call init() first.');\n return;\n }\n\n const eventData = {\n type: 'set_fields',\n anonymousId: context.instanceId,\n sessionId: context.sessionId,\n fields,\n traits: {\n instanceId: context.instanceId,\n trackingId: context.trackingId,\n },\n properties: {\n trackingId: context.trackingId,\n },\n timestamp: new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n reset(): void {\n // AWS adapter doesn't need special reset logic\n // Identity is managed by the SDK storage layer\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Reset called (identity cleared)');\n }\n }\n}\n\n","/**\n * Storage utilities for instance ID and user ID\n */\n\nconst INSTANCE_ID_KEY = 'amplifyup_instance_id';\nconst USER_ID_KEY = 'amplifyup_user_id';\nconst SESSION_ID_KEY = 'amplifyup_session_id';\nconst SESSION_ACTIVITY_KEY = 'amplifyup_session_activity';\n/** First-party cookie so Next middleware can SSR/ISR personalized variants. */\nexport const ANON_COOKIE_NAME = 'amplifyup_anon_id';\n/** First-party session cookie — same pattern as visitor id; 30-minute inactivity. */\nexport const SESSION_COOKIE_NAME = 'amplifyup_session_id';\n/** Idle gap that starts a new session. Keep aligned with orchestrator SESSION_GAP_MS. */\nexport const SESSION_IDLE_GAP_MS = 30 * 60 * 1000;\n\n/**\n * Generate a random GUID (UUID v4 style)\n */\nfunction generateGuid(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n // Fallback for older environments\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const parts = document.cookie.split(';');\n for (const part of parts) {\n const idx = part.indexOf('=');\n if (idx === -1) continue;\n if (part.slice(0, idx).trim() !== name) continue;\n const value = part.slice(idx + 1).trim();\n try {\n return value ? decodeURIComponent(value) : null;\n } catch {\n return value || null;\n }\n }\n return null;\n}\n\nfunction writeCookie(name: string, value: string, maxAgeSeconds = 31536000): void {\n if (typeof document === 'undefined') return;\n document.cookie = `${name}=${encodeURIComponent(value)}; Path=/; Max-Age=${maxAgeSeconds}; SameSite=Lax`;\n}\n\n/**\n * Get or create instance ID (browser/device identifier).\n * localStorage + first-party cookie (middleware reads the cookie).\n */\nexport function getInstanceId(): string {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const fromCookie = readCookie(ANON_COOKIE_NAME);\n const fromLs = localStorage.getItem(INSTANCE_ID_KEY);\n const instanceId = fromLs || fromCookie || `browser_${generateGuid()}`;\n\n if (fromLs !== instanceId) {\n localStorage.setItem(INSTANCE_ID_KEY, instanceId);\n }\n if (fromCookie !== instanceId) {\n writeCookie(ANON_COOKIE_NAME, instanceId);\n }\n return instanceId;\n}\n\n/**\n * Get stored user ID\n */\nexport function getUserId(): string | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n return localStorage.getItem(USER_ID_KEY);\n}\n\n/**\n * Get or mint a session id. Resets after 30 minutes of inactivity.\n * Cookie + localStorage, same pattern as visitor id.\n */\nexport function getSessionId(): string {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const now = Date.now();\n const lastActivity = Number(localStorage.getItem(SESSION_ACTIVITY_KEY) || 0);\n const fromCookie = readCookie(SESSION_COOKIE_NAME);\n const fromLs = localStorage.getItem(SESSION_ID_KEY);\n let sessionId = fromLs || fromCookie || '';\n\n if (!sessionId || (lastActivity > 0 && now - lastActivity >= SESSION_IDLE_GAP_MS)) {\n sessionId = generateGuid();\n }\n\n localStorage.setItem(SESSION_ID_KEY, sessionId);\n localStorage.setItem(SESSION_ACTIVITY_KEY, String(now));\n writeCookie(SESSION_COOKIE_NAME, sessionId, Math.floor(SESSION_IDLE_GAP_MS / 1000));\n return sessionId;\n}\n\n/**\n * Store user ID\n */\nexport function setUserId(userId: string): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n localStorage.setItem(USER_ID_KEY, userId);\n}\n\n/**\n * Clear stored IDs (logout)\n */\nexport function clearIds(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n localStorage.removeItem(INSTANCE_ID_KEY);\n localStorage.removeItem(USER_ID_KEY);\n localStorage.removeItem(SESSION_ID_KEY);\n localStorage.removeItem(SESSION_ACTIVITY_KEY);\n document.cookie = `${ANON_COOKIE_NAME}=; Path=/; Max-Age=0; SameSite=Lax`;\n document.cookie = `${SESSION_COOKIE_NAME}=; Path=/; Max-Age=0; SameSite=Lax`;\n}\n","/**\n * AmplifyUp environment targets\n *\n * Two environments only:\n * - local: apps/config from localhost + Neon; events & personalize from AWS development\n * - production: all production AmplifyUp / AWS endpoints\n *\n * Controlled via `config.target` or `NEXT_PUBLIC_AMPLIFYUP_TARGET`.\n * Legacy value `dev` is treated as `local`.\n */\n\nexport type AmplifyUpTarget = 'local' | 'production';\n\n/** Accepted env/config strings (includes legacy `dev` → local). */\nexport type AmplifyUpTargetInput = AmplifyUpTarget | 'dev';\n\nexport interface AmplifyUpUrls {\n target: AmplifyUpTarget;\n apiGatewayUrl: string;\n orchestratorUrl: string;\n decisionApiUrl: string;\n edgeUrl: string;\n}\n\nconst AWS_DEV_API = 'https://api-dev.amplifyup.ai';\nconst AWS_PROD_API = 'https://api.amplifyup.ai';\nconst PROD_ORCHESTRATOR = 'https://amplifyup.ai';\nconst PROD_EDGE = 'https://edge.amplifyup.ai';\n\nexport function isAmplifyUpTarget(value: unknown): value is AmplifyUpTargetInput {\n return value === 'local' || value === 'dev' || value === 'production';\n}\n\nexport function normalizeAmplifyUpTarget(value: AmplifyUpTargetInput): AmplifyUpTarget {\n return value === 'dev' ? 'local' : value;\n}\n\n/**\n * Resolve which target to use.\n *\n * Priority:\n * 1. explicit config.target\n * 2. config.dev === true → 'local' (local apps + AWS-dev pipeline)\n * 3. NEXT_PUBLIC_AMPLIFYUP_TARGET\n * 4. unset → 'production' (live endpoints — hosting on localhost does NOT imply local)\n *\n * Use `local` only when developing against the AmplifyUp monorepo\n * (set NEXT_PUBLIC_AMPLIFYUP_TARGET=local in .env.local).\n */\nexport function resolveAmplifyUpTarget(options?: {\n configTarget?: AmplifyUpTargetInput;\n /** @deprecated Prefer NEXT_PUBLIC_AMPLIFYUP_TARGET=local. When true, resolves to local. */\n configDev?: boolean;\n}): AmplifyUpTarget {\n if (options?.configTarget && isAmplifyUpTarget(options.configTarget)) {\n return normalizeAmplifyUpTarget(options.configTarget);\n }\n\n if (options?.configDev === true) {\n return 'local';\n }\n\n const envTarget =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_TARGET\n : undefined;\n if (isAmplifyUpTarget(envTarget)) {\n return normalizeAmplifyUpTarget(envTarget);\n }\n\n return 'production';\n}\n\n/** True when the orchestrator origin is a remote AmplifyUp deployment (not localhost). */\nexport function isRemoteOrchestratorUrl(orchestratorUrl: string): boolean {\n try {\n const host = new URL(orchestratorUrl).hostname.toLowerCase();\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '::1';\n } catch {\n return false;\n }\n}\n\nfunction localOrchestratorUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n return (fromEnv || 'http://localhost:5001').replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local→AWS-dev API base (events + personalize).\n * Defaults to https://api-dev.amplifyup.ai\n */\nfunction localAwsApiUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL\n : undefined;\n return (fromEnv || AWS_DEV_API).replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local Edge Worker URL.\n * Defaults to http://localhost:8787\n */\nfunction localEdgeUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL\n : undefined;\n return (fromEnv || 'http://localhost:8787').replace(/\\/$/, '');\n}\n\nexport function resolveAmplifyUpUrls(target: AmplifyUpTarget): AmplifyUpUrls {\n if (target === 'local') {\n const orchestratorUrl = localOrchestratorUrl();\n const apiGatewayUrl = localAwsApiUrl();\n return {\n target: 'local',\n // Layouts / site config / composer APIs → local orchestrator + Neon\n orchestratorUrl,\n // Events + personalize → AWS development stack\n apiGatewayUrl,\n decisionApiUrl: `${apiGatewayUrl}/v1/personalize`,\n edgeUrl: localEdgeUrl(),\n };\n }\n\n const resolvedApi =\n (typeof process !== 'undefined' &&\n process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL?.replace(/\\/$/, '')) ||\n AWS_PROD_API;\n\n const orchestratorFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n\n // Production: don't accidentally use a localhost orchestrator URL from a local env file\n const isLocalOrchestrator =\n !!orchestratorFromEnv &&\n (orchestratorFromEnv.includes('localhost') ||\n orchestratorFromEnv.includes('127.0.0.1'));\n\n const orchestratorUrl = isLocalOrchestrator || !orchestratorFromEnv\n ? PROD_ORCHESTRATOR\n : orchestratorFromEnv.replace(/\\/$/, '');\n\n const edgeFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL?.replace(/\\/$/, '')\n : undefined;\n const edgeUrl =\n edgeFromEnv &&\n !edgeFromEnv.includes('localhost') &&\n !edgeFromEnv.includes('127.0.0.1')\n ? edgeFromEnv\n : PROD_EDGE;\n\n return {\n target: 'production',\n apiGatewayUrl: resolvedApi,\n orchestratorUrl,\n decisionApiUrl: `${resolvedApi}/v1/personalize`,\n edgeUrl,\n };\n}\n","/**\n * Composer / visual-editor preview detection.\n * Shared by AmplifyPageContent, AmplifyUpProvider, and AmplifyRenderer.\n */\n\n/** True when `preview=true` (or legacy visualEditor) is in request search params. */\nexport function isPreviewRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'preview') || paramIsTrue(searchParams, 'visualEditor');\n}\n\n/**\n * Composer Edit (not Preview toggle): overlay unpublished CMS docs.\n * Live visitors and Composer Preview omit this.\n */\nexport function isWorkingContentRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'working');\n}\n\nfunction paramIsTrue(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams,\n key: string\n): boolean {\n if (searchParams instanceof URLSearchParams) {\n return searchParams.get(key) === 'true';\n }\n const value = searchParams[key];\n return value === 'true' || (Array.isArray(value) && value[0] === 'true');\n}\n\n/**\n * Client-only: true when the page is loaded inside AmplifyUp Composer.\n * Does NOT treat every iframe as preview — only Composer referrers / query flags.\n */\nexport function isComposerPreview(): boolean {\n if (typeof window === 'undefined') return false;\n\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) return true;\n\n const params = new URLSearchParams(window.location.search);\n if (isPreviewRequest(params)) return true;\n\n if (window.self !== window.top && document.referrer) {\n try {\n const refUrl = new URL(document.referrer);\n if (\n refUrl.hostname === 'amplifyup.ai' ||\n refUrl.hostname.endsWith('.amplifyup.ai') ||\n (refUrl.hostname === 'localhost' && refUrl.port === '5001') ||\n refUrl.pathname.includes('/dashboard/composer') ||\n refUrl.pathname.includes('/dashboard/routes/')\n ) {\n return true;\n }\n } catch {\n // ignore parse error\n }\n }\n\n return false;\n}\n","/**\n * Field envelopes — same shape in published, draft, and Composer edit.\n * `{ value, name, ref? }` where `name` is the path within the owning record\n * (`title`, `author.name`). Page-level fields omit `ref`.\n * `ref` is stamped from the connection that produced the row\n * (`providerId`, AmplifyUp `entity`, `id`) — never from a CMS `_type`.\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`) and again\n * on the SDK for `queryContent` rows.\n */\n\nexport const FIELDS_BRAND: unique symbol = Symbol('amplifyup.fields');\n\nexport type ImageValue = {\n url: string;\n alt?: string;\n width?: number;\n height?: number;\n};\n\n/** Connection that produced a list row. Omitted on page-level fields. */\nexport type FieldRef = {\n providerId: string;\n entity: string;\n id: string;\n};\n\n/** AmplifyUp entity + provider from the connection that produced a list. */\nexport type ListOwner = {\n providerId: string;\n entity: string;\n};\n\nexport type ConnectionLike = {\n mode?: string;\n providerId?: string;\n entity?: string;\n spec?: { providerId?: string; entity?: string };\n};\n\nexport type EnvelopeSources = {\n connections?: Record<string, ConnectionLike | null | undefined>;\n reads?: Record<string, { resource: string }>;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n ref?: FieldRef;\n /** Row field with no write target — display only in Composer. */\n readOnly?: true;\n};\n\n/** Portable entry identity after normalize (`id` required). */\nexport type PortableRef = {\n id: string;\n type?: string;\n};\n\nconst IDENTIFIER_KEYS = new Set([\n 'id',\n '_id',\n 'slug',\n 'key',\n '_key',\n 'docId',\n '_type',\n 'type',\n]);\n\ntype IdentifierKey =\n | 'id'\n | '_id'\n | 'slug'\n | 'key'\n | '_key'\n | 'docId'\n | '_type'\n | 'type';\n\ntype IsPlainObject<T> = T extends object\n ? T extends readonly unknown[]\n ? false\n : T extends ImageValue\n ? false\n : true\n : false;\n\ntype AsRecord<T> = T extends Record<string, unknown> ? T : Record<string, unknown>;\n\n/** A list row: enveloped fields plus a plain `id`. */\nexport type ListRow<T extends Record<string, unknown> = Record<string, unknown>> =\n Fields<T> & { id: string };\n\ntype FieldsProp<T> = NonNullable<T> extends ImageValue\n ? Field<T | null>\n : NonNullable<T> extends readonly (infer U)[]\n ? IsPlainObject<U> extends true\n ? Field<Array<ListRow<AsRecord<U>>>>\n : Field<T>\n : IsPlainObject<NonNullable<T>> extends true\n ? Fields<NonNullable<T>>\n : Field<T>;\n\nexport type Fields<T> = {\n readonly [FIELDS_BRAND]: true;\n} & {\n [K in keyof T]-?: K extends IdentifierKey ? T[K] : FieldsProp<T[K]>;\n};\n\n/** Props passed into site components. Raw CMS bags are not assignable. */\nexport type LayoutComponentProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n fields: Fields<T>;\n};\n\nexport function isBrandedFields(\n value: unknown\n): value is Fields<Record<string, unknown>> {\n return !!value && typeof value === 'object' && FIELDS_BRAND in value;\n}\n\nexport function brandFields<T extends Record<string, unknown>>(\n bag: T\n): Fields<T> {\n if (isBrandedFields(bag)) return bag as unknown as Fields<T>;\n Object.defineProperty(bag, FIELDS_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n });\n return bag as unknown as Fields<T>;\n}\n\nexport function isFieldEnvelope(value: unknown): value is Field<unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { name?: unknown; value?: unknown; url?: unknown };\n return typeof rec.name === 'string' && 'value' in rec && !('url' in rec);\n}\n\nexport function isFieldsBag(value: unknown): boolean {\n return isBrandedFields(value);\n}\n\nexport function isPageResourceSentinel(value: unknown): boolean {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { __amplifyupPageResource?: unknown })\n .__amplifyupPageResource === 'string'\n );\n}\n\n/** Portable `{ url }` or a CMS image object — stay a leaf, do not recurse. */\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n if ('url' in value) return true;\n const rec = value as { _type?: unknown; asset?: unknown };\n return rec._type === 'image' || rec.asset != null;\n}\n\nexport function isIdentifierKey(key: string): boolean {\n return IDENTIFIER_KEYS.has(key);\n}\n\n/** Object-array (list of records) vs scalar array (tags, multi-select). */\nexport function isRecordList(value: unknown): value is unknown[] {\n if (!Array.isArray(value) || value.length === 0) return false;\n const sample = value.find((item) => item != null);\n if (sample === undefined) return false;\n if (typeof sample !== 'object' || Array.isArray(sample)) return false;\n if (isPortableImageShape(sample)) return false;\n if ((sample as { $$typeof?: unknown }).$$typeof) return false;\n return true;\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown; id?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity &&\n typeof rec.id === 'string' &&\n !!rec.id\n );\n}\n\nexport function isListOwner(value: unknown): value is ListOwner {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity\n );\n}\n\nexport function isReadOnlyRowField(value: unknown): boolean {\n return isFieldEnvelope(value) && value.readOnly === true && !value.ref;\n}\n\nexport function composerStoreKey(\n name: string,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): string {\n if (isFieldRef(ref)) {\n return `record:${ref.providerId}:${ref.entity}:${ref.id}:${name}`;\n }\n return layoutNodeId ? `page:${layoutNodeId}:${name}` : name;\n}\n\nexport function listOwnerFromConnection(\n conn: ConnectionLike | null | undefined\n): ListOwner | undefined {\n if (!conn || typeof conn !== 'object') return undefined;\n if (conn.mode === 'query') {\n const providerId = String(conn.spec?.providerId || '').trim();\n const entity = String(conn.spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n if (conn.mode === 'item' || conn.mode === 'items') {\n const providerId = String(conn.providerId || '').trim();\n const entity = String(conn.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n return undefined;\n}\n\nexport function listOwnerFromSpec(spec: {\n providerId?: string;\n entity?: string;\n} | null | undefined): ListOwner | undefined {\n const providerId = String(spec?.providerId || '').trim();\n const entity = String(spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n}\n\nfunction isEnvelopeSources(value: unknown): value is EnvelopeSources {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as EnvelopeSources;\n return rec.connections != null || rec.reads != null;\n}\n\nfunction normalizeEnvelopeSources(\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): EnvelopeSources {\n if (!sources) return {};\n if (isEnvelopeSources(sources) && !('mode' in (sources as object))) {\n return sources;\n }\n return { connections: sources as Record<string, ConnectionLike> };\n}\n\nexport function listOwnerForField(\n fieldName: string,\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): ListOwner | undefined {\n const { connections, reads } = normalizeEnvelopeSources(sources);\n const resourceName = reads?.[fieldName]?.resource || fieldName;\n const fromConn = listOwnerFromConnection(connections?.[resourceName]);\n if (fromConn) return fromConn;\n const paging = props?.[`${fieldName}Pagination`];\n if (paging && typeof paging === 'object' && !Array.isArray(paging)) {\n return listOwnerFromSpec((paging as { spec?: { providerId?: string; entity?: string } }).spec);\n }\n return undefined;\n}\n\nfunction joinPath(prefix: string, key: string): string {\n return prefix ? `${prefix}.${key}` : key;\n}\n\nfunction emptyValue(raw: unknown): unknown {\n if (raw === undefined) return null;\n return raw;\n}\n\nfunction rowId(raw: Record<string, unknown>): string {\n const candidates = [raw.id, raw._id, raw.docId, raw.key, raw._key];\n for (const c of candidates) {\n if (typeof c === 'string' && c.trim()) return c;\n }\n return '';\n}\n\ntype EnvelopeScope = {\n ref?: FieldRef;\n readOnly?: boolean;\n owners?: (fieldName: string) => ListOwner | undefined;\n};\n\nfunction withLeaf<T>(\n envelope: Field<T>,\n scope?: EnvelopeScope\n): Field<T> {\n if (isFieldRef(scope?.ref)) envelope.ref = scope.ref;\n else if (scope?.readOnly) envelope.readOnly = true;\n return envelope;\n}\n\n/**\n * Wrap a props bag as envelopes. Already-enveloped bags are returned as-is.\n * Nested plain objects become nested bags; portable images stay a leaf.\n * Object arrays become list rows (`Fields` + plain `id`); `name` is the path\n * within the record when `ref` is set.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = '',\n scope?: EnvelopeScope | FieldRef\n): Fields<T> {\n const ctx: EnvelopeScope = isFieldRef(scope) ? { ref: scope } : scope || {};\n const input =\n source && typeof source === 'object' && !Array.isArray(source) ? source : {};\n if (isBrandedFields(input)) {\n return input as Fields<T>;\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(input)) {\n if (isIdentifierKey(key) && (typeof raw === 'string' || raw == null)) {\n out[key] = raw ?? '';\n continue;\n }\n const path = joinPath(prefix, key);\n if (isPageResourceSentinel(raw)) {\n out[key] = withLeaf({ value: raw, name: path }, ctx);\n continue;\n }\n if (isFieldEnvelope(raw)) {\n const inner = raw.value;\n if (isRecordList(inner)) {\n const owner = ctx.owners?.(key);\n out[key] = {\n value: envelopeListRows(inner, owner),\n name: raw.name || path,\n };\n continue;\n }\n out[key] = withLeaf(\n { value: raw.value ?? null, name: raw.name || path },\n raw.ref ? { ref: raw.ref } : ctx\n );\n continue;\n }\n if (isRecordList(raw)) {\n const owner = ctx.owners?.(key);\n out[key] = { value: envelopeListRows(raw, owner), name: path };\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n out[key] = toFieldEnvelopes(raw as Record<string, unknown>, path, ctx);\n continue;\n }\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\n }\n return brandFields(out as T);\n}\n\nexport function envelopeListRows<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n items: unknown[],\n owner?: ListOwner | null\n): Array<ListRow<T>> {\n return items.map((item) => envelopeListRow<T>(item, owner));\n}\n\nexport function envelopeListRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(item: unknown, owner?: ListOwner | null): ListRow<T> {\n if (isBrandedFields(item) && typeof (item as { id?: unknown }).id === 'string') {\n return item as ListRow<T>;\n }\n const raw =\n item && typeof item === 'object' && !Array.isArray(item)\n ? (item as Record<string, unknown>)\n : {};\n const id = rowId(raw);\n const ref: FieldRef | undefined =\n isListOwner(owner) && id\n ? { providerId: owner.providerId, entity: owner.entity, id }\n : undefined;\n const fields = toFieldEnvelopes(raw, '', {\n ref,\n readOnly: !ref,\n });\n const row = fields as unknown as ListRow<T>;\n if (typeof row.id !== 'string') {\n row.id = id;\n }\n return row;\n}\n\n/** Attach branded `fields` once. Keeps sibling keys (e.g. zoneId). */\nexport function attachFieldEnvelopes(\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): Record<string, unknown> {\n const raw = props && typeof props === 'object' ? { ...props } : {};\n if (isBrandedFields(raw.fields)) return raw;\n const { fields: existing, ...content } = raw;\n const source =\n existing && typeof existing === 'object' && !isFieldEnvelope(existing)\n ? (existing as Record<string, unknown>)\n : content;\n return {\n ...raw,\n fields: toFieldEnvelopes(source, '', {\n owners: (fieldName) => listOwnerForField(fieldName, source, sources),\n }),\n };\n}\n\nfunction walkLayoutNodes(nodes: unknown[] | undefined): void {\n if (!Array.isArray(nodes)) return;\n for (const node of nodes) {\n if (!node || typeof node !== 'object') continue;\n const rec = node as {\n props?: Record<string, unknown>;\n resources?: Record<string, ConnectionLike>;\n reads?: Record<string, { resource: string }>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props, {\n connections: rec.resources,\n reads: rec.reads,\n });\n for (const slot of rec.slots || []) {\n walkLayoutNodes(slot.children);\n }\n }\n}\n\n/** Brand `fields` on an orchestrator page tree (preview). Idempotent. */\nexport function envelopePageConfig<T extends { layoutTree?: unknown }>(\n page: T | null | undefined\n): T | null {\n if (!page || typeof page !== 'object') return page ?? null;\n const tree = page.layoutTree;\n if (Array.isArray(tree)) walkLayoutNodes(tree);\n return page;\n}\n\nexport type FieldPatch = {\n name: string;\n value: unknown;\n ref?: FieldRef;\n};\n\n/**\n * Flatten a props or fields bag into Composer patches.\n * Page fields key on `name` (page path). Row fields include `ref`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): FieldPatch[] {\n const out: FieldPatch[] = [];\n\n const walkRows = (items: unknown[]) => {\n for (const item of items) {\n if (\n isBrandedFields(item) ||\n (item && typeof item === 'object' && !Array.isArray(item) && !isFieldEnvelope(item))\n ) {\n walk(item as Record<string, unknown>, '');\n }\n }\n };\n\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (isIdentifierKey(key)) continue;\n if (\n key === 'fields' &&\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isFieldEnvelope(raw)\n ) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n if (isRecordList(raw.value)) {\n walkRows(raw.value);\n continue;\n }\n const patch: FieldPatch = {\n name: raw.name || path,\n value: raw.value,\n };\n if (raw.ref) patch.ref = raw.ref;\n out.push(patch);\n continue;\n }\n if (isRecordList(raw)) {\n walkRows(raw);\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n walk(raw as Record<string, unknown>, path);\n continue;\n }\n out.push({ name: path, value: emptyValue(raw) });\n }\n };\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n walk(props, '');\n }\n return out;\n}\n\nexport function envelopeValue(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\nexport function envelopeName(field: unknown): string {\n if (isFieldEnvelope(field)) return field.name;\n return '';\n}\n\nexport function envelopeRef(field: unknown): FieldRef | undefined {\n if (isFieldEnvelope(field) && field.ref) return field.ref;\n return undefined;\n}\n\n/** Resolve Field/Image/RichText binding. Computed `value` requires `name`. */\nexport function resolveEditableBinding(\n field: Field<unknown> | undefined,\n value: unknown,\n name: string | undefined\n): {\n name: string;\n value: unknown;\n ref?: FieldRef;\n requiresName: boolean;\n} {\n if (isFieldEnvelope(field)) {\n return {\n name: field.name,\n value: field.value,\n ref: field.ref,\n requiresName: false,\n };\n }\n return {\n name: name || '',\n value,\n requiresName: value !== undefined && !name,\n };\n}\n","/**\n * Runtime page-data context: validate SDK-supplied entity fields against\n * the published pageData contract and attach to events.\n */\n\nimport { brandFields, isBrandedFields } from './field-envelope';\n\nexport type PageDataFieldDef = {\n key: string;\n dataType: 'string' | 'number' | 'date' | 'boolean';\n multiValue: boolean;\n label?: string;\n passThrough?: boolean;\n};\n\nexport type PageDataSnapshot = {\n resources: Array<{\n name: string;\n type: string;\n urlParamMapping?: { param: string; field: string };\n fields: PageDataFieldDef[];\n }>;\n pageFields: Array<\n PageDataFieldDef &\n Partial<\n | { source: 'static'; value: unknown }\n | { source: 'mapped'; resource: string; field: string }\n >\n >;\n};\n\nexport function extractRouteParams(\n pattern: string,\n url: string\n): Record<string, string> {\n const patternParts = String(pattern || '')\n .split('/')\n .filter(Boolean);\n const urlParts = String(url || '')\n .split('?')[0]\n .split('#')[0]\n .split('/')\n .filter(Boolean);\n if (patternParts.length !== urlParts.length) return {};\n const params: Record<string, string> = {};\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i]!;\n if (part.startsWith(':')) {\n params[part.slice(1)] = urlParts[i]!;\n }\n }\n return params;\n}\n\nexport type AmplifyPageContextInput = {\n resourceType: string;\n key: string;\n fields?: Record<string, unknown>;\n};\n\nexport type AttachedResourceContext = {\n type: string;\n key: string;\n params: Record<string, string>;\n fields: Record<string, unknown>;\n};\n\nexport type AttachedPageEventContext = {\n resource?: AttachedResourceContext;\n page: { fields: Record<string, unknown> };\n pageRoute: string;\n};\n\nexport type PageContextLogger = {\n warn: (...args: unknown[]) => void;\n};\n\nconst defaultLog: PageContextLogger = {\n warn: (...args: unknown[]) => {\n if (typeof console !== 'undefined') console.warn(...args);\n },\n};\n\nfunction coerceField(\n def: PageDataFieldDef,\n raw: unknown,\n log: PageContextLogger\n): unknown {\n if (raw == null) return undefined;\n if (def.multiValue) {\n const list = Array.isArray(raw) ? raw : [raw];\n const out: unknown[] = [];\n for (const item of list) {\n const coerced = coerceScalar(def, item, log);\n if (coerced !== undefined) out.push(coerced);\n }\n return out;\n }\n return coerceScalar(def, raw, log);\n}\n\nfunction coerceScalar(\n def: PageDataFieldDef,\n raw: unknown,\n log: PageContextLogger\n): unknown {\n switch (def.dataType) {\n case 'string':\n if (typeof raw === 'string') return raw;\n if (typeof raw === 'number' || typeof raw === 'boolean') return String(raw);\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected string)`);\n return undefined;\n case 'number': {\n if (typeof raw === 'number' && Number.isFinite(raw)) return raw;\n if (typeof raw === 'string' && raw.trim() !== '' && Number.isFinite(Number(raw))) {\n return Number(raw);\n }\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected number)`);\n return undefined;\n }\n case 'boolean': {\n if (typeof raw === 'boolean') return raw;\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected boolean)`);\n return undefined;\n }\n case 'date': {\n if (typeof raw === 'string' && !Number.isNaN(Date.parse(raw))) return raw;\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected date)`);\n return undefined;\n }\n default:\n return undefined;\n }\n}\n\nexport function applyPageContext(\n input: AmplifyPageContextInput,\n opts: {\n pageData?: PageDataSnapshot | null;\n routeParams?: Record<string, string>;\n pageRoute?: string;\n log?: PageContextLogger;\n }\n): AttachedPageEventContext | null {\n const log = opts.log || defaultLog;\n const key = String(input.key || '').trim();\n if (!key || !input.resourceType) {\n log.warn('AmplifyUp: pageContext needs resourceType and key');\n return null;\n }\n\n const resource = opts.pageData?.resources?.[0];\n if (resource && resource.type && resource.type !== input.resourceType) {\n log.warn(\n `AmplifyUp: pageContext resourceType \"${input.resourceType}\" does not match page resource \"${resource.type}\"`\n );\n return null;\n }\n\n const fieldDefs = resource?.fields || [];\n const defByKey = new Map(fieldDefs.map((f) => [f.key, f]));\n const rawFields = input.fields && typeof input.fields === 'object' ? input.fields : {};\n const fields: Record<string, unknown> = {};\n\n if (fieldDefs.length === 0) {\n Object.assign(fields, rawFields);\n } else {\n for (const [k, v] of Object.entries(rawFields)) {\n const def = defByKey.get(k);\n if (!def) {\n log.warn(`AmplifyUp: unknown resource field \"${k}\" dropped`);\n continue;\n }\n if (def.passThrough) {\n if (v != null) fields[k] = v;\n continue;\n }\n const coerced = coerceField(def, v, log);\n if (coerced !== undefined) fields[k] = coerced;\n }\n }\n\n const params = { ...(opts.routeParams || {}) };\n const mapping = resource?.urlParamMapping;\n let resourceKey = key;\n if (mapping) {\n const fromUrl = params[mapping.param];\n const fromField = fields[mapping.field];\n if (fromUrl) resourceKey = String(fromUrl);\n if (\n fromUrl &&\n fromField != null &&\n String(fromField) !== String(fromUrl)\n ) {\n log.warn(\n `AmplifyUp: resource key mismatch — URL :${mapping.param} is \"${fromUrl}\" but ${mapping.field} is \"${String(fromField)}\". Using the URL param.`\n );\n }\n }\n\n const pageFields: Record<string, unknown> = {};\n for (const pf of opts.pageData?.pageFields || []) {\n if (pf.source === 'static') {\n if (pf.value !== undefined) pageFields[pf.key] = pf.value;\n continue;\n }\n if (pf.source === 'mapped' && pf.resource && pf.field) {\n pageFields[pf.key] = fields[pf.field];\n }\n }\n\n return {\n resource: {\n type: input.resourceType,\n key: resourceKey,\n params,\n fields,\n },\n page: { fields: pageFields },\n pageRoute: opts.pageRoute || '',\n };\n}\n\nexport function staticPageFieldsFromSnapshot(\n pageData: PageDataSnapshot | null | undefined\n): Record<string, unknown> {\n const pageFields: Record<string, unknown> = {};\n for (const pf of pageData?.pageFields || []) {\n if (pf.source === 'static' && pf.value !== undefined) {\n pageFields[pf.key] = pf.value;\n }\n }\n return pageFields;\n}\n\nexport function attachStaticPageContext(\n pageData: PageDataSnapshot | null | undefined,\n pageRoute?: string\n): AttachedPageEventContext | null {\n if (!pageData) return null;\n const fields = staticPageFieldsFromSnapshot(pageData);\n const hasStatic = Object.keys(fields).length > 0;\n const hasRoute = !!pageRoute;\n if (!hasStatic && !hasRoute) return null;\n return {\n page: { fields },\n pageRoute: pageRoute || '',\n };\n}\n\nexport function mergeEventContext(\n properties: Record<string, unknown>,\n attached: AttachedPageEventContext | null\n): Record<string, unknown> {\n if (!attached) return properties;\n return {\n ...properties,\n ...(attached.resource ? { resource: attached.resource } : {}),\n page: attached.page,\n ...(attached.pageRoute ? { pageRoute: attached.pageRoute } : {}),\n };\n}\n\n/** Stamped onto Edge-resolved props so the SDK can fill From-page fields. */\nexport const PAGE_RESOURCE_MARKER = '__amplifyupPageResource';\n\nexport type PageResourceSentinel = {\n [PAGE_RESOURCE_MARKER]: string;\n path?: string;\n};\n\nexport function isPageResourceSentinel(\n value: unknown\n): value is PageResourceSentinel {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as Record<string, unknown>)[PAGE_RESOURCE_MARKER] === 'string'\n );\n}\n\nfunction getByDotPath(\n source: Record<string, unknown>,\n path: string\n): unknown {\n if (!path) return source;\n const parts = path.split('.').filter(Boolean);\n let cur: unknown = source;\n for (const part of parts) {\n if (cur == null || typeof cur !== 'object' || Array.isArray(cur)) {\n return undefined;\n }\n cur = (cur as Record<string, unknown>)[part];\n }\n return cur;\n}\n\nexport function hydratePageResourceValue(\n value: unknown,\n fields: Record<string, unknown> | null | undefined\n): unknown {\n if (!isPageResourceSentinel(value)) return value;\n if (!fields) return null;\n if (value.path) return getByDotPath(fields, value.path) ?? null;\n return fields;\n}\n\nfunction hydrateFieldsBag(\n bag: Record<string, unknown>,\n fields: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(bag)) {\n if (\n val &&\n typeof val === 'object' &&\n !Array.isArray(val) &&\n typeof (val as { name?: unknown }).name === 'string' &&\n 'value' in val &&\n !('url' in val)\n ) {\n const env = val as { name: string; value: unknown };\n out[key] = {\n name: env.name,\n value: isPageResourceSentinel(env.value)\n ? hydratePageResourceValue(env.value, fields)\n : env.value,\n };\n continue;\n }\n if (val && typeof val === 'object' && !Array.isArray(val) && !('url' in val)) {\n out[key] = hydrateFieldsBag(val as Record<string, unknown>, fields);\n continue;\n }\n out[key] = isPageResourceSentinel(val)\n ? hydratePageResourceValue(val, fields)\n : val;\n }\n return out;\n}\n\nexport function hydratePageResourceProps(\n props: Record<string, unknown> | null | undefined,\n fields: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const source = props && typeof props === 'object' ? props : {};\n const out: Record<string, unknown> = { ...source };\n if (out.fields && typeof out.fields === 'object' && !Array.isArray(out.fields)) {\n const next = hydrateFieldsBag(out.fields as Record<string, unknown>, fields);\n out.fields = isBrandedFields(out.fields)\n ? brandFields(next)\n : next;\n }\n for (const [key, val] of Object.entries(out)) {\n if (key === 'fields') continue;\n if (isPageResourceSentinel(val)) {\n out[key] = hydratePageResourceValue(val, fields);\n }\n }\n return out;\n}\n","/**\n * Tiny runtime store so Field/ComponentContext can hydrate From-page\n * sentinels without importing the SDK singleton (circular).\n */\n\nlet pageResourceFields: Record<string, unknown> | null = null;\n\nexport function setPageResourceFields(\n fields: Record<string, unknown> | null | undefined\n): void {\n pageResourceFields = fields && typeof fields === 'object' ? fields : null;\n}\n\nexport function getPageResourceFields(): Record<string, unknown> | null {\n return pageResourceFields;\n}\n","/**\n * SDK console logging. Off unless the site opts in.\n *\n * Enable with `NEXT_PUBLIC_AMPLIFYUP_DEBUG=true` (Next.js client bundle)\n * or `AMPLIFYUP_DEBUG=true`, or `debug: true` on `init` / `AmplifyUpProvider`.\n */\n\nfunction envFlag(value: string | undefined): boolean {\n if (!value) return false;\n const v = value.trim().toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\nexport function readAmplifyUpDebugEnv(): boolean {\n try {\n if (typeof process === 'undefined') return false;\n return (\n envFlag(process.env.NEXT_PUBLIC_AMPLIFYUP_DEBUG) ||\n envFlag(process.env.AMPLIFYUP_DEBUG)\n );\n } catch {\n return false;\n }\n}\n\nlet configDebug: boolean | undefined;\n\n/** Called from `init` after resolving `config.debug` vs the env flag. */\nexport function setAmplifyUpDebug(enabled: boolean): void {\n configDebug = enabled;\n}\n\nexport function isAmplifyUpDebug(): boolean {\n if (configDebug === true) return true;\n if (configDebug === false) return false;\n return readAmplifyUpDebugEnv();\n}\n\nconst onceKeys = new Set<string>();\nlet onceRoute = '';\n\nfunction resetOnceIfRouteChanged(): void {\n const route =\n typeof window !== 'undefined' ? window.location.pathname : '';\n if (route === onceRoute) return;\n onceKeys.clear();\n onceRoute = route;\n}\n\nexport function sdkDebug(...args: unknown[]): void {\n if (!isAmplifyUpDebug()) return;\n console.log(...args);\n}\n\n/** Same as `sdkDebug`, but one line per key per route (React remounts included). */\nexport function sdkDebugOnce(key: string, ...args: unknown[]): void {\n if (!isAmplifyUpDebug()) return;\n resetOnceIfRouteChanged();\n if (onceKeys.has(key)) return;\n onceKeys.add(key);\n console.log(...args);\n}\n","/**\n * Normalize a route path for Edge resolve requests.\n * Leading slash, no trailing slash (except root), query/hash stripped.\n */\nexport function normalizeRoute(route: string): string {\n let path = String(route || '').trim();\n if (!path) return '/';\n\n try {\n if (/^https?:\\/\\//i.test(path)) {\n path = new URL(path).pathname;\n }\n } catch {\n /* keep path */\n }\n\n const q = path.indexOf('?');\n if (q >= 0) path = path.slice(0, q);\n const h = path.indexOf('#');\n if (h >= 0) path = path.slice(0, h);\n\n if (!path.startsWith('/')) path = `/${path}`;\n if (path.length > 1 && path.endsWith('/')) {\n path = path.replace(/\\/+$/, '');\n }\n return path || '/';\n}\n","/**\n * Compact variant-key codec for URLs and Edge `variants` query params.\n * Default variants are omitted so equivalent assignments share one cache entry.\n */\n\nexport function serializeVariantKeys(\n keys: Record<string, string> | null | undefined\n): string {\n if (!keys) return '';\n const parts: string[] = [];\n const zoneIds = Object.keys(keys).sort();\n for (const zoneId of zoneIds) {\n const variant = keys[zoneId];\n if (!variant || variant === 'default') continue;\n parts.push(`${zoneId}:${variant}`);\n }\n return parts.join(',');\n}\n\nexport function parseVariantKeys(\n raw: string | null | undefined\n): Record<string, string> {\n const out: Record<string, string> = {};\n const text = (raw || '').trim();\n if (!text) return out;\n const decoded = safeDecode(text);\n for (const part of decoded.split(',')) {\n const i = part.indexOf(':');\n if (i <= 0) continue;\n const zoneId = part.slice(0, i).trim();\n const variant = part.slice(i + 1).trim();\n if (zoneId && variant) out[zoneId] = variant;\n }\n return out;\n}\n\nexport function isDefaultVariantKeys(\n keys: Record<string, string> | null | undefined\n): boolean {\n return serializeVariantKeys(keys) === '';\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n","import type { EventTrackingConfig } from '../types';\nimport { attachFieldEnvelopes } from '../field-envelope';\nimport { normalizeRoute } from './normalizeRoute';\nimport { serializeVariantKeys } from './variantKeys';\n\n/** Mirrors Edge ResolvedComponent — SDK maps this into layoutTree nodes. */\nexport interface EdgeResolvedComponent {\n instanceId: string;\n componentId: string;\n props: Record<string, unknown>;\n /** Connection map from the snapshot — used to stamp list-row `ref`. */\n resources?: Record<string, unknown>;\n reads?: Record<string, { resource: string }>;\n children?: Record<string, EdgeResolvedComponent[]>;\n appliedRules?: string[];\n degraded?: boolean;\n}\n\nexport interface EdgeResolvedPayload {\n siteId: string;\n route: string;\n version: number;\n zones: Record<string, EdgeResolvedComponent[]>;\n tree?: EdgeResolvedComponent[];\n /** Composer event bindings baked into the published snapshot. */\n eventTracking?: EventTrackingConfig[];\n pageData?: import('../page-context').PageDataSnapshot;\n meta: {\n variantKeys: Record<string, string>;\n audienceLookup?: { status: string; durationMs: number };\n decideLookup?: { status: string; durationMs: number; checks: number };\n experiments?: Array<{ key: string; variantKey: string; bucket: number }>;\n bot?: unknown;\n resolvedAt: string;\n degraded?: boolean;\n };\n}\n\nexport class EdgeResolveError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'EdgeResolveError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport async function fetchEdgeResolve(options: {\n edgeUrl: string;\n trackingId: string;\n route: string;\n anonId?: string | null;\n sessionId?: string | null;\n siteId?: string | null;\n /** Deterministic variant combo — cacheable; do not send with anonId. */\n variantKeys?: Record<string, string> | null;\n fetch?: typeof fetch;\n /**\n * Next.js Data Cache / ISR. When set, the server fetch can be baked into\n * SSG. Omit on the client so visitor-specific resolve stays fresh.\n */\n revalidate?: number | false;\n}): Promise<EdgeResolvedPayload> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const route = normalizeRoute(options.route);\n const params = new URLSearchParams({\n route,\n trackingId: options.trackingId,\n });\n if (options.siteId) params.set('site', options.siteId);\n const variantParam = serializeVariantKeys(options.variantKeys);\n if (variantParam) {\n params.set('variants', variantParam);\n } else if (options.anonId) {\n params.set('anonId', options.anonId);\n if (options.sessionId) params.set('sessionId', options.sessionId);\n }\n\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const init: RequestInit & { next?: { revalidate?: number | false } } = {\n method: 'GET',\n headers: { Accept: 'application/json' },\n };\n if (options.revalidate !== undefined) {\n init.next = { revalidate: options.revalidate };\n } else {\n init.cache = 'no-store';\n }\n const res = await fetchFn(`${base}/v1/resolve?${params.toString()}`, init);\n\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new EdgeResolveError(\n (body && typeof body === 'object' && 'error' in body\n ? String((body as { error: unknown }).error)\n : `Edge resolve failed (${res.status})`) ||\n `Edge resolve failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return envelopeResolvedPayload(body as EdgeResolvedPayload);\n}\n\nfunction envelopeResolvedComponent(node: EdgeResolvedComponent): void {\n node.props = attachFieldEnvelopes(node.props, {\n connections: node.resources as\n | Record<string, import('../field-envelope').ConnectionLike>\n | undefined,\n reads: node.reads,\n });\n if (!node.children) return;\n for (const kids of Object.values(node.children)) {\n for (const child of kids || []) envelopeResolvedComponent(child);\n }\n}\n\n/** Stamp branded Field envelopes onto each node's props. Edge JSON stays raw. */\nfunction envelopeResolvedPayload(\n payload: EdgeResolvedPayload\n): EdgeResolvedPayload {\n if (payload.tree) {\n for (const node of payload.tree) envelopeResolvedComponent(node);\n }\n if (payload.zones) {\n for (const roots of Object.values(payload.zones)) {\n for (const node of roots || []) envelopeResolvedComponent(node);\n }\n }\n return payload;\n}\n","import type { PageConfig } from '../types';\nimport type { EdgeResolvedComponent, EdgeResolvedPayload } from './resolve';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, unknown>;\n slots?: Array<{\n slotId: string;\n children: LayoutNode[];\n }>;\n /** Marker so AmplifyRenderer skips client Decision API fetches. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction mapResolvedComponent(node: EdgeResolvedComponent): LayoutNode {\n const slots: LayoutNode['slots'] = [];\n if (node.children) {\n for (const [slotId, kids] of Object.entries(node.children)) {\n slots.push({\n slotId,\n children: (kids || []).map(mapResolvedComponent),\n });\n }\n }\n\n return {\n id: node.instanceId,\n componentId: node.componentId,\n props: { ...(node.props || {}) },\n ...(slots.length > 0 ? { slots } : {}),\n _contentSource: 'edge',\n };\n}\n\n/**\n * Map Edge /v1/resolve payload → PageConfig for AmplifyRenderer.\n * Prefers `tree` (full page skeleton with zones spliced in); falls back to\n * flattening zone roots when older snapshots lack structure.\n */\nexport function mapResolvedToPageConfig(\n payload: EdgeResolvedPayload\n): PageConfig {\n let layoutTree: LayoutNode[] = [];\n\n if (payload.tree && payload.tree.length > 0) {\n layoutTree = payload.tree.map(mapResolvedComponent);\n } else {\n // Legacy: zones only — render each zone's roots in stable zoneId order\n const zoneIds = Object.keys(payload.zones || {}).sort();\n for (const zoneId of zoneIds) {\n const roots = payload.zones[zoneId] || [];\n layoutTree.push(...roots.map(mapResolvedComponent));\n }\n }\n\n return {\n id: `edge:${payload.siteId}:${payload.route}:v${payload.version}`,\n route: payload.route,\n title: '',\n layoutTree,\n meta: {\n // Stash edge meta for diagnostics (not visitor-facing)\n description: payload.meta?.degraded ? 'degraded' : undefined,\n },\n ...(payload.eventTracking && payload.eventTracking.length > 0\n ? { eventTracking: payload.eventTracking }\n : {}),\n ...(payload.pageData ? { pageData: payload.pageData } : {}),\n };\n}\n\nexport function collectDegraded(payload: EdgeResolvedPayload): boolean {\n if (payload.meta?.degraded) return true;\n const walk = (nodes: EdgeResolvedComponent[]): boolean =>\n nodes.some(\n (n) =>\n !!n.degraded ||\n (n.children\n ? Object.values(n.children).some((kids) => walk(kids || []))\n : false)\n );\n if (payload.tree && walk(payload.tree)) return true;\n return Object.values(payload.zones || {}).some((roots) => walk(roots || []));\n}\n","import type { AmplifyContentMeta, ContentSource, PageConfig } from '../types';\nimport { isComposerPreview } from '../preview';\nimport {\n EdgeResolveError,\n fetchEdgeResolve,\n type EdgeResolvedPayload,\n} from '../edge/resolve';\nimport {\n collectDegraded,\n mapResolvedToPageConfig,\n} from '../edge/mapResolvedToPageConfig';\nimport { envelopePageConfig } from '../field-envelope';\n\nexport type { AmplifyContentMeta, ContentSource };\n\nexport interface FetchContentResult {\n pageConfig: PageConfig | null;\n source: ContentSource;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}\n\nexport interface FetchContentOptions {\n route: string;\n trackingId: string;\n anonId?: string | null;\n sessionId?: string | null;\n siteId?: string | null;\n /** Force preview (Composer); otherwise uses isComposerPreview() in browser. */\n preview?: boolean;\n orchestratorUrl: string;\n edgeUrl: string;\n /** Orchestrator layout fetch (SDK instance method or server helper). */\n fetchOrchestratorPage: (\n route: string,\n preview: boolean\n ) => Promise<PageConfig | null>;\n fetchFn?: typeof fetch;\n /** Next.js ISR for Edge resolve (server/SSG only). */\n revalidate?: number | false;\n /** Deterministic variants for ISR (no visitor id in the cache key). */\n variantKeys?: Record<string, string> | null;\n}\n\n/**\n * Single content entry point:\n * - Composer / preview → orchestrator layout provider (drafts + live edits)\n * - Production visitors → Edge /v1/resolve (personalized + CMS-populated)\n *\n * Production never falls back to the orchestrator on Edge failure —\n * callers should render site fallback instead.\n */\nexport async function fetchContent(\n options: FetchContentOptions\n): Promise<FetchContentResult> {\n const preview =\n options.preview ??\n (typeof window !== 'undefined' ? isComposerPreview() : false);\n\n if (preview) {\n try {\n const page = envelopePageConfig(\n await options.fetchOrchestratorPage(options.route, true)\n );\n return {\n pageConfig: page,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: null,\n };\n } catch (err) {\n return {\n pageConfig: null,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: err instanceof Error ? err.message : 'Failed to load preview',\n };\n }\n }\n\n try {\n const payload: EdgeResolvedPayload = await fetchEdgeResolve({\n edgeUrl: options.edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n anonId: options.variantKeys ? undefined : options.anonId,\n sessionId: options.variantKeys ? undefined : options.sessionId,\n siteId: options.siteId,\n fetch: options.fetchFn,\n revalidate: options.revalidate,\n variantKeys: options.variantKeys,\n });\n\n const pageConfig = mapResolvedToPageConfig(payload);\n const degraded = collectDegraded(payload);\n\n return {\n pageConfig,\n source: 'edge',\n meta: {\n source: 'edge',\n version: payload.version,\n siteId: payload.siteId,\n variantKeys: payload.meta?.variantKeys,\n degraded,\n audienceLookup: payload.meta?.audienceLookup,\n decideLookup: payload.meta?.decideLookup,\n resolvedAt: payload.meta?.resolvedAt,\n },\n error: null,\n };\n } catch (err) {\n if (err instanceof EdgeResolveError && err.status === 404) {\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error: null, // unpublished → site fallback, not an error banner\n };\n }\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error:\n err instanceof Error ? err.message : \"Couldn't load page content.\",\n };\n }\n}\n","/**\n * On-request variant selection (tier 3).\n *\n * Decisions happen on AmplifyUp Edge. The client asks after the view has\n * rendered; the Worker returns variant keys only. Profile data never leaves\n * the edge. This helper is the JS wrapper around POST /v1/select — the same\n * wire format is the contract for Flutter / native / .NET clients. No DOM\n * or Next.js assumptions.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport interface SelectVariantsResult {\n siteId: string;\n view: string;\n variantKeys: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport class SelectVariantsError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'SelectVariantsError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeSelectOptions {\n edgeUrl: string;\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n /** Request-local facts the edge cannot observe (app version, screen class). */\n context?: Record<string, unknown>;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function fetchEdgeSelect(\n options: FetchEdgeSelectOptions\n): Promise<SelectVariantsResult> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n\n if (!options.trackingId && !options.site) {\n throw new SelectVariantsError('trackingId or site is required', 400);\n }\n\n const res = await fetchFn(`${base}/v1/select`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n view: normalizeRoute(options.view),\n ...(options.trackingId ? { trackingId: options.trackingId } : {}),\n ...(options.site ? { site: options.site } : {}),\n anonId: options.anonId,\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.zones?.length ? { zones: options.zones } : {}),\n ...(options.context ? { context: options.context } : {}),\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<SelectVariantsResult> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new SelectVariantsError(\n body.error || `Select failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return {\n siteId: String(body.siteId || ''),\n view: String(body.view || normalizeRoute(options.view)),\n variantKeys:\n body.variantKeys && typeof body.variantKeys === 'object'\n ? body.variantKeys\n : {},\n meta: body.meta,\n };\n}\n\nexport interface SelectVariantsOptions {\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n context?: Record<string, unknown>;\n target?: AmplifyUpTarget;\n edgeUrl?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Ask Edge to decide deferred rules for a view. Returns variant keys to pass\n * to `/v1/resolve?variants=`.\n */\nexport async function selectVariants(\n options: SelectVariantsOptions\n): Promise<SelectVariantsResult> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n return fetchEdgeSelect({\n edgeUrl: options.edgeUrl || edgeUrl,\n trackingId: options.trackingId,\n site: options.site,\n view: options.view,\n anonId: options.anonId,\n sessionId: options.sessionId,\n zones: options.zones,\n context: options.context,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n","/**\n * Runtime content queries.\n *\n * Page resolve covers data known at Deploy. Visitor-triggered data — search,\n * load more, pickers — runs here: the browser asks AmplifyUp, AmplifyUp asks\n * the CMS. Only entities published with the page can be queried.\n * Edge JSON stays raw. `queryContent` envelopes rows on the SDK so they\n * edit in Composer the same way as list-field rows.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n envelopeListRows,\n listOwnerFromSpec,\n type ListRow,\n} from '../field-envelope';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport type QueryFilterOp =\n | 'eq'\n | 'neq'\n | 'in'\n | 'nin'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'contains'\n | 'exists';\n\nexport interface QueryFilter {\n field: string;\n op: QueryFilterOp;\n value?: unknown;\n}\n\nexport interface QuerySort {\n field: string;\n dir: 'asc' | 'desc';\n}\n\n/**\n * Provider-neutral query. AmplifyUp compiles this for the connected CMS —\n * it never contains CMS query syntax. Same shape Composer saves on a\n * query connection, and the shape returned in `{field}Pagination.spec`.\n */\nexport interface QuerySpec {\n providerId: string;\n entity: string;\n filter: QueryFilter[];\n sort: QuerySort[];\n limit: number;\n offset: number;\n}\n\n/** Pagination meta added to list props when a query connection is paginated. */\nexport interface QueryPagination {\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n spec: QuerySpec;\n}\n\nexport interface QueryResult<T = Record<string, unknown>> {\n results: T[];\n count: number;\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n /** True when a content source failed and results may be incomplete. */\n degraded?: boolean;\n}\n\nexport class QueryContentError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'QueryContentError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeQueryOptions {\n edgeUrl: string;\n trackingId: string;\n /** Published route the query belongs to (provides sources + entity mapping). */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Low-level runtime query against a known Edge URL.\n * Most callers should use `queryContent`, which resolves the URL for them.\n */\nexport async function fetchEdgeQuery<T = Record<string, unknown>>(\n options: FetchEdgeQueryOptions\n): Promise<QueryResult<T>> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const limit = Math.max(1, Number(options.spec.limit) || 10);\n const offset = Math.max(0, Number(options.spec.offset) || 0);\n\n const res = await fetchFn(`${base}/v1/query`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n route: normalizeRoute(options.route),\n trackingId: options.trackingId,\n ...(options.siteId ? { site: options.siteId } : {}),\n spec: { ...options.spec, limit, offset },\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<QueryResult<T>> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new QueryContentError(\n body.error || `Content query failed (${res.status})`,\n res.status,\n body\n );\n }\n\n const results = Array.isArray(body.results) ? body.results : [];\n const resolvedLimit = Number(body.limit) || limit;\n const resolvedOffset = Number.isFinite(Number(body.offset))\n ? Number(body.offset)\n : offset;\n\n return {\n results,\n count: Number(body.count) || results.length,\n hasMore: !!body.hasMore,\n limit: resolvedLimit,\n offset: resolvedOffset,\n nextOffset: Number(body.nextOffset) || resolvedOffset + resolvedLimit,\n degraded: body.degraded,\n };\n}\n\nexport interface QueryContentOptions {\n trackingId: string;\n /** Published route the query belongs to, e.g. '/insights'. */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n target?: AmplifyUpTarget;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Run a content query at request time (search, load more, pickers).\n *\n * Start from the published spec on a paginated list prop so filters and sort\n * stay owned by Composer:\n *\n * ```ts\n * const next = await queryContent({\n * trackingId,\n * route: '/insights',\n * spec: { ...postsPagination.spec, offset: postsPagination.nextOffset },\n * });\n * ```\n */\nexport async function queryContent<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n options: QueryContentOptions\n): Promise<QueryResult<ListRow<T>>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n const raw = await fetchEdgeQuery<T>({\n edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n spec: options.spec,\n siteId: options.siteId,\n fetch: options.fetch,\n signal: options.signal,\n });\n\n return {\n ...raw,\n results: envelopeListRows<T>(\n raw.results,\n listOwnerFromSpec(options.spec)\n ),\n };\n}\n\n/** Convenience: next page from pagination meta on a list prop. */\nexport function nextPageSpec(pagination: QueryPagination): QuerySpec {\n return { ...pagination.spec, offset: pagination.nextOffset };\n}\n\n/**\n * Convenience: same published query, filtered by a visitor's search term.\n * Resets to the first page. Empty terms return the unfiltered spec.\n */\nexport function searchSpec(\n pagination: QueryPagination,\n field: string,\n term: string\n): QuerySpec {\n const value = String(term || '').trim();\n const base = { ...pagination.spec, offset: 0 };\n if (!value) return base;\n return {\n ...base,\n filter: [...(base.filter || []), { field, op: 'contains', value }],\n };\n}\n","/**\n * AmplifyUp Tracking SDK\n * \n * Event tracking and personalization SDK for Pure AWS architecture.\n * \n * Uses AWS API Gateway for event ingestion and AWS Decision API for personalization.\n * All runtime data (events, profiles, decisions) lives in AWS.\n */\n\nimport { AmplifyUpConfig, EventProperties, PageProperties, TrackProperties, IdentifyTraits, IdentifyInput, ProfileFieldsInput, CDPAdapter, PageConfig, ZoneConfig, EventTrackingConfig as EventTrackingConfigType, AmplifyUpTarget, ContentSource, AmplifyContentMeta } from './types';\nimport { AWSAdapter } from './adapters/aws';\nimport { getInstanceId as getStoredInstanceId, getUserId as getStoredUserId, getSessionId as getStoredSessionId, setUserId, clearIds, SESSION_IDLE_GAP_MS } from './storage';\nexport { SESSION_IDLE_GAP_MS, SESSION_COOKIE_NAME, ANON_COOKIE_NAME } from './storage';\nimport {\n isRemoteOrchestratorUrl,\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n} from './targets';\nimport { isWorkingContentRequest } from './preview';\nimport {\n applyPageContext,\n attachStaticPageContext,\n mergeEventContext,\n type AmplifyPageContextInput,\n type AttachedPageEventContext,\n type PageDataSnapshot,\n} from './page-context';\nexport type { AmplifyPageContextInput, PageDataSnapshot } from './page-context';\nimport { setPageResourceFields } from './page-resource-runtime';\nimport { envelopePageConfig } from './field-envelope';\nimport { readAmplifyUpDebugEnv, setAmplifyUpDebug } from './debug';\n\ninterface PreviewQueryOverrides {\n orchestratorUrl?: string;\n trackingId?: string;\n}\n\n/**\n * Time on Page: one event per page visit, sent when the visit ends\n * (SPA navigation, tab close, or 30-minute idle resume). Switching tabs\n * pauses the clock; abandoned-but-visible tabs freeze after this idle gap.\n */\nexport const DWELL_ACTIVITY_IDLE_MS = 2 * 60 * 1000;\n/** Local poll to freeze the clock on idle — never emits by itself. */\nconst DWELL_POLL_MS = 5_000;\n\ntype DwellEmitReason = 'unload' | 'route' | 'idle-resume';\n\n/** Composer passes orchestratorUrl + trackingId when loading a local site in preview. */\nfunction readPreviewQueryOverrides(): PreviewQueryOverrides {\n if (typeof window === 'undefined') return {};\n\n const params = new URLSearchParams(window.location.search);\n if (params.get('preview') !== 'true' && params.get('visualEditor') !== 'true') {\n return {};\n }\n\n const overrides: PreviewQueryOverrides = {};\n\n const orchestratorFromQuery = params.get('orchestratorUrl');\n if (orchestratorFromQuery) {\n try {\n overrides.orchestratorUrl = new URL(orchestratorFromQuery).origin.replace(/\\/$/, '');\n } catch {\n // ignore invalid URL\n }\n }\n\n const trackingFromQuery = params.get('trackingId');\n if (trackingFromQuery) {\n overrides.trackingId = trackingFromQuery;\n }\n\n return overrides;\n}\n\ninterface ComponentRegistryItem {\n component_id: string;\n component_name: string;\n data_attribute?: string;\n}\n\ninterface EventTrackingConfig {\n eventName: string;\n eventType: string;\n selector?: string;\n description?: string;\n properties?: string[];\n staticProperties?: Record<string, string>;\n enabled?: boolean;\n componentId?: string | null;\n componentName?: string | null;\n}\n\ninterface AttachedEventListener {\n element: HTMLElement;\n eventType: string;\n handler: EventListener;\n}\n\ninterface HighlightMessage {\n type: 'ENABLE_HIGHLIGHTING' | 'DISABLE_HIGHLIGHTING' | 'UPDATE_HIGHLIGHTING' | 'SHOW_COMPONENT_TOOLTIP' | 'HIDE_ALL_TOOLTIPS' | 'ENABLE_EVENT_SELECTION';\n componentRegistry?: ComponentRegistryItem[];\n highlightComponents?: boolean;\n showZones?: boolean;\n componentId?: string;\n enabled?: boolean;\n}\n\nclass AmplifyUpSDK {\n private adapter: CDPAdapter;\n private config: AmplifyUpConfig | null = null;\n // Internal URLs - set during init, not part of user config\n private apiGatewayUrl: string = '';\n private orchestratorUrl: string = '';\n private decisionApiUrl: string = '';\n private edgeUrl: string = '';\n private siteId: string = '';\n private target: AmplifyUpTarget = 'local';\n private initialized = false;\n /** Prevents overlapping init() from React Strict Mode double-mount */\n private initPromise: Promise<void> | null = null;\n /** Ensures auto page() on init fires once per page load */\n private initialPageSent = false;\n private highlightingEnabled = false;\n private highlightComponentsEnabled = true;\n private showZonesEnabled = false;\n private componentRegistry: ComponentRegistryItem[] = [];\n private messageListener: ((event: MessageEvent) => void) | null = null;\n private composerBoundsRaf = 0;\n private composerBoundsScrollListener: ((event: Event) => void) | null = null;\n private mutationObserver: MutationObserver | null = null;\n private composerDragHandlers: {\n dragenter: (e: DragEvent) => void;\n dragover: (e: DragEvent) => void;\n dragleave: (e: DragEvent) => void;\n drop: (e: DragEvent) => void;\n mouseover: (e: MouseEvent) => void;\n mouseout: (e: MouseEvent) => void;\n } | null = null;\n /** Last slot highlighted during Composer drag — avoid clear/re-add flicker. */\n private lastComposerDragSlot: HTMLElement | null = null;\n /** Consecutive miss frames before clearing highlight (anti-jitter). */\n private composerDragMissFrames = 0;\n /**\n * Parent overlay is driving drag via postMessage. Native iframe dragleave must\n * not clear highlight — overlay takeover fires a spurious document dragleave.\n */\n private composerOverlayDragActive = false;\n private isVisualEditorMode = false;\n private eventSelectionMode = false;\n private eventSelectionClickHandler: ((e: MouseEvent) => void) | null = null;\n private eventTrackingConfig: EventTrackingConfig[] = [];\n private attachedEventListeners: AttachedEventListener[] = [];\n private trackingIntervals: NodeJS.Timeout[] = [];\n private trackingCleanup: (() => void) | null = null;\n private componentViewObservers: IntersectionObserver[] = [];\n private componentViewSeen = new Set<string>();\n private pageEngagementActive = false;\n /** Path of the last page() / routeChange — avoids duplicate SPA fires. */\n private lastTrackedPath: string | null = null;\n private pendingPageContext: AmplifyPageContextInput | null = null;\n private attachedPageContext: AttachedPageEventContext | null = null;\n private resolvedPageData: PageDataSnapshot | null = null;\n private resolvedPageRoute: string = '';\n private resolvedRouteParams: Record<string, string> = {};\n private historyHooksInstalled = false;\n private pageEngagementState = {\n reached: new Set<number>(),\n visibleMs: 0,\n visibleSince: null as number | null,\n /** True after Time on Page has been sent for the current visit. */\n dwellEmitted: false,\n /** When the tab last became hidden — used for idle-resume re-page. */\n hiddenAt: null as number | null,\n /** Last user interaction — freezes dwell when stale while visible. */\n lastActivityAt: 0,\n activityIdle: false,\n };\n\n constructor(adapter?: CDPAdapter) {\n // Always use AWS adapter (Pure AWS architecture)\n // Custom adapter can be provided for testing only\n this.adapter = adapter || new AWSAdapter();\n \n // Check if we're in visual editor mode (iframe or query param)\n if (typeof window !== 'undefined') {\n this.isVisualEditorMode = this.detectVisualEditorMode();\n \n // Only set up postMessage listener if in visual editor mode\n if (this.isVisualEditorMode) {\n this.setupHighlightingListener();\n console.log('[AmplifyUp SDK] Visual editor mode detected - message listener enabled');\n }\n }\n }\n\n /**\n * Detect if we're running in visual editor mode\n * Returns true if:\n * 1. Preview mode flag is set by proxy\n * 2. We're in an iframe AND parent is from orchestrator domain\n * 3. OR visualEditor/preview query parameter is present\n */\n private detectVisualEditorMode(): boolean {\n if (typeof window === 'undefined') return false;\n\n // Check for preview mode flag set by proxy\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return true;\n }\n\n // Check for query parameter\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('visualEditor') === 'true' || urlParams.get('preview') === 'true') {\n return true;\n }\n\n // Check if we're in an iframe\n const inIframe = window.self !== window.top;\n if (!inIframe) return false;\n\n // Check if parent can communicate (same origin or CORS allowed)\n try {\n // Try to access parent location - if we can't, we're cross-origin\n // For the orchestrator iframe, we allow cross-origin postMessage\n // but we can check the document.referrer\n if (document.referrer) {\n const referrerUrl = new URL(document.referrer);\n // Check if referrer is from localhost:5001 (orchestrator) or contains composer/routes paths\n if ((referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/')) {\n return true;\n }\n }\n } catch (e) {\n // Cross-origin, can't determine\n }\n\n // If in iframe but can't determine parent, don't enable visual editor\n return false;\n }\n\n /**\n * Check if we're in preview/composer mode (should disable tracking)\n */\n private isPreviewMode(): boolean {\n if (typeof window === 'undefined') return false;\n \n // Check for preview mode flag set by proxy (highest priority - set immediately)\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return true;\n }\n\n // Check if URL path contains proxy route (composer always uses this)\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return true;\n }\n\n // Check for query parameter in current URL\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return true;\n }\n\n // Check if URL contains preview=true anywhere (in case it's in the path or hash)\n const fullUrl = window.location.href;\n if (fullUrl.includes('preview=true') || fullUrl.includes('visualEditor=true')) {\n return true;\n }\n\n // Check if we're in an iframe from orchestrator\n if (window.self !== window.top) {\n // If in iframe, check referrer\n if (document.referrer) {\n try {\n const referrerUrl = new URL(document.referrer);\n if ((referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/')) {\n return true;\n }\n } catch {\n // Can't determine\n }\n }\n // If in iframe, assume preview mode (composer always uses iframes)\n return true;\n }\n\n return false;\n }\n\n /**\n * Initialize the SDK\n * Resolves local | dev | production targets for ingestion + personalization URLs.\n */\n async init(config: AmplifyUpConfig): Promise<void> {\n if (this.initialized && this.adapter?.isInitialized()) {\n this.ensureWindowBridge();\n return;\n }\n if (this.initPromise) {\n return this.initPromise;\n }\n\n this.initPromise = this.performInit(config);\n try {\n await this.initPromise;\n } finally {\n this.initPromise = null;\n }\n }\n\n /** Attach console helpers to window (idempotent; survives Fast Refresh). */\n ensureWindowBridge(): void {\n if (typeof window === 'undefined') return;\n\n (window as any).AmplifyUp = {\n getInstanceId: () => this.getInstanceId(),\n getSessionId: () => this.getSessionId(),\n getUserId: () => this.getUserId(),\n getTrackingId: () => this.getTrackingId(),\n getTarget: () => this.getTarget(),\n getDiagnostics: () => this.getDiagnostics(),\n getStatus: () => {\n console.log(this.getStatus());\n return this.getDiagnostics();\n },\n testTracking: () => this.testTracking(),\n verifyAWSConnection: () => {\n const result = this.verifyAWSConnection();\n console.log('AWS Connection Verification:', result.message);\n console.log('Full details:', result);\n return result;\n },\n isInitialized: () => this.isInitialized(),\n page: (url: string, properties?: EventProperties) => this.page(url, properties),\n track: (eventName: string, properties?: EventProperties) =>\n this.track(eventName, properties),\n identify: (userIdOrIdentifiers: IdentifyInput, traits?: IdentifyTraits) =>\n this.identify(userIdOrIdentifiers, traits),\n setProfileFields: (fields: ProfileFieldsInput) => this.setProfileFields(fields),\n };\n }\n\n private async performInit(config: AmplifyUpConfig): Promise<void> {\n // Always use AWS adapter (Pure AWS architecture)\n if (!this.adapter) {\n this.adapter = new AWSAdapter();\n }\n\n this.target = resolveAmplifyUpTarget({\n configTarget: config.target,\n configDev: config.dev,\n });\n const urls = resolveAmplifyUpUrls(this.target);\n this.apiGatewayUrl = urls.apiGatewayUrl;\n this.orchestratorUrl = urls.orchestratorUrl;\n this.decisionApiUrl = urls.decisionApiUrl;\n this.edgeUrl = urls.edgeUrl;\n this.siteId = config.siteId || '';\n\n const previewOverrides = readPreviewQueryOverrides();\n if (previewOverrides.orchestratorUrl) {\n this.orchestratorUrl = previewOverrides.orchestratorUrl;\n // Composer on production passed its origin — align all endpoints to that stack.\n if (isRemoteOrchestratorUrl(previewOverrides.orchestratorUrl)) {\n const prodUrls = resolveAmplifyUpUrls('production');\n this.target = 'production';\n this.apiGatewayUrl = prodUrls.apiGatewayUrl;\n this.decisionApiUrl = prodUrls.decisionApiUrl;\n this.edgeUrl = prodUrls.edgeUrl;\n }\n }\n\n // Store only user-provided config (without internal URLs)\n this.config = {\n trackingId: previewOverrides.trackingId || config.trackingId,\n debug: config.debug ?? readAmplifyUpDebugEnv(),\n target: this.target,\n dev: config.dev,\n ...(config.siteId ? { siteId: config.siteId } : {}),\n ...(config.pageContext ? { pageContext: config.pageContext } : {}),\n };\n setAmplifyUpDebug(!!this.config.debug);\n if (config.pageContext) {\n this.pendingPageContext = config.pageContext;\n this.recomputeAttachedContext();\n }\n \n try {\n // Pass config with URLs to adapter (adapter may need them)\n const adapterConfig = {\n ...this.config,\n apiGatewayUrl: this.apiGatewayUrl,\n orchestratorUrl: this.orchestratorUrl,\n decisionApiUrl: this.decisionApiUrl,\n };\n await this.adapter.init(adapterConfig);\n this.initialized = this.adapter.isInitialized();\n\n this.ensureWindowBridge();\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Diagnostic methods available on window.AmplifyUp');\n console.log('Try: AmplifyUp.getStatus() or AmplifyUp.testTracking()');\n }\n \n // Always clear any existing tracking intervals first (in case of re-initialization)\n this.clearTrackingIntervals();\n\n // CRITICAL: Check preview mode BEFORE doing anything else - exit immediately if in preview\n if (this.isPreviewMode()) {\n return; // Exit early, don't set up ANY tracking, don't call page()\n }\n\n // Only set up tracking if NOT in preview/composer mode\n if (typeof window !== 'undefined' && this.initialized) {\n // Small delay to ensure AWS adapter is ready\n await new Promise(resolve => setTimeout(resolve, 200));\n \n // Double-check preview mode after delay (in case flag was set during delay)\n if (this.isPreviewMode()) {\n return; // Exit immediately, don't track\n }\n \n // Auto page view once per load (React Strict Mode can call init twice)\n if (!this.initialPageSent) {\n this.initialPageSent = true;\n const url = window.location.pathname;\n this.page(url);\n this.lastTrackedPath = url;\n this.setupPageEngagement();\n // Next App Router owns history; wrapping pushState/replaceState\n // cancels <Link> soft navigation (no RSC fetch, pathname unchanged).\n if (!this.isNextJsApp()) {\n this.installHistoryHooks();\n }\n }\n }\n \n if (this.config?.debug && this.initialized) {\n console.log('AmplifyUp SDK: Initialized successfully', {\n trackingId: config.trackingId,\n target: this.target,\n apiGatewayUrl: this.apiGatewayUrl,\n orchestratorUrl: this.orchestratorUrl,\n decisionApiUrl: this.decisionApiUrl || '(orchestrator fallback)',\n });\n }\n } catch (error) {\n console.error('AmplifyUp SDK: Initialization failed', error);\n throw error;\n }\n }\n\n /**\n * Check if SDK is initialized\n */\n isInitialized(): boolean {\n return this.initialized && this.adapter.isInitialized();\n }\n\n /**\n * Clear all tracking intervals and event listeners\n */\n private clearTrackingIntervals(): void {\n if (this.trackingCleanup) {\n this.trackingCleanup();\n this.trackingCleanup = null;\n }\n this.trackingIntervals.forEach(id => clearInterval(id));\n this.trackingIntervals = [];\n this.cleanupComponentViewTracking();\n this.pageEngagementActive = false;\n }\n\n /** Current page path for engagement attribution. */\n private currentPath(): string {\n if (typeof window === 'undefined') return '/';\n return window.location.pathname || '/';\n }\n\n /**\n * Automatic page-level Scroll Depth + Time on Page.\n * Time on Page fires once per visit when the visit ends (route change,\n * tab close, or 30-minute idle resume). Hidden tabs pause the clock;\n * visible-but-idle tabs freeze after DWELL_ACTIVITY_IDLE_MS.\n */\n private setupPageEngagement(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n if (this.isPreviewMode() || this.pageEngagementActive) return;\n\n this.pageEngagementActive = true;\n const milestones = [25, 50, 75, 100];\n const state = this.pageEngagementState;\n state.reached = new Set();\n state.visibleMs = 0;\n state.visibleSince =\n document.visibilityState === 'visible' ? Date.now() : null;\n state.dwellEmitted = false;\n state.hiddenAt =\n document.visibilityState === 'hidden' ? Date.now() : null;\n state.lastActivityAt = Date.now();\n state.activityIdle = false;\n let scrollRaf: number | null = null;\n\n const path = () => this.currentPath();\n\n const measureScrollPercent = (): number => {\n const doc = document.documentElement;\n const body = document.body;\n const scrollTop =\n window.scrollY || doc.scrollTop || body?.scrollTop || 0;\n const scrollHeight = Math.max(\n doc.scrollHeight,\n body?.scrollHeight || 0,\n doc.offsetHeight,\n body?.offsetHeight || 0\n );\n const clientHeight = window.innerHeight || doc.clientHeight || 0;\n const traversable = Math.max(scrollHeight - clientHeight, 0);\n if (traversable <= 0) return 100;\n return Math.min(100, Math.round((scrollTop / traversable) * 100));\n };\n\n const checkScroll = () => {\n if (this.isPreviewMode()) return;\n const pct = measureScrollPercent();\n for (const milestone of milestones) {\n if (pct >= milestone && !state.reached.has(milestone)) {\n state.reached.add(milestone);\n this.track('Scroll Depth', {\n percentage: milestone,\n path: path(),\n });\n }\n }\n };\n\n const onScroll = () => {\n noteActivity();\n if (scrollRaf != null) return;\n scrollRaf = window.requestAnimationFrame(() => {\n scrollRaf = null;\n checkScroll();\n });\n };\n\n const accumulateVisible = () => {\n if (state.visibleSince == null) return;\n state.visibleMs += Date.now() - state.visibleSince;\n state.visibleSince = Date.now();\n };\n\n const freezeActivityIdle = () => {\n if (state.activityIdle) return;\n accumulateVisible();\n state.visibleSince = null;\n state.activityIdle = true;\n };\n\n const noteActivity = () => {\n state.lastActivityAt = Date.now();\n if (state.activityIdle) {\n state.activityIdle = false;\n if (\n document.visibilityState === 'visible' &&\n state.visibleSince == null\n ) {\n state.visibleSince = Date.now();\n }\n }\n };\n\n const emitDwell = (reason: DwellEmitReason) => {\n if (this.isPreviewMode()) return;\n if (state.dwellEmitted) return;\n if (!state.activityIdle) {\n accumulateVisible();\n }\n const seconds = Math.floor(state.visibleMs / 1000);\n if (seconds <= 0) return;\n state.dwellEmitted = true;\n this.track('Time on Page', {\n seconds,\n path: this.lastTrackedPath || path(),\n reason,\n });\n };\n\n const evaluateIdle = () => {\n if (document.visibilityState !== 'visible') return;\n if (Date.now() - state.lastActivityAt >= DWELL_ACTIVITY_IDLE_MS) {\n freezeActivityIdle();\n }\n };\n\n (this as { _emitPageDwell?: (force?: boolean) => void })._emitPageDwell =\n () => emitDwell('route');\n\n const onVisibility = () => {\n if (document.visibilityState === 'visible') {\n const idleMs =\n state.hiddenAt != null ? Date.now() - state.hiddenAt : 0;\n state.hiddenAt = null;\n // Tab left open past the session idle gap → new logical visit.\n // Must stay aligned with SESSION_GAP_MS in apps/orchestrator.\n if (idleMs >= SESSION_IDLE_GAP_MS) {\n emitDwell('idle-resume');\n this.resetEngagementQuiet();\n const resumePath = path();\n this.page(resumePath, { resumed: true });\n this.lastTrackedPath = resumePath;\n if (this.config?.debug) {\n console.log(\n '[AmplifyUp SDK] Idle resume page view',\n resumePath,\n `(hidden ${Math.round(idleMs / 60000)}m)`,\n );\n }\n }\n noteActivity();\n state.visibleSince = Date.now();\n state.activityIdle = false;\n } else {\n // Pause the clock; do not emit — alt-tab is not the end of the visit.\n accumulateVisible();\n state.hiddenAt = Date.now();\n state.visibleSince = null;\n state.activityIdle = false;\n }\n };\n\n const onPageHide = () => {\n emitDwell('unload');\n if (state.hiddenAt == null) {\n state.hiddenAt = Date.now();\n }\n state.visibleSince = null;\n };\n\n const activityEvents: Array<keyof WindowEventMap> = [\n 'pointerdown',\n 'keydown',\n 'scroll',\n 'touchstart',\n ];\n const onActivity = () => noteActivity();\n\n window.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('visibilitychange', onVisibility);\n window.addEventListener('pagehide', onPageHide);\n for (const evt of activityEvents) {\n if (evt === 'scroll') continue; // handled via onScroll\n window.addEventListener(evt, onActivity, { passive: true });\n }\n\n checkScroll();\n\n const idlePoll = setInterval(() => {\n evaluateIdle();\n }, DWELL_POLL_MS);\n this.trackingIntervals.push(idlePoll);\n\n const previousCleanup = this.trackingCleanup;\n this.trackingCleanup = () => {\n window.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', onVisibility);\n window.removeEventListener('pagehide', onPageHide);\n for (const evt of activityEvents) {\n if (evt === 'scroll') continue;\n window.removeEventListener(evt, onActivity);\n }\n if (scrollRaf != null) {\n window.cancelAnimationFrame(scrollRaf);\n scrollRaf = null;\n }\n previousCleanup?.();\n this.pageEngagementActive = false;\n delete (this as { _emitPageDwell?: (force?: boolean) => void })._emitPageDwell;\n };\n\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Page engagement tracking enabled');\n }\n }\n\n /** Flush dwell then reset — used on SPA route changes. */\n private resetEngagementForNewPage(): void {\n const emit = (this as { _emitPageDwell?: (force?: boolean) => void })\n ._emitPageDwell;\n emit?.(true);\n this.resetEngagementQuiet();\n }\n\n /** Reset dwell/scroll state without emitting (idle resume already flushed). */\n private resetEngagementQuiet(): void {\n const state = this.pageEngagementState;\n state.reached = new Set();\n state.visibleMs = 0;\n state.dwellEmitted = false;\n state.hiddenAt = null;\n state.lastActivityAt = Date.now();\n state.activityIdle = false;\n state.visibleSince =\n typeof document !== 'undefined' && document.visibilityState === 'visible'\n ? Date.now()\n : null;\n this.componentViewSeen.clear();\n }\n\n /**\n * SPA / soft navigation: fire a page view and reset engagement.\n * No-op when the path has not changed. Safe for React Strict Mode remounts.\n */\n routeChange(url?: string, properties?: EventProperties): void {\n if (this.isPreviewMode()) return;\n if (!this.isInitialized()) return;\n if (typeof window === 'undefined') return;\n\n const path = url || window.location.pathname || '/';\n if (path === this.lastTrackedPath) return;\n\n this.resetEngagementForNewPage();\n this.page(path, properties);\n this.lastTrackedPath = path;\n if (!this.pageEngagementActive) {\n this.setupPageEngagement();\n }\n\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Route change page view', path);\n }\n }\n\n /** True on Next.js (App or Pages). Do not patch history on these apps. */\n private isNextJsApp(): boolean {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return false;\n }\n const win = window as Window & { next?: unknown };\n if (win.next) return true;\n if (document.getElementById('__next')) return true;\n if (document.querySelector('script[src*=\"/_next/\"]')) return true;\n return false;\n }\n\n /**\n * Patch history.pushState / replaceState + popstate for non-React SPAs.\n * Next.js apps use AmplifyUpProvider.routeChange via usePathname instead —\n * wrapping history breaks App Router <Link> (no RSC request).\n */\n private installHistoryHooks(): void {\n if (typeof window === 'undefined' || this.historyHooksInstalled) return;\n this.historyHooksInstalled = true;\n\n const notify = () => {\n // Defer so location is updated after pushState\n queueMicrotask(() => this.routeChange(window.location.pathname));\n };\n\n const wrap = (method: 'pushState' | 'replaceState') => {\n const original = history[method].bind(history);\n history[method] = (...args: Parameters<History['pushState']>) => {\n const result = original(...args);\n notify();\n return result;\n };\n };\n\n wrap('pushState');\n wrap('replaceState');\n window.addEventListener('popstate', notify);\n }\n\n /**\n * Automatic Component View when component hosts enter the viewport.\n */\n setupComponentViewTracking(): void {\n if (typeof document === 'undefined' || typeof IntersectionObserver === 'undefined') {\n return;\n }\n if (this.isPreviewMode()) return;\n\n this.cleanupComponentViewTracking();\n\n const hosts = document.querySelectorAll('[data-amplifyup-component]');\n if (hosts.length === 0) {\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] No component hosts found for Component View');\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (!entry.isIntersecting) return;\n const el = entry.target as HTMLElement;\n const componentId =\n el.getAttribute('data-amplifyup-component') ||\n el.getAttribute('data-component-id');\n if (!componentId || this.componentViewSeen.has(componentId)) {\n observer.unobserve(el);\n return;\n }\n this.componentViewSeen.add(componentId);\n const componentName = el.getAttribute('data-component-name') || undefined;\n this.track('Component View', {\n componentId,\n componentName,\n path: this.currentPath(),\n });\n observer.unobserve(el);\n });\n },\n { threshold: 0.5 }\n );\n\n hosts.forEach((host) => observer.observe(host));\n this.componentViewObservers.push(observer);\n\n if (this.config?.debug) {\n console.log(\n '[AmplifyUp SDK] Component View tracking enabled for',\n hosts.length,\n 'hosts'\n );\n }\n }\n\n private cleanupComponentViewTracking(): void {\n this.componentViewObservers.forEach((obs) => obs.disconnect());\n this.componentViewObservers = [];\n }\n\n /**\n * Set resource context for this page. Prefer passing `pageContext` on\n * AmplifyUpProvider / init — required for components using From page.\n * Late calls still attach to subsequent events (not a second page view).\n */\n setPageContext(input: AmplifyPageContextInput): void {\n this.pendingPageContext = input;\n this.recomputeAttachedContext();\n }\n\n /**\n * Apply published pageData (from /v1/resolve) so field validation and\n * mapped page fields can run.\n */\n applyResolvedPageData(\n pageData: PageDataSnapshot | null | undefined,\n pageRoute?: string,\n routeParams?: Record<string, string>\n ): void {\n this.resolvedPageData = pageData || null;\n if (pageRoute) this.resolvedPageRoute = pageRoute;\n if (routeParams) this.resolvedRouteParams = routeParams;\n this.recomputeAttachedContext();\n }\n\n private recomputeAttachedContext(): void {\n if (!this.pendingPageContext) {\n this.attachedPageContext = attachStaticPageContext(\n this.resolvedPageData,\n this.resolvedPageRoute\n );\n setPageResourceFields(null);\n return;\n }\n this.attachedPageContext = applyPageContext(this.pendingPageContext, {\n pageData: this.resolvedPageData,\n routeParams: this.resolvedRouteParams,\n pageRoute: this.resolvedPageRoute,\n });\n setPageResourceFields(this.attachedPageContext?.resource?.fields || null);\n }\n\n getAttachedPageContext(): AttachedPageEventContext | null {\n return this.attachedPageContext;\n }\n\n /**\n * Track a page view\n */\n page(url: string, properties?: EventProperties): void {\n // CRITICAL: Don't track page views in preview/composer mode - exit immediately\n if (this.isPreviewMode()) {\n return; // Silent exit, no logging\n }\n\n if (!this.isInitialized()) {\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const pageProperties: PageProperties = {\n name: url,\n path: url,\n url: typeof window !== 'undefined' ? window.location.href : url,\n referrer: typeof document !== 'undefined' ? document.referrer : undefined,\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n // Timestamp is included in event payload\n ...mergeEventContext(properties || {}, this.attachedPageContext),\n };\n\n this.adapter.page(pageProperties);\n this.lastTrackedPath = url;\n }\n\n /**\n * Track an event\n */\n track(eventName: string, properties?: EventProperties): void {\n // CRITICAL: Don't track events in preview/composer mode - exit immediately\n if (this.isPreviewMode()) {\n return; // Silent exit, no logging\n }\n\n if (!this.isInitialized()) {\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const trackProperties: TrackProperties = {\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n url: typeof window !== 'undefined' ? window.location.href : undefined,\n path:\n (properties as { path?: string } | undefined)?.path ||\n (typeof window !== 'undefined' ? window.location.pathname : undefined),\n // Timestamp is included in event payload\n ...mergeEventContext(properties || {}, this.attachedPageContext),\n };\n\n // Ensure path wins if properties overwrote with undefined\n if (!trackProperties.path && typeof window !== 'undefined') {\n trackProperties.path = window.location.pathname;\n }\n\n this.adapter.track(eventName, trackProperties);\n }\n\n /**\n * Track a button click or CTA interaction\n */\n trackClick(elementId: string, elementText: string, properties?: EventProperties): void {\n this.track('Button Click', {\n elementId,\n elementText,\n ...properties,\n });\n }\n\n /**\n * Track form submission\n */\n trackFormSubmit(formId: string, formData?: EventProperties): void {\n this.track('Form Submit', {\n formId,\n ...formData,\n });\n }\n\n /**\n * Track form field interaction\n */\n trackFormFieldInteraction(fieldName: string, fieldValue?: string): void {\n this.track('Form Field Interaction', {\n fieldName,\n fieldValue: fieldValue ? fieldValue.substring(0, 100) : undefined, // Truncate for privacy\n });\n }\n\n /**\n * Track product/content view\n */\n trackContentView(contentId: string, contentType: string, properties?: EventProperties): void {\n this.track('Content View', {\n contentId,\n contentType,\n ...properties,\n });\n }\n\n /**\n * Identify a visitor.\n * - identify('user_123') — bare string; server maps via org default type\n * - identify({ email: '...', crm_id: '...' }) — explicit types\n * - identify('user_123', traits) — legacy form\n */\n identify(userIdOrIdentifiers: IdentifyInput, traits?: IdentifyTraits): void {\n // Don't track identify events in preview/composer mode\n if (this.isPreviewMode()) {\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Identify tracking disabled in preview mode', {\n userIdOrIdentifiers,\n });\n }\n return;\n }\n\n if (!this.isInitialized()) {\n if (this.config?.debug) {\n console.warn('AmplifyUp SDK: Not initialized. Identify not called.');\n }\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const identifyTraits: IdentifyTraits = {\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n ...traits,\n };\n\n this.adapter.identify(userIdOrIdentifiers, identifyTraits);\n\n if (typeof userIdOrIdentifiers === 'string') {\n setUserId(userIdOrIdentifiers);\n }\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: User identified', {\n userIdOrIdentifiers,\n instanceId,\n });\n }\n }\n\n /**\n * Set profile fields (partial update). Omitted keys are left alone;\n * an explicit empty value clears the field.\n */\n setProfileFields(fields: ProfileFieldsInput): void {\n if (this.isPreviewMode()) {\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: setProfileFields disabled in preview mode', {\n fields,\n });\n }\n return;\n }\n\n if (!this.isInitialized()) {\n if (this.config?.debug) {\n console.warn('AmplifyUp SDK: Not initialized. setProfileFields not called.');\n }\n return;\n }\n\n const instanceId = getStoredInstanceId();\n if (typeof this.adapter.setProfileFields === 'function') {\n this.adapter.setProfileFields(fields, {\n instanceId: instanceId || undefined,\n sessionId: getStoredSessionId() || undefined,\n trackingId: this.config?.trackingId,\n });\n }\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Profile fields set', { fields, instanceId });\n }\n }\n\n /**\n * Track content engagement (when user interacts with personalized content)\n */\n trackContentEngagement(contentId: string, engagementType: 'view' | 'click' | 'dismiss'): void {\n this.track('Content Engagement', {\n contentId,\n engagementType,\n });\n\n // Also send directly to orchestrator for immediate feedback\n if (this.orchestratorUrl) {\n const instanceId = getStoredInstanceId();\n fetch(`${this.orchestratorUrl}/api/personalization/feedback`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n instanceId,\n trackingId: this.config?.trackingId,\n contentId,\n engagementType,\n timestamp: new Date().toISOString(),\n }),\n }).catch(err => {\n if (this.config?.debug) {\n console.error('AmplifyUp SDK: Failed to send engagement feedback:', err);\n }\n });\n }\n }\n\n /**\n * Reset user identity (logout)\n */\n reset(): void {\n this.adapter.reset();\n clearIds();\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: User identity reset');\n }\n }\n\n /**\n * Get instance ID (anonymous ID)\n */\n getInstanceId(): string {\n return getStoredInstanceId();\n }\n\n /**\n * Get session id (30-minute inactivity reset).\n */\n getSessionId(): string {\n return getStoredSessionId();\n }\n\n /**\n * Get user ID\n */\n getUserId(): string | null {\n return getStoredUserId();\n }\n\n /**\n * Get tracking ID\n */\n getTrackingId(): string | undefined {\n return this.config?.trackingId;\n }\n\n /**\n * Get diagnostic information\n * Useful for debugging from browser console\n */\n getDiagnostics(): {\n initialized: boolean;\n instanceId: string;\n userId: string | null;\n trackingId: string | undefined;\n target: AmplifyUpTarget;\n config: {\n apiGatewayUrl?: string;\n decisionApiUrl?: string;\n orchestratorUrl?: string;\n debug?: boolean;\n };\n } {\n const instanceId = getStoredInstanceId();\n const userId = getStoredUserId();\n\n return {\n initialized: this.initialized,\n instanceId,\n userId,\n trackingId: this.config?.trackingId,\n target: this.target,\n config: {\n apiGatewayUrl: this.apiGatewayUrl,\n decisionApiUrl: this.decisionApiUrl,\n orchestratorUrl: this.orchestratorUrl,\n debug: this.config?.debug,\n },\n };\n }\n\n getTarget(): AmplifyUpTarget {\n return this.target;\n }\n\n /**\n * Test tracking by sending a test event\n */\n testTracking(): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Cannot test tracking.');\n return;\n }\n\n const testEvent = {\n eventName: 'SDK Test Event',\n timestamp: new Date().toISOString(),\n test: true,\n };\n\n console.log('AmplifyUp SDK: Sending test event...', testEvent);\n this.track('SDK Test Event', {\n ...testEvent,\n instanceId: getStoredInstanceId(),\n trackingId: this.config?.trackingId,\n });\n\n console.log('AmplifyUp SDK: Test event sent. Check AWS API Gateway to verify it was received.');\n console.log('AmplifyUp SDK: Check Network tab for requests to:', this.apiGatewayUrl);\n }\n\n /**\n * Verify AWS API Gateway connectivity\n * Checks if AWS adapter is initialized and can send events\n */\n verifyAWSConnection(): {\n connected: boolean;\n message: string;\n details?: any;\n } {\n if (!this.apiGatewayUrl) {\n return {\n connected: false,\n message: 'AWS API Gateway URL not configured',\n };\n }\n\n if (!this.initialized) {\n return {\n connected: false,\n message: 'SDK not initialized',\n };\n }\n\n return {\n connected: true,\n message: 'AWS adapter is connected and ready',\n details: {\n apiGatewayUrl: this.apiGatewayUrl,\n decisionApiUrl: this.decisionApiUrl,\n },\n };\n }\n\n /**\n * Get status summary (for console debugging)\n */\n getStatus(): string {\n const diag = this.getDiagnostics();\n return `\nAmplifyUp SDK Status:\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nInitialized: ${diag.initialized ? '✅ Yes' : '❌ No'}\nTarget: ${diag.target}\nInstance ID: ${diag.instanceId}\nUser ID: ${diag.userId || 'Not identified'}\nTracking ID: ${diag.trackingId || 'Not set'}\n\nAdapter:\n Type: AWS (Pure AWS Architecture)\n\nConfig:\n API Gateway: ${this.apiGatewayUrl || 'Not set (required)'}\n Decision API: ${this.decisionApiUrl || 'Not set (using Orchestrator fallback)'}\n Orchestrator: ${this.orchestratorUrl || 'Not set'}\n\nAvailable Console Commands:\n AmplifyUp.getStatus() - Show this status\n AmplifyUp.getDiagnostics() - Get full diagnostic object\n AmplifyUp.getTarget() - Current environment target\n AmplifyUp.getInstanceId() - Get instance ID (browser/session ID)\n AmplifyUp.getUserId() - Get user ID if identified\n AmplifyUp.testTracking() - Send a test event\n AmplifyUp.verifyAWSConnection() - Verify AWS API Gateway connectivity\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n `.trim();\n }\n\n /**\n * Get orchestrator URL\n */\n getOrchestratorUrl(): string | undefined {\n return this.orchestratorUrl || undefined;\n }\n\n /**\n * Get decision API URL\n */\n getDecisionApiUrl(): string | undefined {\n return this.decisionApiUrl || undefined;\n }\n\n /**\n * Get Edge Worker URL (production content resolve)\n */\n getEdgeUrl(): string | undefined {\n return this.edgeUrl || undefined;\n }\n\n /**\n * Optional site id from config (Edge can resolve via trackingId alone).\n */\n getSiteId(): string | undefined {\n return this.siteId || this.config?.siteId || undefined;\n }\n\n /**\n * Build API URL for fetching page config from the Layout Provider\n */\n buildLayoutProviderUrl(route: string, preview: boolean = false): string {\n const orchestratorUrl = this.getOrchestratorUrl();\n const trackingId = this.getTrackingId();\n const instanceId = getStoredInstanceId();\n\n if (!orchestratorUrl || !trackingId) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n\n // Use relative URL only when we're actually on the orchestrator's origin (e.g. iframe\n // loaded via orchestrator proxy). When on the site's own origin with ?preview=true,\n // we must use the full orchestrator URL.\n const isOnOrchestratorOrigin = typeof window !== 'undefined' &&\n window.location.origin === new URL(orchestratorUrl).origin;\n\n const params = new URLSearchParams({\n route,\n trackingId,\n instanceId,\n });\n\n if (preview) {\n params.set('preview', 'true');\n if (typeof window !== 'undefined') {\n const pageSearch = new URLSearchParams(window.location.search);\n if (isWorkingContentRequest(pageSearch)) {\n params.set('working', 'true');\n }\n const zoneId = pageSearch.get('zoneId');\n const compositionId = pageSearch.get('compositionId');\n if (zoneId) params.set('zoneId', zoneId);\n if (compositionId) params.set('compositionId', compositionId);\n }\n }\n\n if (isOnOrchestratorOrigin) {\n return `/api/layout/provider?${params.toString()}`;\n }\n\n // Use full orchestrator URL\n return `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n }\n\n /**\n * Fetch page configuration from orchestrator's Layout Provider\n */\n async fetchPageConfig(route: string, preview: boolean = false): Promise<any> {\n const url = this.buildLayoutProviderUrl(route, preview);\n const response = await fetch(url);\n\n if (!response.ok) {\n if (response.status === 404) {\n return null; // Page not configured\n }\n throw new Error(`Failed to fetch page: ${response.statusText}`);\n }\n\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n // Preview-frame used to rewrite /api/layout/* onto the customer site (HTML).\n throw new Error(\n `Layout provider returned non-JSON (${contentType || 'unknown'}). Check Composer preview routing.`\n );\n }\n\n const data = await response.json();\n const pageConfig = data.page;\n \n // Set up Composer-configured + automatic component event tracking\n if (pageConfig?.eventTracking) {\n this.setupEventTracking(pageConfig.eventTracking);\n }\n // Component hosts may render after config; attach views with a short delay + refresh\n if (typeof window !== 'undefined') {\n window.setTimeout(() => this.setupComponentViewTracking(), 150);\n window.setTimeout(() => {\n this.setupComponentViewTracking();\n this.refreshEventTracking();\n }, 800);\n }\n \n return envelopePageConfig(pageConfig);\n }\n\n /**\n * Set up view-level event tracking based on configuration\n */\n setupEventTracking(eventConfig: EventTrackingConfig[]): void {\n if (typeof document === 'undefined') return;\n \n // Detach previous listeners but keep incoming config\n this.detachEventListeners();\n \n this.eventTrackingConfig = Array.isArray(eventConfig) ? [...eventConfig] : [];\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Setting up event tracking:', this.eventTrackingConfig.length, 'events');\n }\n \n // Wait for DOM to be ready, then attach listeners\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => this.attachEventListeners());\n } else {\n // Small delay to ensure components are rendered\n setTimeout(() => this.attachEventListeners(), 100);\n }\n }\n\n /**\n * Attach event listeners to page elements based on view-level configuration\n */\n private attachEventListeners(): void {\n if (typeof document === 'undefined') return;\n \n this.eventTrackingConfig.forEach((eventConfig) => {\n if (eventConfig.enabled === false) return;\n if (!eventConfig.selector) {\n if (this.config?.debug) {\n console.warn(`[AmplifyUp SDK] Event ${eventConfig.eventName} has no selector, skipping`);\n }\n return;\n }\n\n let targetElements: Element[] = [];\n try {\n const escapeAttr = (value: string) =>\n typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(value)\n : value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const scopeRoot = eventConfig.componentId\n ? document.querySelector(\n `[data-amplifyup-component=\"${escapeAttr(eventConfig.componentId)}\"], [data-component-id=\"${escapeAttr(eventConfig.componentId)}\"]`\n )\n : document;\n if (!scopeRoot) {\n if (this.config?.debug) {\n console.log(\n `[AmplifyUp SDK] Component host not found for ${eventConfig.componentId}`\n );\n }\n return;\n }\n targetElements = Array.from(\n scopeRoot.querySelectorAll(eventConfig.selector)\n );\n // If selector matches the host itself\n if (\n scopeRoot instanceof Element &&\n scopeRoot !== document.documentElement &&\n scopeRoot.matches?.(eventConfig.selector)\n ) {\n targetElements.unshift(scopeRoot);\n }\n } catch (e) {\n if (this.config?.debug) {\n console.warn(`[AmplifyUp SDK] Invalid selector: ${eventConfig.selector}`, e);\n }\n return;\n }\n \n if (targetElements.length === 0) {\n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] No elements found for selector: ${eventConfig.selector}`);\n }\n return;\n }\n \n targetElements.forEach((targetEl) => {\n const htmlTargetEl = targetEl as HTMLElement;\n \n // Map eventType to actual DOM event\n const domEventType = this.mapEventType(eventConfig.eventType);\n \n // Create event handler\n const handler = (e: Event) => {\n this.handleTrackedEvent(e, eventConfig, htmlTargetEl);\n };\n \n // Special handling for 'view' events (intersection observer)\n if (eventConfig.eventType === 'view') {\n this.setupViewTracking(htmlTargetEl, eventConfig);\n } else {\n htmlTargetEl.addEventListener(domEventType, handler);\n this.attachedEventListeners.push({\n element: htmlTargetEl,\n eventType: domEventType,\n handler,\n });\n }\n \n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] Attached ${eventConfig.eventType} listener for ${eventConfig.eventName} on selector: ${eventConfig.selector}`);\n }\n });\n });\n }\n\n /**\n * Map event type from config to DOM event type\n */\n private mapEventType(eventType: string): string {\n const eventMap: Record<string, string> = {\n 'click': 'click',\n 'submit': 'submit',\n 'focus': 'focus',\n 'blur': 'blur',\n 'hover': 'mouseenter',\n 'change': 'change',\n 'scroll': 'scroll',\n 'view': 'view', // Handled separately with IntersectionObserver\n 'custom': 'custom',\n };\n return eventMap[eventType] || eventType;\n }\n\n /**\n * Handle a tracked event and send to AWS API Gateway\n */\n private handleTrackedEvent(\n event: Event,\n config: EventTrackingConfig,\n element: HTMLElement\n ): void {\n // Build event properties\n const properties: Record<string, any> = {\n eventType: config.eventType,\n selector: config.selector,\n path: this.currentPath(),\n };\n if (config.componentId) {\n properties.componentId = config.componentId;\n }\n if (config.componentName) {\n properties.componentName = config.componentName;\n }\n if (config.staticProperties) {\n for (const [key, value] of Object.entries(config.staticProperties)) {\n if (key) properties[key] = value;\n }\n }\n \n // Capture configured properties from element\n if (config.properties && config.properties.length > 0) {\n config.properties.forEach((prop) => {\n // Try data attribute first\n const dataAttrValue = element.getAttribute(`data-${prop}`);\n if (dataAttrValue) {\n properties[prop] = dataAttrValue;\n return;\n }\n \n // Try element property\n if (prop in element) {\n const value = (element as any)[prop];\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n properties[prop] = value;\n }\n }\n \n // Special properties\n switch (prop) {\n case 'buttonText':\n case 'text':\n properties[prop] = element.textContent?.trim().substring(0, 100);\n break;\n case 'linkUrl':\n case 'href':\n properties[prop] = element.getAttribute('href');\n break;\n case 'formId':\n case 'id':\n properties[prop] = element.id || element.getAttribute('name');\n break;\n case 'value':\n properties[prop] = (element as HTMLInputElement).value;\n break;\n case 'tagName':\n properties[prop] = element.tagName.toLowerCase();\n break;\n case 'className':\n properties[prop] = element.className;\n break;\n }\n });\n }\n \n // Track the event\n this.track(config.eventName, properties);\n \n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] Tracked event: ${config.eventName}`, properties);\n }\n }\n\n /**\n * Set up view tracking using IntersectionObserver\n */\n private setupViewTracking(\n element: HTMLElement,\n config: EventTrackingConfig\n ): void {\n if (typeof IntersectionObserver === 'undefined') return;\n \n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // Element is in view - track the event\n this.handleTrackedEvent(\n new CustomEvent('view'),\n config,\n element\n );\n // Only track once per page load\n observer.unobserve(element);\n }\n });\n },\n {\n threshold: 0.5, // 50% visible\n }\n );\n \n observer.observe(element);\n \n // Store observer for cleanup\n (element as any)._amplifyupViewObserver = observer;\n }\n\n /**\n * Detach listeners/observers without clearing the saved event config.\n */\n private detachEventListeners(): void {\n this.attachedEventListeners.forEach(({ element, eventType, handler }) => {\n element.removeEventListener(eventType, handler);\n });\n this.attachedEventListeners = [];\n\n if (typeof document !== 'undefined') {\n document.querySelectorAll('*').forEach((el) => {\n const observer = (el as any)._amplifyupViewObserver;\n if (observer) {\n observer.disconnect();\n delete (el as any)._amplifyupViewObserver;\n }\n });\n }\n }\n\n /**\n * Clean up all attached event listeners and clear config\n */\n cleanupEventTracking(): void {\n this.detachEventListeners();\n this.eventTrackingConfig = [];\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Cleaned up event tracking');\n }\n }\n\n /**\n * Manually trigger event tracking setup (useful after dynamic content loads)\n */\n refreshEventTracking(): void {\n if (this.eventTrackingConfig.length === 0) return;\n const config = [...this.eventTrackingConfig];\n this.detachEventListeners();\n this.eventTrackingConfig = config;\n this.attachEventListeners();\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Refreshed event tracking:', config.length, 'events');\n }\n }\n\n /** Origins allowed to send Composer postMessage commands to the SDK. */\n private isAllowedComposerOrigin(origin: string): boolean {\n if (typeof window === 'undefined') return false;\n if (origin === window.location.origin) return true;\n\n const staticAllowed = [\n 'http://localhost:5001',\n 'http://localhost:3001',\n 'https://amplifyup.ai',\n 'https://orchestrator.amplifyup.com',\n ];\n if (staticAllowed.includes(origin)) return true;\n\n try {\n const host = new URL(origin).hostname;\n if (host === 'amplifyup.ai' || host.endsWith('.amplifyup.ai')) return true;\n } catch {\n // ignore invalid origin\n }\n\n const orchestratorFromQuery = (() => {\n try {\n const value = new URLSearchParams(window.location.search).get('orchestratorUrl');\n return value ? new URL(value).origin : null;\n } catch {\n return null;\n }\n })();\n if (orchestratorFromQuery && origin === orchestratorFromQuery) return true;\n\n if (this.orchestratorUrl) {\n try {\n if (new URL(this.orchestratorUrl).origin === origin) return true;\n } catch {\n // ignore\n }\n }\n\n return false;\n }\n\n /**\n * Set up postMessage listener for highlighting commands from orchestrator\n */\n private setupHighlightingListener(): void {\n if (this.messageListener) {\n console.log('[AmplifyUp SDK] Message listener already set up');\n return; // Already set up\n }\n\n console.log('[AmplifyUp SDK] Setting up message listener...');\n\n this.messageListener = (event: MessageEvent) => {\n // Debug logging\n console.log('[AmplifyUp SDK] Received message:', {\n origin: event.origin,\n currentOrigin: window.location.origin,\n data: event.data,\n });\n\n // Security: only accept Composer commands from the orchestrator origin\n if (!this.isAllowedComposerOrigin(event.origin)) {\n console.warn('[AmplifyUp SDK] Rejected message from unauthorized origin:', {\n eventOrigin: event.origin,\n currentOrigin: window.location.origin,\n });\n return;\n }\n\n try {\n if (event.data?.type === 'AMPLIFYUP_RICHTEXT_EDITING') {\n document.querySelectorAll('.amplifyup-richtext-editing').forEach((el) => {\n el.classList.remove('amplifyup-richtext-editing');\n (el as HTMLElement).style.minHeight = '';\n (el as HTMLElement).style.height = '';\n (el as HTMLElement).style.display = '';\n });\n if (event.data.active && event.data.fieldName) {\n if (!document.getElementById('amplifyup-richtext-editing-style')) {\n const style = document.createElement('style');\n style.id = 'amplifyup-richtext-editing-style';\n style.textContent =\n '[data-amplifyup-field].amplifyup-richtext-editing{outline:none!important;visibility:hidden!important;display:block!important;box-sizing:border-box!important;}';\n document.head.appendChild(style);\n }\n const editRoot = event.data.layoutNodeId\n ? document.querySelector(\n `[data-node-id=\"${event.data.layoutNodeId}\"], [data-amplifyup-node-id=\"${event.data.layoutNodeId}\"]`\n ) || document\n : document;\n const editField = editRoot.querySelector(\n `[data-amplifyup-field=\"${event.data.fieldName}\"]`\n ) as HTMLElement | null;\n if (editField) {\n editField.classList.add('amplifyup-richtext-editing');\n const editHeight = Number(event.data.height) || 0;\n if (editHeight > 0) {\n editField.style.display = 'block';\n editField.style.minHeight = `${editHeight}px`;\n editField.style.height = `${editHeight}px`;\n }\n }\n }\n return;\n }\n\n if (event.data?.type === 'AMPLIFYUP_FIELD_PATCH') {\n window.dispatchEvent(\n new CustomEvent('amplifyup:field-patch', { detail: event.data })\n );\n return;\n }\n\n if (event.data?.type === 'AMPLIFYUP_PROPS_PATCH') {\n window.dispatchEvent(\n new CustomEvent('amplifyup:props-patch', { detail: event.data })\n );\n return;\n }\n\n if (event.data?.type === 'COMPONENT_DELETABLE_STATUS') {\n const { componentId, deletable, nodeId } = event.data;\n const element = document.querySelector(`[data-component-id=\"${componentId}\"]`) as HTMLElement;\n if (element) {\n const deleteButton = (element as any)._deleteButton as HTMLButtonElement;\n if (deleteButton) {\n if (deletable && nodeId) {\n deleteButton.disabled = false;\n deleteButton.style.opacity = '1';\n deleteButton.style.cursor = 'pointer';\n element.setAttribute('data-node-id', nodeId);\n } else {\n deleteButton.disabled = true;\n deleteButton.style.opacity = '0.5';\n deleteButton.style.cursor = 'not-allowed';\n }\n }\n }\n return;\n }\n \n // Handle DELETE_COMPONENT_REQUEST (from SDK delete button)\n if (event.data?.type === 'DELETE_COMPONENT_REQUEST') {\n // Forward to parent\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(event.data, '*');\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_START') {\n this.composerOverlayDragActive = true;\n if (typeof document !== 'undefined') {\n document.body.classList.add('amplifyup-composer-dragging');\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_AT_POINT') {\n const { x, y } = event.data;\n if (typeof x === 'number' && typeof y === 'number') {\n this.handleComposerDragAtPoint(x, y);\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DROP_AT_POINT') {\n const { x, y } = event.data;\n if (typeof x === 'number' && typeof y === 'number') {\n this.handleComposerDropAtPoint(x, y);\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_END') {\n this.composerOverlayDragActive = false;\n this.clearComposerDragHighlight();\n return;\n }\n \n if (event.data?.type === 'CLEAR_SELECTION') {\n this.clearComposerSelection();\n return;\n }\n\n if (event.data?.type === 'GET_ELEMENT_POSITION') {\n const { componentId, slotName, nodeId, isPageSlot } = event.data;\n let element: HTMLElement | null = null;\n\n if (isPageSlot || (slotName === 'main' && !nodeId && !componentId)) {\n element = document.querySelector(\n '[data-slot-source=\"page\"]'\n ) as HTMLElement | null;\n }\n if (!element && nodeId && slotName) {\n element = document.querySelector(\n `[data-parent-node-id=\"${nodeId}\"][data-slot-id=\"${slotName}\"], [data-parent-node-id=\"${nodeId}\"][data-amplifyup-slot=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && nodeId && !slotName) {\n element = document.querySelector(\n `[data-node-id=\"${nodeId}\"]`\n ) as HTMLElement | null;\n }\n if (!element && slotName) {\n element = document.querySelector(\n `[data-slot-source=\"page\"][data-slot-id=\"${slotName}\"], [data-slot-source=\"page\"][data-amplifyup-slot=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && slotName) {\n element = document.querySelector(\n `[data-amplifyup-slot=\"${slotName}\"], [data-slot-id=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && componentId) {\n element = document.querySelector(\n `[data-amplifyup-component=\"${componentId}\"], [data-component-id=\"${componentId}\"]`\n ) as HTMLElement | null;\n }\n\n console.log('[AmplifyUp SDK] Finding element position:', {\n componentId,\n slotName,\n nodeId,\n isPageSlot,\n found: !!element,\n });\n if (element) {\n this.markComposerSelection(element);\n const rect = element.getBoundingClientRect();\n const position = {\n x: rect.left + rect.width / 2,\n y: rect.top - 50,\n width: rect.width,\n height: rect.height,\n };\n const bounds = {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n };\n\n if (window.parent && window.parent !== window) {\n const hierarchyEls = this.buildComponentHierarchy(element);\n window.parent.postMessage({\n type: 'ELEMENT_POSITION',\n componentId: componentId || null,\n slotName: slotName || null,\n nodeId: nodeId || null,\n isPageSlot: !!isPageSlot || element.getAttribute('data-slot-source') === 'page',\n hierarchy: hierarchyEls.map((el, index) => {\n const elComponentId = el.getAttribute('data-amplifyup-component') || el.getAttribute('data-component-id');\n const elSlotName = el.getAttribute('data-amplifyup-slot') || el.getAttribute('data-slot-id');\n const isSlot = !elComponentId && !!elSlotName;\n const pageSlot = isSlot && el.getAttribute('data-slot-source') === 'page';\n return {\n index,\n componentId: elComponentId,\n componentName: pageSlot ? 'Page' : el.getAttribute('data-component-name'),\n slotName: isSlot ? elSlotName : null,\n isSlot,\n isPageSlot: pageSlot,\n nodeId: el.getAttribute('data-node-id') || (isSlot ? el.getAttribute('data-parent-node-id') : null),\n };\n }),\n position,\n bounds,\n }, '*');\n }\n } else {\n console.warn('[AmplifyUp SDK] Element not found for position request');\n }\n return;\n }\n \n const message = event.data as HighlightMessage;\n \n if (!message || typeof message !== 'object' || !message.type) {\n console.log('[AmplifyUp SDK] Message is not a highlighting message:', message);\n return; // Not a highlighting message\n }\n\n console.log('[AmplifyUp SDK] Processing highlight message:', message.type);\n\n switch (message.type) {\n case 'ENABLE_HIGHLIGHTING':\n case 'UPDATE_HIGHLIGHTING':\n console.log('[AmplifyUp SDK] Enabling highlighting with registry:', message.componentRegistry?.length || 0, 'components');\n this.enableHighlighting(\n message.componentRegistry || [],\n message.highlightComponents ?? true,\n message.showZones ?? false\n );\n break;\n case 'DISABLE_HIGHLIGHTING':\n console.log('[AmplifyUp SDK] Disabling highlighting');\n this.disableHighlighting();\n break;\n case 'SHOW_COMPONENT_TOOLTIP':\n case 'HIDE_ALL_TOOLTIPS':\n this.clearComposerSelection();\n break;\n case 'ENABLE_EVENT_SELECTION':\n console.log('[AmplifyUp SDK] Enable event selection mode:', message.enabled);\n this.setEventSelectionMode(message.enabled || false);\n break;\n }\n } catch (error) {\n console.error('[AmplifyUp SDK] Error handling highlight message:', error);\n }\n };\n\n window.addEventListener('message', this.messageListener);\n console.log('[AmplifyUp SDK] Message listener attached to window');\n }\n\n /**\n * Enable/disable event selection mode\n * When enabled, clicks on elements send element info to parent for event configuration\n */\n private setEventSelectionMode(enabled: boolean): void {\n if (typeof document === 'undefined') return;\n \n this.eventSelectionMode = enabled;\n if (typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ = enabled;\n window.dispatchEvent(new CustomEvent('amplifyup:composer-edit'));\n }\n \n // Remove existing handler if any\n if (this.eventSelectionClickHandler) {\n document.removeEventListener('click', this.eventSelectionClickHandler, true);\n this.eventSelectionClickHandler = null;\n }\n\n // Composer preview-frame already captures picks. A second postMessage\n // created duplicate events for the same click.\n if (\n enabled &&\n typeof window !== 'undefined' &&\n (window as any).__AMPLIFYUP_PREVIEW_MODE__\n ) {\n return;\n }\n \n if (enabled) {\n this.eventSelectionClickHandler = (e: MouseEvent) => {\n const raw = e.target as HTMLElement | null;\n if (!raw) return;\n\n const interactive = raw.closest(\n 'a, button, [role=\"button\"], input, select, textarea, [data-el], [data-amplifyup-component], [data-component-id]'\n );\n const target = interactive instanceof HTMLElement ? interactive : raw;\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const selector = this.generateSelectorForElement(target);\n const tagName = target.tagName.toLowerCase();\n const text = (target.textContent || '').replace(/\\s+/g, ' ').trim().substring(0, 80);\n \n if (window.parent && window.parent !== window) {\n window.parent.postMessage({\n type: 'ELEMENT_CLICKED_FOR_EVENT',\n selector,\n tagName,\n text,\n }, '*');\n }\n };\n \n // Use capture phase to catch all clicks\n document.addEventListener('click', this.eventSelectionClickHandler, true);\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Event selection mode enabled - clicks will be captured');\n }\n } else {\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Event selection mode disabled');\n }\n }\n }\n\n /**\n * Generate a CSS selector for an element\n */\n private generateSelectorForElement(el: HTMLElement): string {\n // If has ID, use it\n if (el.id) {\n return '#' + el.id;\n }\n \n // If has data attributes, use them\n const dataAttrs = Array.from(el.attributes).filter(a => a.name.startsWith('data-'));\n if (dataAttrs.length > 0) {\n const attr = dataAttrs[0];\n return '[' + attr.name + '=\"' + attr.value + '\"]';\n }\n \n // If has meaningful class\n if (el.className && typeof el.className === 'string') {\n const classes = el.className.split(' ').filter(c => \n c && !c.startsWith('has-') && !c.includes('selectable') && !c.includes('selected')\n );\n if (classes.length > 0) {\n return el.tagName.toLowerCase() + '.' + classes[0];\n }\n }\n \n // If has type attribute (for inputs)\n if ((el as HTMLInputElement).type) {\n return el.tagName.toLowerCase() + '[type=\"' + (el as HTMLInputElement).type + '\"]';\n }\n \n // If has name attribute\n if ((el as HTMLInputElement).name) {\n return el.tagName.toLowerCase() + '[name=\"' + (el as HTMLInputElement).name + '\"]';\n }\n \n // Just use tag name\n return el.tagName.toLowerCase();\n }\n\n /** Clear drag-over highlight state (Composer overlay path or native drag end). */\n private clearComposerDragHighlight(): void {\n if (typeof document === 'undefined') return;\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n document.querySelectorAll(`${slotSelector}.amplifyup-drag-over-slot`).forEach((el) => {\n el.classList.remove('amplifyup-drag-over-slot');\n });\n document.body.classList.remove('amplifyup-drag-no-drop');\n document.body.classList.remove('amplifyup-composer-dragging');\n this.lastComposerDragSlot = null;\n this.composerDragMissFrames = 0;\n }\n\n /** Re-apply drag-over class only if missing (avoids classList churn / flicker). */\n private ensureDragOverClass(slot: HTMLElement): void {\n if (!slot.classList.contains('amplifyup-drag-over-slot')) {\n slot.classList.add('amplifyup-drag-over-slot');\n }\n if (document.body.classList.contains('amplifyup-drag-no-drop')) {\n document.body.classList.remove('amplifyup-drag-no-drop');\n }\n }\n\n /**\n * Composer drag targets the innermost (most specific) slot under the cursor.\n * e.g. FullWidthGrid's main wins over a page-level main that wraps it.\n */\n private resolveSlotAtPoint(x: number, y: number): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n\n const containing: HTMLElement[] = [];\n document.querySelectorAll(slotSelector).forEach((node) => {\n const el = node as HTMLElement;\n const r = el.getBoundingClientRect();\n if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) {\n containing.push(el);\n }\n });\n if (containing.length === 0) return null;\n\n // Innermost = not containing any other slot that also contains the point\n const innermost = containing.filter(\n (el) => !containing.some((other) => other !== el && el.contains(other))\n );\n if (innermost.length === 1) return innermost[0];\n\n // Prefer the smallest box among peers (most specific painted target)\n let best = innermost[0];\n let bestArea = Infinity;\n for (const el of innermost) {\n const r = el.getBoundingClientRect();\n const area = Math.max(1, r.width) * Math.max(1, r.height);\n if (area < bestArea) {\n bestArea = area;\n best = el;\n }\n }\n return best;\n }\n\n /** Parent layout node that owns this slot (null for page-level code main). */\n private parentComponentForSlot(slotEl: HTMLElement): {\n componentId: string | null;\n nodeId: string | null;\n } {\n // Prefer attributes stamped on the slot itself (unique per layout node instance).\n let componentId = slotEl.getAttribute('data-parent-component-id');\n let nodeId = slotEl.getAttribute('data-parent-node-id');\n\n // Walk ancestors — stop at the nearest layout node wrapper so nested\n // identical component types don't steal the wrong parent.\n let el: HTMLElement | null = slotEl.parentElement;\n while (el && (!nodeId || !componentId)) {\n if (!nodeId && el.hasAttribute('data-node-id')) {\n nodeId = el.getAttribute('data-node-id');\n }\n if (!componentId) {\n componentId =\n el.getAttribute('data-amplifyup-component') ||\n el.getAttribute('data-component-id');\n }\n // Once we have the nearest node id, don't keep walking to outer ancestors\n // of the same component type.\n if (nodeId) break;\n el = el.parentElement;\n }\n\n return { componentId, nodeId };\n }\n\n private pointInRect(x: number, y: number, el: HTMLElement, pad = 8): boolean {\n const r = el.getBoundingClientRect();\n return (\n x >= r.left - pad &&\n x <= r.right + pad &&\n y >= r.top - pad &&\n y <= r.bottom + pad\n );\n }\n\n private setComposerDragHighlight(slot: HTMLElement | null, x?: number, y?: number): void {\n if (slot && slot === this.lastComposerDragSlot) {\n this.composerDragMissFrames = 0;\n this.ensureDragOverClass(slot);\n return;\n }\n\n // Resolve found a nested slot inside the current highlight — prefer the inner one.\n if (\n slot &&\n this.lastComposerDragSlot &&\n this.lastComposerDragSlot.contains(slot) &&\n slot !== this.lastComposerDragSlot\n ) {\n this.composerDragMissFrames = 0;\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n this.lastComposerDragSlot = slot;\n this.ensureDragOverClass(slot);\n return;\n }\n\n // Still inside the current (innermost) slot — keep it even if hit-test returned a parent.\n if (\n this.lastComposerDragSlot &&\n typeof x === 'number' &&\n typeof y === 'number' &&\n this.pointInRect(x, y, this.lastComposerDragSlot)\n ) {\n if (!slot || slot.contains(this.lastComposerDragSlot) || slot === this.lastComposerDragSlot) {\n this.composerDragMissFrames = 0;\n this.ensureDragOverClass(this.lastComposerDragSlot);\n return;\n }\n }\n\n if (slot) {\n this.composerDragMissFrames = 0;\n if (this.lastComposerDragSlot && this.lastComposerDragSlot !== slot) {\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n }\n this.lastComposerDragSlot = slot;\n this.ensureDragOverClass(slot);\n return;\n }\n\n this.composerDragMissFrames += 1;\n if (this.lastComposerDragSlot && this.composerDragMissFrames < 8) {\n this.ensureDragOverClass(this.lastComposerDragSlot);\n return;\n }\n\n if (this.lastComposerDragSlot) {\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n this.lastComposerDragSlot = null;\n }\n if (!document.body.classList.contains('amplifyup-drag-no-drop')) {\n document.body.classList.add('amplifyup-drag-no-drop');\n }\n }\n\n private handleComposerDragAtPoint(x: number, y: number): void {\n this.composerOverlayDragActive = true;\n if (!document.body.classList.contains('amplifyup-composer-dragging')) {\n document.body.classList.add('amplifyup-composer-dragging');\n }\n this.setComposerDragHighlight(this.resolveSlotAtPoint(x, y), x, y);\n }\n\n private postDropOnSlot(slotEl: HTMLElement): void {\n const win = window;\n if (!win.parent || win.parent === win) return;\n\n const slotName =\n slotEl.getAttribute('data-amplifyup-slot') ||\n slotEl.getAttribute('data-slot-id');\n if (!slotName) return;\n\n const { componentId, nodeId } = this.parentComponentForSlot(slotEl);\n const isEmpty = slotEl.getAttribute('data-slot-empty') === 'true';\n\n win.parent.postMessage(\n {\n type: 'DROP_ON_SLOT',\n slotName,\n slotElement: {\n path: slotEl.getAttribute('data-slot-path'),\n isEmpty,\n parentComponentId: componentId,\n parentNodeId: nodeId,\n },\n },\n '*'\n );\n }\n\n private handleComposerDropAtPoint(x: number, y: number): void {\n if (typeof document === 'undefined') return;\n const htmlEl = this.resolveSlotAtPoint(x, y);\n this.clearComposerDragHighlight();\n if (!htmlEl) return;\n this.postDropOnSlot(htmlEl);\n }\n\n /**\n * Enable component highlighting\n */\n private enableHighlighting(\n componentRegistry: ComponentRegistryItem[],\n highlightComponents: boolean,\n showZones: boolean\n ): void {\n if (typeof document === 'undefined') return;\n\n // Preserve selection across highlight refreshes — Composer re-sends\n // ENABLE_HIGHLIGHTING on parent re-renders, which must not wipe the ring.\n const previouslySelected = Array.from(\n document.querySelectorAll('.amplifyup-selected')\n ) as HTMLElement[];\n\n this.componentRegistry = componentRegistry;\n this.highlightingEnabled = true;\n this.highlightComponentsEnabled = highlightComponents;\n this.showZonesEnabled = showZones;\n\n // Clean up existing highlights first (keep selection classes)\n this.disableHighlighting({ clearSelection: false });\n this.highlightingEnabled = true;\n\n this.injectComposerHighlightStyles(highlightComponents, showZones);\n\n if (highlightComponents || showZones) {\n this.applyComponentHighlights(highlightComponents, showZones);\n this.setupMutationObserver();\n this.setupComposerDragDrop();\n this.setupComposerBoundsTracking();\n }\n\n previouslySelected.forEach((el) => {\n if (document.contains(el)) {\n el.classList.add('amplifyup-selected');\n }\n });\n\n if (typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_COMPOSER_EDIT__ = highlightComponents;\n window.dispatchEvent(\n new CustomEvent('amplifyup:composer-edit', {\n detail: { enabled: highlightComponents },\n })\n );\n }\n }\n\n /** Document-level drag/drop for cross-iframe drags from Composer sidebar. */\n private setupComposerDragDrop(): void {\n if (typeof document === 'undefined') return;\n this.teardownComposerDragDrop();\n\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n const componentSelector =\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id]';\n\n const clearDragOverState = () => {\n this.clearComposerDragHighlight();\n };\n\n const clearComponentHover = () => {\n document.querySelectorAll('.amplifyup-component-hover').forEach((el) => {\n el.classList.remove('amplifyup-component-hover');\n });\n };\n\n const clearSlotHover = () => {\n document.querySelectorAll(`${slotSelector}.amplifyup-slot-hover`).forEach((el) => {\n el.classList.remove('amplifyup-slot-hover');\n });\n };\n\n const dragenter = (e: DragEvent) => {\n e.preventDefault();\n // Don't toggle no-drop here — dragover owns highlight state (avoids enter/over flicker).\n };\n\n const dragover = (e: DragEvent) => {\n e.preventDefault();\n // Parent overlay owns highlight via postMessage — don't fight it.\n if (this.composerOverlayDragActive) {\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy';\n return;\n }\n const slot = this.resolveSlotAtPoint(e.clientX, e.clientY);\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = slot ? 'copy' : 'none';\n }\n this.setComposerDragHighlight(slot, e.clientX, e.clientY);\n };\n\n const dragleave = (e: DragEvent) => {\n // Overlay in the parent steals the drag; the iframe then gets a document\n // dragleave with relatedTarget=null. Clearing here broke the first pass.\n if (this.composerOverlayDragActive) return;\n const related = e.relatedTarget as Node | null;\n if (!related || !document.body.contains(related)) {\n clearDragOverState();\n }\n };\n\n const drop = (e: DragEvent) => {\n e.preventDefault();\n const slot = this.resolveSlotAtPoint(e.clientX, e.clientY);\n clearDragOverState();\n if (!slot || !this.isVisualEditorMode) return;\n this.postDropOnSlot(slot);\n };\n\n const mouseover = (e: MouseEvent) => {\n if (!this.highlightComponentsEnabled && !this.showZonesEnabled) return;\n const target = e.target as Element | null;\n if (!target?.closest) return;\n\n const component = target.closest(componentSelector) as HTMLElement | null;\n const slot = target.closest(slotSelector) as HTMLElement | null;\n const pageSlot =\n slot && slot.getAttribute('data-slot-source') === 'page' ? slot : null;\n\n if (this.highlightComponentsEnabled && component) {\n if (!component.classList.contains('amplifyup-component-hover')) {\n clearComponentHover();\n component.classList.add('amplifyup-component-hover');\n }\n if (slot && !component.contains(slot)) {\n clearSlotHover();\n }\n return;\n }\n\n clearComponentHover();\n\n if (this.showZonesEnabled && slot && !pageSlot) {\n if (!slot.classList.contains('amplifyup-slot-hover')) {\n clearSlotHover();\n slot.classList.add('amplifyup-slot-hover');\n }\n }\n };\n\n const mouseout = (e: MouseEvent) => {\n if (!this.highlightComponentsEnabled && !this.showZonesEnabled) return;\n const related = e.relatedTarget as Element | null;\n if (this.highlightComponentsEnabled) {\n if (!related?.closest?.(componentSelector)) {\n clearComponentHover();\n }\n }\n if (this.showZonesEnabled) {\n if (!related?.closest?.(slotSelector)) {\n clearSlotHover();\n }\n }\n };\n\n document.addEventListener('mouseover', mouseover, true);\n document.addEventListener('mouseout', mouseout, true);\n\n if (this.showZonesEnabled) {\n document.addEventListener('dragenter', dragenter, false);\n document.addEventListener('dragover', dragover, false);\n document.addEventListener('dragleave', dragleave, false);\n document.addEventListener('drop', drop, false);\n }\n\n this.composerDragHandlers = {\n dragenter,\n dragover,\n dragleave,\n drop,\n mouseover,\n mouseout,\n };\n }\n\n private teardownComposerDragDrop(): void {\n if (!this.composerDragHandlers || typeof document === 'undefined') return;\n const h = this.composerDragHandlers;\n document.removeEventListener('dragenter', h.dragenter, false);\n document.removeEventListener('dragover', h.dragover, false);\n document.removeEventListener('dragleave', h.dragleave, false);\n document.removeEventListener('drop', h.drop, false);\n document.removeEventListener('mouseover', h.mouseover, true);\n document.removeEventListener('mouseout', h.mouseout, true);\n this.composerDragHandlers = null;\n this.composerOverlayDragActive = false;\n this.lastComposerDragSlot = null;\n this.composerDragMissFrames = 0;\n document.body.classList.remove('amplifyup-drag-no-drop');\n document.body.classList.remove('amplifyup-composer-dragging');\n document.querySelectorAll('[data-slot-id].amplifyup-drag-over-slot, [data-amplifyup-slot].amplifyup-drag-over-slot').forEach((el) => {\n el.classList.remove('amplifyup-drag-over-slot');\n });\n document.querySelectorAll('[data-slot-id].amplifyup-slot-hover, [data-amplifyup-slot].amplifyup-slot-hover').forEach((el) => {\n el.classList.remove('amplifyup-slot-hover');\n });\n document.querySelectorAll('.amplifyup-component-hover').forEach((el) => {\n el.classList.remove('amplifyup-component-hover');\n });\n }\n\n private clearComposerSelection(): void {\n if (typeof document === 'undefined') return;\n document\n .querySelectorAll(\n '[data-slot-id].amplifyup-selected, [data-amplifyup-slot].amplifyup-selected, [data-amplifyup-component].amplifyup-selected, [data-component-id].amplifyup-selected'\n )\n .forEach((el) => el.classList.remove('amplifyup-selected'));\n }\n\n private markComposerSelection(element: HTMLElement): void {\n if (typeof document === 'undefined') return;\n this.clearComposerSelection();\n element.classList.add('amplifyup-selected');\n }\n\n private postComposerSelectionBounds(): void {\n if (typeof document === 'undefined') return;\n if (!window.parent || window.parent === window) return;\n const el = document.querySelector('.amplifyup-selected') as HTMLElement | null;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n window.parent.postMessage(\n {\n type: 'SELECTION_BOUNDS',\n bounds: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n },\n '*'\n );\n }\n\n private setupComposerBoundsTracking(): void {\n if (typeof document === 'undefined') return;\n this.teardownComposerBoundsTracking();\n const onScroll = () => {\n if (this.composerBoundsRaf) return;\n this.composerBoundsRaf = requestAnimationFrame(() => {\n this.composerBoundsRaf = 0;\n this.postComposerSelectionBounds();\n });\n };\n this.composerBoundsScrollListener = onScroll;\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n window.addEventListener('scroll', onScroll, { capture: true, passive: true });\n window.addEventListener('resize', onScroll);\n }\n\n private teardownComposerBoundsTracking(): void {\n const onScroll = this.composerBoundsScrollListener;\n this.composerBoundsScrollListener = null;\n if (this.composerBoundsRaf) {\n cancelAnimationFrame(this.composerBoundsRaf);\n this.composerBoundsRaf = 0;\n }\n if (!onScroll || typeof document === 'undefined') return;\n document.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onScroll);\n }\n\n /** Visual outlines for Composer (direct iframe path — no preview-frame proxy). */\n private injectComposerHighlightStyles(\n highlightComponents: boolean,\n showZones: boolean\n ): void {\n if (typeof document === 'undefined') return;\n if (!highlightComponents && !showZones) return;\n\n const existing = document.getElementById('amplifyup-preview-highlights');\n if (existing) existing.remove();\n\n const primary = 'hsl(82 100% 52%)';\n const lines: string[] = [];\n if (highlightComponents) {\n lines.push(\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id] {',\n ' cursor: pointer !important;',\n '}',\n '[data-amplifyup-component].amplifyup-selected, [data-component-id].amplifyup-selected, [data-amplifyup-node].amplifyup-selected, [data-node-id].amplifyup-selected {',\n ` outline: 2px solid ${primary} !important;`,\n ' outline-offset: -2px !important;',\n ' box-shadow: inset 0 0 0 1px hsl(82 100% 52% / 0.25) !important;',\n '}',\n '[data-amplifyup-component].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-component-id].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-amplifyup-node].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-node-id].amplifyup-component-hover:not(.amplifyup-selected) {',\n ` outline: 2px solid ${primary} !important;`,\n ' outline-offset: -2px !important;',\n '}'\n );\n }\n if (highlightComponents || showZones) {\n lines.push(\n '[data-slot-id].amplifyup-selected, [data-amplifyup-slot].amplifyup-selected {',\n ' background-color: hsl(82 100% 52% / 0.12) !important;',\n '}'\n );\n }\n if (showZones) {\n lines.push(\n '[data-slot-id], [data-amplifyup-slot] {',\n ' outline: 2px dotted rgba(34, 197, 94, 0.75) !important;',\n ' outline-offset: 4px !important;',\n ' min-height: 3rem !important;',\n ' padding: 20px !important;',\n ' box-sizing: border-box !important;',\n ' cursor: pointer !important;',\n ' position: relative !important;',\n '}',\n '[data-slot-id=\"main\"], [data-amplifyup-slot=\"main\"] {',\n ' min-height: 50vh !important;',\n '}',\n /* Empty-slot CTA — Slot / AmplifyPageContent EmptySlotHint */\n '.amplifyup-slot-placeholder {',\n ' display: flex !important;',\n ' flex-direction: column !important;',\n ' align-items: center !important;',\n ' justify-content: center !important;',\n ' gap: 12px !important;',\n ' min-height: inherit !important;',\n ' color: rgba(22, 163, 74, 0.85) !important;',\n ' font-size: 15px !important;',\n ' font-weight: 600 !important;',\n ' pointer-events: none !important;',\n ' text-align: center !important;',\n ' box-sizing: border-box !important;',\n '}',\n '.amplifyup-slot-placeholder-icon {',\n ' color: inherit !important;',\n '}',\n '.amplifyup-slot-placeholder-label {',\n ' color: inherit !important;',\n '}',\n '.amplifyup-slot-label {',\n ' pointer-events: none !important;',\n '}',\n '[data-slot-id].amplifyup-slot-hover, [data-amplifyup-slot].amplifyup-slot-hover {',\n ' outline-color: rgba(34, 197, 94, 1) !important;',\n ' background: rgba(34, 197, 94, 0.06) !important;',\n '}',\n /* During any Composer drag, hide idle slot labels so they don't flash\n when the active drag-over class briefly changes */\n 'body.amplifyup-composer-dragging .amplifyup-slot-placeholder {',\n ' visibility: hidden !important;',\n ' opacity: 0 !important;',\n '}',\n 'body.amplifyup-composer-dragging [data-slot-id]::before,',\n 'body.amplifyup-composer-dragging [data-amplifyup-slot]::before {',\n ' content: none !important;',\n '}',\n '[data-slot-id].amplifyup-drag-over-slot, [data-amplifyup-slot].amplifyup-drag-over-slot {',\n ' outline: 2px solid rgba(34, 197, 94, 1) !important;',\n ' background: rgba(34, 197, 94, 0.18) !important;',\n ' position: relative !important;',\n '}',\n '[data-slot-id].amplifyup-drag-over-slot::after,',\n '[data-amplifyup-slot].amplifyup-drag-over-slot::after {',\n ' content: \"\\\\2713 Drop here\" !important;',\n ' position: absolute !important;',\n ' top: 50% !important; left: 50% !important;',\n ' transform: translate(-50%, -50%) !important;',\n ' font-size: 14px !important; font-weight: 600 !important;',\n ' color: rgb(22, 163, 74) !important;',\n ' pointer-events: none !important;',\n ' white-space: nowrap !important;',\n ' z-index: 2 !important;',\n '}',\n 'body.amplifyup-drag-no-drop { cursor: no-drop !important; }',\n 'body.amplifyup-drag-no-drop::before {',\n ' content: \"\" !important;',\n ' position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important;',\n ' background: rgba(239, 68, 68, 0.06) !important;',\n ' pointer-events: none !important;',\n ' z-index: 2147483646 !important;',\n '}',\n 'body.amplifyup-drag-no-drop::after {',\n ' content: \"\\\\2717 Not a drop zone\" !important;',\n ' position: fixed !important; bottom: 12px !important; right: 12px !important;',\n ' font-size: 12px !important; font-weight: 600 !important;',\n ' color: rgb(185, 28, 28) !important;',\n ' background: rgba(254, 226, 226, 0.95) !important;',\n ' padding: 6px 10px !important; border-radius: 6px !important;',\n ' pointer-events: none !important;',\n ' z-index: 2147483647 !important;',\n ' box-shadow: 0 1px 3px rgba(0,0,0,0.1) !important;',\n '}'\n );\n }\n\n const style = document.createElement('style');\n style.id = 'amplifyup-preview-highlights';\n style.textContent = lines.join('\\n');\n document.head.appendChild(style);\n }\n\n /**\n * Set up MutationObserver to watch for new components being added\n */\n private setupMutationObserver(): void {\n if (typeof document === 'undefined' || !window.MutationObserver) return;\n\n // Clean up existing observer\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n\n this.mutationObserver = new MutationObserver((mutations) => {\n let shouldReapply = false;\n \n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n // Check if the added node or its children have component markers or slot markers\n if (el.hasAttribute('data-amplifyup-component') || \n el.hasAttribute('data-component-id') ||\n el.hasAttribute('data-amplifyup-slot') ||\n el.hasAttribute('data-slot-id') ||\n el.querySelector('[data-amplifyup-component], [data-component-id], [data-amplifyup-slot], [data-slot-id]')) {\n shouldReapply = true;\n }\n }\n });\n // Also check for attribute changes (e.g., slot becoming empty/filled)\n if (mutation.type === 'attributes') {\n const target = mutation.target as HTMLElement;\n if (target.hasAttribute('data-amplifyup-slot') || \n target.hasAttribute('data-slot-id') ||\n target.hasAttribute('data-slot-empty')) {\n shouldReapply = true;\n }\n }\n });\n\n if (shouldReapply && this.highlightingEnabled) {\n // Debounce re-application\n setTimeout(() => {\n if (this.highlightingEnabled) {\n this.applyComponentHighlights(\n this.highlightComponentsEnabled,\n this.showZonesEnabled\n );\n }\n }, 100);\n }\n });\n\n this.mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-amplifyup-component', 'data-component-id', 'data-amplifyup-slot', 'data-slot-id', 'data-slot-empty'],\n });\n }\n\n /**\n * Disable component highlighting\n */\n private disableHighlighting(opts?: { clearSelection?: boolean }): void {\n if (typeof document === 'undefined') return;\n\n const clearSelection = opts?.clearSelection !== false;\n\n this.highlightingEnabled = false;\n this.teardownComposerBoundsTracking();\n this.teardownComposerDragDrop();\n\n if (opts?.clearSelection !== false && typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_COMPOSER_EDIT__ = false;\n window.dispatchEvent(\n new CustomEvent('amplifyup:composer-edit', { detail: { enabled: false } })\n );\n }\n\n // Disconnect MutationObserver\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n\n // Remove injected Composer highlight styles\n document.getElementById('amplifyup-preview-highlights')?.remove();\n\n // Remove all highlights and event listeners for components (SDK no longer adds overlays)\n document.querySelectorAll('.amplifyup-component-highlight').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const handlers = (htmlEl as any)._amplifyupHandlers;\n if (handlers?.handleClick) {\n htmlEl.removeEventListener('click', handlers.handleClick);\n }\n delete (htmlEl as any)._amplifyupHandlers;\n htmlEl.classList.remove('amplifyup-component-highlight');\n });\n\n // Remove all highlights and event listeners for slots\n document.querySelectorAll('.amplifyup-slot-highlight').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const handlers = (htmlEl as any)._amplifyupSlotHandlers;\n if (handlers) {\n if (handlers.handleClick) htmlEl.removeEventListener('click', handlers.handleClick);\n if (handlers.handleDragOver) htmlEl.removeEventListener('dragover', handlers.handleDragOver);\n if (handlers.handleDragLeave) htmlEl.removeEventListener('dragleave', handlers.handleDragLeave);\n if (handlers.handleDrop) htmlEl.removeEventListener('drop', handlers.handleDrop);\n }\n delete (htmlEl as any)._amplifyupSlotHandlers;\n htmlEl.classList.remove('amplifyup-slot-highlight');\n });\n\n if (clearSelection) {\n this.clearComposerSelection();\n }\n }\n private buildComponentHierarchy(element: HTMLElement): HTMLElement[] {\n const hierarchy: HTMLElement[] = [];\n let current: HTMLElement | null = element;\n let sawPageSlot = false;\n\n while (current) {\n // Check if this element is a component or slot\n if (current.hasAttribute('data-amplifyup-component') || \n current.hasAttribute('data-component-id') ||\n current.hasAttribute('data-amplifyup-slot') ||\n current.hasAttribute('data-slot-id') ||\n current.hasAttribute('data-node-id') ||\n current.hasAttribute('data-amplifyup-node')) {\n hierarchy.push(current);\n if (current.getAttribute('data-slot-source') === 'page') {\n sawPageSlot = true;\n }\n }\n current = current.parentElement;\n }\n\n const ordered = hierarchy.reverse(); // Return from root to leaf\n\n // Ensure Page canvas is always climbable for in-main components\n if (!sawPageSlot) {\n const pageSlot =\n element.closest('[data-slot-source=\"page\"]') as HTMLElement | null;\n if (pageSlot && !ordered.includes(pageSlot)) {\n ordered.unshift(pageSlot);\n }\n }\n\n return ordered;\n }\n\n /**\n * Send selection message to orchestrator (includes element bounds for overlay positioning).\n */\n private sendSelectionMessage(element: HTMLElement, hierarchy: HTMLElement[], isEmpty?: boolean): void {\n // Only send messages in visual editor mode\n if (!this.isVisualEditorMode) return;\n\n const componentId = element.getAttribute('data-amplifyup-component') || element.getAttribute('data-component-id');\n // Don't treat component wrappers as slots even if a parent slot attr leaked onto the node\n const slotName = componentId\n ? null\n : (element.getAttribute('data-amplifyup-slot') || element.getAttribute('data-slot-id'));\n const componentName = element.getAttribute('data-component-name');\n const nodeId =\n element.getAttribute('data-node-id') ||\n element.closest('[data-node-id]')?.getAttribute('data-node-id') ||\n null;\n\n // Build hierarchy info — component markers win over slot markers on the same node\n const hierarchyInfo = hierarchy.map((el, index) => {\n const elComponentId = el.getAttribute('data-amplifyup-component') || el.getAttribute('data-component-id');\n const elSlotName =\n el.getAttribute('data-amplifyup-slot') || el.getAttribute('data-slot-id');\n const elComponentName = el.getAttribute('data-component-name');\n const isSlot = !elComponentId && !!elSlotName;\n const isPageSlot = isSlot && el.getAttribute('data-slot-source') === 'page';\n const nodeId =\n el.getAttribute('data-node-id') ||\n (isSlot ? el.getAttribute('data-parent-node-id') : null);\n \n return {\n index,\n componentId: elComponentId,\n componentName: isPageSlot ? 'Page' : elComponentName,\n slotName: isSlot ? elSlotName : null,\n isSlot,\n isPageSlot,\n nodeId,\n };\n });\n\n // Bounds relative to viewport (iframe when embedded) for orchestrator overlay positioning\n const rect = element.getBoundingClientRect ? element.getBoundingClientRect() : null;\n const bounds = rect ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height } : undefined;\n\n const message: Record<string, unknown> = {\n type: 'COMPONENT_SELECTED',\n componentId,\n componentName,\n slotName,\n nodeId,\n hierarchy: hierarchyInfo,\n selectedIndex: hierarchy.length - 1,\n ...(bounds && { bounds }),\n ...(isEmpty !== undefined && { isEmpty }),\n };\n\n // Send to parent window (orchestrator)\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(message, '*');\n console.log('[AmplifyUp SDK] Sent selection message:', message);\n }\n\n this.markComposerSelection(element);\n }\n\n /**\n * Send component tree to orchestrator\n * Note: Component tree is now sent from AmplifyRenderer based on layoutTree from pageConfig\n * This method is kept for backwards compatibility but is no longer used\n */\n private sendComponentTree(): void {\n // Component tree is now sent from AmplifyRenderer component\n // based on the layoutTree from pageConfig, not from DOM scanning\n // This method is deprecated but kept for backwards compatibility\n console.log('[AmplifyUp SDK] sendComponentTree called but component tree is now sent from AmplifyRenderer');\n }\n\n /**\n * Apply component highlights\n */\n private applyComponentHighlights(\n highlightComponents = true,\n showZones = true\n ): void {\n if (typeof document === 'undefined') return;\n \n // Only apply highlights in visual editor mode\n if (!this.isVisualEditorMode) {\n return;\n }\n\n const doc = document;\n const win = window;\n\n if (highlightComponents) {\n const componentElements = doc.querySelectorAll(\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id]'\n );\n console.log('[AmplifyUp SDK] Found', componentElements.length, 'components to highlight');\n\n componentElements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n const componentId = htmlEl.getAttribute('data-amplifyup-component') || htmlEl.getAttribute('data-component-id');\n const isLayoutNode =\n htmlEl.hasAttribute('data-node-id') || htmlEl.hasAttribute('data-amplifyup-node');\n if (!componentId && !isLayoutNode) return;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n\n const component = componentId\n ? this.componentRegistry.find(c => c.component_id === componentId)\n : undefined;\n htmlEl.classList.add('amplifyup-component-highlight');\n if (componentId) {\n htmlEl.setAttribute('data-component-id', componentId);\n htmlEl.setAttribute('data-component-name', component?.component_name || componentId);\n }\n\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy);\n if (componentId && window.parent && window.parent !== window) {\n window.parent.postMessage({ type: 'CHECK_COMPONENT_DELETABLE', componentId }, '*');\n }\n };\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupHandlers = { handleClick };\n });\n\n this.componentRegistry.forEach((component) => {\n if (!component.data_attribute) return;\n const elements = doc.querySelectorAll(`[${component.data_attribute}]`);\n elements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n htmlEl.classList.add('amplifyup-component-highlight');\n htmlEl.setAttribute('data-component-id', component.component_id);\n htmlEl.setAttribute('data-component-name', component.component_name);\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy);\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: 'CHECK_COMPONENT_DELETABLE', componentId: component.component_id }, '*');\n }\n };\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupHandlers = { handleClick };\n });\n });\n }\n\n if (showZones) {\n const slotElements = doc.querySelectorAll('[data-amplifyup-slot], [data-slot-id]');\n console.log('[AmplifyUp SDK] Found', slotElements.length, 'slots to highlight');\n\n slotElements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n const slotName =\n htmlEl.getAttribute('data-amplifyup-slot') ||\n htmlEl.getAttribute('data-slot-id');\n const isEmpty = htmlEl.getAttribute('data-slot-empty') === 'true';\n if (!slotName) return;\n if (htmlEl.classList.contains('amplifyup-slot-highlight')) return;\n\n htmlEl.classList.add('amplifyup-slot-highlight');\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n\n const handleClick = (e: MouseEvent) => {\n const clickTarget = e.target as HTMLElement | null;\n if (\n htmlEl.getAttribute('data-slot-source') === 'page' &&\n clickTarget?.closest\n ) {\n const nested = clickTarget.closest(\n '[data-node-id], [data-amplifyup-node], [data-amplifyup-component], [data-component-id]'\n );\n if (nested && nested !== htmlEl && htmlEl.contains(nested)) {\n return;\n }\n }\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy, isEmpty);\n };\n\n // Document-level handlers own drag highlight/drop (per-slot listeners caused flicker).\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupSlotHandlers = { handleClick };\n });\n }\n }\n\n /**\n * Cleanup: Remove message listener and observers\n */\n cleanup(): void {\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener);\n this.messageListener = null;\n }\n this.disableHighlighting();\n }\n}\n\n// Create singleton instance (persist across Fast Refresh / Turbopack HMR)\ndeclare global {\n interface Window {\n __AMPLIFYUP_SDK__?: AmplifyUpSDK;\n }\n}\n\nlet sdkInstance: AmplifyUpSDK | null = null;\n\nif (typeof window !== 'undefined' && window.__AMPLIFYUP_SDK__) {\n sdkInstance = window.__AMPLIFYUP_SDK__;\n}\n\n/**\n * Get or create the SDK instance\n */\nexport function getSDK(adapter?: CDPAdapter): AmplifyUpSDK {\n if (!sdkInstance) {\n sdkInstance = new AmplifyUpSDK(adapter);\n if (typeof window !== 'undefined') {\n window.__AMPLIFYUP_SDK__ = sdkInstance;\n }\n }\n sdkInstance.ensureWindowBridge();\n return sdkInstance;\n}\n\n/**\n * Initialize the SDK (convenience function)\n */\nexport async function init(config: AmplifyUpConfig): Promise<void> {\n const sdk = getSDK();\n await sdk.init(config);\n}\n\n// Export all public methods\nexport const page = (url: string, properties?: EventProperties) => getSDK().page(url, properties);\nexport const routeChange = (url?: string, properties?: EventProperties) =>\n getSDK().routeChange(url, properties);\nexport const track = (eventName: string, properties?: EventProperties) => getSDK().track(eventName, properties);\nexport const trackClick = (elementId: string, elementText: string, properties?: EventProperties) => \n getSDK().trackClick(elementId, elementText, properties);\nexport const trackFormSubmit = (formId: string, formData?: EventProperties) => \n getSDK().trackFormSubmit(formId, formData);\nexport const trackFormFieldInteraction = (fieldName: string, fieldValue?: string) => \n getSDK().trackFormFieldInteraction(fieldName, fieldValue);\nexport const trackContentView = (contentId: string, contentType: string, properties?: EventProperties) => \n getSDK().trackContentView(contentId, contentType, properties);\nexport const identify = (\n userIdOrIdentifiers: IdentifyInput,\n traits?: IdentifyTraits\n) => getSDK().identify(userIdOrIdentifiers, traits);\nexport const setProfileFields = (fields: ProfileFieldsInput) =>\n getSDK().setProfileFields(fields);\nexport const trackContentEngagement = (contentId: string, engagementType: 'view' | 'click' | 'dismiss') => \n getSDK().trackContentEngagement(contentId, engagementType);\nexport const reset = () => getSDK().reset();\nexport const getInstanceId = () => getSDK().getInstanceId();\nexport const getSessionId = () => getSDK().getSessionId();\nexport const getUserId = () => getSDK().getUserId();\nexport const getTrackingId = () => getSDK().getTrackingId();\nexport const getTarget = () => getSDK().getTarget();\nexport const getOrchestratorUrl = () => getSDK().getOrchestratorUrl();\nexport const buildLayoutProviderUrl = (route: string, preview?: boolean) => getSDK().buildLayoutProviderUrl(route, preview);\n// Deprecated alias for backwards compatibility\nexport const buildPageRenderUrl = (route: string, preview?: boolean) => getSDK().buildLayoutProviderUrl(route, preview);\nexport const fetchPageConfig = (route: string, preview?: boolean) => getSDK().fetchPageConfig(route, preview);\nexport const setupEventTracking = (config: EventTrackingConfigType[]) => getSDK().setupEventTracking(config);\nexport const cleanupEventTracking = () => getSDK().cleanupEventTracking();\nexport const refreshEventTracking = () => getSDK().refreshEventTracking();\nexport const setupComponentViewTracking = () => getSDK().setupComponentViewTracking();\nexport const getDiagnostics = () => getSDK().getDiagnostics();\nexport const getStatus = () => {\n const status = getSDK().getStatus();\n console.log(status);\n return getSDK().getDiagnostics();\n};\nexport const testTracking = () => getSDK().testTracking();\nexport const verifyAWSConnection = () => {\n const result = getSDK().verifyAWSConnection();\n console.log('AWS Connection Verification:', result.message);\n console.log('Full details:', result);\n return result;\n};\n\n// Export types\nexport type { \n AmplifyUpConfig, \n EventProperties, \n IdentifyTraits,\n IdentifyInput,\n ProfileFieldsInput,\n CDPAdapter,\n PageConfig,\n ZoneConfig,\n EventTrackingConfigType as EventTrackingConfig,\n AmplifyUpTarget,\n ContentSource,\n AmplifyContentMeta,\n};\n\nexport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n isAmplifyUpTarget,\n normalizeAmplifyUpTarget,\n} from './targets';\n\nexport { isComposerPreview, isPreviewRequest, isWorkingContentRequest } from './preview';\n\nexport { AMPLIFYUP_EDITOR_ROUTE, isAmplifyUpEditorRoute } from './reservedRoutes';\n\nexport {\n fetchContent,\n type FetchContentResult,\n type FetchContentOptions,\n} from './content/fetchContent';\n\nexport { fetchEdgeResolve, EdgeResolveError } from './edge/resolve';\nexport { mapResolvedToPageConfig } from './edge/mapResolvedToPageConfig';\nexport { normalizeRoute } from './edge/normalizeRoute';\nexport {\n selectVariants,\n fetchEdgeSelect,\n SelectVariantsError,\n type SelectVariantsOptions,\n type FetchEdgeSelectOptions,\n type SelectVariantsResult,\n} from './edge/select';\n\nexport {\n queryContent,\n fetchEdgeQuery,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type FetchEdgeQueryOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\n\n// Export default SDK instance\nexport default getSDK();\n\n// Export SDK class for advanced usage\nexport { AmplifyUpSDK };\n\n","/**\n * Per-field overlay store for Composer. Listeners are keyed by field name\n * so a patch re-renders only the bound component.\n */\n\nexport type ComposerFieldListener = () => void;\n\nexport class ComposerFieldStore {\n private values = new Map<string, unknown>();\n private listeners = new Map<string, Set<ComposerFieldListener>>();\n\n get(name: string): unknown {\n return this.values.has(name) ? this.values.get(name) : undefined;\n }\n\n set(name: string, value: unknown): void {\n if (!name) return;\n this.values.set(name, value);\n const set = this.listeners.get(name);\n if (!set) return;\n for (const fn of set) fn();\n }\n\n subscribe(name: string, fn: ComposerFieldListener): () => void {\n if (!name) return () => {};\n let set = this.listeners.get(name);\n if (!set) {\n set = new Set();\n this.listeners.set(name, set);\n }\n set.add(fn);\n return () => {\n set!.delete(fn);\n if (set!.size === 0) this.listeners.delete(name);\n };\n }\n\n keys(): string[] {\n return [...this.values.keys()];\n }\n\n delete(name: string): void {\n if (!name || !this.values.has(name)) return;\n this.values.delete(name);\n const set = this.listeners.get(name);\n if (!set) return;\n for (const fn of set) fn();\n }\n}\n","'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react';\nimport { ComposerFieldStore } from './composer-store';\nimport {\n collectFieldPatches,\n composerStoreKey,\n isFieldRef,\n type FieldRef,\n} from './field-envelope';\n\nconst ComposerStoreContext = createContext<ComposerFieldStore | null>(null);\nconst ComposerNodeContext = createContext<string | undefined>(undefined);\n\nfunction applyComposerPatch(\n store: ComposerFieldStore,\n name: string,\n value: unknown,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): void {\n store.set(composerStoreKey(name, ref, layoutNodeId), value);\n}\n\nexport function ComposerProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const existing = useContext(ComposerStoreContext);\n const storeRef = useRef<ComposerFieldStore | null>(null);\n if (!storeRef.current) storeRef.current = new ComposerFieldStore();\n const store = existing || storeRef.current;\n\n useEffect(() => {\n if (existing) return;\n const applyField = (\n fieldName: unknown,\n value: unknown,\n nodeId: unknown,\n ref: unknown\n ) => {\n if (!fieldName || typeof fieldName !== 'string') return;\n const fieldRef = isFieldRef(ref) ? ref : undefined;\n const layoutNodeId =\n typeof nodeId === 'string' && nodeId ? nodeId : undefined;\n applyComposerPatch(store, fieldName, value, fieldRef, layoutNodeId);\n };\n const applyProps = (nextProps: unknown, nodeId: unknown) => {\n if (!nextProps || typeof nextProps !== 'object' || Array.isArray(nextProps)) {\n return;\n }\n const layoutNodeId =\n typeof nodeId === 'string' && nodeId ? nodeId : undefined;\n for (const patch of collectFieldPatches(\n nextProps as Record<string, unknown>\n )) {\n applyComposerPatch(\n store,\n patch.name,\n patch.value,\n patch.ref,\n patch.ref ? undefined : layoutNodeId\n );\n }\n };\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyField(\n detail.fieldName,\n detail.value,\n detail.layoutNodeId,\n detail.ref\n );\n };\n const onPropsPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyProps(detail.props, detail.layoutNodeId);\n };\n const onMessage = (event: MessageEvent) => {\n if (event.data?.type === 'AMPLIFYUP_PROPS_PATCH') {\n applyProps(event.data.props, event.data.layoutNodeId);\n return;\n }\n if (event.data?.type !== 'AMPLIFYUP_FIELD_PATCH') return;\n applyField(\n event.data.fieldName,\n event.data.value,\n event.data.layoutNodeId,\n event.data.ref\n );\n };\n window.addEventListener('amplifyup:field-patch', onPatch);\n window.addEventListener('amplifyup:props-patch', onPropsPatch);\n window.addEventListener('message', onMessage);\n return () => {\n window.removeEventListener('amplifyup:field-patch', onPatch);\n window.removeEventListener('amplifyup:props-patch', onPropsPatch);\n window.removeEventListener('message', onMessage);\n };\n }, [existing, store]);\n\n if (existing) return <>{children}</>;\n return (\n <ComposerStoreContext.Provider value={store}>\n {children}\n </ComposerStoreContext.Provider>\n );\n}\n\n/** Overlay for one field. No-ops when ComposerProvider is absent. */\nexport function useComposerFieldValue(\n name: string,\n fallback: unknown,\n ref?: FieldRef | null\n): unknown {\n const store = useContext(ComposerStoreContext);\n const layoutNodeId = useContext(ComposerNodeContext);\n const key = composerStoreKey(name, ref, layoutNodeId);\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n if (!store || !name) return () => {};\n return store.subscribe(key, onStoreChange);\n },\n [store, name, key]\n );\n const getSnapshot = useCallback(() => {\n if (!store || !name) return undefined;\n return store.get(key);\n }, [store, name, key]);\n const overlay = useSyncExternalStore(subscribe, getSnapshot, () => undefined);\n return overlay !== undefined ? overlay : fallback;\n}\n\nexport function useComposerStore(): ComposerFieldStore | null {\n return useContext(ComposerStoreContext);\n}\n\nexport function MaybeComposerProvider({\n enabled,\n layoutNodeId,\n children,\n}: {\n enabled: boolean;\n layoutNodeId?: string;\n children: ReactNode;\n}) {\n const content = useMemo(() => children, [children]);\n if (!enabled) return <>{content}</>;\n return (\n <ComposerProvider>\n <ComposerNodeContext.Provider value={layoutNodeId}>\n {children}\n </ComposerNodeContext.Provider>\n </ComposerProvider>\n );\n}\n","/**\n * AmplifyRenderer Component\n * \n * Main rendering component that handles page configuration fetching,\n * tree rendering, zone variants, and all rendering logic.\n * \n * Supports both server-side rendering (SSR/SSG) and client-side rendering.\n * - If `pageConfig` prop is provided, it can be used in server components\n * - If not provided, it uses the `useAmplifyUp()` hook (requires AmplifyUpProvider)\n * \n * Note: This is a client component (uses hooks for variant fetching).\n * However, it can be used in server components - the parent page can fetch\n * pageConfig server-side and pass it as a prop for better SSR/SSG support.\n */\n\n'use client';\n\nimport { Component, Fragment, memo, useEffect, useState, ReactNode } from 'react';\nimport { useAmplifyUp } from './react';\nimport { trackContentView, getSDK, refreshEventTracking } from './index';\nimport { isComposerPreview } from './preview';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport {\n brandFields,\n isBrandedFields,\n type LayoutComponentProps,\n} from './field-envelope';\nimport { ComposerProvider, MaybeComposerProvider } from './composer-provider';\nimport { sdkDebug, sdkDebugOnce } from './debug';\nimport type { PageConfig } from './types';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, any>;\n /** Composer config fields (show search, etc.) — merge under props for render. */\n settings?: Record<string, any>;\n slots?: LayoutSlot[];\n /** Set by Edge mapper — skip client Decision API when present. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction nodeRenderProps(node: LayoutNode): LayoutComponentProps {\n const settings = node.settings || {};\n const hydrated = hydratePageResourceProps(\n node.props || {},\n getPageResourceFields()\n );\n const fields = hydrated.fields;\n const branded = isBrandedFields(fields)\n ? fields\n : brandFields(\n fields && typeof fields === 'object'\n ? (fields as Record<string, unknown>)\n : {}\n );\n return {\n ...settings,\n ...hydrated,\n fields: branded,\n };\n}\n\ninterface LayoutSlot {\n slotId: string;\n children: LayoutNode[];\n zoneId?: string;\n variants?: SlotVariant[];\n campaignId?: string;\n}\n\ninterface SlotVariant {\n variantId: string;\n name: string;\n isDefault: boolean;\n children: LayoutNode[];\n}\n\n/** Isolates one layout node so a crashing site component cannot blank the page. */\nclass ComponentRenderBoundary extends Component<\n { componentId: string; nodeId: string; children: ReactNode },\n { error: Error | null }\n> {\n state: { error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error) {\n console.error(\n `[AmplifyRenderer] \"${this.props.componentId}\" (${this.props.nodeId}) threw while rendering:`,\n error\n );\n }\n\n render() {\n if (this.state.error) {\n if (process.env.NODE_ENV !== 'production') {\n return (\n <div\n data-amplifyup-render-error=\"\"\n data-component-id={this.props.componentId}\n data-node-id={this.props.nodeId}\n style={{\n margin: '1rem 0',\n padding: '0.75rem 1rem',\n border: '1px solid #fca5a5',\n borderRadius: '0.5rem',\n background: '#fef2f2',\n color: '#991b1b',\n fontSize: '0.875rem',\n }}\n >\n Component &quot;{this.props.componentId}&quot; failed to render:{' '}\n {this.state.error.message}\n </div>\n );\n }\n return null;\n }\n return this.props.children;\n }\n}\n\nfunction NodeWithFields({\n nodeId,\n componentId,\n props,\n slots,\n renderComponent,\n composerPreview,\n}: {\n nodeId: string;\n componentId: string;\n props: LayoutComponentProps;\n slots?: Record<string, ReactNode>;\n renderComponent: AmplifyRendererProps['renderComponent'];\n composerPreview?: boolean;\n}) {\n return (\n <MaybeComposerProvider\n enabled={!!(composerPreview || isComposerPreview())}\n layoutNodeId={nodeId}\n >\n {renderComponent(componentId, props, slots, {\n layoutNodeId: nodeId,\n })}\n </MaybeComposerProvider>\n );\n}\n\ninterface AmplifyRendererProps {\n /**\n * Component renderer function that maps componentId to React component\n * This is site-specific and must be provided by the developer\n */\n renderComponent: (\n componentId: string,\n props: LayoutComponentProps,\n slots?: Record<string, ReactNode>,\n context?: { layoutNodeId: string }\n ) => ReactNode;\n \n /**\n * Optional page config for server-side rendering (SSR/SSG)\n * If provided, the component will use this instead of fetching client-side\n */\n pageConfig?: PageConfig;\n \n /**\n * Optional loading component\n */\n loadingComponent?: ReactNode;\n \n /**\n * Optional error component\n */\n errorComponent?: (error: string) => ReactNode;\n \n /**\n * Optional empty state component (when no content is configured)\n */\n emptyComponent?: ReactNode;\n\n /**\n * Force Composer page-slot wrapper (avoids SSR miss when window isn't available yet).\n * When true, root components stay under [data-slot-source=\"page\"] so hierarchy can climb to Page.\n */\n composerPreview?: boolean;\n}\n\nfunction AmplifyRendererInner({\n renderComponent,\n pageConfig: serverPageConfig,\n loadingComponent,\n errorComponent,\n emptyComponent,\n composerPreview,\n}: AmplifyRendererProps) {\n // Always call the hook (required by React rules)\n // If serverPageConfig is provided, we'll use that instead\n const clientHook = useAmplifyUp();\n \n // Prefer server-provided config if available, otherwise use client hook\n const pageConfig = serverPageConfig || clientHook.pageConfig || null;\n const loading = serverPageConfig ? false : clientHook.loading;\n const error = serverPageConfig ? null : clientHook.error;\n const contentSource = clientHook.source;\n \n const [variantCache, setVariantCache] = useState<Record<string, { variantId: string; children: LayoutNode[] }>>({});\n\n // Track content view when page config is loaded (only if not in preview mode)\n useEffect(() => {\n // CRITICAL: Check if we're in preview/composer mode - exit immediately\n if (typeof window !== 'undefined') {\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Don't track in preview mode\n }\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Don't track in preview mode\n }\n if (window.self !== window.top) {\n return; // Don't track in iframe (preview mode)\n }\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Don't track in preview mode\n }\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Don't track in preview mode\n }\n }\n\n if (pageConfig && pageConfig.id !== 'default') {\n trackContentView(pageConfig.id, 'page', {\n route: pageConfig.route,\n title: pageConfig.title,\n });\n }\n }, [pageConfig]);\n\n // Wire Composer event_configs when config arrives via SSR (provider fetch already sets up)\n useEffect(() => {\n if (!pageConfig?.eventTracking?.length) return;\n const sdk = getSDK();\n if (!sdk.isInitialized()) return;\n sdk.setupEventTracking(pageConfig.eventTracking);\n const t1 = window.setTimeout(() => {\n sdk.setupComponentViewTracking();\n refreshEventTracking();\n }, 200);\n const t2 = window.setTimeout(() => {\n sdk.setupComponentViewTracking();\n refreshEventTracking();\n }, 1000);\n return () => {\n window.clearTimeout(t1);\n window.clearTimeout(t2);\n };\n }, [pageConfig?.id, pageConfig?.eventTracking]);\n\n // Re-attach after personalization variants settle (DOM may have changed)\n useEffect(() => {\n if (!pageConfig) return;\n const t = window.setTimeout(() => {\n getSDK().setupComponentViewTracking();\n refreshEventTracking();\n }, 100);\n return () => window.clearTimeout(t);\n }, [variantCache, pageConfig?.id]);\n\n // Send component tree to orchestrator when page config is loaded\n useEffect(() => {\n // Check if we're in visual editor mode before sending component tree\n const isVisualEditorMode = () => {\n if (typeof window === 'undefined') return false;\n \n // Check for query parameter\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('visualEditor') === 'true' || urlParams.get('preview') === 'true') {\n return true;\n }\n \n // Check if we're in an iframe\n const inIframe = window.self !== window.top;\n if (!inIframe) return false;\n \n // Check if parent is orchestrator\n try {\n if (document.referrer) {\n const referrerUrl = new URL(document.referrer);\n if (referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') {\n return true;\n }\n }\n } catch (e) {\n // Can't determine, assume not in editor\n }\n \n return false;\n };\n\n // Only send component tree if in visual editor mode\n if (!isVisualEditorMode()) {\n return;\n }\n\n if (!pageConfig) {\n return;\n }\n\n const rawTree = pageConfig.layoutTree;\n const normalizedTree: LayoutNode[] = Array.isArray(rawTree)\n ? rawTree\n : rawTree && typeof rawTree === 'object' && (rawTree as LayoutNode).componentId\n ? [rawTree as LayoutNode]\n : [];\n\n if (normalizedTree.length === 0) {\n // Send empty tree if no layout\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage({\n type: 'COMPONENT_TREE',\n tree: [],\n }, '*');\n }\n return;\n }\n\n // Convert layoutTree to component tree format\n const convertLayoutTreeToComponentTree = (nodes: LayoutNode[], parentId: string | null = null): any[] => {\n const result: any[] = [];\n \n nodes.forEach((node) => {\n if (!node) return;\n const treeNode = {\n id: node.id,\n componentId: node.componentId,\n componentName: node.componentId, // Will be enhanced with actual name if available\n parentId: parentId,\n children: [] as any[],\n };\n\n // Process slots and their children\n if (node.slots && node.slots.length > 0) {\n node.slots.forEach((slot) => {\n // Process direct children in slot\n const kids = Array.isArray(slot?.children) ? slot.children : [];\n if (kids.length > 0) {\n const slotChildren = convertLayoutTreeToComponentTree(kids, node.id);\n treeNode.children.push(...slotChildren);\n }\n });\n }\n\n result.push(treeNode);\n });\n\n return result;\n };\n\n const layoutTree = normalizedTree;\n const componentTree = convertLayoutTreeToComponentTree(layoutTree);\n\n // Log layoutTree structure so you can confirm slots and nested children (e.g. main -> Grid5050 -> two slots)\n const describeLayoutTree = (nodes: LayoutNode[], depth = 0): string => {\n if (!nodes?.length) return '';\n const indent = ' '.repeat(depth);\n return nodes.map((n) => {\n const slotsDesc = (n.slots || []).map((s: any) => {\n const childCount = Array.isArray(s.children) ? s.children.length : 0;\n const childrenDesc = childCount > 0 ? describeLayoutTree(s.children || [], depth + 1) : '';\n return `${indent} slot \"${s.slotId || s.slotName || '?'}\" (${childCount} children)${childrenDesc ? '\\n' + childrenDesc : ''}`;\n }).join('\\n');\n return `${indent}- ${n.id} (${n.componentId || '?'})${slotsDesc ? '\\n' + slotsDesc : ''}`;\n }).join('\\n');\n };\n sdkDebugOnce(\n `layoutTree:${pageConfig?.id || ''}:${pageConfig?.route || ''}`,\n '[AmplifyRenderer] layoutTree received:\\n%s',\n describeLayoutTree(layoutTree)\n );\n\n // Send to orchestrator\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n const message = {\n type: 'COMPONENT_TREE',\n tree: componentTree,\n };\n window.parent.postMessage(message, '*');\n sdkDebug(\n '[AmplifyRenderer] Sent component tree from layoutTree:',\n componentTree.length,\n 'root components'\n );\n }\n }, [pageConfig]);\n\n // Fetch variants for zoned slots (orchestrator / legacy trees only).\n // Edge resolve already selected variants — never re-personalize.\n useEffect(() => {\n if (!pageConfig?.layoutTree || !pageConfig.layoutId) return;\n\n const roots = pageConfig.layoutTree as LayoutNode[];\n const fromEdge =\n contentSource === 'edge' ||\n roots.some((n) => n._contentSource === 'edge');\n if (fromEdge) return;\n\n const sdk = getSDK();\n const instanceId = sdk.getInstanceId();\n const decisionApiUrl = sdk.getDecisionApiUrl();\n const orchestratorUrl = sdk.getOrchestratorUrl();\n // Need either Decision API (Pure AWS) or Orchestrator (legacy) for personalization\n if ((!decisionApiUrl && !orchestratorUrl) || !instanceId) return;\n\n const fetchVariants = async () => {\n const nodes = pageConfig.layoutTree as LayoutNode[];\n const newCache: Record<string, { variantId: string; children: LayoutNode[] }> = {};\n\n const findZonedSlots = (nodeList: LayoutNode[]): Array<{ node: LayoutNode; slot: LayoutSlot; key: string }> => {\n const results: Array<{ node: LayoutNode; slot: LayoutSlot; key: string }> = [];\n \n for (const node of nodeList) {\n if (node.slots) {\n for (const slot of node.slots) {\n if (slot.zoneId && slot.variants) {\n const key = `${node.id}-${slot.slotId}`;\n results.push({ node, slot, key });\n }\n }\n }\n }\n \n return results;\n };\n\n const zonedSlots = findZonedSlots(nodes);\n\n // Fetch variants for all zoned slots\n await Promise.all(\n zonedSlots.map(async ({ node, slot, key }) => {\n try {\n // Prefer AWS Decision API if available (Pure AWS architecture)\n // Otherwise fall back to Orchestrator endpoint (legacy)\n let personalizationUrl: string;\n \n if (decisionApiUrl) {\n // Use AWS Decision API\n const url = new URL(decisionApiUrl);\n url.searchParams.set('instanceId', instanceId);\n const zoneId = slot.zoneId;\n if (zoneId) {\n url.searchParams.set('zoneId', zoneId);\n }\n const campaignId = slot.campaignId;\n if (campaignId) {\n url.searchParams.set('campaignId', campaignId);\n }\n personalizationUrl = url.toString();\n } else if (orchestratorUrl) {\n // Fallback to Orchestrator variant endpoint\n personalizationUrl = `${orchestratorUrl}/api/personalization/variant?` +\n `instanceId=${encodeURIComponent(instanceId)}&` +\n `layoutId=${encodeURIComponent(pageConfig.layoutId!)}&` +\n `slotId=${encodeURIComponent(slot.slotId)}&` +\n `nodeId=${encodeURIComponent(node.id)}`;\n } else {\n // No personalization service available - skip this slot\n return;\n }\n \n const response = await fetch(personalizationUrl);\n\n if (response.ok) {\n const data = await response.json();\n if (data.variantId && data.componentTree) {\n newCache[key] = {\n variantId: data.variantId,\n children: data.componentTree,\n };\n \n // Track zone impression (only if not in preview mode)\n // track() method already checks preview mode, but double-check here\n if (typeof window !== 'undefined') {\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Don't track\n }\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Don't track\n }\n if (window.self !== window.top) {\n return; // Don't track in iframe\n }\n }\n sdk.track('Zone Impression', {\n zoneId: slot.zoneId,\n variantId: data.variantId,\n layoutId: pageConfig.layoutId,\n route: pageConfig.route,\n });\n } else {\n // Use default variant\n const defaultVariant = slot.variants?.find(v => v.isDefault);\n if (defaultVariant) {\n newCache[key] = {\n variantId: defaultVariant.variantId,\n children: defaultVariant.children,\n };\n }\n }\n }\n } catch (err) {\n console.error(`Error fetching variant for slot ${key}:`, err);\n // Fallback to default variant\n const defaultVariant = slot.variants?.find(v => v.isDefault);\n if (defaultVariant) {\n newCache[key] = {\n variantId: defaultVariant.variantId,\n children: defaultVariant.children,\n };\n }\n }\n })\n );\n\n setVariantCache(newCache);\n };\n\n fetchVariants();\n }, [pageConfig?.layoutTree, pageConfig?.layoutId, pageConfig?.route, contentSource]);\n\n // Render loading state\n if (loading) {\n return (\n <>\n {loadingComponent || (\n <div className=\"min-h-screen bg-gray-50\">\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"animate-pulse\">\n <div className=\"h-8 bg-gray-200 rounded w-1/4 mb-4\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-1/2 mb-8\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-64 bg-gray-200 rounded\"></div>\n <div className=\"h-32 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n }\n\n // Render error state\n if (error) {\n return (\n <>\n {errorComponent ? errorComponent(error) : (\n <div className=\"min-h-screen bg-gray-50\">\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-6\">\n <h1 className=\"text-2xl font-bold text-red-900 mb-2\">Error Loading Page</h1>\n <p className=\"text-red-700\">{error}</p>\n </div>\n </div>\n </div>\n )}\n </>\n );\n }\n\n // No page config\n if (!pageConfig) {\n return null;\n }\n\n // Determine if header/footer should be shown\n const showHeader = pageConfig.layout?.header !== false;\n const showFooter = pageConfig.layout?.footer !== false;\n\n // Render tree nodes recursively\n const renderNode = (node: LayoutNode): ReactNode => {\n const zoneIdFromProps =\n node.componentId === 'AmplifyZone'\n ? String(node.props?.zoneId || '')\n : '';\n\n // AmplifyZone is a system container — passthrough children (no Decision API yet)\n if (node.componentId === 'AmplifyZone') {\n const contentSlot =\n node.slots?.find((s) => s.slotId === 'content') || node.slots?.[0];\n const children = Array.isArray(contentSlot?.children)\n ? contentSlot!.children\n : [];\n return (\n <div\n data-node-id={node.id}\n data-amplifyup-node=\"\"\n data-amplifyup-component=\"AmplifyZone\"\n data-amplifyup-zone={zoneIdFromProps || undefined}\n data-zone-id={zoneIdFromProps || undefined}\n >\n <div\n data-slot-id=\"content\"\n data-amplifyup-slot=\"content\"\n data-parent-node-id={node.id}\n data-parent-component-id=\"AmplifyZone\"\n >\n {children.filter(Boolean).map((child) => (\n <Fragment key={child.id}>{renderNode(child)}</Fragment>\n ))}\n </div>\n </div>\n );\n }\n\n // If node has slots, prepare slot children\n let slotChildren: Record<string, ReactNode> = {};\n \n sdkDebugOnce(`node:${node.id}`, `[AmplifyRenderer] Rendering node ${node.id} (${node.componentId})`, {\n hasSlots: !!(node.slots && node.slots.length > 0),\n slotCount: node.slots?.length || 0,\n slots: node.slots?.map(s => ({ slotId: s.slotId, zoneId: s.zoneId, childrenCount: s.children?.length || 0 })),\n });\n \n if (node.slots && node.slots.length > 0) {\n for (const slot of node.slots) {\n const slotKey = `${node.id}-${slot.slotId}`;\n let childrenToRender: LayoutNode[] = [];\n\n // If slot is zoned, use variant children\n if (slot.zoneId && slot.variants && variantCache[slotKey]) {\n childrenToRender = variantCache[slotKey].children;\n } else if (slot.zoneId && slot.variants) {\n // Still loading variant, use default\n const defaultVariant = slot.variants.find(v => v.isDefault);\n childrenToRender = defaultVariant?.children || [];\n } else {\n // Not zoned, use direct children\n childrenToRender = Array.isArray(slot.children) ? slot.children : [];\n }\n\n const safeChildren = Array.isArray(childrenToRender) ? childrenToRender : [];\n\n // Render children for this slot (padding in preview/editing is applied by composer-injected CSS only)\n slotChildren[slot.slotId] = (\n <div\n key={slot.slotId}\n data-slot-id={slot.slotId}\n data-amplifyup-slot={slot.slotId}\n data-zone-id={slot.zoneId || undefined}\n data-parent-node-id={node.id}\n data-parent-component-id={node.componentId}\n >\n {safeChildren.filter(Boolean).map((child) => (\n <Fragment key={child.id}>{renderNode(child)}</Fragment>\n ))}\n </div>\n );\n }\n }\n\n const slotsToPass = Object.keys(slotChildren).length > 0 ? slotChildren : undefined;\n\n return (\n <div\n data-node-id={node.id}\n data-amplifyup-node=\"\"\n data-component-id={node.componentId}\n data-amplifyup-component={node.componentId}\n >\n <ComponentRenderBoundary\n componentId={node.componentId}\n nodeId={node.id}\n >\n <NodeWithFields\n nodeId={node.id}\n componentId={node.componentId}\n props={nodeRenderProps(node)}\n slots={slotsToPass}\n renderComponent={renderComponent}\n composerPreview={composerPreview}\n />\n </ComponentRenderBoundary>\n </div>\n );\n };\n\n // Render layout tree (must be an array — empty object/null from APIs must not crash)\n const rawTree = pageConfig.layoutTree;\n const layoutTree: LayoutNode[] = Array.isArray(rawTree)\n ? rawTree\n : rawTree && typeof rawTree === 'object' && (rawTree as LayoutNode).componentId\n ? [rawTree as LayoutNode]\n : [];\n \n if (layoutTree.length === 0) {\n return (\n <main>\n {emptyComponent || (\n <div className=\"container mx-auto px-4 py-16\">\n <p className=\"text-muted-foreground\">No content configured for this page.</p>\n </div>\n )}\n </main>\n );\n }\n\n return (\n <ComposerProvider>\n <main>\n {composerPreview || isComposerPreview() ? (\n <div\n data-slot-id=\"main\"\n data-amplifyup-slot=\"main\"\n data-slot-source=\"page\"\n data-slot-empty={layoutTree.length === 0 ? 'true' : undefined}\n >\n {layoutTree.map((node) => (\n <Fragment key={node.id}>{renderNode(node)}</Fragment>\n ))}\n </div>\n ) : (\n layoutTree.map((node) => (\n <Fragment key={node.id}>{renderNode(node)}</Fragment>\n ))\n )}\n </main>\n </ComposerProvider>\n );\n}\n\nexport const AmplifyRenderer = memo(AmplifyRendererInner);\n\n","'use client';\n\nimport React from 'react';\n\n/** Inline SVG — no icon package required on customer sites. */\nfunction AddComponentIcon({ size = 28 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"3\"\n width=\"18\"\n height=\"18\"\n rx=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M12 8v8M8 12h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Centered empty-slot call-to-action shown in Composer when a slot (or the\n * page canvas) has no components yet.\n */\nexport function EmptySlotHint({\n label = 'Click here to Add Component',\n compact = false,\n}: {\n label?: string;\n /** Smaller treatment for nested / named slots. */\n compact?: boolean;\n}) {\n const iconSize = compact ? 20 : 28;\n return (\n <div\n className=\"amplifyup-slot-placeholder\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: compact ? 8 : 12,\n minHeight: compact ? 60 : undefined,\n width: '100%',\n pointerEvents: 'none',\n textAlign: 'center',\n boxSizing: 'border-box',\n padding: compact ? '12px 8px' : '24px 16px',\n }}\n >\n <span\n className=\"amplifyup-slot-placeholder-icon\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: compact ? 36 : 48,\n height: compact ? 36 : 48,\n borderRadius: 12,\n border: '1.5px dashed currentColor',\n opacity: 0.9,\n }}\n >\n <AddComponentIcon size={iconSize} />\n </span>\n <span\n className=\"amplifyup-slot-placeholder-label\"\n style={{\n fontSize: compact ? 13 : 15,\n fontWeight: 600,\n lineHeight: 1.3,\n letterSpacing: '0.01em',\n }}\n >\n {label}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport React, { ReactNode } from 'react';\nimport { AmplifyRenderer } from './AmplifyRenderer';\nimport { useAmplifyUp } from './react';\nimport { isComposerPreview } from './preview';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport type { PageConfig } from './types';\nimport type { LayoutComponentProps } from './field-envelope';\n\ntype RenderComponentContext = {\n /** Unique layout-tree node id — required when multiple instances share a component type. */\n layoutNodeId: string;\n};\n\ntype RenderComponentFn = (\n componentId: string,\n props: LayoutComponentProps,\n slots?: Record<string, ReactNode>,\n context?: RenderComponentContext\n) => ReactNode;\n\nexport interface AmplifyPageContentProps {\n /**\n * Native page content shown to visitors when no AmplifyUp layout is configured.\n * Never rendered in Composer preview — only the layout canvas is shown there.\n */\n fallback?: ReactNode;\n /** Maps AmplifyUp component IDs to your React components. */\n renderComponent: RenderComponentFn;\n /** SSG/ISR layout from the server. Client overlay applies only when variants differ. */\n pageConfig?: PageConfig | null;\n /**\n * Force Composer mode (e.g. from SSR `?preview=true`). Ensures the page slot\n * wrapper exists even before client-side preview detection runs.\n */\n forceComposerPreview?: boolean;\n /** Shown while layout loads in Composer (default: empty main canvas). */\n previewLoadingComponent?: ReactNode;\n /** Shown when no layout components exist yet in Composer (default: empty main canvas). */\n previewEmptyComponent?: ReactNode;\n loadingComponent?: ReactNode;\n emptyComponent?: ReactNode;\n errorComponent?: (error: string) => ReactNode;\n}\n\nfunction defaultPreviewCanvas() {\n // AmplifyRenderer wraps emptyComponent in <main> — slot div only here.\n // Inline styles ensure the drop zone is visible without Tailwind on customer sites.\n return (\n <div\n data-slot-id=\"main\"\n data-amplifyup-slot=\"main\"\n data-slot-source=\"page\"\n data-slot-empty=\"true\"\n style={{ minHeight: '50vh', width: '100%', display: 'block', position: 'relative' }}\n >\n <EmptySlotHint />\n </div>\n );\n}\n\nfunction hasAmplifyLayout(pageConfig: PageConfig | null | undefined): boolean {\n return !!(\n pageConfig &&\n pageConfig.id !== 'default' &&\n Array.isArray(pageConfig.layoutTree) &&\n pageConfig.layoutTree.length > 0\n );\n}\n\nfunction normalizeRoutePath(route?: string | null): string {\n if (!route) return '';\n const path = route.split('?')[0] || '/';\n if (path.length > 1 && path.endsWith('/')) return path.replace(/\\/+$/, '');\n return path || '/';\n}\n\nfunction samePageRoute(\n a?: PageConfig | null,\n b?: PageConfig | null\n): boolean {\n const ar = normalizeRoutePath(a?.route);\n const br = normalizeRoutePath(b?.route);\n return !!ar && !!br && ar === br;\n}\n\nfunction layoutTreesEqual(\n a?: PageConfig | null,\n b?: PageConfig | null\n): boolean {\n if (!a || !b) return a === b;\n return JSON.stringify(a.layoutTree) === JSON.stringify(b.layoutTree);\n}\n\n/**\n * Hybrid page wrapper: Composer shows only the AmplifyUp layout canvas;\n * normal visits show the configured layout or your native `fallback`.\n *\n * Live pages paint the SSG/ISR layout first. Client Edge resolve (visitor id)\n * overlays only when the personalized tree differs from that static HTML.\n */\nexport function AmplifyPageContent({\n fallback,\n renderComponent,\n pageConfig: pageConfigProp,\n forceComposerPreview = false,\n previewLoadingComponent,\n previewEmptyComponent,\n loadingComponent,\n emptyComponent,\n errorComponent,\n}: AmplifyPageContentProps) {\n const client = useAmplifyUp();\n const preview = forceComposerPreview || isComposerPreview();\n\n const clientLayout = hasAmplifyLayout(client.pageConfig)\n ? client.pageConfig\n : null;\n const serverLayout = hasAmplifyLayout(pageConfigProp) ? pageConfigProp : null;\n\n let pageConfig = serverLayout ?? clientLayout;\n if (preview && clientLayout) {\n pageConfig = clientLayout;\n } else if (\n clientLayout &&\n serverLayout &&\n samePageRoute(clientLayout, serverLayout) &&\n !layoutTreesEqual(clientLayout, serverLayout)\n ) {\n pageConfig = clientLayout;\n } else if (clientLayout && !serverLayout) {\n pageConfig = clientLayout;\n }\n const loading = !hasAmplifyLayout(pageConfig) && client.loading;\n const error = hasAmplifyLayout(pageConfig)\n ? null\n : pageConfigProp\n ? null\n : client.error;\n\n const previewCanvas = previewEmptyComponent ?? defaultPreviewCanvas();\n const previewLoading = previewLoadingComponent ?? previewCanvas;\n\n if (preview) {\n return (\n <AmplifyRenderer\n pageConfig={pageConfig ?? undefined}\n renderComponent={renderComponent}\n composerPreview\n loadingComponent={loadingComponent ?? previewLoading}\n emptyComponent={emptyComponent ?? previewCanvas}\n errorComponent={errorComponent ?? (() => previewCanvas)}\n />\n );\n }\n\n if (loading) {\n return loadingComponent ? <>{loadingComponent}</> : null;\n }\n\n if (error) {\n if (errorComponent) return <>{errorComponent(error)}</>;\n return fallback ? <>{fallback}</> : null;\n }\n\n if (!hasAmplifyLayout(pageConfig)) {\n return fallback ? <>{fallback}</> : null;\n }\n\n return (\n <AmplifyRenderer\n pageConfig={pageConfig ?? undefined}\n renderComponent={renderComponent}\n loadingComponent={loadingComponent}\n emptyComponent={emptyComponent}\n errorComponent={errorComponent}\n />\n );\n}\n","import { isComposerPreview } from './preview';\n\nexport function isComposerEditMode(): boolean {\n if (typeof window === 'undefined') return false;\n return (\n isComposerPreview() &&\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ !== true\n );\n}\n\nexport function subscribeComposerEdit(onStoreChange: () => void): () => void {\n if (typeof window === 'undefined') return () => {};\n window.addEventListener('amplifyup:composer-edit', onStoreChange);\n return () =>\n window.removeEventListener('amplifyup:composer-edit', onStoreChange);\n}\n\n/** Server snapshot for `useSyncExternalStore`. Tests may mock this. */\nexport function getComposerEditModeServer(): boolean {\n return false;\n}\n","/**\n * SDK Components for Slot and Field rendering\n * \n * These components allow developers to explicitly define where slots and fields\n * are rendered in their components, with full control over styling and structure.\n */\n\n'use client';\n\nimport React, {\n createContext,\n useContext,\n ReactNode,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { marked } from 'marked';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport { sdkDebugOnce } from './debug';\nimport {\n FIELDS_BRAND,\n isBrandedFields,\n isFieldEnvelope,\n isReadOnlyRowField,\n resolveEditableBinding,\n type Field as FieldEnvelope,\n type FieldRef,\n} from './field-envelope';\nimport { useComposerFieldValue } from './composer-provider';\nimport {\n getComposerEditModeServer,\n isComposerEditMode,\n subscribeComposerEdit,\n} from './composer-edit-mode';\n\n// Context for component-level slots and props\ninterface ComponentContextType {\n slots?: Record<string, ReactNode>;\n props?: Record<string, any>;\n /** Unique layout-tree node id for this instance (disambiguates duplicate component types). */\n layoutNodeId?: string;\n componentId?: string;\n}\n\nconst ComponentContext = createContext<ComponentContextType | null>(null);\n\nexport function ComponentContextProvider({\n children,\n slots,\n props,\n layoutNodeId,\n componentId,\n}: {\n children: ReactNode;\n slots?: Record<string, ReactNode>;\n props?: Record<string, any>;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const next = hydratePageResourceProps(props || {}, getPageResourceFields());\n return (\n <ComponentContext.Provider\n value={{ slots, props: next, layoutNodeId, componentId }}\n >\n {children}\n </ComponentContext.Provider>\n );\n}\n\n/**\n * Slot Component\n * \n * Renders content for a specific slot by name. Developers use this to define\n * where slot content should appear in their component, with full control\n * over styling, padding, and structure.\n * \n * @example\n * ```tsx\n * function Grid5050({ heading }) {\n * return (\n * <section>\n * <h2>{heading}</h2>\n * <div className=\"grid grid-cols-2 gap-6\">\n * <div className=\"p-4\">\n * <Slot name=\"left\" />\n * </div>\n * <div className=\"p-4\">\n * <Slot name=\"right\" />\n * </div>\n * </div>\n * </section>\n * );\n * }\n * ```\n */\nexport function Slot({\n name,\n className,\n}: {\n name: string;\n className?: string;\n}) {\n const context = useContext(ComponentContext);\n\n if (!context) {\n console.warn(`[AmplifyUp SDK] Slot \"${name}\" used outside ComponentContextProvider`);\n return null;\n }\n\n const slotContent = context.slots?.[name];\n const isEmpty = !slotContent;\n\n // Detect if we're in visual editor mode (composer/preview)\n const isEditorMode = typeof window !== 'undefined' && (\n // Check for preview mode flag set by proxy\n (window as any).__AMPLIFYUP_PREVIEW_MODE__ === true ||\n // Check URL query params\n new URLSearchParams(window.location.search).get('preview') === 'true' ||\n new URLSearchParams(window.location.search).get('visualEditor') === 'true' ||\n // Check if in iframe from orchestrator (check referrer hostname/port)\n (window.self !== window.top && document.referrer && (() => {\n try {\n const referrerUrl = new URL(document.referrer);\n // Check for localhost:5001 or any orchestrator domain\n return (referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/');\n } catch {\n return false;\n }\n })())\n );\n\n sdkDebugOnce(\n `slot:${context.layoutNodeId || ''}:${name}`,\n `[Slot:${name}]`,\n {\n isEmpty,\n isEditorMode,\n availableSlotKeys: context.slots ? Object.keys(context.slots) : [],\n }\n );\n\n return (\n <div \n className={className} \n data-slot-name={name}\n data-slot-id={name}\n data-amplifyup-slot={name}\n data-slot-empty={isEmpty ? 'true' : undefined}\n data-parent-node-id={context.layoutNodeId || undefined}\n data-parent-component-id={context.componentId || undefined}\n style={{\n // Only add minimum height when empty (for drop target visibility)\n minHeight: isEmpty ? '60px' : undefined,\n // Only add position relative for overlay positioning in editor mode\n position: isEditorMode ? 'relative' : undefined,\n }}\n >\n {isEmpty ? (\n isEditorMode ? (\n <EmptySlotHint compact />\n ) : (\n <div\n className=\"amplifyup-slot-placeholder\"\n style={{\n minHeight: '60px',\n color: '#9ca3af',\n fontSize: '14px',\n pointerEvents: 'none',\n }}\n >\n {`Empty slot: ${name}`}\n </div>\n )\n ) : (\n <>\n {isEditorMode && (\n <div\n className=\"amplifyup-slot-label\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '4px',\n fontSize: '10px',\n color: '#9ca3af',\n pointerEvents: 'none',\n zIndex: 1,\n }}\n >\n Slot: {name}\n </div>\n )}\n {slotContent}\n </>\n )}\n </div>\n );\n}\n\nfunction isLikelyNonTextFieldName(name: string): boolean {\n const n = name.toLowerCase();\n return (\n n.includes('href') ||\n n.includes('url') ||\n n.includes('src') ||\n n.includes('image') ||\n n.includes('icon') ||\n n.includes('overlay') ||\n n.includes('color')\n );\n}\n\n/** Composer-only hint for empty Field / RichText. Never stored as content. */\nconst COMPOSER_EMPTY_FIELD_HINT = 'Click here to edit this field';\n\nconst EMPTY_FIELD_PLACEHOLDERS = new Set([\n COMPOSER_EMPTY_FIELD_HINT,\n 'Click here to enter text',\n 'Sample Title',\n 'Sample Heading',\n 'Sample Subheading',\n]);\n\nfunction isComposerEmptyText(value: unknown): boolean {\n if (value === undefined || value === null) return true;\n if (typeof value !== 'string') return false;\n const trimmed = value.trim();\n return trimmed === '' || EMPTY_FIELD_PLACEHOLDERS.has(trimmed);\n}\n\nfunction canInlineEdit(name: string, value: unknown): boolean {\n if (!name || isLikelyNonTextFieldName(name)) return false;\n if (value !== undefined && value !== null && typeof value === 'object') {\n return false;\n }\n if (typeof value === 'boolean') return false;\n return true;\n}\n\nfunction canInlineEditRichText(name: string, value: unknown): boolean {\n if (!name || isLikelyNonTextFieldName(name)) return false;\n if (typeof value === 'boolean') return false;\n if (\n value !== undefined &&\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value)\n ) {\n return false;\n }\n return true;\n}\n\nfunction useComposerEditMode(): boolean {\n return useSyncExternalStore(\n subscribeComposerEdit,\n isComposerEditMode,\n getComposerEditModeServer\n );\n}\n\nfunction useBoundField(\n field: FieldEnvelope<unknown> | undefined,\n value: unknown,\n name: string | undefined,\n component: string\n): { editName: string; fieldValue: unknown; ref?: FieldRef } {\n const bound = resolveEditableBinding(field, value, name);\n if (bound.requiresName) {\n console.warn(\n `[AmplifyUp SDK] ${component} value={…} requires name=\"…\" for computed values`\n );\n }\n const fieldValue = useComposerFieldValue(bound.name, bound.value, bound.ref);\n return { editName: bound.name, fieldValue, ref: bound.ref };\n}\n\nfunction commitComposerField(\n layoutNodeId: string | undefined,\n componentId: string | undefined,\n name: string,\n value: unknown,\n ref?: FieldRef\n): void {\n if (typeof window === 'undefined' || window.parent === window) return;\n window.parent.postMessage(\n {\n type: 'AMPLIFYUP_FIELD_COMMIT',\n layoutNodeId,\n componentId,\n fieldName: name,\n value,\n ...(ref ? { ref } : {}),\n },\n '*'\n );\n}\n\nfunction looksLikeRichCanvasField(name?: string): boolean {\n const tokens = String(name || '')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .split(/[._\\-\\s/]+/)\n .map((s) => s.toLowerCase())\n .filter(Boolean);\n const last = tokens[tokens.length - 1] || '';\n return (\n last === 'body' ||\n last === 'content' ||\n last === 'copy' ||\n last === 'excerpt' ||\n last === 'markdown' ||\n last === 'richtext'\n );\n}\n\nlet lastRichTextRequestAt = 0;\n\nfunction requestCanvasRichTextEdit(opts: {\n el: HTMLElement;\n layoutNodeId?: string;\n componentId?: string;\n name: string;\n value: string;\n fieldRef?: FieldRef;\n}): void {\n if (typeof window === 'undefined' || window.parent === window) return;\n if (!opts.name) return;\n const now = Date.now();\n if (now - lastRichTextRequestAt < 400) return;\n lastRichTextRequestAt = now;\n const rect = opts.el.getBoundingClientRect();\n window.parent.postMessage(\n {\n type: 'AMPLIFYUP_RICHTEXT_EDIT',\n layoutNodeId: opts.layoutNodeId,\n componentId: opts.componentId,\n fieldName: opts.name,\n value: opts.value,\n ...(opts.fieldRef ? { ref: opts.fieldRef } : {}),\n bounds: {\n top: rect.top,\n left: rect.left,\n width: Math.max(rect.width, 240),\n height: Math.max(rect.height, 64),\n },\n },\n '*'\n );\n}\n\nfunction placeCaret(el: HTMLElement, atStart = false): void {\n const range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(atStart);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n}\n\nfunction ComposerInlineField({\n name,\n value,\n className,\n layoutNodeId,\n componentId,\n fieldRef,\n rich = false,\n}: {\n name: string;\n value: unknown;\n className?: string;\n layoutNodeId?: string;\n componentId?: string;\n fieldRef?: FieldRef;\n rich?: boolean;\n}) {\n const [focused, setFocused] = useState(false);\n const elRef = useRef<HTMLSpanElement>(null);\n const storedEmpty = isComposerEmptyText(value);\n const text = storedEmpty ? '' : formatFieldValue(value);\n const hint = COMPOSER_EMPTY_FIELD_HINT;\n const idleDisplay = storedEmpty ? hint : text;\n const showHint = storedEmpty && !focused;\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (document.activeElement === el) return;\n // Never wipe search bars, buttons, or other chrome inside this node.\n if (\n el.querySelector(\n 'input, button, select, textarea, form, svg, iframe, img'\n )\n ) {\n return;\n }\n const next = idleDisplay || '';\n if (el.textContent !== next) el.textContent = next;\n }, [idleDisplay]);\n\n const finishEdit = () => {\n const raw = (elRef.current?.innerText ?? '')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\n+$/g, '');\n const next = raw.trim() === '' ? '' : raw;\n setFocused(false);\n if (storedEmpty && next === '') {\n if (elRef.current) elRef.current.textContent = hint;\n if (\n typeof value === 'string' &&\n EMPTY_FIELD_PLACEHOLDERS.has(value.trim())\n ) {\n commitComposerField(layoutNodeId, componentId, name, '', fieldRef);\n }\n return;\n }\n if (next === text) return;\n commitComposerField(layoutNodeId, componentId, name, next, fieldRef);\n };\n\n const openRichEditor = (event?: React.SyntheticEvent) => {\n if (!isComposerEditMode() || !elRef.current) return;\n event?.preventDefault();\n event?.stopPropagation();\n const source =\n typeof value === 'string' && !storedEmpty ? value : text || '';\n requestCanvasRichTextEdit({\n el: elRef.current,\n layoutNodeId,\n componentId,\n name,\n value: source,\n fieldRef,\n });\n };\n\n return (\n <span\n ref={elRef}\n className={className}\n data-amplifyup-field={name}\n data-amplifyup-field-type={rich ? 'richtext' : 'text'}\n data-amplifyup-node-id={layoutNodeId || undefined}\n data-amplifyup-ref-provider={fieldRef?.providerId || undefined}\n data-amplifyup-ref-entity={fieldRef?.entity || undefined}\n data-amplifyup-ref-id={fieldRef?.id || undefined}\n data-amplifyup-empty-hint={showHint ? 'true' : undefined}\n contentEditable={!rich}\n suppressContentEditableWarning\n role=\"textbox\"\n tabIndex={0}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n onClick={(event) => {\n if (!isComposerEditMode()) return;\n const link = (event.target as HTMLElement | null)?.closest?.('a');\n if (link) event.preventDefault();\n if (rich) {\n openRichEditor(event);\n return;\n }\n }}\n onFocus={() => {\n if (!isComposerEditMode()) return;\n if (rich) {\n openRichEditor();\n return;\n }\n setFocused(true);\n const el = elRef.current;\n if (el && storedEmpty) {\n el.textContent = '';\n placeCaret(el, true);\n }\n }}\n onBlur={rich ? undefined : finishEdit}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n (event.currentTarget as HTMLElement).blur();\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n if (elRef.current) elRef.current.textContent = idleDisplay || '';\n setFocused(false);\n (event.currentTarget as HTMLElement).blur();\n }\n }}\n style={{\n cursor: 'text',\n outline: '1px dashed color-mix(in srgb, currentColor 40%, transparent)',\n outlineOffset: '2px',\n minWidth: '1ch',\n minHeight: '1em',\n // Do not force `inline` — that overrides Tailwind `block` and parks\n // an empty-field hint on the same line as a sibling that has a value.\n opacity: showHint ? 0.5 : undefined,\n }}\n />\n );\n}\n\nfunction ComposerInlineHtml({\n name,\n html,\n sourceValue,\n className,\n Tag = 'div',\n layoutNodeId,\n componentId,\n fieldRef,\n}: {\n name: string;\n html: string;\n sourceValue: string;\n className?: string;\n Tag?: keyof JSX.IntrinsicElements;\n layoutNodeId?: string;\n componentId?: string;\n fieldRef?: FieldRef;\n}) {\n const elRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (el.innerHTML !== html) el.innerHTML = html;\n }, [html]);\n\n const openRichEditor = (event: React.SyntheticEvent) => {\n if (!elRef.current) return;\n event.preventDefault();\n event.stopPropagation();\n requestCanvasRichTextEdit({\n el: elRef.current,\n layoutNodeId,\n componentId,\n name,\n value: sourceValue,\n fieldRef,\n });\n };\n\n return React.createElement(Tag, {\n ref: elRef,\n className,\n 'data-amplifyup-field': name,\n 'data-amplifyup-field-type': 'richtext',\n 'data-amplifyup-node-id': layoutNodeId || undefined,\n 'data-amplifyup-ref-provider': fieldRef?.providerId || undefined,\n 'data-amplifyup-ref-entity': fieldRef?.entity || undefined,\n 'data-amplifyup-ref-id': fieldRef?.id || undefined,\n dangerouslySetInnerHTML: { __html: html },\n onMouseDown: (event: React.MouseEvent) => {\n event.stopPropagation();\n },\n onClick: openRichEditor,\n style: {\n cursor: 'text',\n outline: '1px dashed color-mix(in srgb, currentColor 40%, transparent)',\n outlineOffset: '2px',\n },\n });\n}\n\n/**\n * Format a field value for default text rendering.\n * Avoids \"[object Object]\" for structured values; prefer RichText for markdown.\n */\nfunction formatFieldValue(value: unknown): string {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return String(value);\n }\n if (Array.isArray(value)) {\n // Portable text / block arrays — extract plain text when possible\n const parts = value\n .map((item) => {\n if (typeof item === 'string') return item;\n if (\n item &&\n typeof item === 'object' &&\n 'children' in item &&\n Array.isArray((item as { children?: unknown }).children)\n ) {\n return (\n item as { children: Array<{ text?: string }> }\n ).children\n .map((c) => (typeof c?.text === 'string' ? c.text : ''))\n .join('');\n }\n return '';\n })\n .filter(Boolean);\n if (parts.length > 0) return parts.join(' ');\n }\n if (value && typeof value === 'object') {\n return '';\n }\n return '';\n}\n\ntype RejectFieldInput<T> = [T] extends [readonly unknown[]]\n ? never\n : T extends { readonly [FIELDS_BRAND]: true }\n ? never\n : T;\n\nconst FIELD_SCALAR_HINT =\n 'Field expects a scalar field. Did you mean <Field field={post.title} />?';\n\nfunction warnNotScalarField(\n component: 'Field' | 'RichText' | 'Image',\n field: unknown,\n fieldValue: unknown\n): boolean {\n if (process.env.NODE_ENV === 'production') return false;\n if (isBrandedFields(field)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n if (isFieldEnvelope(field) && Array.isArray(field.value)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n if (Array.isArray(fieldValue)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n return false;\n}\n\nconst warnedReadOnlyFields = new Set<string>();\n\nfunction warnReadOnlyRowField(name: string): void {\n if (process.env.NODE_ENV === 'production') return;\n const key = name || '(unnamed)';\n if (warnedReadOnlyFields.has(key)) return;\n warnedReadOnlyFields.add(key);\n console.warn(\n `[AmplifyUp SDK] ${key} has no write target; rendered read-only.`\n );\n}\n\nfunction canComposerBind(\n field: unknown,\n ref: FieldRef | undefined,\n editName: string\n): boolean {\n if (isReadOnlyRowField(field) || (isFieldEnvelope(field) && field.readOnly)) {\n warnReadOnlyRowField(editName || (isFieldEnvelope(field) ? field.name : ''));\n return false;\n }\n return true;\n}\n\nfunction warnProjectionProps(\n component: 'Field' | 'RichText' | 'Image',\n hasField: boolean,\n hasValue: boolean,\n name: string | undefined\n): void {\n if (process.env.NODE_ENV === 'production') return;\n if (!hasField && !hasValue && !name) {\n console.warn(\n `[AmplifyUp SDK] ${component} needs field={fields.yourProp} (or value + name for computed values)`\n );\n }\n}\n\nfunction hasOwnProp(props: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(props, key);\n}\n\n/**\n * Field Component\n *\n * Pass a field envelope: `<Field field={fields.title} />`.\n * For a computed value, pass `value` and `name`.\n *\n * For markdown / rich text fields, use {@link RichText} instead.\n * Do not pass a list or a list row — use `<Field field={post.title} />`.\n *\n * @example\n * ```tsx\n * function Hero({ fields }: { fields: Fields<{ title: string; description: string }> }) {\n * return (\n * <section className=\"hero\">\n * <h1>\n * <Field field={fields.title} />\n * </h1>\n * <p>{fields.description.value}</p>\n * </section>\n * );\n * }\n * ```\n */\nexport function Field<T = unknown>(props: {\n /** Envelope from `props.fields` (`{ value, name, ref? }`). Lists and rows are not allowed. */\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed value — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n className?: string;\n}) {\n const { field, value, name, className } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n const hasField = isFieldEnvelope(field);\n const hasValue = hasOwnProp(props, 'value');\n const { editName, fieldValue, ref } = useBoundField(field, value, name, 'Field');\n\n warnProjectionProps('Field', hasField, hasValue, name);\n if (warnNotScalarField('Field', field, fieldValue)) {\n return null;\n }\n\n if (!hasField && !hasValue && !name) {\n return null;\n }\n\n if (isBrandedFields(field) || Array.isArray(fieldValue)) {\n return null;\n }\n\n const empty = isComposerEmptyText(fieldValue);\n\n const bindComposer =\n composerEdit &&\n editName &&\n context &&\n canInlineEdit(editName, fieldValue) &&\n canComposerBind(field, ref, editName);\n\n if (bindComposer) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n className={className}\n layoutNodeId={context.layoutNodeId}\n componentId={context.componentId}\n fieldRef={ref}\n rich={looksLikeRichCanvasField(editName)}\n />\n );\n }\n\n if (empty) return null;\n\n const text = formatFieldValue(fieldValue);\n if (!text) return null;\n\n return <span className={className}>{text}</span>;\n}\n\nfunction markdownToHtml(markdown: string): string {\n try {\n const result = marked.parse(markdown, { async: false });\n return typeof result === 'string' ? result : '';\n } catch {\n return markdown;\n }\n}\n\n/**\n * RichText - Renders a markdown (or HTML string) value as formatted HTML.\n *\n * Pass a field envelope: `<RichText field={fields.body} />`.\n * Values are Markdown for portability across CMS platforms.\n *\n * @example\n * ```tsx\n * function Article({ fields }: { fields: Fields<{ title: string; body: string }> }) {\n * return (\n * <article>\n * <h1><Field field={fields.title} /></h1>\n * <RichText field={fields.body} className=\"prose\" />\n * </article>\n * );\n * }\n * ```\n */\nexport function RichText<T = string | null>(props: {\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed markdown — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n className?: string;\n as?: keyof JSX.IntrinsicElements;\n /** String children are treated as the markdown value (same as `value`). */\n children?: ReactNode;\n}) {\n const {\n field,\n value,\n name,\n className,\n as: Tag = 'div',\n children,\n } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n\n const childrenValue =\n typeof children === 'string' || typeof children === 'number'\n ? String(children)\n : undefined;\n const hasField = isFieldEnvelope(field);\n const hasValueProp = hasOwnProp(props, 'value') || childrenValue !== undefined;\n const boundValue = hasOwnProp(props, 'value')\n ? value\n : childrenValue !== undefined\n ? childrenValue\n : value;\n const { editName, fieldValue, ref } = useBoundField(\n field,\n boundValue,\n name,\n 'RichText'\n );\n\n if (!hasField && !hasValueProp && !name) {\n return null;\n }\n\n warnProjectionProps('RichText', hasField, hasValueProp, name);\n if (warnNotScalarField('RichText', field, fieldValue)) {\n return null;\n }\n\n const canEdit =\n !!context &&\n canInlineEditRichText(editName, fieldValue) &&\n canComposerBind(field, ref, editName);\n\n if (isComposerEmptyText(fieldValue)) {\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n className={className}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n fieldRef={ref}\n rich\n />\n );\n }\n return null;\n }\n\n let html = '';\n if (typeof fieldValue === 'string') {\n const trimmed = fieldValue.trim();\n // Already HTML from a CMS or legacy content — pass through\n if (trimmed.startsWith('<') && trimmed.includes('>')) {\n html = fieldValue;\n } else {\n html = markdownToHtml(fieldValue);\n }\n } else {\n const text = formatFieldValue(fieldValue);\n html = text ? markdownToHtml(text) : '';\n }\n\n if (!html) {\n return null;\n }\n\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineHtml\n name={editName}\n html={html}\n sourceValue={typeof fieldValue === 'string' ? fieldValue : html}\n className={className}\n Tag={Tag}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n fieldRef={ref}\n />\n );\n }\n\n return (\n <Tag className={className} dangerouslySetInnerHTML={{ __html: html }} />\n );\n}\n\nfunction isPortableImageValue(\n value: unknown\n): value is { url: string; alt?: string; width?: number; height?: number } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const url = (value as { url?: unknown }).url;\n return typeof url === 'string' && url.trim().length > 0;\n}\n\nfunction imageSrc(value: unknown): string {\n if (typeof value === 'string') return value.trim();\n if (isPortableImageValue(value)) return value.url.trim();\n return '';\n}\n\nfunction leafText(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\n/** Nested `Fields<{ url, alt }>` from a mis-enveloped image → one image field. */\nfunction coerceImageField(\n field: unknown,\n value: unknown,\n name: string | undefined\n): {\n field?: FieldEnvelope<unknown>;\n value?: unknown;\n name?: string;\n} {\n if (isFieldEnvelope(field)) return { field, value, name };\n if (!isBrandedFields(field) || !field || typeof field !== 'object') {\n return { field: undefined, value, name };\n }\n const bag = field as Record<string, unknown>;\n const urlField = bag.url;\n const urlName =\n isFieldEnvelope(urlField) && typeof urlField.name === 'string'\n ? urlField.name.replace(/\\.url$/, '')\n : '';\n const editName = urlName || name || '';\n if (!editName) return { field: undefined, value, name };\n const ref = isFieldEnvelope(urlField) ? urlField.ref : undefined;\n const width = leafText(bag.width);\n const height = leafText(bag.height);\n return {\n field: {\n value: {\n url: String(leafText(urlField) ?? ''),\n alt: leafText(bag.alt),\n ...(typeof width === 'number' ? { width } : {}),\n ...(typeof height === 'number' ? { height } : {}),\n },\n name: editName,\n ...(ref ? { ref } : {}),\n },\n value,\n name: editName,\n };\n}\n\n/**\n * Image — renders a provider-backed image value as `<img>`.\n *\n * Pass a field envelope: `<Image field={fields.backgroundImage} />`.\n * AmplifyUp does not host image files.\n *\n * @example\n * ```tsx\n * function Hero({ fields }: { fields: Fields<{ backgroundImage: ImageValue }> }) {\n * return (\n * <Image field={fields.backgroundImage} className=\"h-full w-full object-cover\" />\n * );\n * }\n * ```\n */\nexport function Image<T = unknown>(\n props: {\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed image — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n alt?: string;\n } & Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'name'>\n) {\n const {\n field,\n value,\n name,\n alt: altProp,\n className,\n width: widthProp,\n height: heightProp,\n ...imgProps\n } = props;\n const context = useContext(ComponentContext);\n const coerced = coerceImageField(field, value, name);\n const boundField = coerced.field;\n const hasField = isFieldEnvelope(boundField);\n const hasValue = hasOwnProp(props, 'value');\n const { editName, fieldValue, ref } = useBoundField(\n boundField,\n coerced.value,\n coerced.name,\n 'Image'\n );\n const composerEdit = useComposerEditMode();\n\n warnProjectionProps('Image', hasField || isBrandedFields(field), hasValue, coerced.name || name);\n if (!isBrandedFields(field) && warnNotScalarField('Image', boundField, fieldValue)) {\n return null;\n }\n\n if (!hasField && !hasValue && !name && !editName) {\n return null;\n }\n\n const src = imageSrc(fieldValue);\n const portable = isPortableImageValue(fieldValue) ? fieldValue : null;\n const alt = altProp ?? portable?.alt ?? '';\n const width = widthProp ?? portable?.width;\n const height = heightProp ?? portable?.height;\n\n const fieldAttrs =\n composerEdit &&\n editName &&\n canComposerBind(boundField, ref, editName)\n ? {\n 'data-amplifyup-field': editName,\n 'data-amplifyup-field-type': 'image' as const,\n 'data-amplifyup-node-id': context?.layoutNodeId || undefined,\n 'data-amplifyup-ref-provider': ref?.providerId || undefined,\n 'data-amplifyup-ref-entity': ref?.entity || undefined,\n 'data-amplifyup-ref-id': ref?.id || undefined,\n }\n : null;\n\n if (composerEdit && !editName && (hasField || hasValue)) {\n console.warn(\n '[AmplifyUp SDK] Image value={…} requires name=\"…\" for computed values'\n );\n }\n\n if (!src) {\n if (!composerEdit || !fieldAttrs) return null;\n return (\n <span\n {...fieldAttrs}\n className={className}\n role=\"img\"\n aria-label={alt || editName || 'Image'}\n style={{\n display: 'block',\n boxSizing: 'border-box',\n minWidth: width ? undefined : 120,\n minHeight: height ? undefined : 80,\n width: width || '100%',\n height: height || undefined,\n background: 'color-mix(in srgb, currentColor 8%, transparent)',\n cursor: 'pointer',\n }}\n />\n );\n }\n\n return (\n <img\n {...imgProps}\n {...fieldAttrs}\n src={src}\n alt={alt}\n className={className}\n width={width}\n height={height}\n style={{\n ...(typeof imgProps.style === 'object' && imgProps.style\n ? imgProps.style\n : {}),\n ...(composerEdit && fieldAttrs ? { cursor: 'pointer' } : null),\n }}\n />\n );\n}\n\n","/**\n * React Context Provider for AmplifyUp SDK\n *\n * Provides automatic page config fetching (Composer → orchestrator,\n * production → Edge) and makes SDK available throughout the app.\n */\n\n'use client';\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useRef,\n useState,\n ReactNode,\n} from 'react';\nimport { getSDK } from './index';\nimport { isComposerPreview } from './preview';\nimport { fetchContent, type AmplifyContentMeta } from './content/fetchContent';\nimport { selectVariants } from './edge/select';\nimport type { AmplifyUpConfig, ContentSource, PageConfig } from './types';\nimport { extractRouteParams } from './page-context';\n\n// Try to import Next.js usePathname, but work without it\nlet usePathname: (() => string) | null = null;\nif (typeof window !== 'undefined') {\n try {\n const nextNav = require('next/navigation');\n if (nextNav.usePathname) {\n usePathname = nextNav.usePathname;\n }\n } catch {\n // Not using Next.js\n }\n}\n\ninterface AmplifyUpContextType {\n pageConfig: PageConfig | null;\n loading: boolean;\n error: string | null;\n source: ContentSource | null;\n meta: AmplifyContentMeta | null;\n}\n\nconst AmplifyUpContext = createContext<AmplifyUpContextType | null>(null);\n\nfunction normalizeRoutePath(route?: string | null): string {\n if (!route) return '';\n const path = route.split('?')[0] || '/';\n if (path.length > 1 && path.endsWith('/')) return path.replace(/\\/+$/, '');\n return path || '/';\n}\n\ninterface AmplifyUpProviderProps {\n children: ReactNode;\n config: AmplifyUpConfig;\n /**\n * Required when this page uses Composer \"From page\" components.\n * Pass at provider/init so the first paint and first page view include fields.\n */\n pageContext?: import('./page-context').AmplifyPageContextInput;\n}\n\nexport function AmplifyUpProvider({\n children,\n config,\n pageContext,\n}: AmplifyUpProviderProps) {\n const [initialized, setInitialized] = useState(false);\n const [pageConfig, setPageConfig] = useState<PageConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [source, setSource] = useState<ContentSource | null>(null);\n const [meta, setMeta] = useState<AmplifyContentMeta | null>(null);\n\n const getActualRoute = (): string => {\n if (typeof window === 'undefined') return '';\n\n const currentPath = window.location.pathname;\n const currentSearch = window.location.search;\n\n const urlParams = new URLSearchParams(currentSearch);\n const routeFromQuery = urlParams.get('route');\n if (routeFromQuery) {\n return routeFromQuery;\n }\n\n const actualRoute = (window as any).__AMPLIFYUP_ACTUAL_ROUTE__;\n const inComposerShell =\n currentPath === '/api/pages/proxy' ||\n currentPath.startsWith('/api/pages/proxy') ||\n currentPath.includes('/preview-frame');\n if (actualRoute && typeof actualRoute === 'string' && inComposerShell) {\n return actualRoute;\n }\n\n return currentPath;\n };\n\n const loadedRouteRef = useRef<string | null>(null);\n const nextPathname = usePathname ? usePathname() : null;\n\n const [pathname, setPathname] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n return getActualRoute();\n }\n return '';\n });\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const actualRoute = getActualRoute();\n\n if (\n window.location.pathname === '/api/pages/proxy' ||\n window.location.pathname.startsWith('/api/pages/proxy')\n ) {\n setPathname(actualRoute);\n } else if (nextPathname) {\n setPathname(nextPathname);\n } else {\n setPathname(actualRoute);\n }\n\n const timeout = setTimeout(() => {\n if (\n window.location.pathname === '/api/pages/proxy' ||\n window.location.pathname.startsWith('/api/pages/proxy')\n ) {\n const newRoute = getActualRoute();\n setPathname(newRoute);\n }\n }, 200);\n\n const handleRouteChange = () => {\n setPathname(getActualRoute());\n };\n\n window.addEventListener('popstate', handleRouteChange);\n\n return () => {\n clearTimeout(timeout);\n window.removeEventListener('popstate', handleRouteChange);\n };\n }\n }, [nextPathname]);\n\n const pageContextKey = pageContext\n ? `${pageContext.resourceType}:${pageContext.key}`\n : '';\n\n useEffect(() => {\n if (!initialized || !pageContext) return;\n getSDK().setPageContext(pageContext);\n }, [initialized, pageContextKey]);\n\n useEffect(() => {\n let cancelled = false;\n const sdk = getSDK();\n\n const run = async () => {\n try {\n await sdk.init({\n ...config,\n ...(pageContext ? { pageContext } : {}),\n });\n if (cancelled) return;\n if (pageContext) sdk.setPageContext(pageContext);\n\n const actualRoute = getActualRoute();\n if (!actualRoute) {\n setInitialized(true);\n setLoading(false);\n return;\n }\n\n sdk.routeChange(actualRoute);\n\n const preview = isComposerPreview();\n const overlay = preview || config.clientPersonalization !== false;\n if (!overlay) {\n setInitialized(true);\n setPageConfig(null);\n setLoading(false);\n return;\n }\n\n // Drop a previous route's overlay so SSG/ISR HTML paints first.\n // Do not reset on the first load — that remounts the tree 3–4 times.\n if (loadedRouteRef.current && loadedRouteRef.current !== actualRoute) {\n setPageConfig(null);\n setError(null);\n }\n\n const edgeUrl = sdk.getEdgeUrl();\n const orchestratorUrl = sdk.getOrchestratorUrl();\n const trackingId = sdk.getTrackingId();\n\n if (!trackingId || !orchestratorUrl || !edgeUrl) {\n setInitialized(true);\n setError('SDK not initialized');\n setLoading(false);\n return;\n }\n\n let variantKeys: Record<string, string> | undefined;\n const anonId = sdk.getInstanceId();\n const sessionId = sdk.getSessionId();\n if (!preview && anonId) {\n try {\n const selected = await selectVariants({\n trackingId,\n view: actualRoute,\n anonId,\n sessionId: sessionId || undefined,\n site: sdk.getSiteId() || undefined,\n edgeUrl,\n });\n variantKeys = selected.variantKeys;\n } catch (err) {\n console.error('AmplifyUp selectVariants failed; overlay will use visitor id', err);\n }\n }\n\n const result = await fetchContent({\n route: actualRoute,\n trackingId,\n anonId: variantKeys ? undefined : anonId,\n sessionId: variantKeys ? undefined : sessionId || undefined,\n siteId: sdk.getSiteId() || null,\n preview,\n orchestratorUrl,\n edgeUrl,\n variantKeys,\n fetchOrchestratorPage: (route, isPreview) =>\n sdk.fetchPageConfig(route, isPreview),\n });\n\n if (cancelled) return;\n\n const nextConfig = result.pageConfig || {\n id: 'default',\n route: actualRoute,\n title: 'Page Not Configured',\n description: 'This page has not been published yet.',\n layoutTree: [],\n };\n\n setInitialized(true);\n setSource((prev) => (prev === result.source ? prev : result.source));\n setMeta((prev) =>\n prev === result.meta ||\n JSON.stringify(prev) === JSON.stringify(result.meta)\n ? prev\n : result.meta\n );\n setError((prev) => (prev === result.error ? prev : result.error));\n setPageConfig((prev) => {\n if (\n prev &&\n prev.id === nextConfig.id &&\n normalizeRoutePath(prev.route) === normalizeRoutePath(nextConfig.route) &&\n JSON.stringify(prev.layoutTree) === JSON.stringify(nextConfig.layoutTree)\n ) {\n return prev;\n }\n return nextConfig;\n });\n if (result.pageConfig) {\n sdk.applyResolvedPageData(\n result.pageConfig.pageData || null,\n result.pageConfig.route,\n extractRouteParams(result.pageConfig.route, actualRoute)\n );\n }\n loadedRouteRef.current = actualRoute;\n } catch (err) {\n if (cancelled) return;\n console.error('Error fetching page config:', err);\n setInitialized(true);\n setError(err instanceof Error ? err.message : 'Unknown error');\n setSource(null);\n setMeta(null);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [\n pathname,\n config.trackingId,\n config.target,\n config.debug,\n config.dev,\n config.siteId,\n config.clientPersonalization,\n pageContextKey,\n ]);\n\n return (\n <AmplifyUpContext.Provider\n value={{ pageConfig, loading, error, source, meta }}\n >\n {children}\n </AmplifyUpContext.Provider>\n );\n}\n\nexport function useAmplifyUp() {\n const context = useContext(AmplifyUpContext);\n if (!context) {\n throw new Error('useAmplifyUp must be used within AmplifyUpProvider');\n }\n return context;\n}\n\nexport type {\n PageConfig,\n ZoneConfig,\n ContentSource,\n AmplifyContentMeta,\n} from './types';\n\nexport { AmplifyRenderer } from './AmplifyRenderer';\nexport { AmplifyPageContent } from './AmplifyPageContent';\nexport {\n queryContent,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\nexport { isComposerPreview, isPreviewRequest, isWorkingContentRequest } from './preview';\nexport {\n selectVariants,\n SelectVariantsError,\n type SelectVariantsOptions,\n type SelectVariantsResult,\n} from './edge/select';\nexport {\n Slot,\n Field,\n Image,\n RichText,\n ComponentContextProvider,\n} from './components';\nexport { ComposerProvider, MaybeComposerProvider } from './composer-provider';\nexport {\n toFieldEnvelopes,\n attachFieldEnvelopes,\n envelopeListRows,\n composerStoreKey,\n listOwnerFromSpec,\n isFieldEnvelope,\n isReadOnlyRowField,\n isBrandedFields,\n type Field as FieldEnvelope,\n type FieldRef,\n type Fields,\n type ListRow,\n type ImageValue,\n type PortableRef,\n type LayoutComponentProps,\n} from './field-envelope';\n"]}
1
+ {"version":3,"sources":["../src/adapters/aws.ts","../src/storage.ts","../src/targets.ts","../src/preview.ts","../src/field-envelope.ts","../src/page-context.ts","../src/page-resource-runtime.ts","../src/debug.ts","../src/content/layoutProviderCache.ts","../src/edge/normalizeRoute.ts","../src/edge/variantKeys.ts","../src/edge/resolve.ts","../src/edge/mapResolvedToPageConfig.ts","../src/content/fetchContent.ts","../src/edge/select.ts","../src/edge/query.ts","../src/index.ts","../src/use-composer-preview.ts","../src/composer-store.ts","../src/composer-provider.tsx","../src/AmplifyRenderer.tsx","../src/EmptySlotHint.tsx","../src/AmplifyPageContent.tsx","../src/composer-edit-mode.ts","../src/components.tsx","../src/react.tsx"],"names":["orchestratorUrl","isPageResourceSentinel","nodeId","useEffect","jsx","useState","rawTree","layoutTree","Fragment","jsxs","createContext","useContext","useSyncExternalStore","useRef","React","normalizeRoutePath"],"mappings":"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","file":"react.mjs","sourcesContent":["/**\n * AWS Native CDP Adapter\n * \n * Implements the CDPAdapter interface using AWS API Gateway directly.\n * Pure AWS architecture adapter for event ingestion.\n */\n\nimport { CDPAdapter, AmplifyUpConfig, PageProperties, TrackProperties, IdentifyTraits, IdentifyInput, ProfileFieldsInput } from '../types';\n\n// Internal config type that includes URLs (not part of user config)\ninterface InternalConfig extends AmplifyUpConfig {\n apiGatewayUrl?: string;\n orchestratorUrl?: string;\n decisionApiUrl?: string;\n}\n\nexport class AWSAdapter implements CDPAdapter {\n private initialized = false;\n private config: AmplifyUpConfig | null = null;\n private apiGatewayUrl: string = '';\n\n async init(config: InternalConfig): Promise<void> {\n if (typeof window === 'undefined') {\n console.warn('AmplifyUp SDK: Window object not available (SSR)');\n return;\n }\n\n if (this.initialized) {\n return;\n }\n\n this.config = {\n trackingId: config.trackingId,\n debug: config.debug,\n dev: config.dev,\n };\n this.apiGatewayUrl = config.apiGatewayUrl || '';\n\n if (!this.apiGatewayUrl) {\n console.warn('AmplifyUp SDK: AWS API Gateway URL not configured. Tracking disabled.');\n return;\n }\n\n this.initialized = true;\n\n if (config.debug) {\n console.log('AmplifyUp SDK: AWS adapter initialized', {\n apiGatewayUrl: this.apiGatewayUrl,\n });\n }\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n private async sendEvent(endpoint: string, eventData: any): Promise<void> {\n if (!this.apiGatewayUrl) {\n console.warn('AmplifyUp SDK: AWS configuration missing');\n return;\n }\n\n const url = `${this.apiGatewayUrl}${endpoint}`;\n \n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(eventData),\n // Keep the request alive through tab close so the single Time on Page\n // flush on pagehide is not cancelled with the document.\n keepalive: true,\n });\n\n if (!response.ok) {\n if (this.config.debug) {\n console.warn(`AmplifyUp SDK: Event tracking failed: ${response.status} ${response.statusText}`);\n }\n } else if (this.config.debug) {\n const result = await response.json().catch(() => ({}));\n console.log('AmplifyUp SDK: Event tracked', result);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('AmplifyUp SDK: Event tracking error:', error);\n }\n }\n }\n\n page(properties: PageProperties): void {\n if (!this.initialized) {\n return;\n }\n\n // CRITICAL: Double-check preview mode at adapter level - exit immediately\n if (typeof window !== 'undefined') {\n // Check preview flag\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Silent exit\n }\n // Check URL path for proxy route\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Silent exit\n }\n // Check query params\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Silent exit\n }\n // Check if in iframe\n if (window.self !== window.top) {\n return; // Silent exit - iframe = preview mode\n }\n // Check URL string\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Silent exit\n }\n }\n\n const eventData = {\n type: 'page',\n anonymousId: properties.instanceId,\n sessionId: properties.sessionId,\n userId: properties.userId,\n properties: {\n path: properties.path || properties.url,\n referrer: properties.referrer,\n ...properties,\n },\n context: {\n page: {\n path: properties.path || properties.url,\n referrer: properties.referrer,\n },\n },\n timestamp: properties.timestamp || new Date().toISOString(),\n };\n\n this.sendEvent('/v1/page', eventData);\n }\n\n track(eventName: string, properties: TrackProperties): void {\n if (!this.initialized) {\n return;\n }\n\n // CRITICAL: Double-check preview mode at adapter level - exit immediately\n if (typeof window !== 'undefined') {\n // Check preview flag\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Silent exit\n }\n // Check URL path for proxy route\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Silent exit\n }\n // Check query params\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Silent exit\n }\n // Check if in iframe\n if (window.self !== window.top) {\n return; // Silent exit - iframe = preview mode\n }\n // Check URL string\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Silent exit\n }\n }\n\n const eventData = {\n type: 'track',\n event: eventName,\n anonymousId: properties.instanceId,\n sessionId: properties.sessionId,\n userId: properties.userId,\n properties: {\n ...properties,\n },\n context: {\n url: properties.url || (typeof window !== 'undefined' ? window.location.href : ''),\n },\n timestamp: properties.timestamp || new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n identify(userIdOrIdentifiers: IdentifyInput, traits: IdentifyTraits = {}): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Call init() first.');\n return;\n }\n\n const isMap =\n userIdOrIdentifiers !== null &&\n typeof userIdOrIdentifiers === 'object' &&\n !Array.isArray(userIdOrIdentifiers);\n\n const identifiers = isMap\n ? (userIdOrIdentifiers as Record<string, string | number>)\n : traits.identifiers;\n\n const userId = isMap\n ? undefined\n : String(userIdOrIdentifiers);\n\n const eventData: Record<string, unknown> = {\n type: 'identify',\n anonymousId: traits.instanceId,\n sessionId: traits.sessionId,\n traits: {\n ...traits,\n ...(identifiers ? { identifiers } : {}),\n },\n ...(identifiers ? { identifiers } : {}),\n ...(userId ? { userId } : {}),\n timestamp: new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n setProfileFields(fields: ProfileFieldsInput, context: IdentifyTraits = {}): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Call init() first.');\n return;\n }\n\n const eventData = {\n type: 'set_fields',\n anonymousId: context.instanceId,\n sessionId: context.sessionId,\n fields,\n traits: {\n instanceId: context.instanceId,\n trackingId: context.trackingId,\n },\n properties: {\n trackingId: context.trackingId,\n },\n timestamp: new Date().toISOString(),\n };\n\n this.sendEvent('/v1/track', eventData);\n }\n\n reset(): void {\n // AWS adapter doesn't need special reset logic\n // Identity is managed by the SDK storage layer\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Reset called (identity cleared)');\n }\n }\n}\n\n","/**\n * Storage utilities for instance ID and user ID\n */\n\nconst INSTANCE_ID_KEY = 'amplifyup_instance_id';\nconst USER_ID_KEY = 'amplifyup_user_id';\nconst SESSION_ID_KEY = 'amplifyup_session_id';\nconst SESSION_ACTIVITY_KEY = 'amplifyup_session_activity';\n/** First-party cookie so Next middleware can SSR/ISR personalized variants. */\nexport const ANON_COOKIE_NAME = 'amplifyup_anon_id';\n/** First-party session cookie — same pattern as visitor id; 30-minute inactivity. */\nexport const SESSION_COOKIE_NAME = 'amplifyup_session_id';\n/** Idle gap that starts a new session. Keep aligned with orchestrator SESSION_GAP_MS. */\nexport const SESSION_IDLE_GAP_MS = 30 * 60 * 1000;\n\n/**\n * Generate a random GUID (UUID v4 style)\n */\nfunction generateGuid(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n // Fallback for older environments\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const parts = document.cookie.split(';');\n for (const part of parts) {\n const idx = part.indexOf('=');\n if (idx === -1) continue;\n if (part.slice(0, idx).trim() !== name) continue;\n const value = part.slice(idx + 1).trim();\n try {\n return value ? decodeURIComponent(value) : null;\n } catch {\n return value || null;\n }\n }\n return null;\n}\n\nfunction writeCookie(name: string, value: string, maxAgeSeconds = 31536000): void {\n if (typeof document === 'undefined') return;\n document.cookie = `${name}=${encodeURIComponent(value)}; Path=/; Max-Age=${maxAgeSeconds}; SameSite=Lax`;\n}\n\n/**\n * Get or create instance ID (browser/device identifier).\n * localStorage + first-party cookie (middleware reads the cookie).\n */\nexport function getInstanceId(): string {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const fromCookie = readCookie(ANON_COOKIE_NAME);\n const fromLs = localStorage.getItem(INSTANCE_ID_KEY);\n const instanceId = fromLs || fromCookie || `browser_${generateGuid()}`;\n\n if (fromLs !== instanceId) {\n localStorage.setItem(INSTANCE_ID_KEY, instanceId);\n }\n if (fromCookie !== instanceId) {\n writeCookie(ANON_COOKIE_NAME, instanceId);\n }\n return instanceId;\n}\n\n/**\n * Get stored user ID\n */\nexport function getUserId(): string | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n return localStorage.getItem(USER_ID_KEY);\n}\n\n/**\n * Get or mint a session id. Resets after 30 minutes of inactivity.\n * Cookie + localStorage, same pattern as visitor id.\n */\nexport function getSessionId(): string {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const now = Date.now();\n const lastActivity = Number(localStorage.getItem(SESSION_ACTIVITY_KEY) || 0);\n const fromCookie = readCookie(SESSION_COOKIE_NAME);\n const fromLs = localStorage.getItem(SESSION_ID_KEY);\n let sessionId = fromLs || fromCookie || '';\n\n if (!sessionId || (lastActivity > 0 && now - lastActivity >= SESSION_IDLE_GAP_MS)) {\n sessionId = generateGuid();\n }\n\n localStorage.setItem(SESSION_ID_KEY, sessionId);\n localStorage.setItem(SESSION_ACTIVITY_KEY, String(now));\n writeCookie(SESSION_COOKIE_NAME, sessionId, Math.floor(SESSION_IDLE_GAP_MS / 1000));\n return sessionId;\n}\n\n/**\n * Store user ID\n */\nexport function setUserId(userId: string): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n localStorage.setItem(USER_ID_KEY, userId);\n}\n\n/**\n * Clear stored IDs (logout)\n */\nexport function clearIds(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n localStorage.removeItem(INSTANCE_ID_KEY);\n localStorage.removeItem(USER_ID_KEY);\n localStorage.removeItem(SESSION_ID_KEY);\n localStorage.removeItem(SESSION_ACTIVITY_KEY);\n document.cookie = `${ANON_COOKIE_NAME}=; Path=/; Max-Age=0; SameSite=Lax`;\n document.cookie = `${SESSION_COOKIE_NAME}=; Path=/; Max-Age=0; SameSite=Lax`;\n}\n","/**\n * AmplifyUp environment targets\n *\n * Two environments only:\n * - local: apps/config from localhost + Neon; events & personalize from AWS development\n * - production: all production AmplifyUp / AWS endpoints\n *\n * Controlled via `config.target` or `NEXT_PUBLIC_AMPLIFYUP_TARGET`.\n * Legacy value `dev` is treated as `local`.\n */\n\nexport type AmplifyUpTarget = 'local' | 'production';\n\n/** Accepted env/config strings (includes legacy `dev` → local). */\nexport type AmplifyUpTargetInput = AmplifyUpTarget | 'dev';\n\nexport interface AmplifyUpUrls {\n target: AmplifyUpTarget;\n apiGatewayUrl: string;\n orchestratorUrl: string;\n decisionApiUrl: string;\n edgeUrl: string;\n}\n\nconst AWS_DEV_API = 'https://api-dev.amplifyup.ai';\nconst AWS_PROD_API = 'https://api.amplifyup.ai';\nconst PROD_ORCHESTRATOR = 'https://amplifyup.ai';\nconst PROD_EDGE = 'https://edge.amplifyup.ai';\n\nexport function isAmplifyUpTarget(value: unknown): value is AmplifyUpTargetInput {\n return value === 'local' || value === 'dev' || value === 'production';\n}\n\nexport function normalizeAmplifyUpTarget(value: AmplifyUpTargetInput): AmplifyUpTarget {\n return value === 'dev' ? 'local' : value;\n}\n\n/**\n * Resolve which target to use.\n *\n * Priority:\n * 1. explicit config.target\n * 2. config.dev === true → 'local' (local apps + AWS-dev pipeline)\n * 3. NEXT_PUBLIC_AMPLIFYUP_TARGET\n * 4. unset → 'production' (live endpoints — hosting on localhost does NOT imply local)\n *\n * Use `local` only when developing against the AmplifyUp monorepo\n * (set NEXT_PUBLIC_AMPLIFYUP_TARGET=local in .env.local).\n */\nexport function resolveAmplifyUpTarget(options?: {\n configTarget?: AmplifyUpTargetInput;\n /** @deprecated Prefer NEXT_PUBLIC_AMPLIFYUP_TARGET=local. When true, resolves to local. */\n configDev?: boolean;\n}): AmplifyUpTarget {\n if (options?.configTarget && isAmplifyUpTarget(options.configTarget)) {\n return normalizeAmplifyUpTarget(options.configTarget);\n }\n\n if (options?.configDev === true) {\n return 'local';\n }\n\n const envTarget =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_TARGET\n : undefined;\n if (isAmplifyUpTarget(envTarget)) {\n return normalizeAmplifyUpTarget(envTarget);\n }\n\n return 'production';\n}\n\n/** True when the orchestrator origin is a remote AmplifyUp deployment (not localhost). */\nexport function isRemoteOrchestratorUrl(orchestratorUrl: string): boolean {\n try {\n const host = new URL(orchestratorUrl).hostname.toLowerCase();\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '::1';\n } catch {\n return false;\n }\n}\n\nfunction localOrchestratorUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n return (fromEnv || 'http://localhost:5001').replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local→AWS-dev API base (events + personalize).\n * Defaults to https://api-dev.amplifyup.ai\n */\nfunction localAwsApiUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL\n : undefined;\n return (fromEnv || AWS_DEV_API).replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local Edge Worker URL.\n * Defaults to http://localhost:8787\n */\nfunction localEdgeUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL\n : undefined;\n return (fromEnv || 'http://localhost:8787').replace(/\\/$/, '');\n}\n\nexport function resolveAmplifyUpUrls(target: AmplifyUpTarget): AmplifyUpUrls {\n if (target === 'local') {\n const orchestratorUrl = localOrchestratorUrl();\n const apiGatewayUrl = localAwsApiUrl();\n return {\n target: 'local',\n // Layouts / site config / composer APIs → local orchestrator + Neon\n orchestratorUrl,\n // Events + personalize → AWS development stack\n apiGatewayUrl,\n decisionApiUrl: `${apiGatewayUrl}/v1/personalize`,\n edgeUrl: localEdgeUrl(),\n };\n }\n\n const resolvedApi =\n (typeof process !== 'undefined' &&\n process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL?.replace(/\\/$/, '')) ||\n AWS_PROD_API;\n\n const orchestratorFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n\n // Production: don't accidentally use a localhost orchestrator URL from a local env file\n const isLocalOrchestrator =\n !!orchestratorFromEnv &&\n (orchestratorFromEnv.includes('localhost') ||\n orchestratorFromEnv.includes('127.0.0.1'));\n\n const orchestratorUrl = isLocalOrchestrator || !orchestratorFromEnv\n ? PROD_ORCHESTRATOR\n : orchestratorFromEnv.replace(/\\/$/, '');\n\n const edgeFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL?.replace(/\\/$/, '')\n : undefined;\n const edgeUrl =\n edgeFromEnv &&\n !edgeFromEnv.includes('localhost') &&\n !edgeFromEnv.includes('127.0.0.1')\n ? edgeFromEnv\n : PROD_EDGE;\n\n return {\n target: 'production',\n apiGatewayUrl: resolvedApi,\n orchestratorUrl,\n decisionApiUrl: `${resolvedApi}/v1/personalize`,\n edgeUrl,\n };\n}\n","/**\n * Composer / visual-editor preview detection.\n * Shared by AmplifyPageContent, AmplifyUpProvider, and AmplifyRenderer.\n */\n\n/** True when `preview=true` (or legacy visualEditor) is in request search params. */\nexport function isPreviewRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'preview') || paramIsTrue(searchParams, 'visualEditor');\n}\n\n/**\n * Composer Edit (not Preview toggle): overlay unpublished CMS docs.\n * Live visitors and Composer Preview omit this.\n */\nexport function isWorkingContentRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'working');\n}\n\nfunction paramIsTrue(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams,\n key: string\n): boolean {\n if (searchParams instanceof URLSearchParams) {\n return searchParams.get(key) === 'true';\n }\n const value = searchParams[key];\n return value === 'true' || (Array.isArray(value) && value[0] === 'true');\n}\n\n/**\n * Client-only: true when the page is loaded inside AmplifyUp Composer.\n * Does NOT treat every iframe as preview — only Composer referrers / query flags.\n */\nexport function isComposerPreview(): boolean {\n if (typeof window === 'undefined') return false;\n\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) return true;\n\n const params = new URLSearchParams(window.location.search);\n if (isPreviewRequest(params)) return true;\n\n if (window.self !== window.top && document.referrer) {\n try {\n const refUrl = new URL(document.referrer);\n if (\n refUrl.hostname === 'amplifyup.ai' ||\n refUrl.hostname.endsWith('.amplifyup.ai') ||\n (refUrl.hostname === 'localhost' && refUrl.port === '5001') ||\n refUrl.pathname.includes('/dashboard/composer') ||\n refUrl.pathname.includes('/dashboard/routes/')\n ) {\n return true;\n }\n } catch {\n // ignore parse error\n }\n }\n\n return false;\n}\n","/**\n * Field envelopes — same shape in published, draft, and Composer edit.\n * `{ value, name, ref? }` where `name` is the path within the owning record\n * (`title`, `author.name`). Page-level fields omit `ref`.\n * `ref` is stamped from the connection that produced the row\n * (`providerId`, AmplifyUp `entity`, `id`) — never from a CMS `_type`.\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`) and again\n * on the SDK for `queryContent` rows.\n */\n\nexport const FIELDS_BRAND: unique symbol = Symbol('amplifyup.fields');\n\nexport type ImageValue = {\n url: string;\n alt?: string;\n width?: number;\n height?: number;\n};\n\n/** Connection that produced a list row. Omitted on page-level fields. */\nexport type FieldRef = {\n providerId: string;\n entity: string;\n id: string;\n};\n\n/** AmplifyUp entity + provider from the connection that produced a list. */\nexport type ListOwner = {\n providerId: string;\n entity: string;\n};\n\nexport type ConnectionLike = {\n mode?: string;\n providerId?: string;\n entity?: string;\n spec?: { providerId?: string; entity?: string };\n};\n\nexport type FieldReadLike = {\n resource: string;\n path?: string;\n /** Schema field kind (image, string, object, …) from the component definition. */\n kind?: string;\n};\n\nexport type EnvelopeSources = {\n connections?: Record<string, ConnectionLike | null | undefined>;\n reads?: Record<string, FieldReadLike>;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n ref?: FieldRef;\n /** Row field with no write target — display only in Composer. */\n readOnly?: true;\n};\n\n/** Portable entry identity after normalize (`id` required). */\nexport type PortableRef = {\n id: string;\n type?: string;\n};\n\nconst IDENTIFIER_KEYS = new Set([\n 'id',\n '_id',\n 'slug',\n 'key',\n '_key',\n 'docId',\n '_type',\n 'type',\n]);\n\ntype IdentifierKey =\n | 'id'\n | '_id'\n | 'slug'\n | 'key'\n | '_key'\n | 'docId'\n | '_type'\n | 'type';\n\ntype IsPlainObject<T> = T extends object\n ? T extends readonly unknown[]\n ? false\n : T extends ImageValue\n ? false\n : true\n : false;\n\ntype AsRecord<T> = T extends Record<string, unknown> ? T : Record<string, unknown>;\n\n/** A list row: enveloped fields plus a plain `id`. */\nexport type ListRow<T extends Record<string, unknown> = Record<string, unknown>> =\n Fields<T> & { id: string };\n\ntype FieldsProp<T> = NonNullable<T> extends ImageValue\n ? Field<T | null>\n : NonNullable<T> extends readonly (infer U)[]\n ? IsPlainObject<U> extends true\n ? Field<Array<ListRow<AsRecord<U>>>>\n : Field<T>\n : IsPlainObject<NonNullable<T>> extends true\n ? Fields<NonNullable<T>>\n : Field<T>;\n\nexport type Fields<T> = {\n readonly [FIELDS_BRAND]: true;\n} & {\n [K in keyof T]-?: K extends IdentifierKey ? T[K] : FieldsProp<T[K]>;\n};\n\n/** Props passed into site components. Raw CMS bags are not assignable. */\nexport type LayoutComponentProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n fields: Fields<T>;\n};\n\nexport function isBrandedFields(\n value: unknown\n): value is Fields<Record<string, unknown>> {\n return !!value && typeof value === 'object' && FIELDS_BRAND in value;\n}\n\nexport function brandFields<T extends Record<string, unknown>>(\n bag: T\n): Fields<T> {\n if (isBrandedFields(bag)) return bag as unknown as Fields<T>;\n Object.defineProperty(bag, FIELDS_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n });\n return bag as unknown as Fields<T>;\n}\n\nexport function isFieldEnvelope(value: unknown): value is Field<unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { name?: unknown; value?: unknown; url?: unknown };\n return typeof rec.name === 'string' && 'value' in rec && !('url' in rec);\n}\n\nexport function isFieldsBag(value: unknown): boolean {\n return isBrandedFields(value);\n}\n\n/** Schema kinds that stay structural: recurse as nested bags / list rows. */\nconst OBJECT_FIELD_KINDS = new Set(['object', 'array', 'list']);\n\n/**\n * Schema-driven leaf detection: a declared field kind that is not an\n * object/array is a scalar leaf (image, string, richtext, …) and must be\n * enveloped whole — never recursed into as a nested bag, whatever shape\n * its stored value happens to have.\n */\nexport function isLeafFieldKind(kind: unknown): boolean {\n if (typeof kind !== 'string') return false;\n const normalized = kind.trim().toLowerCase();\n if (!normalized) return false;\n return !OBJECT_FIELD_KINDS.has(normalized);\n}\n\nexport function isPageResourceSentinel(value: unknown): boolean {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { __amplifyupPageResource?: unknown })\n .__amplifyupPageResource === 'string'\n );\n}\n\n/** Portable `{ url }` or a CMS image object — stay a leaf, do not recurse. */\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n if ('url' in value) return true;\n const rec = value as { _type?: unknown; asset?: unknown };\n return rec._type === 'image' || rec.asset != null;\n}\n\nexport function isIdentifierKey(key: string): boolean {\n return IDENTIFIER_KEYS.has(key);\n}\n\n/** Object-array (list of records) vs scalar array (tags, multi-select). */\nexport function isRecordList(value: unknown): value is unknown[] {\n if (!Array.isArray(value) || value.length === 0) return false;\n const sample = value.find((item) => item != null);\n if (sample === undefined) return false;\n if (typeof sample !== 'object' || Array.isArray(sample)) return false;\n if (isPortableImageShape(sample)) return false;\n if ((sample as { $$typeof?: unknown }).$$typeof) return false;\n return true;\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown; id?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity &&\n typeof rec.id === 'string' &&\n !!rec.id\n );\n}\n\nexport function isListOwner(value: unknown): value is ListOwner {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity\n );\n}\n\nexport function isReadOnlyRowField(value: unknown): boolean {\n return isFieldEnvelope(value) && value.readOnly === true && !value.ref;\n}\n\nexport function composerStoreKey(\n name: string,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): string {\n if (isFieldRef(ref)) {\n return `record:${ref.providerId}:${ref.entity}:${ref.id}:${name}`;\n }\n return layoutNodeId ? `page:${layoutNodeId}:${name}` : name;\n}\n\nexport function listOwnerFromConnection(\n conn: ConnectionLike | null | undefined\n): ListOwner | undefined {\n if (!conn || typeof conn !== 'object') return undefined;\n if (conn.mode === 'query') {\n const providerId = String(conn.spec?.providerId || '').trim();\n const entity = String(conn.spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n if (conn.mode === 'item' || conn.mode === 'items') {\n const providerId = String(conn.providerId || '').trim();\n const entity = String(conn.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n return undefined;\n}\n\nexport function listOwnerFromSpec(spec: {\n providerId?: string;\n entity?: string;\n} | null | undefined): ListOwner | undefined {\n const providerId = String(spec?.providerId || '').trim();\n const entity = String(spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n}\n\nfunction isEnvelopeSources(value: unknown): value is EnvelopeSources {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as EnvelopeSources;\n return rec.connections != null || rec.reads != null;\n}\n\nfunction normalizeEnvelopeSources(\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): EnvelopeSources {\n if (!sources) return {};\n if (isEnvelopeSources(sources) && !('mode' in (sources as object))) {\n return sources;\n }\n return { connections: sources as Record<string, ConnectionLike> };\n}\n\nexport function listOwnerForField(\n fieldName: string,\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): ListOwner | undefined {\n const { connections, reads } = normalizeEnvelopeSources(sources);\n const resourceName = reads?.[fieldName]?.resource || fieldName;\n const fromConn = listOwnerFromConnection(connections?.[resourceName]);\n if (fromConn) return fromConn;\n const paging = props?.[`${fieldName}Pagination`];\n if (paging && typeof paging === 'object' && !Array.isArray(paging)) {\n return listOwnerFromSpec((paging as { spec?: { providerId?: string; entity?: string } }).spec);\n }\n return undefined;\n}\n\nfunction joinPath(prefix: string, key: string): string {\n return prefix ? `${prefix}.${key}` : key;\n}\n\nfunction emptyValue(raw: unknown): unknown {\n if (raw === undefined) return null;\n return raw;\n}\n\nfunction rowId(raw: Record<string, unknown>): string {\n const candidates = [raw.id, raw._id, raw.docId, raw.key, raw._key];\n for (const c of candidates) {\n if (typeof c === 'string' && c.trim()) return c;\n }\n return '';\n}\n\ntype EnvelopeScope = {\n ref?: FieldRef;\n readOnly?: boolean;\n owners?: (fieldName: string) => ListOwner | undefined;\n /** Schema-driven: true when the field at this path is a scalar leaf. */\n leaf?: (path: string) => boolean;\n};\n\nfunction withLeaf<T>(\n envelope: Field<T>,\n scope?: EnvelopeScope\n): Field<T> {\n if (isFieldRef(scope?.ref)) envelope.ref = scope.ref;\n else if (scope?.readOnly) envelope.readOnly = true;\n return envelope;\n}\n\n/**\n * Wrap a props bag as envelopes. Already-enveloped bags are returned as-is.\n * Nested plain objects become nested bags; portable images stay a leaf.\n * Object arrays become list rows (`Fields` + plain `id`); `name` is the path\n * within the record when `ref` is set.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = '',\n scope?: EnvelopeScope | FieldRef\n): Fields<T> {\n const ctx: EnvelopeScope = isFieldRef(scope) ? { ref: scope } : scope || {};\n const input =\n source && typeof source === 'object' && !Array.isArray(source) ? source : {};\n if (isBrandedFields(input)) {\n return input as Fields<T>;\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(input)) {\n if (isIdentifierKey(key) && (typeof raw === 'string' || raw == null)) {\n out[key] = raw ?? '';\n continue;\n }\n const path = joinPath(prefix, key);\n if (isPageResourceSentinel(raw)) {\n out[key] = withLeaf({ value: raw, name: path }, ctx);\n continue;\n }\n if (isFieldEnvelope(raw)) {\n const inner = raw.value;\n if (isRecordList(inner)) {\n const owner = ctx.owners?.(key);\n out[key] = {\n value: envelopeListRows(inner, owner),\n name: raw.name || path,\n };\n continue;\n }\n out[key] = withLeaf(\n { value: raw.value ?? null, name: raw.name || path },\n raw.ref ? { ref: raw.ref } : ctx\n );\n continue;\n }\n if (isRecordList(raw)) {\n const owner = ctx.owners?.(key);\n out[key] = { value: envelopeListRows(raw, owner), name: path };\n continue;\n }\n if (ctx.leaf?.(path)) {\n // The connection / page schema declares this field a scalar (image,\n // string, …): envelope it whole so the component keeps its edit\n // identity (data-amplifyup-field) even when the stored value is an\n // object — never recurse into it as a nested bag.\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n out[key] = toFieldEnvelopes(raw as Record<string, unknown>, path, ctx);\n continue;\n }\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\n }\n return brandFields(out as T);\n}\n\nexport function envelopeListRows<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n items: unknown[],\n owner?: ListOwner | null\n): Array<ListRow<T>> {\n return items.map((item) => envelopeListRow<T>(item, owner));\n}\n\nexport function envelopeListRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(item: unknown, owner?: ListOwner | null): ListRow<T> {\n if (isBrandedFields(item) && typeof (item as { id?: unknown }).id === 'string') {\n return item as ListRow<T>;\n }\n const raw =\n item && typeof item === 'object' && !Array.isArray(item)\n ? (item as Record<string, unknown>)\n : {};\n const id = rowId(raw);\n const ref: FieldRef | undefined =\n isListOwner(owner) && id\n ? { providerId: owner.providerId, entity: owner.entity, id }\n : undefined;\n const fields = toFieldEnvelopes(raw, '', {\n ref,\n readOnly: !ref,\n });\n const row = fields as unknown as ListRow<T>;\n if (typeof row.id !== 'string') {\n row.id = id;\n }\n return row;\n}\n\nconst warnedMissingFieldKind = new Set<string>();\n\n/**\n * Dev-only: a read without a schema kind falls back to value-shape handling\n * (the pre-schema behavior). Warn once per field so missing kinds get fixed\n * at the component definition instead of silently shape-guessing.\n *\n * TODO(schema-kinds): once every published snapshot / layout response ships\n * `reads[field].kind`, remove the shape fallback in `toFieldEnvelopes` (the\n * portable-image / plain-object heuristics for schema-less fields).\n * (The coerceImageField recovery was removed — assertNamedEnvelope in\n * components.tsx now fails loudly on partial envelopes instead.)\n */\nfunction warnMissingFieldKind(fieldName: string): void {\n if (process.env.NODE_ENV === 'production') return;\n if (warnedMissingFieldKind.has(fieldName)) return;\n warnedMissingFieldKind.add(fieldName);\n console.warn(\n `[AmplifyUp SDK] Field \"${fieldName}\" has no schema kind; using value-shape detection. Republish the component definition so its fields carry a type.`\n );\n}\n\n/** Attach branded `fields` once. Keeps sibling keys (e.g. zoneId). */\nexport function attachFieldEnvelopes(\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): Record<string, unknown> {\n const raw = props && typeof props === 'object' ? { ...props } : {};\n if (isBrandedFields(raw.fields)) return raw;\n const { fields: existing, ...content } = raw;\n const source =\n existing && typeof existing === 'object' && !isFieldEnvelope(existing)\n ? (existing as Record<string, unknown>)\n : content;\n const { reads } = normalizeEnvelopeSources(sources);\n if (reads) {\n for (const [fieldName, read] of Object.entries(reads)) {\n if (!read?.kind) warnMissingFieldKind(fieldName);\n }\n }\n return {\n ...raw,\n fields: toFieldEnvelopes(source, '', {\n owners: (fieldName) => listOwnerForField(fieldName, source, sources),\n // Top-level field paths equal field names; nested paths have no schema\n // entry and fall back to shape-based handling.\n leaf: (path) => isLeafFieldKind(reads?.[path]?.kind),\n }),\n };\n}\n\nfunction walkLayoutNodes(nodes: unknown[] | undefined): void {\n if (!Array.isArray(nodes)) return;\n for (const node of nodes) {\n if (!node || typeof node !== 'object') continue;\n const rec = node as {\n props?: Record<string, unknown>;\n resources?: Record<string, ConnectionLike>;\n reads?: Record<string, FieldReadLike>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props, {\n connections: rec.resources,\n reads: rec.reads,\n });\n for (const slot of rec.slots || []) {\n walkLayoutNodes(slot.children);\n }\n }\n}\n\n/** Brand `fields` on an orchestrator page tree (preview). Idempotent. */\nexport function envelopePageConfig<T extends { layoutTree?: unknown }>(\n page: T | null | undefined\n): T | null {\n if (!page || typeof page !== 'object') return page ?? null;\n const tree = page.layoutTree;\n if (Array.isArray(tree)) walkLayoutNodes(tree);\n return page;\n}\n\nexport type FieldPatch = {\n name: string;\n value: unknown;\n ref?: FieldRef;\n};\n\n/**\n * Flatten a props or fields bag into Composer patches.\n * Page fields key on `name` (page path). Row fields include `ref`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): FieldPatch[] {\n const out: FieldPatch[] = [];\n\n const walkRows = (items: unknown[]) => {\n for (const item of items) {\n if (\n isBrandedFields(item) ||\n (item && typeof item === 'object' && !Array.isArray(item) && !isFieldEnvelope(item))\n ) {\n walk(item as Record<string, unknown>, '');\n }\n }\n };\n\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (isIdentifierKey(key)) continue;\n if (\n key === 'fields' &&\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isFieldEnvelope(raw)\n ) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n if (isRecordList(raw.value)) {\n walkRows(raw.value);\n continue;\n }\n const patch: FieldPatch = {\n name: raw.name || path,\n value: raw.value,\n };\n if (raw.ref) patch.ref = raw.ref;\n out.push(patch);\n continue;\n }\n if (isRecordList(raw)) {\n walkRows(raw);\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n walk(raw as Record<string, unknown>, path);\n continue;\n }\n out.push({ name: path, value: emptyValue(raw) });\n }\n };\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n walk(props, '');\n }\n return out;\n}\n\nexport function envelopeValue(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\nexport function envelopeName(field: unknown): string {\n if (isFieldEnvelope(field)) return field.name;\n return '';\n}\n\nexport function envelopeRef(field: unknown): FieldRef | undefined {\n if (isFieldEnvelope(field) && field.ref) return field.ref;\n return undefined;\n}\n\n/** Resolve Field/Image/RichText binding. Computed `value` requires `name`. */\nexport function resolveEditableBinding(\n field: Field<unknown> | undefined,\n value: unknown,\n name: string | undefined\n): {\n name: string;\n value: unknown;\n ref?: FieldRef;\n requiresName: boolean;\n} {\n if (isFieldEnvelope(field)) {\n return {\n name: field.name,\n value: field.value,\n ref: field.ref,\n requiresName: false,\n };\n }\n return {\n name: name || '',\n value,\n requiresName: value !== undefined && !name,\n };\n}\n","/**\n * Runtime page-data context: validate SDK-supplied entity fields against\n * the published pageData contract and attach to events.\n */\n\nimport { brandFields, isBrandedFields } from './field-envelope';\n\nexport type PageDataFieldDef = {\n key: string;\n dataType: 'string' | 'number' | 'date' | 'boolean';\n multiValue: boolean;\n label?: string;\n passThrough?: boolean;\n};\n\nexport type PageDataSnapshot = {\n resources: Array<{\n name: string;\n type: string;\n urlParamMapping?: { param: string; field: string };\n fields: PageDataFieldDef[];\n }>;\n pageFields: Array<\n PageDataFieldDef &\n Partial<\n | { source: 'static'; value: unknown }\n | { source: 'mapped'; resource: string; field: string }\n >\n >;\n};\n\nexport function extractRouteParams(\n pattern: string,\n url: string\n): Record<string, string> {\n const patternParts = String(pattern || '')\n .split('/')\n .filter(Boolean);\n const urlParts = String(url || '')\n .split('?')[0]\n .split('#')[0]\n .split('/')\n .filter(Boolean);\n if (patternParts.length !== urlParts.length) return {};\n const params: Record<string, string> = {};\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i]!;\n if (part.startsWith(':')) {\n params[part.slice(1)] = urlParts[i]!;\n }\n }\n return params;\n}\n\nexport type AmplifyPageContextInput = {\n resourceType: string;\n key: string;\n fields?: Record<string, unknown>;\n};\n\nexport type AttachedResourceContext = {\n type: string;\n key: string;\n params: Record<string, string>;\n fields: Record<string, unknown>;\n};\n\nexport type AttachedPageEventContext = {\n resource?: AttachedResourceContext;\n page: { fields: Record<string, unknown> };\n pageRoute: string;\n};\n\nexport type PageContextLogger = {\n warn: (...args: unknown[]) => void;\n};\n\nconst defaultLog: PageContextLogger = {\n warn: (...args: unknown[]) => {\n if (typeof console !== 'undefined') console.warn(...args);\n },\n};\n\nfunction coerceField(\n def: PageDataFieldDef,\n raw: unknown,\n log: PageContextLogger\n): unknown {\n if (raw == null) return undefined;\n if (def.multiValue) {\n const list = Array.isArray(raw) ? raw : [raw];\n const out: unknown[] = [];\n for (const item of list) {\n const coerced = coerceScalar(def, item, log);\n if (coerced !== undefined) out.push(coerced);\n }\n return out;\n }\n return coerceScalar(def, raw, log);\n}\n\nfunction coerceScalar(\n def: PageDataFieldDef,\n raw: unknown,\n log: PageContextLogger\n): unknown {\n switch (def.dataType) {\n case 'string':\n if (typeof raw === 'string') return raw;\n if (typeof raw === 'number' || typeof raw === 'boolean') return String(raw);\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected string)`);\n return undefined;\n case 'number': {\n if (typeof raw === 'number' && Number.isFinite(raw)) return raw;\n if (typeof raw === 'string' && raw.trim() !== '' && Number.isFinite(Number(raw))) {\n return Number(raw);\n }\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected number)`);\n return undefined;\n }\n case 'boolean': {\n if (typeof raw === 'boolean') return raw;\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected boolean)`);\n return undefined;\n }\n case 'date': {\n if (typeof raw === 'string' && !Number.isNaN(Date.parse(raw))) return raw;\n log.warn(`AmplifyUp: dropped field \"${def.key}\" (expected date)`);\n return undefined;\n }\n default:\n return undefined;\n }\n}\n\nexport function applyPageContext(\n input: AmplifyPageContextInput,\n opts: {\n pageData?: PageDataSnapshot | null;\n routeParams?: Record<string, string>;\n pageRoute?: string;\n log?: PageContextLogger;\n }\n): AttachedPageEventContext | null {\n const log = opts.log || defaultLog;\n const key = String(input.key || '').trim();\n if (!key || !input.resourceType) {\n log.warn('AmplifyUp: pageContext needs resourceType and key');\n return null;\n }\n\n const resource = opts.pageData?.resources?.[0];\n if (resource && resource.type && resource.type !== input.resourceType) {\n log.warn(\n `AmplifyUp: pageContext resourceType \"${input.resourceType}\" does not match page resource \"${resource.type}\"`\n );\n return null;\n }\n\n const fieldDefs = resource?.fields || [];\n const defByKey = new Map(fieldDefs.map((f) => [f.key, f]));\n const rawFields = input.fields && typeof input.fields === 'object' ? input.fields : {};\n const fields: Record<string, unknown> = {};\n\n if (fieldDefs.length === 0) {\n Object.assign(fields, rawFields);\n } else {\n for (const [k, v] of Object.entries(rawFields)) {\n const def = defByKey.get(k);\n if (!def) {\n log.warn(`AmplifyUp: unknown resource field \"${k}\" dropped`);\n continue;\n }\n if (def.passThrough) {\n if (v != null) fields[k] = v;\n continue;\n }\n const coerced = coerceField(def, v, log);\n if (coerced !== undefined) fields[k] = coerced;\n }\n }\n\n const params = { ...(opts.routeParams || {}) };\n const mapping = resource?.urlParamMapping;\n let resourceKey = key;\n if (mapping) {\n const fromUrl = params[mapping.param];\n const fromField = fields[mapping.field];\n if (fromUrl) resourceKey = String(fromUrl);\n if (\n fromUrl &&\n fromField != null &&\n String(fromField) !== String(fromUrl)\n ) {\n log.warn(\n `AmplifyUp: resource key mismatch — URL :${mapping.param} is \"${fromUrl}\" but ${mapping.field} is \"${String(fromField)}\". Using the URL param.`\n );\n }\n }\n\n const pageFields: Record<string, unknown> = {};\n for (const pf of opts.pageData?.pageFields || []) {\n if (pf.source === 'static') {\n if (pf.value !== undefined) pageFields[pf.key] = pf.value;\n continue;\n }\n if (pf.source === 'mapped' && pf.resource && pf.field) {\n pageFields[pf.key] = fields[pf.field];\n }\n }\n\n return {\n resource: {\n type: input.resourceType,\n key: resourceKey,\n params,\n fields,\n },\n page: { fields: pageFields },\n pageRoute: opts.pageRoute || '',\n };\n}\n\nexport function staticPageFieldsFromSnapshot(\n pageData: PageDataSnapshot | null | undefined\n): Record<string, unknown> {\n const pageFields: Record<string, unknown> = {};\n for (const pf of pageData?.pageFields || []) {\n if (pf.source === 'static' && pf.value !== undefined) {\n pageFields[pf.key] = pf.value;\n }\n }\n return pageFields;\n}\n\nexport function attachStaticPageContext(\n pageData: PageDataSnapshot | null | undefined,\n pageRoute?: string\n): AttachedPageEventContext | null {\n if (!pageData) return null;\n const fields = staticPageFieldsFromSnapshot(pageData);\n const hasStatic = Object.keys(fields).length > 0;\n const hasRoute = !!pageRoute;\n if (!hasStatic && !hasRoute) return null;\n return {\n page: { fields },\n pageRoute: pageRoute || '',\n };\n}\n\nexport function mergeEventContext(\n properties: Record<string, unknown>,\n attached: AttachedPageEventContext | null\n): Record<string, unknown> {\n if (!attached) return properties;\n return {\n ...properties,\n ...(attached.resource ? { resource: attached.resource } : {}),\n page: attached.page,\n ...(attached.pageRoute ? { pageRoute: attached.pageRoute } : {}),\n };\n}\n\n/** Stamped onto Edge-resolved props so the SDK can fill From-page fields. */\nexport const PAGE_RESOURCE_MARKER = '__amplifyupPageResource';\n\nexport type PageResourceSentinel = {\n [PAGE_RESOURCE_MARKER]: string;\n path?: string;\n};\n\nexport function isPageResourceSentinel(\n value: unknown\n): value is PageResourceSentinel {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as Record<string, unknown>)[PAGE_RESOURCE_MARKER] === 'string'\n );\n}\n\nfunction getByDotPath(\n source: Record<string, unknown>,\n path: string\n): unknown {\n if (!path) return source;\n const parts = path.split('.').filter(Boolean);\n let cur: unknown = source;\n for (const part of parts) {\n if (cur == null || typeof cur !== 'object' || Array.isArray(cur)) {\n return undefined;\n }\n cur = (cur as Record<string, unknown>)[part];\n }\n return cur;\n}\n\nexport function hydratePageResourceValue(\n value: unknown,\n fields: Record<string, unknown> | null | undefined\n): unknown {\n if (!isPageResourceSentinel(value)) return value;\n if (!fields) return null;\n if (value.path) return getByDotPath(fields, value.path) ?? null;\n return fields;\n}\n\nfunction hydrateFieldsBag(\n bag: Record<string, unknown>,\n fields: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(bag)) {\n if (\n val &&\n typeof val === 'object' &&\n !Array.isArray(val) &&\n typeof (val as { name?: unknown }).name === 'string' &&\n 'value' in val &&\n !('url' in val)\n ) {\n const env = val as { name: string; value: unknown };\n out[key] = {\n // Keep ref / readOnly / source — dropping them severs the write target.\n ...(val as Record<string, unknown>),\n name: env.name,\n value: isPageResourceSentinel(env.value)\n ? hydratePageResourceValue(env.value, fields)\n : env.value,\n };\n continue;\n }\n if (val && typeof val === 'object' && !Array.isArray(val) && !('url' in val)) {\n out[key] = hydrateFieldsBag(val as Record<string, unknown>, fields);\n continue;\n }\n out[key] = isPageResourceSentinel(val)\n ? hydratePageResourceValue(val, fields)\n : val;\n }\n return out;\n}\n\nexport function hydratePageResourceProps(\n props: Record<string, unknown> | null | undefined,\n fields: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const source = props && typeof props === 'object' ? props : {};\n const out: Record<string, unknown> = { ...source };\n if (out.fields && typeof out.fields === 'object' && !Array.isArray(out.fields)) {\n const next = hydrateFieldsBag(out.fields as Record<string, unknown>, fields);\n out.fields = isBrandedFields(out.fields)\n ? brandFields(next)\n : next;\n }\n for (const [key, val] of Object.entries(out)) {\n if (key === 'fields') continue;\n if (isPageResourceSentinel(val)) {\n out[key] = hydratePageResourceValue(val, fields);\n }\n }\n return out;\n}\n","/**\n * Tiny runtime store so Field/ComponentContext can hydrate From-page\n * sentinels without importing the SDK singleton (circular).\n */\n\nlet pageResourceFields: Record<string, unknown> | null = null;\n\nexport function setPageResourceFields(\n fields: Record<string, unknown> | null | undefined\n): void {\n pageResourceFields = fields && typeof fields === 'object' ? fields : null;\n}\n\nexport function getPageResourceFields(): Record<string, unknown> | null {\n return pageResourceFields;\n}\n","/**\n * SDK console logging. Off unless the site opts in.\n *\n * Enable with `NEXT_PUBLIC_AMPLIFYUP_DEBUG=true` (Next.js client bundle)\n * or `AMPLIFYUP_DEBUG=true`, or `debug: true` on `init` / `AmplifyUpProvider`.\n */\n\nfunction envFlag(value: string | undefined): boolean {\n if (!value) return false;\n const v = value.trim().toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\nexport function readAmplifyUpDebugEnv(): boolean {\n try {\n if (typeof process === 'undefined') return false;\n return (\n envFlag(process.env.NEXT_PUBLIC_AMPLIFYUP_DEBUG) ||\n envFlag(process.env.AMPLIFYUP_DEBUG)\n );\n } catch {\n return false;\n }\n}\n\nlet configDebug: boolean | undefined;\n\n/** Called from `init` after resolving `config.debug` vs the env flag. */\nexport function setAmplifyUpDebug(enabled: boolean): void {\n configDebug = enabled;\n}\n\nexport function isAmplifyUpDebug(): boolean {\n if (configDebug === true) return true;\n if (configDebug === false) return false;\n return readAmplifyUpDebugEnv();\n}\n\nconst onceKeys = new Set<string>();\nlet onceRoute = '';\n\nfunction resetOnceIfRouteChanged(): void {\n const route =\n typeof window !== 'undefined' ? window.location.pathname : '';\n if (route === onceRoute) return;\n onceKeys.clear();\n onceRoute = route;\n}\n\nexport function sdkDebug(...args: unknown[]): void {\n if (!isAmplifyUpDebug()) return;\n console.log(...args);\n}\n\n/** Same as `sdkDebug`, but one line per key per route (React remounts included). */\nexport function sdkDebugOnce(key: string, ...args: unknown[]): void {\n if (!isAmplifyUpDebug()) return;\n resetOnceIfRouteChanged();\n if (onceKeys.has(key)) return;\n onceKeys.add(key);\n console.log(...args);\n}\n","/** In-flight + short TTL cache for Composer layout/provider fetches. */\n\nconst SETTLED_TTL_MS = 5_000;\n\nconst inflight = new Map<string, Promise<unknown>>();\nconst settled = new Map<string, { value: unknown; at: number }>();\n\nexport function layoutProviderCacheKey(opts: {\n route: string;\n trackingId?: string | null;\n instanceId?: string | null;\n preview?: boolean;\n working?: boolean;\n zoneId?: string | null;\n compositionId?: string | null;\n}): string {\n const route = (opts.route || '/').split('?')[0] || '/';\n return [\n route,\n opts.trackingId || '',\n opts.instanceId || '',\n opts.preview ? '1' : '0',\n opts.working ? '1' : '0',\n opts.zoneId || '',\n opts.compositionId || '',\n ].join('|');\n}\n\nexport function primeLayoutProviderResult<T>(key: string, value: T): void {\n settled.set(key, { value, at: Date.now() });\n}\n\nexport function getSettledLayoutProvider<T>(key: string): T | undefined {\n const entry = settled.get(key);\n if (!entry) return undefined;\n if (Date.now() - entry.at > SETTLED_TTL_MS) {\n settled.delete(key);\n return undefined;\n }\n return entry.value as T;\n}\n\nexport function dedupeLayoutProviderFetch<T>(\n key: string,\n fetchFn: () => Promise<T>\n): Promise<T> {\n const cached = getSettledLayoutProvider<T>(key);\n if (cached !== undefined) return Promise.resolve(cached);\n\n const existing = inflight.get(key);\n if (existing) return existing as Promise<T>;\n\n const pending = fetchFn()\n .then((value) => {\n settled.set(key, { value, at: Date.now() });\n return value;\n })\n .finally(() => {\n inflight.delete(key);\n });\n inflight.set(key, pending);\n return pending;\n}\n\nexport function clearLayoutProviderCache(): void {\n inflight.clear();\n settled.clear();\n}\n\n/** Composer: do not paint layout until a provider result exists for this resource. */\nexport function previewLayoutReady(opts: {\n clientLoading: boolean;\n hasClientLayout: boolean;\n hasServerLayout: boolean;\n}): boolean {\n if (opts.hasClientLayout) return true;\n if (opts.clientLoading) return false;\n return opts.hasServerLayout;\n}\n","/**\n * Normalize a route path for Edge resolve requests.\n * Leading slash, no trailing slash (except root), query/hash stripped.\n */\nexport function normalizeRoute(route: string): string {\n let path = String(route || '').trim();\n if (!path) return '/';\n\n try {\n if (/^https?:\\/\\//i.test(path)) {\n path = new URL(path).pathname;\n }\n } catch {\n /* keep path */\n }\n\n const q = path.indexOf('?');\n if (q >= 0) path = path.slice(0, q);\n const h = path.indexOf('#');\n if (h >= 0) path = path.slice(0, h);\n\n if (!path.startsWith('/')) path = `/${path}`;\n if (path.length > 1 && path.endsWith('/')) {\n path = path.replace(/\\/+$/, '');\n }\n return path || '/';\n}\n","/**\n * Compact variant-key codec for URLs and Edge `variants` query params.\n * Default variants are omitted so equivalent assignments share one cache entry.\n */\n\nexport function serializeVariantKeys(\n keys: Record<string, string> | null | undefined\n): string {\n if (!keys) return '';\n const parts: string[] = [];\n const zoneIds = Object.keys(keys).sort();\n for (const zoneId of zoneIds) {\n const variant = keys[zoneId];\n if (!variant || variant === 'default') continue;\n parts.push(`${zoneId}:${variant}`);\n }\n return parts.join(',');\n}\n\nexport function parseVariantKeys(\n raw: string | null | undefined\n): Record<string, string> {\n const out: Record<string, string> = {};\n const text = (raw || '').trim();\n if (!text) return out;\n const decoded = safeDecode(text);\n for (const part of decoded.split(',')) {\n const i = part.indexOf(':');\n if (i <= 0) continue;\n const zoneId = part.slice(0, i).trim();\n const variant = part.slice(i + 1).trim();\n if (zoneId && variant) out[zoneId] = variant;\n }\n return out;\n}\n\nexport function isDefaultVariantKeys(\n keys: Record<string, string> | null | undefined\n): boolean {\n return serializeVariantKeys(keys) === '';\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n","import type { EventTrackingConfig } from '../types';\nimport { attachFieldEnvelopes } from '../field-envelope';\nimport { normalizeRoute } from './normalizeRoute';\nimport { serializeVariantKeys } from './variantKeys';\n\n/** Mirrors Edge ResolvedComponent — SDK maps this into layoutTree nodes. */\nexport interface EdgeResolvedComponent {\n instanceId: string;\n componentId: string;\n props: Record<string, unknown>;\n /** Connection map from the snapshot — used to stamp list-row `ref`. */\n resources?: Record<string, unknown>;\n reads?: Record<string, { resource: string }>;\n children?: Record<string, EdgeResolvedComponent[]>;\n appliedRules?: string[];\n degraded?: boolean;\n}\n\nexport interface EdgeResolvedPayload {\n siteId: string;\n route: string;\n version: number;\n zones: Record<string, EdgeResolvedComponent[]>;\n tree?: EdgeResolvedComponent[];\n /** Composer event bindings baked into the published snapshot. */\n eventTracking?: EventTrackingConfig[];\n pageData?: import('../page-context').PageDataSnapshot;\n meta: {\n variantKeys: Record<string, string>;\n audienceLookup?: { status: string; durationMs: number };\n decideLookup?: { status: string; durationMs: number; checks: number };\n experiments?: Array<{ key: string; variantKey: string; bucket: number }>;\n bot?: unknown;\n resolvedAt: string;\n degraded?: boolean;\n };\n}\n\nexport class EdgeResolveError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'EdgeResolveError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport async function fetchEdgeResolve(options: {\n edgeUrl: string;\n trackingId: string;\n route: string;\n anonId?: string | null;\n sessionId?: string | null;\n siteId?: string | null;\n /** Deterministic variant combo — cacheable; do not send with anonId. */\n variantKeys?: Record<string, string> | null;\n fetch?: typeof fetch;\n /**\n * Next.js Data Cache / ISR. When set, the server fetch can be baked into\n * SSG. Omit on the client so visitor-specific resolve stays fresh.\n */\n revalidate?: number | false;\n}): Promise<EdgeResolvedPayload> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const route = normalizeRoute(options.route);\n const params = new URLSearchParams({\n route,\n trackingId: options.trackingId,\n });\n if (options.siteId) params.set('site', options.siteId);\n const variantParam = serializeVariantKeys(options.variantKeys);\n if (variantParam) {\n params.set('variants', variantParam);\n } else if (options.anonId) {\n params.set('anonId', options.anonId);\n if (options.sessionId) params.set('sessionId', options.sessionId);\n }\n\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const init: RequestInit & { next?: { revalidate?: number | false } } = {\n method: 'GET',\n headers: { Accept: 'application/json' },\n };\n if (options.revalidate !== undefined) {\n init.next = { revalidate: options.revalidate };\n } else {\n init.cache = 'no-store';\n }\n const res = await fetchFn(`${base}/v1/resolve?${params.toString()}`, init);\n\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new EdgeResolveError(\n (body && typeof body === 'object' && 'error' in body\n ? String((body as { error: unknown }).error)\n : `Edge resolve failed (${res.status})`) ||\n `Edge resolve failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return envelopeResolvedPayload(body as EdgeResolvedPayload);\n}\n\nfunction envelopeResolvedComponent(node: EdgeResolvedComponent): void {\n node.props = attachFieldEnvelopes(node.props, {\n connections: node.resources as\n | Record<string, import('../field-envelope').ConnectionLike>\n | undefined,\n reads: node.reads,\n });\n if (!node.children) return;\n for (const kids of Object.values(node.children)) {\n for (const child of kids || []) envelopeResolvedComponent(child);\n }\n}\n\n/** Stamp branded Field envelopes onto each node's props. Edge JSON stays raw. */\nfunction envelopeResolvedPayload(\n payload: EdgeResolvedPayload\n): EdgeResolvedPayload {\n if (payload.tree) {\n for (const node of payload.tree) envelopeResolvedComponent(node);\n }\n if (payload.zones) {\n for (const roots of Object.values(payload.zones)) {\n for (const node of roots || []) envelopeResolvedComponent(node);\n }\n }\n return payload;\n}\n","import type { PageConfig } from '../types';\nimport type { EdgeResolvedComponent, EdgeResolvedPayload } from './resolve';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, unknown>;\n slots?: Array<{\n slotId: string;\n children: LayoutNode[];\n }>;\n /** Marker so AmplifyRenderer skips client Decision API fetches. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction mapResolvedComponent(node: EdgeResolvedComponent): LayoutNode {\n const slots: LayoutNode['slots'] = [];\n if (node.children) {\n for (const [slotId, kids] of Object.entries(node.children)) {\n slots.push({\n slotId,\n children: (kids || []).map(mapResolvedComponent),\n });\n }\n }\n\n return {\n id: node.instanceId,\n componentId: node.componentId,\n props: { ...(node.props || {}) },\n ...(slots.length > 0 ? { slots } : {}),\n _contentSource: 'edge',\n };\n}\n\n/**\n * Map Edge /v1/resolve payload → PageConfig for AmplifyRenderer.\n * Prefers `tree` (full page skeleton with zones spliced in); falls back to\n * flattening zone roots when older snapshots lack structure.\n */\nexport function mapResolvedToPageConfig(\n payload: EdgeResolvedPayload\n): PageConfig {\n let layoutTree: LayoutNode[] = [];\n\n if (payload.tree && payload.tree.length > 0) {\n layoutTree = payload.tree.map(mapResolvedComponent);\n } else {\n // Legacy: zones only — render each zone's roots in stable zoneId order\n const zoneIds = Object.keys(payload.zones || {}).sort();\n for (const zoneId of zoneIds) {\n const roots = payload.zones[zoneId] || [];\n layoutTree.push(...roots.map(mapResolvedComponent));\n }\n }\n\n return {\n id: `edge:${payload.siteId}:${payload.route}:v${payload.version}`,\n route: payload.route,\n title: '',\n layoutTree,\n meta: {\n // Stash edge meta for diagnostics (not visitor-facing)\n description: payload.meta?.degraded ? 'degraded' : undefined,\n },\n ...(payload.eventTracking && payload.eventTracking.length > 0\n ? { eventTracking: payload.eventTracking }\n : {}),\n ...(payload.pageData ? { pageData: payload.pageData } : {}),\n };\n}\n\nexport function collectDegraded(payload: EdgeResolvedPayload): boolean {\n if (payload.meta?.degraded) return true;\n const walk = (nodes: EdgeResolvedComponent[]): boolean =>\n nodes.some(\n (n) =>\n !!n.degraded ||\n (n.children\n ? Object.values(n.children).some((kids) => walk(kids || []))\n : false)\n );\n if (payload.tree && walk(payload.tree)) return true;\n return Object.values(payload.zones || {}).some((roots) => walk(roots || []));\n}\n","import type { AmplifyContentMeta, ContentSource, PageConfig } from '../types';\nimport { isComposerPreview } from '../preview';\nimport {\n EdgeResolveError,\n fetchEdgeResolve,\n type EdgeResolvedPayload,\n} from '../edge/resolve';\nimport {\n collectDegraded,\n mapResolvedToPageConfig,\n} from '../edge/mapResolvedToPageConfig';\nimport { envelopePageConfig } from '../field-envelope';\n\nexport type { AmplifyContentMeta, ContentSource };\n\nexport interface FetchContentResult {\n pageConfig: PageConfig | null;\n source: ContentSource;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}\n\nexport interface FetchContentOptions {\n route: string;\n trackingId: string;\n anonId?: string | null;\n sessionId?: string | null;\n siteId?: string | null;\n /** Force preview (Composer); otherwise uses isComposerPreview() in browser. */\n preview?: boolean;\n orchestratorUrl: string;\n edgeUrl: string;\n /** Orchestrator layout fetch (SDK instance method or server helper). */\n fetchOrchestratorPage: (\n route: string,\n preview: boolean\n ) => Promise<PageConfig | null>;\n fetchFn?: typeof fetch;\n /** Next.js ISR for Edge resolve (server/SSG only). */\n revalidate?: number | false;\n /** Deterministic variants for ISR (no visitor id in the cache key). */\n variantKeys?: Record<string, string> | null;\n}\n\n/**\n * Single content entry point:\n * - Composer / preview → orchestrator layout provider (drafts + live edits)\n * - Production visitors → Edge /v1/resolve (personalized + CMS-populated)\n *\n * Production never falls back to the orchestrator on Edge failure —\n * callers should render site fallback instead.\n */\nexport async function fetchContent(\n options: FetchContentOptions\n): Promise<FetchContentResult> {\n const preview =\n options.preview ??\n (typeof window !== 'undefined' ? isComposerPreview() : false);\n\n if (preview) {\n try {\n const page = envelopePageConfig(\n await options.fetchOrchestratorPage(options.route, true)\n );\n return {\n pageConfig: page,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: null,\n };\n } catch (err) {\n return {\n pageConfig: null,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: err instanceof Error ? err.message : 'Failed to load preview',\n };\n }\n }\n\n try {\n const payload: EdgeResolvedPayload = await fetchEdgeResolve({\n edgeUrl: options.edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n anonId: options.variantKeys ? undefined : options.anonId,\n sessionId: options.variantKeys ? undefined : options.sessionId,\n siteId: options.siteId,\n fetch: options.fetchFn,\n revalidate: options.revalidate,\n variantKeys: options.variantKeys,\n });\n\n const pageConfig = mapResolvedToPageConfig(payload);\n const degraded = collectDegraded(payload);\n\n return {\n pageConfig,\n source: 'edge',\n meta: {\n source: 'edge',\n version: payload.version,\n siteId: payload.siteId,\n variantKeys: payload.meta?.variantKeys,\n degraded,\n audienceLookup: payload.meta?.audienceLookup,\n decideLookup: payload.meta?.decideLookup,\n resolvedAt: payload.meta?.resolvedAt,\n },\n error: null,\n };\n } catch (err) {\n if (err instanceof EdgeResolveError && err.status === 404) {\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error: null, // unpublished → site fallback, not an error banner\n };\n }\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error:\n err instanceof Error ? err.message : \"Couldn't load page content.\",\n };\n }\n}\n","/**\n * On-request variant selection (tier 3).\n *\n * Decisions happen on AmplifyUp Edge. The client asks after the view has\n * rendered; the Worker returns variant keys only. Profile data never leaves\n * the edge. This helper is the JS wrapper around POST /v1/select — the same\n * wire format is the contract for Flutter / native / .NET clients. No DOM\n * or Next.js assumptions.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport interface SelectVariantsResult {\n siteId: string;\n view: string;\n variantKeys: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport class SelectVariantsError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'SelectVariantsError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeSelectOptions {\n edgeUrl: string;\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n /** Request-local facts the edge cannot observe (app version, screen class). */\n context?: Record<string, unknown>;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function fetchEdgeSelect(\n options: FetchEdgeSelectOptions\n): Promise<SelectVariantsResult> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n\n if (!options.trackingId && !options.site) {\n throw new SelectVariantsError('trackingId or site is required', 400);\n }\n\n const res = await fetchFn(`${base}/v1/select`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n view: normalizeRoute(options.view),\n ...(options.trackingId ? { trackingId: options.trackingId } : {}),\n ...(options.site ? { site: options.site } : {}),\n anonId: options.anonId,\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.zones?.length ? { zones: options.zones } : {}),\n ...(options.context ? { context: options.context } : {}),\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<SelectVariantsResult> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new SelectVariantsError(\n body.error || `Select failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return {\n siteId: String(body.siteId || ''),\n view: String(body.view || normalizeRoute(options.view)),\n variantKeys:\n body.variantKeys && typeof body.variantKeys === 'object'\n ? body.variantKeys\n : {},\n meta: body.meta,\n };\n}\n\nexport interface SelectVariantsOptions {\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n context?: Record<string, unknown>;\n target?: AmplifyUpTarget;\n edgeUrl?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Ask Edge to decide deferred rules for a view. Returns variant keys to pass\n * to `/v1/resolve?variants=`.\n */\nexport async function selectVariants(\n options: SelectVariantsOptions\n): Promise<SelectVariantsResult> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n return fetchEdgeSelect({\n edgeUrl: options.edgeUrl || edgeUrl,\n trackingId: options.trackingId,\n site: options.site,\n view: options.view,\n anonId: options.anonId,\n sessionId: options.sessionId,\n zones: options.zones,\n context: options.context,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n","/**\n * Runtime content queries.\n *\n * Page resolve covers data known at Deploy. Visitor-triggered data — search,\n * load more, pickers — runs here: the browser asks AmplifyUp, AmplifyUp asks\n * the CMS. Only entities published with the page can be queried.\n * Edge JSON stays raw. `queryContent` envelopes rows on the SDK so they\n * edit in Composer the same way as list-field rows.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n envelopeListRows,\n listOwnerFromSpec,\n type ListRow,\n} from '../field-envelope';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport type QueryFilterOp =\n | 'eq'\n | 'neq'\n | 'in'\n | 'nin'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'contains'\n | 'exists';\n\nexport interface QueryFilter {\n field: string;\n op: QueryFilterOp;\n value?: unknown;\n}\n\nexport interface QuerySort {\n field: string;\n dir: 'asc' | 'desc';\n}\n\n/**\n * Provider-neutral query. AmplifyUp compiles this for the connected CMS —\n * it never contains CMS query syntax. Same shape Composer saves on a\n * query connection, and the shape returned in `{field}Pagination.spec`.\n */\nexport interface QuerySpec {\n providerId: string;\n entity: string;\n filter: QueryFilter[];\n sort: QuerySort[];\n limit: number;\n offset: number;\n}\n\n/** Pagination meta added to list props when a query connection is paginated. */\nexport interface QueryPagination {\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n spec: QuerySpec;\n}\n\nexport interface QueryResult<T = Record<string, unknown>> {\n results: T[];\n count: number;\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n /** True when a content source failed and results may be incomplete. */\n degraded?: boolean;\n}\n\nexport class QueryContentError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'QueryContentError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeQueryOptions {\n edgeUrl: string;\n trackingId: string;\n /** Published route the query belongs to (provides sources + entity mapping). */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Low-level runtime query against a known Edge URL.\n * Most callers should use `queryContent`, which resolves the URL for them.\n */\nexport async function fetchEdgeQuery<T = Record<string, unknown>>(\n options: FetchEdgeQueryOptions\n): Promise<QueryResult<T>> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const limit = Math.max(1, Number(options.spec.limit) || 10);\n const offset = Math.max(0, Number(options.spec.offset) || 0);\n\n const res = await fetchFn(`${base}/v1/query`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n route: normalizeRoute(options.route),\n trackingId: options.trackingId,\n ...(options.siteId ? { site: options.siteId } : {}),\n spec: { ...options.spec, limit, offset },\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<QueryResult<T>> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new QueryContentError(\n body.error || `Content query failed (${res.status})`,\n res.status,\n body\n );\n }\n\n const results = Array.isArray(body.results) ? body.results : [];\n const resolvedLimit = Number(body.limit) || limit;\n const resolvedOffset = Number.isFinite(Number(body.offset))\n ? Number(body.offset)\n : offset;\n\n return {\n results,\n count: Number(body.count) || results.length,\n hasMore: !!body.hasMore,\n limit: resolvedLimit,\n offset: resolvedOffset,\n nextOffset: Number(body.nextOffset) || resolvedOffset + resolvedLimit,\n degraded: body.degraded,\n };\n}\n\nexport interface QueryContentOptions {\n trackingId: string;\n /** Published route the query belongs to, e.g. '/insights'. */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n target?: AmplifyUpTarget;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Run a content query at request time (search, load more, pickers).\n *\n * Start from the published spec on a paginated list prop so filters and sort\n * stay owned by Composer:\n *\n * ```ts\n * const next = await queryContent({\n * trackingId,\n * route: '/insights',\n * spec: { ...postsPagination.spec, offset: postsPagination.nextOffset },\n * });\n * ```\n */\nexport async function queryContent<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n options: QueryContentOptions\n): Promise<QueryResult<ListRow<T>>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n const raw = await fetchEdgeQuery<T>({\n edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n spec: options.spec,\n siteId: options.siteId,\n fetch: options.fetch,\n signal: options.signal,\n });\n\n return {\n ...raw,\n results: envelopeListRows<T>(\n raw.results,\n listOwnerFromSpec(options.spec)\n ),\n };\n}\n\n/** Convenience: next page from pagination meta on a list prop. */\nexport function nextPageSpec(pagination: QueryPagination): QuerySpec {\n return { ...pagination.spec, offset: pagination.nextOffset };\n}\n\n/**\n * Convenience: same published query, filtered by a visitor's search term.\n * Resets to the first page. Empty terms return the unfiltered spec.\n */\nexport function searchSpec(\n pagination: QueryPagination,\n field: string,\n term: string\n): QuerySpec {\n const value = String(term || '').trim();\n const base = { ...pagination.spec, offset: 0 };\n if (!value) return base;\n return {\n ...base,\n filter: [...(base.filter || []), { field, op: 'contains', value }],\n };\n}\n","/**\n * AmplifyUp Tracking SDK\n * \n * Event tracking and personalization SDK for Pure AWS architecture.\n * \n * Uses AWS API Gateway for event ingestion and AWS Decision API for personalization.\n * All runtime data (events, profiles, decisions) lives in AWS.\n */\n\nimport { AmplifyUpConfig, EventProperties, PageProperties, TrackProperties, IdentifyTraits, IdentifyInput, ProfileFieldsInput, CDPAdapter, PageConfig, ZoneConfig, EventTrackingConfig as EventTrackingConfigType, AmplifyUpTarget, ContentSource, AmplifyContentMeta } from './types';\nimport { AWSAdapter } from './adapters/aws';\nimport { getInstanceId as getStoredInstanceId, getUserId as getStoredUserId, getSessionId as getStoredSessionId, setUserId, clearIds, SESSION_IDLE_GAP_MS } from './storage';\nexport { SESSION_IDLE_GAP_MS, SESSION_COOKIE_NAME, ANON_COOKIE_NAME } from './storage';\nimport {\n isRemoteOrchestratorUrl,\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n} from './targets';\nimport { isWorkingContentRequest } from './preview';\nimport {\n applyPageContext,\n attachStaticPageContext,\n mergeEventContext,\n type AmplifyPageContextInput,\n type AttachedPageEventContext,\n type PageDataSnapshot,\n} from './page-context';\nexport type { AmplifyPageContextInput, PageDataSnapshot } from './page-context';\nimport { setPageResourceFields } from './page-resource-runtime';\nimport { envelopePageConfig } from './field-envelope';\nimport { readAmplifyUpDebugEnv, setAmplifyUpDebug, sdkDebug } from './debug';\nimport {\n dedupeLayoutProviderFetch,\n layoutProviderCacheKey,\n} from './content/layoutProviderCache';\n\ninterface PreviewQueryOverrides {\n orchestratorUrl?: string;\n trackingId?: string;\n}\n\n/**\n * Time on Page: one event per page visit, sent when the visit ends\n * (SPA navigation, tab close, or 30-minute idle resume). Switching tabs\n * pauses the clock; abandoned-but-visible tabs freeze after this idle gap.\n */\nexport const DWELL_ACTIVITY_IDLE_MS = 2 * 60 * 1000;\n/** Local poll to freeze the clock on idle — never emits by itself. */\nconst DWELL_POLL_MS = 5_000;\n\ntype DwellEmitReason = 'unload' | 'route' | 'idle-resume';\n\n/** Composer passes orchestratorUrl + trackingId when loading a local site in preview. */\nfunction readPreviewQueryOverrides(): PreviewQueryOverrides {\n if (typeof window === 'undefined') return {};\n\n const params = new URLSearchParams(window.location.search);\n if (params.get('preview') !== 'true' && params.get('visualEditor') !== 'true') {\n return {};\n }\n\n const overrides: PreviewQueryOverrides = {};\n\n const orchestratorFromQuery = params.get('orchestratorUrl');\n if (orchestratorFromQuery) {\n try {\n overrides.orchestratorUrl = new URL(orchestratorFromQuery).origin.replace(/\\/$/, '');\n } catch {\n // ignore invalid URL\n }\n }\n\n const trackingFromQuery = params.get('trackingId');\n if (trackingFromQuery) {\n overrides.trackingId = trackingFromQuery;\n }\n\n return overrides;\n}\n\ninterface ComponentRegistryItem {\n component_id: string;\n component_name: string;\n data_attribute?: string;\n}\n\ninterface EventTrackingConfig {\n eventName: string;\n eventType: string;\n selector?: string;\n description?: string;\n properties?: string[];\n staticProperties?: Record<string, string>;\n enabled?: boolean;\n componentId?: string | null;\n componentName?: string | null;\n}\n\ninterface AttachedEventListener {\n element: HTMLElement;\n eventType: string;\n handler: EventListener;\n}\n\ninterface HighlightMessage {\n type: 'ENABLE_HIGHLIGHTING' | 'DISABLE_HIGHLIGHTING' | 'UPDATE_HIGHLIGHTING' | 'SHOW_COMPONENT_TOOLTIP' | 'HIDE_ALL_TOOLTIPS' | 'ENABLE_EVENT_SELECTION';\n componentRegistry?: ComponentRegistryItem[];\n highlightComponents?: boolean;\n showZones?: boolean;\n componentId?: string;\n enabled?: boolean;\n}\n\nclass AmplifyUpSDK {\n private adapter: CDPAdapter;\n private config: AmplifyUpConfig | null = null;\n // Internal URLs - set during init, not part of user config\n private apiGatewayUrl: string = '';\n private orchestratorUrl: string = '';\n private decisionApiUrl: string = '';\n private edgeUrl: string = '';\n private siteId: string = '';\n private target: AmplifyUpTarget = 'local';\n private initialized = false;\n /** Prevents overlapping init() from React Strict Mode double-mount */\n private initPromise: Promise<void> | null = null;\n /** Ensures auto page() on init fires once per page load */\n private initialPageSent = false;\n private highlightingEnabled = false;\n private highlightComponentsEnabled = true;\n private showZonesEnabled = false;\n private componentRegistry: ComponentRegistryItem[] = [];\n private messageListener: ((event: MessageEvent) => void) | null = null;\n private composerBoundsRaf = 0;\n private composerBoundsScrollListener: ((event: Event) => void) | null = null;\n private mutationObserver: MutationObserver | null = null;\n private composerDragHandlers: {\n dragenter: (e: DragEvent) => void;\n dragover: (e: DragEvent) => void;\n dragleave: (e: DragEvent) => void;\n drop: (e: DragEvent) => void;\n mouseover: (e: MouseEvent) => void;\n mouseout: (e: MouseEvent) => void;\n } | null = null;\n /** Last slot highlighted during Composer drag — avoid clear/re-add flicker. */\n private lastComposerDragSlot: HTMLElement | null = null;\n /** Consecutive miss frames before clearing highlight (anti-jitter). */\n private composerDragMissFrames = 0;\n /**\n * Parent overlay is driving drag via postMessage. Native iframe dragleave must\n * not clear highlight — overlay takeover fires a spurious document dragleave.\n */\n private composerOverlayDragActive = false;\n private isVisualEditorMode = false;\n private eventSelectionMode = false;\n private eventSelectionClickHandler: ((e: MouseEvent) => void) | null = null;\n private eventTrackingConfig: EventTrackingConfig[] = [];\n private attachedEventListeners: AttachedEventListener[] = [];\n private trackingIntervals: NodeJS.Timeout[] = [];\n private trackingCleanup: (() => void) | null = null;\n private componentViewObservers: IntersectionObserver[] = [];\n private componentViewSeen = new Set<string>();\n private pageEngagementActive = false;\n /** Path of the last page() / routeChange — avoids duplicate SPA fires. */\n private lastTrackedPath: string | null = null;\n private pendingPageContext: AmplifyPageContextInput | null = null;\n private attachedPageContext: AttachedPageEventContext | null = null;\n private resolvedPageData: PageDataSnapshot | null = null;\n private resolvedPageRoute: string = '';\n private resolvedRouteParams: Record<string, string> = {};\n private historyHooksInstalled = false;\n private pageEngagementState = {\n reached: new Set<number>(),\n visibleMs: 0,\n visibleSince: null as number | null,\n /** True after Time on Page has been sent for the current visit. */\n dwellEmitted: false,\n /** When the tab last became hidden — used for idle-resume re-page. */\n hiddenAt: null as number | null,\n /** Last user interaction — freezes dwell when stale while visible. */\n lastActivityAt: 0,\n activityIdle: false,\n };\n\n constructor(adapter?: CDPAdapter) {\n // Always use AWS adapter (Pure AWS architecture)\n // Custom adapter can be provided for testing only\n this.adapter = adapter || new AWSAdapter();\n \n // Check if we're in visual editor mode (iframe or query param)\n if (typeof window !== 'undefined') {\n this.isVisualEditorMode = this.detectVisualEditorMode();\n \n // Only set up postMessage listener if in visual editor mode\n if (this.isVisualEditorMode) {\n this.setupHighlightingListener();\n console.log('[AmplifyUp SDK] Visual editor mode detected - message listener enabled');\n }\n }\n }\n\n /**\n * Detect if we're running in visual editor mode\n * Returns true if:\n * 1. Preview mode flag is set by proxy\n * 2. We're in an iframe AND parent is from orchestrator domain\n * 3. OR visualEditor/preview query parameter is present\n */\n private detectVisualEditorMode(): boolean {\n if (typeof window === 'undefined') return false;\n\n // Check for preview mode flag set by proxy\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return true;\n }\n\n // Check for query parameter\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('visualEditor') === 'true' || urlParams.get('preview') === 'true') {\n return true;\n }\n\n // Check if we're in an iframe\n const inIframe = window.self !== window.top;\n if (!inIframe) return false;\n\n // Check if parent can communicate (same origin or CORS allowed)\n try {\n // Try to access parent location - if we can't, we're cross-origin\n // For the orchestrator iframe, we allow cross-origin postMessage\n // but we can check the document.referrer\n if (document.referrer) {\n const referrerUrl = new URL(document.referrer);\n // Check if referrer is from localhost:5001 (orchestrator) or contains composer/routes paths\n if ((referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/')) {\n return true;\n }\n }\n } catch (e) {\n // Cross-origin, can't determine\n }\n\n // If in iframe but can't determine parent, don't enable visual editor\n return false;\n }\n\n /**\n * Check if we're in preview/composer mode (should disable tracking)\n */\n private isPreviewMode(): boolean {\n if (typeof window === 'undefined') return false;\n \n // Check for preview mode flag set by proxy (highest priority - set immediately)\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return true;\n }\n\n // Check if URL path contains proxy route (composer always uses this)\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return true;\n }\n\n // Check for query parameter in current URL\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return true;\n }\n\n // Check if URL contains preview=true anywhere (in case it's in the path or hash)\n const fullUrl = window.location.href;\n if (fullUrl.includes('preview=true') || fullUrl.includes('visualEditor=true')) {\n return true;\n }\n\n // Check if we're in an iframe from orchestrator\n if (window.self !== window.top) {\n // If in iframe, check referrer\n if (document.referrer) {\n try {\n const referrerUrl = new URL(document.referrer);\n if ((referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/')) {\n return true;\n }\n } catch {\n // Can't determine\n }\n }\n // If in iframe, assume preview mode (composer always uses iframes)\n return true;\n }\n\n return false;\n }\n\n /**\n * Initialize the SDK\n * Resolves local | dev | production targets for ingestion + personalization URLs.\n */\n async init(config: AmplifyUpConfig): Promise<void> {\n if (this.initialized && this.adapter?.isInitialized()) {\n this.ensureWindowBridge();\n return;\n }\n if (this.initPromise) {\n return this.initPromise;\n }\n\n this.initPromise = this.performInit(config);\n try {\n await this.initPromise;\n } finally {\n this.initPromise = null;\n }\n }\n\n /** Attach console helpers to window (idempotent; survives Fast Refresh). */\n ensureWindowBridge(): void {\n if (typeof window === 'undefined') return;\n\n (window as any).AmplifyUp = {\n getInstanceId: () => this.getInstanceId(),\n getSessionId: () => this.getSessionId(),\n getUserId: () => this.getUserId(),\n getTrackingId: () => this.getTrackingId(),\n getTarget: () => this.getTarget(),\n getDiagnostics: () => this.getDiagnostics(),\n getStatus: () => {\n console.log(this.getStatus());\n return this.getDiagnostics();\n },\n testTracking: () => this.testTracking(),\n verifyAWSConnection: () => {\n const result = this.verifyAWSConnection();\n console.log('AWS Connection Verification:', result.message);\n console.log('Full details:', result);\n return result;\n },\n isInitialized: () => this.isInitialized(),\n page: (url: string, properties?: EventProperties) => this.page(url, properties),\n track: (eventName: string, properties?: EventProperties) =>\n this.track(eventName, properties),\n identify: (userIdOrIdentifiers: IdentifyInput, traits?: IdentifyTraits) =>\n this.identify(userIdOrIdentifiers, traits),\n setProfileFields: (fields: ProfileFieldsInput) => this.setProfileFields(fields),\n };\n }\n\n private async performInit(config: AmplifyUpConfig): Promise<void> {\n // Always use AWS adapter (Pure AWS architecture)\n if (!this.adapter) {\n this.adapter = new AWSAdapter();\n }\n\n this.target = resolveAmplifyUpTarget({\n configTarget: config.target,\n configDev: config.dev,\n });\n const urls = resolveAmplifyUpUrls(this.target);\n this.apiGatewayUrl = urls.apiGatewayUrl;\n this.orchestratorUrl = urls.orchestratorUrl;\n this.decisionApiUrl = urls.decisionApiUrl;\n this.edgeUrl = urls.edgeUrl;\n this.siteId = config.siteId || '';\n\n const previewOverrides = readPreviewQueryOverrides();\n if (previewOverrides.orchestratorUrl) {\n this.orchestratorUrl = previewOverrides.orchestratorUrl;\n // Composer on production passed its origin — align all endpoints to that stack.\n if (isRemoteOrchestratorUrl(previewOverrides.orchestratorUrl)) {\n const prodUrls = resolveAmplifyUpUrls('production');\n this.target = 'production';\n this.apiGatewayUrl = prodUrls.apiGatewayUrl;\n this.decisionApiUrl = prodUrls.decisionApiUrl;\n this.edgeUrl = prodUrls.edgeUrl;\n }\n }\n\n // Store only user-provided config (without internal URLs)\n this.config = {\n trackingId: previewOverrides.trackingId || config.trackingId,\n debug: config.debug ?? readAmplifyUpDebugEnv(),\n target: this.target,\n dev: config.dev,\n ...(config.siteId ? { siteId: config.siteId } : {}),\n ...(config.pageContext ? { pageContext: config.pageContext } : {}),\n };\n setAmplifyUpDebug(!!this.config.debug);\n if (config.pageContext) {\n this.pendingPageContext = config.pageContext;\n this.recomputeAttachedContext();\n }\n \n try {\n // Pass config with URLs to adapter (adapter may need them)\n const adapterConfig = {\n ...this.config,\n apiGatewayUrl: this.apiGatewayUrl,\n orchestratorUrl: this.orchestratorUrl,\n decisionApiUrl: this.decisionApiUrl,\n };\n await this.adapter.init(adapterConfig);\n this.initialized = this.adapter.isInitialized();\n\n this.ensureWindowBridge();\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Diagnostic methods available on window.AmplifyUp');\n console.log('Try: AmplifyUp.getStatus() or AmplifyUp.testTracking()');\n }\n \n // Always clear any existing tracking intervals first (in case of re-initialization)\n this.clearTrackingIntervals();\n\n // CRITICAL: Check preview mode BEFORE doing anything else - exit immediately if in preview\n if (this.isPreviewMode()) {\n return; // Exit early, don't set up ANY tracking, don't call page()\n }\n\n // Only set up tracking if NOT in preview/composer mode\n if (typeof window !== 'undefined' && this.initialized) {\n // Small delay to ensure AWS adapter is ready\n await new Promise(resolve => setTimeout(resolve, 200));\n \n // Double-check preview mode after delay (in case flag was set during delay)\n if (this.isPreviewMode()) {\n return; // Exit immediately, don't track\n }\n \n // Auto page view once per load (React Strict Mode can call init twice)\n if (!this.initialPageSent) {\n this.initialPageSent = true;\n const url = window.location.pathname;\n this.page(url);\n this.lastTrackedPath = url;\n this.setupPageEngagement();\n // Next App Router owns history; wrapping pushState/replaceState\n // cancels <Link> soft navigation (no RSC fetch, pathname unchanged).\n if (!this.isNextJsApp()) {\n this.installHistoryHooks();\n }\n }\n }\n \n if (this.config?.debug && this.initialized) {\n console.log('AmplifyUp SDK: Initialized successfully', {\n trackingId: config.trackingId,\n target: this.target,\n apiGatewayUrl: this.apiGatewayUrl,\n orchestratorUrl: this.orchestratorUrl,\n decisionApiUrl: this.decisionApiUrl || '(orchestrator fallback)',\n });\n }\n } catch (error) {\n console.error('AmplifyUp SDK: Initialization failed', error);\n throw error;\n }\n }\n\n /**\n * Check if SDK is initialized\n */\n isInitialized(): boolean {\n return this.initialized && this.adapter.isInitialized();\n }\n\n /**\n * Clear all tracking intervals and event listeners\n */\n private clearTrackingIntervals(): void {\n if (this.trackingCleanup) {\n this.trackingCleanup();\n this.trackingCleanup = null;\n }\n this.trackingIntervals.forEach(id => clearInterval(id));\n this.trackingIntervals = [];\n this.cleanupComponentViewTracking();\n this.pageEngagementActive = false;\n }\n\n /** Current page path for engagement attribution. */\n private currentPath(): string {\n if (typeof window === 'undefined') return '/';\n return window.location.pathname || '/';\n }\n\n /**\n * Automatic page-level Scroll Depth + Time on Page.\n * Time on Page fires once per visit when the visit ends (route change,\n * tab close, or 30-minute idle resume). Hidden tabs pause the clock;\n * visible-but-idle tabs freeze after DWELL_ACTIVITY_IDLE_MS.\n */\n private setupPageEngagement(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n if (this.isPreviewMode() || this.pageEngagementActive) return;\n\n this.pageEngagementActive = true;\n const milestones = [25, 50, 75, 100];\n const state = this.pageEngagementState;\n state.reached = new Set();\n state.visibleMs = 0;\n state.visibleSince =\n document.visibilityState === 'visible' ? Date.now() : null;\n state.dwellEmitted = false;\n state.hiddenAt =\n document.visibilityState === 'hidden' ? Date.now() : null;\n state.lastActivityAt = Date.now();\n state.activityIdle = false;\n let scrollRaf: number | null = null;\n\n const path = () => this.currentPath();\n\n const measureScrollPercent = (): number => {\n const doc = document.documentElement;\n const body = document.body;\n const scrollTop =\n window.scrollY || doc.scrollTop || body?.scrollTop || 0;\n const scrollHeight = Math.max(\n doc.scrollHeight,\n body?.scrollHeight || 0,\n doc.offsetHeight,\n body?.offsetHeight || 0\n );\n const clientHeight = window.innerHeight || doc.clientHeight || 0;\n const traversable = Math.max(scrollHeight - clientHeight, 0);\n if (traversable <= 0) return 100;\n return Math.min(100, Math.round((scrollTop / traversable) * 100));\n };\n\n const checkScroll = () => {\n if (this.isPreviewMode()) return;\n const pct = measureScrollPercent();\n for (const milestone of milestones) {\n if (pct >= milestone && !state.reached.has(milestone)) {\n state.reached.add(milestone);\n this.track('Scroll Depth', {\n percentage: milestone,\n path: path(),\n });\n }\n }\n };\n\n const onScroll = () => {\n noteActivity();\n if (scrollRaf != null) return;\n scrollRaf = window.requestAnimationFrame(() => {\n scrollRaf = null;\n checkScroll();\n });\n };\n\n const accumulateVisible = () => {\n if (state.visibleSince == null) return;\n state.visibleMs += Date.now() - state.visibleSince;\n state.visibleSince = Date.now();\n };\n\n const freezeActivityIdle = () => {\n if (state.activityIdle) return;\n accumulateVisible();\n state.visibleSince = null;\n state.activityIdle = true;\n };\n\n const noteActivity = () => {\n state.lastActivityAt = Date.now();\n if (state.activityIdle) {\n state.activityIdle = false;\n if (\n document.visibilityState === 'visible' &&\n state.visibleSince == null\n ) {\n state.visibleSince = Date.now();\n }\n }\n };\n\n const emitDwell = (reason: DwellEmitReason) => {\n if (this.isPreviewMode()) return;\n if (state.dwellEmitted) return;\n if (!state.activityIdle) {\n accumulateVisible();\n }\n const seconds = Math.floor(state.visibleMs / 1000);\n if (seconds <= 0) return;\n state.dwellEmitted = true;\n this.track('Time on Page', {\n seconds,\n path: this.lastTrackedPath || path(),\n reason,\n });\n };\n\n const evaluateIdle = () => {\n if (document.visibilityState !== 'visible') return;\n if (Date.now() - state.lastActivityAt >= DWELL_ACTIVITY_IDLE_MS) {\n freezeActivityIdle();\n }\n };\n\n (this as { _emitPageDwell?: (force?: boolean) => void })._emitPageDwell =\n () => emitDwell('route');\n\n const onVisibility = () => {\n if (document.visibilityState === 'visible') {\n const idleMs =\n state.hiddenAt != null ? Date.now() - state.hiddenAt : 0;\n state.hiddenAt = null;\n // Tab left open past the session idle gap → new logical visit.\n // Must stay aligned with SESSION_GAP_MS in apps/orchestrator.\n if (idleMs >= SESSION_IDLE_GAP_MS) {\n emitDwell('idle-resume');\n this.resetEngagementQuiet();\n const resumePath = path();\n this.page(resumePath, { resumed: true });\n this.lastTrackedPath = resumePath;\n if (this.config?.debug) {\n console.log(\n '[AmplifyUp SDK] Idle resume page view',\n resumePath,\n `(hidden ${Math.round(idleMs / 60000)}m)`,\n );\n }\n }\n noteActivity();\n state.visibleSince = Date.now();\n state.activityIdle = false;\n } else {\n // Pause the clock; do not emit — alt-tab is not the end of the visit.\n accumulateVisible();\n state.hiddenAt = Date.now();\n state.visibleSince = null;\n state.activityIdle = false;\n }\n };\n\n const onPageHide = () => {\n emitDwell('unload');\n if (state.hiddenAt == null) {\n state.hiddenAt = Date.now();\n }\n state.visibleSince = null;\n };\n\n const activityEvents: Array<keyof WindowEventMap> = [\n 'pointerdown',\n 'keydown',\n 'scroll',\n 'touchstart',\n ];\n const onActivity = () => noteActivity();\n\n window.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('visibilitychange', onVisibility);\n window.addEventListener('pagehide', onPageHide);\n for (const evt of activityEvents) {\n if (evt === 'scroll') continue; // handled via onScroll\n window.addEventListener(evt, onActivity, { passive: true });\n }\n\n checkScroll();\n\n const idlePoll = setInterval(() => {\n evaluateIdle();\n }, DWELL_POLL_MS);\n this.trackingIntervals.push(idlePoll);\n\n const previousCleanup = this.trackingCleanup;\n this.trackingCleanup = () => {\n window.removeEventListener('scroll', onScroll);\n document.removeEventListener('visibilitychange', onVisibility);\n window.removeEventListener('pagehide', onPageHide);\n for (const evt of activityEvents) {\n if (evt === 'scroll') continue;\n window.removeEventListener(evt, onActivity);\n }\n if (scrollRaf != null) {\n window.cancelAnimationFrame(scrollRaf);\n scrollRaf = null;\n }\n previousCleanup?.();\n this.pageEngagementActive = false;\n delete (this as { _emitPageDwell?: (force?: boolean) => void })._emitPageDwell;\n };\n\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Page engagement tracking enabled');\n }\n }\n\n /** Flush dwell then reset — used on SPA route changes. */\n private resetEngagementForNewPage(): void {\n const emit = (this as { _emitPageDwell?: (force?: boolean) => void })\n ._emitPageDwell;\n emit?.(true);\n this.resetEngagementQuiet();\n }\n\n /** Reset dwell/scroll state without emitting (idle resume already flushed). */\n private resetEngagementQuiet(): void {\n const state = this.pageEngagementState;\n state.reached = new Set();\n state.visibleMs = 0;\n state.dwellEmitted = false;\n state.hiddenAt = null;\n state.lastActivityAt = Date.now();\n state.activityIdle = false;\n state.visibleSince =\n typeof document !== 'undefined' && document.visibilityState === 'visible'\n ? Date.now()\n : null;\n this.componentViewSeen.clear();\n }\n\n /**\n * SPA / soft navigation: fire a page view and reset engagement.\n * No-op when the path has not changed. Safe for React Strict Mode remounts.\n */\n routeChange(url?: string, properties?: EventProperties): void {\n if (this.isPreviewMode()) return;\n if (!this.isInitialized()) return;\n if (typeof window === 'undefined') return;\n\n const path = url || window.location.pathname || '/';\n if (path === this.lastTrackedPath) return;\n\n this.resetEngagementForNewPage();\n this.page(path, properties);\n this.lastTrackedPath = path;\n if (!this.pageEngagementActive) {\n this.setupPageEngagement();\n }\n\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Route change page view', path);\n }\n }\n\n /** True on Next.js (App or Pages). Do not patch history on these apps. */\n private isNextJsApp(): boolean {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return false;\n }\n const win = window as Window & { next?: unknown };\n if (win.next) return true;\n if (document.getElementById('__next')) return true;\n if (document.querySelector('script[src*=\"/_next/\"]')) return true;\n return false;\n }\n\n /**\n * Patch history.pushState / replaceState + popstate for non-React SPAs.\n * Next.js apps use AmplifyUpProvider.routeChange via usePathname instead —\n * wrapping history breaks App Router <Link> (no RSC request).\n */\n private installHistoryHooks(): void {\n if (typeof window === 'undefined' || this.historyHooksInstalled) return;\n this.historyHooksInstalled = true;\n\n const notify = () => {\n // Defer so location is updated after pushState\n queueMicrotask(() => this.routeChange(window.location.pathname));\n };\n\n const wrap = (method: 'pushState' | 'replaceState') => {\n const original = history[method].bind(history);\n history[method] = (...args: Parameters<History['pushState']>) => {\n const result = original(...args);\n notify();\n return result;\n };\n };\n\n wrap('pushState');\n wrap('replaceState');\n window.addEventListener('popstate', notify);\n }\n\n /**\n * Automatic Component View when component hosts enter the viewport.\n */\n setupComponentViewTracking(): void {\n if (typeof document === 'undefined' || typeof IntersectionObserver === 'undefined') {\n return;\n }\n if (this.isPreviewMode()) return;\n\n this.cleanupComponentViewTracking();\n\n const hosts = document.querySelectorAll('[data-amplifyup-component]');\n if (hosts.length === 0) {\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] No component hosts found for Component View');\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (!entry.isIntersecting) return;\n const el = entry.target as HTMLElement;\n const componentId =\n el.getAttribute('data-amplifyup-component') ||\n el.getAttribute('data-component-id');\n if (!componentId || this.componentViewSeen.has(componentId)) {\n observer.unobserve(el);\n return;\n }\n this.componentViewSeen.add(componentId);\n const componentName = el.getAttribute('data-component-name') || undefined;\n this.track('Component View', {\n componentId,\n componentName,\n path: this.currentPath(),\n });\n observer.unobserve(el);\n });\n },\n { threshold: 0.5 }\n );\n\n hosts.forEach((host) => observer.observe(host));\n this.componentViewObservers.push(observer);\n\n if (this.config?.debug) {\n console.log(\n '[AmplifyUp SDK] Component View tracking enabled for',\n hosts.length,\n 'hosts'\n );\n }\n }\n\n private cleanupComponentViewTracking(): void {\n this.componentViewObservers.forEach((obs) => obs.disconnect());\n this.componentViewObservers = [];\n }\n\n /**\n * Set resource context for this page. Prefer passing `pageContext` on\n * AmplifyUpProvider / init — required for components using From page.\n * Late calls still attach to subsequent events (not a second page view).\n */\n setPageContext(input: AmplifyPageContextInput): void {\n this.pendingPageContext = input;\n this.recomputeAttachedContext();\n }\n\n /**\n * Apply published pageData (from /v1/resolve) so field validation and\n * mapped page fields can run.\n */\n applyResolvedPageData(\n pageData: PageDataSnapshot | null | undefined,\n pageRoute?: string,\n routeParams?: Record<string, string>\n ): void {\n this.resolvedPageData = pageData || null;\n if (pageRoute) this.resolvedPageRoute = pageRoute;\n if (routeParams) this.resolvedRouteParams = routeParams;\n this.recomputeAttachedContext();\n }\n\n private recomputeAttachedContext(): void {\n if (!this.pendingPageContext) {\n this.attachedPageContext = attachStaticPageContext(\n this.resolvedPageData,\n this.resolvedPageRoute\n );\n setPageResourceFields(null);\n return;\n }\n this.attachedPageContext = applyPageContext(this.pendingPageContext, {\n pageData: this.resolvedPageData,\n routeParams: this.resolvedRouteParams,\n pageRoute: this.resolvedPageRoute,\n });\n setPageResourceFields(this.attachedPageContext?.resource?.fields || null);\n }\n\n getAttachedPageContext(): AttachedPageEventContext | null {\n return this.attachedPageContext;\n }\n\n /**\n * Track a page view\n */\n page(url: string, properties?: EventProperties): void {\n // CRITICAL: Don't track page views in preview/composer mode - exit immediately\n if (this.isPreviewMode()) {\n return; // Silent exit, no logging\n }\n\n if (!this.isInitialized()) {\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const pageProperties: PageProperties = {\n name: url,\n path: url,\n url: typeof window !== 'undefined' ? window.location.href : url,\n referrer: typeof document !== 'undefined' ? document.referrer : undefined,\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n // Timestamp is included in event payload\n ...mergeEventContext(properties || {}, this.attachedPageContext),\n };\n\n this.adapter.page(pageProperties);\n this.lastTrackedPath = url;\n }\n\n /**\n * Track an event\n */\n track(eventName: string, properties?: EventProperties): void {\n // CRITICAL: Don't track events in preview/composer mode - exit immediately\n if (this.isPreviewMode()) {\n return; // Silent exit, no logging\n }\n\n if (!this.isInitialized()) {\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const trackProperties: TrackProperties = {\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n url: typeof window !== 'undefined' ? window.location.href : undefined,\n path:\n (properties as { path?: string } | undefined)?.path ||\n (typeof window !== 'undefined' ? window.location.pathname : undefined),\n // Timestamp is included in event payload\n ...mergeEventContext(properties || {}, this.attachedPageContext),\n };\n\n // Ensure path wins if properties overwrote with undefined\n if (!trackProperties.path && typeof window !== 'undefined') {\n trackProperties.path = window.location.pathname;\n }\n\n this.adapter.track(eventName, trackProperties);\n }\n\n /**\n * Track a button click or CTA interaction\n */\n trackClick(elementId: string, elementText: string, properties?: EventProperties): void {\n this.track('Button Click', {\n elementId,\n elementText,\n ...properties,\n });\n }\n\n /**\n * Track form submission\n */\n trackFormSubmit(formId: string, formData?: EventProperties): void {\n this.track('Form Submit', {\n formId,\n ...formData,\n });\n }\n\n /**\n * Track form field interaction\n */\n trackFormFieldInteraction(fieldName: string, fieldValue?: string): void {\n this.track('Form Field Interaction', {\n fieldName,\n fieldValue: fieldValue ? fieldValue.substring(0, 100) : undefined, // Truncate for privacy\n });\n }\n\n /**\n * Track product/content view\n */\n trackContentView(contentId: string, contentType: string, properties?: EventProperties): void {\n this.track('Content View', {\n contentId,\n contentType,\n ...properties,\n });\n }\n\n /**\n * Identify a visitor.\n * - identify('user_123') — bare string; server maps via org default type\n * - identify({ email: '...', crm_id: '...' }) — explicit types\n * - identify('user_123', traits) — legacy form\n */\n identify(userIdOrIdentifiers: IdentifyInput, traits?: IdentifyTraits): void {\n // Don't track identify events in preview/composer mode\n if (this.isPreviewMode()) {\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Identify tracking disabled in preview mode', {\n userIdOrIdentifiers,\n });\n }\n return;\n }\n\n if (!this.isInitialized()) {\n if (this.config?.debug) {\n console.warn('AmplifyUp SDK: Not initialized. Identify not called.');\n }\n return;\n }\n\n const instanceId = getStoredInstanceId();\n const sessionId = getStoredSessionId();\n const identifyTraits: IdentifyTraits = {\n instanceId,\n sessionId,\n trackingId: this.config?.trackingId,\n ...traits,\n };\n\n this.adapter.identify(userIdOrIdentifiers, identifyTraits);\n\n if (typeof userIdOrIdentifiers === 'string') {\n setUserId(userIdOrIdentifiers);\n }\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: User identified', {\n userIdOrIdentifiers,\n instanceId,\n });\n }\n }\n\n /**\n * Set profile fields (partial update). Omitted keys are left alone;\n * an explicit empty value clears the field.\n */\n setProfileFields(fields: ProfileFieldsInput): void {\n if (this.isPreviewMode()) {\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: setProfileFields disabled in preview mode', {\n fields,\n });\n }\n return;\n }\n\n if (!this.isInitialized()) {\n if (this.config?.debug) {\n console.warn('AmplifyUp SDK: Not initialized. setProfileFields not called.');\n }\n return;\n }\n\n const instanceId = getStoredInstanceId();\n if (typeof this.adapter.setProfileFields === 'function') {\n this.adapter.setProfileFields(fields, {\n instanceId: instanceId || undefined,\n sessionId: getStoredSessionId() || undefined,\n trackingId: this.config?.trackingId,\n });\n }\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: Profile fields set', { fields, instanceId });\n }\n }\n\n /**\n * Track content engagement (when user interacts with personalized content)\n */\n trackContentEngagement(contentId: string, engagementType: 'view' | 'click' | 'dismiss'): void {\n this.track('Content Engagement', {\n contentId,\n engagementType,\n });\n\n // Also send directly to orchestrator for immediate feedback\n if (this.orchestratorUrl) {\n const instanceId = getStoredInstanceId();\n fetch(`${this.orchestratorUrl}/api/personalization/feedback`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n instanceId,\n trackingId: this.config?.trackingId,\n contentId,\n engagementType,\n timestamp: new Date().toISOString(),\n }),\n }).catch(err => {\n if (this.config?.debug) {\n console.error('AmplifyUp SDK: Failed to send engagement feedback:', err);\n }\n });\n }\n }\n\n /**\n * Reset user identity (logout)\n */\n reset(): void {\n this.adapter.reset();\n clearIds();\n\n if (this.config?.debug) {\n console.log('AmplifyUp SDK: User identity reset');\n }\n }\n\n /**\n * Get instance ID (anonymous ID)\n */\n getInstanceId(): string {\n return getStoredInstanceId();\n }\n\n /**\n * Get session id (30-minute inactivity reset).\n */\n getSessionId(): string {\n return getStoredSessionId();\n }\n\n /**\n * Get user ID\n */\n getUserId(): string | null {\n return getStoredUserId();\n }\n\n /**\n * Get tracking ID\n */\n getTrackingId(): string | undefined {\n return this.config?.trackingId;\n }\n\n /**\n * Get diagnostic information\n * Useful for debugging from browser console\n */\n getDiagnostics(): {\n initialized: boolean;\n instanceId: string;\n userId: string | null;\n trackingId: string | undefined;\n target: AmplifyUpTarget;\n config: {\n apiGatewayUrl?: string;\n decisionApiUrl?: string;\n orchestratorUrl?: string;\n debug?: boolean;\n };\n } {\n const instanceId = getStoredInstanceId();\n const userId = getStoredUserId();\n\n return {\n initialized: this.initialized,\n instanceId,\n userId,\n trackingId: this.config?.trackingId,\n target: this.target,\n config: {\n apiGatewayUrl: this.apiGatewayUrl,\n decisionApiUrl: this.decisionApiUrl,\n orchestratorUrl: this.orchestratorUrl,\n debug: this.config?.debug,\n },\n };\n }\n\n getTarget(): AmplifyUpTarget {\n return this.target;\n }\n\n /**\n * Test tracking by sending a test event\n */\n testTracking(): void {\n if (!this.initialized) {\n console.warn('AmplifyUp SDK: Not initialized. Cannot test tracking.');\n return;\n }\n\n const testEvent = {\n eventName: 'SDK Test Event',\n timestamp: new Date().toISOString(),\n test: true,\n };\n\n console.log('AmplifyUp SDK: Sending test event...', testEvent);\n this.track('SDK Test Event', {\n ...testEvent,\n instanceId: getStoredInstanceId(),\n trackingId: this.config?.trackingId,\n });\n\n console.log('AmplifyUp SDK: Test event sent. Check AWS API Gateway to verify it was received.');\n console.log('AmplifyUp SDK: Check Network tab for requests to:', this.apiGatewayUrl);\n }\n\n /**\n * Verify AWS API Gateway connectivity\n * Checks if AWS adapter is initialized and can send events\n */\n verifyAWSConnection(): {\n connected: boolean;\n message: string;\n details?: any;\n } {\n if (!this.apiGatewayUrl) {\n return {\n connected: false,\n message: 'AWS API Gateway URL not configured',\n };\n }\n\n if (!this.initialized) {\n return {\n connected: false,\n message: 'SDK not initialized',\n };\n }\n\n return {\n connected: true,\n message: 'AWS adapter is connected and ready',\n details: {\n apiGatewayUrl: this.apiGatewayUrl,\n decisionApiUrl: this.decisionApiUrl,\n },\n };\n }\n\n /**\n * Get status summary (for console debugging)\n */\n getStatus(): string {\n const diag = this.getDiagnostics();\n return `\nAmplifyUp SDK Status:\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nInitialized: ${diag.initialized ? '✅ Yes' : '❌ No'}\nTarget: ${diag.target}\nInstance ID: ${diag.instanceId}\nUser ID: ${diag.userId || 'Not identified'}\nTracking ID: ${diag.trackingId || 'Not set'}\n\nAdapter:\n Type: AWS (Pure AWS Architecture)\n\nConfig:\n API Gateway: ${this.apiGatewayUrl || 'Not set (required)'}\n Decision API: ${this.decisionApiUrl || 'Not set (using Orchestrator fallback)'}\n Orchestrator: ${this.orchestratorUrl || 'Not set'}\n\nAvailable Console Commands:\n AmplifyUp.getStatus() - Show this status\n AmplifyUp.getDiagnostics() - Get full diagnostic object\n AmplifyUp.getTarget() - Current environment target\n AmplifyUp.getInstanceId() - Get instance ID (browser/session ID)\n AmplifyUp.getUserId() - Get user ID if identified\n AmplifyUp.testTracking() - Send a test event\n AmplifyUp.verifyAWSConnection() - Verify AWS API Gateway connectivity\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n `.trim();\n }\n\n /**\n * Get orchestrator URL\n */\n getOrchestratorUrl(): string | undefined {\n return this.orchestratorUrl || undefined;\n }\n\n /**\n * Get decision API URL\n */\n getDecisionApiUrl(): string | undefined {\n return this.decisionApiUrl || undefined;\n }\n\n /**\n * Get Edge Worker URL (production content resolve)\n */\n getEdgeUrl(): string | undefined {\n return this.edgeUrl || undefined;\n }\n\n /**\n * Optional site id from config (Edge can resolve via trackingId alone).\n */\n getSiteId(): string | undefined {\n return this.siteId || this.config?.siteId || undefined;\n }\n\n /**\n * Build API URL for fetching page config from the Layout Provider\n */\n buildLayoutProviderUrl(route: string, preview: boolean = false): string {\n const orchestratorUrl = this.getOrchestratorUrl();\n const trackingId = this.getTrackingId();\n const instanceId = getStoredInstanceId();\n\n if (!orchestratorUrl || !trackingId) {\n throw new Error('SDK not initialized. Call init() first.');\n }\n\n // Use relative URL only when we're actually on the orchestrator's origin (e.g. iframe\n // loaded via orchestrator proxy). When on the site's own origin with ?preview=true,\n // we must use the full orchestrator URL.\n const isOnOrchestratorOrigin = typeof window !== 'undefined' &&\n window.location.origin === new URL(orchestratorUrl).origin;\n\n const params = new URLSearchParams({\n route,\n trackingId,\n instanceId,\n });\n\n if (preview) {\n params.set('preview', 'true');\n if (typeof window !== 'undefined') {\n const pageSearch = new URLSearchParams(window.location.search);\n if (isWorkingContentRequest(pageSearch)) {\n params.set('working', 'true');\n }\n const zoneId = pageSearch.get('zoneId');\n const compositionId = pageSearch.get('compositionId');\n if (zoneId) params.set('zoneId', zoneId);\n if (compositionId) params.set('compositionId', compositionId);\n }\n }\n\n if (isOnOrchestratorOrigin) {\n return `/api/layout/provider?${params.toString()}`;\n }\n\n // Use full orchestrator URL\n return `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n }\n\n /**\n * Fetch page configuration from orchestrator's Layout Provider\n */\n async fetchPageConfig(route: string, preview: boolean = false): Promise<any> {\n const url = this.buildLayoutProviderUrl(route, preview);\n const pageSearch =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : null;\n const cacheKey = layoutProviderCacheKey({\n route,\n trackingId: this.getTrackingId(),\n instanceId: getStoredInstanceId(),\n preview,\n working: pageSearch ? isWorkingContentRequest(pageSearch) : false,\n zoneId: pageSearch?.get('zoneId'),\n compositionId: pageSearch?.get('compositionId'),\n });\n return dedupeLayoutProviderFetch(cacheKey, async () => {\n const startedAt = Date.now();\n sdkDebug('[AmplifyUp SDK] layout/provider request', {\n route,\n at: new Date(startedAt).toISOString(),\n });\n const page = await this.fetchPageConfigUncached(url);\n sdkDebug('[AmplifyUp SDK] layout/provider response', {\n route,\n durationMs: Date.now() - startedAt,\n hasPage: !!page,\n });\n return page;\n });\n }\n\n private async fetchPageConfigUncached(url: string): Promise<any> {\n const response = await fetch(url);\n\n if (!response.ok) {\n if (response.status === 404) {\n return null; // Page not configured\n }\n throw new Error(`Failed to fetch page: ${response.statusText}`);\n }\n\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n // Preview-frame used to rewrite /api/layout/* onto the customer site (HTML).\n throw new Error(\n `Layout provider returned non-JSON (${contentType || 'unknown'}). Check Composer preview routing.`\n );\n }\n\n const data = await response.json();\n const pageConfig = data.page;\n \n // Set up Composer-configured + automatic component event tracking\n if (pageConfig?.eventTracking) {\n this.setupEventTracking(pageConfig.eventTracking);\n }\n // Component hosts may render after config; attach views with a short delay + refresh\n if (typeof window !== 'undefined') {\n window.setTimeout(() => this.setupComponentViewTracking(), 150);\n window.setTimeout(() => {\n this.setupComponentViewTracking();\n this.refreshEventTracking();\n }, 800);\n }\n \n return envelopePageConfig(pageConfig);\n }\n\n /**\n * Set up view-level event tracking based on configuration\n */\n setupEventTracking(eventConfig: EventTrackingConfig[]): void {\n if (typeof document === 'undefined') return;\n \n // Detach previous listeners but keep incoming config\n this.detachEventListeners();\n \n this.eventTrackingConfig = Array.isArray(eventConfig) ? [...eventConfig] : [];\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Setting up event tracking:', this.eventTrackingConfig.length, 'events');\n }\n \n // Wait for DOM to be ready, then attach listeners\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => this.attachEventListeners());\n } else {\n // Small delay to ensure components are rendered\n setTimeout(() => this.attachEventListeners(), 100);\n }\n }\n\n /**\n * Attach event listeners to page elements based on view-level configuration\n */\n private attachEventListeners(): void {\n if (typeof document === 'undefined') return;\n \n this.eventTrackingConfig.forEach((eventConfig) => {\n if (eventConfig.enabled === false) return;\n if (!eventConfig.selector) {\n if (this.config?.debug) {\n console.warn(`[AmplifyUp SDK] Event ${eventConfig.eventName} has no selector, skipping`);\n }\n return;\n }\n\n let targetElements: Element[] = [];\n try {\n const escapeAttr = (value: string) =>\n typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(value)\n : value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const scopeRoot = eventConfig.componentId\n ? document.querySelector(\n `[data-amplifyup-component=\"${escapeAttr(eventConfig.componentId)}\"], [data-component-id=\"${escapeAttr(eventConfig.componentId)}\"]`\n )\n : document;\n if (!scopeRoot) {\n if (this.config?.debug) {\n console.log(\n `[AmplifyUp SDK] Component host not found for ${eventConfig.componentId}`\n );\n }\n return;\n }\n targetElements = Array.from(\n scopeRoot.querySelectorAll(eventConfig.selector)\n );\n // If selector matches the host itself\n if (\n scopeRoot instanceof Element &&\n scopeRoot !== document.documentElement &&\n scopeRoot.matches?.(eventConfig.selector)\n ) {\n targetElements.unshift(scopeRoot);\n }\n } catch (e) {\n if (this.config?.debug) {\n console.warn(`[AmplifyUp SDK] Invalid selector: ${eventConfig.selector}`, e);\n }\n return;\n }\n \n if (targetElements.length === 0) {\n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] No elements found for selector: ${eventConfig.selector}`);\n }\n return;\n }\n \n targetElements.forEach((targetEl) => {\n const htmlTargetEl = targetEl as HTMLElement;\n \n // Map eventType to actual DOM event\n const domEventType = this.mapEventType(eventConfig.eventType);\n \n // Create event handler\n const handler = (e: Event) => {\n this.handleTrackedEvent(e, eventConfig, htmlTargetEl);\n };\n \n // Special handling for 'view' events (intersection observer)\n if (eventConfig.eventType === 'view') {\n this.setupViewTracking(htmlTargetEl, eventConfig);\n } else {\n htmlTargetEl.addEventListener(domEventType, handler);\n this.attachedEventListeners.push({\n element: htmlTargetEl,\n eventType: domEventType,\n handler,\n });\n }\n \n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] Attached ${eventConfig.eventType} listener for ${eventConfig.eventName} on selector: ${eventConfig.selector}`);\n }\n });\n });\n }\n\n /**\n * Map event type from config to DOM event type\n */\n private mapEventType(eventType: string): string {\n const eventMap: Record<string, string> = {\n 'click': 'click',\n 'submit': 'submit',\n 'focus': 'focus',\n 'blur': 'blur',\n 'hover': 'mouseenter',\n 'change': 'change',\n 'scroll': 'scroll',\n 'view': 'view', // Handled separately with IntersectionObserver\n 'custom': 'custom',\n };\n return eventMap[eventType] || eventType;\n }\n\n /**\n * Handle a tracked event and send to AWS API Gateway\n */\n private handleTrackedEvent(\n event: Event,\n config: EventTrackingConfig,\n element: HTMLElement\n ): void {\n // Build event properties\n const properties: Record<string, any> = {\n eventType: config.eventType,\n selector: config.selector,\n path: this.currentPath(),\n };\n if (config.componentId) {\n properties.componentId = config.componentId;\n }\n if (config.componentName) {\n properties.componentName = config.componentName;\n }\n if (config.staticProperties) {\n for (const [key, value] of Object.entries(config.staticProperties)) {\n if (key) properties[key] = value;\n }\n }\n \n // Capture configured properties from element\n if (config.properties && config.properties.length > 0) {\n config.properties.forEach((prop) => {\n // Try data attribute first\n const dataAttrValue = element.getAttribute(`data-${prop}`);\n if (dataAttrValue) {\n properties[prop] = dataAttrValue;\n return;\n }\n \n // Try element property\n if (prop in element) {\n const value = (element as any)[prop];\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n properties[prop] = value;\n }\n }\n \n // Special properties\n switch (prop) {\n case 'buttonText':\n case 'text':\n properties[prop] = element.textContent?.trim().substring(0, 100);\n break;\n case 'linkUrl':\n case 'href':\n properties[prop] = element.getAttribute('href');\n break;\n case 'formId':\n case 'id':\n properties[prop] = element.id || element.getAttribute('name');\n break;\n case 'value':\n properties[prop] = (element as HTMLInputElement).value;\n break;\n case 'tagName':\n properties[prop] = element.tagName.toLowerCase();\n break;\n case 'className':\n properties[prop] = element.className;\n break;\n }\n });\n }\n \n // Track the event\n this.track(config.eventName, properties);\n \n if (this.config?.debug) {\n console.log(`[AmplifyUp SDK] Tracked event: ${config.eventName}`, properties);\n }\n }\n\n /**\n * Set up view tracking using IntersectionObserver\n */\n private setupViewTracking(\n element: HTMLElement,\n config: EventTrackingConfig\n ): void {\n if (typeof IntersectionObserver === 'undefined') return;\n \n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // Element is in view - track the event\n this.handleTrackedEvent(\n new CustomEvent('view'),\n config,\n element\n );\n // Only track once per page load\n observer.unobserve(element);\n }\n });\n },\n {\n threshold: 0.5, // 50% visible\n }\n );\n \n observer.observe(element);\n \n // Store observer for cleanup\n (element as any)._amplifyupViewObserver = observer;\n }\n\n /**\n * Detach listeners/observers without clearing the saved event config.\n */\n private detachEventListeners(): void {\n this.attachedEventListeners.forEach(({ element, eventType, handler }) => {\n element.removeEventListener(eventType, handler);\n });\n this.attachedEventListeners = [];\n\n if (typeof document !== 'undefined') {\n document.querySelectorAll('*').forEach((el) => {\n const observer = (el as any)._amplifyupViewObserver;\n if (observer) {\n observer.disconnect();\n delete (el as any)._amplifyupViewObserver;\n }\n });\n }\n }\n\n /**\n * Clean up all attached event listeners and clear config\n */\n cleanupEventTracking(): void {\n this.detachEventListeners();\n this.eventTrackingConfig = [];\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Cleaned up event tracking');\n }\n }\n\n /**\n * Manually trigger event tracking setup (useful after dynamic content loads)\n */\n refreshEventTracking(): void {\n if (this.eventTrackingConfig.length === 0) return;\n const config = [...this.eventTrackingConfig];\n this.detachEventListeners();\n this.eventTrackingConfig = config;\n this.attachEventListeners();\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Refreshed event tracking:', config.length, 'events');\n }\n }\n\n /** Origins allowed to send Composer postMessage commands to the SDK. */\n private isAllowedComposerOrigin(origin: string): boolean {\n if (typeof window === 'undefined') return false;\n if (origin === window.location.origin) return true;\n\n const staticAllowed = [\n 'http://localhost:5001',\n 'http://localhost:3001',\n 'https://amplifyup.ai',\n 'https://orchestrator.amplifyup.com',\n ];\n if (staticAllowed.includes(origin)) return true;\n\n try {\n const host = new URL(origin).hostname;\n if (host === 'amplifyup.ai' || host.endsWith('.amplifyup.ai')) return true;\n } catch {\n // ignore invalid origin\n }\n\n const orchestratorFromQuery = (() => {\n try {\n const value = new URLSearchParams(window.location.search).get('orchestratorUrl');\n return value ? new URL(value).origin : null;\n } catch {\n return null;\n }\n })();\n if (orchestratorFromQuery && origin === orchestratorFromQuery) return true;\n\n if (this.orchestratorUrl) {\n try {\n if (new URL(this.orchestratorUrl).origin === origin) return true;\n } catch {\n // ignore\n }\n }\n\n return false;\n }\n\n /**\n * Set up postMessage listener for highlighting commands from orchestrator\n */\n private setupHighlightingListener(): void {\n if (this.messageListener) {\n console.log('[AmplifyUp SDK] Message listener already set up');\n return; // Already set up\n }\n\n console.log('[AmplifyUp SDK] Setting up message listener...');\n\n this.messageListener = (event: MessageEvent) => {\n // Debug logging\n console.log('[AmplifyUp SDK] Received message:', {\n origin: event.origin,\n currentOrigin: window.location.origin,\n data: event.data,\n });\n\n // Security: only accept Composer commands from the orchestrator origin\n if (!this.isAllowedComposerOrigin(event.origin)) {\n console.warn('[AmplifyUp SDK] Rejected message from unauthorized origin:', {\n eventOrigin: event.origin,\n currentOrigin: window.location.origin,\n });\n return;\n }\n\n try {\n if (event.data?.type === 'AMPLIFYUP_RICHTEXT_EDITING') {\n document.querySelectorAll('.amplifyup-richtext-editing').forEach((el) => {\n el.classList.remove('amplifyup-richtext-editing');\n (el as HTMLElement).style.minHeight = '';\n (el as HTMLElement).style.height = '';\n (el as HTMLElement).style.display = '';\n });\n if (event.data.active && event.data.fieldName) {\n if (!document.getElementById('amplifyup-richtext-editing-style')) {\n const style = document.createElement('style');\n style.id = 'amplifyup-richtext-editing-style';\n style.textContent =\n '[data-amplifyup-field].amplifyup-richtext-editing{outline:none!important;visibility:hidden!important;display:block!important;box-sizing:border-box!important;}';\n document.head.appendChild(style);\n }\n const editRoot = event.data.layoutNodeId\n ? document.querySelector(\n `[data-node-id=\"${event.data.layoutNodeId}\"], [data-amplifyup-node-id=\"${event.data.layoutNodeId}\"]`\n ) || document\n : document;\n const editField = editRoot.querySelector(\n `[data-amplifyup-field=\"${event.data.fieldName}\"]`\n ) as HTMLElement | null;\n if (editField) {\n editField.classList.add('amplifyup-richtext-editing');\n const editHeight = Number(event.data.height) || 0;\n if (editHeight > 0) {\n editField.style.display = 'block';\n editField.style.minHeight = `${editHeight}px`;\n editField.style.height = `${editHeight}px`;\n }\n }\n }\n return;\n }\n\n if (event.data?.type === 'AMPLIFYUP_FIELD_PATCH') {\n window.dispatchEvent(\n new CustomEvent('amplifyup:field-patch', { detail: event.data })\n );\n return;\n }\n\n if (event.data?.type === 'AMPLIFYUP_PROPS_PATCH') {\n window.dispatchEvent(\n new CustomEvent('amplifyup:props-patch', { detail: event.data })\n );\n return;\n }\n\n if (event.data?.type === 'AMPLIFYUP_LAYOUT_PATCH') {\n window.dispatchEvent(\n new CustomEvent('amplifyup:layout-patch', { detail: event.data })\n );\n return;\n }\n\n if (event.data?.type === 'COMPONENT_DELETABLE_STATUS') {\n const { componentId, deletable, nodeId } = event.data;\n const element = document.querySelector(`[data-component-id=\"${componentId}\"]`) as HTMLElement;\n if (element) {\n const deleteButton = (element as any)._deleteButton as HTMLButtonElement;\n if (deleteButton) {\n if (deletable && nodeId) {\n deleteButton.disabled = false;\n deleteButton.style.opacity = '1';\n deleteButton.style.cursor = 'pointer';\n element.setAttribute('data-node-id', nodeId);\n } else {\n deleteButton.disabled = true;\n deleteButton.style.opacity = '0.5';\n deleteButton.style.cursor = 'not-allowed';\n }\n }\n }\n return;\n }\n \n // Handle DELETE_COMPONENT_REQUEST (from SDK delete button)\n if (event.data?.type === 'DELETE_COMPONENT_REQUEST') {\n // Forward to parent\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(event.data, '*');\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_START') {\n this.composerOverlayDragActive = true;\n if (typeof document !== 'undefined') {\n document.body.classList.add('amplifyup-composer-dragging');\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_AT_POINT') {\n const { x, y } = event.data;\n if (typeof x === 'number' && typeof y === 'number') {\n this.handleComposerDragAtPoint(x, y);\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DROP_AT_POINT') {\n const { x, y } = event.data;\n if (typeof x === 'number' && typeof y === 'number') {\n this.handleComposerDropAtPoint(x, y);\n }\n return;\n }\n\n if (event.data?.type === 'COMPOSER_DRAG_END') {\n this.composerOverlayDragActive = false;\n this.clearComposerDragHighlight();\n return;\n }\n \n if (event.data?.type === 'CLEAR_SELECTION') {\n this.clearComposerSelection();\n return;\n }\n\n if (event.data?.type === 'GET_ELEMENT_POSITION') {\n const { componentId, slotName, nodeId, isPageSlot } = event.data;\n let element: HTMLElement | null = null;\n\n if (isPageSlot || (slotName === 'main' && !nodeId && !componentId)) {\n element = document.querySelector(\n '[data-slot-source=\"page\"]'\n ) as HTMLElement | null;\n }\n if (!element && nodeId && slotName) {\n element = document.querySelector(\n `[data-parent-node-id=\"${nodeId}\"][data-slot-id=\"${slotName}\"], [data-parent-node-id=\"${nodeId}\"][data-amplifyup-slot=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && nodeId && !slotName) {\n element = document.querySelector(\n `[data-node-id=\"${nodeId}\"]`\n ) as HTMLElement | null;\n }\n if (!element && slotName) {\n element = document.querySelector(\n `[data-slot-source=\"page\"][data-slot-id=\"${slotName}\"], [data-slot-source=\"page\"][data-amplifyup-slot=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && slotName) {\n element = document.querySelector(\n `[data-amplifyup-slot=\"${slotName}\"], [data-slot-id=\"${slotName}\"]`\n ) as HTMLElement | null;\n }\n if (!element && componentId) {\n element = document.querySelector(\n `[data-amplifyup-component=\"${componentId}\"], [data-component-id=\"${componentId}\"]`\n ) as HTMLElement | null;\n }\n\n console.log('[AmplifyUp SDK] Finding element position:', {\n componentId,\n slotName,\n nodeId,\n isPageSlot,\n found: !!element,\n });\n if (element) {\n this.markComposerSelection(element);\n const rect = element.getBoundingClientRect();\n const position = {\n x: rect.left + rect.width / 2,\n y: rect.top - 50,\n width: rect.width,\n height: rect.height,\n };\n const bounds = {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n };\n\n if (window.parent && window.parent !== window) {\n const hierarchyEls = this.buildComponentHierarchy(element);\n window.parent.postMessage({\n type: 'ELEMENT_POSITION',\n componentId: componentId || null,\n slotName: slotName || null,\n nodeId: nodeId || null,\n isPageSlot: !!isPageSlot || element.getAttribute('data-slot-source') === 'page',\n hierarchy: hierarchyEls.map((el, index) => {\n const elComponentId = el.getAttribute('data-amplifyup-component') || el.getAttribute('data-component-id');\n const elSlotName = el.getAttribute('data-amplifyup-slot') || el.getAttribute('data-slot-id');\n const isSlot = !elComponentId && !!elSlotName;\n const pageSlot = isSlot && el.getAttribute('data-slot-source') === 'page';\n return {\n index,\n componentId: elComponentId,\n componentName: pageSlot ? 'Page' : el.getAttribute('data-component-name'),\n slotName: isSlot ? elSlotName : null,\n isSlot,\n isPageSlot: pageSlot,\n nodeId: el.getAttribute('data-node-id') || (isSlot ? el.getAttribute('data-parent-node-id') : null),\n };\n }),\n position,\n bounds,\n }, '*');\n }\n } else {\n console.warn('[AmplifyUp SDK] Element not found for position request');\n }\n return;\n }\n \n const message = event.data as HighlightMessage;\n \n if (!message || typeof message !== 'object' || !message.type) {\n console.log('[AmplifyUp SDK] Message is not a highlighting message:', message);\n return; // Not a highlighting message\n }\n\n console.log('[AmplifyUp SDK] Processing highlight message:', message.type);\n\n switch (message.type) {\n case 'ENABLE_HIGHLIGHTING':\n case 'UPDATE_HIGHLIGHTING':\n console.log('[AmplifyUp SDK] Enabling highlighting with registry:', message.componentRegistry?.length || 0, 'components');\n this.enableHighlighting(\n message.componentRegistry || [],\n message.highlightComponents ?? true,\n message.showZones ?? false\n );\n break;\n case 'DISABLE_HIGHLIGHTING':\n console.log('[AmplifyUp SDK] Disabling highlighting');\n this.disableHighlighting();\n break;\n case 'SHOW_COMPONENT_TOOLTIP':\n case 'HIDE_ALL_TOOLTIPS':\n this.clearComposerSelection();\n break;\n case 'ENABLE_EVENT_SELECTION':\n console.log('[AmplifyUp SDK] Enable event selection mode:', message.enabled);\n this.setEventSelectionMode(message.enabled || false);\n break;\n }\n } catch (error) {\n console.error('[AmplifyUp SDK] Error handling highlight message:', error);\n }\n };\n\n window.addEventListener('message', this.messageListener);\n console.log('[AmplifyUp SDK] Message listener attached to window');\n }\n\n /**\n * Enable/disable event selection mode\n * When enabled, clicks on elements send element info to parent for event configuration\n */\n private setEventSelectionMode(enabled: boolean): void {\n if (typeof document === 'undefined') return;\n \n this.eventSelectionMode = enabled;\n if (typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ = enabled;\n window.dispatchEvent(new CustomEvent('amplifyup:composer-edit'));\n }\n \n // Remove existing handler if any\n if (this.eventSelectionClickHandler) {\n document.removeEventListener('click', this.eventSelectionClickHandler, true);\n this.eventSelectionClickHandler = null;\n }\n\n // Composer preview-frame already captures picks. A second postMessage\n // created duplicate events for the same click.\n if (\n enabled &&\n typeof window !== 'undefined' &&\n (window as any).__AMPLIFYUP_PREVIEW_MODE__\n ) {\n return;\n }\n \n if (enabled) {\n this.eventSelectionClickHandler = (e: MouseEvent) => {\n const raw = e.target as HTMLElement | null;\n if (!raw) return;\n\n const interactive = raw.closest(\n 'a, button, [role=\"button\"], input, select, textarea, [data-el], [data-amplifyup-component], [data-component-id]'\n );\n const target = interactive instanceof HTMLElement ? interactive : raw;\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const selector = this.generateSelectorForElement(target);\n const tagName = target.tagName.toLowerCase();\n const text = (target.textContent || '').replace(/\\s+/g, ' ').trim().substring(0, 80);\n \n if (window.parent && window.parent !== window) {\n window.parent.postMessage({\n type: 'ELEMENT_CLICKED_FOR_EVENT',\n selector,\n tagName,\n text,\n }, '*');\n }\n };\n \n // Use capture phase to catch all clicks\n document.addEventListener('click', this.eventSelectionClickHandler, true);\n \n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Event selection mode enabled - clicks will be captured');\n }\n } else {\n if (this.config?.debug) {\n console.log('[AmplifyUp SDK] Event selection mode disabled');\n }\n }\n }\n\n /**\n * Generate a CSS selector for an element\n */\n private generateSelectorForElement(el: HTMLElement): string {\n // If has ID, use it\n if (el.id) {\n return '#' + el.id;\n }\n \n // If has data attributes, use them\n const dataAttrs = Array.from(el.attributes).filter(a => a.name.startsWith('data-'));\n if (dataAttrs.length > 0) {\n const attr = dataAttrs[0];\n return '[' + attr.name + '=\"' + attr.value + '\"]';\n }\n \n // If has meaningful class\n if (el.className && typeof el.className === 'string') {\n const classes = el.className.split(' ').filter(c => \n c && !c.startsWith('has-') && !c.includes('selectable') && !c.includes('selected')\n );\n if (classes.length > 0) {\n return el.tagName.toLowerCase() + '.' + classes[0];\n }\n }\n \n // If has type attribute (for inputs)\n if ((el as HTMLInputElement).type) {\n return el.tagName.toLowerCase() + '[type=\"' + (el as HTMLInputElement).type + '\"]';\n }\n \n // If has name attribute\n if ((el as HTMLInputElement).name) {\n return el.tagName.toLowerCase() + '[name=\"' + (el as HTMLInputElement).name + '\"]';\n }\n \n // Just use tag name\n return el.tagName.toLowerCase();\n }\n\n /** Clear drag-over highlight state (Composer overlay path or native drag end). */\n private clearComposerDragHighlight(): void {\n if (typeof document === 'undefined') return;\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n document.querySelectorAll(`${slotSelector}.amplifyup-drag-over-slot`).forEach((el) => {\n el.classList.remove('amplifyup-drag-over-slot');\n });\n document.body.classList.remove('amplifyup-drag-no-drop');\n document.body.classList.remove('amplifyup-composer-dragging');\n this.lastComposerDragSlot = null;\n this.composerDragMissFrames = 0;\n }\n\n /** Re-apply drag-over class only if missing (avoids classList churn / flicker). */\n private ensureDragOverClass(slot: HTMLElement): void {\n if (!slot.classList.contains('amplifyup-drag-over-slot')) {\n slot.classList.add('amplifyup-drag-over-slot');\n }\n if (document.body.classList.contains('amplifyup-drag-no-drop')) {\n document.body.classList.remove('amplifyup-drag-no-drop');\n }\n }\n\n /**\n * Composer drag targets the innermost (most specific) slot under the cursor.\n * e.g. FullWidthGrid's main wins over a page-level main that wraps it.\n */\n private resolveSlotAtPoint(x: number, y: number): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n\n const containing: HTMLElement[] = [];\n document.querySelectorAll(slotSelector).forEach((node) => {\n const el = node as HTMLElement;\n const r = el.getBoundingClientRect();\n if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) {\n containing.push(el);\n }\n });\n if (containing.length === 0) return null;\n\n // Innermost = not containing any other slot that also contains the point\n const innermost = containing.filter(\n (el) => !containing.some((other) => other !== el && el.contains(other))\n );\n if (innermost.length === 1) return innermost[0];\n\n // Prefer the smallest box among peers (most specific painted target)\n let best = innermost[0];\n let bestArea = Infinity;\n for (const el of innermost) {\n const r = el.getBoundingClientRect();\n const area = Math.max(1, r.width) * Math.max(1, r.height);\n if (area < bestArea) {\n bestArea = area;\n best = el;\n }\n }\n return best;\n }\n\n /** Parent layout node that owns this slot (null for page-level code main). */\n private parentComponentForSlot(slotEl: HTMLElement): {\n componentId: string | null;\n nodeId: string | null;\n } {\n // Prefer attributes stamped on the slot itself (unique per layout node instance).\n let componentId = slotEl.getAttribute('data-parent-component-id');\n let nodeId = slotEl.getAttribute('data-parent-node-id');\n\n // Walk ancestors — stop at the nearest layout node wrapper so nested\n // identical component types don't steal the wrong parent.\n let el: HTMLElement | null = slotEl.parentElement;\n while (el && (!nodeId || !componentId)) {\n if (!nodeId && el.hasAttribute('data-node-id')) {\n nodeId = el.getAttribute('data-node-id');\n }\n if (!componentId) {\n componentId =\n el.getAttribute('data-amplifyup-component') ||\n el.getAttribute('data-component-id');\n }\n // Once we have the nearest node id, don't keep walking to outer ancestors\n // of the same component type.\n if (nodeId) break;\n el = el.parentElement;\n }\n\n return { componentId, nodeId };\n }\n\n private pointInRect(x: number, y: number, el: HTMLElement, pad = 8): boolean {\n const r = el.getBoundingClientRect();\n return (\n x >= r.left - pad &&\n x <= r.right + pad &&\n y >= r.top - pad &&\n y <= r.bottom + pad\n );\n }\n\n private setComposerDragHighlight(slot: HTMLElement | null, x?: number, y?: number): void {\n if (slot && slot === this.lastComposerDragSlot) {\n this.composerDragMissFrames = 0;\n this.ensureDragOverClass(slot);\n return;\n }\n\n // Resolve found a nested slot inside the current highlight — prefer the inner one.\n if (\n slot &&\n this.lastComposerDragSlot &&\n this.lastComposerDragSlot.contains(slot) &&\n slot !== this.lastComposerDragSlot\n ) {\n this.composerDragMissFrames = 0;\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n this.lastComposerDragSlot = slot;\n this.ensureDragOverClass(slot);\n return;\n }\n\n // Still inside the current (innermost) slot — keep it even if hit-test returned a parent.\n if (\n this.lastComposerDragSlot &&\n typeof x === 'number' &&\n typeof y === 'number' &&\n this.pointInRect(x, y, this.lastComposerDragSlot)\n ) {\n if (!slot || slot.contains(this.lastComposerDragSlot) || slot === this.lastComposerDragSlot) {\n this.composerDragMissFrames = 0;\n this.ensureDragOverClass(this.lastComposerDragSlot);\n return;\n }\n }\n\n if (slot) {\n this.composerDragMissFrames = 0;\n if (this.lastComposerDragSlot && this.lastComposerDragSlot !== slot) {\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n }\n this.lastComposerDragSlot = slot;\n this.ensureDragOverClass(slot);\n return;\n }\n\n this.composerDragMissFrames += 1;\n if (this.lastComposerDragSlot && this.composerDragMissFrames < 8) {\n this.ensureDragOverClass(this.lastComposerDragSlot);\n return;\n }\n\n if (this.lastComposerDragSlot) {\n this.lastComposerDragSlot.classList.remove('amplifyup-drag-over-slot');\n this.lastComposerDragSlot = null;\n }\n if (!document.body.classList.contains('amplifyup-drag-no-drop')) {\n document.body.classList.add('amplifyup-drag-no-drop');\n }\n }\n\n private handleComposerDragAtPoint(x: number, y: number): void {\n this.composerOverlayDragActive = true;\n if (!document.body.classList.contains('amplifyup-composer-dragging')) {\n document.body.classList.add('amplifyup-composer-dragging');\n }\n this.setComposerDragHighlight(this.resolveSlotAtPoint(x, y), x, y);\n }\n\n private postDropOnSlot(slotEl: HTMLElement): void {\n const win = window;\n if (!win.parent || win.parent === win) return;\n\n const slotName =\n slotEl.getAttribute('data-amplifyup-slot') ||\n slotEl.getAttribute('data-slot-id');\n if (!slotName) return;\n\n const { componentId, nodeId } = this.parentComponentForSlot(slotEl);\n const isEmpty = slotEl.getAttribute('data-slot-empty') === 'true';\n\n win.parent.postMessage(\n {\n type: 'DROP_ON_SLOT',\n slotName,\n slotElement: {\n path: slotEl.getAttribute('data-slot-path'),\n isEmpty,\n parentComponentId: componentId,\n parentNodeId: nodeId,\n },\n },\n '*'\n );\n }\n\n private handleComposerDropAtPoint(x: number, y: number): void {\n if (typeof document === 'undefined') return;\n const htmlEl = this.resolveSlotAtPoint(x, y);\n this.clearComposerDragHighlight();\n if (!htmlEl) return;\n this.postDropOnSlot(htmlEl);\n }\n\n /**\n * Enable component highlighting\n */\n private enableHighlighting(\n componentRegistry: ComponentRegistryItem[],\n highlightComponents: boolean,\n showZones: boolean\n ): void {\n if (typeof document === 'undefined') return;\n\n // Preserve selection across highlight refreshes — Composer re-sends\n // ENABLE_HIGHLIGHTING on parent re-renders, which must not wipe the ring.\n const previouslySelected = Array.from(\n document.querySelectorAll('.amplifyup-selected')\n ) as HTMLElement[];\n\n this.componentRegistry = componentRegistry;\n this.highlightingEnabled = true;\n this.highlightComponentsEnabled = highlightComponents;\n this.showZonesEnabled = showZones;\n\n // Clean up existing highlights first (keep selection classes)\n this.disableHighlighting({ clearSelection: false });\n this.highlightingEnabled = true;\n\n this.injectComposerHighlightStyles(highlightComponents, showZones);\n\n if (highlightComponents || showZones) {\n this.applyComponentHighlights(highlightComponents, showZones);\n this.setupMutationObserver();\n this.setupComposerDragDrop();\n this.setupComposerBoundsTracking();\n }\n\n previouslySelected.forEach((el) => {\n if (document.contains(el)) {\n el.classList.add('amplifyup-selected');\n }\n });\n\n if (typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_COMPOSER_EDIT__ = highlightComponents;\n window.dispatchEvent(\n new CustomEvent('amplifyup:composer-edit', {\n detail: { enabled: highlightComponents },\n })\n );\n }\n }\n\n /** Document-level drag/drop for cross-iframe drags from Composer sidebar. */\n private setupComposerDragDrop(): void {\n if (typeof document === 'undefined') return;\n this.teardownComposerDragDrop();\n\n const slotSelector = '[data-slot-id], [data-amplifyup-slot]';\n const componentSelector =\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id]';\n\n const clearDragOverState = () => {\n this.clearComposerDragHighlight();\n };\n\n const clearComponentHover = () => {\n document.querySelectorAll('.amplifyup-component-hover').forEach((el) => {\n el.classList.remove('amplifyup-component-hover');\n });\n };\n\n const clearSlotHover = () => {\n document.querySelectorAll(`${slotSelector}.amplifyup-slot-hover`).forEach((el) => {\n el.classList.remove('amplifyup-slot-hover');\n });\n };\n\n const dragenter = (e: DragEvent) => {\n e.preventDefault();\n // Don't toggle no-drop here — dragover owns highlight state (avoids enter/over flicker).\n };\n\n const dragover = (e: DragEvent) => {\n e.preventDefault();\n // Parent overlay owns highlight via postMessage — don't fight it.\n if (this.composerOverlayDragActive) {\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy';\n return;\n }\n const slot = this.resolveSlotAtPoint(e.clientX, e.clientY);\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = slot ? 'copy' : 'none';\n }\n this.setComposerDragHighlight(slot, e.clientX, e.clientY);\n };\n\n const dragleave = (e: DragEvent) => {\n // Overlay in the parent steals the drag; the iframe then gets a document\n // dragleave with relatedTarget=null. Clearing here broke the first pass.\n if (this.composerOverlayDragActive) return;\n const related = e.relatedTarget as Node | null;\n if (!related || !document.body.contains(related)) {\n clearDragOverState();\n }\n };\n\n const drop = (e: DragEvent) => {\n e.preventDefault();\n const slot = this.resolveSlotAtPoint(e.clientX, e.clientY);\n clearDragOverState();\n if (!slot || !this.isVisualEditorMode) return;\n this.postDropOnSlot(slot);\n };\n\n const mouseover = (e: MouseEvent) => {\n if (!this.highlightComponentsEnabled && !this.showZonesEnabled) return;\n const target = e.target as Element | null;\n if (!target?.closest) return;\n\n const component = target.closest(componentSelector) as HTMLElement | null;\n const slot = target.closest(slotSelector) as HTMLElement | null;\n const pageSlot =\n slot && slot.getAttribute('data-slot-source') === 'page' ? slot : null;\n\n if (this.highlightComponentsEnabled && component) {\n if (!component.classList.contains('amplifyup-component-hover')) {\n clearComponentHover();\n component.classList.add('amplifyup-component-hover');\n }\n if (slot && !component.contains(slot)) {\n clearSlotHover();\n }\n return;\n }\n\n clearComponentHover();\n\n if (this.showZonesEnabled && slot && !pageSlot) {\n if (!slot.classList.contains('amplifyup-slot-hover')) {\n clearSlotHover();\n slot.classList.add('amplifyup-slot-hover');\n }\n }\n };\n\n const mouseout = (e: MouseEvent) => {\n if (!this.highlightComponentsEnabled && !this.showZonesEnabled) return;\n const related = e.relatedTarget as Element | null;\n if (this.highlightComponentsEnabled) {\n if (!related?.closest?.(componentSelector)) {\n clearComponentHover();\n }\n }\n if (this.showZonesEnabled) {\n if (!related?.closest?.(slotSelector)) {\n clearSlotHover();\n }\n }\n };\n\n document.addEventListener('mouseover', mouseover, true);\n document.addEventListener('mouseout', mouseout, true);\n\n if (this.showZonesEnabled) {\n document.addEventListener('dragenter', dragenter, false);\n document.addEventListener('dragover', dragover, false);\n document.addEventListener('dragleave', dragleave, false);\n document.addEventListener('drop', drop, false);\n }\n\n this.composerDragHandlers = {\n dragenter,\n dragover,\n dragleave,\n drop,\n mouseover,\n mouseout,\n };\n }\n\n private teardownComposerDragDrop(): void {\n if (!this.composerDragHandlers || typeof document === 'undefined') return;\n const h = this.composerDragHandlers;\n document.removeEventListener('dragenter', h.dragenter, false);\n document.removeEventListener('dragover', h.dragover, false);\n document.removeEventListener('dragleave', h.dragleave, false);\n document.removeEventListener('drop', h.drop, false);\n document.removeEventListener('mouseover', h.mouseover, true);\n document.removeEventListener('mouseout', h.mouseout, true);\n this.composerDragHandlers = null;\n this.composerOverlayDragActive = false;\n this.lastComposerDragSlot = null;\n this.composerDragMissFrames = 0;\n document.body.classList.remove('amplifyup-drag-no-drop');\n document.body.classList.remove('amplifyup-composer-dragging');\n document.querySelectorAll('[data-slot-id].amplifyup-drag-over-slot, [data-amplifyup-slot].amplifyup-drag-over-slot').forEach((el) => {\n el.classList.remove('amplifyup-drag-over-slot');\n });\n document.querySelectorAll('[data-slot-id].amplifyup-slot-hover, [data-amplifyup-slot].amplifyup-slot-hover').forEach((el) => {\n el.classList.remove('amplifyup-slot-hover');\n });\n document.querySelectorAll('.amplifyup-component-hover').forEach((el) => {\n el.classList.remove('amplifyup-component-hover');\n });\n }\n\n private clearComposerSelection(): void {\n if (typeof document === 'undefined') return;\n document\n .querySelectorAll(\n '[data-slot-id].amplifyup-selected, [data-amplifyup-slot].amplifyup-selected, [data-amplifyup-component].amplifyup-selected, [data-component-id].amplifyup-selected'\n )\n .forEach((el) => el.classList.remove('amplifyup-selected'));\n }\n\n private markComposerSelection(element: HTMLElement): void {\n if (typeof document === 'undefined') return;\n this.clearComposerSelection();\n element.classList.add('amplifyup-selected');\n }\n\n private postComposerSelectionBounds(): void {\n if (typeof document === 'undefined') return;\n if (!window.parent || window.parent === window) return;\n const el = document.querySelector('.amplifyup-selected') as HTMLElement | null;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n window.parent.postMessage(\n {\n type: 'SELECTION_BOUNDS',\n bounds: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n },\n '*'\n );\n }\n\n private setupComposerBoundsTracking(): void {\n if (typeof document === 'undefined') return;\n this.teardownComposerBoundsTracking();\n const onScroll = () => {\n if (this.composerBoundsRaf) return;\n this.composerBoundsRaf = requestAnimationFrame(() => {\n this.composerBoundsRaf = 0;\n this.postComposerSelectionBounds();\n });\n };\n this.composerBoundsScrollListener = onScroll;\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n window.addEventListener('scroll', onScroll, { capture: true, passive: true });\n window.addEventListener('resize', onScroll);\n }\n\n private teardownComposerBoundsTracking(): void {\n const onScroll = this.composerBoundsScrollListener;\n this.composerBoundsScrollListener = null;\n if (this.composerBoundsRaf) {\n cancelAnimationFrame(this.composerBoundsRaf);\n this.composerBoundsRaf = 0;\n }\n if (!onScroll || typeof document === 'undefined') return;\n document.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onScroll);\n }\n\n /** Visual outlines for Composer (direct iframe path — no preview-frame proxy). */\n private injectComposerHighlightStyles(\n highlightComponents: boolean,\n showZones: boolean\n ): void {\n if (typeof document === 'undefined') return;\n if (!highlightComponents && !showZones) return;\n\n const existing = document.getElementById('amplifyup-preview-highlights');\n if (existing) existing.remove();\n\n const primary = 'hsl(82 100% 52%)';\n const lines: string[] = [];\n if (highlightComponents) {\n lines.push(\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id] {',\n ' cursor: pointer !important;',\n '}',\n '[data-amplifyup-component].amplifyup-selected, [data-component-id].amplifyup-selected, [data-amplifyup-node].amplifyup-selected, [data-node-id].amplifyup-selected {',\n ` outline: 2px solid ${primary} !important;`,\n ' outline-offset: -2px !important;',\n ' box-shadow: inset 0 0 0 1px hsl(82 100% 52% / 0.25) !important;',\n '}',\n '[data-amplifyup-component].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-component-id].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-amplifyup-node].amplifyup-component-hover:not(.amplifyup-selected),',\n '[data-node-id].amplifyup-component-hover:not(.amplifyup-selected) {',\n ` outline: 2px solid ${primary} !important;`,\n ' outline-offset: -2px !important;',\n '}'\n );\n }\n if (highlightComponents || showZones) {\n lines.push(\n '[data-slot-id].amplifyup-selected, [data-amplifyup-slot].amplifyup-selected {',\n ' background-color: hsl(82 100% 52% / 0.12) !important;',\n '}'\n );\n }\n if (showZones) {\n lines.push(\n '[data-slot-id], [data-amplifyup-slot] {',\n ' outline: 2px dotted rgba(34, 197, 94, 0.75) !important;',\n ' outline-offset: 4px !important;',\n ' min-height: 3rem !important;',\n ' padding: 20px !important;',\n ' box-sizing: border-box !important;',\n ' cursor: pointer !important;',\n ' position: relative !important;',\n '}',\n '[data-slot-id=\"main\"], [data-amplifyup-slot=\"main\"] {',\n ' min-height: 50vh !important;',\n '}',\n /* Empty-slot CTA — Slot / AmplifyPageContent EmptySlotHint */\n '.amplifyup-slot-placeholder {',\n ' display: flex !important;',\n ' flex-direction: column !important;',\n ' align-items: center !important;',\n ' justify-content: center !important;',\n ' gap: 12px !important;',\n ' min-height: inherit !important;',\n ' color: rgba(22, 163, 74, 0.85) !important;',\n ' font-size: 15px !important;',\n ' font-weight: 600 !important;',\n ' pointer-events: none !important;',\n ' text-align: center !important;',\n ' box-sizing: border-box !important;',\n '}',\n '.amplifyup-slot-placeholder-icon {',\n ' color: inherit !important;',\n '}',\n '.amplifyup-slot-placeholder-label {',\n ' color: inherit !important;',\n '}',\n '.amplifyup-slot-label {',\n ' pointer-events: none !important;',\n '}',\n '[data-slot-id].amplifyup-slot-hover, [data-amplifyup-slot].amplifyup-slot-hover {',\n ' outline-color: rgba(34, 197, 94, 1) !important;',\n ' background: rgba(34, 197, 94, 0.06) !important;',\n '}',\n /* During any Composer drag, hide idle slot labels so they don't flash\n when the active drag-over class briefly changes */\n 'body.amplifyup-composer-dragging .amplifyup-slot-placeholder {',\n ' visibility: hidden !important;',\n ' opacity: 0 !important;',\n '}',\n 'body.amplifyup-composer-dragging [data-slot-id]::before,',\n 'body.amplifyup-composer-dragging [data-amplifyup-slot]::before {',\n ' content: none !important;',\n '}',\n '[data-slot-id].amplifyup-drag-over-slot, [data-amplifyup-slot].amplifyup-drag-over-slot {',\n ' outline: 2px solid rgba(34, 197, 94, 1) !important;',\n ' background: rgba(34, 197, 94, 0.18) !important;',\n ' position: relative !important;',\n '}',\n '[data-slot-id].amplifyup-drag-over-slot::after,',\n '[data-amplifyup-slot].amplifyup-drag-over-slot::after {',\n ' content: \"\\\\2713 Drop here\" !important;',\n ' position: absolute !important;',\n ' top: 50% !important; left: 50% !important;',\n ' transform: translate(-50%, -50%) !important;',\n ' font-size: 14px !important; font-weight: 600 !important;',\n ' color: rgb(22, 163, 74) !important;',\n ' pointer-events: none !important;',\n ' white-space: nowrap !important;',\n ' z-index: 2 !important;',\n '}',\n 'body.amplifyup-drag-no-drop { cursor: no-drop !important; }',\n 'body.amplifyup-drag-no-drop::before {',\n ' content: \"\" !important;',\n ' position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important;',\n ' background: rgba(239, 68, 68, 0.06) !important;',\n ' pointer-events: none !important;',\n ' z-index: 2147483646 !important;',\n '}',\n 'body.amplifyup-drag-no-drop::after {',\n ' content: \"\\\\2717 Not a drop zone\" !important;',\n ' position: fixed !important; bottom: 12px !important; right: 12px !important;',\n ' font-size: 12px !important; font-weight: 600 !important;',\n ' color: rgb(185, 28, 28) !important;',\n ' background: rgba(254, 226, 226, 0.95) !important;',\n ' padding: 6px 10px !important; border-radius: 6px !important;',\n ' pointer-events: none !important;',\n ' z-index: 2147483647 !important;',\n ' box-shadow: 0 1px 3px rgba(0,0,0,0.1) !important;',\n '}'\n );\n }\n\n const style = document.createElement('style');\n style.id = 'amplifyup-preview-highlights';\n style.textContent = lines.join('\\n');\n document.head.appendChild(style);\n }\n\n /**\n * Set up MutationObserver to watch for new components being added\n */\n private setupMutationObserver(): void {\n if (typeof document === 'undefined' || !window.MutationObserver) return;\n\n // Clean up existing observer\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n\n this.mutationObserver = new MutationObserver((mutations) => {\n let shouldReapply = false;\n \n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n // Check if the added node or its children have component markers or slot markers\n if (el.hasAttribute('data-amplifyup-component') || \n el.hasAttribute('data-component-id') ||\n el.hasAttribute('data-amplifyup-slot') ||\n el.hasAttribute('data-slot-id') ||\n el.querySelector('[data-amplifyup-component], [data-component-id], [data-amplifyup-slot], [data-slot-id]')) {\n shouldReapply = true;\n }\n }\n });\n // Also check for attribute changes (e.g., slot becoming empty/filled)\n if (mutation.type === 'attributes') {\n const target = mutation.target as HTMLElement;\n if (target.hasAttribute('data-amplifyup-slot') || \n target.hasAttribute('data-slot-id') ||\n target.hasAttribute('data-slot-empty')) {\n shouldReapply = true;\n }\n }\n });\n\n if (shouldReapply && this.highlightingEnabled) {\n // Debounce re-application\n setTimeout(() => {\n if (this.highlightingEnabled) {\n this.applyComponentHighlights(\n this.highlightComponentsEnabled,\n this.showZonesEnabled\n );\n }\n }, 100);\n }\n });\n\n this.mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-amplifyup-component', 'data-component-id', 'data-amplifyup-slot', 'data-slot-id', 'data-slot-empty'],\n });\n }\n\n /**\n * Disable component highlighting\n */\n private disableHighlighting(opts?: { clearSelection?: boolean }): void {\n if (typeof document === 'undefined') return;\n\n const clearSelection = opts?.clearSelection !== false;\n\n this.highlightingEnabled = false;\n this.teardownComposerBoundsTracking();\n this.teardownComposerDragDrop();\n\n if (opts?.clearSelection !== false && typeof window !== 'undefined') {\n (window as any).__AMPLIFYUP_COMPOSER_EDIT__ = false;\n window.dispatchEvent(\n new CustomEvent('amplifyup:composer-edit', { detail: { enabled: false } })\n );\n }\n\n // Disconnect MutationObserver\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n\n // Remove injected Composer highlight styles\n document.getElementById('amplifyup-preview-highlights')?.remove();\n\n // Remove all highlights and event listeners for components (SDK no longer adds overlays)\n document.querySelectorAll('.amplifyup-component-highlight').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const handlers = (htmlEl as any)._amplifyupHandlers;\n if (handlers?.handleClick) {\n htmlEl.removeEventListener('click', handlers.handleClick);\n }\n delete (htmlEl as any)._amplifyupHandlers;\n htmlEl.classList.remove('amplifyup-component-highlight');\n });\n\n // Remove all highlights and event listeners for slots\n document.querySelectorAll('.amplifyup-slot-highlight').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const handlers = (htmlEl as any)._amplifyupSlotHandlers;\n if (handlers) {\n if (handlers.handleClick) htmlEl.removeEventListener('click', handlers.handleClick);\n if (handlers.handleDragOver) htmlEl.removeEventListener('dragover', handlers.handleDragOver);\n if (handlers.handleDragLeave) htmlEl.removeEventListener('dragleave', handlers.handleDragLeave);\n if (handlers.handleDrop) htmlEl.removeEventListener('drop', handlers.handleDrop);\n }\n delete (htmlEl as any)._amplifyupSlotHandlers;\n htmlEl.classList.remove('amplifyup-slot-highlight');\n });\n\n if (clearSelection) {\n this.clearComposerSelection();\n }\n }\n private buildComponentHierarchy(element: HTMLElement): HTMLElement[] {\n const hierarchy: HTMLElement[] = [];\n let current: HTMLElement | null = element;\n let sawPageSlot = false;\n\n while (current) {\n // Check if this element is a component or slot\n if (current.hasAttribute('data-amplifyup-component') || \n current.hasAttribute('data-component-id') ||\n current.hasAttribute('data-amplifyup-slot') ||\n current.hasAttribute('data-slot-id') ||\n current.hasAttribute('data-node-id') ||\n current.hasAttribute('data-amplifyup-node')) {\n hierarchy.push(current);\n if (current.getAttribute('data-slot-source') === 'page') {\n sawPageSlot = true;\n }\n }\n current = current.parentElement;\n }\n\n const ordered = hierarchy.reverse(); // Return from root to leaf\n\n // Ensure Page canvas is always climbable for in-main components\n if (!sawPageSlot) {\n const pageSlot =\n element.closest('[data-slot-source=\"page\"]') as HTMLElement | null;\n if (pageSlot && !ordered.includes(pageSlot)) {\n ordered.unshift(pageSlot);\n }\n }\n\n return ordered;\n }\n\n /**\n * Send selection message to orchestrator (includes element bounds for overlay positioning).\n */\n private sendSelectionMessage(element: HTMLElement, hierarchy: HTMLElement[], isEmpty?: boolean): void {\n // Only send messages in visual editor mode\n if (!this.isVisualEditorMode) return;\n\n const componentId = element.getAttribute('data-amplifyup-component') || element.getAttribute('data-component-id');\n // Don't treat component wrappers as slots even if a parent slot attr leaked onto the node\n const slotName = componentId\n ? null\n : (element.getAttribute('data-amplifyup-slot') || element.getAttribute('data-slot-id'));\n const componentName = element.getAttribute('data-component-name');\n const nodeId =\n element.getAttribute('data-node-id') ||\n element.closest('[data-node-id]')?.getAttribute('data-node-id') ||\n null;\n\n // Build hierarchy info — component markers win over slot markers on the same node\n const hierarchyInfo = hierarchy.map((el, index) => {\n const elComponentId = el.getAttribute('data-amplifyup-component') || el.getAttribute('data-component-id');\n const elSlotName =\n el.getAttribute('data-amplifyup-slot') || el.getAttribute('data-slot-id');\n const elComponentName = el.getAttribute('data-component-name');\n const isSlot = !elComponentId && !!elSlotName;\n const isPageSlot = isSlot && el.getAttribute('data-slot-source') === 'page';\n const nodeId =\n el.getAttribute('data-node-id') ||\n (isSlot ? el.getAttribute('data-parent-node-id') : null);\n \n return {\n index,\n componentId: elComponentId,\n componentName: isPageSlot ? 'Page' : elComponentName,\n slotName: isSlot ? elSlotName : null,\n isSlot,\n isPageSlot,\n nodeId,\n };\n });\n\n // Bounds relative to viewport (iframe when embedded) for orchestrator overlay positioning\n const rect = element.getBoundingClientRect ? element.getBoundingClientRect() : null;\n const bounds = rect ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height } : undefined;\n\n const message: Record<string, unknown> = {\n type: 'COMPONENT_SELECTED',\n componentId,\n componentName,\n slotName,\n nodeId,\n hierarchy: hierarchyInfo,\n selectedIndex: hierarchy.length - 1,\n ...(bounds && { bounds }),\n ...(isEmpty !== undefined && { isEmpty }),\n };\n\n // Send to parent window (orchestrator)\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(message, '*');\n console.log('[AmplifyUp SDK] Sent selection message:', message);\n }\n\n this.markComposerSelection(element);\n }\n\n /**\n * Send component tree to orchestrator\n * Note: Component tree is now sent from AmplifyRenderer based on layoutTree from pageConfig\n * This method is kept for backwards compatibility but is no longer used\n */\n private sendComponentTree(): void {\n // Component tree is now sent from AmplifyRenderer component\n // based on the layoutTree from pageConfig, not from DOM scanning\n // This method is deprecated but kept for backwards compatibility\n console.log('[AmplifyUp SDK] sendComponentTree called but component tree is now sent from AmplifyRenderer');\n }\n\n /**\n * Apply component highlights\n */\n private applyComponentHighlights(\n highlightComponents = true,\n showZones = true\n ): void {\n if (typeof document === 'undefined') return;\n \n // Only apply highlights in visual editor mode\n if (!this.isVisualEditorMode) {\n return;\n }\n\n const doc = document;\n const win = window;\n\n if (highlightComponents) {\n const componentElements = doc.querySelectorAll(\n '[data-amplifyup-component], [data-component-id], [data-amplifyup-node], [data-node-id]'\n );\n console.log('[AmplifyUp SDK] Found', componentElements.length, 'components to highlight');\n\n componentElements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n const componentId = htmlEl.getAttribute('data-amplifyup-component') || htmlEl.getAttribute('data-component-id');\n const isLayoutNode =\n htmlEl.hasAttribute('data-node-id') || htmlEl.hasAttribute('data-amplifyup-node');\n if (!componentId && !isLayoutNode) return;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n\n const component = componentId\n ? this.componentRegistry.find(c => c.component_id === componentId)\n : undefined;\n htmlEl.classList.add('amplifyup-component-highlight');\n if (componentId) {\n htmlEl.setAttribute('data-component-id', componentId);\n htmlEl.setAttribute('data-component-name', component?.component_name || componentId);\n }\n\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy);\n if (componentId && window.parent && window.parent !== window) {\n window.parent.postMessage({ type: 'CHECK_COMPONENT_DELETABLE', componentId }, '*');\n }\n };\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupHandlers = { handleClick };\n });\n\n this.componentRegistry.forEach((component) => {\n if (!component.data_attribute) return;\n const elements = doc.querySelectorAll(`[${component.data_attribute}]`);\n elements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n htmlEl.classList.add('amplifyup-component-highlight');\n htmlEl.setAttribute('data-component-id', component.component_id);\n htmlEl.setAttribute('data-component-name', component.component_name);\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy);\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: 'CHECK_COMPONENT_DELETABLE', componentId: component.component_id }, '*');\n }\n };\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupHandlers = { handleClick };\n });\n });\n }\n\n if (showZones) {\n const slotElements = doc.querySelectorAll('[data-amplifyup-slot], [data-slot-id]');\n console.log('[AmplifyUp SDK] Found', slotElements.length, 'slots to highlight');\n\n slotElements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n const slotName =\n htmlEl.getAttribute('data-amplifyup-slot') ||\n htmlEl.getAttribute('data-slot-id');\n const isEmpty = htmlEl.getAttribute('data-slot-empty') === 'true';\n if (!slotName) return;\n if (htmlEl.classList.contains('amplifyup-slot-highlight')) return;\n\n htmlEl.classList.add('amplifyup-slot-highlight');\n const hierarchy = this.buildComponentHierarchy(htmlEl);\n\n const handleClick = (e: MouseEvent) => {\n const clickTarget = e.target as HTMLElement | null;\n if (\n htmlEl.getAttribute('data-slot-source') === 'page' &&\n clickTarget?.closest\n ) {\n const nested = clickTarget.closest(\n '[data-node-id], [data-amplifyup-node], [data-amplifyup-component], [data-component-id]'\n );\n if (nested && nested !== htmlEl && htmlEl.contains(nested)) {\n return;\n }\n }\n e.stopPropagation();\n this.sendSelectionMessage(htmlEl, hierarchy, isEmpty);\n };\n\n // Document-level handlers own drag highlight/drop (per-slot listeners caused flicker).\n htmlEl.addEventListener('click', handleClick);\n (htmlEl as any)._amplifyupSlotHandlers = { handleClick };\n });\n }\n }\n\n /**\n * Cleanup: Remove message listener and observers\n */\n cleanup(): void {\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener);\n this.messageListener = null;\n }\n this.disableHighlighting();\n }\n}\n\n// Create singleton instance (persist across Fast Refresh / Turbopack HMR)\ndeclare global {\n interface Window {\n __AMPLIFYUP_SDK__?: AmplifyUpSDK;\n }\n}\n\nlet sdkInstance: AmplifyUpSDK | null = null;\n\nif (typeof window !== 'undefined' && window.__AMPLIFYUP_SDK__) {\n sdkInstance = window.__AMPLIFYUP_SDK__;\n}\n\n/**\n * Get or create the SDK instance\n */\nexport function getSDK(adapter?: CDPAdapter): AmplifyUpSDK {\n if (!sdkInstance) {\n sdkInstance = new AmplifyUpSDK(adapter);\n if (typeof window !== 'undefined') {\n window.__AMPLIFYUP_SDK__ = sdkInstance;\n }\n }\n sdkInstance.ensureWindowBridge();\n return sdkInstance;\n}\n\n/**\n * Initialize the SDK (convenience function)\n */\nexport async function init(config: AmplifyUpConfig): Promise<void> {\n const sdk = getSDK();\n await sdk.init(config);\n}\n\n// Export all public methods\nexport const page = (url: string, properties?: EventProperties) => getSDK().page(url, properties);\nexport const routeChange = (url?: string, properties?: EventProperties) =>\n getSDK().routeChange(url, properties);\nexport const track = (eventName: string, properties?: EventProperties) => getSDK().track(eventName, properties);\nexport const trackClick = (elementId: string, elementText: string, properties?: EventProperties) => \n getSDK().trackClick(elementId, elementText, properties);\nexport const trackFormSubmit = (formId: string, formData?: EventProperties) => \n getSDK().trackFormSubmit(formId, formData);\nexport const trackFormFieldInteraction = (fieldName: string, fieldValue?: string) => \n getSDK().trackFormFieldInteraction(fieldName, fieldValue);\nexport const trackContentView = (contentId: string, contentType: string, properties?: EventProperties) => \n getSDK().trackContentView(contentId, contentType, properties);\nexport const identify = (\n userIdOrIdentifiers: IdentifyInput,\n traits?: IdentifyTraits\n) => getSDK().identify(userIdOrIdentifiers, traits);\nexport const setProfileFields = (fields: ProfileFieldsInput) =>\n getSDK().setProfileFields(fields);\nexport const trackContentEngagement = (contentId: string, engagementType: 'view' | 'click' | 'dismiss') => \n getSDK().trackContentEngagement(contentId, engagementType);\nexport const reset = () => getSDK().reset();\nexport const getInstanceId = () => getSDK().getInstanceId();\nexport const getSessionId = () => getSDK().getSessionId();\nexport const getUserId = () => getSDK().getUserId();\nexport const getTrackingId = () => getSDK().getTrackingId();\nexport const getTarget = () => getSDK().getTarget();\nexport const getOrchestratorUrl = () => getSDK().getOrchestratorUrl();\nexport const buildLayoutProviderUrl = (route: string, preview?: boolean) => getSDK().buildLayoutProviderUrl(route, preview);\n// Deprecated alias for backwards compatibility\nexport const buildPageRenderUrl = (route: string, preview?: boolean) => getSDK().buildLayoutProviderUrl(route, preview);\nexport const fetchPageConfig = (route: string, preview?: boolean) => getSDK().fetchPageConfig(route, preview);\nexport const setupEventTracking = (config: EventTrackingConfigType[]) => getSDK().setupEventTracking(config);\nexport const cleanupEventTracking = () => getSDK().cleanupEventTracking();\nexport const refreshEventTracking = () => getSDK().refreshEventTracking();\nexport const setupComponentViewTracking = () => getSDK().setupComponentViewTracking();\nexport const getDiagnostics = () => getSDK().getDiagnostics();\nexport const getStatus = () => {\n const status = getSDK().getStatus();\n console.log(status);\n return getSDK().getDiagnostics();\n};\nexport const testTracking = () => getSDK().testTracking();\nexport const verifyAWSConnection = () => {\n const result = getSDK().verifyAWSConnection();\n console.log('AWS Connection Verification:', result.message);\n console.log('Full details:', result);\n return result;\n};\n\n// Export types\nexport type { \n AmplifyUpConfig, \n EventProperties, \n IdentifyTraits,\n IdentifyInput,\n ProfileFieldsInput,\n CDPAdapter,\n PageConfig,\n ZoneConfig,\n EventTrackingConfigType as EventTrackingConfig,\n AmplifyUpTarget,\n ContentSource,\n AmplifyContentMeta,\n};\n\nexport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n isAmplifyUpTarget,\n normalizeAmplifyUpTarget,\n} from './targets';\n\nexport { isComposerPreview, isPreviewRequest, isWorkingContentRequest } from './preview';\n\nexport { AMPLIFYUP_EDITOR_ROUTE, isAmplifyUpEditorRoute } from './reservedRoutes';\n\nexport {\n fetchContent,\n type FetchContentResult,\n type FetchContentOptions,\n} from './content/fetchContent';\n\nexport { fetchEdgeResolve, EdgeResolveError } from './edge/resolve';\nexport { mapResolvedToPageConfig } from './edge/mapResolvedToPageConfig';\nexport { normalizeRoute } from './edge/normalizeRoute';\nexport {\n selectVariants,\n fetchEdgeSelect,\n SelectVariantsError,\n type SelectVariantsOptions,\n type FetchEdgeSelectOptions,\n type SelectVariantsResult,\n} from './edge/select';\n\nexport {\n queryContent,\n fetchEdgeQuery,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type FetchEdgeQueryOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\n\n// Export default SDK instance\nexport default getSDK();\n\n// Export SDK class for advanced usage\nexport { AmplifyUpSDK };\n\n","'use client';\n\n/**\n * Hydration-safe Composer preview detection.\n *\n * `isComposerPreview()` is window-based, so it returns false on the server\n * and (potentially) true on the client. Branching render output on it\n * directly makes the client's first render disagree with the server HTML —\n * React error #418. This hook keeps the first client render identical to\n * the server (false unless the caller forces it via SSR-known search\n * params), then flips after mount so preview paints client-only.\n */\n\nimport { useEffect, useState } from 'react';\nimport { isComposerPreview } from './preview';\n\nexport function useComposerPreviewFlag(force = false): boolean {\n const [detected, setDetected] = useState(false);\n useEffect(() => {\n if (!force && isComposerPreview()) setDetected(true);\n }, [force]);\n return force || detected;\n}\n","/**\n * Per-field overlay store for Composer. Listeners are keyed by field name\n * so a patch re-renders only the bound component.\n */\n\nexport type ComposerFieldListener = () => void;\n\nexport class ComposerFieldStore {\n private values = new Map<string, unknown>();\n private listeners = new Map<string, Set<ComposerFieldListener>>();\n\n get(name: string): unknown {\n return this.values.has(name) ? this.values.get(name) : undefined;\n }\n\n set(name: string, value: unknown): void {\n if (!name) return;\n this.values.set(name, value);\n const set = this.listeners.get(name);\n if (!set) return;\n for (const fn of set) fn();\n }\n\n subscribe(name: string, fn: ComposerFieldListener): () => void {\n if (!name) return () => {};\n let set = this.listeners.get(name);\n if (!set) {\n set = new Set();\n this.listeners.set(name, set);\n }\n set.add(fn);\n return () => {\n set!.delete(fn);\n if (set!.size === 0) this.listeners.delete(name);\n };\n }\n\n keys(): string[] {\n return [...this.values.keys()];\n }\n\n delete(name: string): void {\n if (!name || !this.values.has(name)) return;\n this.values.delete(name);\n const set = this.listeners.get(name);\n if (!set) return;\n for (const fn of set) fn();\n }\n}\n","'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react';\nimport { ComposerFieldStore } from './composer-store';\nimport {\n collectFieldPatches,\n composerStoreKey,\n isFieldRef,\n type FieldRef,\n} from './field-envelope';\n\nconst ComposerStoreContext = createContext<ComposerFieldStore | null>(null);\nconst ComposerNodeContext = createContext<string | undefined>(undefined);\n\nfunction applyComposerPatch(\n store: ComposerFieldStore,\n name: string,\n value: unknown,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): void {\n store.set(composerStoreKey(name, ref, layoutNodeId), value);\n}\n\nexport function ComposerProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const existing = useContext(ComposerStoreContext);\n const storeRef = useRef<ComposerFieldStore | null>(null);\n if (!storeRef.current) storeRef.current = new ComposerFieldStore();\n const store = existing || storeRef.current;\n\n useEffect(() => {\n if (existing) return;\n const applyField = (\n fieldName: unknown,\n value: unknown,\n nodeId: unknown,\n ref: unknown\n ) => {\n if (!fieldName || typeof fieldName !== 'string') return;\n const fieldRef = isFieldRef(ref) ? ref : undefined;\n const layoutNodeId =\n typeof nodeId === 'string' && nodeId ? nodeId : undefined;\n applyComposerPatch(store, fieldName, value, fieldRef, layoutNodeId);\n };\n const applyProps = (nextProps: unknown, nodeId: unknown) => {\n if (!nextProps || typeof nextProps !== 'object' || Array.isArray(nextProps)) {\n return;\n }\n const layoutNodeId =\n typeof nodeId === 'string' && nodeId ? nodeId : undefined;\n for (const patch of collectFieldPatches(\n nextProps as Record<string, unknown>\n )) {\n applyComposerPatch(\n store,\n patch.name,\n patch.value,\n patch.ref,\n patch.ref ? undefined : layoutNodeId\n );\n }\n };\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyField(\n detail.fieldName,\n detail.value,\n detail.layoutNodeId,\n detail.ref\n );\n };\n const onPropsPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyProps(detail.props, detail.layoutNodeId);\n };\n const onMessage = (event: MessageEvent) => {\n if (event.data?.type === 'AMPLIFYUP_PROPS_PATCH') {\n applyProps(event.data.props, event.data.layoutNodeId);\n return;\n }\n if (event.data?.type !== 'AMPLIFYUP_FIELD_PATCH') return;\n applyField(\n event.data.fieldName,\n event.data.value,\n event.data.layoutNodeId,\n event.data.ref\n );\n };\n window.addEventListener('amplifyup:field-patch', onPatch);\n window.addEventListener('amplifyup:props-patch', onPropsPatch);\n window.addEventListener('message', onMessage);\n return () => {\n window.removeEventListener('amplifyup:field-patch', onPatch);\n window.removeEventListener('amplifyup:props-patch', onPropsPatch);\n window.removeEventListener('message', onMessage);\n };\n }, [existing, store]);\n\n if (existing) return <>{children}</>;\n return (\n <ComposerStoreContext.Provider value={store}>\n {children}\n </ComposerStoreContext.Provider>\n );\n}\n\n/** Overlay for one field. No-ops when ComposerProvider is absent. */\nexport function useComposerFieldValue(\n name: string,\n fallback: unknown,\n ref?: FieldRef | null\n): unknown {\n const store = useContext(ComposerStoreContext);\n const layoutNodeId = useContext(ComposerNodeContext);\n const key = composerStoreKey(name, ref, layoutNodeId);\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n if (!store || !name) return () => {};\n return store.subscribe(key, onStoreChange);\n },\n [store, name, key]\n );\n const getSnapshot = useCallback(() => {\n if (!store || !name) return undefined;\n return store.get(key);\n }, [store, name, key]);\n const overlay = useSyncExternalStore(subscribe, getSnapshot, () => undefined);\n return overlay !== undefined ? overlay : fallback;\n}\n\nexport function useComposerStore(): ComposerFieldStore | null {\n return useContext(ComposerStoreContext);\n}\n\nexport function MaybeComposerProvider({\n enabled,\n layoutNodeId,\n children,\n}: {\n enabled: boolean;\n layoutNodeId?: string;\n children: ReactNode;\n}) {\n const content = useMemo(() => children, [children]);\n if (!enabled) return <>{content}</>;\n return (\n <ComposerProvider>\n <ComposerNodeContext.Provider value={layoutNodeId}>\n {children}\n </ComposerNodeContext.Provider>\n </ComposerProvider>\n );\n}\n","/**\n * AmplifyRenderer Component\n * \n * Main rendering component that handles page configuration fetching,\n * tree rendering, zone variants, and all rendering logic.\n * \n * Supports both server-side rendering (SSR/SSG) and client-side rendering.\n * - If `pageConfig` prop is provided, it can be used in server components\n * - If not provided, it uses the `useAmplifyUp()` hook (requires AmplifyUpProvider)\n * \n * Note: This is a client component (uses hooks for variant fetching).\n * However, it can be used in server components - the parent page can fetch\n * pageConfig server-side and pass it as a prop for better SSR/SSG support.\n */\n\n'use client';\n\nimport { Component, Fragment, memo, useEffect, useState, ReactNode } from 'react';\nimport { useAmplifyUp } from './react';\nimport { trackContentView, getSDK, refreshEventTracking } from './index';\nimport { useComposerPreviewFlag } from './use-composer-preview';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport {\n brandFields,\n isBrandedFields,\n type LayoutComponentProps,\n} from './field-envelope';\nimport { ComposerProvider, MaybeComposerProvider } from './composer-provider';\nimport { sdkDebug, sdkDebugOnce } from './debug';\nimport type { PageConfig } from './types';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, any>;\n /** Composer config fields (show search, etc.) — merge under props for render. */\n settings?: Record<string, any>;\n slots?: LayoutSlot[];\n /** Set by Edge mapper — skip client Decision API when present. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction nodeRenderProps(node: LayoutNode): LayoutComponentProps {\n const settings = node.settings || {};\n const hydrated = hydratePageResourceProps(\n node.props || {},\n getPageResourceFields()\n );\n const fields = hydrated.fields;\n const branded = isBrandedFields(fields)\n ? fields\n : brandFields(\n fields && typeof fields === 'object'\n ? (fields as Record<string, unknown>)\n : {}\n );\n return {\n ...settings,\n ...hydrated,\n fields: branded,\n };\n}\n\ninterface LayoutSlot {\n slotId: string;\n children: LayoutNode[];\n zoneId?: string;\n variants?: SlotVariant[];\n campaignId?: string;\n}\n\ninterface SlotVariant {\n variantId: string;\n name: string;\n isDefault: boolean;\n children: LayoutNode[];\n}\n\n/** Isolates one layout node so a crashing site component cannot blank the page. */\nclass ComponentRenderBoundary extends Component<\n { componentId: string; nodeId: string; children: ReactNode },\n { error: Error | null }\n> {\n state: { error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error) {\n console.error(\n `[AmplifyRenderer] \"${this.props.componentId}\" (${this.props.nodeId}) threw while rendering:`,\n error\n );\n }\n\n render() {\n if (this.state.error) {\n if (process.env.NODE_ENV !== 'production') {\n return (\n <div\n data-amplifyup-render-error=\"\"\n data-component-id={this.props.componentId}\n data-node-id={this.props.nodeId}\n style={{\n margin: '1rem 0',\n padding: '0.75rem 1rem',\n border: '1px solid #fca5a5',\n borderRadius: '0.5rem',\n background: '#fef2f2',\n color: '#991b1b',\n fontSize: '0.875rem',\n }}\n >\n Component &quot;{this.props.componentId}&quot; failed to render:{' '}\n {this.state.error.message}\n </div>\n );\n }\n return null;\n }\n return this.props.children;\n }\n}\n\nfunction NodeWithFields({\n nodeId,\n componentId,\n props,\n slots,\n renderComponent,\n composerPreview,\n}: {\n nodeId: string;\n componentId: string;\n props: LayoutComponentProps;\n slots?: Record<string, ReactNode>;\n renderComponent: AmplifyRendererProps['renderComponent'];\n composerPreview?: boolean;\n}) {\n return (\n <MaybeComposerProvider enabled={!!composerPreview} layoutNodeId={nodeId}>\n {renderComponent(componentId, props, slots, {\n layoutNodeId: nodeId,\n })}\n </MaybeComposerProvider>\n );\n}\n\ninterface AmplifyRendererProps {\n /**\n * Component renderer function that maps componentId to React component\n * This is site-specific and must be provided by the developer\n */\n renderComponent: (\n componentId: string,\n props: LayoutComponentProps,\n slots?: Record<string, ReactNode>,\n context?: { layoutNodeId: string }\n ) => ReactNode;\n \n /**\n * Optional page config for server-side rendering (SSR/SSG)\n * If provided, the component will use this instead of fetching client-side\n */\n pageConfig?: PageConfig;\n \n /**\n * Optional loading component\n */\n loadingComponent?: ReactNode;\n \n /**\n * Optional error component\n */\n errorComponent?: (error: string) => ReactNode;\n \n /**\n * Optional empty state component (when no content is configured)\n */\n emptyComponent?: ReactNode;\n\n /**\n * Force Composer page-slot wrapper (avoids SSR miss when window isn't available yet).\n * When true, root components stay under [data-slot-source=\"page\"] so hierarchy can climb to Page.\n */\n composerPreview?: boolean;\n}\n\nfunction AmplifyRendererInner({\n renderComponent,\n pageConfig: serverPageConfig,\n loadingComponent,\n errorComponent,\n emptyComponent,\n composerPreview,\n}: AmplifyRendererProps) {\n // Always call the hook (required by React rules)\n // If serverPageConfig is provided, we'll use that instead\n const clientHook = useAmplifyUp();\n // Hydration-safe: first client render matches server output.\n const composerPreviewFlag = useComposerPreviewFlag(!!composerPreview);\n \n // Prefer server-provided config if available, otherwise use client hook\n const pageConfig = serverPageConfig || clientHook.pageConfig || null;\n const loading = serverPageConfig ? false : clientHook.loading;\n const error = serverPageConfig ? null : clientHook.error;\n const contentSource = clientHook.source;\n \n const [variantCache, setVariantCache] = useState<Record<string, { variantId: string; children: LayoutNode[] }>>({});\n\n // Track content view when page config is loaded (only if not in preview mode)\n useEffect(() => {\n // CRITICAL: Check if we're in preview/composer mode - exit immediately\n if (typeof window !== 'undefined') {\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Don't track in preview mode\n }\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Don't track in preview mode\n }\n if (window.self !== window.top) {\n return; // Don't track in iframe (preview mode)\n }\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('preview') === 'true' || urlParams.get('visualEditor') === 'true') {\n return; // Don't track in preview mode\n }\n if (window.location.href.includes('preview=true') || window.location.href.includes('visualEditor=true')) {\n return; // Don't track in preview mode\n }\n }\n\n if (pageConfig && pageConfig.id !== 'default') {\n trackContentView(pageConfig.id, 'page', {\n route: pageConfig.route,\n title: pageConfig.title,\n });\n }\n }, [pageConfig]);\n\n // Wire Composer event_configs when config arrives via SSR (provider fetch already sets up)\n useEffect(() => {\n if (!pageConfig?.eventTracking?.length) return;\n const sdk = getSDK();\n if (!sdk.isInitialized()) return;\n sdk.setupEventTracking(pageConfig.eventTracking);\n const t1 = window.setTimeout(() => {\n sdk.setupComponentViewTracking();\n refreshEventTracking();\n }, 200);\n const t2 = window.setTimeout(() => {\n sdk.setupComponentViewTracking();\n refreshEventTracking();\n }, 1000);\n return () => {\n window.clearTimeout(t1);\n window.clearTimeout(t2);\n };\n }, [pageConfig?.id, pageConfig?.eventTracking]);\n\n // Re-attach after personalization variants settle (DOM may have changed)\n useEffect(() => {\n if (!pageConfig) return;\n const t = window.setTimeout(() => {\n getSDK().setupComponentViewTracking();\n refreshEventTracking();\n }, 100);\n return () => window.clearTimeout(t);\n }, [variantCache, pageConfig?.id]);\n\n // Send component tree to orchestrator when page config is loaded\n useEffect(() => {\n // Check if we're in visual editor mode before sending component tree\n const isVisualEditorMode = () => {\n if (typeof window === 'undefined') return false;\n \n // Check for query parameter\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('visualEditor') === 'true' || urlParams.get('preview') === 'true') {\n return true;\n }\n \n // Check if we're in an iframe\n const inIframe = window.self !== window.top;\n if (!inIframe) return false;\n \n // Check if parent is orchestrator\n try {\n if (document.referrer) {\n const referrerUrl = new URL(document.referrer);\n if (referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') {\n return true;\n }\n }\n } catch (e) {\n // Can't determine, assume not in editor\n }\n \n return false;\n };\n\n // Only send component tree if in visual editor mode\n if (!isVisualEditorMode()) {\n return;\n }\n\n if (!pageConfig) {\n return;\n }\n\n const rawTree = pageConfig.layoutTree;\n const normalizedTree: LayoutNode[] = Array.isArray(rawTree)\n ? rawTree\n : rawTree && typeof rawTree === 'object' && (rawTree as LayoutNode).componentId\n ? [rawTree as LayoutNode]\n : [];\n\n if (normalizedTree.length === 0) {\n // Send empty tree if no layout\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n window.parent.postMessage({\n type: 'COMPONENT_TREE',\n tree: [],\n }, '*');\n }\n return;\n }\n\n // Convert layoutTree to component tree format\n const convertLayoutTreeToComponentTree = (nodes: LayoutNode[], parentId: string | null = null): any[] => {\n const result: any[] = [];\n \n nodes.forEach((node) => {\n if (!node) return;\n const treeNode = {\n id: node.id,\n componentId: node.componentId,\n componentName: node.componentId, // Will be enhanced with actual name if available\n parentId: parentId,\n children: [] as any[],\n };\n\n // Process slots and their children\n if (node.slots && node.slots.length > 0) {\n node.slots.forEach((slot) => {\n // Process direct children in slot\n const kids = Array.isArray(slot?.children) ? slot.children : [];\n if (kids.length > 0) {\n const slotChildren = convertLayoutTreeToComponentTree(kids, node.id);\n treeNode.children.push(...slotChildren);\n }\n });\n }\n\n result.push(treeNode);\n });\n\n return result;\n };\n\n const layoutTree = normalizedTree;\n const componentTree = convertLayoutTreeToComponentTree(layoutTree);\n\n // Log layoutTree structure so you can confirm slots and nested children (e.g. main -> Grid5050 -> two slots)\n const describeLayoutTree = (nodes: LayoutNode[], depth = 0): string => {\n if (!nodes?.length) return '';\n const indent = ' '.repeat(depth);\n return nodes.map((n) => {\n const slotsDesc = (n.slots || []).map((s: any) => {\n const childCount = Array.isArray(s.children) ? s.children.length : 0;\n const childrenDesc = childCount > 0 ? describeLayoutTree(s.children || [], depth + 1) : '';\n return `${indent} slot \"${s.slotId || s.slotName || '?'}\" (${childCount} children)${childrenDesc ? '\\n' + childrenDesc : ''}`;\n }).join('\\n');\n return `${indent}- ${n.id} (${n.componentId || '?'})${slotsDesc ? '\\n' + slotsDesc : ''}`;\n }).join('\\n');\n };\n sdkDebugOnce(\n `layoutTree:${pageConfig?.id || ''}:${pageConfig?.route || ''}`,\n '[AmplifyRenderer] layoutTree received:\\n%s',\n describeLayoutTree(layoutTree)\n );\n\n // Send to orchestrator\n if (typeof window !== 'undefined' && window.parent && window.parent !== window) {\n const message = {\n type: 'COMPONENT_TREE',\n tree: componentTree,\n };\n window.parent.postMessage(message, '*');\n sdkDebug(\n '[AmplifyRenderer] Sent component tree from layoutTree:',\n componentTree.length,\n 'root components'\n );\n }\n }, [pageConfig]);\n\n // Fetch variants for zoned slots (orchestrator / legacy trees only).\n // Edge resolve already selected variants — never re-personalize.\n useEffect(() => {\n if (!pageConfig?.layoutTree || !pageConfig.layoutId) return;\n\n const roots = pageConfig.layoutTree as LayoutNode[];\n const fromEdge =\n contentSource === 'edge' ||\n roots.some((n) => n._contentSource === 'edge');\n if (fromEdge) return;\n\n const sdk = getSDK();\n const instanceId = sdk.getInstanceId();\n const decisionApiUrl = sdk.getDecisionApiUrl();\n const orchestratorUrl = sdk.getOrchestratorUrl();\n // Need either Decision API (Pure AWS) or Orchestrator (legacy) for personalization\n if ((!decisionApiUrl && !orchestratorUrl) || !instanceId) return;\n\n const fetchVariants = async () => {\n const nodes = pageConfig.layoutTree as LayoutNode[];\n const newCache: Record<string, { variantId: string; children: LayoutNode[] }> = {};\n\n const findZonedSlots = (nodeList: LayoutNode[]): Array<{ node: LayoutNode; slot: LayoutSlot; key: string }> => {\n const results: Array<{ node: LayoutNode; slot: LayoutSlot; key: string }> = [];\n \n for (const node of nodeList) {\n if (node.slots) {\n for (const slot of node.slots) {\n if (slot.zoneId && slot.variants) {\n const key = `${node.id}-${slot.slotId}`;\n results.push({ node, slot, key });\n }\n }\n }\n }\n \n return results;\n };\n\n const zonedSlots = findZonedSlots(nodes);\n\n // Fetch variants for all zoned slots\n await Promise.all(\n zonedSlots.map(async ({ node, slot, key }) => {\n try {\n // Prefer AWS Decision API if available (Pure AWS architecture)\n // Otherwise fall back to Orchestrator endpoint (legacy)\n let personalizationUrl: string;\n \n if (decisionApiUrl) {\n // Use AWS Decision API\n const url = new URL(decisionApiUrl);\n url.searchParams.set('instanceId', instanceId);\n const zoneId = slot.zoneId;\n if (zoneId) {\n url.searchParams.set('zoneId', zoneId);\n }\n const campaignId = slot.campaignId;\n if (campaignId) {\n url.searchParams.set('campaignId', campaignId);\n }\n personalizationUrl = url.toString();\n } else if (orchestratorUrl) {\n // Fallback to Orchestrator variant endpoint\n personalizationUrl = `${orchestratorUrl}/api/personalization/variant?` +\n `instanceId=${encodeURIComponent(instanceId)}&` +\n `layoutId=${encodeURIComponent(pageConfig.layoutId!)}&` +\n `slotId=${encodeURIComponent(slot.slotId)}&` +\n `nodeId=${encodeURIComponent(node.id)}`;\n } else {\n // No personalization service available - skip this slot\n return;\n }\n \n const response = await fetch(personalizationUrl);\n\n if (response.ok) {\n const data = await response.json();\n if (data.variantId && data.componentTree) {\n newCache[key] = {\n variantId: data.variantId,\n children: data.componentTree,\n };\n \n // Track zone impression (only if not in preview mode)\n // track() method already checks preview mode, but double-check here\n if (typeof window !== 'undefined') {\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) {\n return; // Don't track\n }\n if (window.location.pathname.includes('/api/pages/proxy')) {\n return; // Don't track\n }\n if (window.self !== window.top) {\n return; // Don't track in iframe\n }\n }\n sdk.track('Zone Impression', {\n zoneId: slot.zoneId,\n variantId: data.variantId,\n layoutId: pageConfig.layoutId,\n route: pageConfig.route,\n });\n } else {\n // Use default variant\n const defaultVariant = slot.variants?.find(v => v.isDefault);\n if (defaultVariant) {\n newCache[key] = {\n variantId: defaultVariant.variantId,\n children: defaultVariant.children,\n };\n }\n }\n }\n } catch (err) {\n console.error(`Error fetching variant for slot ${key}:`, err);\n // Fallback to default variant\n const defaultVariant = slot.variants?.find(v => v.isDefault);\n if (defaultVariant) {\n newCache[key] = {\n variantId: defaultVariant.variantId,\n children: defaultVariant.children,\n };\n }\n }\n })\n );\n\n setVariantCache(newCache);\n };\n\n fetchVariants();\n }, [pageConfig?.layoutTree, pageConfig?.layoutId, pageConfig?.route, contentSource]);\n\n // Render loading state\n if (loading) {\n return (\n <>\n {loadingComponent || (\n <div className=\"min-h-screen bg-gray-50\">\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"animate-pulse\">\n <div className=\"h-8 bg-gray-200 rounded w-1/4 mb-4\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-1/2 mb-8\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-64 bg-gray-200 rounded\"></div>\n <div className=\"h-32 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n }\n\n // Render error state\n if (error) {\n return (\n <>\n {errorComponent ? errorComponent(error) : (\n <div className=\"min-h-screen bg-gray-50\">\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-6\">\n <h1 className=\"text-2xl font-bold text-red-900 mb-2\">Error Loading Page</h1>\n <p className=\"text-red-700\">{error}</p>\n </div>\n </div>\n </div>\n )}\n </>\n );\n }\n\n // No page config\n if (!pageConfig) {\n return null;\n }\n\n // Determine if header/footer should be shown\n const showHeader = pageConfig.layout?.header !== false;\n const showFooter = pageConfig.layout?.footer !== false;\n\n // Render tree nodes recursively\n const renderNode = (node: LayoutNode): ReactNode => {\n const zoneIdFromProps =\n node.componentId === 'AmplifyZone'\n ? String(node.props?.zoneId || '')\n : '';\n\n // AmplifyZone is a system container — passthrough children (no Decision API yet)\n if (node.componentId === 'AmplifyZone') {\n const contentSlot =\n node.slots?.find((s) => s.slotId === 'content') || node.slots?.[0];\n const children = Array.isArray(contentSlot?.children)\n ? contentSlot!.children\n : [];\n return (\n <div\n data-node-id={node.id}\n data-amplifyup-node=\"\"\n data-amplifyup-component=\"AmplifyZone\"\n data-amplifyup-zone={zoneIdFromProps || undefined}\n data-zone-id={zoneIdFromProps || undefined}\n >\n <div\n data-slot-id=\"content\"\n data-amplifyup-slot=\"content\"\n data-parent-node-id={node.id}\n data-parent-component-id=\"AmplifyZone\"\n >\n {children.filter(Boolean).map((child) => (\n <Fragment key={child.id}>{renderNode(child)}</Fragment>\n ))}\n </div>\n </div>\n );\n }\n\n // If node has slots, prepare slot children\n let slotChildren: Record<string, ReactNode> = {};\n \n sdkDebugOnce(`node:${node.id}`, `[AmplifyRenderer] Rendering node ${node.id} (${node.componentId})`, {\n hasSlots: !!(node.slots && node.slots.length > 0),\n slotCount: node.slots?.length || 0,\n slots: node.slots?.map(s => ({ slotId: s.slotId, zoneId: s.zoneId, childrenCount: s.children?.length || 0 })),\n });\n \n if (node.slots && node.slots.length > 0) {\n for (const slot of node.slots) {\n const slotKey = `${node.id}-${slot.slotId}`;\n let childrenToRender: LayoutNode[] = [];\n\n // If slot is zoned, use variant children\n if (slot.zoneId && slot.variants && variantCache[slotKey]) {\n childrenToRender = variantCache[slotKey].children;\n } else if (slot.zoneId && slot.variants) {\n // Still loading variant, use default\n const defaultVariant = slot.variants.find(v => v.isDefault);\n childrenToRender = defaultVariant?.children || [];\n } else {\n // Not zoned, use direct children\n childrenToRender = Array.isArray(slot.children) ? slot.children : [];\n }\n\n const safeChildren = Array.isArray(childrenToRender) ? childrenToRender : [];\n\n // Render children for this slot (padding in preview/editing is applied by composer-injected CSS only)\n slotChildren[slot.slotId] = (\n <div\n key={slot.slotId}\n data-slot-id={slot.slotId}\n data-amplifyup-slot={slot.slotId}\n data-zone-id={slot.zoneId || undefined}\n data-parent-node-id={node.id}\n data-parent-component-id={node.componentId}\n >\n {safeChildren.filter(Boolean).map((child) => (\n <Fragment key={child.id}>{renderNode(child)}</Fragment>\n ))}\n </div>\n );\n }\n }\n\n const slotsToPass = Object.keys(slotChildren).length > 0 ? slotChildren : undefined;\n\n return (\n <div\n data-node-id={node.id}\n data-amplifyup-node=\"\"\n data-component-id={node.componentId}\n data-amplifyup-component={node.componentId}\n >\n <ComponentRenderBoundary\n componentId={node.componentId}\n nodeId={node.id}\n >\n <NodeWithFields\n nodeId={node.id}\n componentId={node.componentId}\n props={nodeRenderProps(node)}\n slots={slotsToPass}\n renderComponent={renderComponent}\n composerPreview={composerPreviewFlag}\n />\n </ComponentRenderBoundary>\n </div>\n );\n };\n\n // Render layout tree (must be an array — empty object/null from APIs must not crash)\n const rawTree = pageConfig.layoutTree;\n const layoutTree: LayoutNode[] = Array.isArray(rawTree)\n ? rawTree\n : rawTree && typeof rawTree === 'object' && (rawTree as LayoutNode).componentId\n ? [rawTree as LayoutNode]\n : [];\n \n if (layoutTree.length === 0) {\n return (\n <main>\n {emptyComponent || (\n <div className=\"container mx-auto px-4 py-16\">\n <p className=\"text-muted-foreground\">No content configured for this page.</p>\n </div>\n )}\n </main>\n );\n }\n\n return (\n <ComposerProvider>\n <main>\n {composerPreviewFlag ? (\n <div\n data-slot-id=\"main\"\n data-amplifyup-slot=\"main\"\n data-slot-source=\"page\"\n data-slot-empty={layoutTree.length === 0 ? 'true' : undefined}\n >\n {layoutTree.map((node) => (\n <Fragment key={node.id}>{renderNode(node)}</Fragment>\n ))}\n </div>\n ) : (\n layoutTree.map((node) => (\n <Fragment key={node.id}>{renderNode(node)}</Fragment>\n ))\n )}\n </main>\n </ComposerProvider>\n );\n}\n\nexport const AmplifyRenderer = memo(AmplifyRendererInner);\n\n","'use client';\n\nimport React from 'react';\n\n/** Inline SVG — no icon package required on customer sites. */\nfunction AddComponentIcon({ size = 28 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"3\"\n width=\"18\"\n height=\"18\"\n rx=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M12 8v8M8 12h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Centered empty-slot call-to-action shown in Composer when a slot (or the\n * page canvas) has no components yet.\n */\nexport function EmptySlotHint({\n label = 'Click here to Add Component',\n compact = false,\n}: {\n label?: string;\n /** Smaller treatment for nested / named slots. */\n compact?: boolean;\n}) {\n const iconSize = compact ? 20 : 28;\n return (\n <div\n className=\"amplifyup-slot-placeholder\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: compact ? 8 : 12,\n minHeight: compact ? 60 : undefined,\n width: '100%',\n pointerEvents: 'none',\n textAlign: 'center',\n boxSizing: 'border-box',\n padding: compact ? '12px 8px' : '24px 16px',\n }}\n >\n <span\n className=\"amplifyup-slot-placeholder-icon\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: compact ? 36 : 48,\n height: compact ? 36 : 48,\n borderRadius: 12,\n border: '1.5px dashed currentColor',\n opacity: 0.9,\n }}\n >\n <AddComponentIcon size={iconSize} />\n </span>\n <span\n className=\"amplifyup-slot-placeholder-label\"\n style={{\n fontSize: compact ? 13 : 15,\n fontWeight: 600,\n lineHeight: 1.3,\n letterSpacing: '0.01em',\n }}\n >\n {label}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport React, { ReactNode } from 'react';\nimport { AmplifyRenderer } from './AmplifyRenderer';\nimport { useAmplifyUp } from './react';\nimport { useComposerPreviewFlag } from './use-composer-preview';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport type { PageConfig } from './types';\nimport type { LayoutComponentProps } from './field-envelope';\nimport { previewLayoutReady } from './content/layoutProviderCache';\n\ntype RenderComponentContext = {\n /** Unique layout-tree node id — required when multiple instances share a component type. */\n layoutNodeId: string;\n};\n\ntype RenderComponentFn = (\n componentId: string,\n props: LayoutComponentProps,\n slots?: Record<string, ReactNode>,\n context?: RenderComponentContext\n) => ReactNode;\n\nexport interface AmplifyPageContentProps {\n /**\n * Native page content shown to visitors when no AmplifyUp layout is configured.\n * Never rendered in Composer preview — only the layout canvas is shown there.\n */\n fallback?: ReactNode;\n /** Maps AmplifyUp component IDs to your React components. */\n renderComponent: RenderComponentFn;\n /** SSG/ISR layout from the server. Client overlay applies only when variants differ. */\n pageConfig?: PageConfig | null;\n /**\n * Force Composer mode (e.g. from SSR `?preview=true`). Ensures the page slot\n * wrapper exists even before client-side preview detection runs.\n */\n forceComposerPreview?: boolean;\n /** Shown while layout loads in Composer (default: empty main canvas). */\n previewLoadingComponent?: ReactNode;\n /** Shown when no layout components exist yet in Composer (default: empty main canvas). */\n previewEmptyComponent?: ReactNode;\n loadingComponent?: ReactNode;\n emptyComponent?: ReactNode;\n errorComponent?: (error: string) => ReactNode;\n}\n\nfunction defaultPreviewCanvas() {\n // AmplifyRenderer wraps emptyComponent in <main> — slot div only here.\n // Inline styles ensure the drop zone is visible without Tailwind on customer sites.\n return (\n <div\n data-slot-id=\"main\"\n data-amplifyup-slot=\"main\"\n data-slot-source=\"page\"\n data-slot-empty=\"true\"\n style={{ minHeight: '50vh', width: '100%', display: 'block', position: 'relative' }}\n >\n <EmptySlotHint />\n </div>\n );\n}\n\nfunction hasAmplifyLayout(pageConfig: PageConfig | null | undefined): boolean {\n return !!(\n pageConfig &&\n pageConfig.id !== 'default' &&\n Array.isArray(pageConfig.layoutTree) &&\n pageConfig.layoutTree.length > 0\n );\n}\n\nfunction normalizeRoutePath(route?: string | null): string {\n if (!route) return '';\n const path = route.split('?')[0] || '/';\n if (path.length > 1 && path.endsWith('/')) return path.replace(/\\/+$/, '');\n return path || '/';\n}\n\nfunction samePageRoute(\n a?: PageConfig | null,\n b?: PageConfig | null\n): boolean {\n const ar = normalizeRoutePath(a?.route);\n const br = normalizeRoutePath(b?.route);\n return !!ar && !!br && ar === br;\n}\n\nfunction layoutTreesEqual(\n a?: PageConfig | null,\n b?: PageConfig | null\n): boolean {\n if (!a || !b) return a === b;\n return JSON.stringify(a.layoutTree) === JSON.stringify(b.layoutTree);\n}\n\n/**\n * Hybrid page wrapper: Composer shows only the AmplifyUp layout canvas;\n * normal visits show the configured layout or your native `fallback`.\n *\n * Live pages paint the SSG/ISR layout first. Client Edge resolve (visitor id)\n * overlays only when the personalized tree differs from that static HTML.\n */\nexport function AmplifyPageContent({\n fallback,\n renderComponent,\n pageConfig: pageConfigProp,\n forceComposerPreview = false,\n previewLoadingComponent,\n previewEmptyComponent,\n loadingComponent,\n emptyComponent,\n errorComponent,\n}: AmplifyPageContentProps) {\n const client = useAmplifyUp();\n // Hydration-safe: first client render matches server HTML; auto-detected\n // preview flips after mount, so preview layout paints client-only.\n const preview = useComposerPreviewFlag(forceComposerPreview);\n\n const clientLayout = hasAmplifyLayout(client.pageConfig)\n ? client.pageConfig\n : null;\n const serverLayout = hasAmplifyLayout(pageConfigProp) ? pageConfigProp : null;\n\n let pageConfig = serverLayout ?? clientLayout;\n if (preview && clientLayout) {\n pageConfig = clientLayout;\n } else if (\n clientLayout &&\n serverLayout &&\n samePageRoute(clientLayout, serverLayout) &&\n !layoutTreesEqual(clientLayout, serverLayout)\n ) {\n pageConfig = clientLayout;\n } else if (clientLayout && !serverLayout) {\n pageConfig = clientLayout;\n }\n const loading = !hasAmplifyLayout(pageConfig) && client.loading;\n const error = hasAmplifyLayout(pageConfig)\n ? null\n : pageConfigProp\n ? null\n : client.error;\n\n const previewCanvas = previewEmptyComponent ?? defaultPreviewCanvas();\n const previewLoading = previewLoadingComponent ?? previewCanvas;\n\n if (preview) {\n const ready = previewLayoutReady({\n clientLoading: client.loading,\n hasClientLayout: !!clientLayout,\n hasServerLayout: !!serverLayout,\n });\n return (\n <AmplifyRenderer\n pageConfig={ready ? pageConfig ?? undefined : undefined}\n renderComponent={renderComponent}\n composerPreview\n loadingComponent={loadingComponent ?? previewLoading}\n emptyComponent={emptyComponent ?? previewCanvas}\n errorComponent={errorComponent ?? (() => previewCanvas)}\n />\n );\n }\n\n if (loading) {\n return loadingComponent ? <>{loadingComponent}</> : null;\n }\n\n if (error) {\n if (errorComponent) return <>{errorComponent(error)}</>;\n return fallback ? <>{fallback}</> : null;\n }\n\n if (!hasAmplifyLayout(pageConfig)) {\n return fallback ? <>{fallback}</> : null;\n }\n\n return (\n <AmplifyRenderer\n pageConfig={pageConfig ?? undefined}\n renderComponent={renderComponent}\n loadingComponent={loadingComponent}\n emptyComponent={emptyComponent}\n errorComponent={errorComponent}\n />\n );\n}\n","import { isComposerPreview } from './preview';\n\nexport function isComposerEditMode(): boolean {\n if (typeof window === 'undefined') return false;\n return (\n isComposerPreview() &&\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ !== true\n );\n}\n\nexport function subscribeComposerEdit(onStoreChange: () => void): () => void {\n if (typeof window === 'undefined') return () => {};\n window.addEventListener('amplifyup:composer-edit', onStoreChange);\n return () =>\n window.removeEventListener('amplifyup:composer-edit', onStoreChange);\n}\n\n/** Server snapshot for `useSyncExternalStore`. Tests may mock this. */\nexport function getComposerEditModeServer(): boolean {\n return false;\n}\n","/**\n * SDK Components for Slot and Field rendering\n * \n * These components allow developers to explicitly define where slots and fields\n * are rendered in their components, with full control over styling and structure.\n */\n\n'use client';\n\nimport React, {\n createContext,\n useContext,\n ReactNode,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { marked } from 'marked';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport { sdkDebugOnce } from './debug';\nimport {\n FIELDS_BRAND,\n isBrandedFields,\n isFieldEnvelope,\n isReadOnlyRowField,\n resolveEditableBinding,\n type Field as FieldEnvelope,\n type FieldRef,\n} from './field-envelope';\nimport { useComposerFieldValue } from './composer-provider';\nimport {\n getComposerEditModeServer,\n isComposerEditMode,\n subscribeComposerEdit,\n} from './composer-edit-mode';\n\n// Context for component-level slots and props\ninterface ComponentContextType {\n slots?: Record<string, ReactNode>;\n props?: Record<string, any>;\n /** Unique layout-tree node id for this instance (disambiguates duplicate component types). */\n layoutNodeId?: string;\n componentId?: string;\n}\n\nconst ComponentContext = createContext<ComponentContextType | null>(null);\n\nexport function ComponentContextProvider({\n children,\n slots,\n props,\n layoutNodeId,\n componentId,\n}: {\n children: ReactNode;\n slots?: Record<string, ReactNode>;\n props?: Record<string, any>;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const next = hydratePageResourceProps(props || {}, getPageResourceFields());\n return (\n <ComponentContext.Provider\n value={{ slots, props: next, layoutNodeId, componentId }}\n >\n {children}\n </ComponentContext.Provider>\n );\n}\n\n/**\n * Slot Component\n * \n * Renders content for a specific slot by name. Developers use this to define\n * where slot content should appear in their component, with full control\n * over styling, padding, and structure.\n * \n * @example\n * ```tsx\n * function Grid5050({ heading }) {\n * return (\n * <section>\n * <h2>{heading}</h2>\n * <div className=\"grid grid-cols-2 gap-6\">\n * <div className=\"p-4\">\n * <Slot name=\"left\" />\n * </div>\n * <div className=\"p-4\">\n * <Slot name=\"right\" />\n * </div>\n * </div>\n * </section>\n * );\n * }\n * ```\n */\nexport function Slot({\n name,\n className,\n}: {\n name: string;\n className?: string;\n}) {\n const context = useContext(ComponentContext);\n\n if (!context) {\n console.warn(`[AmplifyUp SDK] Slot \"${name}\" used outside ComponentContextProvider`);\n return null;\n }\n\n const slotContent = context.slots?.[name];\n const isEmpty = !slotContent;\n\n // Detect if we're in visual editor mode (composer/preview)\n const isEditorMode = typeof window !== 'undefined' && (\n // Check for preview mode flag set by proxy\n (window as any).__AMPLIFYUP_PREVIEW_MODE__ === true ||\n // Check URL query params\n new URLSearchParams(window.location.search).get('preview') === 'true' ||\n new URLSearchParams(window.location.search).get('visualEditor') === 'true' ||\n // Check if in iframe from orchestrator (check referrer hostname/port)\n (window.self !== window.top && document.referrer && (() => {\n try {\n const referrerUrl = new URL(document.referrer);\n // Check for localhost:5001 or any orchestrator domain\n return (referrerUrl.hostname === 'localhost' && referrerUrl.port === '5001') ||\n referrerUrl.pathname.includes('/dashboard/composer') ||\n referrerUrl.pathname.includes('/dashboard/routes/');\n } catch {\n return false;\n }\n })())\n );\n\n sdkDebugOnce(\n `slot:${context.layoutNodeId || ''}:${name}`,\n `[Slot:${name}]`,\n {\n isEmpty,\n isEditorMode,\n availableSlotKeys: context.slots ? Object.keys(context.slots) : [],\n }\n );\n\n return (\n <div \n className={className} \n data-slot-name={name}\n data-slot-id={name}\n data-amplifyup-slot={name}\n data-slot-empty={isEmpty ? 'true' : undefined}\n data-parent-node-id={context.layoutNodeId || undefined}\n data-parent-component-id={context.componentId || undefined}\n style={{\n // Only add minimum height when empty (for drop target visibility)\n minHeight: isEmpty ? '60px' : undefined,\n // Only add position relative for overlay positioning in editor mode\n position: isEditorMode ? 'relative' : undefined,\n }}\n >\n {isEmpty ? (\n isEditorMode ? (\n <EmptySlotHint compact />\n ) : (\n <div\n className=\"amplifyup-slot-placeholder\"\n style={{\n minHeight: '60px',\n color: '#9ca3af',\n fontSize: '14px',\n pointerEvents: 'none',\n }}\n >\n {`Empty slot: ${name}`}\n </div>\n )\n ) : (\n <>\n {isEditorMode && (\n <div\n className=\"amplifyup-slot-label\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '4px',\n fontSize: '10px',\n color: '#9ca3af',\n pointerEvents: 'none',\n zIndex: 1,\n }}\n >\n Slot: {name}\n </div>\n )}\n {slotContent}\n </>\n )}\n </div>\n );\n}\n\nfunction isLikelyNonTextFieldName(name: string): boolean {\n const n = name.toLowerCase();\n return (\n n.includes('href') ||\n n.includes('url') ||\n n.includes('src') ||\n n.includes('image') ||\n n.includes('icon') ||\n n.includes('overlay') ||\n n.includes('color')\n );\n}\n\n/** Composer-only hint for empty Field / RichText. Never stored as content. */\nconst COMPOSER_EMPTY_FIELD_HINT = 'Click here to edit this field';\n\nconst EMPTY_FIELD_PLACEHOLDERS = new Set([\n COMPOSER_EMPTY_FIELD_HINT,\n 'Click here to enter text',\n 'Sample Title',\n 'Sample Heading',\n 'Sample Subheading',\n]);\n\nfunction isComposerEmptyText(value: unknown): boolean {\n if (value === undefined || value === null) return true;\n if (typeof value !== 'string') return false;\n const trimmed = value.trim();\n return trimmed === '' || EMPTY_FIELD_PLACEHOLDERS.has(trimmed);\n}\n\nfunction canInlineEdit(name: string, value: unknown): boolean {\n if (!name || isLikelyNonTextFieldName(name)) return false;\n if (value !== undefined && value !== null && typeof value === 'object') {\n return false;\n }\n if (typeof value === 'boolean') return false;\n return true;\n}\n\nfunction canInlineEditRichText(name: string, value: unknown): boolean {\n if (!name || isLikelyNonTextFieldName(name)) return false;\n if (typeof value === 'boolean') return false;\n if (\n value !== undefined &&\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value)\n ) {\n return false;\n }\n return true;\n}\n\nfunction useComposerEditMode(): boolean {\n return useSyncExternalStore(\n subscribeComposerEdit,\n isComposerEditMode,\n getComposerEditModeServer\n );\n}\n\nfunction useBoundField(\n field: FieldEnvelope<unknown> | undefined,\n value: unknown,\n name: string | undefined,\n component: string\n): { editName: string; fieldValue: unknown; ref?: FieldRef } {\n const bound = resolveEditableBinding(field, value, name);\n if (bound.requiresName) {\n console.warn(\n `[AmplifyUp SDK] ${component} value={…} requires name=\"…\" for computed values`\n );\n }\n const fieldValue = useComposerFieldValue(bound.name, bound.value, bound.ref);\n return { editName: bound.name, fieldValue, ref: bound.ref };\n}\n\nfunction commitComposerField(\n layoutNodeId: string | undefined,\n componentId: string | undefined,\n name: string,\n value: unknown,\n ref?: FieldRef\n): void {\n if (typeof window === 'undefined' || window.parent === window) return;\n window.parent.postMessage(\n {\n type: 'AMPLIFYUP_FIELD_COMMIT',\n layoutNodeId,\n componentId,\n fieldName: name,\n value,\n ...(ref ? { ref } : {}),\n },\n '*'\n );\n}\n\nfunction looksLikeRichCanvasField(name?: string): boolean {\n const tokens = String(name || '')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .split(/[._\\-\\s/]+/)\n .map((s) => s.toLowerCase())\n .filter(Boolean);\n const last = tokens[tokens.length - 1] || '';\n return (\n last === 'body' ||\n last === 'content' ||\n last === 'copy' ||\n last === 'excerpt' ||\n last === 'markdown' ||\n last === 'richtext'\n );\n}\n\nlet lastRichTextRequestAt = 0;\n\nfunction requestCanvasRichTextEdit(opts: {\n el: HTMLElement;\n layoutNodeId?: string;\n componentId?: string;\n name: string;\n value: string;\n fieldRef?: FieldRef;\n}): void {\n if (typeof window === 'undefined' || window.parent === window) return;\n if (!opts.name) return;\n const now = Date.now();\n if (now - lastRichTextRequestAt < 400) return;\n lastRichTextRequestAt = now;\n const rect = opts.el.getBoundingClientRect();\n window.parent.postMessage(\n {\n type: 'AMPLIFYUP_RICHTEXT_EDIT',\n layoutNodeId: opts.layoutNodeId,\n componentId: opts.componentId,\n fieldName: opts.name,\n value: opts.value,\n ...(opts.fieldRef ? { ref: opts.fieldRef } : {}),\n bounds: {\n top: rect.top,\n left: rect.left,\n width: Math.max(rect.width, 240),\n height: Math.max(rect.height, 64),\n },\n },\n '*'\n );\n}\n\nfunction placeCaret(el: HTMLElement, atStart = false): void {\n const range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(atStart);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n}\n\nfunction ComposerInlineField({\n name,\n value,\n className,\n layoutNodeId,\n componentId,\n fieldRef,\n rich = false,\n}: {\n name: string;\n value: unknown;\n className?: string;\n layoutNodeId?: string;\n componentId?: string;\n fieldRef?: FieldRef;\n rich?: boolean;\n}) {\n const [focused, setFocused] = useState(false);\n const elRef = useRef<HTMLSpanElement>(null);\n const storedEmpty = isComposerEmptyText(value);\n const text = storedEmpty ? '' : formatFieldValue(value);\n const hint = COMPOSER_EMPTY_FIELD_HINT;\n const idleDisplay = storedEmpty ? hint : text;\n const showHint = storedEmpty && !focused;\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (document.activeElement === el) return;\n // Never wipe search bars, buttons, or other chrome inside this node.\n if (\n el.querySelector(\n 'input, button, select, textarea, form, svg, iframe, img'\n )\n ) {\n return;\n }\n const next = idleDisplay || '';\n if (el.textContent !== next) el.textContent = next;\n }, [idleDisplay]);\n\n const finishEdit = () => {\n const raw = (elRef.current?.innerText ?? '')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\n+$/g, '');\n const next = raw.trim() === '' ? '' : raw;\n setFocused(false);\n if (storedEmpty && next === '') {\n if (elRef.current) elRef.current.textContent = hint;\n if (\n typeof value === 'string' &&\n EMPTY_FIELD_PLACEHOLDERS.has(value.trim())\n ) {\n commitComposerField(layoutNodeId, componentId, name, '', fieldRef);\n }\n return;\n }\n if (next === text) return;\n commitComposerField(layoutNodeId, componentId, name, next, fieldRef);\n };\n\n const openRichEditor = (event?: React.SyntheticEvent) => {\n if (!isComposerEditMode() || !elRef.current) return;\n event?.preventDefault();\n event?.stopPropagation();\n const source =\n typeof value === 'string' && !storedEmpty ? value : text || '';\n requestCanvasRichTextEdit({\n el: elRef.current,\n layoutNodeId,\n componentId,\n name,\n value: source,\n fieldRef,\n });\n };\n\n return (\n <span\n ref={elRef}\n className={className}\n data-amplifyup-field={name}\n data-amplifyup-field-type={rich ? 'richtext' : 'text'}\n data-amplifyup-node-id={layoutNodeId || undefined}\n data-amplifyup-ref-provider={fieldRef?.providerId || undefined}\n data-amplifyup-ref-entity={fieldRef?.entity || undefined}\n data-amplifyup-ref-id={fieldRef?.id || undefined}\n data-amplifyup-empty-hint={showHint ? 'true' : undefined}\n contentEditable={!rich}\n suppressContentEditableWarning\n role=\"textbox\"\n tabIndex={0}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n onClick={(event) => {\n if (!isComposerEditMode()) return;\n const link = (event.target as HTMLElement | null)?.closest?.('a');\n if (link) event.preventDefault();\n if (rich) {\n openRichEditor(event);\n return;\n }\n }}\n onFocus={() => {\n if (!isComposerEditMode()) return;\n if (rich) {\n openRichEditor();\n return;\n }\n setFocused(true);\n const el = elRef.current;\n if (el && storedEmpty) {\n el.textContent = '';\n placeCaret(el, true);\n }\n }}\n onBlur={rich ? undefined : finishEdit}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n (event.currentTarget as HTMLElement).blur();\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n if (elRef.current) elRef.current.textContent = idleDisplay || '';\n setFocused(false);\n (event.currentTarget as HTMLElement).blur();\n }\n }}\n style={{\n cursor: 'text',\n outline: '1px dashed color-mix(in srgb, currentColor 40%, transparent)',\n outlineOffset: '2px',\n minWidth: '1ch',\n minHeight: '1em',\n // Do not force `inline` — that overrides Tailwind `block` and parks\n // an empty-field hint on the same line as a sibling that has a value.\n opacity: showHint ? 0.5 : undefined,\n }}\n />\n );\n}\n\nfunction ComposerInlineHtml({\n name,\n html,\n sourceValue,\n className,\n Tag = 'div',\n layoutNodeId,\n componentId,\n fieldRef,\n}: {\n name: string;\n html: string;\n sourceValue: string;\n className?: string;\n Tag?: keyof JSX.IntrinsicElements;\n layoutNodeId?: string;\n componentId?: string;\n fieldRef?: FieldRef;\n}) {\n const elRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (el.innerHTML !== html) el.innerHTML = html;\n }, [html]);\n\n const openRichEditor = (event: React.SyntheticEvent) => {\n if (!elRef.current) return;\n event.preventDefault();\n event.stopPropagation();\n requestCanvasRichTextEdit({\n el: elRef.current,\n layoutNodeId,\n componentId,\n name,\n value: sourceValue,\n fieldRef,\n });\n };\n\n return React.createElement(Tag, {\n ref: elRef,\n className,\n 'data-amplifyup-field': name,\n 'data-amplifyup-field-type': 'richtext',\n 'data-amplifyup-node-id': layoutNodeId || undefined,\n 'data-amplifyup-ref-provider': fieldRef?.providerId || undefined,\n 'data-amplifyup-ref-entity': fieldRef?.entity || undefined,\n 'data-amplifyup-ref-id': fieldRef?.id || undefined,\n dangerouslySetInnerHTML: { __html: html },\n onMouseDown: (event: React.MouseEvent) => {\n event.stopPropagation();\n },\n onClick: openRichEditor,\n style: {\n cursor: 'text',\n outline: '1px dashed color-mix(in srgb, currentColor 40%, transparent)',\n outlineOffset: '2px',\n },\n });\n}\n\n/**\n * Format a field value for default text rendering.\n * Avoids \"[object Object]\" for structured values; prefer RichText for markdown.\n */\nfunction formatFieldValue(value: unknown): string {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return String(value);\n }\n if (Array.isArray(value)) {\n // Portable text / block arrays — extract plain text when possible\n const parts = value\n .map((item) => {\n if (typeof item === 'string') return item;\n if (\n item &&\n typeof item === 'object' &&\n 'children' in item &&\n Array.isArray((item as { children?: unknown }).children)\n ) {\n return (\n item as { children: Array<{ text?: string }> }\n ).children\n .map((c) => (typeof c?.text === 'string' ? c.text : ''))\n .join('');\n }\n return '';\n })\n .filter(Boolean);\n if (parts.length > 0) return parts.join(' ');\n }\n if (value && typeof value === 'object') {\n return '';\n }\n return '';\n}\n\ntype RejectFieldInput<T> = [T] extends [readonly unknown[]]\n ? never\n : T extends { readonly [FIELDS_BRAND]: true }\n ? never\n : T;\n\nconst FIELD_SCALAR_HINT =\n 'Field expects a scalar field. Did you mean <Field field={post.title} />?';\n\nfunction warnNotScalarField(\n component: 'Field' | 'RichText' | 'Image',\n field: unknown,\n fieldValue: unknown\n): boolean {\n if (process.env.NODE_ENV === 'production') return false;\n if (isBrandedFields(field)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n if (isFieldEnvelope(field) && Array.isArray(field.value)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n if (Array.isArray(fieldValue)) {\n console.error(`[AmplifyUp SDK] ${component}: ${FIELD_SCALAR_HINT}`);\n return true;\n }\n return false;\n}\n\n/**\n * Dev-mode contract: every envelope-shaped object reaching a component must\n * carry its field `name`. A `{ value }` without `name` means some producer\n * manufactured a partial envelope (double-enveloping, a store echoing a\n * partial envelope, a bad patch). Fail loudly so the producer is found —\n * do not recover; recovery hides the next instance.\n */\nfunction assertNamedEnvelope(\n component: 'Field' | 'RichText' | 'Image',\n field: unknown\n): void {\n if (process.env.NODE_ENV === 'production') return;\n if (!field || typeof field !== 'object' || Array.isArray(field)) return;\n const rec = field as { value?: unknown; name?: unknown };\n if (!('value' in rec)) return;\n if (typeof rec.name === 'string' && rec.name) return;\n throw new Error(\n `[AmplifyUp SDK] ${component} received an envelope-shaped object with a \\`value\\` but no \\`name\\` — a partial envelope was manufactured upstream (keys: ${Object.keys(\n rec\n ).join(', ')}). Find the producer; do not strip or rebuild envelopes.`\n );\n}\n\nconst warnedReadOnlyFields = new Set<string>();\n\nfunction warnReadOnlyRowField(name: string): void {\n if (process.env.NODE_ENV === 'production') return;\n const key = name || '(unnamed)';\n if (warnedReadOnlyFields.has(key)) return;\n warnedReadOnlyFields.add(key);\n console.warn(\n `[AmplifyUp SDK] ${key} has no write target; rendered read-only.`\n );\n}\n\nfunction canComposerBind(\n field: unknown,\n ref: FieldRef | undefined,\n editName: string\n): boolean {\n if (isReadOnlyRowField(field) || (isFieldEnvelope(field) && field.readOnly)) {\n warnReadOnlyRowField(editName || (isFieldEnvelope(field) ? field.name : ''));\n return false;\n }\n return true;\n}\n\nfunction warnProjectionProps(\n component: 'Field' | 'RichText' | 'Image',\n hasField: boolean,\n hasValue: boolean,\n name: string | undefined\n): void {\n if (process.env.NODE_ENV === 'production') return;\n if (!hasField && !hasValue && !name) {\n console.warn(\n `[AmplifyUp SDK] ${component} needs field={fields.yourProp} (or value + name for computed values)`\n );\n }\n}\n\nfunction hasOwnProp(props: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(props, key);\n}\n\n/**\n * Field Component\n *\n * Pass a field envelope: `<Field field={fields.title} />`.\n * For a computed value, pass `value` and `name`.\n *\n * For markdown / rich text fields, use {@link RichText} instead.\n * Do not pass a list or a list row — use `<Field field={post.title} />`.\n *\n * @example\n * ```tsx\n * function Hero({ fields }: { fields: Fields<{ title: string; description: string }> }) {\n * return (\n * <section className=\"hero\">\n * <h1>\n * <Field field={fields.title} />\n * </h1>\n * <p>{fields.description.value}</p>\n * </section>\n * );\n * }\n * ```\n */\nexport function Field<T = unknown>(props: {\n /** Envelope from `props.fields` (`{ value, name, ref? }`). Lists and rows are not allowed. */\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed value — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n className?: string;\n}) {\n const { field, value, name, className } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n const hasField = isFieldEnvelope(field);\n const hasValue = hasOwnProp(props, 'value');\n const { editName, fieldValue, ref } = useBoundField(field, value, name, 'Field');\n\n assertNamedEnvelope('Field', field);\n warnProjectionProps('Field', hasField, hasValue, name);\n if (warnNotScalarField('Field', field, fieldValue)) {\n return null;\n }\n\n if (!hasField && !hasValue && !name) {\n return null;\n }\n\n if (isBrandedFields(field) || Array.isArray(fieldValue)) {\n return null;\n }\n\n const empty = isComposerEmptyText(fieldValue);\n\n const bindComposer =\n composerEdit &&\n editName &&\n context &&\n canInlineEdit(editName, fieldValue) &&\n canComposerBind(field, ref, editName);\n\n if (bindComposer) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n className={className}\n layoutNodeId={context.layoutNodeId}\n componentId={context.componentId}\n fieldRef={ref}\n rich={looksLikeRichCanvasField(editName)}\n />\n );\n }\n\n if (empty) return null;\n\n const text = formatFieldValue(fieldValue);\n if (!text) return null;\n\n return <span className={className}>{text}</span>;\n}\n\nfunction markdownToHtml(markdown: string): string {\n try {\n const result = marked.parse(markdown, { async: false });\n return typeof result === 'string' ? result : '';\n } catch {\n return markdown;\n }\n}\n\n/**\n * RichText - Renders a markdown (or HTML string) value as formatted HTML.\n *\n * Pass a field envelope: `<RichText field={fields.body} />`.\n * Values are Markdown for portability across CMS platforms.\n *\n * @example\n * ```tsx\n * function Article({ fields }: { fields: Fields<{ title: string; body: string }> }) {\n * return (\n * <article>\n * <h1><Field field={fields.title} /></h1>\n * <RichText field={fields.body} className=\"prose\" />\n * </article>\n * );\n * }\n * ```\n */\nexport function RichText<T = string | null>(props: {\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed markdown — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n className?: string;\n as?: keyof JSX.IntrinsicElements;\n /** String children are treated as the markdown value (same as `value`). */\n children?: ReactNode;\n}) {\n const {\n field,\n value,\n name,\n className,\n as: Tag = 'div',\n children,\n } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n\n const childrenValue =\n typeof children === 'string' || typeof children === 'number'\n ? String(children)\n : undefined;\n const hasField = isFieldEnvelope(field);\n const hasValueProp = hasOwnProp(props, 'value') || childrenValue !== undefined;\n const boundValue = hasOwnProp(props, 'value')\n ? value\n : childrenValue !== undefined\n ? childrenValue\n : value;\n const { editName, fieldValue, ref } = useBoundField(\n field,\n boundValue,\n name,\n 'RichText'\n );\n\n assertNamedEnvelope('RichText', field);\n if (!hasField && !hasValueProp && !name) {\n return null;\n }\n\n warnProjectionProps('RichText', hasField, hasValueProp, name);\n if (warnNotScalarField('RichText', field, fieldValue)) {\n return null;\n }\n\n const canEdit =\n !!context &&\n canInlineEditRichText(editName, fieldValue) &&\n canComposerBind(field, ref, editName);\n\n if (isComposerEmptyText(fieldValue)) {\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n className={className}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n fieldRef={ref}\n rich\n />\n );\n }\n return null;\n }\n\n let html = '';\n if (typeof fieldValue === 'string') {\n const trimmed = fieldValue.trim();\n // Already HTML from a CMS or legacy content — pass through\n if (trimmed.startsWith('<') && trimmed.includes('>')) {\n html = fieldValue;\n } else {\n html = markdownToHtml(fieldValue);\n }\n } else {\n const text = formatFieldValue(fieldValue);\n html = text ? markdownToHtml(text) : '';\n }\n\n if (!html) {\n return null;\n }\n\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineHtml\n name={editName}\n html={html}\n sourceValue={typeof fieldValue === 'string' ? fieldValue : html}\n className={className}\n Tag={Tag}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n fieldRef={ref}\n />\n );\n }\n\n return (\n <Tag className={className} dangerouslySetInnerHTML={{ __html: html }} />\n );\n}\n\nfunction isPortableImageValue(\n value: unknown\n): value is { url: string; alt?: string; width?: number; height?: number } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const url = (value as { url?: unknown }).url;\n return typeof url === 'string' && url.trim().length > 0;\n}\n\nfunction imageSrc(value: unknown): string {\n if (typeof value === 'string') return value.trim();\n if (isPortableImageValue(value)) return value.url.trim();\n return '';\n}\n\nfunction leafText(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\n/** Nested `Fields<{ url, alt }>` from a mis-enveloped image → one image field. */\nfunction coerceImageField(\n field: unknown,\n value: unknown,\n name: string | undefined\n): {\n field?: FieldEnvelope<unknown>;\n value?: unknown;\n name?: string;\n} {\n if (isFieldEnvelope(field)) return { field, value, name };\n if (!isBrandedFields(field) || !field || typeof field !== 'object') {\n return { field: undefined, value, name };\n }\n // No recovery for `{ value: … }` bags missing a name — assertNamedEnvelope\n // fails loudly in dev instead. Recovering here would hide the producer of\n // the next manufactured partial envelope.\n const bag = field as Record<string, unknown>;\n const urlField = bag.url;\n const urlName =\n isFieldEnvelope(urlField) && typeof urlField.name === 'string'\n ? urlField.name.replace(/\\.url$/, '')\n : '';\n const editName = urlName || name || '';\n if (!editName) return { field: undefined, value, name };\n const ref = isFieldEnvelope(urlField) ? urlField.ref : undefined;\n const width = leafText(bag.width);\n const height = leafText(bag.height);\n return {\n field: {\n value: {\n url: String(leafText(urlField) ?? ''),\n alt: leafText(bag.alt),\n ...(typeof width === 'number' ? { width } : {}),\n ...(typeof height === 'number' ? { height } : {}),\n },\n name: editName,\n ...(ref ? { ref } : {}),\n },\n value,\n name: editName,\n };\n}\n\n/**\n * Image — renders a provider-backed image value as `<img>`.\n *\n * Pass a field envelope: `<Image field={fields.backgroundImage} />`.\n * AmplifyUp does not host image files.\n *\n * @example\n * ```tsx\n * function Hero({ fields }: { fields: Fields<{ backgroundImage: ImageValue }> }) {\n * return (\n * <Image field={fields.backgroundImage} className=\"h-full w-full object-cover\" />\n * );\n * }\n * ```\n */\nexport function Image<T = unknown>(\n props: {\n field?: FieldEnvelope<RejectFieldInput<T>>;\n /** Computed image — requires `name`. */\n value?: RejectFieldInput<T>;\n /** Required with `value` for computed values. */\n name?: string;\n alt?: string;\n } & Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'name'>\n) {\n const {\n field,\n value,\n name,\n alt: altProp,\n className,\n width: widthProp,\n height: heightProp,\n ...imgProps\n } = props;\n const context = useContext(ComponentContext);\n assertNamedEnvelope('Image', field);\n const coerced = coerceImageField(field, value, name);\n const boundField = coerced.field;\n const hasField = isFieldEnvelope(boundField);\n const hasValue = hasOwnProp(props, 'value');\n const { editName, fieldValue, ref } = useBoundField(\n boundField,\n coerced.value,\n coerced.name,\n 'Image'\n );\n const composerEdit = useComposerEditMode();\n\n warnProjectionProps('Image', hasField || isBrandedFields(field), hasValue, coerced.name || name);\n if (!isBrandedFields(field) && warnNotScalarField('Image', boundField, fieldValue)) {\n return null;\n }\n\n if (!hasField && !hasValue && !name && !editName) {\n return null;\n }\n\n const src = imageSrc(fieldValue);\n const portable = isPortableImageValue(fieldValue) ? fieldValue : null;\n const alt = altProp ?? portable?.alt ?? '';\n const width = widthProp ?? portable?.width;\n const height = heightProp ?? portable?.height;\n\n const fieldAttrs =\n composerEdit &&\n editName &&\n canComposerBind(boundField, ref, editName)\n ? {\n 'data-amplifyup-field': editName,\n 'data-amplifyup-field-type': 'image' as const,\n 'data-amplifyup-node-id': context?.layoutNodeId || undefined,\n 'data-amplifyup-ref-provider': ref?.providerId || undefined,\n 'data-amplifyup-ref-entity': ref?.entity || undefined,\n 'data-amplifyup-ref-id': ref?.id || undefined,\n }\n : null;\n\n if (composerEdit && !editName && (hasField || hasValue)) {\n console.warn(\n '[AmplifyUp SDK] Image value={…} requires name=\"…\" for computed values'\n );\n }\n\n if (!src) {\n if (!composerEdit || !fieldAttrs) return null;\n return (\n <span\n {...fieldAttrs}\n className={className}\n role=\"img\"\n aria-label={alt || editName || 'Image'}\n style={{\n display: 'block',\n boxSizing: 'border-box',\n minWidth: width ? undefined : 120,\n minHeight: height ? undefined : 80,\n width: width || '100%',\n height: height || undefined,\n background: 'color-mix(in srgb, currentColor 8%, transparent)',\n cursor: 'pointer',\n }}\n />\n );\n }\n\n return (\n <img\n {...imgProps}\n {...fieldAttrs}\n src={src}\n alt={alt}\n className={className}\n width={width}\n height={height}\n style={{\n ...(typeof imgProps.style === 'object' && imgProps.style\n ? imgProps.style\n : {}),\n ...(composerEdit && fieldAttrs ? { cursor: 'pointer' } : null),\n }}\n />\n );\n}\n\n","/**\n * React Context Provider for AmplifyUp SDK\n *\n * Provides automatic page config fetching (Composer → orchestrator,\n * production → Edge) and makes SDK available throughout the app.\n */\n\n'use client';\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useRef,\n useState,\n ReactNode,\n} from 'react';\nimport { getSDK } from './index';\nimport { isComposerPreview } from './preview';\nimport { fetchContent, type AmplifyContentMeta } from './content/fetchContent';\nimport { envelopePageConfig } from './field-envelope';\nimport { selectVariants } from './edge/select';\nimport type { AmplifyUpConfig, ContentSource, PageConfig } from './types';\nimport { extractRouteParams } from './page-context';\n\n// Try to import Next.js usePathname, but work without it\nlet usePathname: (() => string) | null = null;\nif (typeof window !== 'undefined') {\n try {\n const nextNav = require('next/navigation');\n if (nextNav.usePathname) {\n usePathname = nextNav.usePathname;\n }\n } catch {\n // Not using Next.js\n }\n}\n\ninterface AmplifyUpContextType {\n pageConfig: PageConfig | null;\n loading: boolean;\n error: string | null;\n source: ContentSource | null;\n meta: AmplifyContentMeta | null;\n}\n\nconst AmplifyUpContext = createContext<AmplifyUpContextType | null>(null);\n\nfunction normalizeRoutePath(route?: string | null): string {\n if (!route) return '';\n const path = route.split('?')[0] || '/';\n if (path.length > 1 && path.endsWith('/')) return path.replace(/\\/+$/, '');\n return path || '/';\n}\n\ninterface AmplifyUpProviderProps {\n children: ReactNode;\n config: AmplifyUpConfig;\n /**\n * Required when this page uses Composer \"From page\" components.\n * Pass at provider/init so the first paint and first page view include fields.\n */\n pageContext?: import('./page-context').AmplifyPageContextInput;\n}\n\nexport function AmplifyUpProvider({\n children,\n config,\n pageContext,\n}: AmplifyUpProviderProps) {\n const [initialized, setInitialized] = useState(false);\n const [pageConfig, setPageConfig] = useState<PageConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [source, setSource] = useState<ContentSource | null>(null);\n const [meta, setMeta] = useState<AmplifyContentMeta | null>(null);\n\n const getActualRoute = (): string => {\n if (typeof window === 'undefined') return '';\n\n const currentPath = window.location.pathname;\n const currentSearch = window.location.search;\n\n const urlParams = new URLSearchParams(currentSearch);\n const routeFromQuery = urlParams.get('route');\n if (routeFromQuery) {\n return routeFromQuery;\n }\n\n const actualRoute = (window as any).__AMPLIFYUP_ACTUAL_ROUTE__;\n const inComposerShell =\n currentPath === '/api/pages/proxy' ||\n currentPath.startsWith('/api/pages/proxy') ||\n currentPath.includes('/preview-frame');\n if (actualRoute && typeof actualRoute === 'string' && inComposerShell) {\n return actualRoute;\n }\n\n return currentPath;\n };\n\n const loadedRouteRef = useRef<string | null>(null);\n const nextPathname = usePathname ? usePathname() : null;\n\n const [pathname, setPathname] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n return getActualRoute();\n }\n return '';\n });\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const actualRoute = getActualRoute();\n\n if (\n window.location.pathname === '/api/pages/proxy' ||\n window.location.pathname.startsWith('/api/pages/proxy')\n ) {\n setPathname(actualRoute);\n } else if (nextPathname) {\n setPathname(nextPathname);\n } else {\n setPathname(actualRoute);\n }\n\n const timeout = setTimeout(() => {\n if (\n window.location.pathname === '/api/pages/proxy' ||\n window.location.pathname.startsWith('/api/pages/proxy')\n ) {\n const newRoute = getActualRoute();\n setPathname(newRoute);\n }\n }, 200);\n\n const handleRouteChange = () => {\n setPathname(getActualRoute());\n };\n\n window.addEventListener('popstate', handleRouteChange);\n\n return () => {\n clearTimeout(timeout);\n window.removeEventListener('popstate', handleRouteChange);\n };\n }\n }, [nextPathname]);\n\n const pageContextKey = pageContext\n ? `${pageContext.resourceType}:${pageContext.key}`\n : '';\n\n useEffect(() => {\n if (!initialized || !pageContext) return;\n getSDK().setPageContext(pageContext);\n }, [initialized, pageContextKey]);\n\n useEffect(() => {\n let cancelled = false;\n const sdk = getSDK();\n\n const run = async () => {\n try {\n await sdk.init({\n ...config,\n ...(pageContext ? { pageContext } : {}),\n });\n if (cancelled) return;\n if (pageContext) sdk.setPageContext(pageContext);\n\n const actualRoute = getActualRoute();\n if (!actualRoute) {\n setInitialized(true);\n setLoading(false);\n return;\n }\n\n sdk.routeChange(actualRoute);\n\n const preview = isComposerPreview();\n const overlay = preview || config.clientPersonalization !== false;\n if (!overlay) {\n setInitialized(true);\n setPageConfig(null);\n setLoading(false);\n return;\n }\n\n // Drop a previous route's overlay so SSG/ISR HTML paints first.\n // Do not reset on the first load — that remounts the tree 3–4 times.\n if (loadedRouteRef.current && loadedRouteRef.current !== actualRoute) {\n setPageConfig(null);\n setError(null);\n }\n\n const edgeUrl = sdk.getEdgeUrl();\n const orchestratorUrl = sdk.getOrchestratorUrl();\n const trackingId = sdk.getTrackingId();\n\n if (!trackingId || !orchestratorUrl || !edgeUrl) {\n setInitialized(true);\n setError('SDK not initialized');\n setLoading(false);\n return;\n }\n\n let variantKeys: Record<string, string> | undefined;\n const anonId = sdk.getInstanceId();\n const sessionId = sdk.getSessionId();\n if (!preview && anonId) {\n try {\n const selected = await selectVariants({\n trackingId,\n view: actualRoute,\n anonId,\n sessionId: sessionId || undefined,\n site: sdk.getSiteId() || undefined,\n edgeUrl,\n });\n variantKeys = selected.variantKeys;\n } catch (err) {\n console.error('AmplifyUp selectVariants failed; overlay will use visitor id', err);\n }\n }\n\n const result = await fetchContent({\n route: actualRoute,\n trackingId,\n anonId: variantKeys ? undefined : anonId,\n sessionId: variantKeys ? undefined : sessionId || undefined,\n siteId: sdk.getSiteId() || null,\n preview,\n orchestratorUrl,\n edgeUrl,\n variantKeys,\n fetchOrchestratorPage: (route, isPreview) =>\n sdk.fetchPageConfig(route, isPreview),\n });\n\n if (cancelled) return;\n\n const nextConfig = result.pageConfig || {\n id: 'default',\n route: actualRoute,\n title: 'Page Not Configured',\n description: 'This page has not been published yet.',\n layoutTree: [],\n };\n\n // Populate the page-resource store BEFORE the layout state update so\n // From-page components (e.g. ArticleMeta) hydrate their fields in the\n // same commit as the rest of the tree — not a later one.\n if (result.pageConfig) {\n sdk.applyResolvedPageData(\n result.pageConfig.pageData || null,\n result.pageConfig.route,\n extractRouteParams(result.pageConfig.route, actualRoute)\n );\n }\n\n setInitialized(true);\n setSource((prev) => (prev === result.source ? prev : result.source));\n setMeta((prev) =>\n prev === result.meta ||\n JSON.stringify(prev) === JSON.stringify(result.meta)\n ? prev\n : result.meta\n );\n setError((prev) => (prev === result.error ? prev : result.error));\n setPageConfig((prev) => {\n if (\n prev &&\n prev.id === nextConfig.id &&\n normalizeRoutePath(prev.route) === normalizeRoutePath(nextConfig.route) &&\n JSON.stringify(prev.layoutTree) === JSON.stringify(nextConfig.layoutTree)\n ) {\n return prev;\n }\n return nextConfig;\n });\n loadedRouteRef.current = actualRoute;\n } catch (err) {\n if (cancelled) return;\n console.error('Error fetching page config:', err);\n setInitialized(true);\n setError(err instanceof Error ? err.message : 'Unknown error');\n setSource(null);\n setMeta(null);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [\n pathname,\n config.trackingId,\n config.target,\n config.debug,\n config.dev,\n config.siteId,\n config.clientPersonalization,\n pageContextKey,\n ]);\n\n useEffect(() => {\n const applyLayoutTree = (layoutTree: unknown) => {\n if (!Array.isArray(layoutTree)) return;\n setPageConfig((prev) => {\n const next = envelopePageConfig({\n ...(prev || {\n id: 'patched',\n route: getActualRoute(),\n title: '',\n layoutTree: [],\n }),\n layoutTree,\n });\n return next;\n });\n setLoading(false);\n };\n const onMessage = (event: MessageEvent) => {\n if (event.data?.type === 'AMPLIFYUP_LAYOUT_PATCH') {\n applyLayoutTree(event.data.layoutTree);\n }\n };\n const onCustom = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyLayoutTree(detail.layoutTree);\n };\n window.addEventListener('message', onMessage);\n window.addEventListener('amplifyup:layout-patch', onCustom);\n return () => {\n window.removeEventListener('message', onMessage);\n window.removeEventListener('amplifyup:layout-patch', onCustom);\n };\n }, []);\n\n return (\n <AmplifyUpContext.Provider\n value={{ pageConfig, loading, error, source, meta }}\n >\n {children}\n </AmplifyUpContext.Provider>\n );\n}\n\nexport function useAmplifyUp() {\n const context = useContext(AmplifyUpContext);\n if (!context) {\n throw new Error('useAmplifyUp must be used within AmplifyUpProvider');\n }\n return context;\n}\n\nexport type {\n PageConfig,\n ZoneConfig,\n ContentSource,\n AmplifyContentMeta,\n} from './types';\n\nexport { AmplifyRenderer } from './AmplifyRenderer';\nexport { AmplifyPageContent } from './AmplifyPageContent';\nexport {\n queryContent,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\nexport { isComposerPreview, isPreviewRequest, isWorkingContentRequest } from './preview';\nexport {\n selectVariants,\n SelectVariantsError,\n type SelectVariantsOptions,\n type SelectVariantsResult,\n} from './edge/select';\nexport {\n Slot,\n Field,\n Image,\n RichText,\n ComponentContextProvider,\n} from './components';\nexport { ComposerProvider, MaybeComposerProvider } from './composer-provider';\nexport {\n toFieldEnvelopes,\n attachFieldEnvelopes,\n envelopeListRows,\n composerStoreKey,\n listOwnerFromSpec,\n isFieldEnvelope,\n isReadOnlyRowField,\n isBrandedFields,\n type Field as FieldEnvelope,\n type FieldRef,\n type Fields,\n type ListRow,\n type ImageValue,\n type PortableRef,\n type LayoutComponentProps,\n} from './field-envelope';\n"]}