@kubuild/schema 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/actions.d.cts +473 -0
  2. package/dist/actions.d.cts.map +1 -0
  3. package/dist/breakpoints.d.cts +35 -0
  4. package/dist/breakpoints.d.cts.map +1 -0
  5. package/dist/builtin-components.d.cts +17 -0
  6. package/dist/builtin-components.d.cts.map +1 -0
  7. package/dist/canonical-props.d.cts +39 -0
  8. package/dist/canonical-props.d.cts.map +1 -0
  9. package/dist/chunk-IXTL6BV4.js +1041 -0
  10. package/dist/chunk-IXTL6BV4.js.map +1 -0
  11. package/dist/document.d.cts +742 -0
  12. package/dist/document.d.cts.map +1 -0
  13. package/dist/document.d.ts +2 -2
  14. package/dist/document.d.ts.map +1 -1
  15. package/dist/fixtures.d.cts +3 -0
  16. package/dist/fixtures.d.cts.map +1 -0
  17. package/dist/fixtures.d.ts +1 -1
  18. package/dist/fixtures.d.ts.map +1 -1
  19. package/dist/form.d.cts +129 -0
  20. package/dist/form.d.cts.map +1 -0
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +13 -0
  23. package/dist/index.d.cts.map +1 -0
  24. package/dist/index.d.ts +12 -12
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/json-schema.d.cts +2066 -0
  29. package/dist/json-schema.d.cts.map +1 -0
  30. package/dist/manifest.d.cts +28 -0
  31. package/dist/manifest.d.cts.map +1 -0
  32. package/dist/template.d.cts +213 -0
  33. package/dist/template.d.cts.map +1 -0
  34. package/dist/template.d.ts +2 -2
  35. package/dist/template.d.ts.map +1 -1
  36. package/dist/theme.d.cts +80 -0
  37. package/dist/theme.d.cts.map +1 -0
  38. package/dist/tracking.d.cts +348 -0
  39. package/dist/tracking.d.cts.map +1 -0
  40. package/dist/types.d.cts +331 -0
  41. package/dist/types.d.cts.map +1 -0
  42. package/dist/validate.cjs.map +1 -1
  43. package/dist/validate.d.cts +16 -0
  44. package/dist/validate.d.cts.map +1 -0
  45. package/dist/validate.d.ts +2 -2
  46. package/dist/validate.d.ts.map +1 -1
  47. package/dist/validate.js +1 -1
  48. package/dist/validate.js.map +1 -1
  49. package/package.json +26 -11
@@ -0,0 +1,13 @@
1
+ export * from './document.cjs';
2
+ export * from './breakpoints.cjs';
3
+ export * from './actions.cjs';
4
+ export * from './tracking.cjs';
5
+ export * from './form.cjs';
6
+ export * from './manifest.cjs';
7
+ export * from './template.cjs';
8
+ export * from './fixtures.cjs';
9
+ export * from './json-schema.cjs';
10
+ export * from './builtin-components.cjs';
11
+ export * from './theme.cjs';
12
+ export * from './canonical-props.cjs';
13
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export * from './document';
2
- export * from './breakpoints';
3
- export * from './actions';
4
- export * from './tracking';
5
- export * from './form';
6
- export * from './manifest';
7
- export * from './template';
8
- export * from './fixtures';
9
- export * from './json-schema';
10
- export * from './builtin-components';
11
- export * from './theme';
12
- export * from './canonical-props';
1
+ export * from './document.js';
2
+ export * from './breakpoints.js';
3
+ export * from './actions.js';
4
+ export * from './tracking.js';
5
+ export * from './form.js';
6
+ export * from './manifest.js';
7
+ export * from './template.js';
8
+ export * from './fixtures.js';
9
+ export * from './json-schema.js';
10
+ export * from './builtin-components.js';
11
+ export * from './theme.js';
12
+ export * from './canonical-props.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -123,7 +123,7 @@ import {
123
123
  themeTokenRef,
124
124
  validateActionStepPayload,
125
125
  validateNodeIdUniqueness
126
- } from "./chunk-MT3M7D67.js";
126
+ } from "./chunk-IXTL6BV4.js";
127
127
 
128
128
  // src/breakpoints.ts
129
129
  var BREAKPOINTS = Object.freeze({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/breakpoints.ts","../src/fixtures/starter-page.json","../src/fixtures.ts","../src/json-schema.ts","../src/builtin-components.ts","../src/canonical-props.ts"],"sourcesContent":["/**\n * Single source of truth for responsive breakpoints (STORA-541).\n *\n * Every consumer that maps a screen width to a `ResponsiveStyles` layer — the editor's\n * viewport switcher/resizer, the runtime renderer's `@media` output, the preview adapter\n * and the static code generator — must read these values instead of hard-coding numbers.\n *\n * Ranges are disjoint and mirror the editor's per-viewport preview exactly: a viewport's\n * effective style is `base` merged with *that one* layer (tablet does not cascade into\n * mobile, desktop does not leak into tablet/mobile).\n *\n * mobile : width < 768px\n * tablet : 768 <= width < 1024px\n * desktop : 1024 <= width\n *\n * 768/1024 were chosen over the older 640/1024 code-generator values because they match\n * the published docs, the editor's existing width→viewport logic and its default tablet\n * preview width (768px), so what users see in the editor is what ships.\n */\n\n/** Viewport layers that carry breakpoint overrides (`base` applies everywhere). */\nexport type BreakpointName = 'desktop' | 'tablet' | 'mobile';\n\nexport interface BreakpointRange {\n /** Inclusive lower bound in CSS px. */\n readonly minWidth: number;\n /** Inclusive upper bound in CSS px, or `null` for unbounded. */\n readonly maxWidth: number | null;\n}\n\nexport const BREAKPOINTS: Readonly<Record<BreakpointName, BreakpointRange>> = Object.freeze({\n mobile: Object.freeze({ minWidth: 0, maxWidth: 767 }),\n tablet: Object.freeze({ minWidth: 768, maxWidth: 1023 }),\n desktop: Object.freeze({ minWidth: 1024, maxWidth: null }),\n});\n\n/** Order used for emitting CSS and iterating layers (widest first). */\nexport const BREAKPOINT_ORDER: readonly BreakpointName[] = Object.freeze([\n 'desktop',\n 'tablet',\n 'mobile',\n]);\n\n/**\n * Upper bounds are emitted as `maxWidth + 0.98px` (e.g. `767.98px`) so fractional\n * viewport widths (zoomed / high-DPI browsers) never fall in a gap between ranges.\n */\nfunction formatMaxWidth(maxWidth: number): string {\n return `${maxWidth + 0.98}px`;\n}\n\n/** CSS media query (without the `@media` keyword) for each breakpoint layer. */\nexport const BREAKPOINT_MEDIA_QUERIES: Readonly<Record<BreakpointName, string>> = Object.freeze({\n desktop: `(min-width: ${BREAKPOINTS.desktop.minWidth}px)`,\n tablet: `(min-width: ${BREAKPOINTS.tablet.minWidth}px) and (max-width: ${formatMaxWidth(\n BREAKPOINTS.tablet.maxWidth as number,\n )})`,\n mobile: `(max-width: ${formatMaxWidth(BREAKPOINTS.mobile.maxWidth as number)})`,\n});\n\n/** Resolve which breakpoint layer applies at a given viewport width in CSS px. */\nexport function getBreakpointForWidth(width: number): BreakpointName {\n if (width < BREAKPOINTS.tablet.minWidth) return 'mobile';\n if (width < BREAKPOINTS.desktop.minWidth) return 'tablet';\n return 'desktop';\n}\n","{\n \"schema\": \"stora.page\",\n \"version\": \"1.2.0\",\n \"metadata\": {\n \"title\": \"Welcome to KUBUILD\",\n \"description\": \"A starter template built with KUBUILD portable web builder\",\n \"author\": \"KUBUILD Team\",\n \"tags\": [\"landing-page\", \"starter\", \"portable\"],\n \"category\": \"landing\",\n \"version\": \"1.0.0\",\n \"createdAt\": \"2026-08-22T00:00:00.000Z\",\n \"updatedAt\": \"2026-08-22T00:00:00.000Z\"\n },\n \"document\": {\n \"id\": \"root-page\",\n \"type\": \"page\",\n \"props\": {\n \"title\": \"KUBUILD Starter Page\"\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#ffffff\",\n \"fontFamily\": \"Inter, sans-serif\",\n \"color\": \"#111827\",\n \"minHeight\": \"100vh\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-section\",\n \"type\": \"section\",\n \"props\": {},\n \"styles\": {\n \"base\": {\n \"paddingTop\": \"64px\",\n \"paddingBottom\": \"64px\",\n \"paddingLeft\": \"24px\",\n \"paddingRight\": \"24px\",\n \"backgroundColor\": \"#f8fafc\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-container\",\n \"type\": \"container\",\n \"props\": {\n \"maxWidth\": \"1200px\"\n },\n \"styles\": {\n \"base\": {\n \"margin\": \"0 auto\",\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"textAlign\": \"center\",\n \"gap\": \"24px\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-heading\",\n \"type\": \"heading\",\n \"props\": {\n \"text\": \"Build Once, Render Anywhere\",\n \"level\": 1\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"48px\",\n \"fontWeight\": \"800\",\n \"color\": \"#0f172a\",\n \"lineHeight\": \"1.2\"\n },\n \"mobile\": {\n \"fontSize\": \"32px\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-text\",\n \"type\": \"text\",\n \"props\": {\n \"as\": \"p\",\n \"text\": \"KUBUILD is an open, portable web page builder engine designed for modern web applications.\"\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"18px\",\n \"color\": \"#475569\",\n \"maxWidth\": \"680px\",\n \"lineHeight\": \"1.6\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-image\",\n \"type\": \"image\",\n \"props\": {\n \"src\": \"https://picsum.photos/200/300\",\n \"asset\": {\n \"type\": \"asset\",\n \"assetId\": \"asset_hero_graphic\",\n \"filename\": \"hero.webp\",\n \"mimeType\": \"image/webp\"\n },\n \"alt\": \"KUBUILD Platform Graphic\",\n \"width\": 640,\n \"height\": 360\n },\n \"styles\": {\n \"base\": {\n \"borderRadius\": \"12px\",\n \"maxWidth\": \"100%\",\n \"height\": \"auto\",\n \"boxShadow\": \"0 20px 25px -5px rgba(0, 0, 0, 0.1)\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-button\",\n \"type\": \"button\",\n \"props\": {\n \"label\": \"Get Started\"\n },\n \"actions\": [\n {\n \"id\": \"hero-button-click\",\n \"trigger\": \"click\",\n \"enabled\": true,\n \"steps\": [\n {\n \"id\": \"hero-button-navigate\",\n \"type\": \"navigate\",\n \"payload\": {\n \"url\": \"/docs\"\n }\n }\n ]\n }\n ],\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#2563eb\",\n \"color\": \"#ffffff\",\n \"paddingTop\": \"12px\",\n \"paddingBottom\": \"12px\",\n \"paddingLeft\": \"28px\",\n \"paddingRight\": \"28px\",\n \"borderRadius\": \"8px\",\n \"fontWeight\": \"600\",\n \"fontSize\": \"16px\",\n \"cursor\": \"pointer\",\n \"border\": \"none\"\n }\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n}\n","import starterPageData from './fixtures/starter-page.json';\nimport { PageDocument } from './document';\n\nexport const starterPageFixture: PageDocument = starterPageData as unknown as PageDocument;\n","import { z } from 'zod';\nimport {\n TrackingRelayRequestSchema,\n TrackingRelayResponseSchema,\n MetaTrackingSecretsSchema,\n GoogleTrackingSecretsSchema,\n TikTokTrackingSecretsSchema,\n CustomTrackingSecretsSchema,\n} from './tracking';\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Document v1\n * Aligned 1:1 with TypeScript PageDocument type definition.\n */\nexport const PAGE_DOCUMENT_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/page.json',\n title: 'StoraPageDocument',\n description: 'Portable Web Page Document v1 schema definition for KUBUILD',\n type: 'object',\n required: ['schema', 'version', 'document'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Identifies the document type format',\n },\n version: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Schema version of the document',\n default: '1.2.0',\n },\n metadata: {\n $ref: '#/definitions/documentMetadata',\n },\n document: {\n $ref: '#/definitions/rootPageNode',\n },\n tracking: {\n $ref: '#/definitions/trackingConfig',\n },\n theme: {\n $ref: '#/definitions/theme',\n },\n },\n definitions: {\n themeTokenMap: {\n type: 'object',\n propertyNames: { pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$' },\n additionalProperties: {\n type: ['string', 'number'],\n maxLength: 512,\n pattern: '^[^;{}<>\\\\\\\\]*$',\n },\n description: 'Design tokens keyed by name. Values must not contain ; { } < > or backslashes.',\n },\n theme: {\n type: 'object',\n description:\n 'Document design tokens, emitted as CSS custom properties (--kb-color-*, --kb-font-*, --kb-radius-*, --kb-space-*) and referenced from styles as var(--kb-color-<key>).',\n properties: {\n colors: { $ref: '#/definitions/themeTokenMap' },\n fonts: { $ref: '#/definitions/themeTokenMap' },\n radii: { $ref: '#/definitions/themeTokenMap' },\n spacing: { $ref: '#/definitions/themeTokenMap' },\n },\n additionalProperties: false,\n },\n trackingConfig: {\n type: 'object',\n description:\n 'Tracking configuration. Contains only public ids, flags and opaque credential ids — secrets are host-owned.',\n properties: {\n enabled: { type: 'boolean', default: true },\n debugMode: { type: 'boolean', default: false },\n autoPageView: { type: 'boolean', default: true },\n defaultDelivery: { type: 'string', enum: ['both', 'client_only', 'server_only'], default: 'both' },\n providers: {\n type: 'object',\n properties: {\n meta: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n pixelId: { type: 'string' },\n capiEnabled: { type: 'boolean' },\n testEventCode: { type: 'string' },\n },\n additionalProperties: false,\n },\n google: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n measurementId: { type: 'string' },\n },\n additionalProperties: false,\n },\n gtm: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n containerId: { type: 'string' },\n },\n additionalProperties: false,\n },\n tiktok: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n pixelId: { type: 'string' },\n eventsApiEnabled: { type: 'boolean' },\n testEventCode: { type: 'string' },\n },\n additionalProperties: false,\n },\n custom: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n styleValue: {\n type: ['string', 'number', 'boolean', 'null'],\n description: 'A CSS property or design token value',\n },\n styleDefinition: {\n type: 'object',\n additionalProperties: {\n $ref: '#/definitions/styleValue',\n },\n description: 'Key-value map of style properties',\n },\n responsiveStyles: {\n type: 'object',\n properties: {\n base: { $ref: '#/definitions/styleDefinition' },\n desktop: { $ref: '#/definitions/styleDefinition' },\n tablet: { $ref: '#/definitions/styleDefinition' },\n mobile: { $ref: '#/definitions/styleDefinition' },\n },\n additionalProperties: {\n $ref: '#/definitions/styleDefinition',\n },\n },\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n variableBinding: {\n type: 'object',\n required: ['type', 'key'],\n properties: {\n type: {\n type: 'string',\n const: 'variable',\n },\n key: {\n type: 'string',\n minLength: 1,\n },\n fallback: {},\n },\n additionalProperties: false,\n },\n actionBinding: {\n type: 'object',\n required: ['type'],\n properties: {\n type: {\n type: 'string',\n minLength: 1,\n },\n payload: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n animationConfig: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n default: 'none',\n description: 'Scroll entrance animation type (e.g. fade, fade-up, zoom-in, slide-left)',\n },\n duration: {\n type: 'number',\n minimum: 0,\n default: 600,\n description: 'Animation duration in milliseconds',\n },\n delay: {\n type: 'number',\n minimum: 0,\n default: 0,\n description: 'Animation delay in milliseconds',\n },\n easing: {\n type: 'string',\n default: 'ease-out',\n description: 'CSS animation easing / transition timing function',\n },\n once: {\n type: 'boolean',\n default: true,\n description: 'Whether scroll animation plays only once when entering viewport',\n },\n hoverEffect: {\n type: 'string',\n default: 'none',\n description: 'Hover micro-interaction effect (e.g. lift, scale, glow, tilt)',\n },\n loopEffect: {\n type: 'string',\n default: 'none',\n description: 'Continuous loop animation effect (e.g. pulse, bounce, spin, float)',\n },\n },\n additionalProperties: false,\n },\n actionStep: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n type: {\n type: 'string',\n 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 },\n label: { type: 'string' },\n payload: { type: 'object' },\n condition: {\n type: 'object',\n required: ['field', 'operator'],\n properties: {\n field: { type: 'string', minLength: 1 },\n operator: {\n type: 'string',\n 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 },\n value: {},\n },\n additionalProperties: false,\n },\n timeout: { type: 'number', minimum: 1 },\n continueOnError: { type: 'boolean' },\n onSuccess: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n onError: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n },\n additionalProperties: false,\n },\n actionPipeline: {\n type: 'object',\n required: ['id', 'trigger', 'steps'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n trigger: {\n type: 'string',\n enum: ['click', 'submit', 'change', 'blur', 'focus', 'load', 'expire'],\n },\n label: { type: 'string' },\n debounceMs: { type: 'number', minimum: 0 },\n preventDuplicate: { type: 'boolean' },\n enabled: { type: 'boolean', default: true },\n steps: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n minItems: 1,\n },\n },\n additionalProperties: false,\n },\n formConfig: {\n type: 'object',\n required: ['formId'],\n properties: {\n formId: {\n type: 'string',\n minLength: 1,\n },\n resetOnSubmit: { type: 'boolean', default: false },\n scrollToFirstError: { type: 'boolean', default: true },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n },\n initialValues: { type: 'object' },\n },\n additionalProperties: false,\n },\n node: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique deterministic node identifier',\n },\n type: {\n type: 'string',\n minLength: 1,\n description: 'Component type identifier',\n },\n props: {\n type: 'object',\n description: 'Component props payload and bindings',\n default: {},\n },\n styles: {\n $ref: '#/definitions/responsiveStyles',\n },\n animation: {\n $ref: '#/definitions/animationConfig',\n },\n actions: {\n type: 'array',\n items: {\n $ref: '#/definitions/actionPipeline',\n },\n description: 'Multi-step action pipelines bound to component events',\n },\n formConfig: {\n $ref: '#/definitions/formConfig',\n description: 'Form container configuration and behavior',\n },\n children: {\n type: 'array',\n items: {\n $ref: '#/definitions/node',\n },\n default: [],\n },\n },\n additionalProperties: false,\n },\n rootPageNode: {\n allOf: [\n { $ref: '#/definitions/node' },\n {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n const: 'page',\n description: 'The root node type must be \"page\"',\n },\n },\n },\n ],\n },\n documentMetadata: {\n type: 'object',\n required: ['title'],\n properties: {\n title: {\n type: 'string',\n minLength: 1,\n default: 'Untitled Page',\n },\n description: {\n type: 'string',\n default: '',\n },\n author: {\n type: 'string',\n default: '',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n category: {\n type: 'string',\n default: 'general',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n },\n custom: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getPageDocumentJsonSchema() {\n return PAGE_DOCUMENT_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Package Manifest v1\n * Aligned 1:1 with TypeScript Manifest type definition.\n */\nexport const MANIFEST_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/manifest.json',\n title: 'StoraPackageManifest',\n description: 'Portable Package Manifest v1 schema definition for KUBUILD (.stora)',\n type: 'object',\n required: ['schemaVersion', 'packageVersion', 'builderCompatibility', 'requiredComponents', 'requiredCapabilities', 'assets'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Schema identifier',\n default: 'stora.page',\n },\n schemaVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Document schema version',\n default: '1.0.0',\n },\n packageVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Package version',\n default: '1.0.0',\n },\n builderCompatibility: {\n type: 'string',\n description: 'Minimum or range of builder versions compatible with this package',\n default: '>=0.1.0',\n },\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of custom component types required by the page',\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of capabilities required by components in the page',\n default: [],\n },\n assets: {\n type: 'array',\n items: { $ref: '#/definitions/manifestAssetItem' },\n description: 'Inventory of local assets packaged within the archive',\n default: [],\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO timestamp when the package was created',\n },\n },\n definitions: {\n manifestAssetItem: {\n type: 'object',\n required: ['id', 'path', 'mimeType', 'size'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique asset identifier',\n },\n path: {\n type: 'string',\n minLength: 1,\n description: 'Relative archive path to asset file (e.g. assets/hero.png)',\n },\n mimeType: {\n type: 'string',\n minLength: 1,\n description: 'MIME type of the asset',\n },\n size: {\n type: 'number',\n minimum: 0,\n description: 'Asset size in bytes',\n },\n checksum: {\n type: 'string',\n description: 'SHA-256 or algorithm-prefixed checksum (e.g. sha256:...)',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getManifestJsonSchema() {\n return MANIFEST_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Template Record v1\n * Aligned 1:1 with TypeScript TemplateRecord type definition.\n */\nexport const TEMPLATE_RECORD_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/template.json',\n title: 'StoraTemplateRecord',\n description: 'Reusable Page Template Record v1 schema definition for KUBUILD',\n type: 'object',\n required: ['id', 'name'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique template identifier',\n },\n name: {\n type: 'string',\n minLength: 1,\n description: 'Human-readable name of the template',\n },\n description: {\n type: 'string',\n default: '',\n description: 'Detailed description of the template purpose and contents',\n },\n category: {\n type: 'string',\n default: 'general',\n description: 'Template category grouping',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n description: 'Search and filter tags',\n },\n thumbnail: {\n oneOf: [\n { $ref: '#/definitions/assetReference' },\n { $ref: '#/definitions/safeThumbnailObject' },\n { type: 'string', minLength: 1 },\n ],\n description: 'Safe preview image asset reference or URL',\n },\n author: {\n type: 'string',\n default: '',\n description: 'Template creator or team',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n description: 'Semantic version of the template',\n },\n document: {\n $ref: 'https://schema.stora.page/v1/page.json#',\n description: 'Embedded PageDocument snapshot (optional if packageReference provided)',\n },\n packageReference: {\n $ref: '#/definitions/templatePackageRef',\n description: 'External package/archive reference (optional if document provided)',\n },\n requirements: {\n $ref: '#/definitions/templateRequirements',\n description: 'Component and capability requirements for this template',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO creation timestamp',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO last updated timestamp',\n },\n custom: {\n type: 'object',\n description: 'Custom host-specific serializable metadata',\n },\n },\n definitions: {\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n safeThumbnailObject: {\n type: 'object',\n required: ['url'],\n properties: {\n url: {\n type: 'string',\n minLength: 1,\n },\n alt: {\n type: 'string',\n },\n width: {\n type: 'number',\n minimum: 1,\n },\n height: {\n type: 'number',\n minimum: 1,\n },\n },\n additionalProperties: false,\n },\n templatePackageRef: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n checksum: {\n type: 'string',\n },\n format: {\n type: 'string',\n enum: ['stora', 'json'],\n default: 'stora',\n },\n },\n additionalProperties: false,\n },\n templateRequirements: {\n type: 'object',\n properties: {\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getTemplateRecordJsonSchema() {\n return TEMPLATE_RECORD_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Action Pipeline\n * Aligned 1:1 with TypeScript ActionPipeline type definition.\n */\nexport const ACTION_PIPELINE_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/action-pipeline.json',\n title: 'StoraActionPipeline',\n description: 'Action Pipeline schema definition for KUBUILD event workflows',\n type: 'object',\n required: ['id', 'trigger', 'steps'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique pipeline identifier',\n },\n trigger: {\n type: 'string',\n enum: ['click', 'submit', 'change', 'blur', 'focus', 'load', 'expire'],\n description: 'DOM or component event that triggers the action pipeline',\n },\n label: {\n type: 'string',\n description: 'Human readable label for the action pipeline',\n },\n debounceMs: {\n type: 'number',\n minimum: 0,\n description: 'Debounce duration in milliseconds',\n },\n preventDuplicate: {\n type: 'boolean',\n description: 'Prevent concurrent duplicate pipeline executions',\n },\n enabled: {\n type: 'boolean',\n default: true,\n description: 'Whether the pipeline is currently active',\n },\n steps: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n minItems: 1,\n description: 'Ordered sequence of action steps to execute',\n },\n },\n definitions: {\n actionStep: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n type: {\n type: 'string',\n 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 },\n label: { type: 'string' },\n payload: { type: 'object' },\n condition: {\n type: 'object',\n required: ['field', 'operator'],\n properties: {\n field: { type: 'string', minLength: 1 },\n operator: {\n type: 'string',\n 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 },\n value: {},\n },\n additionalProperties: false,\n },\n timeout: { type: 'number', minimum: 1 },\n continueOnError: { type: 'boolean' },\n onSuccess: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n onError: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getActionPipelineJsonSchema() {\n return ACTION_PIPELINE_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Form Config\n * Aligned 1:1 with TypeScript FormConfig type definition.\n */\nexport const FORM_CONFIG_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/form-config.json',\n title: 'StoraFormConfig',\n description: 'Form container configuration and behavior definition for KUBUILD',\n type: 'object',\n required: ['formId'],\n additionalProperties: false,\n properties: {\n formId: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for the form boundary',\n },\n resetOnSubmit: {\n type: 'boolean',\n default: false,\n description: 'Whether to reset form field values after successful submission',\n },\n scrollToFirstError: {\n type: 'boolean',\n default: true,\n description: 'Auto-scroll viewport to the first invalid input on validation failure',\n },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n description: 'Default trigger event for field validation evaluation',\n },\n initialValues: {\n type: 'object',\n description: 'Initial state values populated in form fields',\n },\n },\n} as const;\n\nexport function getFormConfigJsonSchema() {\n return FORM_CONFIG_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Form Field Binding\n * Aligned 1:1 with TypeScript FormFieldBinding type definition.\n */\nexport const FORM_FIELD_BINDING_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/form-field-binding.json',\n title: 'StoraFormFieldBinding',\n description: 'Form field binding definition connecting input elements to form state runtime',\n type: 'object',\n required: ['name'],\n additionalProperties: false,\n properties: {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Field state property key',\n },\n label: {\n type: 'string',\n description: 'Display label for the field',\n },\n defaultValue: {\n description: 'Initial default value if not overridden by form initialValues',\n },\n rules: {\n type: 'array',\n items: { $ref: '#/definitions/validationRule' },\n default: [],\n description: 'Validation rules applied to the field value',\n },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n description: 'Field-specific validation trigger timing',\n },\n transform: {\n type: 'string',\n enum: ['trim', 'lowercase', 'uppercase', 'number'],\n description: 'Value transformation applied prior to validation and state storage',\n },\n disabled: {\n type: 'boolean',\n description: 'Whether the field is disabled',\n },\n required: {\n type: 'boolean',\n description: 'Whether the field is required (shorthand rule)',\n },\n },\n definitions: {\n validationRule: {\n type: 'object',\n required: ['type', 'message'],\n properties: {\n type: {\n type: 'string',\n 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 },\n value: {},\n message: {\n type: 'string',\n minLength: 1,\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getFormFieldBindingJsonSchema() {\n return FORM_FIELD_BINDING_JSON_SCHEMA_V1;\n}\n\n/* ------------------------------------------------------------------------------------------\n * Tracking relay protocol v1 (browser -> host server).\n * Generated from the Zod schemas so they never drift. Publish these to non-JS backends\n * (PHP, Go, Python, ...) so they can implement a compatible relay endpoint.\n * ---------------------------------------------------------------------------------------- */\n\ntype JsonSchemaObject = Record<string, unknown>;\n\nfunction toDraft7(schema: z.ZodType, id: string, title: string, io: 'input' | 'output'): JsonSchemaObject {\n return {\n ...(z.toJSONSchema(schema, { target: 'draft-7', io }) as JsonSchemaObject),\n $id: id,\n title,\n };\n}\n\nlet trackingRelayRequestJsonSchema: JsonSchemaObject | undefined;\nlet trackingRelayResponseJsonSchema: JsonSchemaObject | undefined;\nlet trackingProviderSecretsJsonSchema: JsonSchemaObject | undefined;\n\n/** JSON Schema (Draft-07) of the body POSTed to a tracking relay (`TrackingRelayRequestSchema`). */\nexport function getTrackingRelayRequestJsonSchema(): JsonSchemaObject {\n trackingRelayRequestJsonSchema ??= toDraft7(\n TrackingRelayRequestSchema,\n 'https://schema.stora.page/v1/tracking-relay-request.json',\n 'StoraTrackingRelayRequest',\n 'input',\n );\n return trackingRelayRequestJsonSchema;\n}\n\n/** JSON Schema (Draft-07) of the JSON a tracking relay responds with (`TrackingRelayResponseSchema`). */\nexport function getTrackingRelayResponseJsonSchema(): JsonSchemaObject {\n trackingRelayResponseJsonSchema ??= toDraft7(\n TrackingRelayResponseSchema,\n 'https://schema.stora.page/v1/tracking-relay-response.json',\n 'StoraTrackingRelayResponse',\n 'output',\n );\n return trackingRelayResponseJsonSchema;\n}\n\n/**\n * JSON Schema (Draft-07) of host-side provider secrets, keyed by provider. Useful for hosts\n * validating their secret store. Never embedded in a document.\n */\nexport function getTrackingProviderSecretsJsonSchema(): JsonSchemaObject {\n trackingProviderSecretsJsonSchema ??= toDraft7(\n z.object({\n meta: MetaTrackingSecretsSchema.optional(),\n google: GoogleTrackingSecretsSchema.optional(),\n tiktok: TikTokTrackingSecretsSchema.optional(),\n custom: CustomTrackingSecretsSchema.optional(),\n }),\n 'https://schema.stora.page/v1/tracking-provider-secrets.json',\n 'StoraTrackingProviderSecrets',\n 'input',\n );\n return trackingProviderSecretsJsonSchema;\n}\n\n\n","/**\n * Canonical list of built-in component type names shipped by `@kubuild/components`'\n * `createDefaultComponentRegistry()`.\n *\n * It lives in `@kubuild/schema` (the bottom of the dependency graph) so that\n * `@kubuild/core` can use it — e.g. to tell built-in from custom components in\n * `extractTemplateRequirements` — without depending on `@kubuild/components`, which\n * would invert the `schema → core → components` direction. `@kubuild/components`\n * derives its `CoreComponentType` union from this list and a test there asserts the\n * default registry registers exactly these types, so the two cannot drift apart.\n *\n * When adding a built-in component definition, add its type here as well.\n */\nexport const BUILTIN_COMPONENT_TYPES = [\n // layout\n 'page',\n 'section',\n 'container',\n 'columns',\n 'flex',\n 'grid',\n // typography\n 'heading',\n 'text',\n 'paragraph',\n 'link',\n 'blockquote',\n 'badge',\n 'code-block',\n // media\n 'image',\n 'video',\n 'icon',\n 'html-embed',\n // form\n 'button',\n 'button-submit',\n 'form',\n 'input',\n 'textarea',\n 'select',\n 'checkbox',\n 'switch',\n 'radio-group',\n 'radio',\n 'radio-item',\n 'file-upload',\n // data\n 'collection',\n 'list',\n 'list-item',\n 'table',\n 'table-row',\n 'table-cell',\n // interactive\n 'modal',\n 'drawer',\n 'collapsible',\n // conversion (Epic 60)\n 'countdown',\n 'accordion',\n 'accordion-item',\n 'tabs',\n 'tab-panel',\n 'carousel',\n 'rating',\n 'divider',\n 'spacer',\n] as const;\n\nexport type BuiltinComponentType = (typeof BUILTIN_COMPONENT_TYPES)[number];\n\nexport function isBuiltinComponentType(type: unknown): type is BuiltinComponentType {\n return typeof type === 'string' && (BUILTIN_COMPONENT_TYPES as readonly string[]).includes(type);\n}\n","/**\n * Canonical prop names for text-bearing components (STORA-550).\n *\n * Historically the renderer accepted several names for the same visible text\n * (`text` / `content`, `text` / `label`, `quote` / `text`, ...). Each component now has\n * exactly one canonical name; the others are deprecated aliases that\n * - the `1.1.0 -> 1.2.0` document migration moves onto the canonical name, and\n * - the renderer still reads (for one minor version) while emitting a\n * `DEPRECATED_PROP` diagnostic.\n *\n * Pure data, no zod — safe to import from any layer.\n */\nexport interface CanonicalTextPropRule {\n /** The one prop name authors, templates and the editor should write. */\n canonical: string;\n /** Deprecated names still read for backwards compatibility. */\n aliases: readonly string[];\n /**\n * Order in which the pre-1.2.0 renderer resolved the visible value (first defined\n * wins). The migration uses this so a migrated document renders exactly as before.\n */\n legacyReadOrder: readonly string[];\n}\n\nexport const CANONICAL_TEXT_PROPS: Readonly<Record<string, CanonicalTextPropRule>> = Object.freeze({\n heading: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n text: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n paragraph: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n link: {\n canonical: 'text',\n aliases: ['label', 'content'],\n legacyReadOrder: ['text', 'label', 'content'],\n },\n badge: { canonical: 'text', aliases: ['label'], legacyReadOrder: ['text', 'label'] },\n blockquote: { canonical: 'text', aliases: ['quote'], legacyReadOrder: ['quote', 'text'] },\n button: {\n canonical: 'label',\n aliases: ['text', 'content'],\n legacyReadOrder: ['label', 'text', 'content'],\n },\n});\n\n/** Returns the canonical text prop rule for a component type, if it has one. */\nexport function getCanonicalTextPropRule(componentType: string): CanonicalTextPropRule | undefined {\n return Object.prototype.hasOwnProperty.call(CANONICAL_TEXT_PROPS, componentType)\n ? CANONICAL_TEXT_PROPS[componentType]\n : undefined;\n}\n\nexport interface DeprecatedPropUsage {\n /** Alias prop present on the node. */\n propName: string;\n /** Canonical prop name that should be used instead. */\n canonicalName: string;\n /** True when the canonical prop is absent, i.e. the alias is what actually renders. */\n inEffect: boolean;\n}\n\n/**\n * Lists deprecated alias props present on a node's props (does not mutate).\n */\nexport function findDeprecatedPropAliases(\n componentType: string,\n props: Record<string, unknown> | undefined,\n): DeprecatedPropUsage[] {\n const rule = getCanonicalTextPropRule(componentType);\n if (!rule || !props) return [];\n const canonicalPresent = props[rule.canonical] !== undefined;\n let aliasInEffect = canonicalPresent;\n const usages: DeprecatedPropUsage[] = [];\n for (const alias of rule.aliases) {\n if (props[alias] === undefined) continue;\n usages.push({ propName: alias, canonicalName: rule.canonical, inEffect: !aliasInEffect });\n aliasInEffect = true;\n }\n return usages;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/breakpoints.ts","../src/fixtures/starter-page.json","../src/fixtures.ts","../src/json-schema.ts","../src/builtin-components.ts","../src/canonical-props.ts"],"sourcesContent":["/**\n * Single source of truth for responsive breakpoints (STORA-541).\n *\n * Every consumer that maps a screen width to a `ResponsiveStyles` layer — the editor's\n * viewport switcher/resizer, the runtime renderer's `@media` output, the preview adapter\n * and the static code generator — must read these values instead of hard-coding numbers.\n *\n * Ranges are disjoint and mirror the editor's per-viewport preview exactly: a viewport's\n * effective style is `base` merged with *that one* layer (tablet does not cascade into\n * mobile, desktop does not leak into tablet/mobile).\n *\n * mobile : width < 768px\n * tablet : 768 <= width < 1024px\n * desktop : 1024 <= width\n *\n * 768/1024 were chosen over the older 640/1024 code-generator values because they match\n * the published docs, the editor's existing width→viewport logic and its default tablet\n * preview width (768px), so what users see in the editor is what ships.\n */\n\n/** Viewport layers that carry breakpoint overrides (`base` applies everywhere). */\nexport type BreakpointName = 'desktop' | 'tablet' | 'mobile';\n\nexport interface BreakpointRange {\n /** Inclusive lower bound in CSS px. */\n readonly minWidth: number;\n /** Inclusive upper bound in CSS px, or `null` for unbounded. */\n readonly maxWidth: number | null;\n}\n\nexport const BREAKPOINTS: Readonly<Record<BreakpointName, BreakpointRange>> = Object.freeze({\n mobile: Object.freeze({ minWidth: 0, maxWidth: 767 }),\n tablet: Object.freeze({ minWidth: 768, maxWidth: 1023 }),\n desktop: Object.freeze({ minWidth: 1024, maxWidth: null }),\n});\n\n/** Order used for emitting CSS and iterating layers (widest first). */\nexport const BREAKPOINT_ORDER: readonly BreakpointName[] = Object.freeze([\n 'desktop',\n 'tablet',\n 'mobile',\n]);\n\n/**\n * Upper bounds are emitted as `maxWidth + 0.98px` (e.g. `767.98px`) so fractional\n * viewport widths (zoomed / high-DPI browsers) never fall in a gap between ranges.\n */\nfunction formatMaxWidth(maxWidth: number): string {\n return `${maxWidth + 0.98}px`;\n}\n\n/** CSS media query (without the `@media` keyword) for each breakpoint layer. */\nexport const BREAKPOINT_MEDIA_QUERIES: Readonly<Record<BreakpointName, string>> = Object.freeze({\n desktop: `(min-width: ${BREAKPOINTS.desktop.minWidth}px)`,\n tablet: `(min-width: ${BREAKPOINTS.tablet.minWidth}px) and (max-width: ${formatMaxWidth(\n BREAKPOINTS.tablet.maxWidth as number,\n )})`,\n mobile: `(max-width: ${formatMaxWidth(BREAKPOINTS.mobile.maxWidth as number)})`,\n});\n\n/** Resolve which breakpoint layer applies at a given viewport width in CSS px. */\nexport function getBreakpointForWidth(width: number): BreakpointName {\n if (width < BREAKPOINTS.tablet.minWidth) return 'mobile';\n if (width < BREAKPOINTS.desktop.minWidth) return 'tablet';\n return 'desktop';\n}\n","{\n \"schema\": \"stora.page\",\n \"version\": \"1.2.0\",\n \"metadata\": {\n \"title\": \"Welcome to KUBUILD\",\n \"description\": \"A starter template built with KUBUILD portable web builder\",\n \"author\": \"KUBUILD Team\",\n \"tags\": [\"landing-page\", \"starter\", \"portable\"],\n \"category\": \"landing\",\n \"version\": \"1.0.0\",\n \"createdAt\": \"2026-08-22T00:00:00.000Z\",\n \"updatedAt\": \"2026-08-22T00:00:00.000Z\"\n },\n \"document\": {\n \"id\": \"root-page\",\n \"type\": \"page\",\n \"props\": {\n \"title\": \"KUBUILD Starter Page\"\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#ffffff\",\n \"fontFamily\": \"Inter, sans-serif\",\n \"color\": \"#111827\",\n \"minHeight\": \"100vh\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-section\",\n \"type\": \"section\",\n \"props\": {},\n \"styles\": {\n \"base\": {\n \"paddingTop\": \"64px\",\n \"paddingBottom\": \"64px\",\n \"paddingLeft\": \"24px\",\n \"paddingRight\": \"24px\",\n \"backgroundColor\": \"#f8fafc\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-container\",\n \"type\": \"container\",\n \"props\": {\n \"maxWidth\": \"1200px\"\n },\n \"styles\": {\n \"base\": {\n \"margin\": \"0 auto\",\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"textAlign\": \"center\",\n \"gap\": \"24px\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-heading\",\n \"type\": \"heading\",\n \"props\": {\n \"text\": \"Build Once, Render Anywhere\",\n \"level\": 1\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"48px\",\n \"fontWeight\": \"800\",\n \"color\": \"#0f172a\",\n \"lineHeight\": \"1.2\"\n },\n \"mobile\": {\n \"fontSize\": \"32px\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-text\",\n \"type\": \"text\",\n \"props\": {\n \"as\": \"p\",\n \"text\": \"KUBUILD is an open, portable web page builder engine designed for modern web applications.\"\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"18px\",\n \"color\": \"#475569\",\n \"maxWidth\": \"680px\",\n \"lineHeight\": \"1.6\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-image\",\n \"type\": \"image\",\n \"props\": {\n \"src\": \"https://picsum.photos/200/300\",\n \"asset\": {\n \"type\": \"asset\",\n \"assetId\": \"asset_hero_graphic\",\n \"filename\": \"hero.webp\",\n \"mimeType\": \"image/webp\"\n },\n \"alt\": \"KUBUILD Platform Graphic\",\n \"width\": 640,\n \"height\": 360\n },\n \"styles\": {\n \"base\": {\n \"borderRadius\": \"12px\",\n \"maxWidth\": \"100%\",\n \"height\": \"auto\",\n \"boxShadow\": \"0 20px 25px -5px rgba(0, 0, 0, 0.1)\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-button\",\n \"type\": \"button\",\n \"props\": {\n \"label\": \"Get Started\"\n },\n \"actions\": [\n {\n \"id\": \"hero-button-click\",\n \"trigger\": \"click\",\n \"enabled\": true,\n \"steps\": [\n {\n \"id\": \"hero-button-navigate\",\n \"type\": \"navigate\",\n \"payload\": {\n \"url\": \"/docs\"\n }\n }\n ]\n }\n ],\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#2563eb\",\n \"color\": \"#ffffff\",\n \"paddingTop\": \"12px\",\n \"paddingBottom\": \"12px\",\n \"paddingLeft\": \"28px\",\n \"paddingRight\": \"28px\",\n \"borderRadius\": \"8px\",\n \"fontWeight\": \"600\",\n \"fontSize\": \"16px\",\n \"cursor\": \"pointer\",\n \"border\": \"none\"\n }\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n}\n","import starterPageData from './fixtures/starter-page.json' with { type: 'json' };\nimport { PageDocument } from './document.js';\n\nexport const starterPageFixture: PageDocument = starterPageData as unknown as PageDocument;\n","import { z } from 'zod';\nimport {\n TrackingRelayRequestSchema,\n TrackingRelayResponseSchema,\n MetaTrackingSecretsSchema,\n GoogleTrackingSecretsSchema,\n TikTokTrackingSecretsSchema,\n CustomTrackingSecretsSchema,\n} from './tracking.js';\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Document v1\n * Aligned 1:1 with TypeScript PageDocument type definition.\n */\nexport const PAGE_DOCUMENT_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/page.json',\n title: 'StoraPageDocument',\n description: 'Portable Web Page Document v1 schema definition for KUBUILD',\n type: 'object',\n required: ['schema', 'version', 'document'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Identifies the document type format',\n },\n version: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Schema version of the document',\n default: '1.2.0',\n },\n metadata: {\n $ref: '#/definitions/documentMetadata',\n },\n document: {\n $ref: '#/definitions/rootPageNode',\n },\n tracking: {\n $ref: '#/definitions/trackingConfig',\n },\n theme: {\n $ref: '#/definitions/theme',\n },\n },\n definitions: {\n themeTokenMap: {\n type: 'object',\n propertyNames: { pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$' },\n additionalProperties: {\n type: ['string', 'number'],\n maxLength: 512,\n pattern: '^[^;{}<>\\\\\\\\]*$',\n },\n description: 'Design tokens keyed by name. Values must not contain ; { } < > or backslashes.',\n },\n theme: {\n type: 'object',\n description:\n 'Document design tokens, emitted as CSS custom properties (--kb-color-*, --kb-font-*, --kb-radius-*, --kb-space-*) and referenced from styles as var(--kb-color-<key>).',\n properties: {\n colors: { $ref: '#/definitions/themeTokenMap' },\n fonts: { $ref: '#/definitions/themeTokenMap' },\n radii: { $ref: '#/definitions/themeTokenMap' },\n spacing: { $ref: '#/definitions/themeTokenMap' },\n },\n additionalProperties: false,\n },\n trackingConfig: {\n type: 'object',\n description:\n 'Tracking configuration. Contains only public ids, flags and opaque credential ids — secrets are host-owned.',\n properties: {\n enabled: { type: 'boolean', default: true },\n debugMode: { type: 'boolean', default: false },\n autoPageView: { type: 'boolean', default: true },\n defaultDelivery: { type: 'string', enum: ['both', 'client_only', 'server_only'], default: 'both' },\n providers: {\n type: 'object',\n properties: {\n meta: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n pixelId: { type: 'string' },\n capiEnabled: { type: 'boolean' },\n testEventCode: { type: 'string' },\n },\n additionalProperties: false,\n },\n google: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n measurementId: { type: 'string' },\n },\n additionalProperties: false,\n },\n gtm: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n containerId: { type: 'string' },\n },\n additionalProperties: false,\n },\n tiktok: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n pixelId: { type: 'string' },\n eventsApiEnabled: { type: 'boolean' },\n testEventCode: { type: 'string' },\n },\n additionalProperties: false,\n },\n custom: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n credentialId: { type: 'string' },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n styleValue: {\n type: ['string', 'number', 'boolean', 'null'],\n description: 'A CSS property or design token value',\n },\n styleDefinition: {\n type: 'object',\n additionalProperties: {\n $ref: '#/definitions/styleValue',\n },\n description: 'Key-value map of style properties',\n },\n responsiveStyles: {\n type: 'object',\n properties: {\n base: { $ref: '#/definitions/styleDefinition' },\n desktop: { $ref: '#/definitions/styleDefinition' },\n tablet: { $ref: '#/definitions/styleDefinition' },\n mobile: { $ref: '#/definitions/styleDefinition' },\n },\n additionalProperties: {\n $ref: '#/definitions/styleDefinition',\n },\n },\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n variableBinding: {\n type: 'object',\n required: ['type', 'key'],\n properties: {\n type: {\n type: 'string',\n const: 'variable',\n },\n key: {\n type: 'string',\n minLength: 1,\n },\n fallback: {},\n },\n additionalProperties: false,\n },\n actionBinding: {\n type: 'object',\n required: ['type'],\n properties: {\n type: {\n type: 'string',\n minLength: 1,\n },\n payload: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n animationConfig: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n default: 'none',\n description: 'Scroll entrance animation type (e.g. fade, fade-up, zoom-in, slide-left)',\n },\n duration: {\n type: 'number',\n minimum: 0,\n default: 600,\n description: 'Animation duration in milliseconds',\n },\n delay: {\n type: 'number',\n minimum: 0,\n default: 0,\n description: 'Animation delay in milliseconds',\n },\n easing: {\n type: 'string',\n default: 'ease-out',\n description: 'CSS animation easing / transition timing function',\n },\n once: {\n type: 'boolean',\n default: true,\n description: 'Whether scroll animation plays only once when entering viewport',\n },\n hoverEffect: {\n type: 'string',\n default: 'none',\n description: 'Hover micro-interaction effect (e.g. lift, scale, glow, tilt)',\n },\n loopEffect: {\n type: 'string',\n default: 'none',\n description: 'Continuous loop animation effect (e.g. pulse, bounce, spin, float)',\n },\n },\n additionalProperties: false,\n },\n actionStep: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n type: {\n type: 'string',\n 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 },\n label: { type: 'string' },\n payload: { type: 'object' },\n condition: {\n type: 'object',\n required: ['field', 'operator'],\n properties: {\n field: { type: 'string', minLength: 1 },\n operator: {\n type: 'string',\n 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 },\n value: {},\n },\n additionalProperties: false,\n },\n timeout: { type: 'number', minimum: 1 },\n continueOnError: { type: 'boolean' },\n onSuccess: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n onError: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n },\n additionalProperties: false,\n },\n actionPipeline: {\n type: 'object',\n required: ['id', 'trigger', 'steps'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n trigger: {\n type: 'string',\n enum: ['click', 'submit', 'change', 'blur', 'focus', 'load', 'expire'],\n },\n label: { type: 'string' },\n debounceMs: { type: 'number', minimum: 0 },\n preventDuplicate: { type: 'boolean' },\n enabled: { type: 'boolean', default: true },\n steps: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n minItems: 1,\n },\n },\n additionalProperties: false,\n },\n formConfig: {\n type: 'object',\n required: ['formId'],\n properties: {\n formId: {\n type: 'string',\n minLength: 1,\n },\n resetOnSubmit: { type: 'boolean', default: false },\n scrollToFirstError: { type: 'boolean', default: true },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n },\n initialValues: { type: 'object' },\n },\n additionalProperties: false,\n },\n node: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique deterministic node identifier',\n },\n type: {\n type: 'string',\n minLength: 1,\n description: 'Component type identifier',\n },\n props: {\n type: 'object',\n description: 'Component props payload and bindings',\n default: {},\n },\n styles: {\n $ref: '#/definitions/responsiveStyles',\n },\n animation: {\n $ref: '#/definitions/animationConfig',\n },\n actions: {\n type: 'array',\n items: {\n $ref: '#/definitions/actionPipeline',\n },\n description: 'Multi-step action pipelines bound to component events',\n },\n formConfig: {\n $ref: '#/definitions/formConfig',\n description: 'Form container configuration and behavior',\n },\n children: {\n type: 'array',\n items: {\n $ref: '#/definitions/node',\n },\n default: [],\n },\n },\n additionalProperties: false,\n },\n rootPageNode: {\n allOf: [\n { $ref: '#/definitions/node' },\n {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n const: 'page',\n description: 'The root node type must be \"page\"',\n },\n },\n },\n ],\n },\n documentMetadata: {\n type: 'object',\n required: ['title'],\n properties: {\n title: {\n type: 'string',\n minLength: 1,\n default: 'Untitled Page',\n },\n description: {\n type: 'string',\n default: '',\n },\n author: {\n type: 'string',\n default: '',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n category: {\n type: 'string',\n default: 'general',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n },\n custom: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getPageDocumentJsonSchema() {\n return PAGE_DOCUMENT_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Package Manifest v1\n * Aligned 1:1 with TypeScript Manifest type definition.\n */\nexport const MANIFEST_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/manifest.json',\n title: 'StoraPackageManifest',\n description: 'Portable Package Manifest v1 schema definition for KUBUILD (.stora)',\n type: 'object',\n required: ['schemaVersion', 'packageVersion', 'builderCompatibility', 'requiredComponents', 'requiredCapabilities', 'assets'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Schema identifier',\n default: 'stora.page',\n },\n schemaVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Document schema version',\n default: '1.0.0',\n },\n packageVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Package version',\n default: '1.0.0',\n },\n builderCompatibility: {\n type: 'string',\n description: 'Minimum or range of builder versions compatible with this package',\n default: '>=0.1.0',\n },\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of custom component types required by the page',\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of capabilities required by components in the page',\n default: [],\n },\n assets: {\n type: 'array',\n items: { $ref: '#/definitions/manifestAssetItem' },\n description: 'Inventory of local assets packaged within the archive',\n default: [],\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO timestamp when the package was created',\n },\n },\n definitions: {\n manifestAssetItem: {\n type: 'object',\n required: ['id', 'path', 'mimeType', 'size'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique asset identifier',\n },\n path: {\n type: 'string',\n minLength: 1,\n description: 'Relative archive path to asset file (e.g. assets/hero.png)',\n },\n mimeType: {\n type: 'string',\n minLength: 1,\n description: 'MIME type of the asset',\n },\n size: {\n type: 'number',\n minimum: 0,\n description: 'Asset size in bytes',\n },\n checksum: {\n type: 'string',\n description: 'SHA-256 or algorithm-prefixed checksum (e.g. sha256:...)',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getManifestJsonSchema() {\n return MANIFEST_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Template Record v1\n * Aligned 1:1 with TypeScript TemplateRecord type definition.\n */\nexport const TEMPLATE_RECORD_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/template.json',\n title: 'StoraTemplateRecord',\n description: 'Reusable Page Template Record v1 schema definition for KUBUILD',\n type: 'object',\n required: ['id', 'name'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique template identifier',\n },\n name: {\n type: 'string',\n minLength: 1,\n description: 'Human-readable name of the template',\n },\n description: {\n type: 'string',\n default: '',\n description: 'Detailed description of the template purpose and contents',\n },\n category: {\n type: 'string',\n default: 'general',\n description: 'Template category grouping',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n description: 'Search and filter tags',\n },\n thumbnail: {\n oneOf: [\n { $ref: '#/definitions/assetReference' },\n { $ref: '#/definitions/safeThumbnailObject' },\n { type: 'string', minLength: 1 },\n ],\n description: 'Safe preview image asset reference or URL',\n },\n author: {\n type: 'string',\n default: '',\n description: 'Template creator or team',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n description: 'Semantic version of the template',\n },\n document: {\n $ref: 'https://schema.stora.page/v1/page.json#',\n description: 'Embedded PageDocument snapshot (optional if packageReference provided)',\n },\n packageReference: {\n $ref: '#/definitions/templatePackageRef',\n description: 'External package/archive reference (optional if document provided)',\n },\n requirements: {\n $ref: '#/definitions/templateRequirements',\n description: 'Component and capability requirements for this template',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO creation timestamp',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO last updated timestamp',\n },\n custom: {\n type: 'object',\n description: 'Custom host-specific serializable metadata',\n },\n },\n definitions: {\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n safeThumbnailObject: {\n type: 'object',\n required: ['url'],\n properties: {\n url: {\n type: 'string',\n minLength: 1,\n },\n alt: {\n type: 'string',\n },\n width: {\n type: 'number',\n minimum: 1,\n },\n height: {\n type: 'number',\n minimum: 1,\n },\n },\n additionalProperties: false,\n },\n templatePackageRef: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n checksum: {\n type: 'string',\n },\n format: {\n type: 'string',\n enum: ['stora', 'json'],\n default: 'stora',\n },\n },\n additionalProperties: false,\n },\n templateRequirements: {\n type: 'object',\n properties: {\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getTemplateRecordJsonSchema() {\n return TEMPLATE_RECORD_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Action Pipeline\n * Aligned 1:1 with TypeScript ActionPipeline type definition.\n */\nexport const ACTION_PIPELINE_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/action-pipeline.json',\n title: 'StoraActionPipeline',\n description: 'Action Pipeline schema definition for KUBUILD event workflows',\n type: 'object',\n required: ['id', 'trigger', 'steps'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique pipeline identifier',\n },\n trigger: {\n type: 'string',\n enum: ['click', 'submit', 'change', 'blur', 'focus', 'load', 'expire'],\n description: 'DOM or component event that triggers the action pipeline',\n },\n label: {\n type: 'string',\n description: 'Human readable label for the action pipeline',\n },\n debounceMs: {\n type: 'number',\n minimum: 0,\n description: 'Debounce duration in milliseconds',\n },\n preventDuplicate: {\n type: 'boolean',\n description: 'Prevent concurrent duplicate pipeline executions',\n },\n enabled: {\n type: 'boolean',\n default: true,\n description: 'Whether the pipeline is currently active',\n },\n steps: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n minItems: 1,\n description: 'Ordered sequence of action steps to execute',\n },\n },\n definitions: {\n actionStep: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n },\n type: {\n type: 'string',\n 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 },\n label: { type: 'string' },\n payload: { type: 'object' },\n condition: {\n type: 'object',\n required: ['field', 'operator'],\n properties: {\n field: { type: 'string', minLength: 1 },\n operator: {\n type: 'string',\n 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 },\n value: {},\n },\n additionalProperties: false,\n },\n timeout: { type: 'number', minimum: 1 },\n continueOnError: { type: 'boolean' },\n onSuccess: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n onError: {\n type: 'array',\n items: { $ref: '#/definitions/actionStep' },\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getActionPipelineJsonSchema() {\n return ACTION_PIPELINE_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Form Config\n * Aligned 1:1 with TypeScript FormConfig type definition.\n */\nexport const FORM_CONFIG_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/form-config.json',\n title: 'StoraFormConfig',\n description: 'Form container configuration and behavior definition for KUBUILD',\n type: 'object',\n required: ['formId'],\n additionalProperties: false,\n properties: {\n formId: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for the form boundary',\n },\n resetOnSubmit: {\n type: 'boolean',\n default: false,\n description: 'Whether to reset form field values after successful submission',\n },\n scrollToFirstError: {\n type: 'boolean',\n default: true,\n description: 'Auto-scroll viewport to the first invalid input on validation failure',\n },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n description: 'Default trigger event for field validation evaluation',\n },\n initialValues: {\n type: 'object',\n description: 'Initial state values populated in form fields',\n },\n },\n} as const;\n\nexport function getFormConfigJsonSchema() {\n return FORM_CONFIG_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Form Field Binding\n * Aligned 1:1 with TypeScript FormFieldBinding type definition.\n */\nexport const FORM_FIELD_BINDING_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/form-field-binding.json',\n title: 'StoraFormFieldBinding',\n description: 'Form field binding definition connecting input elements to form state runtime',\n type: 'object',\n required: ['name'],\n additionalProperties: false,\n properties: {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Field state property key',\n },\n label: {\n type: 'string',\n description: 'Display label for the field',\n },\n defaultValue: {\n description: 'Initial default value if not overridden by form initialValues',\n },\n rules: {\n type: 'array',\n items: { $ref: '#/definitions/validationRule' },\n default: [],\n description: 'Validation rules applied to the field value',\n },\n validateOn: {\n type: 'string',\n enum: ['blur', 'change', 'submit'],\n default: 'blur',\n description: 'Field-specific validation trigger timing',\n },\n transform: {\n type: 'string',\n enum: ['trim', 'lowercase', 'uppercase', 'number'],\n description: 'Value transformation applied prior to validation and state storage',\n },\n disabled: {\n type: 'boolean',\n description: 'Whether the field is disabled',\n },\n required: {\n type: 'boolean',\n description: 'Whether the field is required (shorthand rule)',\n },\n },\n definitions: {\n validationRule: {\n type: 'object',\n required: ['type', 'message'],\n properties: {\n type: {\n type: 'string',\n 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 },\n value: {},\n message: {\n type: 'string',\n minLength: 1,\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getFormFieldBindingJsonSchema() {\n return FORM_FIELD_BINDING_JSON_SCHEMA_V1;\n}\n\n/* ------------------------------------------------------------------------------------------\n * Tracking relay protocol v1 (browser -> host server).\n * Generated from the Zod schemas so they never drift. Publish these to non-JS backends\n * (PHP, Go, Python, ...) so they can implement a compatible relay endpoint.\n * ---------------------------------------------------------------------------------------- */\n\ntype JsonSchemaObject = Record<string, unknown>;\n\nfunction toDraft7(schema: z.ZodType, id: string, title: string, io: 'input' | 'output'): JsonSchemaObject {\n return {\n ...(z.toJSONSchema(schema, { target: 'draft-7', io }) as JsonSchemaObject),\n $id: id,\n title,\n };\n}\n\nlet trackingRelayRequestJsonSchema: JsonSchemaObject | undefined;\nlet trackingRelayResponseJsonSchema: JsonSchemaObject | undefined;\nlet trackingProviderSecretsJsonSchema: JsonSchemaObject | undefined;\n\n/** JSON Schema (Draft-07) of the body POSTed to a tracking relay (`TrackingRelayRequestSchema`). */\nexport function getTrackingRelayRequestJsonSchema(): JsonSchemaObject {\n trackingRelayRequestJsonSchema ??= toDraft7(\n TrackingRelayRequestSchema,\n 'https://schema.stora.page/v1/tracking-relay-request.json',\n 'StoraTrackingRelayRequest',\n 'input',\n );\n return trackingRelayRequestJsonSchema;\n}\n\n/** JSON Schema (Draft-07) of the JSON a tracking relay responds with (`TrackingRelayResponseSchema`). */\nexport function getTrackingRelayResponseJsonSchema(): JsonSchemaObject {\n trackingRelayResponseJsonSchema ??= toDraft7(\n TrackingRelayResponseSchema,\n 'https://schema.stora.page/v1/tracking-relay-response.json',\n 'StoraTrackingRelayResponse',\n 'output',\n );\n return trackingRelayResponseJsonSchema;\n}\n\n/**\n * JSON Schema (Draft-07) of host-side provider secrets, keyed by provider. Useful for hosts\n * validating their secret store. Never embedded in a document.\n */\nexport function getTrackingProviderSecretsJsonSchema(): JsonSchemaObject {\n trackingProviderSecretsJsonSchema ??= toDraft7(\n z.object({\n meta: MetaTrackingSecretsSchema.optional(),\n google: GoogleTrackingSecretsSchema.optional(),\n tiktok: TikTokTrackingSecretsSchema.optional(),\n custom: CustomTrackingSecretsSchema.optional(),\n }),\n 'https://schema.stora.page/v1/tracking-provider-secrets.json',\n 'StoraTrackingProviderSecrets',\n 'input',\n );\n return trackingProviderSecretsJsonSchema;\n}\n\n\n","/**\n * Canonical list of built-in component type names shipped by `@kubuild/components`'\n * `createDefaultComponentRegistry()`.\n *\n * It lives in `@kubuild/schema` (the bottom of the dependency graph) so that\n * `@kubuild/core` can use it — e.g. to tell built-in from custom components in\n * `extractTemplateRequirements` — without depending on `@kubuild/components`, which\n * would invert the `schema → core → components` direction. `@kubuild/components`\n * derives its `CoreComponentType` union from this list and a test there asserts the\n * default registry registers exactly these types, so the two cannot drift apart.\n *\n * When adding a built-in component definition, add its type here as well.\n */\nexport const BUILTIN_COMPONENT_TYPES = [\n // layout\n 'page',\n 'section',\n 'container',\n 'columns',\n 'flex',\n 'grid',\n // typography\n 'heading',\n 'text',\n 'paragraph',\n 'link',\n 'blockquote',\n 'badge',\n 'code-block',\n // media\n 'image',\n 'video',\n 'icon',\n 'html-embed',\n // form\n 'button',\n 'button-submit',\n 'form',\n 'input',\n 'textarea',\n 'select',\n 'checkbox',\n 'switch',\n 'radio-group',\n 'radio',\n 'radio-item',\n 'file-upload',\n // data\n 'collection',\n 'list',\n 'list-item',\n 'table',\n 'table-row',\n 'table-cell',\n // interactive\n 'modal',\n 'drawer',\n 'collapsible',\n // conversion (Epic 60)\n 'countdown',\n 'accordion',\n 'accordion-item',\n 'tabs',\n 'tab-panel',\n 'carousel',\n 'rating',\n 'divider',\n 'spacer',\n] as const;\n\nexport type BuiltinComponentType = (typeof BUILTIN_COMPONENT_TYPES)[number];\n\nexport function isBuiltinComponentType(type: unknown): type is BuiltinComponentType {\n return typeof type === 'string' && (BUILTIN_COMPONENT_TYPES as readonly string[]).includes(type);\n}\n","/**\n * Canonical prop names for text-bearing components (STORA-550).\n *\n * Historically the renderer accepted several names for the same visible text\n * (`text` / `content`, `text` / `label`, `quote` / `text`, ...). Each component now has\n * exactly one canonical name; the others are deprecated aliases that\n * - the `1.1.0 -> 1.2.0` document migration moves onto the canonical name, and\n * - the renderer still reads (for one minor version) while emitting a\n * `DEPRECATED_PROP` diagnostic.\n *\n * Pure data, no zod — safe to import from any layer.\n */\nexport interface CanonicalTextPropRule {\n /** The one prop name authors, templates and the editor should write. */\n canonical: string;\n /** Deprecated names still read for backwards compatibility. */\n aliases: readonly string[];\n /**\n * Order in which the pre-1.2.0 renderer resolved the visible value (first defined\n * wins). The migration uses this so a migrated document renders exactly as before.\n */\n legacyReadOrder: readonly string[];\n}\n\nexport const CANONICAL_TEXT_PROPS: Readonly<Record<string, CanonicalTextPropRule>> = Object.freeze({\n heading: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n text: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n paragraph: { canonical: 'text', aliases: ['content'], legacyReadOrder: ['text', 'content'] },\n link: {\n canonical: 'text',\n aliases: ['label', 'content'],\n legacyReadOrder: ['text', 'label', 'content'],\n },\n badge: { canonical: 'text', aliases: ['label'], legacyReadOrder: ['text', 'label'] },\n blockquote: { canonical: 'text', aliases: ['quote'], legacyReadOrder: ['quote', 'text'] },\n button: {\n canonical: 'label',\n aliases: ['text', 'content'],\n legacyReadOrder: ['label', 'text', 'content'],\n },\n});\n\n/** Returns the canonical text prop rule for a component type, if it has one. */\nexport function getCanonicalTextPropRule(componentType: string): CanonicalTextPropRule | undefined {\n return Object.prototype.hasOwnProperty.call(CANONICAL_TEXT_PROPS, componentType)\n ? CANONICAL_TEXT_PROPS[componentType]\n : undefined;\n}\n\nexport interface DeprecatedPropUsage {\n /** Alias prop present on the node. */\n propName: string;\n /** Canonical prop name that should be used instead. */\n canonicalName: string;\n /** True when the canonical prop is absent, i.e. the alias is what actually renders. */\n inEffect: boolean;\n}\n\n/**\n * Lists deprecated alias props present on a node's props (does not mutate).\n */\nexport function findDeprecatedPropAliases(\n componentType: string,\n props: Record<string, unknown> | undefined,\n): DeprecatedPropUsage[] {\n const rule = getCanonicalTextPropRule(componentType);\n if (!rule || !props) return [];\n const canonicalPresent = props[rule.canonical] !== undefined;\n let aliasInEffect = canonicalPresent;\n const usages: DeprecatedPropUsage[] = [];\n for (const alias of rule.aliases) {\n if (props[alias] === undefined) continue;\n usages.push({ propName: alias, canonicalName: rule.canonical, inEffect: !aliasInEffect });\n aliasInEffect = true;\n }\n return usages;\n}\n"],"mappings":"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","names":[]}