@visual-platform/contracts 0.2.0 → 0.4.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.
Files changed (52) hide show
  1. package/dist/app-sources.d.ts +206 -0
  2. package/dist/app-sources.d.ts.map +1 -0
  3. package/dist/app-sources.js +287 -0
  4. package/dist/app-sources.js.map +1 -0
  5. package/dist/component.d.ts +97 -1
  6. package/dist/component.d.ts.map +1 -1
  7. package/dist/component.js +27 -3
  8. package/dist/component.js.map +1 -1
  9. package/dist/data.d.ts +55 -2
  10. package/dist/data.d.ts.map +1 -1
  11. package/dist/data.js +17 -2
  12. package/dist/data.js.map +1 -1
  13. package/dist/design.d.ts +201 -2
  14. package/dist/design.d.ts.map +1 -1
  15. package/dist/design.js +131 -6
  16. package/dist/design.js.map +1 -1
  17. package/dist/events.d.ts +40 -1
  18. package/dist/events.d.ts.map +1 -1
  19. package/dist/events.js +17 -0
  20. package/dist/events.js.map +1 -1
  21. package/dist/flow-sim.d.ts +36 -0
  22. package/dist/flow-sim.d.ts.map +1 -0
  23. package/dist/flow-sim.js +128 -0
  24. package/dist/flow-sim.js.map +1 -0
  25. package/dist/flows.d.ts +267 -0
  26. package/dist/flows.d.ts.map +1 -0
  27. package/dist/flows.js +387 -0
  28. package/dist/flows.js.map +1 -0
  29. package/dist/index.d.ts +5 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +5 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/motion.d.ts +161 -0
  34. package/dist/motion.d.ts.map +1 -0
  35. package/dist/motion.js +228 -0
  36. package/dist/motion.js.map +1 -0
  37. package/dist/page-document.d.ts +130 -0
  38. package/dist/page-document.d.ts.map +1 -1
  39. package/dist/page-document.js +14 -1
  40. package/dist/page-document.js.map +1 -1
  41. package/dist/published.d.ts +411 -0
  42. package/dist/published.d.ts.map +1 -1
  43. package/dist/published.js +5 -0
  44. package/dist/published.js.map +1 -1
  45. package/dist/sources.d.ts +170 -0
  46. package/dist/sources.d.ts.map +1 -0
  47. package/dist/sources.js +236 -0
  48. package/dist/sources.js.map +1 -0
  49. package/dist/tables.d.ts.map +1 -1
  50. package/dist/tables.js +2 -1
  51. package/dist/tables.js.map +1 -1
  52. package/package.json +1 -1
package/dist/flows.js ADDED
@@ -0,0 +1,387 @@
1
+ import { z } from "zod";
2
+ import { parseFilter } from "./tables.js";
3
+ import { walkNodes } from "./page-document.js";
4
+ /**
5
+ * Flows (ADR-049, ADR-050): a named sequence of steps an event runs — call an app action, open or close
6
+ * a modal, go to a link (same or new tab), remember a value, branch, wait, scroll/focus a block, copy
7
+ * text, send an analytics event, refresh data, or run another flow with arguments. Steps are a closed
8
+ * set: never code.
9
+ *
10
+ * Where flows live (name lookup in this order): the page (root.props.flows) → components on it (flows)
11
+ * → the project's flow library (artifact type "flow", versioned, pinned by each release).
12
+ * A block's event binds a flow by name, like a handler: node.events.click = "onCheckout".
13
+ */
14
+ export const FLOW_NAME = /^on[A-Z][A-Za-z0-9]{0,47}$/;
15
+ const KEY = /^[A-Za-z_][A-Za-z0-9_]{0,39}$/;
16
+ /** event.value · item.id · steps.order.data.id · state.coupon · args.productId · products.0.name */
17
+ const PATH = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z0-9_]+){0,9}$/;
18
+ const SAFE_HREF = /^(\/(?!\/)|https?:\/\/|mailto:|tel:)[^\s"'<>]*$/;
19
+ const NODE_ID = /^n_[A-Za-z0-9_-]{3,80}$/;
20
+ /** Roots the browser knows while a flow runs; other paths are read on the server at render. */
21
+ export const FLOW_CLIENT_ROOTS = ["event", "state", "steps", "args"];
22
+ export const MAX_FLOW_DEPTH = 5;
23
+ export const MAX_WAIT_MS = 30_000;
24
+ const Literal = z.union([z.string().max(500), z.number(), z.boolean(), z.null()]);
25
+ export const ValueRefSchema = z.union([
26
+ z.object({ value: Literal }).strict(),
27
+ z.object({ path: z.string().max(200).regex(PATH, "paths look like item.id or event.value") }).strict(),
28
+ ]);
29
+ const checkFilter = (s) => { try {
30
+ parseFilter(s);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ } };
36
+ const refs = z.record(z.string().regex(KEY), ValueRefSchema).refine((r) => Object.keys(r).length <= 20, "at most 20 values");
37
+ export const FlowStepSchema = z.lazy(() => z.discriminatedUnion("kind", [
38
+ z.object({ kind: z.literal("action"), action: z.string().regex(FLOW_NAME, "action names look like onAddToCart"), input: refs.optional(), as: z.string().regex(KEY).optional() }).strict(),
39
+ z.object({ kind: z.literal("flow"), flow: z.string().regex(FLOW_NAME, "flow names look like onCheckout"), args: refs.optional() }).strict(),
40
+ z.object({ kind: z.literal("open"), modal: z.string().regex(KEY, "modal names are letters/digits, e.g. checkout") }).strict(),
41
+ z.object({ kind: z.literal("close"), modal: z.string().regex(KEY).optional() }).strict(),
42
+ z.object({ kind: z.literal("navigate"), href: z.string().max(500).regex(SAFE_HREF, "links start with /, https://, mailto: or tel:").optional(), hrefFrom: ValueRefSchema.optional(), newTab: z.boolean().optional() }).strict()
43
+ .refine((s) => !!s.href !== !!s.hrefFrom, "give a link or where to read it from"),
44
+ z.object({ kind: z.literal("toast"), text: z.string().trim().min(1).max(200), tone: z.enum(["info", "success", "error"]).optional() }).strict(),
45
+ z.object({ kind: z.literal("set"), key: z.string().regex(KEY), value: ValueRefSchema.optional(), op: z.enum(["set", "increment", "decrement", "toggle"]).optional() }).strict()
46
+ .refine((s) => (s.op === "toggle" || s.op === "increment" || s.op === "decrement") || s.value !== undefined, "give a value"),
47
+ z.object({ kind: z.literal("if"), when: z.string().trim().min(1).max(500).refine(checkFilter, "condition syntax: like showIf, e.g. state.qty > 0"), then: z.array(FlowStepSchema).max(20), else: z.array(FlowStepSchema).max(20).optional() }).strict(),
48
+ z.object({ kind: z.literal("wait"), ms: z.number().int().min(50).max(MAX_WAIT_MS) }).strict(),
49
+ z.object({ kind: z.literal("scroll"), target: z.string().regex(NODE_ID, "pick a block") }).strict(),
50
+ z.object({ kind: z.literal("focus"), target: z.string().regex(NODE_ID, "pick a block") }).strict(),
51
+ z.object({ kind: z.literal("copy"), value: ValueRefSchema }).strict(),
52
+ z.object({ kind: z.literal("track"), event: z.string().regex(/^[A-Za-z][A-Za-z0-9_.:-]{0,59}$/, "analytics event names: letters, digits, _ . : -"), props: refs.optional() }).strict(),
53
+ z.object({ kind: z.literal("animate"), target: z.string().regex(NODE_ID, "pick a block"), preset: z.string().regex(/^[a-z][A-Za-z0-9]{0,39}$/, "pick an animation") }).strict(),
54
+ z.object({ kind: z.literal("refresh") }).strict(),
55
+ z.object({ kind: z.literal("stop") }).strict(),
56
+ ]));
57
+ export const FLOW_PARAM_TYPES = ["text", "number", "boolean"];
58
+ export const FlowParamSchema = z.object({
59
+ name: z.string().regex(KEY),
60
+ label: z.string().max(60).optional(),
61
+ type: z.enum(FLOW_PARAM_TYPES),
62
+ required: z.boolean().optional(),
63
+ }).strict();
64
+ const flowShape = {
65
+ name: z.string().regex(FLOW_NAME, "flow names look like onCheckout"),
66
+ label: z.string().max(60).optional(),
67
+ description: z.string().max(300).optional(),
68
+ /** Arguments a caller passes (`flow` step args); read inside as args.<name>. */
69
+ params: z.array(FlowParamSchema).max(10).optional(),
70
+ steps: z.array(FlowStepSchema).min(1).max(30),
71
+ /** Runs when an action step fails (the flow then stops). */
72
+ onError: z.array(FlowStepSchema).max(10).optional(),
73
+ };
74
+ export const FlowSchema = z.object(flowShape).strict();
75
+ /** Every step, nested ones included. */
76
+ export function walkSteps(steps, fn, depth = 0) {
77
+ for (const s of steps ?? []) {
78
+ fn(s, depth);
79
+ if (s.kind === "if") {
80
+ walkSteps(s.then, fn, depth + 1);
81
+ walkSteps(s.else, fn, depth + 1);
82
+ }
83
+ }
84
+ }
85
+ const allSteps = (f) => [...f.steps, ...(f.onError ?? [])];
86
+ /** Names of the flows a flow calls (sub-flows). */
87
+ export function flowCalls(f) {
88
+ const out = new Set();
89
+ walkSteps(allSteps(f), (s) => { if (s.kind === "flow")
90
+ out.add(s.flow); });
91
+ return [...out];
92
+ }
93
+ /** Sub-flow cycle (a → b → a) as a path, or null. */
94
+ export function findFlowCycle(flows) {
95
+ const calls = new Map(flows.map((f) => [f.name, flowCalls(f)]));
96
+ const state = new Map();
97
+ const stack = [];
98
+ const visit = (n) => {
99
+ if (state.get(n) === 2)
100
+ return null;
101
+ if (state.get(n) === 1)
102
+ return [...stack.slice(stack.indexOf(n)), n];
103
+ state.set(n, 1);
104
+ stack.push(n);
105
+ for (const c of calls.get(n) ?? [])
106
+ if (calls.has(c)) {
107
+ const r = visit(c);
108
+ if (r)
109
+ return r;
110
+ }
111
+ stack.pop();
112
+ state.set(n, 2);
113
+ return null;
114
+ };
115
+ for (const f of flows) {
116
+ const r = visit(f.name);
117
+ if (r)
118
+ return r;
119
+ }
120
+ return null;
121
+ }
122
+ /** Sub-flows called but not defined in this set (they must come from the project's flow library). */
123
+ export function externalFlowCalls(flows) {
124
+ const own = new Set(flows.map((f) => f.name));
125
+ return [...new Set(flows.flatMap(flowCalls))].filter((n) => !own.has(n)).sort();
126
+ }
127
+ function checkFlowSet(flows, ctx) {
128
+ const seen = new Set();
129
+ for (const f of flows) {
130
+ if (seen.has(f.name))
131
+ ctx.addIssue({ code: "custom", message: `duplicate flow "${f.name}"` });
132
+ seen.add(f.name);
133
+ }
134
+ for (const f of flows) {
135
+ let total = 0;
136
+ let deep = 0;
137
+ walkSteps(allSteps(f), (_s, d) => { total++; deep = Math.max(deep, d); });
138
+ if (total > 80)
139
+ ctx.addIssue({ code: "custom", message: `flow "${f.name}" has more than 80 steps` });
140
+ if (deep > 3)
141
+ ctx.addIssue({ code: "custom", message: `flow "${f.name}": conditions nest at most 4 levels` });
142
+ }
143
+ const cycle = findFlowCycle(flows);
144
+ if (cycle)
145
+ ctx.addIssue({ code: "custom", message: `FLOW_CYCLE: flows call each other (${cycle.join(" → ")})` });
146
+ }
147
+ /** Flows of a page/component. Sub-flows not defined here are looked up in the flow library at publish. */
148
+ export const FlowsSchema = z.array(FlowSchema).max(30).superRefine((flows, ctx) => checkFlowSet(flows, ctx));
149
+ /**
150
+ * Page triggers (ADR-050/051): run a flow (or handler) when the page loads (optionally later), when the
151
+ * visitor is about to leave (mouse exits at the top), scrolls past a percentage, stays idle, every N
152
+ * seconds, when the tab is hidden/shown again, or on leaving the page (send analytics only there).
153
+ */
154
+ export const PAGE_TRIGGERS = ["load", "exitIntent", "scroll", "idle", "interval", "tabHidden", "tabVisible", "leave"];
155
+ export const FlowTriggerSchema = z.object({
156
+ on: z.enum(PAGE_TRIGGERS),
157
+ flow: z.string().regex(FLOW_NAME),
158
+ /** load: wait before running. */
159
+ delayMs: z.number().int().min(0).max(120_000).optional(),
160
+ /** scroll: page depth reached (1–100 %). */
161
+ percent: z.number().int().min(1).max(100).optional(),
162
+ /** idle: no input for this long · interval: every this long. */
163
+ ms: z.number().int().min(1000).max(3_600_000).optional(),
164
+ /** interval: stop after this many runs. */
165
+ max: z.number().int().min(1).max(1000).optional(),
166
+ /** exitIntent / scroll / idle / tabHidden / tabVisible: only the first time per page view (default true). */
167
+ once: z.boolean().optional(),
168
+ }).strict().superRefine((t, ctx) => {
169
+ if ((t.on === "idle" || t.on === "interval") && !t.ms)
170
+ ctx.addIssue({ code: "custom", path: ["ms"], message: `${t.on} needs a duration` });
171
+ if (t.on === "scroll" && !t.percent)
172
+ ctx.addIssue({ code: "custom", path: ["percent"], message: "scroll needs a percentage" });
173
+ });
174
+ export const FlowTriggersSchema = z.array(FlowTriggerSchema).max(10);
175
+ /**
176
+ * Block lifecycle (ADR-051): every block can run a flow (or handler) when it appears in the browser
177
+ * (mount), disappears (unmount — a state gate hides it, the page changes), scrolls into view (visible,
178
+ * once per view unless visibleOnce = false), scrolls out (leave), or every N seconds while shown (every).
179
+ */
180
+ export const LIFECYCLE_KINDS = ["mount", "unmount", "visible", "leave"];
181
+ export const NodeLifecycleSchema = z.object({
182
+ mount: z.string().regex(FLOW_NAME).optional(),
183
+ unmount: z.string().regex(FLOW_NAME).optional(),
184
+ visible: z.string().regex(FLOW_NAME).optional(),
185
+ leave: z.string().regex(FLOW_NAME).optional(),
186
+ visibleOnce: z.boolean().optional(),
187
+ every: z.object({ run: z.string().regex(FLOW_NAME), ms: z.number().int().min(1000).max(3_600_000), max: z.number().int().min(1).max(10_000).optional() }).strict().optional(),
188
+ }).strict().refine((l) => Object.keys(l).some((k) => k !== "visibleOnce"), "choose at least one moment");
189
+ /** Names a block's lifecycle runs. */
190
+ export const lifecycleNames = (l) => (l ? [l.mount, l.unmount, l.visible, l.leave, l.every?.run].filter((x) => !!x) : []);
191
+ /** Starting values of the page state (state.*): wizard step, quantity… */
192
+ export const FlowStateSchema = z.record(z.string().regex(KEY), Literal).refine((r) => Object.keys(r).length <= 30, "at most 30 state values");
193
+ /** A flow in the project library (artifact type "flow"): one flow + schema version. */
194
+ export const FlowDocumentSchema = z.object({ schemaVersion: z.literal(1), ...flowShape }).strict();
195
+ export const flowFromDocument = ({ schemaVersion: _v, ...f }) => f;
196
+ // ---------- analysis ----------
197
+ const refPaths = (r, out) => { if (r && "path" in r)
198
+ out.add(r.path); };
199
+ export function filterFields(expr) {
200
+ let f;
201
+ try {
202
+ f = parseFilter(expr);
203
+ }
204
+ catch {
205
+ return [];
206
+ }
207
+ const out = [];
208
+ const walk = (x) => { if (!x)
209
+ return; if ("and" in x)
210
+ x.and.forEach(walk);
211
+ else if ("or" in x)
212
+ x.or.forEach(walk);
213
+ else if ("not" in x)
214
+ walk(x.not);
215
+ else
216
+ out.push(x.field); };
217
+ walk(f);
218
+ return out;
219
+ }
220
+ const isClientPath = (p) => FLOW_CLIENT_ROOTS.includes(p.split(".")[0]);
221
+ /**
222
+ * Paths a flow (and its sub-flows) reads that the browser does not know — item.*, page data… The server
223
+ * reads them from the block's data at render and hands them to the event boundary.
224
+ */
225
+ export function flowServerPaths(name, flows) {
226
+ const byName = new Map(flows.map((f) => [f.name, f]));
227
+ const out = new Set();
228
+ const seen = new Set();
229
+ const visit = (n) => {
230
+ const f = byName.get(n);
231
+ if (!f || seen.has(n))
232
+ return;
233
+ seen.add(n);
234
+ walkSteps(allSteps(f), (s) => {
235
+ if (s.kind === "action")
236
+ for (const r of Object.values(s.input ?? {}))
237
+ refPaths(r, out);
238
+ else if (s.kind === "flow") {
239
+ for (const r of Object.values(s.args ?? {}))
240
+ refPaths(r, out);
241
+ visit(s.flow);
242
+ }
243
+ else if (s.kind === "set")
244
+ refPaths(s.value, out);
245
+ else if (s.kind === "navigate")
246
+ refPaths(s.hrefFrom, out);
247
+ else if (s.kind === "copy")
248
+ refPaths(s.value, out);
249
+ else if (s.kind === "track")
250
+ for (const r of Object.values(s.props ?? {}))
251
+ refPaths(r, out);
252
+ else if (s.kind === "if")
253
+ for (const p of filterFields(s.when))
254
+ out.add(p);
255
+ });
256
+ };
257
+ visit(name);
258
+ return [...out].filter((p) => !isClientPath(p)).sort();
259
+ }
260
+ /** Does a showIf read the page state? Such blocks are shown/hidden in the browser (ADR-050). */
261
+ export const showIfUsesState = (expr) => !!expr && filterFields(expr).some((p) => p.split(".")[0] === "state");
262
+ /** Non-state paths of a state showIf (read on the server, passed to the browser gate). */
263
+ export const showIfServerPaths = (expr) => filterFields(expr).filter((p) => !isClientPath(p));
264
+ /** Modal names opened/closed by flows (editor checks that a Modal with that name exists). */
265
+ export function flowModals(flows) {
266
+ const out = new Set();
267
+ for (const f of flows)
268
+ walkSteps(allSteps(f), (s) => { if ((s.kind === "open" || s.kind === "close") && s.modal)
269
+ out.add(s.modal); });
270
+ return [...out].sort();
271
+ }
272
+ /** App action names flows call (publish/editor can check them against the app registry). */
273
+ export function flowActions(flows) {
274
+ const out = new Set();
275
+ for (const f of flows)
276
+ walkSteps(allSteps(f), (s) => { if (s.kind === "action")
277
+ out.add(s.action); });
278
+ return [...out].sort();
279
+ }
280
+ /**
281
+ * Flow names a document needs: event names of its blocks, triggers, and sub-flows they call, followed
282
+ * through the given flows (local + library). Used by delivery to ship only the flows a page uses.
283
+ */
284
+ export function neededFlowNames(nodes, available, extra = []) {
285
+ const byName = new Map(available.map((f) => [f.name, f]));
286
+ const out = new Set();
287
+ const visit = (n) => { if (out.has(n) || !byName.has(n))
288
+ return; out.add(n); for (const c of flowCalls(byName.get(n)))
289
+ visit(c); };
290
+ for (const n of walkNodes(nodes)) {
291
+ for (const e of Object.values(n.events ?? {}))
292
+ if (e)
293
+ visit(e);
294
+ for (const e of lifecycleNames(n.lifecycle))
295
+ visit(e);
296
+ }
297
+ for (const e of extra)
298
+ visit(e);
299
+ return [...out].sort();
300
+ }
301
+ // ---------- reading flows: one sentence per step (editor summaries, history compare, AI) ----------
302
+ const refText = (r) => (!r ? "—" : "path" in r ? r.path : JSON.stringify(r.value));
303
+ const mapText = (m) => Object.entries(m ?? {}).map(([k, v]) => `${k} = ${refText(v)}`).join(", ");
304
+ /** A readable sentence for one step (not translated; the editor shows it as the collapsed summary). */
305
+ export function describeStep(s) {
306
+ switch (s.kind) {
307
+ case "action": return `Run action ${s.action || "?"}${s.input && Object.keys(s.input).length ? ` with ${mapText(s.input)}` : ""}${s.as ? ` → steps.${s.as}` : ""}`;
308
+ case "flow": return `Run flow ${s.flow || "?"}${s.args && Object.keys(s.args).length ? ` with ${mapText(s.args)}` : ""}`;
309
+ case "open": return `Open modal ${s.modal || "?"}`;
310
+ case "close": return s.modal ? `Close modal ${s.modal}` : "Close all modals";
311
+ case "navigate": return `Go to ${s.href ?? refText(s.hrefFrom)}${s.newTab ? " (new tab)" : ""}`;
312
+ case "toast": return `Show ${s.tone ?? "info"} message “${s.text}”`;
313
+ case "set": {
314
+ const op = s.op ?? "set";
315
+ return op === "toggle" ? `Toggle state.${s.key}` : op === "set" ? `Set state.${s.key} = ${refText(s.value)}` : `${op === "increment" ? "Increase" : "Decrease"} state.${s.key} by ${s.value ? refText(s.value) : "1"}`;
316
+ }
317
+ case "if": return `If ${s.when}`;
318
+ case "wait": return `Wait ${s.ms >= 1000 ? `${s.ms / 1000} s` : `${s.ms} ms`}`;
319
+ case "scroll": return `Scroll to block ${s.target || "?"}`;
320
+ case "focus": return `Focus block ${s.target || "?"}`;
321
+ case "copy": return `Copy ${refText(s.value)}`;
322
+ case "track": return `Track “${s.event}”${s.props && Object.keys(s.props).length ? ` with ${mapText(s.props)}` : ""}`;
323
+ case "animate": return `Animate block ${s.target || "?"} with ${s.preset || "?"}`;
324
+ case "refresh": return "Refresh data";
325
+ case "stop": return "Stop";
326
+ }
327
+ }
328
+ /** The whole flow as indented lines (then/else nested), used to compare versions. */
329
+ export function describeFlow(f) {
330
+ const out = [];
331
+ if (f.label)
332
+ out.push(`Label: ${f.label}`);
333
+ if (f.params?.length)
334
+ out.push(`Parameters: ${f.params.map((p) => `${p.name}${p.required ? "*" : ""}: ${p.type}`).join(", ")}`);
335
+ const walk = (steps, indent, prefix) => steps.forEach((s, i) => {
336
+ out.push(`${indent}${prefix}${i + 1}. ${describeStep(s)}`);
337
+ if (s.kind === "if") {
338
+ out.push(`${indent} then:`);
339
+ walk(s.then, `${indent} `, "");
340
+ if (s.else?.length) {
341
+ out.push(`${indent} else:`);
342
+ walk(s.else, `${indent} `, "");
343
+ }
344
+ }
345
+ });
346
+ walk(f.steps, "", "");
347
+ if (f.onError?.length) {
348
+ out.push("If an action fails:");
349
+ walk(f.onError, " ", "");
350
+ }
351
+ return out;
352
+ }
353
+ /** Line diff (LCS) between two describeFlow outputs: unchanged / added / removed lines in order. */
354
+ export function diffLines(a, b) {
355
+ const m = a.length, n = b.length;
356
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
357
+ for (let i = m - 1; i >= 0; i--)
358
+ for (let j = n - 1; j >= 0; j--)
359
+ dp[i][j] = a[i] === b[j] ? dp[i + 1][j + 1] + 1 : Math.max(dp[i + 1][j], dp[i][j + 1]);
360
+ const out = [];
361
+ let i = 0, j = 0;
362
+ while (i < m && j < n) {
363
+ if (a[i] === b[j]) {
364
+ out.push({ kind: "same", text: a[i] });
365
+ i++;
366
+ j++;
367
+ }
368
+ else if (dp[i + 1][j] >= dp[i][j + 1])
369
+ out.push({ kind: "del", text: a[i++] });
370
+ else
371
+ out.push({ kind: "add", text: b[j++] });
372
+ }
373
+ while (i < m)
374
+ out.push({ kind: "del", text: a[i++] });
375
+ while (j < n)
376
+ out.push({ kind: "add", text: b[j++] });
377
+ return out;
378
+ }
379
+ /** Animation presets used by "animate" steps (the runtime needs their keyframes in the browser). */
380
+ export function flowPresets(flows) {
381
+ const out = new Set();
382
+ for (const f of flows)
383
+ walkSteps([...f.steps, ...(f.onError ?? [])], (s) => { if (s.kind === "animate")
384
+ out.add(s.preset); });
385
+ return [...out].sort();
386
+ }
387
+ //# sourceMappingURL=flows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.js","sourceRoot":"","sources":["../src/flows.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,11 @@ export * from "./component.js";
9
9
  export * from "./classes.js";
10
10
  export * from "./events.js";
11
11
  export * from "./data.js";
12
+ export * from "./sources.js";
13
+ export * from "./app-sources.js";
14
+ export * from "./flows.js";
15
+ export * from "./flow-sim.js";
16
+ export * from "./motion.js";
12
17
  export * from "./locales.js";
13
18
  export * from "./tables.js";
14
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -9,6 +9,11 @@ export * from "./component.js";
9
9
  export * from "./classes.js";
10
10
  export * from "./events.js";
11
11
  export * from "./data.js";
12
+ export * from "./sources.js";
13
+ export * from "./app-sources.js";
14
+ export * from "./flows.js";
15
+ export * from "./flow-sim.js";
16
+ export * from "./motion.js";
12
17
  export * from "./locales.js";
13
18
  export * from "./tables.js";
14
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,161 @@
1
+ import { z } from "zod";
2
+ import type { ComponentNode } from "./page-document.js";
3
+ export declare const PresetNameSchema: z.ZodString;
4
+ export declare const MOTION_KINDS: readonly ["entrance", "hover", "loop", "emphasis"];
5
+ export type MotionKind = (typeof MOTION_KINDS)[number];
6
+ /** A keyword, a cubic-bezier(...) or the name of a motion easing token (standard, emphasized…). */
7
+ export declare const EasingSchema: z.ZodString;
8
+ export declare const MotionFrameSchema: z.ZodObject<{
9
+ at: z.ZodNumber;
10
+ opacity: z.ZodOptional<z.ZodNumber>;
11
+ x: z.ZodOptional<z.ZodNumber>;
12
+ y: z.ZodOptional<z.ZodNumber>;
13
+ unit: z.ZodOptional<z.ZodEnum<{
14
+ "%": "%";
15
+ px: "px";
16
+ }>>;
17
+ scale: z.ZodOptional<z.ZodNumber>;
18
+ rotate: z.ZodOptional<z.ZodNumber>;
19
+ blur: z.ZodOptional<z.ZodNumber>;
20
+ }, z.core.$strict>;
21
+ export type MotionFrame = z.infer<typeof MotionFrameSchema>;
22
+ export declare const MotionPresetSchema: z.ZodObject<{
23
+ label: z.ZodOptional<z.ZodString>;
24
+ kind: z.ZodEnum<{
25
+ emphasis: "emphasis";
26
+ entrance: "entrance";
27
+ hover: "hover";
28
+ loop: "loop";
29
+ }>;
30
+ frames: z.ZodArray<z.ZodObject<{
31
+ at: z.ZodNumber;
32
+ opacity: z.ZodOptional<z.ZodNumber>;
33
+ x: z.ZodOptional<z.ZodNumber>;
34
+ y: z.ZodOptional<z.ZodNumber>;
35
+ unit: z.ZodOptional<z.ZodEnum<{
36
+ "%": "%";
37
+ px: "px";
38
+ }>>;
39
+ scale: z.ZodOptional<z.ZodNumber>;
40
+ rotate: z.ZodOptional<z.ZodNumber>;
41
+ blur: z.ZodOptional<z.ZodNumber>;
42
+ }, z.core.$strict>>;
43
+ duration: z.ZodNumber;
44
+ easing: z.ZodString;
45
+ delay: z.ZodOptional<z.ZodNumber>;
46
+ iterations: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>>;
47
+ alternate: z.ZodOptional<z.ZodBoolean>;
48
+ }, z.core.$strict>;
49
+ export type MotionPreset = z.infer<typeof MotionPresetSchema>;
50
+ /** Motion settings of a design system or a project override. */
51
+ export declare const MotionSettingsSchema: z.ZodObject<{
52
+ presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
53
+ label: z.ZodOptional<z.ZodString>;
54
+ kind: z.ZodEnum<{
55
+ emphasis: "emphasis";
56
+ entrance: "entrance";
57
+ hover: "hover";
58
+ loop: "loop";
59
+ }>;
60
+ frames: z.ZodArray<z.ZodObject<{
61
+ at: z.ZodNumber;
62
+ opacity: z.ZodOptional<z.ZodNumber>;
63
+ x: z.ZodOptional<z.ZodNumber>;
64
+ y: z.ZodOptional<z.ZodNumber>;
65
+ unit: z.ZodOptional<z.ZodEnum<{
66
+ "%": "%";
67
+ px: "px";
68
+ }>>;
69
+ scale: z.ZodOptional<z.ZodNumber>;
70
+ rotate: z.ZodOptional<z.ZodNumber>;
71
+ blur: z.ZodOptional<z.ZodNumber>;
72
+ }, z.core.$strict>>;
73
+ duration: z.ZodNumber;
74
+ easing: z.ZodString;
75
+ delay: z.ZodOptional<z.ZodNumber>;
76
+ iterations: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>>;
77
+ alternate: z.ZodOptional<z.ZodBoolean>;
78
+ }, z.core.$strict>>>;
79
+ durations: z.ZodOptional<z.ZodObject<{
80
+ fast: z.ZodNumber;
81
+ normal: z.ZodNumber;
82
+ slow: z.ZodNumber;
83
+ }, z.core.$strict>>;
84
+ easings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
85
+ disabled: z.ZodOptional<z.ZodBoolean>;
86
+ }, z.core.$strict>;
87
+ export type MotionSettings = z.infer<typeof MotionSettingsSchema>;
88
+ export declare const DEFAULT_EASINGS: Record<string, string>;
89
+ export declare const DEFAULT_DURATIONS: {
90
+ fast: number;
91
+ normal: number;
92
+ slow: number;
93
+ };
94
+ /** Built-in presets (always available; a design system or project may override a name). */
95
+ export declare const BUILTIN_PRESETS: Record<string, MotionPreset>;
96
+ /** Built-ins ← design system ← project (by name); `disabled` from the project. */
97
+ export declare function mergeMotion(system?: MotionSettings | null, project?: MotionSettings | null): MotionSettings;
98
+ export declare const allPresets: (m?: MotionSettings | null) => Record<string, MotionPreset>;
99
+ export declare const NodeAnimationSchema: z.ZodObject<{
100
+ entrance: z.ZodOptional<z.ZodObject<{
101
+ duration: z.ZodOptional<z.ZodNumber>;
102
+ delay: z.ZodOptional<z.ZodNumber>;
103
+ easing: z.ZodOptional<z.ZodString>;
104
+ preset: z.ZodString;
105
+ trigger: z.ZodOptional<z.ZodEnum<{
106
+ mount: "mount";
107
+ visible: "visible";
108
+ }>>;
109
+ once: z.ZodOptional<z.ZodBoolean>;
110
+ }, z.core.$strict>>;
111
+ hover: z.ZodOptional<z.ZodObject<{
112
+ preset: z.ZodString;
113
+ duration: z.ZodOptional<z.ZodNumber>;
114
+ easing: z.ZodOptional<z.ZodString>;
115
+ }, z.core.$strict>>;
116
+ loop: z.ZodOptional<z.ZodObject<{
117
+ duration: z.ZodOptional<z.ZodNumber>;
118
+ delay: z.ZodOptional<z.ZodNumber>;
119
+ easing: z.ZodOptional<z.ZodString>;
120
+ preset: z.ZodString;
121
+ iterations: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"infinite">]>>;
122
+ }, z.core.$strict>>;
123
+ scroll: z.ZodOptional<z.ZodObject<{
124
+ preset: z.ZodString;
125
+ range: z.ZodOptional<z.ZodEnum<{
126
+ cover: "cover";
127
+ enter: "enter";
128
+ exit: "exit";
129
+ }>>;
130
+ }, z.core.$strict>>;
131
+ stagger: z.ZodOptional<z.ZodObject<{
132
+ ms: z.ZodNumber;
133
+ }, z.core.$strict>>;
134
+ }, z.core.$strict>;
135
+ export type NodeAnimation = z.infer<typeof NodeAnimationSchema>;
136
+ export declare const keyframesName: (name: string) => string;
137
+ export declare function keyframesCss(name: string, p: MotionPreset): string;
138
+ /** Web Animations keyframes (flow step "animate", editor preview). */
139
+ export declare function presetKeyframes(p: MotionPreset): Keyframe[];
140
+ type Keyframe = Record<string, string | number>;
141
+ export declare function resolveEasing(e: string | undefined, m?: MotionSettings | null): string;
142
+ /** Selector of a block (a component scope animates its direct children: it is display: contents). */
143
+ export declare const motionSelector: (n: Pick<ComponentNode, "id" | "type">) => string;
144
+ export type MotionEntry = {
145
+ sel: string;
146
+ trigger: "mount" | "visible";
147
+ once: boolean;
148
+ staggerMs?: number | undefined;
149
+ offsetMs?: number | undefined;
150
+ };
151
+ /**
152
+ * CSS for the animations used by these nodes + the entries the browser observer needs. Only presets
153
+ * actually used are emitted. Entrances wait (paused on their first frame) until `.vp-motion` (set by the
154
+ * observer, so no-JS visitors see content) and `[data-vp-in]`. Reduced motion → no animation.
155
+ */
156
+ export declare function animationCss(nodes: readonly ComponentNode[], motion?: MotionSettings | null): {
157
+ css: string;
158
+ entries: MotionEntry[];
159
+ };
160
+ export {};
161
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"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"}