@kubuild/schema 0.5.0 → 0.6.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/dist/index.cjs CHANGED
@@ -40,15 +40,19 @@ __export(index_exports, {
40
40
  ConditionOperatorSchema: () => ConditionOperatorSchema,
41
41
  CopyClipboardStepPayloadSchema: () => CopyClipboardStepPayloadSchema,
42
42
  CustomEventStepPayloadSchema: () => CustomEventStepPayloadSchema,
43
+ CustomTrackingProviderConfigSchema: () => CustomTrackingProviderConfigSchema,
43
44
  DEFAULT_ANIMATION_CONFIG: () => DEFAULT_ANIMATION_CONFIG,
44
45
  DocumentMetadataSchema: () => DocumentMetadataSchema,
45
46
  FORM_CONFIG_JSON_SCHEMA_V1: () => FORM_CONFIG_JSON_SCHEMA_V1,
46
47
  FORM_FIELD_BINDING_JSON_SCHEMA_V1: () => FORM_FIELD_BINDING_JSON_SCHEMA_V1,
47
48
  FormConfigSchema: () => FormConfigSchema,
48
49
  FormFieldBindingSchema: () => FormFieldBindingSchema,
50
+ GoogleTrackingProviderConfigSchema: () => GoogleTrackingProviderConfigSchema,
51
+ GtmTrackingProviderConfigSchema: () => GtmTrackingProviderConfigSchema,
49
52
  MANIFEST_JSON_SCHEMA_V1: () => MANIFEST_JSON_SCHEMA_V1,
50
53
  ManifestAssetItemSchema: () => ManifestAssetItemSchema,
51
54
  ManifestSchema: () => ManifestSchema,
55
+ MetaTrackingProviderConfigSchema: () => MetaTrackingProviderConfigSchema,
52
56
  NavigateStepPayloadSchema: () => NavigateStepPayloadSchema,
53
57
  NodeSchema: () => NodeSchema,
54
58
  OpenModalStepPayloadSchema: () => OpenModalStepPayloadSchema,
@@ -66,6 +70,7 @@ __export(index_exports, {
66
70
  SafeThumbnailUrlSchema: () => SafeThumbnailUrlSchema,
67
71
  SetStateStepPayloadSchema: () => SetStateStepPayloadSchema,
68
72
  ShowToastStepPayloadSchema: () => ShowToastStepPayloadSchema,
73
+ StandardTrackingEventSchema: () => StandardTrackingEventSchema,
69
74
  StepPayloadSchemas: () => StepPayloadSchemas,
70
75
  StyleDefinitionSchema: () => StyleDefinitionSchema,
71
76
  StyleValueSchema: () => StyleValueSchema,
@@ -73,6 +78,11 @@ __export(index_exports, {
73
78
  TemplatePackageRefSchema: () => TemplatePackageRefSchema,
74
79
  TemplateRecordSchema: () => TemplateRecordSchema,
75
80
  TemplateRequirementsSchema: () => TemplateRequirementsSchema,
81
+ TikTokTrackingProviderConfigSchema: () => TikTokTrackingProviderConfigSchema,
82
+ TrackEventStepPayloadSchema: () => TrackEventStepPayloadSchema,
83
+ TrackingConfigSchema: () => TrackingConfigSchema,
84
+ TrackingDeliverySchema: () => TrackingDeliverySchema,
85
+ TrackingProviderTypeSchema: () => TrackingProviderTypeSchema,
76
86
  ValidateOnEventSchema: () => ValidateOnEventSchema,
77
87
  ValidationRuleSchema: () => ValidationRuleSchema,
78
88
  ValidationRuleTypeSchema: () => ValidationRuleTypeSchema,
@@ -103,6 +113,8 @@ __export(index_exports, {
103
113
  isSafeThumbnail: () => isSafeThumbnail,
104
114
  isSafeThumbnailUrl: () => isSafeThumbnailUrl,
105
115
  isTemplateRecord: () => isTemplateRecord,
116
+ isTrackEventStepPayload: () => isTrackEventStepPayload,
117
+ isTrackingConfig: () => isTrackingConfig,
106
118
  isValidateOnEvent: () => isValidateOnEvent,
107
119
  isValidationRule: () => isValidationRule,
108
120
  isValidationRuleType: () => isValidationRuleType,
@@ -121,11 +133,156 @@ __export(index_exports, {
121
133
  module.exports = __toCommonJS(index_exports);
122
134
 
123
135
  // src/document.ts
124
- var import_zod3 = require("zod");
136
+ var import_zod4 = require("zod");
125
137
 
126
138
  // src/actions.ts
139
+ var import_zod2 = require("zod");
140
+
141
+ // src/tracking.ts
127
142
  var import_zod = require("zod");
128
- var ActionTriggerTypeSchema = import_zod.z.enum([
143
+ var TrackingProviderTypeSchema = import_zod.z.enum([
144
+ "meta",
145
+ "google",
146
+ "gtm",
147
+ "tiktok",
148
+ "custom"
149
+ ]);
150
+ var TrackingDeliverySchema = import_zod.z.enum(["both", "client_only", "server_only"]);
151
+ var MetaTrackingProviderConfigSchema = import_zod.z.object({
152
+ enabled: import_zod.z.boolean().default(true),
153
+ /** Optional linked account/workspace credential ID */
154
+ credentialId: import_zod.z.string().optional(),
155
+ /** Meta Pixel ID (e.g. 123456789012345) */
156
+ pixelId: import_zod.z.string().optional().default(""),
157
+ /** Enable Server-Side Conversions API */
158
+ capiEnabled: import_zod.z.boolean().optional().default(false),
159
+ /**
160
+ * System User Access Token for Meta Graph API.
161
+ * Note: For security in production, prefer configuring tokens on your server backend
162
+ * or proxying via `serverRelayUrl`.
163
+ */
164
+ capiAccessToken: import_zod.z.string().optional().default(""),
165
+ /** Test Event Code from Meta Events Manager (e.g. "TEST12345") */
166
+ testEventCode: import_zod.z.string().optional().default(""),
167
+ /**
168
+ * Host Server Relay URL (e.g. "/api/tracking/meta").
169
+ * Recommended for browser clients to post CAPI events safely without exposing the secret token.
170
+ */
171
+ serverRelayUrl: import_zod.z.string().optional().default("")
172
+ });
173
+ var GoogleTrackingProviderConfigSchema = import_zod.z.object({
174
+ enabled: import_zod.z.boolean().default(true),
175
+ /** Optional linked account/workspace credential ID */
176
+ credentialId: import_zod.z.string().optional(),
177
+ /** GA4 Measurement ID (e.g. "G-XXXXXXXXXX") */
178
+ measurementId: import_zod.z.string().optional().default(""),
179
+ /** GA4 Measurement Protocol API Secret (for server-side events) */
180
+ measurementProtocolSecret: import_zod.z.string().optional().default(""),
181
+ /** Host Server Relay URL (e.g. "/api/tracking/ga4") */
182
+ serverRelayUrl: import_zod.z.string().optional().default("")
183
+ });
184
+ var GtmTrackingProviderConfigSchema = import_zod.z.object({
185
+ enabled: import_zod.z.boolean().default(true),
186
+ /** Optional linked account/workspace credential ID */
187
+ credentialId: import_zod.z.string().optional(),
188
+ /** GTM Container ID (e.g. "GTM-XXXXXXX") */
189
+ containerId: import_zod.z.string().optional().default(""),
190
+ /** Host Server Relay URL */
191
+ serverRelayUrl: import_zod.z.string().optional().default("")
192
+ });
193
+ var TikTokTrackingProviderConfigSchema = import_zod.z.object({
194
+ enabled: import_zod.z.boolean().default(true),
195
+ /** Optional linked account/workspace credential ID */
196
+ credentialId: import_zod.z.string().optional(),
197
+ /** TikTok Pixel ID (e.g. "C1234567890") */
198
+ pixelId: import_zod.z.string().optional().default(""),
199
+ /** Enable TikTok Events API (server-side) */
200
+ eventsApiEnabled: import_zod.z.boolean().optional().default(false),
201
+ /** Long-term Access Token for TikTok Events API */
202
+ accessToken: import_zod.z.string().optional().default(""),
203
+ /** Test Event Code from TikTok Event Manager */
204
+ testEventCode: import_zod.z.string().optional().default(""),
205
+ /** Host Server Relay URL (e.g. "/api/tracking/tiktok") */
206
+ serverRelayUrl: import_zod.z.string().optional().default("")
207
+ });
208
+ var CustomTrackingProviderConfigSchema = import_zod.z.object({
209
+ enabled: import_zod.z.boolean().default(true),
210
+ /** Optional linked account/workspace credential ID */
211
+ credentialId: import_zod.z.string().optional(),
212
+ /** Custom Webhook endpoint URL */
213
+ endpointUrl: import_zod.z.string().optional().default(""),
214
+ /** Optional headers sent with the webhook POST request */
215
+ headers: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional().default({})
216
+ });
217
+ var TrackingConfigSchema = import_zod.z.object({
218
+ /** Master toggle: dynamically enables or disables all tracking operations */
219
+ enabled: import_zod.z.boolean().default(true),
220
+ /** When enabled, events are logged to console and can bypass live API calls for safe debugging */
221
+ debugMode: import_zod.z.boolean().optional().default(false),
222
+ /** Automatically trigger PageView event upon page load */
223
+ autoPageView: import_zod.z.boolean().optional().default(true),
224
+ /** Default delivery method when not explicitly overridden in an action step */
225
+ defaultDelivery: TrackingDeliverySchema.optional().default("both"),
226
+ /** Provider-specific settings */
227
+ providers: import_zod.z.object({
228
+ meta: MetaTrackingProviderConfigSchema.optional(),
229
+ google: GoogleTrackingProviderConfigSchema.optional(),
230
+ gtm: GtmTrackingProviderConfigSchema.optional(),
231
+ tiktok: TikTokTrackingProviderConfigSchema.optional(),
232
+ custom: CustomTrackingProviderConfigSchema.optional()
233
+ }).optional().default({})
234
+ });
235
+ var StandardTrackingEventSchema = import_zod.z.enum([
236
+ "PageView",
237
+ "ViewContent",
238
+ "AddToCart",
239
+ "InitiateCheckout",
240
+ "Purchase",
241
+ "Lead",
242
+ "Contact",
243
+ "CompleteRegistration",
244
+ "Subscribe",
245
+ "Search",
246
+ "SubmitApplication",
247
+ "Schedule"
248
+ ]);
249
+ var TrackEventStepPayloadSchema = import_zod.z.object({
250
+ /** Event name: e.g. "Purchase", "Lead", or custom string */
251
+ eventName: import_zod.z.string().min(1, "Event name cannot be empty"),
252
+ /** Standard event vs custom event identifier */
253
+ eventType: import_zod.z.enum(["standard", "custom"]).optional().default("standard"),
254
+ /** Target provider: 'all' or a specific provider */
255
+ provider: import_zod.z.enum(["all", "meta", "google", "tiktok", "custom"]).optional().default("all"),
256
+ /** Delivery channel: 'both', 'client_only', or 'server_only' */
257
+ delivery: TrackingDeliverySchema.optional().default("both"),
258
+ /**
259
+ * Deduplication Event ID.
260
+ * If omitted, a unique ID is automatically generated so Meta/TikTok CAPI
261
+ * deduplicates cleanly with the browser pixel.
262
+ */
263
+ eventId: import_zod.z.string().optional(),
264
+ /**
265
+ * Event parameters/properties (e.g. currency, value, content_name, order_id).
266
+ * Supports runtime variable interpolation (e.g. {{ form.price }} or {{ variables.currency }}).
267
+ */
268
+ params: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional().default({}),
269
+ /**
270
+ * User Data for advanced matching and server CAPI (e.g. email, phone, firstName, lastName).
271
+ * Supports runtime variable interpolation (e.g. {{ form.email }}).
272
+ */
273
+ userData: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional().default({}),
274
+ /** Step-level active toggle */
275
+ enabled: import_zod.z.boolean().optional().default(true)
276
+ });
277
+ function isTrackingConfig(value) {
278
+ return TrackingConfigSchema.safeParse(value).success;
279
+ }
280
+ function isTrackEventStepPayload(value) {
281
+ return TrackEventStepPayloadSchema.safeParse(value).success;
282
+ }
283
+
284
+ // src/actions.ts
285
+ var ActionTriggerTypeSchema = import_zod2.z.enum([
129
286
  "click",
130
287
  "submit",
131
288
  "change",
@@ -134,7 +291,7 @@ var ActionTriggerTypeSchema = import_zod.z.enum([
134
291
  "load"
135
292
  ]);
136
293
  var ActionTriggerSchema = ActionTriggerTypeSchema;
137
- var ActionStepTypeSchema = import_zod.z.enum([
294
+ var ActionStepTypeSchema = import_zod2.z.enum([
138
295
  "api_request",
139
296
  "navigate",
140
297
  "set_state",
@@ -143,9 +300,10 @@ var ActionStepTypeSchema = import_zod.z.enum([
143
300
  "open_modal",
144
301
  "close_modal",
145
302
  "copy_clipboard",
146
- "custom_event"
303
+ "custom_event",
304
+ "track_event"
147
305
  ]);
148
- var ConditionOperatorSchema = import_zod.z.enum([
306
+ var ConditionOperatorSchema = import_zod2.z.enum([
149
307
  "equals",
150
308
  "not_equals",
151
309
  "contains",
@@ -158,10 +316,10 @@ var ConditionOperatorSchema = import_zod.z.enum([
158
316
  "lte",
159
317
  "regex"
160
318
  ]);
161
- var ActionStepConditionSchema = import_zod.z.object({
162
- field: import_zod.z.string().min(1, "Condition field cannot be empty"),
319
+ var ActionStepConditionSchema = import_zod2.z.object({
320
+ field: import_zod2.z.string().min(1, "Condition field cannot be empty"),
163
321
  operator: ConditionOperatorSchema,
164
- value: import_zod.z.unknown().optional()
322
+ value: import_zod2.z.unknown().optional()
165
323
  });
166
324
  var DANGEROUS_URL_PATTERN = /(javascript:|vbscript:|data:text\/html)/i;
167
325
  var DANGEROUS_SCRIPT_PATTERN = /<\s*script/i;
@@ -172,68 +330,68 @@ function isSafeActionUrl(url) {
172
330
  if (DANGEROUS_SCRIPT_PATTERN.test(trimmed)) return false;
173
331
  return true;
174
332
  }
175
- var SafeUrlStringSchema = import_zod.z.string().min(1, "URL cannot be empty").refine(isSafeActionUrl, {
333
+ var SafeUrlStringSchema = import_zod2.z.string().min(1, "URL cannot be empty").refine(isSafeActionUrl, {
176
334
  message: "URL contains disallowed or unsafe protocol/script pattern"
177
335
  });
178
- var SafeEventNameSchema = import_zod.z.string().min(1, "Event name cannot be empty").regex(/^[a-zA-Z0-9_\-:]+$/, {
336
+ var SafeEventNameSchema = import_zod2.z.string().min(1, "Event name cannot be empty").regex(/^[a-zA-Z0-9_\-:]+$/, {
179
337
  message: "Event name must contain only alphanumeric characters, dashes, colons, or underscores"
180
338
  });
181
- var ApiRequestStepPayloadSchema = import_zod.z.object({
339
+ var ApiRequestStepPayloadSchema = import_zod2.z.object({
182
340
  url: SafeUrlStringSchema,
183
- method: import_zod.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]).default("GET"),
184
- headers: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional(),
185
- queryParams: import_zod.z.record(import_zod.z.string(), import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean()])).optional(),
186
- body: import_zod.z.union([import_zod.z.string(), import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()), import_zod.z.array(import_zod.z.unknown())]).optional(),
187
- bodyFormat: import_zod.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
188
- bodyType: import_zod.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
189
- timeout: import_zod.z.number().positive("Timeout must be greater than 0 ms").optional(),
190
- responseMapping: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional()
341
+ method: import_zod2.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]).default("GET"),
342
+ headers: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional(),
343
+ queryParams: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.union([import_zod2.z.string(), import_zod2.z.number(), import_zod2.z.boolean()])).optional(),
344
+ body: import_zod2.z.union([import_zod2.z.string(), import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()), import_zod2.z.array(import_zod2.z.unknown())]).optional(),
345
+ bodyFormat: import_zod2.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
346
+ bodyType: import_zod2.z.enum(["json", "form-data", "formData", "urlencoded", "url-encoded", "raw", "text"]).optional(),
347
+ timeout: import_zod2.z.number().positive("Timeout must be greater than 0 ms").optional(),
348
+ responseMapping: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string()).optional()
191
349
  });
192
- var NavigateStepPayloadSchema = import_zod.z.object({
350
+ var NavigateStepPayloadSchema = import_zod2.z.object({
193
351
  url: SafeUrlStringSchema,
194
- target: import_zod.z.enum(["_self", "_blank", "_parent", "_top"]).optional().default("_self"),
195
- replace: import_zod.z.boolean().optional(),
196
- scroll: import_zod.z.boolean().optional(),
197
- behavior: import_zod.z.enum(["smooth", "auto"]).optional()
352
+ target: import_zod2.z.enum(["_self", "_blank", "_parent", "_top"]).optional().default("_self"),
353
+ replace: import_zod2.z.boolean().optional(),
354
+ scroll: import_zod2.z.boolean().optional(),
355
+ behavior: import_zod2.z.enum(["smooth", "auto"]).optional()
198
356
  });
199
- var SetStateStepPayloadSchema = import_zod.z.object({
200
- key: import_zod.z.string().min(1, "State key cannot be empty"),
201
- value: import_zod.z.unknown(),
202
- scope: import_zod.z.enum(["runtime", "document", "session", "local"]).optional().default("runtime")
357
+ var SetStateStepPayloadSchema = import_zod2.z.object({
358
+ key: import_zod2.z.string().min(1, "State key cannot be empty"),
359
+ value: import_zod2.z.unknown(),
360
+ scope: import_zod2.z.enum(["runtime", "document", "session", "local"]).optional().default("runtime")
203
361
  });
204
- var ResetFormStepPayloadSchema = import_zod.z.object({
205
- formId: import_zod.z.string().optional()
362
+ var ResetFormStepPayloadSchema = import_zod2.z.object({
363
+ formId: import_zod2.z.string().optional()
206
364
  });
207
- var ShowToastStepPayloadSchema = import_zod.z.object({
208
- message: import_zod.z.string().min(1, "Toast message cannot be empty"),
209
- type: import_zod.z.enum(["success", "error", "warning", "info"]).optional().default("info"),
210
- variant: import_zod.z.enum(["success", "error", "warning", "info"]).optional(),
211
- title: import_zod.z.string().optional(),
212
- duration: import_zod.z.number().nonnegative("Duration must be >= 0 ms").optional(),
213
- position: import_zod.z.enum(["top-right", "top-left", "bottom-right", "bottom-left", "top-center", "bottom-center"]).optional()
365
+ var ShowToastStepPayloadSchema = import_zod2.z.object({
366
+ message: import_zod2.z.string().min(1, "Toast message cannot be empty"),
367
+ type: import_zod2.z.enum(["success", "error", "warning", "info"]).optional().default("info"),
368
+ variant: import_zod2.z.enum(["success", "error", "warning", "info"]).optional(),
369
+ title: import_zod2.z.string().optional(),
370
+ duration: import_zod2.z.number().nonnegative("Duration must be >= 0 ms").optional(),
371
+ position: import_zod2.z.enum(["top-right", "top-left", "bottom-right", "bottom-left", "top-center", "bottom-center"]).optional()
214
372
  });
215
- var OpenModalStepPayloadSchema = import_zod.z.object({
216
- modalId: import_zod.z.string().optional(),
217
- modalNodeId: import_zod.z.string().optional(),
218
- toggle: import_zod.z.boolean().optional()
373
+ var OpenModalStepPayloadSchema = import_zod2.z.object({
374
+ modalId: import_zod2.z.string().optional(),
375
+ modalNodeId: import_zod2.z.string().optional(),
376
+ toggle: import_zod2.z.boolean().optional()
219
377
  }).refine((data) => Boolean(data.modalId || data.modalNodeId), {
220
378
  message: "Modal ID or Modal Node ID cannot be empty"
221
379
  });
222
- var CloseModalStepPayloadSchema = import_zod.z.object({
223
- modalId: import_zod.z.string().optional(),
224
- modalNodeId: import_zod.z.string().optional()
380
+ var CloseModalStepPayloadSchema = import_zod2.z.object({
381
+ modalId: import_zod2.z.string().optional(),
382
+ modalNodeId: import_zod2.z.string().optional()
225
383
  });
226
- var CopyClipboardStepPayloadSchema = import_zod.z.object({
227
- text: import_zod.z.string().optional(),
228
- value: import_zod.z.unknown().optional(),
229
- notify: import_zod.z.boolean().optional(),
230
- toastMessage: import_zod.z.string().optional()
384
+ var CopyClipboardStepPayloadSchema = import_zod2.z.object({
385
+ text: import_zod2.z.string().optional(),
386
+ value: import_zod2.z.unknown().optional(),
387
+ notify: import_zod2.z.boolean().optional(),
388
+ toastMessage: import_zod2.z.string().optional()
231
389
  });
232
- var CustomEventStepPayloadSchema = import_zod.z.object({
390
+ var CustomEventStepPayloadSchema = import_zod2.z.object({
233
391
  eventName: SafeEventNameSchema,
234
- detail: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional(),
235
- bubbles: import_zod.z.boolean().optional().default(true),
236
- cancelable: import_zod.z.boolean().optional().default(true)
392
+ detail: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional(),
393
+ bubbles: import_zod2.z.boolean().optional().default(true),
394
+ cancelable: import_zod2.z.boolean().optional().default(true)
237
395
  });
238
396
  var StepPayloadSchemas = {
239
397
  api_request: ApiRequestStepPayloadSchema,
@@ -244,29 +402,30 @@ var StepPayloadSchemas = {
244
402
  open_modal: OpenModalStepPayloadSchema,
245
403
  close_modal: CloseModalStepPayloadSchema,
246
404
  copy_clipboard: CopyClipboardStepPayloadSchema,
247
- custom_event: CustomEventStepPayloadSchema
405
+ custom_event: CustomEventStepPayloadSchema,
406
+ track_event: TrackEventStepPayloadSchema
248
407
  };
249
- var ActionStepSchema = import_zod.z.lazy(
250
- () => import_zod.z.object({
251
- id: import_zod.z.string().min(1, "Step ID cannot be empty"),
408
+ var ActionStepSchema = import_zod2.z.lazy(
409
+ () => import_zod2.z.object({
410
+ id: import_zod2.z.string().min(1, "Step ID cannot be empty"),
252
411
  type: ActionStepTypeSchema,
253
- label: import_zod.z.string().optional(),
254
- payload: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional().default({}),
412
+ label: import_zod2.z.string().optional(),
413
+ payload: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional().default({}),
255
414
  condition: ActionStepConditionSchema.optional(),
256
- timeout: import_zod.z.number().positive().optional(),
257
- continueOnError: import_zod.z.boolean().optional(),
258
- onSuccess: import_zod.z.array(ActionStepSchema).optional(),
259
- onError: import_zod.z.array(ActionStepSchema).optional()
415
+ timeout: import_zod2.z.number().positive().optional(),
416
+ continueOnError: import_zod2.z.boolean().optional(),
417
+ onSuccess: import_zod2.z.array(ActionStepSchema).optional(),
418
+ onError: import_zod2.z.array(ActionStepSchema).optional()
260
419
  })
261
420
  );
262
- var ActionPipelineSchema = import_zod.z.object({
263
- id: import_zod.z.string().min(1, "Pipeline ID cannot be empty"),
421
+ var ActionPipelineSchema = import_zod2.z.object({
422
+ id: import_zod2.z.string().min(1, "Pipeline ID cannot be empty"),
264
423
  trigger: ActionTriggerTypeSchema,
265
- label: import_zod.z.string().optional(),
266
- debounceMs: import_zod.z.number().nonnegative("Debounce ms must be >= 0").optional(),
267
- preventDuplicate: import_zod.z.boolean().optional(),
268
- enabled: import_zod.z.boolean().optional().default(true),
269
- steps: import_zod.z.array(ActionStepSchema).min(1, "Action pipeline must contain at least one step")
424
+ label: import_zod2.z.string().optional(),
425
+ debounceMs: import_zod2.z.number().nonnegative("Debounce ms must be >= 0").optional(),
426
+ preventDuplicate: import_zod2.z.boolean().optional(),
427
+ enabled: import_zod2.z.boolean().optional().default(true),
428
+ steps: import_zod2.z.array(ActionStepSchema).min(1, "Action pipeline must contain at least one step")
270
429
  });
271
430
  function isActionTriggerType(value) {
272
431
  return ActionTriggerTypeSchema.safeParse(value).success;
@@ -291,9 +450,9 @@ function validateActionStepPayload(type, payload) {
291
450
  if (!schema) {
292
451
  return {
293
452
  success: false,
294
- error: new import_zod.z.ZodError([
453
+ error: new import_zod2.z.ZodError([
295
454
  {
296
- code: import_zod.z.ZodIssueCode.custom,
455
+ code: import_zod2.z.ZodIssueCode.custom,
297
456
  message: `Unknown step type: ${type}`,
298
457
  path: ["type"]
299
458
  }
@@ -381,8 +540,8 @@ function sanitizeActionPipeline(pipeline) {
381
540
  }
382
541
 
383
542
  // src/form.ts
384
- var import_zod2 = require("zod");
385
- var ValidationRuleTypeSchema = import_zod2.z.enum([
543
+ var import_zod3 = require("zod");
544
+ var ValidationRuleTypeSchema = import_zod3.z.enum([
386
545
  "required",
387
546
  "email",
388
547
  "url",
@@ -394,29 +553,29 @@ var ValidationRuleTypeSchema = import_zod2.z.enum([
394
553
  "match_field",
395
554
  "custom_regex"
396
555
  ]);
397
- var ValidateOnEventSchema = import_zod2.z.enum(["blur", "change", "submit"]);
398
- var ValidationRuleSchema = import_zod2.z.object({
556
+ var ValidateOnEventSchema = import_zod3.z.enum(["blur", "change", "submit"]);
557
+ var ValidationRuleSchema = import_zod3.z.object({
399
558
  type: ValidationRuleTypeSchema,
400
- value: import_zod2.z.unknown().optional(),
401
- message: import_zod2.z.string().min(1, "Validation error message cannot be empty")
559
+ value: import_zod3.z.unknown().optional(),
560
+ message: import_zod3.z.string().min(1, "Validation error message cannot be empty")
402
561
  });
403
- var FormFieldBindingSchema = import_zod2.z.object({
404
- name: import_zod2.z.string().min(1, "Field name cannot be empty"),
405
- label: import_zod2.z.string().optional(),
406
- defaultValue: import_zod2.z.unknown().optional(),
407
- rules: import_zod2.z.array(ValidationRuleSchema).optional().default([]),
562
+ var FormFieldBindingSchema = import_zod3.z.object({
563
+ name: import_zod3.z.string().min(1, "Field name cannot be empty"),
564
+ label: import_zod3.z.string().optional(),
565
+ defaultValue: import_zod3.z.unknown().optional(),
566
+ rules: import_zod3.z.array(ValidationRuleSchema).optional().default([]),
408
567
  validateOn: ValidateOnEventSchema.optional().default("blur"),
409
- transform: import_zod2.z.enum(["trim", "lowercase", "uppercase", "number"]).optional(),
410
- disabled: import_zod2.z.boolean().optional(),
411
- required: import_zod2.z.boolean().optional()
568
+ transform: import_zod3.z.enum(["trim", "lowercase", "uppercase", "number"]).optional(),
569
+ disabled: import_zod3.z.boolean().optional(),
570
+ required: import_zod3.z.boolean().optional()
412
571
  });
413
- var FormConfigSchema = import_zod2.z.object({
414
- formId: import_zod2.z.string().min(1, "Form ID cannot be empty"),
415
- resetOnSubmit: import_zod2.z.boolean().optional().default(false),
416
- scrollToFirstError: import_zod2.z.boolean().optional().default(true),
572
+ var FormConfigSchema = import_zod3.z.object({
573
+ formId: import_zod3.z.string().min(1, "Form ID cannot be empty"),
574
+ resetOnSubmit: import_zod3.z.boolean().optional().default(false),
575
+ scrollToFirstError: import_zod3.z.boolean().optional().default(true),
417
576
  validateOn: ValidateOnEventSchema.optional().default("blur"),
418
- initialValues: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional(),
419
- rules: import_zod2.z.array(ValidationRuleSchema).optional()
577
+ initialValues: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
578
+ rules: import_zod3.z.array(ValidationRuleSchema).optional()
420
579
  });
421
580
  function isValidationRuleType(value) {
422
581
  return ValidationRuleTypeSchema.safeParse(value).success;
@@ -437,55 +596,55 @@ function isFormConfig(value) {
437
596
  // src/document.ts
438
597
  var SCHEMA_NAME = "stora.page";
439
598
  var CURRENT_SCHEMA_VERSION = "1.0.0";
440
- var AssetReferenceSchema = import_zod3.z.object({
441
- type: import_zod3.z.literal("asset"),
442
- assetId: import_zod3.z.string().min(1, "Asset ID cannot be empty"),
443
- filename: import_zod3.z.string().optional(),
444
- mimeType: import_zod3.z.string().optional(),
445
- fallbackUrl: import_zod3.z.string().url().optional()
599
+ var AssetReferenceSchema = import_zod4.z.object({
600
+ type: import_zod4.z.literal("asset"),
601
+ assetId: import_zod4.z.string().min(1, "Asset ID cannot be empty"),
602
+ filename: import_zod4.z.string().optional(),
603
+ mimeType: import_zod4.z.string().optional(),
604
+ fallbackUrl: import_zod4.z.string().url().optional()
446
605
  });
447
- var VariableBindingSchema = import_zod3.z.object({
448
- type: import_zod3.z.literal("variable"),
449
- key: import_zod3.z.string().min(1, "Variable key cannot be empty"),
450
- fallback: import_zod3.z.unknown().optional()
606
+ var VariableBindingSchema = import_zod4.z.object({
607
+ type: import_zod4.z.literal("variable"),
608
+ key: import_zod4.z.string().min(1, "Variable key cannot be empty"),
609
+ fallback: import_zod4.z.unknown().optional()
451
610
  });
452
- var ActionBindingSchema = import_zod3.z.object({
453
- type: import_zod3.z.string().min(1, "Action type cannot be empty"),
454
- payload: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional()
611
+ var ActionBindingSchema = import_zod4.z.object({
612
+ type: import_zod4.z.string().min(1, "Action type cannot be empty"),
613
+ payload: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional()
455
614
  });
456
615
  var DANGEROUS_STYLE_VALUE_PATTERN = /javascript:|expression\(|@import|<script|vbscript:|data:text\/html/i;
457
- var StyleValueSchema = import_zod3.z.union([
458
- import_zod3.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
616
+ var StyleValueSchema = import_zod4.z.union([
617
+ import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
459
618
  message: "Style value contains a disallowed or unsafe pattern"
460
619
  }),
461
- import_zod3.z.number(),
462
- import_zod3.z.boolean(),
463
- import_zod3.z.null(),
464
- import_zod3.z.undefined()
620
+ import_zod4.z.number(),
621
+ import_zod4.z.boolean(),
622
+ import_zod4.z.null(),
623
+ import_zod4.z.undefined()
465
624
  ]);
466
- var StyleDefinitionSchema = import_zod3.z.record(import_zod3.z.string(), StyleValueSchema);
467
- var PseudoStateStylesSchema = import_zod3.z.record(import_zod3.z.string(), StyleDefinitionSchema);
468
- var ResponsiveStylesSchema = import_zod3.z.object({
625
+ var StyleDefinitionSchema = import_zod4.z.record(import_zod4.z.string(), StyleValueSchema);
626
+ var PseudoStateStylesSchema = import_zod4.z.record(import_zod4.z.string(), StyleDefinitionSchema);
627
+ var ResponsiveStylesSchema = import_zod4.z.object({
469
628
  base: StyleDefinitionSchema.optional(),
470
629
  desktop: StyleDefinitionSchema.optional(),
471
630
  tablet: StyleDefinitionSchema.optional(),
472
631
  mobile: StyleDefinitionSchema.optional(),
473
632
  states: PseudoStateStylesSchema.optional()
474
633
  }).passthrough().default({});
475
- var AnimationConfigSchema = import_zod3.z.object({
476
- type: import_zod3.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
634
+ var AnimationConfigSchema = import_zod4.z.object({
635
+ type: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
477
636
  message: "Animation type contains a disallowed or unsafe pattern"
478
637
  }).optional().default("none"),
479
- duration: import_zod3.z.number().min(0, "Duration must be non-negative").optional().default(600),
480
- delay: import_zod3.z.number().min(0, "Delay must be non-negative").optional().default(0),
481
- easing: import_zod3.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
638
+ duration: import_zod4.z.number().min(0, "Duration must be non-negative").optional().default(600),
639
+ delay: import_zod4.z.number().min(0, "Delay must be non-negative").optional().default(0),
640
+ easing: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
482
641
  message: "Animation easing contains a disallowed or unsafe pattern"
483
642
  }).optional().default("ease-out"),
484
- once: import_zod3.z.boolean().optional().default(true),
485
- hoverEffect: import_zod3.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
643
+ once: import_zod4.z.boolean().optional().default(true),
644
+ hoverEffect: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
486
645
  message: "Hover effect contains a disallowed or unsafe pattern"
487
646
  }).optional().default("none"),
488
- loopEffect: import_zod3.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
647
+ loopEffect: import_zod4.z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {
489
648
  message: "Loop effect contains a disallowed or unsafe pattern"
490
649
  }).optional().default("none")
491
650
  });
@@ -498,16 +657,16 @@ var DEFAULT_ANIMATION_CONFIG = {
498
657
  hoverEffect: "none",
499
658
  loopEffect: "none"
500
659
  };
501
- var NodeSchema = import_zod3.z.lazy(
502
- () => import_zod3.z.object({
503
- id: import_zod3.z.string().min(1, "Node ID must be a non-empty string"),
504
- type: import_zod3.z.string().min(1, "Node type must be a non-empty string"),
505
- props: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional().default({}),
660
+ var NodeSchema = import_zod4.z.lazy(
661
+ () => import_zod4.z.object({
662
+ id: import_zod4.z.string().min(1, "Node ID must be a non-empty string"),
663
+ type: import_zod4.z.string().min(1, "Node type must be a non-empty string"),
664
+ props: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional().default({}),
506
665
  styles: ResponsiveStylesSchema.optional().default({}),
507
666
  animation: AnimationConfigSchema.optional(),
508
- actions: import_zod3.z.array(ActionPipelineSchema).optional(),
667
+ actions: import_zod4.z.array(ActionPipelineSchema).optional(),
509
668
  formConfig: FormConfigSchema.optional(),
510
- children: import_zod3.z.array(NodeSchema).optional().default([])
669
+ children: import_zod4.z.array(NodeSchema).optional().default([])
511
670
  })
512
671
  );
513
672
  var RootPageNodeSchema = NodeSchema.refine(
@@ -517,61 +676,64 @@ var RootPageNodeSchema = NodeSchema.refine(
517
676
  path: ["type"]
518
677
  }
519
678
  );
520
- var DocumentMetadataSchema = import_zod3.z.object({
521
- title: import_zod3.z.string().min(1, "Title is required").default("Untitled Page"),
522
- description: import_zod3.z.string().optional().default(""),
523
- author: import_zod3.z.string().optional().default(""),
524
- createdAt: import_zod3.z.string().optional(),
525
- updatedAt: import_zod3.z.string().optional(),
526
- tags: import_zod3.z.array(import_zod3.z.string()).optional().default([]),
527
- category: import_zod3.z.string().optional().default("general"),
528
- version: import_zod3.z.string().optional().default("1.0.0"),
529
- custom: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional()
679
+ var DocumentMetadataSchema = import_zod4.z.object({
680
+ title: import_zod4.z.string().min(1, "Title is required").default("Untitled Page"),
681
+ description: import_zod4.z.string().optional().default(""),
682
+ author: import_zod4.z.string().optional().default(""),
683
+ createdAt: import_zod4.z.string().optional(),
684
+ updatedAt: import_zod4.z.string().optional(),
685
+ tags: import_zod4.z.array(import_zod4.z.string()).optional().default([]),
686
+ category: import_zod4.z.string().optional().default("general"),
687
+ version: import_zod4.z.string().optional().default("1.0.0"),
688
+ custom: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).optional(),
689
+ tracking: TrackingConfigSchema.optional()
530
690
  });
531
- var PageDocumentSchema = import_zod3.z.object({
532
- schema: import_zod3.z.literal(SCHEMA_NAME),
533
- version: import_zod3.z.string().min(1, "Schema version is required").default(CURRENT_SCHEMA_VERSION),
691
+ var PageDocumentSchema = import_zod4.z.object({
692
+ schema: import_zod4.z.literal(SCHEMA_NAME),
693
+ version: import_zod4.z.string().min(1, "Schema version is required").default(CURRENT_SCHEMA_VERSION),
534
694
  metadata: DocumentMetadataSchema.optional(),
695
+ tracking: TrackingConfigSchema.optional(),
535
696
  document: RootPageNodeSchema
536
697
  });
537
698
  var PROJECT_SCHEMA_NAME = "stora.project";
538
699
  var CURRENT_PROJECT_SCHEMA_VERSION = "1.0.0";
539
700
  var ARTBOARD_REFERENCE_NODE_TYPE = "artboard-reference";
540
- var ArtboardTypeSchema = import_zod3.z.enum(["page", "component"]);
541
- var ArtboardSchema = import_zod3.z.object({
542
- id: import_zod3.z.string().min(1, "Artboard ID is required"),
543
- name: import_zod3.z.string().min(1, "Artboard name is required"),
701
+ var ArtboardTypeSchema = import_zod4.z.enum(["page", "component"]);
702
+ var ArtboardSchema = import_zod4.z.object({
703
+ id: import_zod4.z.string().min(1, "Artboard ID is required"),
704
+ name: import_zod4.z.string().min(1, "Artboard name is required"),
544
705
  artboardType: ArtboardTypeSchema,
545
706
  /** Route for page artboards (e.g. "/about"). */
546
- slug: import_zod3.z.string().optional(),
707
+ slug: import_zod4.z.string().optional(),
547
708
  /**
548
709
  * For component artboards: the id that `open_modal` / `close_modal` actions target.
549
710
  * Mirrors the detached node's own `props.modalId` so ModalManager keeps working unchanged.
550
711
  */
551
- triggerId: import_zod3.z.string().optional(),
712
+ triggerId: import_zod4.z.string().optional(),
552
713
  /**
553
714
  * Viewport/breakpoint this artboard is currently authored at. Declared inline
554
715
  * (rather than imported) because viewport is otherwise an editor/renderer concept.
555
716
  */
556
- viewport: import_zod3.z.enum(["desktop", "tablet", "mobile"]).optional(),
717
+ viewport: import_zod4.z.enum(["desktop", "tablet", "mobile"]).optional(),
557
718
  /** Persisted artboard width in px, matching the canvas ViewportResizer's `width`. */
558
- width: import_zod3.z.number().positive().optional(),
719
+ width: import_zod4.z.number().positive().optional(),
559
720
  /**
560
721
  * Free position on the builder's infinite canvas, in unscaled canvas px. Absent means
561
722
  * "not placed yet" — the canvas then falls back to laying the artboard out in a row.
562
723
  */
563
- position: import_zod3.z.object({
564
- x: import_zod3.z.number(),
565
- y: import_zod3.z.number()
724
+ position: import_zod4.z.object({
725
+ x: import_zod4.z.number(),
726
+ y: import_zod4.z.number()
566
727
  }).optional(),
567
728
  document: PageDocumentSchema
568
729
  });
569
- var ProjectDocumentSchema = import_zod3.z.object({
570
- schema: import_zod3.z.literal(PROJECT_SCHEMA_NAME),
571
- version: import_zod3.z.string().min(1, "Schema version is required").default(CURRENT_PROJECT_SCHEMA_VERSION),
730
+ var ProjectDocumentSchema = import_zod4.z.object({
731
+ schema: import_zod4.z.literal(PROJECT_SCHEMA_NAME),
732
+ version: import_zod4.z.string().min(1, "Schema version is required").default(CURRENT_PROJECT_SCHEMA_VERSION),
572
733
  metadata: DocumentMetadataSchema.optional(),
573
- artboards: import_zod3.z.array(ArtboardSchema).min(1, "A project needs at least one artboard"),
574
- activeArtboardId: import_zod3.z.string().optional()
734
+ tracking: TrackingConfigSchema.optional(),
735
+ artboards: import_zod4.z.array(ArtboardSchema).min(1, "A project needs at least one artboard"),
736
+ activeArtboardId: import_zod4.z.string().optional()
575
737
  });
576
738
  function isAssetReference(value) {
577
739
  return AssetReferenceSchema.safeParse(value).success;
@@ -627,30 +789,30 @@ function validateNodeIdUniqueness(node) {
627
789
  }
628
790
 
629
791
  // src/manifest.ts
630
- var import_zod4 = require("zod");
631
- var ManifestAssetItemSchema = import_zod4.z.object({
632
- id: import_zod4.z.string().min(1, "Asset ID cannot be empty"),
633
- path: import_zod4.z.string().min(1, "Asset archive path cannot be empty"),
634
- mimeType: import_zod4.z.string().min(1, "MIME type cannot be empty"),
635
- size: import_zod4.z.number().nonnegative("Asset size must be non-negative"),
636
- checksum: import_zod4.z.string().optional()
792
+ var import_zod5 = require("zod");
793
+ var ManifestAssetItemSchema = import_zod5.z.object({
794
+ id: import_zod5.z.string().min(1, "Asset ID cannot be empty"),
795
+ path: import_zod5.z.string().min(1, "Asset archive path cannot be empty"),
796
+ mimeType: import_zod5.z.string().min(1, "MIME type cannot be empty"),
797
+ size: import_zod5.z.number().nonnegative("Asset size must be non-negative"),
798
+ checksum: import_zod5.z.string().optional()
637
799
  });
638
- var ManifestSchema = import_zod4.z.object({
639
- schema: import_zod4.z.literal(SCHEMA_NAME).default(SCHEMA_NAME),
640
- schemaVersion: import_zod4.z.string().min(1, "Schema version cannot be empty").default("1.0.0"),
641
- packageVersion: import_zod4.z.string().min(1, "Package version cannot be empty").default("1.0.0"),
642
- builderCompatibility: import_zod4.z.string().default(">=0.1.0"),
643
- requiredComponents: import_zod4.z.array(import_zod4.z.string()).default([]),
644
- requiredCapabilities: import_zod4.z.array(import_zod4.z.string()).default([]),
645
- assets: import_zod4.z.array(ManifestAssetItemSchema).default([]),
646
- createdAt: import_zod4.z.string().optional()
800
+ var ManifestSchema = import_zod5.z.object({
801
+ schema: import_zod5.z.literal(SCHEMA_NAME).default(SCHEMA_NAME),
802
+ schemaVersion: import_zod5.z.string().min(1, "Schema version cannot be empty").default("1.0.0"),
803
+ packageVersion: import_zod5.z.string().min(1, "Package version cannot be empty").default("1.0.0"),
804
+ builderCompatibility: import_zod5.z.string().default(">=0.1.0"),
805
+ requiredComponents: import_zod5.z.array(import_zod5.z.string()).default([]),
806
+ requiredCapabilities: import_zod5.z.array(import_zod5.z.string()).default([]),
807
+ assets: import_zod5.z.array(ManifestAssetItemSchema).default([]),
808
+ createdAt: import_zod5.z.string().optional()
647
809
  });
648
810
  function isManifest(value) {
649
811
  return ManifestSchema.safeParse(value).success;
650
812
  }
651
813
 
652
814
  // src/template.ts
653
- var import_zod5 = require("zod");
815
+ var import_zod6 = require("zod");
654
816
  var DANGEROUS_URI_PATTERN = /^(javascript:|vbscript:|data:(?!image\/))|<script/i;
655
817
  function isSafeThumbnailUrl(url) {
656
818
  if (!url || typeof url !== "string") return false;
@@ -659,49 +821,49 @@ function isSafeThumbnailUrl(url) {
659
821
  if (DANGEROUS_URI_PATTERN.test(trimmed)) return false;
660
822
  return true;
661
823
  }
662
- var SafeThumbnailUrlSchema = import_zod5.z.string().min(1, "Thumbnail URL cannot be empty").refine(
824
+ var SafeThumbnailUrlSchema = import_zod6.z.string().min(1, "Thumbnail URL cannot be empty").refine(
663
825
  (url) => isSafeThumbnailUrl(url),
664
826
  { message: "Thumbnail URL contains an unsafe protocol or payload" }
665
827
  );
666
- var SafeThumbnailObjectSchema = import_zod5.z.object({
828
+ var SafeThumbnailObjectSchema = import_zod6.z.object({
667
829
  url: SafeThumbnailUrlSchema,
668
- alt: import_zod5.z.string().optional(),
669
- width: import_zod5.z.number().positive().optional(),
670
- height: import_zod5.z.number().positive().optional()
830
+ alt: import_zod6.z.string().optional(),
831
+ width: import_zod6.z.number().positive().optional(),
832
+ height: import_zod6.z.number().positive().optional()
671
833
  });
672
- var SafeThumbnailSchema = import_zod5.z.union([
834
+ var SafeThumbnailSchema = import_zod6.z.union([
673
835
  AssetReferenceSchema,
674
836
  SafeThumbnailObjectSchema,
675
837
  SafeThumbnailUrlSchema
676
838
  ]);
677
- var TemplatePackageRefSchema = import_zod5.z.object({
678
- path: import_zod5.z.string().optional(),
839
+ var TemplatePackageRefSchema = import_zod6.z.object({
840
+ path: import_zod6.z.string().optional(),
679
841
  url: SafeThumbnailUrlSchema.optional(),
680
- checksum: import_zod5.z.string().optional(),
681
- format: import_zod5.z.enum(["stora", "json"]).default("stora")
842
+ checksum: import_zod6.z.string().optional(),
843
+ format: import_zod6.z.enum(["stora", "json"]).default("stora")
682
844
  });
683
- var TemplateRequirementsSchema = import_zod5.z.object({
684
- requiredComponents: import_zod5.z.array(import_zod5.z.string()).default([]),
685
- requiredCapabilities: import_zod5.z.array(import_zod5.z.string()).default([])
845
+ var TemplateRequirementsSchema = import_zod6.z.object({
846
+ requiredComponents: import_zod6.z.array(import_zod6.z.string()).default([]),
847
+ requiredCapabilities: import_zod6.z.array(import_zod6.z.string()).default([])
686
848
  });
687
- var TemplateRecordSchema = import_zod5.z.object({
688
- id: import_zod5.z.string().min(1, "Template ID must be a non-empty string"),
689
- name: import_zod5.z.string().min(1, "Template name must be a non-empty string"),
690
- description: import_zod5.z.string().optional().default(""),
691
- category: import_zod5.z.string().optional().default("general"),
692
- tags: import_zod5.z.array(import_zod5.z.string()).optional().default([]),
849
+ var TemplateRecordSchema = import_zod6.z.object({
850
+ id: import_zod6.z.string().min(1, "Template ID must be a non-empty string"),
851
+ name: import_zod6.z.string().min(1, "Template name must be a non-empty string"),
852
+ description: import_zod6.z.string().optional().default(""),
853
+ category: import_zod6.z.string().optional().default("general"),
854
+ tags: import_zod6.z.array(import_zod6.z.string()).optional().default([]),
693
855
  thumbnail: SafeThumbnailSchema.optional(),
694
- author: import_zod5.z.string().optional().default(""),
695
- version: import_zod5.z.string().optional().default("1.0.0"),
856
+ author: import_zod6.z.string().optional().default(""),
857
+ version: import_zod6.z.string().optional().default("1.0.0"),
696
858
  document: PageDocumentSchema.optional(),
697
859
  packageReference: TemplatePackageRefSchema.optional(),
698
860
  requirements: TemplateRequirementsSchema.default({
699
861
  requiredComponents: [],
700
862
  requiredCapabilities: []
701
863
  }),
702
- createdAt: import_zod5.z.string().optional(),
703
- updatedAt: import_zod5.z.string().optional(),
704
- custom: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.unknown()).optional()
864
+ createdAt: import_zod6.z.string().optional(),
865
+ updatedAt: import_zod6.z.string().optional(),
866
+ custom: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional()
705
867
  });
706
868
  function isTemplateRecord(value) {
707
869
  return TemplateRecordSchema.safeParse(value).success;
@@ -1751,15 +1913,19 @@ function getFormFieldBindingJsonSchema() {
1751
1913
  ConditionOperatorSchema,
1752
1914
  CopyClipboardStepPayloadSchema,
1753
1915
  CustomEventStepPayloadSchema,
1916
+ CustomTrackingProviderConfigSchema,
1754
1917
  DEFAULT_ANIMATION_CONFIG,
1755
1918
  DocumentMetadataSchema,
1756
1919
  FORM_CONFIG_JSON_SCHEMA_V1,
1757
1920
  FORM_FIELD_BINDING_JSON_SCHEMA_V1,
1758
1921
  FormConfigSchema,
1759
1922
  FormFieldBindingSchema,
1923
+ GoogleTrackingProviderConfigSchema,
1924
+ GtmTrackingProviderConfigSchema,
1760
1925
  MANIFEST_JSON_SCHEMA_V1,
1761
1926
  ManifestAssetItemSchema,
1762
1927
  ManifestSchema,
1928
+ MetaTrackingProviderConfigSchema,
1763
1929
  NavigateStepPayloadSchema,
1764
1930
  NodeSchema,
1765
1931
  OpenModalStepPayloadSchema,
@@ -1777,6 +1943,7 @@ function getFormFieldBindingJsonSchema() {
1777
1943
  SafeThumbnailUrlSchema,
1778
1944
  SetStateStepPayloadSchema,
1779
1945
  ShowToastStepPayloadSchema,
1946
+ StandardTrackingEventSchema,
1780
1947
  StepPayloadSchemas,
1781
1948
  StyleDefinitionSchema,
1782
1949
  StyleValueSchema,
@@ -1784,6 +1951,11 @@ function getFormFieldBindingJsonSchema() {
1784
1951
  TemplatePackageRefSchema,
1785
1952
  TemplateRecordSchema,
1786
1953
  TemplateRequirementsSchema,
1954
+ TikTokTrackingProviderConfigSchema,
1955
+ TrackEventStepPayloadSchema,
1956
+ TrackingConfigSchema,
1957
+ TrackingDeliverySchema,
1958
+ TrackingProviderTypeSchema,
1787
1959
  ValidateOnEventSchema,
1788
1960
  ValidationRuleSchema,
1789
1961
  ValidationRuleTypeSchema,
@@ -1814,6 +1986,8 @@ function getFormFieldBindingJsonSchema() {
1814
1986
  isSafeThumbnail,
1815
1987
  isSafeThumbnailUrl,
1816
1988
  isTemplateRecord,
1989
+ isTrackEventStepPayload,
1990
+ isTrackingConfig,
1817
1991
  isValidateOnEvent,
1818
1992
  isValidationRule,
1819
1993
  isValidationRuleType,