@kubuild/schema 0.7.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 +5 -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 -1
- package/dist/document.d.ts.map +1 -1
- package/dist/index.cjs +437 -126
- 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 +316 -819
- package/dist/index.js.map +1 -1
- package/dist/json-schema.d.ts +74 -6
- package/dist/json-schema.d.ts.map +1 -1
- package/dist/template.d.ts +6 -0
- 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/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.
|
|
@@ -219,6 +219,8 @@ export type DocumentMetadata = z.infer<typeof DocumentMetadataSchema>;
|
|
|
219
219
|
* - metadata: serializable metadata
|
|
220
220
|
* - document: root page node
|
|
221
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)
|
|
222
224
|
*/
|
|
223
225
|
export declare const PageDocumentSchema: z.ZodObject<{
|
|
224
226
|
schema: z.ZodLiteral<"stora.page">;
|
|
@@ -314,6 +316,12 @@ export declare const PageDocumentSchema: z.ZodObject<{
|
|
|
314
316
|
}, z.core.$strip>>;
|
|
315
317
|
}, z.core.$strip>>>;
|
|
316
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>>;
|
|
317
325
|
document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
|
|
318
326
|
}, z.core.$strip>;
|
|
319
327
|
export type PageDocument = z.infer<typeof PageDocumentSchema>;
|
|
@@ -458,6 +466,12 @@ export declare const ArtboardSchema: z.ZodObject<{
|
|
|
458
466
|
}, z.core.$strip>>;
|
|
459
467
|
}, z.core.$strip>>>;
|
|
460
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>>;
|
|
461
475
|
document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
|
|
462
476
|
}, z.core.$strip>;
|
|
463
477
|
}, z.core.$strip>;
|
|
@@ -678,6 +692,12 @@ export declare const ProjectDocumentSchema: z.ZodObject<{
|
|
|
678
692
|
}, z.core.$strip>>;
|
|
679
693
|
}, z.core.$strip>>>;
|
|
680
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>>;
|
|
681
701
|
document: z.ZodType<RootPageNode, unknown, z.core.$ZodTypeInternals<RootPageNode, unknown>>;
|
|
682
702
|
}, z.core.$strip>;
|
|
683
703
|
}, z.core.$strip>>;
|
package/dist/document.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAwB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|