@amplifyup/sdk 0.1.55 → 0.1.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/aws.ts","../src/storage.ts","../src/targets.ts","../src/preview.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/EmptySlotHint.tsx","../src/components.tsx","../src/AmplifyRenderer.tsx","../src/AmplifyPageContent.tsx","../src/react.tsx"],"names":["orchestratorUrl","jsxs","jsx","createContext","useState","useEffect","useContext","Fragment","useSyncExternalStore","useRef","React","marked","Component","rawTree","layoutTree","memo","normalizeRoutePath"],"mappings":"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","file":"react.js","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 * Runtime page-data context: validate SDK-supplied entity fields against\n * the published pageData contract and attach to events.\n */\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\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 for (const [key, val] of Object.entries(out)) {\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 { 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 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 body as EdgeResolvedPayload;\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';\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 = await options.fetchOrchestratorPage(options.route, true);\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 */\n\nimport { normalizeRoute } from './normalizeRoute';\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<T = Record<string, unknown>>(\n options: QueryContentOptions\n): Promise<QueryResult<T>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n return 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\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 { 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 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_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 = '[data-amplifyup-component], [data-component-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\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) {\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] {',\n ' cursor: pointer !important;',\n '}',\n '[data-amplifyup-component].amplifyup-selected, [data-component-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 ` 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 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\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 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('[data-amplifyup-component], [data-component-id]');\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 if (!componentId) return;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n\n const component = this.componentRegistry.find(c => c.component_id === componentId);\n htmlEl.classList.add('amplifyup-component-highlight');\n htmlEl.setAttribute('data-component-id', componentId);\n htmlEl.setAttribute('data-component-name', component?.component_name || componentId);\n\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 }, '*');\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 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\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","/**\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 { isComposerPreview } from './preview';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport { sdkDebugOnce } from './debug';\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 useLiveComposerProps(\n layoutNodeId: string | undefined,\n props: Record<string, any>\n): Record<string, any> {\n // Only Composer patch overrides live in state; base props are read directly\n // on each render. Never sync props into state via an effect — the props\n // object is rebuilt every render, so that effect re-committed forever and\n // the constant sync updates starved React transitions (Next.js App Router\n // navigation never committed: links looked completely dead on live sites).\n const [patch, setPatch] = useState<Record<string, any> | null>(null);\n\n useEffect(() => {\n setPatch(null);\n const matchesNode = (nodeId: unknown) => {\n if (\n nodeId &&\n layoutNodeId &&\n String(nodeId) !== String(layoutNodeId)\n ) {\n return false;\n }\n return true;\n };\n const applyField = (fieldName: unknown, value: unknown, nodeId: unknown) => {\n if (!fieldName || typeof fieldName !== 'string') return;\n if (!matchesNode(nodeId)) return;\n setPatch((prev) => ({ ...(prev || {}), [fieldName]: value }));\n };\n const applyProps = (nextProps: unknown, nodeId: unknown) => {\n if (!nextProps || typeof nextProps !== 'object' || Array.isArray(nextProps)) {\n return;\n }\n if (!matchesNode(nodeId)) return;\n // Merge so config/visual flags (search, CTAs) stay if a patch only\n // sends content fields.\n setPatch((prev) => ({\n ...(prev || {}),\n ...(nextProps as Record<string, any>),\n }));\n };\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyField(detail.fieldName, detail.value, detail.layoutNodeId);\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(event.data.fieldName, event.data.value, event.data.layoutNodeId);\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 }, [layoutNodeId]);\n\n return patch ? { ...props, ...patch } : props;\n}\n\n/**\n * Live props for this layout node (CMS fields + settings).\n * Same values `<Field>` reads — use this when you want to render yourself.\n */\nexport function useComponentProps<T extends Record<string, any> = Record<string, any>>(): T {\n const context = useContext(ComponentContext);\n if (!context) {\n console.warn(\n '[AmplifyUp SDK] useComponentProps used outside ComponentContextProvider'\n );\n return {} as T;\n }\n return (context.props || {}) as T;\n}\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 liveProps = useLiveComposerProps(\n layoutNodeId,\n hydratePageResourceProps(props || {}, getPageResourceFields())\n );\n\n return (\n <ComponentContext.Provider\n value={{ slots, props: liveProps, 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 isComposerEditMode(): boolean {\n if (typeof window === 'undefined') return false;\n return (\n isComposerPreview() &&\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ !== true\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\nfunction isPlainTextValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number';\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 isReactNodeFallback(fallback: ReactNode): boolean {\n if (fallback == null || fallback === false) return false;\n return !isPlainTextValue(fallback);\n}\n\n/** Tailwind `block` as its own class — not a match for `inline-block`. */\nfunction classNameIsBlock(className?: string): boolean {\n return /(?:^|\\s)block(?:\\s|$)/.test(className || '');\n}\n\nfunction htmlHasVisualChrome(html: string): boolean {\n return /<(input|button|select|textarea|form|svg|iframe|video|audio|img)\\b/i.test(\n html\n );\n}\n\nfunction canInlineEdit(name: string, value: unknown): boolean {\n if (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 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\nfunction useComposerEditMode(): boolean {\n return useSyncExternalStore(\n subscribeComposerEdit,\n isComposerEditMode,\n () => false\n );\n}\n\nfunction useFieldOverlay(\n layoutNodeId: string | undefined,\n name: string,\n source: unknown\n): unknown {\n const [overlay, setOverlay] = useState<unknown>(undefined);\n useEffect(() => {\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n if (detail.fieldName !== name) return;\n if (\n detail.layoutNodeId &&\n layoutNodeId &&\n String(detail.layoutNodeId) !== String(layoutNodeId)\n ) {\n return;\n }\n setOverlay(detail.value);\n };\n window.addEventListener('amplifyup:field-patch', onPatch);\n return () => window.removeEventListener('amplifyup:field-patch', onPatch);\n }, [layoutNodeId, name]);\n return overlay !== undefined ? overlay : source;\n}\n\nfunction commitComposerField(\n layoutNodeId: string | undefined,\n componentId: string | undefined,\n name: string,\n value: string\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 },\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 fallback,\n className,\n render,\n layoutNodeId,\n componentId,\n}: {\n name: string;\n value: unknown;\n fallback?: ReactNode;\n className?: string;\n render?: (value: any) => ReactNode;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const [editing, setEditing] = useState(false);\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 fallbackText =\n typeof fallback === 'string' || typeof fallback === 'number'\n ? String(fallback)\n : '';\n const hint = COMPOSER_EMPTY_FIELD_HINT;\n const idleDisplay = storedEmpty ? hint : text || fallbackText;\n const showRendered = !!render && !editing;\n const showHint = storedEmpty && !focused && !showRendered;\n\n useEffect(() => {\n const el = elRef.current;\n if (!el || showRendered) 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, showRendered]);\n\n useEffect(() => {\n if (!editing || !elRef.current) return;\n const el = elRef.current;\n if (storedEmpty) {\n el.textContent = '';\n el.focus();\n placeCaret(el, true);\n return;\n }\n el.textContent = idleDisplay || '';\n el.focus();\n placeCaret(el, false);\n }, [editing, storedEmpty, 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 setEditing(false);\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, '');\n }\n return;\n }\n if (next === text) return;\n if (!text && !storedEmpty && next === fallbackText) return;\n commitComposerField(layoutNodeId, componentId, name, next);\n };\n\n return (\n <span\n ref={elRef}\n className={className}\n data-amplifyup-field={name}\n data-amplifyup-node-id={layoutNodeId || undefined}\n data-amplifyup-empty-hint={showHint ? 'true' : undefined}\n contentEditable={!showRendered}\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 (render) {\n setEditing(true);\n }\n }}\n onFocus={() => {\n if (!isComposerEditMode()) return;\n setFocused(true);\n const el = elRef.current;\n if (el && storedEmpty) {\n el.textContent = '';\n placeCaret(el, true);\n }\n if (render) setEditing(true);\n }}\n onBlur={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 setEditing(false);\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 {showRendered\n ? value != null && value !== '' && !storedEmpty\n ? render!(value)\n : fallback ?? idleDisplay\n : isReactNodeFallback(fallback) && !idleDisplay\n ? fallback\n : null}\n </span>\n );\n}\n\nfunction ComposerInlineHtml({\n name,\n html,\n className,\n Tag = 'div',\n layoutNodeId,\n componentId,\n}: {\n name: string;\n html: string;\n className?: string;\n Tag?: keyof JSX.IntrinsicElements;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const elRef = useRef<HTMLElement | null>(null);\n const sourceTextRef = useRef('');\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (document.activeElement === el || el.contains(document.activeElement)) {\n return;\n }\n if (el.innerHTML !== html) el.innerHTML = html;\n sourceTextRef.current = (el.innerText ?? '').replace(/\\u00a0/g, ' ').trim();\n }, [html]);\n\n const finishEdit = () => {\n const el = elRef.current;\n if (!el) return;\n const next = (el.innerText ?? '')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\n+$/g, '');\n if (next.trim() === sourceTextRef.current) return;\n commitComposerField(layoutNodeId, componentId, name, next.trim());\n };\n\n return React.createElement(Tag, {\n ref: elRef,\n className,\n 'data-amplifyup-field': name,\n 'data-amplifyup-node-id': layoutNodeId || undefined,\n contentEditable: true,\n suppressContentEditableWarning: true,\n dangerouslySetInnerHTML: { __html: html },\n onMouseDown: (event: React.MouseEvent) => {\n event.stopPropagation();\n },\n onBlur: finishEdit,\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\nfunction warnProjectionProps(\n component: 'Field' | 'RichText' | 'Image',\n name: string | undefined,\n hasExplicitValue: boolean\n): void {\n if (process.env.NODE_ENV === 'production') return;\n if (hasExplicitValue && name) {\n console.warn(\n `[AmplifyUp SDK] ${component}: pass either value={…} or deprecated name=\"…\", not both. Prefer value={…} and omit name.`\n );\n return;\n }\n if (name) {\n console.warn(\n `[AmplifyUp SDK] ${component} \\`name\\` is deprecated and will be removed. Prefer value={${name}} from your component props and omit name.`\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 * Renders a plain-text (or custom-rendered) value from your component props.\n * Prefer `value={heading}` over looking up by string name.\n *\n * For markdown / rich text fields, use {@link RichText} instead.\n *\n * @example\n * ```tsx\n * function Hero({ title, description }: { title: string; description: string }) {\n * return (\n * <section className=\"hero\">\n * <h1>\n * <Field value={title} fallback=\"Default Title\" />\n * </h1>\n * <p>\n * <Field value={description} />\n * </p>\n * </section>\n * );\n * }\n * ```\n */\nfunction isLinkListItem(value: unknown): value is {\n label?: unknown;\n href?: unknown;\n openInNewTab?: unknown;\n style?: unknown;\n _key?: unknown;\n} {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction renderLinkList(items: unknown[], className?: string): ReactNode {\n const links = items.filter(isLinkListItem).filter((item) => {\n const label = typeof item.label === 'string' ? item.label.trim() : '';\n const href = typeof item.href === 'string' ? item.href.trim() : '';\n return !!(label || href);\n });\n if (links.length === 0) return null;\n return (\n <span className={className} style={{ display: 'contents' }}>\n {links.map((item, index) => {\n const label =\n typeof item.label === 'string' && item.label.trim()\n ? item.label\n : typeof item.href === 'string'\n ? item.href\n : 'Link';\n const href =\n typeof item.href === 'string' && item.href.trim()\n ? item.href\n : '#';\n const style =\n typeof item.style === 'string' ? item.style.trim() : '';\n return (\n <a\n key={\n typeof item._key === 'string' && item._key\n ? item._key\n : `${href}-${index}`\n }\n href={href}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noreferrer' : undefined}\n data-amplifyup-action-style={style || undefined}\n >\n {label}\n </a>\n );\n })}\n </span>\n );\n}\n\nexport function Field(props: {\n /** Field value from your component props. Do not also pass `name`. */\n value?: unknown;\n /**\n * @deprecated Will be removed. Use `value={…}` instead and omit `name`.\n * Do not pass `name` together with `value`.\n */\n name?: string;\n fallback?: ReactNode;\n className?: string;\n render?: (value: any) => ReactNode;\n}) {\n const { value, name, fallback, className, render } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n const hasExplicitValue = hasOwnProp(props, 'value');\n // Prefer value-first; ignore deprecated name when both are passed.\n const sourceValue = hasExplicitValue\n ? value\n : name\n ? context?.props?.[name]\n : undefined;\n const editName = hasExplicitValue ? '' : name || '';\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n editName,\n sourceValue\n );\n\n warnProjectionProps('Field', name, hasExplicitValue);\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] Field needs a `value` prop (or deprecated `name` alone)'\n );\n return fallback ? <>{fallback}</> : null;\n }\n\n // Custom render owns the output, including empty/null (e.g. nested Fields).\n if (render) {\n return (\n <span className={className} style={{ display: 'contents' }}>\n {render(fieldValue)}\n </span>\n );\n }\n\n if (Array.isArray(fieldValue)) {\n const list = renderLinkList(fieldValue, className);\n if (list) return list;\n }\n\n const text = formatFieldValue(fieldValue);\n const showVisualFallback =\n !text && isReactNodeFallback(fallback);\n const emptyBlockField =\n isComposerEmptyText(fieldValue) && classNameIsBlock(className);\n\n // Keep search bars, buttons, and other chrome mounted. Only swap in the\n // contenteditable span for plain text.\n // Empty block fields stay off the canvas (same as live): the hint string\n // was landing next to a sibling Field that already had copy.\n if (\n composerEdit &&\n editName &&\n context &&\n canInlineEdit(editName, fieldValue) &&\n !showVisualFallback &&\n !emptyBlockField\n ) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n fallback={fallback}\n className={className}\n layoutNodeId={context.layoutNodeId}\n componentId={context.componentId}\n />\n );\n }\n\n if (\n fieldValue === undefined ||\n fieldValue === null ||\n isComposerEmptyText(fieldValue)\n ) {\n return fallback ? <span className={className}>{fallback}</span> : null;\n }\n\n if (!text) {\n return fallback ? <span className={className}>{fallback}</span> : null;\n }\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 the field value from your component props (`value={body}`). Values are\n * Markdown for portability across CMS platforms.\n *\n * @example\n * ```tsx\n * function Article({ title, body }: { title: string; body: string }) {\n * return (\n * <article>\n * <h1><Field value={title} /></h1>\n * <RichText value={body} className=\"prose\" />\n * </article>\n * );\n * }\n * ```\n */\nexport function RichText(props: {\n /** Markdown (or HTML) string from your component props. Do not also pass `name`. */\n value?: string | null;\n /**\n * @deprecated Will be removed. Use `value={…}` (or string children) and omit `name`.\n * Do not pass `name` together with `value`.\n */\n name?: string;\n fallback?: ReactNode;\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 value,\n name,\n fallback,\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 hasValueProp = hasOwnProp(props, 'value');\n const hasExplicitValue = hasValueProp || childrenValue !== undefined;\n // Prefer value-first; ignore deprecated name when both are passed.\n const sourceValue = hasValueProp\n ? value\n : childrenValue !== undefined\n ? childrenValue\n : name\n ? context?.props?.[name]\n : undefined;\n\n const editName = hasExplicitValue ? '' : name || '';\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n editName,\n sourceValue\n );\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] RichText needs a `value` prop (or string children), or deprecated `name` alone'\n );\n return fallback ? <>{fallback}</> : null;\n }\n\n warnProjectionProps('RichText', name, hasExplicitValue);\n\n const canEdit =\n !!editName &&\n !!context &&\n canInlineEdit(editName, fieldValue);\n\n if (isComposerEmptyText(fieldValue)) {\n if (\n composerEdit &&\n canEdit &&\n !isReactNodeFallback(fallback) &&\n !classNameIsBlock(className)\n ) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n fallback={\n typeof fallback === 'string' || typeof fallback === 'number'\n ? fallback\n : undefined\n }\n className={className}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n />\n );\n }\n return fallback ? <Tag className={className}>{fallback}</Tag> : 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 fallback ? <Tag className={className}>{fallback}</Tag> : null;\n }\n\n // Keep rendered markup (search, buttons, images) as-is. A plaintext\n // contenteditable swap hid those elements when Composer edit turned on.\n if (composerEdit && htmlHasVisualChrome(html)) {\n return (\n <Tag\n className={className}\n data-amplifyup-field={editName || undefined}\n data-amplifyup-node-id={context?.layoutNodeId || undefined}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n }\n\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineHtml\n name={editName}\n html={html}\n className={className}\n Tag={Tag}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\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\n/**\n * Image — renders a provider-backed image value as `<img>`.\n *\n * Pass the portable `{ url, alt?, width?, height? }` (or URL string) from your\n * component props via `value`. AmplifyUp does not host image files.\n *\n * @example\n * ```tsx\n * function Hero({ backgroundImage }: { backgroundImage: { url: string } }) {\n * return (\n * <Image value={backgroundImage} className=\"h-full w-full object-cover\" />\n * );\n * }\n * ```\n */\nexport function Image(\n props: {\n /** Portable image or URL string from your component props. Do not also pass `name`. */\n value?: unknown;\n /**\n * @deprecated Will be removed. Use `value={…}` and omit `name`.\n * Do not pass `name` together with `value`.\n */\n name?: string;\n alt?: string;\n } & Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'name'>\n) {\n const {\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 hasExplicitValue = hasOwnProp(props, 'value');\n // Prefer value-first; ignore deprecated name when both are passed.\n const sourceValue = hasExplicitValue\n ? value\n : name\n ? context?.props?.[name]\n : undefined;\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n hasExplicitValue ? '' : name || '',\n sourceValue\n );\n\n warnProjectionProps('Image', name, hasExplicitValue);\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] Image needs a `value` prop (or deprecated `name` alone)'\n );\n return null;\n }\n\n const src = imageSrc(fieldValue);\n if (!src) return null;\n\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 return (\n <img\n {...imgProps}\n src={src}\n alt={alt}\n className={className}\n width={width}\n height={height}\n />\n );\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 { useLiveComposerProps } from './components';\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): Record<string, any> {\n return {\n ...(node.settings || {}),\n ...(node.props || {}),\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 LiveNodeRender({\n nodeId,\n componentId,\n props,\n slots,\n renderComponent,\n}: {\n nodeId: string;\n componentId: string;\n props: Record<string, any>;\n slots?: Record<string, ReactNode>;\n renderComponent: AmplifyRendererProps['renderComponent'];\n}) {\n const liveProps = useLiveComposerProps(nodeId, props);\n return (\n <>\n {renderComponent(componentId, liveProps, slots, {\n layoutNodeId: nodeId,\n })}\n </>\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: Record<string, any>,\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 data-node-id={node.id} data-amplifyup-node=\"\">\n <ComponentRenderBoundary\n componentId={node.componentId}\n nodeId={node.id}\n >\n <LiveNodeRender\n nodeId={node.id}\n componentId={node.componentId}\n props={nodeRenderProps(node)}\n slots={slotsToPass}\n renderComponent={renderComponent}\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 <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 <div key={node.id}>{renderNode(node)}</div>\n ))}\n </div>\n ) : (\n layoutTree.map((node) => (\n <div key={node.id}>{renderNode(node)}</div>\n ))\n )}\n </main>\n );\n}\n\nexport const AmplifyRenderer = memo(AmplifyRendererInner);\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';\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: Record<string, any>,\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","/**\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 { Slot, Field, Image, RichText, ComponentContextProvider, useLiveComposerProps, useComponentProps } from './components';\n"]}
1
+ {"version":3,"sources":["../src/adapters/aws.ts","../src/storage.ts","../src/targets.ts","../src/preview.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/EmptySlotHint.tsx","../src/components.tsx","../src/AmplifyRenderer.tsx","../src/AmplifyPageContent.tsx","../src/react.tsx"],"names":["orchestratorUrl","jsxs","jsx","createContext","useState","useEffect","useContext","Fragment","useSyncExternalStore","useRef","React","marked","Component","rawTree","layoutTree","memo","normalizeRoutePath"],"mappings":"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","file":"react.js","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 * Runtime page-data context: validate SDK-supplied entity fields against\n * the published pageData contract and attach to events.\n */\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\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 for (const [key, val] of Object.entries(out)) {\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 { 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 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 body as EdgeResolvedPayload;\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';\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 = await options.fetchOrchestratorPage(options.route, true);\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 */\n\nimport { normalizeRoute } from './normalizeRoute';\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<T = Record<string, unknown>>(\n options: QueryContentOptions\n): Promise<QueryResult<T>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n return 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\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 { 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 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_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 = '[data-amplifyup-component], [data-component-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\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) {\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] {',\n ' cursor: pointer !important;',\n '}',\n '[data-amplifyup-component].amplifyup-selected, [data-component-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 ` 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 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\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 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('[data-amplifyup-component], [data-component-id]');\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 if (!componentId) return;\n if (htmlEl.classList.contains('amplifyup-component-highlight')) return;\n\n const component = this.componentRegistry.find(c => c.component_id === componentId);\n htmlEl.classList.add('amplifyup-component-highlight');\n htmlEl.setAttribute('data-component-id', componentId);\n htmlEl.setAttribute('data-component-name', component?.component_name || componentId);\n\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 }, '*');\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 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\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","/**\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 { isComposerPreview } from './preview';\nimport { hydratePageResourceProps } from './page-context';\nimport { getPageResourceFields } from './page-resource-runtime';\nimport { EmptySlotHint } from './EmptySlotHint';\nimport { sdkDebugOnce } from './debug';\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 useLiveComposerProps(\n layoutNodeId: string | undefined,\n props: Record<string, any>\n): Record<string, any> {\n // Only Composer patch overrides live in state; base props are read directly\n // on each render. Never sync props into state via an effect — the props\n // object is rebuilt every render, so that effect re-committed forever and\n // the constant sync updates starved React transitions (Next.js App Router\n // navigation never committed: links looked completely dead on live sites).\n const [patch, setPatch] = useState<Record<string, any> | null>(null);\n\n useEffect(() => {\n setPatch(null);\n const matchesNode = (nodeId: unknown) => {\n if (\n nodeId &&\n layoutNodeId &&\n String(nodeId) !== String(layoutNodeId)\n ) {\n return false;\n }\n return true;\n };\n const applyField = (fieldName: unknown, value: unknown, nodeId: unknown) => {\n if (!fieldName || typeof fieldName !== 'string') return;\n if (!matchesNode(nodeId)) return;\n setPatch((prev) => ({ ...(prev || {}), [fieldName]: value }));\n };\n const applyProps = (nextProps: unknown, nodeId: unknown) => {\n if (!nextProps || typeof nextProps !== 'object' || Array.isArray(nextProps)) {\n return;\n }\n if (!matchesNode(nodeId)) return;\n // Merge so config/visual flags (search, CTAs) stay if a patch only\n // sends content fields.\n setPatch((prev) => ({\n ...(prev || {}),\n ...(nextProps as Record<string, any>),\n }));\n };\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n applyField(detail.fieldName, detail.value, detail.layoutNodeId);\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(event.data.fieldName, event.data.value, event.data.layoutNodeId);\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 }, [layoutNodeId]);\n\n return patch ? { ...props, ...patch } : props;\n}\n\n/**\n * Live props for this layout node (CMS fields + settings).\n * Same values `<Field>` reads — use this when you want to render yourself.\n */\nexport function useComponentProps<T extends Record<string, any> = Record<string, any>>(): T {\n const context = useContext(ComponentContext);\n if (!context) {\n console.warn(\n '[AmplifyUp SDK] useComponentProps used outside ComponentContextProvider'\n );\n return {} as T;\n }\n return (context.props || {}) as T;\n}\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 liveProps = useLiveComposerProps(\n layoutNodeId,\n hydratePageResourceProps(props || {}, getPageResourceFields())\n );\n\n return (\n <ComponentContext.Provider\n value={{ slots, props: liveProps, 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 isComposerEditMode(): boolean {\n if (typeof window === 'undefined') return false;\n return (\n isComposerPreview() &&\n (window as any).__AMPLIFYUP_EVENT_SELECTION__ !== true\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\nfunction isPlainTextValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number';\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 isReactNodeFallback(fallback: ReactNode): boolean {\n if (fallback == null || fallback === false) return false;\n return !isPlainTextValue(fallback);\n}\n\n/** Tailwind `block` as its own class — not a match for `inline-block`. */\nfunction classNameIsBlock(className?: string): boolean {\n return /(?:^|\\s)block(?:\\s|$)/.test(className || '');\n}\n\nfunction htmlHasVisualChrome(html: string): boolean {\n return /<(input|button|select|textarea|form|svg|iframe|video|audio|img)\\b/i.test(\n html\n );\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\n/**\n * Composer needs a field name to save. `value={title}` does not carry the\n * prop name, so match the value back to `context.props`. An explicit `name`\n * always wins. Empty values that appear on more than one prop cannot be inferred.\n */\nfunction inferEditName(\n explicitName: string | undefined,\n contextProps: Record<string, any> | undefined,\n sourceValue: unknown\n): string {\n if (explicitName) return explicitName;\n if (!contextProps) return '';\n const keys = Object.keys(contextProps).filter((key) =>\n Object.is(contextProps[key], sourceValue)\n );\n if (keys.length === 1) return keys[0];\n if (keys.length === 0 || isComposerEmptyText(sourceValue)) return '';\n return keys[0];\n}\n\nfunction 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\nfunction useComposerEditMode(): boolean {\n return useSyncExternalStore(\n subscribeComposerEdit,\n isComposerEditMode,\n () => false\n );\n}\n\nfunction useFieldOverlay(\n layoutNodeId: string | undefined,\n name: string,\n source: unknown\n): unknown {\n const [overlay, setOverlay] = useState<unknown>(undefined);\n useEffect(() => {\n const onPatch = (event: Event) => {\n const detail = (event as CustomEvent).detail || {};\n if (detail.fieldName !== name) return;\n if (\n detail.layoutNodeId &&\n layoutNodeId &&\n String(detail.layoutNodeId) !== String(layoutNodeId)\n ) {\n return;\n }\n setOverlay(detail.value);\n };\n window.addEventListener('amplifyup:field-patch', onPatch);\n return () => window.removeEventListener('amplifyup:field-patch', onPatch);\n }, [layoutNodeId, name]);\n return overlay !== undefined ? overlay : source;\n}\n\nfunction commitComposerField(\n layoutNodeId: string | undefined,\n componentId: string | undefined,\n name: string,\n value: string\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 },\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 fallback,\n className,\n render,\n layoutNodeId,\n componentId,\n}: {\n name: string;\n value: unknown;\n fallback?: ReactNode;\n className?: string;\n render?: (value: any) => ReactNode;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const [editing, setEditing] = useState(false);\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 fallbackText =\n typeof fallback === 'string' || typeof fallback === 'number'\n ? String(fallback)\n : '';\n const hint = COMPOSER_EMPTY_FIELD_HINT;\n const idleDisplay = storedEmpty ? hint : text || fallbackText;\n const showRendered = !!render && !editing;\n const showHint = storedEmpty && !focused && !showRendered;\n\n useEffect(() => {\n const el = elRef.current;\n if (!el || showRendered) 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, showRendered]);\n\n useEffect(() => {\n if (!editing || !elRef.current) return;\n const el = elRef.current;\n if (storedEmpty) {\n el.textContent = '';\n el.focus();\n placeCaret(el, true);\n return;\n }\n el.textContent = idleDisplay || '';\n el.focus();\n placeCaret(el, false);\n }, [editing, storedEmpty, 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 setEditing(false);\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, '');\n }\n return;\n }\n if (next === text) return;\n if (!text && !storedEmpty && next === fallbackText) return;\n commitComposerField(layoutNodeId, componentId, name, next);\n };\n\n return (\n <span\n ref={elRef}\n className={className}\n data-amplifyup-field={name}\n data-amplifyup-node-id={layoutNodeId || undefined}\n data-amplifyup-empty-hint={showHint ? 'true' : undefined}\n contentEditable={!showRendered}\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 (render) {\n setEditing(true);\n }\n }}\n onFocus={() => {\n if (!isComposerEditMode()) return;\n setFocused(true);\n const el = elRef.current;\n if (el && storedEmpty) {\n el.textContent = '';\n placeCaret(el, true);\n }\n if (render) setEditing(true);\n }}\n onBlur={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 setEditing(false);\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 {showRendered\n ? value != null && value !== '' && !storedEmpty\n ? render!(value)\n : fallback ?? idleDisplay\n : isReactNodeFallback(fallback) && !idleDisplay\n ? fallback\n : null}\n </span>\n );\n}\n\nfunction ComposerInlineHtml({\n name,\n html,\n className,\n Tag = 'div',\n layoutNodeId,\n componentId,\n}: {\n name: string;\n html: string;\n className?: string;\n Tag?: keyof JSX.IntrinsicElements;\n layoutNodeId?: string;\n componentId?: string;\n}) {\n const elRef = useRef<HTMLElement | null>(null);\n const sourceTextRef = useRef('');\n\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n if (document.activeElement === el || el.contains(document.activeElement)) {\n return;\n }\n if (el.innerHTML !== html) el.innerHTML = html;\n sourceTextRef.current = (el.innerText ?? '').replace(/\\u00a0/g, ' ').trim();\n }, [html]);\n\n const finishEdit = () => {\n const el = elRef.current;\n if (!el) return;\n const nextHtml = el.innerHTML;\n const nextText = (el.innerText ?? '')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\n+$/g, '')\n .trim();\n if (nextText === sourceTextRef.current && nextHtml === html) return;\n // Keep markup when the field already had HTML (images, lists, headings).\n const commitValue =\n htmlHasVisualChrome(html) || /<[a-z][\\s\\S]*>/i.test(html)\n ? nextHtml\n : nextText;\n commitComposerField(layoutNodeId, componentId, name, commitValue);\n };\n\n return React.createElement(Tag, {\n ref: elRef,\n className,\n 'data-amplifyup-field': name,\n 'data-amplifyup-node-id': layoutNodeId || undefined,\n contentEditable: true,\n suppressContentEditableWarning: true,\n dangerouslySetInnerHTML: { __html: html },\n onMouseDown: (event: React.MouseEvent) => {\n event.stopPropagation();\n },\n onBlur: finishEdit,\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\nfunction warnProjectionProps(\n component: 'Field' | 'RichText' | 'Image',\n name: string | undefined,\n hasExplicitValue: boolean\n): void {\n if (process.env.NODE_ENV === 'production') return;\n // `name` next to `value` is the Composer save key — not a warning.\n if (hasExplicitValue) return;\n if (name) {\n console.warn(\n `[AmplifyUp SDK] ${component} \\`name\\` is deprecated and will be removed. Prefer value={${name}} from your component props.`\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 * Renders a plain-text (or custom-rendered) value from your component props.\n * Prefer `value={heading}` over looking up by string name.\n *\n * For markdown / rich text fields, use {@link RichText} instead.\n *\n * @example\n * ```tsx\n * function Hero({ title, description }: { title: string; description: string }) {\n * return (\n * <section className=\"hero\">\n * <h1>\n * <Field value={title} fallback=\"Default Title\" />\n * </h1>\n * <p>\n * <Field value={description} />\n * </p>\n * </section>\n * );\n * }\n * ```\n */\nfunction isLinkListItem(value: unknown): value is {\n label?: unknown;\n href?: unknown;\n openInNewTab?: unknown;\n style?: unknown;\n _key?: unknown;\n} {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction renderLinkList(items: unknown[], className?: string): ReactNode {\n const links = items.filter(isLinkListItem).filter((item) => {\n const label = typeof item.label === 'string' ? item.label.trim() : '';\n const href = typeof item.href === 'string' ? item.href.trim() : '';\n return !!(label || href);\n });\n if (links.length === 0) return null;\n return (\n <span className={className} style={{ display: 'contents' }}>\n {links.map((item, index) => {\n const label =\n typeof item.label === 'string' && item.label.trim()\n ? item.label\n : typeof item.href === 'string'\n ? item.href\n : 'Link';\n const href =\n typeof item.href === 'string' && item.href.trim()\n ? item.href\n : '#';\n const style =\n typeof item.style === 'string' ? item.style.trim() : '';\n return (\n <a\n key={\n typeof item._key === 'string' && item._key\n ? item._key\n : `${href}-${index}`\n }\n href={href}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noreferrer' : undefined}\n data-amplifyup-action-style={style || undefined}\n >\n {label}\n </a>\n );\n })}\n </span>\n );\n}\n\nexport function Field(props: {\n /** Field value from your component props. Do not also pass `name`. */\n value?: unknown;\n /**\n * @deprecated Prefer `value={…}`. Still used as the Composer save key when\n * the same value appears on more than one prop.\n */\n name?: string;\n fallback?: ReactNode;\n className?: string;\n render?: (value: any) => ReactNode;\n}) {\n const { value, name, fallback, className, render } = props;\n const context = useContext(ComponentContext);\n const composerEdit = useComposerEditMode();\n const hasExplicitValue = hasOwnProp(props, 'value');\n // Prefer value for display; `name` is only the Composer save key.\n const sourceValue = hasExplicitValue\n ? value\n : name\n ? context?.props?.[name]\n : undefined;\n const editName = inferEditName(name, context?.props, sourceValue);\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n editName,\n sourceValue\n );\n\n warnProjectionProps('Field', name, hasExplicitValue);\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] Field needs a `value` prop (or deprecated `name` alone)'\n );\n return fallback ? <>{fallback}</> : null;\n }\n\n // Custom render owns the output, including empty/null (e.g. nested Fields).\n if (render) {\n if (\n composerEdit &&\n editName &&\n context &&\n canInlineEdit(editName, fieldValue)\n ) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n fallback={fallback}\n className={className}\n render={render}\n layoutNodeId={context.layoutNodeId}\n componentId={context.componentId}\n />\n );\n }\n return (\n <span className={className} style={{ display: 'contents' }}>\n {render(fieldValue)}\n </span>\n );\n }\n\n if (Array.isArray(fieldValue)) {\n const list = renderLinkList(fieldValue, className);\n if (list) return list;\n }\n\n const text = formatFieldValue(fieldValue);\n const showVisualFallback =\n !text && isReactNodeFallback(fallback);\n const emptyBlockField =\n isComposerEmptyText(fieldValue) && classNameIsBlock(className);\n\n // Keep search bars, buttons, and other chrome mounted. Only swap in the\n // contenteditable span for plain text.\n // Empty block fields stay off the canvas (same as live): the hint string\n // was landing next to a sibling Field that already had copy.\n if (\n composerEdit &&\n editName &&\n context &&\n canInlineEdit(editName, fieldValue) &&\n !showVisualFallback &&\n !emptyBlockField\n ) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n fallback={fallback}\n className={className}\n layoutNodeId={context.layoutNodeId}\n componentId={context.componentId}\n />\n );\n }\n\n if (\n fieldValue === undefined ||\n fieldValue === null ||\n isComposerEmptyText(fieldValue)\n ) {\n return fallback ? <span className={className}>{fallback}</span> : null;\n }\n\n if (!text) {\n return fallback ? <span className={className}>{fallback}</span> : null;\n }\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 the field value from your component props (`value={body}`). Values are\n * Markdown for portability across CMS platforms.\n *\n * @example\n * ```tsx\n * function Article({ title, body }: { title: string; body: string }) {\n * return (\n * <article>\n * <h1><Field value={title} /></h1>\n * <RichText value={body} className=\"prose\" />\n * </article>\n * );\n * }\n * ```\n */\nexport function RichText(props: {\n /** Markdown (or HTML) string from your component props. Do not also pass `name`. */\n value?: string | null;\n /**\n * @deprecated Prefer `value={…}`. Still used as the Composer save key when\n * the same value appears on more than one prop.\n */\n name?: string;\n fallback?: ReactNode;\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 value,\n name,\n fallback,\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 hasValueProp = hasOwnProp(props, 'value');\n const hasExplicitValue = hasValueProp || childrenValue !== undefined;\n // Prefer value for display; `name` is only the Composer save key.\n const sourceValue = hasValueProp\n ? value\n : childrenValue !== undefined\n ? childrenValue\n : name\n ? context?.props?.[name]\n : undefined;\n\n const editName = inferEditName(name, context?.props, sourceValue);\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n editName,\n sourceValue\n );\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] RichText needs a `value` prop (or string children), or deprecated `name` alone'\n );\n return fallback ? <>{fallback}</> : null;\n }\n\n warnProjectionProps('RichText', name, hasExplicitValue);\n\n const canEdit =\n !!context && canInlineEditRichText(editName, fieldValue);\n\n if (isComposerEmptyText(fieldValue)) {\n if (\n composerEdit &&\n canEdit &&\n !isReactNodeFallback(fallback) &&\n !classNameIsBlock(className)\n ) {\n return (\n <ComposerInlineField\n name={editName}\n value={fieldValue}\n fallback={\n typeof fallback === 'string' || typeof fallback === 'number'\n ? fallback\n : undefined\n }\n className={className}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\n />\n );\n }\n return fallback ? <Tag className={className}>{fallback}</Tag> : 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 fallback ? <Tag className={className}>{fallback}</Tag> : null;\n }\n\n if (composerEdit && canEdit) {\n return (\n <ComposerInlineHtml\n name={editName}\n html={html}\n className={className}\n Tag={Tag}\n layoutNodeId={context?.layoutNodeId}\n componentId={context?.componentId}\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\n/**\n * Image — renders a provider-backed image value as `<img>`.\n *\n * Pass the portable `{ url, alt?, width?, height? }` (or URL string) from your\n * component props via `value`. AmplifyUp does not host image files.\n *\n * @example\n * ```tsx\n * function Hero({ backgroundImage }: { backgroundImage: { url: string } }) {\n * return (\n * <Image value={backgroundImage} className=\"h-full w-full object-cover\" />\n * );\n * }\n * ```\n */\nexport function Image(\n props: {\n /** Portable image or URL string from your component props. Do not also pass `name`. */\n value?: unknown;\n /**\n * @deprecated Will be removed. Use `value={…}` and omit `name`.\n * Do not pass `name` together with `value`.\n */\n name?: string;\n alt?: string;\n } & Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'name'>\n) {\n const {\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 hasExplicitValue = hasOwnProp(props, 'value');\n // Prefer value-first; ignore deprecated name when both are passed.\n const sourceValue = hasExplicitValue\n ? value\n : name\n ? context?.props?.[name]\n : undefined;\n const fieldValue = useFieldOverlay(\n context?.layoutNodeId,\n inferEditName(name, context?.props, sourceValue),\n sourceValue\n );\n\n warnProjectionProps('Image', name, hasExplicitValue);\n\n if (!context && !hasExplicitValue) {\n console.warn(\n '[AmplifyUp SDK] Image needs a `value` prop (or deprecated `name` alone)'\n );\n return null;\n }\n\n const src = imageSrc(fieldValue);\n if (!src) return null;\n\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 return (\n <img\n {...imgProps}\n src={src}\n alt={alt}\n className={className}\n width={width}\n height={height}\n />\n );\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 { useLiveComposerProps } from './components';\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): Record<string, any> {\n return {\n ...(node.settings || {}),\n ...(node.props || {}),\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 LiveNodeRender({\n nodeId,\n componentId,\n props,\n slots,\n renderComponent,\n}: {\n nodeId: string;\n componentId: string;\n props: Record<string, any>;\n slots?: Record<string, ReactNode>;\n renderComponent: AmplifyRendererProps['renderComponent'];\n}) {\n const liveProps = useLiveComposerProps(nodeId, props);\n return (\n <>\n {renderComponent(componentId, liveProps, slots, {\n layoutNodeId: nodeId,\n })}\n </>\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: Record<string, any>,\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 data-node-id={node.id} data-amplifyup-node=\"\">\n <ComponentRenderBoundary\n componentId={node.componentId}\n nodeId={node.id}\n >\n <LiveNodeRender\n nodeId={node.id}\n componentId={node.componentId}\n props={nodeRenderProps(node)}\n slots={slotsToPass}\n renderComponent={renderComponent}\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 <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 <div key={node.id}>{renderNode(node)}</div>\n ))}\n </div>\n ) : (\n layoutTree.map((node) => (\n <div key={node.id}>{renderNode(node)}</div>\n ))\n )}\n </main>\n );\n}\n\nexport const AmplifyRenderer = memo(AmplifyRendererInner);\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';\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: Record<string, any>,\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","/**\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 { Slot, Field, Image, RichText, ComponentContextProvider, useLiveComposerProps, useComponentProps } from './components';\n"]}