@syntrologie/runtime-sdk 2.4.1 → 2.6.0-canary.1
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/CAPABILITIES.md +66 -1
- package/dist/SmartCanvasApp.d.ts +5 -3
- package/dist/actions/executors/index.d.ts +1 -2
- package/dist/actions/index.d.ts +2 -2
- package/dist/actions/schema.d.ts +19111 -20709
- package/dist/actions/schema.js +5 -2
- package/dist/actions/types.d.ts +45 -48
- package/dist/anchor/AnchorResolver.d.ts +18 -0
- package/dist/anchor/index.d.ts +2 -0
- package/dist/api.d.ts +3 -8
- package/dist/apps/examples/gamification-app.example.d.ts +8 -8
- package/dist/{chunk-4NYS7GAW.js → chunk-BU4Z6PD7.js} +45 -7
- package/dist/chunk-BU4Z6PD7.js.map +7 -0
- package/dist/{chunk-QGWATS3Z.js → chunk-Q4WGXNKC.js} +2775 -1052
- package/dist/chunk-Q4WGXNKC.js.map +7 -0
- package/dist/{chunk-OGTCFYR3.js → chunk-R5DNAIRI.js} +45 -34
- package/dist/chunk-R5DNAIRI.js.map +7 -0
- package/dist/chunk-XDYJ64IN.js +178 -0
- package/dist/chunk-XDYJ64IN.js.map +7 -0
- package/dist/components/ShadowCanvasOverlay.d.ts +2 -20
- package/dist/components/TileIcon.d.ts +14 -0
- package/dist/config/schema.d.ts +5529 -3620
- package/dist/config/schema.js +21 -61
- package/dist/config/schema.js.map +3 -3
- package/dist/context/schema.d.ts +16 -16
- package/dist/decisions/schema.d.ts +357 -2789
- package/dist/decisions/schema.js +7 -1
- package/dist/decisions/types.d.ts +24 -2
- package/dist/events/registerConfigPredicates.d.ts +7 -10
- package/dist/events/schema.d.ts +12 -12
- package/dist/experiments/adapters/growthbook.d.ts +2 -0
- package/dist/experiments/types.d.ts +7 -0
- package/dist/hooks/useShadowCanvasConfig.d.ts +6 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.js +154 -186
- package/dist/index.js.map +3 -3
- package/dist/overlays/schema.d.ts +70 -70
- package/dist/react.js +4 -3
- package/dist/react.js.map +1 -1
- package/dist/runtime.d.ts +3 -0
- package/dist/smart-canvas.esm.js +123 -84
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +3271 -1210
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +123 -84
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/surfaces/types.d.ts +2 -1
- package/dist/theme/ThemeProvider.d.ts +11 -16
- package/dist/theme/defaultTheme.d.ts +6 -1
- package/dist/theme/index.d.ts +3 -4
- package/dist/theme/types.d.ts +11 -0
- package/dist/version.d.ts +1 -1
- package/dist/widgets/WidgetRegistry.d.ts +1 -0
- package/package.json +9 -8
- package/schema/canvas-config.schema.json +10583 -1049
- package/scripts/validate-config.mjs +180 -0
- package/dist/actions/executors/tour.d.ts +0 -18
- package/dist/chunk-4NYS7GAW.js.map +0 -7
- package/dist/chunk-OGTCFYR3.js.map +0 -7
- package/dist/chunk-QGWATS3Z.js.map +0 -7
- package/dist/hooks/useHostPatches.d.ts +0 -9
- package/dist/theme/extractHostTheme.d.ts +0 -14
|
@@ -81,3 +81,183 @@ if (!valid) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
console.log(`\u2705 ${path.relative(process.cwd(), configPath)} is valid.`);
|
|
84
|
+
|
|
85
|
+
// --- Semantic checks (cross-field validation JSON Schema can't express) ---
|
|
86
|
+
const WIDGET_EVENT_MAP = {
|
|
87
|
+
'adaptive-faq:accordion': 'faq:question_revealed',
|
|
88
|
+
'adaptive-nav:tips': 'nav:tip_revealed',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const semanticErrors = [];
|
|
92
|
+
for (const tile of config.tiles ?? []) {
|
|
93
|
+
const expectedEvent = WIDGET_EVENT_MAP[tile.widget];
|
|
94
|
+
if (!expectedEvent) continue;
|
|
95
|
+
|
|
96
|
+
const actions = tile.props?.actions ?? [];
|
|
97
|
+
const notifyActions = actions.filter((a) => a.notify && a.triggerWhen);
|
|
98
|
+
if (notifyActions.length === 0) continue;
|
|
99
|
+
|
|
100
|
+
// Check tile has a notifications rule matching the expected event
|
|
101
|
+
const rules = tile.notifications ?? [];
|
|
102
|
+
const hasMatchingRule = rules.some((r) => r.on === expectedEvent);
|
|
103
|
+
if (hasMatchingRule) continue;
|
|
104
|
+
|
|
105
|
+
for (const a of notifyActions) {
|
|
106
|
+
const actionId = a.config?.id ?? '(unknown)';
|
|
107
|
+
semanticErrors.push(
|
|
108
|
+
`Tile "${tile.id}": action "${actionId}" has notify + triggerWhen ` +
|
|
109
|
+
`but tile is missing a notifications rule for "${expectedEvent}".\n` +
|
|
110
|
+
` Toast will not render. Add to tile.notifications:\n` +
|
|
111
|
+
` {"on": "${expectedEvent}", "title": "{{props.title}}", "body": "{{props.body}}"}`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (semanticErrors.length > 0) {
|
|
117
|
+
console.error(`\n\u274C ${semanticErrors.length} notification wiring error(s):`);
|
|
118
|
+
for (const e of semanticErrors) console.error(` - ${e}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// --- Semantic check: anchorId.route must include at least one concrete route ---
|
|
123
|
+
// Wildcards allowed by canvas-config.schema.json anchorId.route;
|
|
124
|
+
// update here if the schema adds new glob patterns.
|
|
125
|
+
const WILDCARD_PATTERNS = ['**', '*'];
|
|
126
|
+
|
|
127
|
+
function isWildcardOnly(route) {
|
|
128
|
+
if (typeof route === 'string') return WILDCARD_PATTERNS.includes(route);
|
|
129
|
+
if (Array.isArray(route)) return route.every((r) => WILDCARD_PATTERNS.includes(r));
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const routeErrors = [];
|
|
134
|
+
for (const [i, action] of (config.actions ?? []).entries()) {
|
|
135
|
+
const anchorId = action.anchorId;
|
|
136
|
+
if (!anchorId || typeof anchorId !== 'object') continue;
|
|
137
|
+
const route = anchorId.route;
|
|
138
|
+
if (route == null) continue;
|
|
139
|
+
if (isWildcardOnly(route)) {
|
|
140
|
+
const selector = anchorId.selector ?? '(unknown)';
|
|
141
|
+
const kind = action.kind ?? '(unknown)';
|
|
142
|
+
const routeDisplay = Array.isArray(route)
|
|
143
|
+
? route.length === 0
|
|
144
|
+
? '(empty array)'
|
|
145
|
+
: route.join('", "')
|
|
146
|
+
: route;
|
|
147
|
+
routeErrors.push(
|
|
148
|
+
`actions[${i}] (kind: "${kind}", selector: "${selector}"): ` +
|
|
149
|
+
`anchorId.route is wildcard-only ("${routeDisplay}").\n` +
|
|
150
|
+
` anchorId.route must include at least one concrete route (e.g., "/dashboard/income").\n` +
|
|
151
|
+
` Wildcards like "**" may be included alongside concrete routes for broad matching,\n` +
|
|
152
|
+
` but the editor needs a concrete route to enable page navigation.`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (routeErrors.length > 0) {
|
|
158
|
+
console.error(`\n\u274C ${routeErrors.length} anchorId.route error(s):`);
|
|
159
|
+
for (const e of routeErrors) console.error(` - ${e}`);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// --- Semantic warnings (non-blocking, design-quality hints) ---
|
|
164
|
+
const warnings = [];
|
|
165
|
+
|
|
166
|
+
// Tile-level route restrictions should be rare. They hide the entire tile
|
|
167
|
+
// (and all its actions) on non-matching pages. The preferred pattern is:
|
|
168
|
+
// - Tile: routes ["/**"] (or omitted) + onlyIfPopulated: true
|
|
169
|
+
// - Actions: triggerWhen with route conditions to self-target specific pages
|
|
170
|
+
// This way the tile is always available and actions decide when to appear.
|
|
171
|
+
for (const tile of config.tiles ?? []) {
|
|
172
|
+
const routes = tile.activation?.routes;
|
|
173
|
+
if (!routes) continue;
|
|
174
|
+
|
|
175
|
+
const includePatterns = routes.include ?? [];
|
|
176
|
+
const hasCatchAll = includePatterns.some((r) => WILDCARD_PATTERNS.includes(r) || r === '/**');
|
|
177
|
+
if (hasCatchAll) continue;
|
|
178
|
+
|
|
179
|
+
const routeList = includePatterns.join('", "');
|
|
180
|
+
const actions = tile.props?.actions ?? [];
|
|
181
|
+
const actionsWithoutTrigger = actions.filter((a) => !a.triggerWhen).length;
|
|
182
|
+
|
|
183
|
+
let detail = '';
|
|
184
|
+
if (actionsWithoutTrigger > 0) {
|
|
185
|
+
detail =
|
|
186
|
+
`\n ${actionsWithoutTrigger} of ${actions.length} action(s) have no triggerWhen — ` +
|
|
187
|
+
`they'll never appear outside ["${routeList}"].`;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
warnings.push(
|
|
191
|
+
`Tile "${tile.id}": activation.routes restricts to ["${routeList}"].${detail}\n` +
|
|
192
|
+
` Prefer: set routes to ["/**"], add onlyIfPopulated: true, and use ` +
|
|
193
|
+
`triggerWhen with a "route" condition on each action to target specific pages.`
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Celebrate actions without triggerWhen fire on every page load — almost always a mistake.
|
|
198
|
+
// The effect (confetti, etc.) should be scoped to a specific page or user action.
|
|
199
|
+
for (const [i, action] of (config.actions ?? []).entries()) {
|
|
200
|
+
if (action.kind !== 'overlays:celebrate') continue;
|
|
201
|
+
if (action.triggerWhen) continue;
|
|
202
|
+
|
|
203
|
+
const label = action.label ? ` (label: "${action.label}")` : '';
|
|
204
|
+
warnings.push(
|
|
205
|
+
`actions[${i}]${label}: overlays:celebrate has no triggerWhen.\n` +
|
|
206
|
+
` This fires the "${action.effect ?? 'confetti'}" effect on EVERY page load.\n` +
|
|
207
|
+
` Add a triggerWhen with a page_url condition to scope it, e.g.:\n` +
|
|
208
|
+
` "triggerWhen": {"type":"rules","rules":[{"conditions":[{"type":"page_url","url":"**/target-page"}],"value":true}],"default":false}`
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// page_url conditions should use ** prefix to match any host, not absolute paths.
|
|
213
|
+
// "/dashboard/state" won't match "http://localhost:8088/dashboard/state" because
|
|
214
|
+
// page_url evaluates against the full URL. Use "**/dashboard/state" instead.
|
|
215
|
+
function collectPageUrlConditions(obj, path, results) {
|
|
216
|
+
if (!obj || typeof obj !== 'object') return;
|
|
217
|
+
if (Array.isArray(obj)) {
|
|
218
|
+
for (const [i, item] of obj.entries()) {
|
|
219
|
+
collectPageUrlConditions(item, `${path}[${i}]`, results);
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (obj.type === 'page_url' && typeof obj.url === 'string') {
|
|
224
|
+
results.push({ path, url: obj.url });
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
228
|
+
collectPageUrlConditions(val, `${path}.${key}`, results);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const pageUrlHits = [];
|
|
233
|
+
collectPageUrlConditions(config, 'config', pageUrlHits);
|
|
234
|
+
for (const { path, url } of pageUrlHits) {
|
|
235
|
+
if (url.startsWith('/')) {
|
|
236
|
+
warnings.push(
|
|
237
|
+
`${path}: page_url "${url}" uses an absolute path.\n` +
|
|
238
|
+
` page_url matches against the full URL (e.g., "http://localhost:8088${url}"),\n` +
|
|
239
|
+
` so "${url}" will never match. Use "**${url}" instead.`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (warnings.length > 0) {
|
|
245
|
+
console.warn(`\n\u26A0\uFE0F ${warnings.length} design warning(s):`);
|
|
246
|
+
for (const w of warnings) console.warn(` - ${w}`);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// --- Display meta info (non-blocking, informational) ---
|
|
250
|
+
const meta = config.meta;
|
|
251
|
+
if (meta) {
|
|
252
|
+
if (meta.name) console.log(`\n\uD83D\uDCCB ${meta.name}`);
|
|
253
|
+
if (meta.description) console.log(` ${meta.description}`);
|
|
254
|
+
if (meta.trigger) console.log(` Trigger: ${meta.trigger}`);
|
|
255
|
+
if (meta.verificationSteps?.length > 0) {
|
|
256
|
+
console.log(`\n\uD83E\uDDEA Verification steps:`);
|
|
257
|
+
for (const [i, step] of meta.verificationSteps.entries()) {
|
|
258
|
+
const text = typeof step === 'string' ? step : step.text;
|
|
259
|
+
const check = typeof step === 'object' && step.check ? ` [auto: ${step.check.type}]` : '';
|
|
260
|
+
console.log(` ${i + 1}. ${text}${check}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tour Executor
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates sequential tour steps with cross-page state persistence.
|
|
5
|
-
* Tours can span multiple pages and resume after navigation.
|
|
6
|
-
*
|
|
7
|
-
* Each step contains an inner action (modal, tooltip) that gets executed.
|
|
8
|
-
* The tour listens for CTA click events to advance to the next step.
|
|
9
|
-
*/
|
|
10
|
-
import type { ActionExecutor, TourAction } from '../types';
|
|
11
|
-
/**
|
|
12
|
-
* Execute a tour action
|
|
13
|
-
*
|
|
14
|
-
* Tours orchestrate a sequence of steps, persisting state to localStorage
|
|
15
|
-
* to support cross-page navigation. Each step contains an action to execute
|
|
16
|
-
* and optionally defines transitions based on action events.
|
|
17
|
-
*/
|
|
18
|
-
export declare const executeTour: ActionExecutor<TourAction>;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/decisions/schema.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Zod schemas for decision strategy validation.\n */\nimport { z } from 'zod';\n\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\n\nexport const PageUrlConditionZ = z.object({\n type: z.literal('page_url'),\n url: z.string(),\n});\n\nexport const RouteConditionZ = z.object({\n type: z.literal('route'),\n routeId: z.string(),\n});\n\nexport const AnchorVisibleConditionZ = z.object({\n type: z.literal('anchor_visible'),\n anchorId: z.string(),\n state: z.enum(['visible', 'present', 'absent']),\n});\n\nexport const EventOccurredConditionZ = z.object({\n type: z.literal('event_occurred'),\n eventName: z.string(),\n withinMs: z.number().optional(),\n});\n\nexport const StateEqualsConditionZ = z.object({\n type: z.literal('state_equals'),\n key: z.string(),\n value: z.unknown(),\n});\n\nexport const ViewportConditionZ = z.object({\n type: z.literal('viewport'),\n minWidth: z.number().optional(),\n maxWidth: z.number().optional(),\n minHeight: z.number().optional(),\n maxHeight: z.number().optional(),\n});\n\nexport const SessionMetricConditionZ = z.object({\n type: z.literal('session_metric'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number(),\n});\n\nexport const DismissedConditionZ = z.object({\n type: z.literal('dismissed'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const CooldownActiveConditionZ = z.object({\n type: z.literal('cooldown_active'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const FrequencyLimitConditionZ = z.object({\n type: z.literal('frequency_limit'),\n key: z.string(),\n limit: z.number(),\n inverted: z.boolean().optional(),\n});\n\nexport const EventCountConditionZ = z.object({\n type: z.literal('event_count'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0),\n withinMs: z.number().positive().optional(),\n});\n\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\n\nexport const RuleZ = z.object({\n conditions: z.array(ConditionZ),\n value: z.unknown(),\n});\n\nexport const RuleStrategyZ = z.object({\n type: z.literal('rules'),\n rules: z.array(RuleZ),\n default: z.unknown(),\n});\n\nexport const ScoreStrategyZ = z.object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n});\n\nexport const ModelStrategyZ = z.object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n});\n\nexport const ExternalStrategyZ = z.object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n});\n\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n\n// =============================================================================\n// ACTIVATION CONFIG SCHEMA\n// =============================================================================\n\nexport const RouteFilterZ = z.object({\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n});\n\nexport const ActivationConfigZ = z.object({\n routes: RouteFilterZ,\n strategy: DecisionStrategyZ.optional(),\n});\n\n// =============================================================================\n// VALIDATION FUNCTIONS\n// =============================================================================\n\n/**\n * Validate a Condition object.\n */\nexport function validateCondition(data: unknown) {\n return ConditionZ.safeParse(data);\n}\n\n/**\n * Validate a DecisionStrategy object.\n */\nexport function validateStrategy(data: unknown) {\n return DecisionStrategyZ.safeParse(data);\n}\n\n/**\n * Validate an ActivationConfig object.\n */\nexport function validateActivationConfig(data: unknown) {\n return ActivationConfigZ.safeParse(data);\n}\n\n// =============================================================================\n// Export: Array for unified schema generation\n// =============================================================================\n\n/**\n * Decision schemas for unified JSON Schema generation.\n * The generator imports this array and converts each to a JSON Schema $def.\n *\n * Note: `decisionStrategy` is NOT included here \u2014 it's a oneOf wrapper that\n * the generator builds from $refs to the four strategy defs.\n */\nexport const decisionSchemas = [\n { defName: 'activationConfig', schema: ActivationConfigZ },\n { defName: 'routeFilter', schema: RouteFilterZ },\n { defName: 'ruleStrategy', schema: RuleStrategyZ },\n { defName: 'scoreStrategy', schema: ScoreStrategyZ },\n { defName: 'modelStrategy', schema: ModelStrategyZ },\n { defName: 'externalStrategy', schema: ExternalStrategyZ },\n { defName: 'rule', schema: RuleZ },\n { defName: 'condition', schema: ConditionZ },\n];\n\n// =============================================================================\n// TYPE INFERENCE\n// =============================================================================\n\nexport type ConditionSchema = z.infer<typeof ConditionZ>;\nexport type RuleSchema = z.infer<typeof RuleZ>;\nexport type DecisionStrategySchema = z.infer<typeof DecisionStrategyZ>;\nexport type ActivationConfigSchema = z.infer<typeof ActivationConfigZ>;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/actions/schema.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Core Action Zod Schemas\n *\n * Single source of truth for the shape of all 18 core action types.\n * These schemas are converted to JSON Schema during build and merged\n * into the unified canvas-config.schema.json.\n *\n * Design decisions:\n * - `.strict()` on every object \u2192 `additionalProperties: false` in JSON Schema\n * - Matches `types.ts` exactly (fixes all drift from the old manual JSON defs)\n * - Recursive ActionStep references use `z.any()` as placeholder; the generator\n * replaces `{}` with `{ \"$ref\": \"#/$defs/actionStep\" }` post-conversion\n */\n\nimport { z } from 'zod';\nimport { ActivationConfigZ } from '../decisions/schema';\n\n// ============================================================================\n// Shared Sub-Types\n// ============================================================================\n\n/** Optional activation config \u2014 every action can declare its own route scoping */\nconst ActionActivationZ = { activation: ActivationConfigZ.optional() };\n\n/** Highlight style configuration */\nconst HighlightStyleZ = z\n .object({\n color: z.string().optional(),\n scrimOpacity: z.number().min(0).max(1).optional(),\n paddingPx: z.number().optional(),\n radiusPx: z.number().optional(),\n })\n .strict();\n\n/** Badge position relative to anchor */\nconst BadgePositionZ = z.enum(['top-left', 'top-right', 'bottom-left', 'bottom-right']);\n\n/**\n * Floating-ui Placement \u2014 all 12 values.\n * Matches `@floating-ui/dom` `Placement` type.\n */\nconst PlacementZ = z.enum([\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n]);\n\n/** CTA button configuration for tooltips/modals */\nconst CtaButtonZ = z\n .object({\n label: z.string(),\n actionId: z.string(),\n primary: z.boolean().optional(),\n })\n .strict();\n\n/**\n * Tooltip content (schema-safe version).\n * Omits `cta` (legacy field with recursive ActionStep; never in JSON schema).\n */\nconst TooltipContentZ = z\n .object({\n title: z.string().optional(),\n body: z.string(),\n ctaButtons: z.array(CtaButtonZ).optional(),\n })\n .strict();\n\n/** Modal content configuration */\nconst ModalContentZ = z\n .object({\n title: z.string().optional(),\n body: z.string(),\n })\n .strict();\n\n/** Position where HTML/content should be inserted */\nconst InsertPositionZ = z.enum(['before', 'after', 'prepend', 'append', 'replace']);\n\n/** Tooltip trigger mode */\nconst TooltipTriggerZ = z.enum(['immediate', 'hover', 'click']);\n\n/** Widget configuration for surface mounting */\nconst WidgetConfigZ = z\n .object({\n widgetId: z.string(),\n props: z.record(z.unknown()).optional(),\n priority: z.number().optional(),\n })\n .strict();\n\n/**\n * Tour step (schema-safe version).\n * Uses `z.any()` for the `action` field \u2014 the generator replaces it with a $ref.\n */\nconst TourStepForSchemaZ = z\n .object({\n id: z.string(),\n action: z.any(),\n route: z.string().optional(),\n onAction: z.record(z.string()).optional(),\n })\n .strict();\n\n// ============================================================================\n// ScrollBehavior / ScrollLogicalPosition (DOM built-in types as Zod enums)\n// ============================================================================\n\nconst ScrollBehaviorZ = z.enum(['auto', 'smooth', 'instant']);\nconst ScrollLogicalPositionZ = z.enum(['start', 'center', 'end', 'nearest']);\n\n// ============================================================================\n// Core Action Schemas (18 total)\n// ============================================================================\n\n// --- Content Actions ---\n\nconst SetTextZ = z\n .object({\n kind: z.literal('content:setText'),\n anchorId: z.string(),\n text: z.string(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst SetAttrZ = z\n .object({\n kind: z.literal('content:setAttr'),\n anchorId: z.string(),\n attr: z.string(),\n value: z.string(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst AddClassZ = z\n .object({\n kind: z.literal('content:addClass'),\n anchorId: z.string(),\n className: z.string(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst RemoveClassZ = z\n .object({\n kind: z.literal('content:removeClass'),\n anchorId: z.string(),\n className: z.string(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst SetStyleZ = z\n .object({\n kind: z.literal('content:setStyle'),\n anchorId: z.string(),\n styles: z.record(z.string()),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst InsertHtmlZ = z\n .object({\n kind: z.literal('content:insertHtml'),\n anchorId: z.string(),\n html: z.string(),\n position: InsertPositionZ,\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n// --- Overlay Actions ---\n\nconst HighlightZ = z\n .object({\n kind: z.literal('overlays:highlight'),\n anchorId: z.string(),\n style: HighlightStyleZ.optional(),\n duration: z.number().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst PulseZ = z\n .object({\n kind: z.literal('overlays:pulse'),\n anchorId: z.string(),\n duration: z.number().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst BadgeZ = z\n .object({\n kind: z.literal('overlays:badge'),\n anchorId: z.string(),\n content: z.string(),\n position: BadgePositionZ.optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst TooltipZ = z\n .object({\n kind: z.literal('overlays:tooltip'),\n anchorId: z.string(),\n content: TooltipContentZ,\n trigger: TooltipTriggerZ.optional(),\n placement: PlacementZ.optional(),\n waitFor: z.string().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst ModalZ = z\n .object({\n kind: z.literal('overlays:modal'),\n content: ModalContentZ,\n size: z.enum(['sm', 'md', 'lg']).optional(),\n blocking: z.boolean().optional(),\n scrim: z\n .object({\n opacity: z.number().min(0).max(1).optional(),\n })\n .strict()\n .optional(),\n dismiss: z\n .object({\n onEsc: z.boolean().optional(),\n closeButton: z.boolean().optional(),\n timeoutMs: z.number().min(0).optional(),\n })\n .strict()\n .optional(),\n ctaButtons: z.array(CtaButtonZ).optional(),\n waitFor: z.string().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n// --- Navigation Actions ---\n\nconst ScrollToZ = z\n .object({\n kind: z.literal('navigation:scrollTo'),\n anchorId: z.string(),\n behavior: ScrollBehaviorZ.optional(),\n block: ScrollLogicalPositionZ.optional(),\n inline: ScrollLogicalPositionZ.optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst NavigateZ = z\n .object({\n kind: z.literal('navigation:navigate'),\n url: z.string(),\n target: z.enum(['_self', '_blank']).optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n// --- Core Primitives ---\n\nconst MountWidgetZ = z\n .object({\n kind: z.literal('core:mountWidget'),\n slot: z.string(),\n widget: WidgetConfigZ,\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\nconst WaitZ = z\n .object({\n kind: z.literal('core:wait'),\n durationMs: z.number().min(0).optional(),\n event: z.string().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n/**\n * Sequence \u2014 executes actions serially.\n * `actions` uses `z.any()` as placeholder for recursive ActionStep refs.\n */\nconst SequenceZ = z\n .object({\n kind: z.literal('core:sequence'),\n actions: z.array(z.any()),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n/**\n * Parallel \u2014 executes actions concurrently.\n * `actions` uses `z.any()` as placeholder for recursive ActionStep refs.\n */\nconst ParallelZ = z\n .object({\n kind: z.literal('core:parallel'),\n actions: z.array(z.any()),\n waitFor: z.enum(['all', 'any']).optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n/**\n * Tour \u2014 orchestrate sequential steps with cross-page state.\n * `steps` contains TourStepForSchemaZ which uses z.any() for step.action.\n */\nconst TourZ = z\n .object({\n kind: z.literal('core:tour'),\n tourId: z.string(),\n steps: z.array(TourStepForSchemaZ).min(1),\n startStep: z.string().optional(),\n autoStart: z.boolean().optional(),\n label: z.string().optional(),\n })\n .extend(ActionActivationZ)\n .strict();\n\n// ============================================================================\n// Export: Array for unified schema generation\n// ============================================================================\n\n/**\n * All 18 core action step schemas for unified JSON Schema generation.\n * The generator imports this array and converts each to JSON Schema,\n * then merges them into `$defs` and `actionStep.oneOf`.\n *\n * `defName` values match the existing `$defs` keys for backward compat.\n */\nexport const coreActionStepSchemas = [\n { defName: 'setText', schema: SetTextZ },\n { defName: 'setAttr', schema: SetAttrZ },\n { defName: 'addClass', schema: AddClassZ },\n { defName: 'removeClass', schema: RemoveClassZ },\n { defName: 'setStyle', schema: SetStyleZ },\n { defName: 'insertHtml', schema: InsertHtmlZ },\n { defName: 'highlight', schema: HighlightZ },\n { defName: 'pulse', schema: PulseZ },\n { defName: 'badge', schema: BadgeZ },\n { defName: 'tooltip', schema: TooltipZ },\n { defName: 'modal', schema: ModalZ },\n { defName: 'scrollTo', schema: ScrollToZ },\n { defName: 'navigate', schema: NavigateZ },\n { defName: 'mountWidget', schema: MountWidgetZ },\n { defName: 'wait', schema: WaitZ },\n { defName: 'sequence', schema: SequenceZ },\n { defName: 'parallel', schema: ParallelZ },\n { defName: 'tour', schema: TourZ },\n];\n\n// ============================================================================\n// Named Exports (for unit tests and direct usage)\n// ============================================================================\n\nexport {\n // Sub-types\n HighlightStyleZ,\n BadgePositionZ,\n PlacementZ,\n CtaButtonZ,\n TooltipContentZ,\n ModalContentZ,\n InsertPositionZ,\n TooltipTriggerZ,\n WidgetConfigZ,\n TourStepForSchemaZ,\n ScrollBehaviorZ,\n ScrollLogicalPositionZ,\n // Actions\n SetTextZ,\n SetAttrZ,\n AddClassZ,\n RemoveClassZ,\n SetStyleZ,\n InsertHtmlZ,\n HighlightZ,\n PulseZ,\n BadgeZ,\n TooltipZ,\n ModalZ,\n ScrollToZ,\n NavigateZ,\n MountWidgetZ,\n WaitZ,\n SequenceZ,\n ParallelZ,\n TourZ,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|