@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.
- package/README.md +24 -0
- package/dist/actions.d.ts +26 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/breakpoints.d.ts +35 -0
- package/dist/breakpoints.d.ts.map +1 -0
- package/dist/builtin-components.d.ts +17 -0
- package/dist/builtin-components.d.ts.map +1 -0
- package/dist/canonical-props.d.ts +39 -0
- package/dist/canonical-props.d.ts.map +1 -0
- package/dist/chunk-MT3M7D67.js +1041 -0
- package/dist/chunk-MT3M7D67.js.map +1 -0
- package/dist/chunk-PECTZDCI.js +1038 -0
- package/dist/chunk-PECTZDCI.js.map +1 -0
- package/dist/document.d.ts +21 -82
- package/dist/document.d.ts.map +1 -1
- package/dist/index.cjs +700 -169
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +447 -747
- package/dist/index.js.map +1 -1
- package/dist/json-schema.d.ts +323 -10
- package/dist/json-schema.d.ts.map +1 -1
- package/dist/template.d.ts +6 -18
- package/dist/template.d.ts.map +1 -1
- package/dist/theme.d.ts +80 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/tracking.d.ts +178 -31
- package/dist/tracking.d.ts.map +1 -1
- package/dist/types.cjs +19 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.ts +331 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.cjs +715 -0
- package/dist/validate.cjs.map +1 -0
- package/dist/validate.d.ts +16 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +53 -0
- package/dist/validate.js.map +1 -0
- 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"]}
|
package/dist/document.d.ts
CHANGED
|
@@ -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.
|
|
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>>;
|