@kubuild/schema 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +24 -0
  2. package/dist/actions.d.ts +26 -2
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/breakpoints.d.ts +35 -0
  5. package/dist/breakpoints.d.ts.map +1 -0
  6. package/dist/builtin-components.d.ts +17 -0
  7. package/dist/builtin-components.d.ts.map +1 -0
  8. package/dist/canonical-props.d.ts +39 -0
  9. package/dist/canonical-props.d.ts.map +1 -0
  10. package/dist/chunk-MT3M7D67.js +1041 -0
  11. package/dist/chunk-MT3M7D67.js.map +1 -0
  12. package/dist/chunk-PECTZDCI.js +1038 -0
  13. package/dist/chunk-PECTZDCI.js.map +1 -0
  14. package/dist/document.d.ts +21 -82
  15. package/dist/document.d.ts.map +1 -1
  16. package/dist/index.cjs +700 -169
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +447 -747
  21. package/dist/index.js.map +1 -1
  22. package/dist/json-schema.d.ts +323 -10
  23. package/dist/json-schema.d.ts.map +1 -1
  24. package/dist/template.d.ts +6 -18
  25. package/dist/template.d.ts.map +1 -1
  26. package/dist/theme.d.ts +80 -0
  27. package/dist/theme.d.ts.map +1 -0
  28. package/dist/tracking.d.ts +178 -31
  29. package/dist/tracking.d.ts.map +1 -1
  30. package/dist/types.cjs +19 -0
  31. package/dist/types.cjs.map +1 -0
  32. package/dist/types.d.ts +331 -0
  33. package/dist/types.d.ts.map +1 -0
  34. package/dist/types.js +1 -0
  35. package/dist/types.js.map +1 -0
  36. package/dist/validate.cjs +715 -0
  37. package/dist/validate.cjs.map +1 -0
  38. package/dist/validate.d.ts +16 -0
  39. package/dist/validate.d.ts.map +1 -0
  40. package/dist/validate.js +53 -0
  41. package/dist/validate.js.map +1 -0
  42. package/package.json +22 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracking.ts","../src/actions.ts","../src/form.ts","../src/theme.ts","../src/document.ts","../src/manifest.ts","../src/template.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Supported Tracking Providers\n */\nexport const TrackingProviderTypeSchema = z.enum([\n 'meta',\n 'google',\n 'gtm',\n 'tiktok',\n 'custom',\n]);\n\nexport type TrackingProviderType = z.infer<typeof TrackingProviderTypeSchema>;\n\n/*\n * SECURITY MODEL\n * --------------\n * The portable document only stores PUBLIC identifiers (pixel / measurement / container ids),\n * feature flags, test event codes and an opaque `credentialId`. Secrets (Meta CAPI access\n * token, TikTok Events API token, GA4 Measurement Protocol API secret, custom webhook URL +\n * headers) are owned by the host and resolved on the server at dispatch time via\n * `credentialId`. Unknown keys — including the secret fields that `<= 1.0.0` documents\n * carried — are stripped when a document is parsed.\n */\n\n/**\n * Metadata-only descriptor of a tracking credential saved by the host (account/workspace).\n *\n * This is what the editor receives to render a credential picker. It NEVER carries secret\n * material (access tokens, API secrets, webhook URLs/headers) — those stay on the host and\n * are resolved server-side from `id` (see `TrackingSecretResolver` in `@kubuild/core`).\n */\nexport interface PixelCredentialOption {\n /** Opaque host id, stored in the document as `providers.<provider>.credentialId`. */\n id: string;\n /** Human-readable label shown in the picker. */\n name: string;\n provider: TrackingProviderType | (string & {});\n /** Public Meta / TikTok pixel id, if the credential has one. */\n pixelId?: string;\n /** Public GA4 measurement id, if the credential has one. */\n measurementId?: string;\n /** Public GTM container id, if the credential has one. */\n containerId?: string;\n /** True when the host holds a server-side secret for this credential. */\n hasSecret?: boolean;\n isActive?: boolean;\n}\n\n/**\n * Event Delivery Channels:\n * - 'both': Fires client browser pixel and dispatches to the server relay (with deduplication event_id)\n * - 'client_only': Only fires in the browser via client-side pixel scripts\n * - 'server_only': Only sends to the host server relay (no browser pixel call)\n */\nexport const TrackingDeliverySchema = z.enum(['both', 'client_only', 'server_only']);\nexport type TrackingDelivery = z.infer<typeof TrackingDeliverySchema>;\n\n/**\n * Meta (Facebook) Pixel & Conversions API (CAPI) Configuration\n */\nexport const MetaTrackingProviderConfigSchema = z.object({\n enabled: z.boolean().default(true),\n /** Host credential id; the server resolves the CAPI access token from it. */\n credentialId: z.string().optional(),\n /** Meta Pixel ID (e.g. 123456789012345) — public */\n pixelId: z.string().optional().default(''),\n /** Enable Server-Side Conversions API (delivered through the host relay) */\n capiEnabled: z.boolean().optional().default(false),\n /** Test Event Code from Meta Events Manager (e.g. \"TEST12345\") — not a secret */\n testEventCode: z.string().optional().default(''),\n});\n\nexport type MetaTrackingProviderConfig = z.infer<typeof MetaTrackingProviderConfigSchema>;\n\n/**\n * Google Analytics 4 (GA4) & Measurement Protocol Configuration\n */\nexport const GoogleTrackingProviderConfigSchema = z.object({\n enabled: z.boolean().default(true),\n /** Host credential id; the server resolves the Measurement Protocol API secret from it. */\n credentialId: z.string().optional(),\n /** GA4 Measurement ID (e.g. \"G-XXXXXXXXXX\") — public */\n measurementId: z.string().optional().default(''),\n});\n\nexport type GoogleTrackingProviderConfig = z.infer<typeof GoogleTrackingProviderConfigSchema>;\n\n/**\n * Google Tag Manager (GTM) Configuration.\n * Client-side only: `track_event` with provider 'gtm' (or 'all') pushes to `window.dataLayer`.\n */\nexport const GtmTrackingProviderConfigSchema = z.object({\n enabled: z.boolean().default(true),\n /** Optional linked account/workspace credential ID */\n credentialId: z.string().optional(),\n /** GTM Container ID (e.g. \"GTM-XXXXXXX\") — public */\n containerId: z.string().optional().default(''),\n});\n\nexport type GtmTrackingProviderConfig = z.infer<typeof GtmTrackingProviderConfigSchema>;\n\n/**\n * TikTok Pixel & Events API Configuration\n */\nexport const TikTokTrackingProviderConfigSchema = z.object({\n enabled: z.boolean().default(true),\n /** Host credential id; the server resolves the Events API access token from it. */\n credentialId: z.string().optional(),\n /** TikTok Pixel ID (e.g. \"C1234567890\") — public */\n pixelId: z.string().optional().default(''),\n /** Enable TikTok Events API (server-side, delivered through the host relay) */\n eventsApiEnabled: z.boolean().optional().default(false),\n /** Test Event Code from TikTok Event Manager — not a secret */\n testEventCode: z.string().optional().default(''),\n});\n\nexport type TikTokTrackingProviderConfig = z.infer<typeof TikTokTrackingProviderConfigSchema>;\n\n/**\n * Custom Webhook Configuration.\n * The destination URL and any auth headers are host secrets resolved from `credentialId`.\n */\nexport const CustomTrackingProviderConfigSchema = z.object({\n enabled: z.boolean().default(true),\n /** Host credential id; the server resolves the webhook `endpointUrl` + `headers` from it. */\n credentialId: z.string().optional(),\n});\n\nexport type CustomTrackingProviderConfig = z.infer<typeof CustomTrackingProviderConfigSchema>;\n\n/**\n * Provider keys that `<= 1.0.0` documents stored but that are now host-owned\n * (secrets and server destinations). Used by migration and by import/export\n * sanitization to strip them defensively.\n */\nexport const LEGACY_TRACKING_SECRET_KEYS: Readonly<Record<TrackingProviderType, readonly string[]>> =\n Object.freeze({\n meta: ['capiAccessToken', 'serverRelayUrl'],\n google: ['measurementProtocolSecret', 'serverRelayUrl'],\n gtm: ['serverRelayUrl'],\n tiktok: ['accessToken', 'serverRelayUrl'],\n custom: ['endpointUrl', 'headers'],\n });\n\n/**\n * Global Tracking Configuration Schema\n * Attached to Document / Project. Contains no secrets.\n */\nexport const TrackingConfigSchema = z.object({\n /** Master toggle: dynamically enables or disables all tracking operations */\n enabled: z.boolean().default(true),\n /** When enabled, events are logged to console and can bypass live API calls for safe debugging */\n debugMode: z.boolean().optional().default(false),\n /** Automatically trigger PageView event upon page load */\n autoPageView: z.boolean().optional().default(true),\n /** Default delivery method when not explicitly overridden in an action step */\n defaultDelivery: TrackingDeliverySchema.optional().default('both'),\n /** Provider-specific settings */\n providers: z\n .object({\n meta: MetaTrackingProviderConfigSchema.optional(),\n google: GoogleTrackingProviderConfigSchema.optional(),\n gtm: GtmTrackingProviderConfigSchema.optional(),\n tiktok: TikTokTrackingProviderConfigSchema.optional(),\n custom: CustomTrackingProviderConfigSchema.optional(),\n })\n .optional()\n .default({}),\n});\n\nexport type TrackingConfig = z.infer<typeof TrackingConfigSchema>;\n\n/* ------------------------------------------------------------------------------------------\n * Host-side secrets — NEVER part of the document. Exported so hosts / relays can validate\n * what their secret store returns.\n * ---------------------------------------------------------------------------------------- */\n\n/** Meta Conversions API secret material. */\nexport const MetaTrackingSecretsSchema = z.object({\n /** System User access token for the Meta Graph API. */\n capiAccessToken: z.string().min(1),\n});\nexport type MetaTrackingSecrets = z.infer<typeof MetaTrackingSecretsSchema>;\n\n/** GA4 Measurement Protocol secret material. */\nexport const GoogleTrackingSecretsSchema = z.object({\n /** Measurement Protocol `api_secret`. */\n measurementProtocolSecret: z.string().min(1),\n});\nexport type GoogleTrackingSecrets = z.infer<typeof GoogleTrackingSecretsSchema>;\n\n/** TikTok Events API secret material. */\nexport const TikTokTrackingSecretsSchema = z.object({\n /** Long-term Events API access token. */\n accessToken: z.string().min(1),\n});\nexport type TikTokTrackingSecrets = z.infer<typeof TikTokTrackingSecretsSchema>;\n\n/** Custom webhook destination + auth headers (both are host secrets). */\nexport const CustomTrackingSecretsSchema = z.object({\n endpointUrl: z.string().url(),\n headers: z.record(z.string(), z.string()).optional(),\n});\nexport type CustomTrackingSecrets = z.infer<typeof CustomTrackingSecretsSchema>;\n\n/** Secret material keyed by provider. GTM is client-only and has no secret. */\nexport interface TrackingProviderSecretsMap {\n meta: MetaTrackingSecrets;\n google: GoogleTrackingSecrets;\n tiktok: TikTokTrackingSecrets;\n custom: CustomTrackingSecrets;\n}\n\n/** Providers that support server-side delivery (and therefore have secrets). */\nexport type ServerTrackingProviderType = keyof TrackingProviderSecretsMap;\n\n/** Secret material for a single provider, as returned by a host secret resolver. */\nexport type TrackingProviderSecrets = TrackingProviderSecretsMap[ServerTrackingProviderType];\n\n/**\n * Standard Event Names commonly used across Meta, Google, and TikTok.\n */\nexport const StandardTrackingEventSchema = z.enum([\n 'PageView',\n 'ViewContent',\n 'AddToCart',\n 'InitiateCheckout',\n 'Purchase',\n 'Lead',\n 'Contact',\n 'CompleteRegistration',\n 'Subscribe',\n 'Search',\n 'SubmitApplication',\n 'Schedule',\n]);\n\nexport type StandardTrackingEvent = z.infer<typeof StandardTrackingEventSchema>;\n\n/**\n * Target provider of a `track_event` step. 'gtm' pushes to `window.dataLayer` (client only).\n */\nexport const TrackEventProviderSchema = z.enum(['all', 'meta', 'google', 'gtm', 'tiktok', 'custom']);\nexport type TrackEventProvider = z.infer<typeof TrackEventProviderSchema>;\n\n/**\n * Track Event Step Payload Schema (for Action Pipelines)\n */\nexport const TrackEventStepPayloadSchema = z.object({\n /** Event name: e.g. \"Purchase\", \"Lead\", or custom string */\n eventName: z.string().min(1, 'Event name cannot be empty'),\n /** Standard event vs custom event identifier */\n eventType: z.enum(['standard', 'custom']).optional().default('standard'),\n /**\n * Target provider: 'all' or a specific provider.\n * 'gtm' pushes the event to `window.dataLayer` (client-side only).\n */\n provider: TrackEventProviderSchema.optional().default('all'),\n /** Delivery channel: 'both', 'client_only', or 'server_only' */\n delivery: TrackingDeliverySchema.optional().default('both'),\n /**\n * Deduplication Event ID.\n * If omitted, a unique ID is automatically generated so Meta/TikTok CAPI\n * deduplicates cleanly with the browser pixel.\n */\n eventId: z.string().optional(),\n /**\n * Event parameters/properties (e.g. currency, value, content_name, order_id).\n * Supports runtime variable interpolation (e.g. {{ form.price }} or {{ variables.currency }}).\n */\n params: z.record(z.string(), z.unknown()).optional().default({}),\n /**\n * User Data for advanced matching and server CAPI (e.g. email, phone, firstName, lastName).\n * Supports runtime variable interpolation (e.g. {{ form.email }}).\n */\n userData: z.record(z.string(), z.unknown()).optional().default({}),\n /** Step-level active toggle */\n enabled: z.boolean().optional().default(true),\n});\n\nexport type TrackEventStepPayload = z.infer<typeof TrackEventStepPayloadSchema>;\n\n/* ------------------------------------------------------------------------------------------\n * Relay protocol (browser -> host server). Versioned and language-agnostic: any backend\n * (Node, PHP, Go, Python, ...) can implement it — see the JSON Schema export.\n * ---------------------------------------------------------------------------------------- */\n\nexport const TRACKING_RELAY_PROTOCOL_VERSION = 1 as const;\n\n/** Normalized server tracking event, as sent from the browser to the host relay. */\nexport const ServerTrackingEventSchema = z.object({\n eventName: z.string().min(1).max(256),\n eventType: z.enum(['standard', 'custom']).optional(),\n eventId: z.string().max(256).optional(),\n /** Unix epoch seconds. */\n eventTime: z.number().int().nonnegative().optional(),\n eventSourceUrl: z.string().max(4096).optional(),\n actionSource: z.enum(['website', 'app', 'system_generated']).optional(),\n params: z.record(z.string(), z.unknown()).optional(),\n /** Raw (unhashed) user data; the relay hashes PII per provider spec before forwarding. */\n userData: z.record(z.string(), z.unknown()).optional(),\n customData: z.record(z.string(), z.unknown()).optional(),\n});\nexport type ServerTrackingEventInput = z.infer<typeof ServerTrackingEventSchema>;\n\n/**\n * Body the renderer POSTs to the host relay (`RenderContext.tracking.relayUrl`).\n * The relay MUST load the tracking config itself (trusted) — never from this body.\n */\nexport const TrackingRelayRequestSchema = z.object({\n version: z.literal(TRACKING_RELAY_PROTOCOL_VERSION),\n event: ServerTrackingEventSchema,\n provider: TrackEventProviderSchema.optional().default('all'),\n /** Optional hint only; the relay uses the credentialId from its trusted config. */\n credentialId: z.string().max(256).optional(),\n /** Host document/page id so the relay can look up the trusted tracking config. */\n documentId: z.string().max(256).optional(),\n});\nexport type TrackingRelayRequest = z.infer<typeof TrackingRelayRequestSchema>;\n\n/** Per-provider outcome returned by the relay (provider response bodies are not echoed). */\nexport const TrackingRelayProviderResultSchema = z.object({\n provider: z.string(),\n success: z.boolean(),\n status: z.number().int().optional(),\n skipped: z.boolean().optional(),\n reason: z.string().optional(),\n error: z.string().optional(),\n});\nexport type TrackingRelayProviderResult = z.infer<typeof TrackingRelayProviderResultSchema>;\n\nexport const TrackingRelayErrorCodeSchema = z.enum([\n 'INVALID_REQUEST',\n 'UNSUPPORTED_VERSION',\n 'FORBIDDEN_ORIGIN',\n 'METHOD_NOT_ALLOWED',\n 'CONFIG_NOT_FOUND',\n 'INTERNAL_ERROR',\n]);\nexport type TrackingRelayErrorCode = z.infer<typeof TrackingRelayErrorCodeSchema>;\n\nexport const TrackingRelayResponseSchema = z.object({\n version: z.literal(TRACKING_RELAY_PROTOCOL_VERSION),\n success: z.boolean(),\n eventId: z.string().optional(),\n skipped: z.boolean().optional(),\n reason: z.string().optional(),\n results: z.record(z.string(), TrackingRelayProviderResultSchema).optional(),\n error: z\n .object({\n code: TrackingRelayErrorCodeSchema,\n message: z.string(),\n })\n .optional(),\n});\nexport type TrackingRelayResponse = z.infer<typeof TrackingRelayResponseSchema>;\n\n/**\n * Type guards\n */\nexport function isTrackingConfig(value: unknown): value is TrackingConfig {\n return TrackingConfigSchema.safeParse(value).success;\n}\n\nexport function isTrackEventStepPayload(value: unknown): value is TrackEventStepPayload {\n return TrackEventStepPayloadSchema.safeParse(value).success;\n}\n\nexport function isTrackingRelayRequest(value: unknown): value is TrackingRelayRequest {\n return TrackingRelayRequestSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\nimport { TrackEventStepPayload, TrackEventStepPayloadSchema } from './tracking';\n\n/**\n * Action Trigger Types\n * Events in the DOM or component lifecycle that can trigger an action pipeline.\n */\nexport const ActionTriggerTypeSchema = z.enum([\n 'click',\n 'submit',\n 'change',\n 'blur',\n 'focus',\n 'load',\n // Fired once by time-bound components (e.g. `countdown`) when they reach zero.\n 'expire',\n]);\n\nexport type ActionTriggerType = z.infer<typeof ActionTriggerTypeSchema>;\nexport type ActionTrigger = ActionTriggerType;\nexport const ActionTriggerSchema = ActionTriggerTypeSchema;\n\n/**\n * Action Step Types\n * Discrete operations executed sequentially or conditionally within an action pipeline.\n */\nexport const ActionStepTypeSchema = z.enum([\n 'api_request',\n 'navigate',\n 'set_state',\n 'reset_form',\n 'show_toast',\n 'open_modal',\n 'close_modal',\n 'toggle_modal',\n 'copy_clipboard',\n 'custom_event',\n 'track_event',\n]);\n\nexport type ActionStepType = z.infer<typeof ActionStepTypeSchema>;\n\n/**\n * Condition Operators for branch & conditional step execution.\n */\nexport const ConditionOperatorSchema = z.enum([\n 'equals',\n 'not_equals',\n 'contains',\n 'not_contains',\n 'is_truthy',\n 'is_falsy',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'regex',\n]);\n\nexport type ConditionOperator = z.infer<typeof ConditionOperatorSchema>;\n\n/**\n * Action Step Condition Schema\n * Evaluated before running a step. If condition fails, step is skipped.\n */\nexport const ActionStepConditionSchema = z.object({\n field: z.string().min(1, 'Condition field cannot be empty'),\n operator: ConditionOperatorSchema,\n value: z.unknown().optional(),\n});\n\nexport type ActionStepCondition = z.infer<typeof ActionStepConditionSchema>;\n\n/**\n * Security: Pattern matching dangerous URL protocols and script injection vectors.\n */\nconst DANGEROUS_URL_PATTERN = /(javascript:|vbscript:|data:text\\/html)/i;\nconst DANGEROUS_SCRIPT_PATTERN = /<\\s*script/i;\n\nexport function isSafeActionUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n const trimmed = url.trim();\n if (DANGEROUS_URL_PATTERN.test(trimmed)) return false;\n if (DANGEROUS_SCRIPT_PATTERN.test(trimmed)) return false;\n return true;\n}\n\nconst SafeUrlStringSchema = z\n .string()\n .min(1, 'URL cannot be empty')\n .refine(isSafeActionUrl, {\n message: 'URL contains disallowed or unsafe protocol/script pattern',\n });\n\n/**\n * Safe identifier for custom events (alphanumeric, dashes, colons, underscores).\n */\nconst SafeEventNameSchema = z\n .string()\n .min(1, 'Event name cannot be empty')\n .regex(/^[a-zA-Z0-9_\\-:]+$/, {\n message: 'Event name must contain only alphanumeric characters, dashes, colons, or underscores',\n });\n\n/**\n * 1. API Request Step Payload Schema\n */\nexport const ApiRequestStepPayloadSchema = z.object({\n url: SafeUrlStringSchema,\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']).default('GET'),\n headers: z.record(z.string(), z.string()).optional(),\n queryParams: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n /**\n * Request body. Omitted inside a form `submit` pipeline → the form's values are sent;\n * `null` → explicitly no body.\n */\n body: z.union([z.string(), z.record(z.string(), z.unknown()), z.array(z.unknown())]).nullable().optional(),\n bodyFormat: z.enum(['json', 'form-data', 'formData', 'urlencoded', 'url-encoded', 'raw', 'text']).optional(),\n bodyType: z.enum(['json', 'form-data', 'formData', 'urlencoded', 'url-encoded', 'raw', 'text']).optional(),\n timeout: z.number().positive('Timeout must be greater than 0 ms').optional(),\n responseMapping: z.record(z.string(), z.string()).optional(),\n});\n\nexport type ApiRequestStepPayload = z.infer<typeof ApiRequestStepPayloadSchema>;\n\n/**\n * 2. Navigate Step Payload Schema\n */\nexport const NavigateStepPayloadSchema = z.object({\n url: SafeUrlStringSchema,\n target: z.enum(['_self', '_blank', '_parent', '_top']).optional().default('_self'),\n replace: z.boolean().optional(),\n scroll: z.boolean().optional(),\n behavior: z.enum(['smooth', 'auto']).optional(),\n});\n\nexport type NavigateStepPayload = z.infer<typeof NavigateStepPayloadSchema>;\n\n/**\n * 3. Set State Step Payload Schema\n */\nexport const SetStateStepPayloadSchema = z.object({\n key: z.string().min(1, 'State key cannot be empty'),\n value: z.unknown(),\n scope: z.enum(['runtime', 'document', 'session', 'local']).optional().default('runtime'),\n});\n\nexport type SetStateStepPayload = z.infer<typeof SetStateStepPayloadSchema>;\n\n/**\n * 4. Reset Form Step Payload Schema\n */\nexport const ResetFormStepPayloadSchema = z.object({\n formId: z.string().optional(),\n});\n\nexport type ResetFormStepPayload = z.infer<typeof ResetFormStepPayloadSchema>;\n\n/**\n * 5. Show Toast Step Payload Schema\n */\nexport const ShowToastStepPayloadSchema = z.object({\n message: z.string().min(1, 'Toast message cannot be empty'),\n type: z.enum(['success', 'error', 'warning', 'info']).optional().default('info'),\n variant: z.enum(['success', 'error', 'warning', 'info']).optional(),\n title: z.string().optional(),\n duration: z.number().nonnegative('Duration must be >= 0 ms').optional(),\n position: z\n .enum(['top-right', 'top-left', 'bottom-right', 'bottom-left', 'top-center', 'bottom-center'])\n .optional(),\n});\n\nexport type ShowToastStepPayload = z.infer<typeof ShowToastStepPayloadSchema>;\n\n/**\n * 6. Open Modal Step Payload Schema\n */\nexport const OpenModalStepPayloadSchema = z\n .object({\n modalId: z.string().optional(),\n modalNodeId: z.string().optional(),\n toggle: z.boolean().optional(),\n })\n .refine((data) => Boolean(data.modalId || data.modalNodeId), {\n message: 'Modal ID or Modal Node ID cannot be empty',\n });\n\nexport type OpenModalStepPayload = z.infer<typeof OpenModalStepPayloadSchema>;\n\n/**\n * 7. Close Modal Step Payload Schema\n */\nexport const CloseModalStepPayloadSchema = z.object({\n modalId: z.string().optional(),\n modalNodeId: z.string().optional(),\n});\n\nexport type CloseModalStepPayload = z.infer<typeof CloseModalStepPayloadSchema>;\n\n/**\n * 7b. Toggle Modal Step Payload Schema\n * Flips a modal/drawer/collapsible between open and closed. The renderer's\n * `toggle_modal` runner resolves the target from the first non-empty of\n * `modalId`, `modalNodeId`, `targetNodeId`, `nodeId`.\n */\nexport const ToggleModalStepPayloadSchema = z\n .object({\n modalId: z.string().optional(),\n modalNodeId: z.string().optional(),\n targetNodeId: z.string().optional(),\n nodeId: z.string().optional(),\n })\n .refine(\n (data) =>\n [data.modalId, data.modalNodeId, data.targetNodeId, data.nodeId].some(\n (id) => typeof id === 'string' && id.trim().length > 0,\n ),\n {\n message: 'Modal ID or Modal Node ID cannot be empty',\n },\n );\n\nexport type ToggleModalStepPayload = z.infer<typeof ToggleModalStepPayloadSchema>;\n\n/**\n * 8. Copy Clipboard Step Payload Schema\n */\nexport const CopyClipboardStepPayloadSchema = z.object({\n text: z.string().optional(),\n value: z.unknown().optional(),\n notify: z.boolean().optional(),\n toastMessage: z.string().optional(),\n});\n\nexport type CopyClipboardStepPayload = z.infer<typeof CopyClipboardStepPayloadSchema>;\n\n/**\n * 9. Custom Event Step Payload Schema\n */\nexport const CustomEventStepPayloadSchema = z.object({\n eventName: SafeEventNameSchema,\n detail: z.record(z.string(), z.unknown()).optional(),\n bubbles: z.boolean().optional().default(true),\n cancelable: z.boolean().optional().default(true),\n});\n\nexport type CustomEventStepPayload = z.infer<typeof CustomEventStepPayloadSchema>;\n\n/**\n * Dictionary of Step Payload Schemas by Step Type\n */\nexport const StepPayloadSchemas = {\n api_request: ApiRequestStepPayloadSchema,\n navigate: NavigateStepPayloadSchema,\n set_state: SetStateStepPayloadSchema,\n reset_form: ResetFormStepPayloadSchema,\n show_toast: ShowToastStepPayloadSchema,\n open_modal: OpenModalStepPayloadSchema,\n close_modal: CloseModalStepPayloadSchema,\n toggle_modal: ToggleModalStepPayloadSchema,\n copy_clipboard: CopyClipboardStepPayloadSchema,\n custom_event: CustomEventStepPayloadSchema,\n track_event: TrackEventStepPayloadSchema,\n} as const;\n\n/**\n * Action Step Interface\n * Recursive definition allowing branching (onSuccess, onError).\n */\nexport interface ActionStep {\n id: string;\n type: ActionStepType;\n label?: string;\n payload?: Record<string, unknown>;\n condition?: ActionStepCondition;\n timeout?: number;\n continueOnError?: boolean;\n onSuccess?: ActionStep[];\n onError?: ActionStep[];\n}\n\n/**\n * Action Step Schema\n * Validates individual steps in an action pipeline, supporting recursive branching.\n */\nexport const ActionStepSchema: z.ZodType<ActionStep> = z.lazy(() =>\n z.object({\n id: z.string().min(1, 'Step ID cannot be empty'),\n type: ActionStepTypeSchema,\n label: z.string().optional(),\n payload: z.record(z.string(), z.unknown()).optional().default({}),\n condition: ActionStepConditionSchema.optional(),\n timeout: z.number().positive().optional(),\n continueOnError: z.boolean().optional(),\n onSuccess: z.array(ActionStepSchema).optional(),\n onError: z.array(ActionStepSchema).optional(),\n })\n);\n\n/**\n * Action Pipeline Schema\n * Defines an event trigger and an ordered sequence of action steps to execute.\n */\nexport const ActionPipelineSchema = z.object({\n id: z.string().min(1, 'Pipeline ID cannot be empty'),\n trigger: ActionTriggerTypeSchema,\n label: z.string().optional(),\n debounceMs: z.number().nonnegative('Debounce ms must be >= 0').optional(),\n preventDuplicate: z.boolean().optional(),\n enabled: z.boolean().optional().default(true),\n steps: z.array(ActionStepSchema).min(1, 'Action pipeline must contain at least one step'),\n});\n\nexport type ActionPipeline = z.infer<typeof ActionPipelineSchema>;\n\n/**\n * Type Guards\n */\nexport function isActionTriggerType(value: unknown): value is ActionTriggerType {\n return ActionTriggerTypeSchema.safeParse(value).success;\n}\n\nexport function isActionStepType(value: unknown): value is ActionStepType {\n return ActionStepTypeSchema.safeParse(value).success;\n}\n\nexport function isConditionOperator(value: unknown): value is ConditionOperator {\n return ConditionOperatorSchema.safeParse(value).success;\n}\n\nexport function isActionStepCondition(value: unknown): value is ActionStepCondition {\n return ActionStepConditionSchema.safeParse(value).success;\n}\n\nexport function isActionStep(value: unknown): value is ActionStep {\n return ActionStepSchema.safeParse(value).success;\n}\n\nexport function isActionPipeline(value: unknown): value is ActionPipeline {\n return ActionPipelineSchema.safeParse(value).success;\n}\n\n/**\n * Validates a step's payload specifically according to its step type.\n */\nexport function validateActionStepPayload(\n type: ActionStepType,\n payload: unknown\n): { success: boolean; data?: unknown; error?: z.ZodError } {\n const schema = StepPayloadSchemas[type];\n if (!schema) {\n return {\n success: false,\n error: new z.ZodError([\n {\n code: z.ZodIssueCode.custom,\n message: `Unknown step type: ${type}`,\n path: ['type'],\n },\n ]),\n };\n }\n const result = schema.safeParse(payload);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n\n/**\n * Sanitization Utilities\n */\n\n/**\n * Sanitizes a URL string by checking if it contains dangerous protocols or scripts.\n * Returns the trimmed URL if safe, or a fallback string (default empty string `\"\"`).\n */\nexport function sanitizeActionUrl(url: unknown, fallback: string = ''): string {\n if (typeof url !== 'string') return fallback;\n const trimmed = url.trim();\n if (!isSafeActionUrl(trimmed)) {\n return fallback;\n }\n return trimmed;\n}\n\n/**\n * Sanitizes a general string value against script tags and dangerous HTML/protocols.\n */\nexport function sanitizeActionString(value: unknown, fallback: string = ''): string {\n if (typeof value !== 'string') return fallback;\n if (DANGEROUS_SCRIPT_PATTERN.test(value)) {\n return value.replace(/<\\s*script[^>]*>[\\s\\S]*?<\\s*\\/\\s*script\\s*>/gi, '').replace(/<\\s*script[^>]*>/gi, '');\n }\n return value;\n}\n\n/**\n * Recursively sanitizes any arbitrary value (string, object, array, primitive) in an action payload.\n */\nexport function sanitizeActionValue(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (DANGEROUS_URL_PATTERN.test(trimmed)) {\n return '';\n }\n return sanitizeActionString(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeActionValue(item));\n }\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (/^(url|href|src|endpoint|targetUrl)$/i.test(k) && typeof v === 'string') {\n result[k] = sanitizeActionUrl(v);\n } else {\n result[k] = sanitizeActionValue(v);\n }\n }\n return result;\n }\n return value;\n}\n\n/**\n * Sanitizes an action step payload object, cleaning dangerous URLs and injection strings recursively.\n */\nexport function sanitizeActionPayload(payload: Record<string, unknown> | undefined): Record<string, unknown> {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return {};\n }\n return sanitizeActionValue(payload) as Record<string, unknown>;\n}\n\n/**\n * Recursively sanitizes an ActionStep, including its payload, condition, onSuccess, and onError branches.\n */\nexport function sanitizeActionStep(step: ActionStep): ActionStep {\n const sanitized: ActionStep = {\n ...step,\n label: step.label ? sanitizeActionString(step.label) : step.label,\n payload: sanitizeActionPayload(step.payload),\n };\n\n if (step.condition && step.condition.value !== undefined) {\n sanitized.condition = {\n ...step.condition,\n value: sanitizeActionValue(step.condition.value),\n };\n }\n\n if (step.onSuccess && Array.isArray(step.onSuccess)) {\n sanitized.onSuccess = step.onSuccess.map((s) => sanitizeActionStep(s));\n }\n\n if (step.onError && Array.isArray(step.onError)) {\n sanitized.onError = step.onError.map((s) => sanitizeActionStep(s));\n }\n\n return sanitized;\n}\n\n/**\n * Recursively sanitizes an ActionPipeline and all its nested steps.\n */\nexport function sanitizeActionPipeline(pipeline: ActionPipeline): ActionPipeline {\n return {\n ...pipeline,\n label: pipeline.label ? sanitizeActionString(pipeline.label) : pipeline.label,\n steps: Array.isArray(pipeline.steps) ? pipeline.steps.map((s) => sanitizeActionStep(s)) : [],\n };\n}\n\n","import { z } from 'zod';\n\n/**\n * Validation Rule Types\n * Supported validation primitives for form inputs in KUBUILD.\n */\nexport const ValidationRuleTypeSchema = z.enum([\n 'required',\n 'email',\n 'url',\n 'min_length',\n 'max_length',\n 'numeric_min',\n 'numeric_max',\n 'pattern',\n 'match_field',\n 'custom_regex',\n]);\n\nexport type ValidationRuleType = z.infer<typeof ValidationRuleTypeSchema>;\n\n/**\n * Validation Trigger Timing\n * Controls when field validation is evaluated.\n */\nexport const ValidateOnEventSchema = z.enum(['blur', 'change', 'submit']);\nexport type ValidateOnEvent = z.infer<typeof ValidateOnEventSchema>;\n\n/**\n * Validation Rule Schema\n * Defines an individual validation condition and its custom error message.\n */\nexport const ValidationRuleSchema = z.object({\n type: ValidationRuleTypeSchema,\n value: z.unknown().optional(),\n message: z.string().min(1, 'Validation error message cannot be empty'),\n});\n\nexport type ValidationRule = z.infer<typeof ValidationRuleSchema>;\n\n/**\n * Form Field Binding Schema\n * Connects an input component to the form state runtime with validation rules and initial values.\n */\nexport const FormFieldBindingSchema = z.object({\n name: z.string().min(1, 'Field name cannot be empty'),\n label: z.string().optional(),\n defaultValue: z.unknown().optional(),\n rules: z.array(ValidationRuleSchema).optional().default([]),\n validateOn: ValidateOnEventSchema.optional().default('blur'),\n transform: z.enum(['trim', 'lowercase', 'uppercase', 'number']).optional(),\n disabled: z.boolean().optional(),\n required: z.boolean().optional(),\n});\n\nexport type FormFieldBinding = z.infer<typeof FormFieldBindingSchema>;\n\n/**\n * Form Container Configuration Schema\n * Configuration for form boundaries, submission behavior, and error focus.\n */\nexport const FormConfigSchema = z.object({\n formId: z.string().min(1, 'Form ID cannot be empty'),\n resetOnSubmit: z.boolean().optional().default(false),\n scrollToFirstError: z.boolean().optional().default(true),\n validateOn: ValidateOnEventSchema.optional().default('blur'),\n initialValues: z.record(z.string(), z.unknown()).optional(),\n rules: z.array(ValidationRuleSchema).optional(),\n});\n\nexport type FormConfig = z.infer<typeof FormConfigSchema>;\n\n/**\n * Type Guards\n */\nexport function isValidationRuleType(value: unknown): value is ValidationRuleType {\n return ValidationRuleTypeSchema.safeParse(value).success;\n}\n\nexport function isValidationRule(value: unknown): value is ValidationRule {\n return ValidationRuleSchema.safeParse(value).success;\n}\n\nexport function isValidateOnEvent(value: unknown): value is ValidateOnEvent {\n return ValidateOnEventSchema.safeParse(value).success;\n}\n\nexport function isFormFieldBinding(value: unknown): value is FormFieldBinding {\n return FormFieldBindingSchema.safeParse(value).success;\n}\n\nexport function isFormConfig(value: unknown): value is FormConfig {\n return FormConfigSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\n\n/**\n * Document Theme / Design Tokens (STORA-551)\n *\n * A theme is a small, portable set of named design tokens stored on the document\n * (`PageDocument.theme`). The renderer emits every token as a CSS custom property on\n * the page root, and node styles reference tokens with a plain CSS `var()` string:\n *\n * styles.base.backgroundColor = 'var(--kb-color-primary)'\n *\n * Because the reference is an ordinary CSS value it passes the existing style\n * validation, renders unchanged in inline styles, generated CSS and exported HTML,\n * and falls back gracefully (to the property's initial value) when a token is absent.\n *\n * Token groups map to custom-property prefixes:\n * colors -> --kb-color-<key>\n * fonts -> --kb-font-<key>\n * radii -> --kb-radius-<key>\n * spacing -> --kb-space-<key>\n *\n * Security: token keys are restricted to a safe identifier alphabet and token values\n * are screened like style values, and additionally may not contain characters that can\n * terminate a CSS declaration/rule or open markup (`; { } < > \\`), since values end up\n * inside a `<style>` block in generated HTML.\n */\n\nexport const THEME_TOKEN_GROUPS = ['colors', 'fonts', 'radii', 'spacing'] as const;\n\nexport type ThemeTokenGroup = (typeof THEME_TOKEN_GROUPS)[number];\n\n/** CSS custom-property prefix per token group. */\nexport const THEME_TOKEN_CSS_PREFIX: Readonly<Record<ThemeTokenGroup, string>> = Object.freeze({\n colors: '--kb-color-',\n fonts: '--kb-font-',\n radii: '--kb-radius-',\n spacing: '--kb-space-',\n});\n\nconst THEME_TOKEN_KEY_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;\nconst DANGEROUS_THEME_VALUE_PATTERN = /javascript:|expression\\(|@import|<script|vbscript:|data:text\\/html|url\\s*\\(/i;\nconst FORBIDDEN_THEME_VALUE_CHARS = /[;{}<>\\\\]/;\nconst MAX_THEME_VALUE_LENGTH = 512;\n\n/** True when `key` can be used as a theme token key (and custom-property suffix). */\nexport function isSafeThemeTokenKey(key: unknown): key is string {\n return typeof key === 'string' && THEME_TOKEN_KEY_PATTERN.test(key);\n}\n\n/**\n * True when `value` is safe to emit as a CSS custom-property value. Numbers are allowed\n * (finite only); strings must be short and free of injection vectors.\n */\nexport function isSafeThemeTokenValue(value: unknown): value is string | number {\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'string') return false;\n if (value.trim().length === 0 || value.length > MAX_THEME_VALUE_LENGTH) return false;\n if (FORBIDDEN_THEME_VALUE_CHARS.test(value)) return false;\n if (DANGEROUS_THEME_VALUE_PATTERN.test(value)) return false;\n return true;\n}\n\nexport const ThemeTokenKeySchema = z.string().refine(isSafeThemeTokenKey, {\n message: 'Theme token key must be 1-64 characters of letters, digits, \"-\" or \"_\" (starting with a letter or digit)',\n});\n\nexport const ThemeTokenValueSchema = z.union([\n z.string().refine((value) => isSafeThemeTokenValue(value), {\n message: 'Theme token value contains a disallowed or unsafe pattern',\n }),\n z.number().refine((value) => Number.isFinite(value), { message: 'Theme token value must be finite' }),\n]);\n\nexport type ThemeTokenValue = z.infer<typeof ThemeTokenValueSchema>;\n\nexport const ThemeTokenMapSchema = z.record(ThemeTokenKeySchema, ThemeTokenValueSchema);\n\nexport type ThemeTokenMap = Record<string, ThemeTokenValue>;\n\nexport const ThemeSchema = z.object({\n colors: ThemeTokenMapSchema.optional(),\n fonts: ThemeTokenMapSchema.optional(),\n radii: ThemeTokenMapSchema.optional(),\n spacing: ThemeTokenMapSchema.optional(),\n});\n\nexport type Theme = z.infer<typeof ThemeSchema>;\n\n/**\n * Builds the custom-property name for a token, e.g. `('colors', 'primary')` ->\n * `--kb-color-primary`. Returns `null` for unsafe keys.\n */\nexport function themeTokenCssVarName(group: ThemeTokenGroup, key: string): string | null {\n if (!isSafeThemeTokenKey(key)) return null;\n return `${THEME_TOKEN_CSS_PREFIX[group]}${key}`;\n}\n\n/**\n * Builds the style value that references a token, e.g. `var(--kb-color-primary)`.\n * This is the canonical token reference format stored in node styles.\n */\nexport function themeTokenRef(group: ThemeTokenGroup, key: string): string {\n const name = themeTokenCssVarName(group, key);\n if (!name) {\n throw new Error(`Invalid theme token key \"${key}\"`);\n }\n return `var(${name})`;\n}\n\nconst TOKEN_REF_PATTERN = /^var\\(\\s*--kb-(color|font|radius|space)-([a-zA-Z0-9][a-zA-Z0-9_-]*)\\s*(?:,[^)]*)?\\)$/;\nconst PREFIX_TO_GROUP: Record<string, ThemeTokenGroup> = {\n color: 'colors',\n font: 'fonts',\n radius: 'radii',\n space: 'spacing',\n};\n\n/**\n * Parses a token reference style value back into `{ group, key }`, or `null` when the\n * value is not a theme token reference.\n */\nexport function parseThemeTokenRef(value: unknown): { group: ThemeTokenGroup; key: string } | null {\n if (typeof value !== 'string') return null;\n const match = TOKEN_REF_PATTERN.exec(value.trim());\n if (!match) return null;\n return { group: PREFIX_TO_GROUP[match[1]], key: match[2] };\n}\n\n/**\n * Merges theme layers left-to-right (later layers win per token). Used to apply a host\n * runtime override on top of the document theme without mutating either. Unsafe tokens in\n * any layer are skipped, so an invalid override never clobbers a valid lower-layer value.\n */\nexport function mergeThemes(...layers: Array<Partial<Theme> | undefined | null>): Theme {\n const merged: Theme = {};\n for (const layer of layers) {\n if (!layer || typeof layer !== 'object') continue;\n for (const group of THEME_TOKEN_GROUPS) {\n const tokens = layer[group];\n if (!tokens || typeof tokens !== 'object') continue;\n for (const [key, value] of Object.entries(tokens)) {\n if (!isSafeThemeTokenKey(key) || !isSafeThemeTokenValue(value)) continue;\n merged[group] = { ...(merged[group] ?? {}), [key]: value };\n }\n }\n }\n return merged;\n}\n\n/**\n * Flattens a theme into `[customPropertyName, value]` pairs, silently dropping any\n * token whose key or value is unsafe. Safe to call on unvalidated input (e.g. a host\n * runtime override), which is why it re-checks every entry.\n */\nexport function themeToCssVariables(theme: Partial<Theme> | undefined | null): Array<[string, string]> {\n const entries: Array<[string, string]> = [];\n if (!theme || typeof theme !== 'object') return entries;\n for (const group of THEME_TOKEN_GROUPS) {\n const tokens = theme[group];\n if (!tokens || typeof tokens !== 'object') continue;\n for (const [key, value] of Object.entries(tokens)) {\n const name = themeTokenCssVarName(group, key);\n if (!name || !isSafeThemeTokenValue(value)) continue;\n entries.push([name, typeof value === 'number' && (group === 'radii' || group === 'spacing') ? `${value}px` : String(value)]);\n }\n }\n return entries;\n}\n\nexport function isTheme(value: unknown): value is Theme {\n return ThemeSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\nimport { ActionPipeline, ActionPipelineSchema } from './actions';\nimport { FormConfig, FormConfigSchema } from './form';\nimport { TrackingConfig, TrackingConfigSchema } from './tracking';\nimport { ThemeSchema } from './theme';\n\nexport const SCHEMA_NAME = 'stora.page' as const;\nexport const CURRENT_SCHEMA_VERSION = '1.2.0' as const;\n\n/**\n * Asset Reference Schema\n * Represents a reference to an asset stored either locally within the .stora package or hosted externally.\n */\nexport const AssetReferenceSchema = z.object({\n type: z.literal('asset'),\n assetId: z.string().min(1, 'Asset ID cannot be empty'),\n filename: z.string().optional(),\n mimeType: z.string().optional(),\n fallbackUrl: z.string().url().optional(),\n});\n\nexport type AssetReference = z.infer<typeof AssetReferenceSchema>;\n\n/**\n * Variable Binding Schema\n * Represents a dynamic runtime variable replacement (e.g. {{ site.name }}).\n */\nexport const VariableBindingSchema = z.object({\n type: z.literal('variable'),\n key: z.string().min(1, 'Variable key cannot be empty'),\n fallback: z.unknown().optional(),\n});\n\nexport type VariableBinding = z.infer<typeof VariableBindingSchema>;\n\n/**\n * Action Binding Schema\n * Represents an interactive action triggerable by UI components (e.g. navigation, modal, custom event).\n */\nexport const ActionBindingSchema = z.object({\n type: z.string().min(1, 'Action type cannot be empty'),\n payload: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type ActionBinding = z.infer<typeof ActionBindingSchema>;\n\n/**\n * Style Definition Schema\n * Key-value mapping of CSS properties or design tokens.\n *\n * Values are restricted to safe, serializable primitives (string, number,\n * boolean, null) — no functions, objects, or arrays — and string values are\n * screened against known CSS/HTML injection vectors (e.g. `url(javascript:...)`,\n * legacy IE `expression()`, `@import`, embedded `<script>` tags).\n */\nconst DANGEROUS_STYLE_VALUE_PATTERN = /javascript:|expression\\(|@import|<script|vbscript:|data:text\\/html/i;\n\nexport const StyleValueSchema = z.union([\n z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Style value contains a disallowed or unsafe pattern',\n }),\n z.number(),\n z.boolean(),\n z.null(),\n z.undefined(),\n]);\n\nexport type StyleValue = z.infer<typeof StyleValueSchema>;\n\n/**\n * Standard CSS style definition supporting Flexbox (STORA-101), Sizing constraints (STORA-101),\n * Effects & rounded corners (STORA-101), CSS Grid (STORA-110), and arbitrary CSS properties/tokens.\n */\nexport interface StyleDefinition extends Record<string, StyleValue> {\n // Display\n display?: string;\n\n // Flexbox / Auto Layout (STORA-101)\n flexDirection?: 'row' | 'row-reverse' | 'column' | 'column-reverse' | (string & {});\n flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse' | (string & {});\n justifyContent?:\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'space-between'\n | 'space-around'\n | 'space-evenly'\n | 'start'\n | 'end'\n | 'left'\n | 'right'\n | (string & {});\n alignItems?:\n | 'stretch'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'start'\n | 'end'\n | 'self-start'\n | 'self-end'\n | (string & {});\n alignContent?:\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'space-between'\n | 'space-around'\n | 'space-evenly'\n | 'stretch'\n | 'start'\n | 'end'\n | (string & {});\n gap?: string | number;\n rowGap?: string | number;\n columnGap?: string | number;\n flexGrow?: number | string;\n flexShrink?: number | string;\n flexBasis?: string | number;\n alignSelf?:\n | 'auto'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'stretch'\n | (string & {});\n\n // Sizing constraints (STORA-101)\n width?: string | number;\n height?: string | number;\n minWidth?: string | number;\n maxWidth?: string | number;\n minHeight?: string | number;\n maxHeight?: string | number;\n\n // Replaced-element fitting — how an image/video fills its own box. Portable and\n // per-breakpoint overridable like any other style property.\n objectFit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down' | (string & {});\n objectPosition?: string;\n\n // Effects & Rounded Corners (STORA-101)\n borderRadius?: string | number;\n borderTopLeftRadius?: string | number;\n borderTopRightRadius?: string | number;\n borderBottomRightRadius?: string | number;\n borderBottomLeftRadius?: string | number;\n backdropFilter?: string;\n filter?: string;\n boxShadow?: string;\n\n // Background & Image Styling\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundSize?: 'cover' | 'contain' | 'auto' | (string & {});\n backgroundPosition?: string;\n backgroundRepeat?: 'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y' | (string & {});\n backgroundAttachment?: 'scroll' | 'fixed' | 'local' | (string & {});\n\n // CSS Grid (STORA-110)\n gridTemplateColumns?: string;\n gridTemplateRows?: string;\n gridAutoFlow?: string;\n gridAutoColumns?: string;\n gridAutoRows?: string;\n gridColumn?: string | number;\n gridRow?: string | number;\n gridColumnStart?: string | number;\n gridColumnEnd?: string | number;\n gridRowStart?: string | number;\n gridRowEnd?: string | number;\n colSpan?: number | string;\n rowSpan?: number | string;\n justifySelf?: string;\n}\n\nexport const StyleDefinitionSchema: z.ZodType<StyleDefinition> = z.record(z.string(), StyleValueSchema);\n\n/**\n * Pseudo-state style definitions keyed by CSS pseudo-class selector\n * (e.g. `:hover`, `:focus`, `:active`). Each entry is a style layer applied\n * on top of the resolved breakpoint styles when the state is active.\n */\nexport const PseudoStateStylesSchema = z.record(z.string(), StyleDefinitionSchema);\nexport type PseudoStateStyles = Record<string, StyleDefinition>;\n\n/**\n * Responsive Styles Schema\n * Breakpoint-specific style definitions: base (all viewports), desktop, tablet, and mobile.\n * Optionally carries `states` — pseudo-class style layers (e.g. `:hover`).\n */\nexport const ResponsiveStylesSchema = z\n .object({\n base: StyleDefinitionSchema.optional(),\n desktop: StyleDefinitionSchema.optional(),\n tablet: StyleDefinitionSchema.optional(),\n mobile: StyleDefinitionSchema.optional(),\n states: PseudoStateStylesSchema.optional(),\n })\n .passthrough()\n .default({});\n\nexport type ResponsiveStyles = z.infer<typeof ResponsiveStylesSchema>;\n\n/**\n * Animation Configuration Schema\n * Defines scroll entrance animations (AOS), duration, delay, easing curve,\n * trigger behavior (once), hover micro-interactions, and continuous loop effects.\n */\nexport const AnimationConfigSchema = z.object({\n type: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Animation type contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n duration: z.number().min(0, 'Duration must be non-negative').optional().default(600),\n delay: z.number().min(0, 'Delay must be non-negative').optional().default(0),\n easing: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Animation easing contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('ease-out'),\n once: z.boolean().optional().default(true),\n hoverEffect: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Hover effect contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n loopEffect: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Loop effect contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n});\n\nexport type AnimationConfig = z.infer<typeof AnimationConfigSchema>;\n\nexport const DEFAULT_ANIMATION_CONFIG: AnimationConfig = {\n type: 'none',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n hoverEffect: 'none',\n loopEffect: 'none',\n};\n\n/**\n * Recursive Node Type Definition\n */\nexport type Node = {\n id: string;\n type: string;\n props?: Record<string, unknown>;\n styles?: ResponsiveStyles;\n animation?: AnimationConfig;\n actions?: ActionPipeline[];\n formConfig?: FormConfig;\n children?: Node[];\n};\n\n/**\n * Recursive Node Schema\n * Represents any element/node in the document tree.\n * Node IDs are deterministic, independent of React keys, and unique across the document.\n */\nexport const NodeSchema: z.ZodType<Node> = z.lazy(() =>\n z.object({\n id: z.string().min(1, 'Node ID must be a non-empty string'),\n type: z.string().min(1, 'Node type must be a non-empty string'),\n props: z.record(z.string(), z.unknown()).optional().default({}),\n styles: ResponsiveStylesSchema.optional().default({}),\n animation: AnimationConfigSchema.optional(),\n actions: z.array(ActionPipelineSchema).optional(),\n formConfig: FormConfigSchema.optional(),\n children: z.array(NodeSchema).optional().default([]),\n }),\n);\n\nexport type RootPageNode = Node & { type: 'page' };\n\n/**\n * Root Page Node Schema\n * The root node of a PageDocument must be of type 'page'.\n */\nexport const RootPageNodeSchema: z.ZodType<RootPageNode> = NodeSchema.refine(\n (node): node is RootPageNode => node.type === 'page',\n {\n message: 'Root node must have type \"page\"',\n path: ['type'],\n },\n);\n\n\n/**\n * Document Metadata Schema\n * Pure serializable metadata for the document.\n */\nexport const DocumentMetadataSchema = z.object({\n title: z.string().min(1, 'Title is required').default('Untitled Page'),\n description: z.string().optional().default(''),\n author: z.string().optional().default(''),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n tags: z.array(z.string()).optional().default([]),\n category: z.string().optional().default('general'),\n version: z.string().optional().default('1.0.0'),\n custom: z.record(z.string(), z.unknown()).optional(),\n tracking: TrackingConfigSchema.optional(),\n});\n\nexport type DocumentMetadata = z.infer<typeof DocumentMetadataSchema>;\n\n/**\n * Page Document Schema v1\n * Root portable document structure:\n * - schema: strictly \"stora.page\"\n * - version: schema version string (e.g. \"1.0.0\")\n * - metadata: serializable metadata\n * - document: root page node\n * - tracking: optional dynamic pixel & CAPI tracking configuration\n * - theme: optional design tokens (colors/fonts/radii/spacing), emitted as CSS custom\n * properties and referenced from node styles as `var(--kb-color-<key>)` (STORA-551)\n */\nexport const PageDocumentSchema = z.object({\n schema: z.literal(SCHEMA_NAME),\n version: z.string().min(1, 'Schema version is required').default(CURRENT_SCHEMA_VERSION),\n metadata: DocumentMetadataSchema.optional(),\n tracking: TrackingConfigSchema.optional(),\n theme: ThemeSchema.optional(),\n document: RootPageNodeSchema,\n});\n\nexport type PageDocument = z.infer<typeof PageDocumentSchema>;\n\nexport const PROJECT_SCHEMA_NAME = 'stora.project' as const;\nexport const CURRENT_PROJECT_SCHEMA_VERSION = '1.0.0' as const;\n\n/**\n * Node type used as the in-tree placeholder left behind when a subtree is detached\n * into its own artboard. It carries no children — the real content lives in the\n * artboard named by `props.artboardId`.\n */\nexport const ARTBOARD_REFERENCE_NODE_TYPE = 'artboard-reference' as const;\n\n/**\n * Artboard Type Schema\n * - 'page': a routable page surface (has a slug)\n * - 'component': a detached surface rendered as an overlay/portal at runtime\n * (modal, drawer, collapsible, or any block the author detached), reached by `triggerId`\n */\nexport const ArtboardTypeSchema = z.enum(['page', 'component']);\n\nexport type ArtboardType = z.infer<typeof ArtboardTypeSchema>;\n\n/**\n * Artboard Schema\n * One top-level surface on the builder canvas. Each artboard embeds a complete\n * PageDocument so that every existing document command, tree utility, validator,\n * and history engine keeps operating on exactly the shape it already understands.\n *\n * Component artboards always wrap their detached node as the sole child of a\n * synthetic `type: 'page'` root, so the root-type constraint never has to be relaxed.\n */\nexport const ArtboardSchema = z.object({\n id: z.string().min(1, 'Artboard ID is required'),\n name: z.string().min(1, 'Artboard name is required'),\n artboardType: ArtboardTypeSchema,\n /** Route for page artboards (e.g. \"/about\"). */\n slug: z.string().optional(),\n /**\n * For component artboards: the id that `open_modal` / `close_modal` actions target.\n * Mirrors the detached node's own `props.modalId` so ModalManager keeps working unchanged.\n */\n triggerId: z.string().optional(),\n /**\n * Viewport/breakpoint this artboard is currently authored at. Declared inline\n * (rather than imported) because viewport is otherwise an editor/renderer concept.\n */\n viewport: z.enum(['desktop', 'tablet', 'mobile']).optional(),\n /** Persisted artboard width in px, matching the canvas ViewportResizer's `width`. */\n width: z.number().positive().optional(),\n /**\n * Free position on the builder's infinite canvas, in unscaled canvas px. Absent means\n * \"not placed yet\" — the canvas then falls back to laying the artboard out in a row.\n */\n position: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n document: PageDocumentSchema,\n});\n\nexport type Artboard = z.infer<typeof ArtboardSchema>;\n\n/**\n * Project Document Schema\n * Root portable structure holding many artboards:\n * - schema: strictly \"stora.project\" (distinct from the single-page \"stora.page\")\n * - version: project schema version string\n * - metadata: serializable metadata\n * - artboards: one or more page/component surfaces\n * - activeArtboardId: which artboard the editor should open\n */\nexport const ProjectDocumentSchema = z.object({\n schema: z.literal(PROJECT_SCHEMA_NAME),\n version: z.string().min(1, 'Schema version is required').default(CURRENT_PROJECT_SCHEMA_VERSION),\n metadata: DocumentMetadataSchema.optional(),\n tracking: TrackingConfigSchema.optional(),\n artboards: z.array(ArtboardSchema).min(1, 'A project needs at least one artboard'),\n activeArtboardId: z.string().optional(),\n});\n\nexport type ProjectDocument = z.infer<typeof ProjectDocumentSchema>;\n\n/**\n * Type guards\n */\nexport function isAssetReference(value: unknown): value is AssetReference {\n return AssetReferenceSchema.safeParse(value).success;\n}\n\nexport function isVariableBinding(value: unknown): value is VariableBinding {\n return VariableBindingSchema.safeParse(value).success;\n}\n\nexport function isActionBinding(value: unknown): value is ActionBinding {\n return ActionBindingSchema.safeParse(value).success;\n}\n\nexport function isAnimationConfig(value: unknown): value is AnimationConfig {\n return AnimationConfigSchema.safeParse(value).success;\n}\n\nexport function isProjectDocument(value: unknown): value is ProjectDocument {\n return ProjectDocumentSchema.safeParse(value).success;\n}\n\n/**\n * Cheap structural sniff used by the loader to route a raw payload to either the\n * project pipeline or the legacy single-page pipeline, before any parsing happens.\n * Intentionally does not validate — a malformed project must still be routed to the\n * project parser so its own errors surface, rather than being silently treated as a page.\n */\nexport function looksLikeProjectDocument(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { schema?: unknown; artboards?: unknown };\n return candidate.schema === PROJECT_SCHEMA_NAME || Array.isArray(candidate.artboards);\n}\n\n/**\n * Node type guard for the in-tree placeholder that points at a detached artboard.\n */\nexport function isArtboardReferenceNode(node: Node): boolean {\n return node.type === ARTBOARD_REFERENCE_NODE_TYPE;\n}\n\n/**\n * Deterministic Node ID Generator\n * Generates predictable IDs based on prefix and an index/identifier (not bound to React keys).\n */\nexport function generateDeterministicNodeId(prefix: string, indexOrKey: number | string): string {\n const cleanPrefix = prefix.toLowerCase().replace(/[^a-z0-9_-]/g, '-');\n return `${cleanPrefix}_${indexOrKey}`;\n}\n\n/**\n * Collect all Node IDs in a node tree\n */\nexport function collectNodeIds(node: Node): string[] {\n const ids: string[] = [node.id];\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n ids.push(...collectNodeIds(child));\n }\n }\n return ids;\n}\n\n/**\n * Validate Node ID uniqueness across a node tree or document\n */\nexport function validateNodeIdUniqueness(node: Node): { valid: boolean; duplicateIds: string[] } {\n const allIds = collectNodeIds(node);\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const id of allIds) {\n if (seen.has(id)) {\n duplicates.add(id);\n } else {\n seen.add(id);\n }\n }\n\n return {\n valid: duplicates.size === 0,\n duplicateIds: Array.from(duplicates),\n };\n}\n","import { z } from 'zod';\nimport { SCHEMA_NAME } from './document';\n\nexport const ManifestAssetItemSchema = z.object({\n id: z.string().min(1, 'Asset ID cannot be empty'),\n path: z.string().min(1, 'Asset archive path cannot be empty'),\n mimeType: z.string().min(1, 'MIME type cannot be empty'),\n size: z.number().nonnegative('Asset size must be non-negative'),\n checksum: z.string().optional(),\n});\n\nexport type ManifestAssetItem = z.infer<typeof ManifestAssetItemSchema>;\n\nexport const ManifestSchema = z.object({\n schema: z.literal(SCHEMA_NAME).default(SCHEMA_NAME),\n schemaVersion: z.string().min(1, 'Schema version cannot be empty').default('1.0.0'),\n packageVersion: z.string().min(1, 'Package version cannot be empty').default('1.0.0'),\n builderCompatibility: z.string().default('>=0.1.0'),\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n assets: z.array(ManifestAssetItemSchema).default([]),\n createdAt: z.string().optional(),\n});\n\nexport type Manifest = z.infer<typeof ManifestSchema>;\n\nexport function isManifest(value: unknown): value is Manifest {\n return ManifestSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\nimport { AssetReferenceSchema, PageDocumentSchema, type AssetReference, type PageDocument } from './document';\n\n/**\n * Regex for screening dangerous URI schemes and payloads in thumbnail URLs.\n * Rejects javascript:, vbscript:, data: URIs that are not images (e.g. data:text/html),\n * and embedded <script> tags.\n */\nconst DANGEROUS_URI_PATTERN = /^(javascript:|vbscript:|data:(?!image\\/))|<script/i;\n\n/**\n * Validates a string as a safe URL or safe asset path.\n */\nexport function isSafeThumbnailUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n const trimmed = url.trim();\n if (trimmed.length === 0) return false;\n if (DANGEROUS_URI_PATTERN.test(trimmed)) return false;\n return true;\n}\n\n/**\n * Safe Thumbnail URL String Schema\n */\nexport const SafeThumbnailUrlSchema = z.string().min(1, 'Thumbnail URL cannot be empty').refine(\n (url) => isSafeThumbnailUrl(url),\n { message: 'Thumbnail URL contains an unsafe protocol or payload' }\n);\n\n/**\n * Safe Thumbnail Object Schema\n */\nexport const SafeThumbnailObjectSchema = z.object({\n url: SafeThumbnailUrlSchema,\n alt: z.string().optional(),\n width: z.number().positive().optional(),\n height: z.number().positive().optional(),\n});\n\nexport type SafeThumbnailObject = z.infer<typeof SafeThumbnailObjectSchema>;\n\n/**\n * Safe Thumbnail Schema (AssetReference | safe URL string | safe thumbnail object)\n */\nexport const SafeThumbnailSchema = z.union([\n AssetReferenceSchema,\n SafeThumbnailObjectSchema,\n SafeThumbnailUrlSchema,\n]);\n\nexport type SafeThumbnail = AssetReference | SafeThumbnailObject | string;\n\n/**\n * Template Package Reference Schema\n * Points to an external or archived .stora / JSON package file.\n */\nexport const TemplatePackageRefSchema = z.object({\n path: z.string().optional(),\n url: SafeThumbnailUrlSchema.optional(),\n checksum: z.string().optional(),\n format: z.enum(['stora', 'json']).default('stora'),\n});\n\nexport type TemplatePackageRef = z.infer<typeof TemplatePackageRefSchema>;\n\n/**\n * Template Requirements Schema\n * Declares custom components and host capabilities required by this template.\n */\nexport const TemplateRequirementsSchema = z.object({\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n});\n\nexport type TemplateRequirements = z.infer<typeof TemplateRequirementsSchema>;\n\n/**\n * Template Record Schema v1\n * Represents a reusable page template with full metadata, safe thumbnail,\n * component/capability requirements, and snapshot document / package reference.\n */\nexport const TemplateRecordSchema = z.object({\n id: z.string().min(1, 'Template ID must be a non-empty string'),\n name: z.string().min(1, 'Template name must be a non-empty string'),\n description: z.string().optional().default(''),\n category: z.string().optional().default('general'),\n tags: z.array(z.string()).optional().default([]),\n thumbnail: SafeThumbnailSchema.optional(),\n author: z.string().optional().default(''),\n version: z.string().optional().default('1.0.0'),\n document: PageDocumentSchema.optional(),\n packageReference: TemplatePackageRefSchema.optional(),\n requirements: TemplateRequirementsSchema.default({\n requiredComponents: [],\n requiredCapabilities: [],\n }),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n custom: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type TemplateRecord = z.infer<typeof TemplateRecordSchema>;\n\n/**\n * Type guard for TemplateRecord\n */\nexport function isTemplateRecord(value: unknown): value is TemplateRecord {\n return TemplateRecordSchema.safeParse(value).success;\n}\n\n/**\n * Type guard for SafeThumbnail\n */\nexport function isSafeThumbnail(value: unknown): value is SafeThumbnail {\n return SafeThumbnailSchema.safeParse(value).success;\n}\n\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z"]}
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { ActionPipeline } from './actions';
3
3
  import { FormConfig } from './form';
4
4
  export declare const SCHEMA_NAME: "stora.page";
5
- export declare const CURRENT_SCHEMA_VERSION: "1.0.0";
5
+ export declare const CURRENT_SCHEMA_VERSION: "1.2.0";
6
6
  /**
7
7
  * Asset Reference Schema
8
8
  * Represents a reference to an asset stored either locally within the .stora package or hosted externally.
@@ -184,37 +184,28 @@ export declare const DocumentMetadataSchema: z.ZodObject<{
184
184
  credentialId: z.ZodOptional<z.ZodString>;
185
185
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
186
186
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
187
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
188
187
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
189
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
190
188
  }, z.core.$strip>>;
191
189
  google: z.ZodOptional<z.ZodObject<{
192
190
  enabled: z.ZodDefault<z.ZodBoolean>;
193
191
  credentialId: z.ZodOptional<z.ZodString>;
194
192
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
195
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
196
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
197
193
  }, z.core.$strip>>;
198
194
  gtm: z.ZodOptional<z.ZodObject<{
199
195
  enabled: z.ZodDefault<z.ZodBoolean>;
200
196
  credentialId: z.ZodOptional<z.ZodString>;
201
197
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
202
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
203
198
  }, z.core.$strip>>;
204
199
  tiktok: z.ZodOptional<z.ZodObject<{
205
200
  enabled: z.ZodDefault<z.ZodBoolean>;
206
201
  credentialId: z.ZodOptional<z.ZodString>;
207
202
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
208
203
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
209
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
210
204
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
211
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
212
205
  }, z.core.$strip>>;
213
206
  custom: z.ZodOptional<z.ZodObject<{
214
207
  enabled: z.ZodDefault<z.ZodBoolean>;
215
208
  credentialId: z.ZodOptional<z.ZodString>;
216
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
217
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
218
209
  }, z.core.$strip>>;
219
210
  }, z.core.$strip>>>;
220
211
  }, z.core.$strip>>;
@@ -228,6 +219,8 @@ export type DocumentMetadata = z.infer<typeof DocumentMetadataSchema>;
228
219
  * - metadata: serializable metadata
229
220
  * - document: root page node
230
221
  * - tracking: optional dynamic pixel & CAPI tracking configuration
222
+ * - theme: optional design tokens (colors/fonts/radii/spacing), emitted as CSS custom
223
+ * properties and referenced from node styles as `var(--kb-color-<key>)` (STORA-551)
231
224
  */
232
225
  export declare const PageDocumentSchema: z.ZodObject<{
233
226
  schema: z.ZodLiteral<"stora.page">;
@@ -257,37 +250,28 @@ export declare const PageDocumentSchema: z.ZodObject<{
257
250
  credentialId: z.ZodOptional<z.ZodString>;
258
251
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
259
252
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
260
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
261
253
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
262
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
263
254
  }, z.core.$strip>>;
264
255
  google: z.ZodOptional<z.ZodObject<{
265
256
  enabled: z.ZodDefault<z.ZodBoolean>;
266
257
  credentialId: z.ZodOptional<z.ZodString>;
267
258
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
268
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
269
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
270
259
  }, z.core.$strip>>;
271
260
  gtm: z.ZodOptional<z.ZodObject<{
272
261
  enabled: z.ZodDefault<z.ZodBoolean>;
273
262
  credentialId: z.ZodOptional<z.ZodString>;
274
263
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
275
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
276
264
  }, z.core.$strip>>;
277
265
  tiktok: z.ZodOptional<z.ZodObject<{
278
266
  enabled: z.ZodDefault<z.ZodBoolean>;
279
267
  credentialId: z.ZodOptional<z.ZodString>;
280
268
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
281
269
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
282
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
283
270
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
284
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
285
271
  }, z.core.$strip>>;
286
272
  custom: z.ZodOptional<z.ZodObject<{
287
273
  enabled: z.ZodDefault<z.ZodBoolean>;
288
274
  credentialId: z.ZodOptional<z.ZodString>;
289
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
290
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
291
275
  }, z.core.$strip>>;
292
276
  }, z.core.$strip>>>;
293
277
  }, z.core.$strip>>;
@@ -307,40 +291,37 @@ export declare const PageDocumentSchema: z.ZodObject<{
307
291
  credentialId: z.ZodOptional<z.ZodString>;
308
292
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
309
293
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
310
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
311
294
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
312
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
313
295
  }, z.core.$strip>>;
314
296
  google: z.ZodOptional<z.ZodObject<{
315
297
  enabled: z.ZodDefault<z.ZodBoolean>;
316
298
  credentialId: z.ZodOptional<z.ZodString>;
317
299
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
318
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
319
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
320
300
  }, z.core.$strip>>;
321
301
  gtm: z.ZodOptional<z.ZodObject<{
322
302
  enabled: z.ZodDefault<z.ZodBoolean>;
323
303
  credentialId: z.ZodOptional<z.ZodString>;
324
304
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
325
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
326
305
  }, z.core.$strip>>;
327
306
  tiktok: z.ZodOptional<z.ZodObject<{
328
307
  enabled: z.ZodDefault<z.ZodBoolean>;
329
308
  credentialId: z.ZodOptional<z.ZodString>;
330
309
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
331
310
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
332
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
333
311
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
334
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
335
312
  }, z.core.$strip>>;
336
313
  custom: z.ZodOptional<z.ZodObject<{
337
314
  enabled: z.ZodDefault<z.ZodBoolean>;
338
315
  credentialId: z.ZodOptional<z.ZodString>;
339
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
340
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
341
316
  }, z.core.$strip>>;
342
317
  }, z.core.$strip>>>;
343
318
  }, z.core.$strip>>;
319
+ theme: z.ZodOptional<z.ZodObject<{
320
+ colors: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
321
+ fonts: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
322
+ radii: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
323
+ spacing: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
324
+ }, z.core.$strip>>;
344
325
  document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
345
326
  }, z.core.$strip>;
346
327
  export type PageDocument = z.infer<typeof PageDocumentSchema>;
@@ -419,37 +400,28 @@ export declare const ArtboardSchema: z.ZodObject<{
419
400
  credentialId: z.ZodOptional<z.ZodString>;
420
401
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
421
402
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
422
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
423
403
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
424
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
425
404
  }, z.core.$strip>>;
426
405
  google: z.ZodOptional<z.ZodObject<{
427
406
  enabled: z.ZodDefault<z.ZodBoolean>;
428
407
  credentialId: z.ZodOptional<z.ZodString>;
429
408
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
430
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
431
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
432
409
  }, z.core.$strip>>;
433
410
  gtm: z.ZodOptional<z.ZodObject<{
434
411
  enabled: z.ZodDefault<z.ZodBoolean>;
435
412
  credentialId: z.ZodOptional<z.ZodString>;
436
413
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
437
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
438
414
  }, z.core.$strip>>;
439
415
  tiktok: z.ZodOptional<z.ZodObject<{
440
416
  enabled: z.ZodDefault<z.ZodBoolean>;
441
417
  credentialId: z.ZodOptional<z.ZodString>;
442
418
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
443
419
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
444
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
445
420
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
446
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
447
421
  }, z.core.$strip>>;
448
422
  custom: z.ZodOptional<z.ZodObject<{
449
423
  enabled: z.ZodDefault<z.ZodBoolean>;
450
424
  credentialId: z.ZodOptional<z.ZodString>;
451
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
452
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
453
425
  }, z.core.$strip>>;
454
426
  }, z.core.$strip>>>;
455
427
  }, z.core.$strip>>;
@@ -469,40 +441,37 @@ export declare const ArtboardSchema: z.ZodObject<{
469
441
  credentialId: z.ZodOptional<z.ZodString>;
470
442
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
471
443
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
472
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
473
444
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
474
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
475
445
  }, z.core.$strip>>;
476
446
  google: z.ZodOptional<z.ZodObject<{
477
447
  enabled: z.ZodDefault<z.ZodBoolean>;
478
448
  credentialId: z.ZodOptional<z.ZodString>;
479
449
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
480
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
481
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
482
450
  }, z.core.$strip>>;
483
451
  gtm: z.ZodOptional<z.ZodObject<{
484
452
  enabled: z.ZodDefault<z.ZodBoolean>;
485
453
  credentialId: z.ZodOptional<z.ZodString>;
486
454
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
487
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
488
455
  }, z.core.$strip>>;
489
456
  tiktok: z.ZodOptional<z.ZodObject<{
490
457
  enabled: z.ZodDefault<z.ZodBoolean>;
491
458
  credentialId: z.ZodOptional<z.ZodString>;
492
459
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
493
460
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
494
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
495
461
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
496
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
497
462
  }, z.core.$strip>>;
498
463
  custom: z.ZodOptional<z.ZodObject<{
499
464
  enabled: z.ZodDefault<z.ZodBoolean>;
500
465
  credentialId: z.ZodOptional<z.ZodString>;
501
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
502
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
503
466
  }, z.core.$strip>>;
504
467
  }, z.core.$strip>>>;
505
468
  }, z.core.$strip>>;
469
+ theme: z.ZodOptional<z.ZodObject<{
470
+ colors: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
471
+ fonts: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
472
+ radii: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
473
+ spacing: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
474
+ }, z.core.$strip>>;
506
475
  document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
507
476
  }, z.core.$strip>;
508
477
  }, z.core.$strip>;
@@ -544,37 +513,28 @@ export declare const ProjectDocumentSchema: z.ZodObject<{
544
513
  credentialId: z.ZodOptional<z.ZodString>;
545
514
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
546
515
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
547
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
548
516
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
549
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
550
517
  }, z.core.$strip>>;
551
518
  google: z.ZodOptional<z.ZodObject<{
552
519
  enabled: z.ZodDefault<z.ZodBoolean>;
553
520
  credentialId: z.ZodOptional<z.ZodString>;
554
521
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
555
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
556
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
557
522
  }, z.core.$strip>>;
558
523
  gtm: z.ZodOptional<z.ZodObject<{
559
524
  enabled: z.ZodDefault<z.ZodBoolean>;
560
525
  credentialId: z.ZodOptional<z.ZodString>;
561
526
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
562
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
563
527
  }, z.core.$strip>>;
564
528
  tiktok: z.ZodOptional<z.ZodObject<{
565
529
  enabled: z.ZodDefault<z.ZodBoolean>;
566
530
  credentialId: z.ZodOptional<z.ZodString>;
567
531
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
568
532
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
569
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
570
533
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
571
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
572
534
  }, z.core.$strip>>;
573
535
  custom: z.ZodOptional<z.ZodObject<{
574
536
  enabled: z.ZodDefault<z.ZodBoolean>;
575
537
  credentialId: z.ZodOptional<z.ZodString>;
576
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
577
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
578
538
  }, z.core.$strip>>;
579
539
  }, z.core.$strip>>>;
580
540
  }, z.core.$strip>>;
@@ -594,37 +554,28 @@ export declare const ProjectDocumentSchema: z.ZodObject<{
594
554
  credentialId: z.ZodOptional<z.ZodString>;
595
555
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
596
556
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
597
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
598
557
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
599
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
600
558
  }, z.core.$strip>>;
601
559
  google: z.ZodOptional<z.ZodObject<{
602
560
  enabled: z.ZodDefault<z.ZodBoolean>;
603
561
  credentialId: z.ZodOptional<z.ZodString>;
604
562
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
605
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
606
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
607
563
  }, z.core.$strip>>;
608
564
  gtm: z.ZodOptional<z.ZodObject<{
609
565
  enabled: z.ZodDefault<z.ZodBoolean>;
610
566
  credentialId: z.ZodOptional<z.ZodString>;
611
567
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
612
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
613
568
  }, z.core.$strip>>;
614
569
  tiktok: z.ZodOptional<z.ZodObject<{
615
570
  enabled: z.ZodDefault<z.ZodBoolean>;
616
571
  credentialId: z.ZodOptional<z.ZodString>;
617
572
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
618
573
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
619
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
620
574
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
621
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
622
575
  }, z.core.$strip>>;
623
576
  custom: z.ZodOptional<z.ZodObject<{
624
577
  enabled: z.ZodDefault<z.ZodBoolean>;
625
578
  credentialId: z.ZodOptional<z.ZodString>;
626
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
627
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
628
579
  }, z.core.$strip>>;
629
580
  }, z.core.$strip>>>;
630
581
  }, z.core.$strip>>;
@@ -675,37 +626,28 @@ export declare const ProjectDocumentSchema: z.ZodObject<{
675
626
  credentialId: z.ZodOptional<z.ZodString>;
676
627
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
677
628
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
678
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
679
629
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
680
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
681
630
  }, z.core.$strip>>;
682
631
  google: z.ZodOptional<z.ZodObject<{
683
632
  enabled: z.ZodDefault<z.ZodBoolean>;
684
633
  credentialId: z.ZodOptional<z.ZodString>;
685
634
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
686
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
687
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
688
635
  }, z.core.$strip>>;
689
636
  gtm: z.ZodOptional<z.ZodObject<{
690
637
  enabled: z.ZodDefault<z.ZodBoolean>;
691
638
  credentialId: z.ZodOptional<z.ZodString>;
692
639
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
693
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
694
640
  }, z.core.$strip>>;
695
641
  tiktok: z.ZodOptional<z.ZodObject<{
696
642
  enabled: z.ZodDefault<z.ZodBoolean>;
697
643
  credentialId: z.ZodOptional<z.ZodString>;
698
644
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
699
645
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
700
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
701
646
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
702
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
703
647
  }, z.core.$strip>>;
704
648
  custom: z.ZodOptional<z.ZodObject<{
705
649
  enabled: z.ZodDefault<z.ZodBoolean>;
706
650
  credentialId: z.ZodOptional<z.ZodString>;
707
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
708
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
709
651
  }, z.core.$strip>>;
710
652
  }, z.core.$strip>>>;
711
653
  }, z.core.$strip>>;
@@ -725,40 +667,37 @@ export declare const ProjectDocumentSchema: z.ZodObject<{
725
667
  credentialId: z.ZodOptional<z.ZodString>;
726
668
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
727
669
  capiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
728
- capiAccessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
729
670
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
730
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
731
671
  }, z.core.$strip>>;
732
672
  google: z.ZodOptional<z.ZodObject<{
733
673
  enabled: z.ZodDefault<z.ZodBoolean>;
734
674
  credentialId: z.ZodOptional<z.ZodString>;
735
675
  measurementId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
736
- measurementProtocolSecret: z.ZodDefault<z.ZodOptional<z.ZodString>>;
737
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
738
676
  }, z.core.$strip>>;
739
677
  gtm: z.ZodOptional<z.ZodObject<{
740
678
  enabled: z.ZodDefault<z.ZodBoolean>;
741
679
  credentialId: z.ZodOptional<z.ZodString>;
742
680
  containerId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
743
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
744
681
  }, z.core.$strip>>;
745
682
  tiktok: z.ZodOptional<z.ZodObject<{
746
683
  enabled: z.ZodDefault<z.ZodBoolean>;
747
684
  credentialId: z.ZodOptional<z.ZodString>;
748
685
  pixelId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
749
686
  eventsApiEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
750
- accessToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
751
687
  testEventCode: z.ZodDefault<z.ZodOptional<z.ZodString>>;
752
- serverRelayUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
753
688
  }, z.core.$strip>>;
754
689
  custom: z.ZodOptional<z.ZodObject<{
755
690
  enabled: z.ZodDefault<z.ZodBoolean>;
756
691
  credentialId: z.ZodOptional<z.ZodString>;
757
- endpointUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
758
- headers: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
759
692
  }, z.core.$strip>>;
760
693
  }, z.core.$strip>>>;
761
694
  }, z.core.$strip>>;
695
+ theme: z.ZodOptional<z.ZodObject<{
696
+ colors: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
697
+ fonts: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
698
+ radii: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
699
+ spacing: z.ZodOptional<z.ZodRecord<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
700
+ }, z.core.$strip>>;
762
701
  document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
763
702
  }, z.core.$strip>;
764
703
  }, z.core.$strip>>;