@pixerate/editor 0.232.0 → 0.234.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 (54) hide show
  1. package/dist/animation-editor/compile.d.cts +3 -0
  2. package/dist/animation-editor/compile.d.ts +3 -0
  3. package/dist/animation-editor/controller.d.cts +67 -2
  4. package/dist/animation-editor/controller.d.ts +67 -2
  5. package/dist/animation-editor/edit.d.cts +1 -1
  6. package/dist/animation-editor/edit.d.ts +1 -1
  7. package/dist/animation-editor/evaluate.d.cts +8 -1
  8. package/dist/animation-editor/evaluate.d.ts +8 -1
  9. package/dist/animation-editor/index.cjs +1202 -371
  10. package/dist/animation-editor/index.d.cts +3 -0
  11. package/dist/animation-editor/index.d.ts +3 -0
  12. package/dist/animation-editor/index.js +1032 -201
  13. package/dist/animation-editor/issues.d.cts +28 -0
  14. package/dist/animation-editor/issues.d.ts +28 -0
  15. package/dist/animation-editor/layer-edit.d.cts +55 -0
  16. package/dist/animation-editor/layer-edit.d.ts +55 -0
  17. package/dist/animation-editor/layer-tools.d.cts +11 -0
  18. package/dist/animation-editor/layer-tools.d.ts +11 -0
  19. package/dist/animation-editor/layers.d.cts +166 -0
  20. package/dist/animation-editor/layers.d.ts +166 -0
  21. package/dist/animation-editor/parse.d.cts +2 -0
  22. package/dist/animation-editor/parse.d.ts +2 -0
  23. package/dist/animation-editor/types.d.cts +44 -1
  24. package/dist/animation-editor/types.d.ts +44 -1
  25. package/dist/canvas/editorDocument.d.cts +49 -4
  26. package/dist/canvas/editorDocument.d.ts +49 -4
  27. package/dist/canvas/index.cjs +57 -30
  28. package/dist/canvas/index.js +44 -17
  29. package/dist/chunk-6RZVFYGJ.cjs +255 -0
  30. package/dist/{chunk-RG4O6K2A.cjs → chunk-A7PQNIBX.cjs} +14 -14
  31. package/dist/{chunk-ERJA5CGT.cjs → chunk-DGWOGQJ5.cjs} +8 -1
  32. package/dist/{chunk-TYCJGFCF.js → chunk-EUKY4KFX.js} +8 -1
  33. package/dist/chunk-I277KJLQ.js +255 -0
  34. package/dist/{chunk-2K5TELHV.cjs → chunk-JAOSL334.cjs} +10 -10
  35. package/dist/{chunk-MUSZYMBX.js → chunk-TEFQISBY.js} +1 -1
  36. package/dist/{chunk-6QLTUGMO.js → chunk-WDDUPWVG.js} +1 -1
  37. package/dist/{chunk-A653N65Q.cjs → chunk-ZQIWBJGH.cjs} +7 -7
  38. package/dist/effects/index.cjs +114 -322
  39. package/dist/effects/index.js +23 -231
  40. package/dist/image-editor/index.cjs +16 -16
  41. package/dist/image-editor/index.js +4 -4
  42. package/dist/paint-editor/index.cjs +10 -10
  43. package/dist/paint-editor/index.js +5 -5
  44. package/dist/vector/index.cjs +6 -6
  45. package/dist/vector/index.js +1 -1
  46. package/dist/video-editor/index.cjs +339 -339
  47. package/dist/video-editor/index.js +5 -5
  48. package/package.json +1 -1
  49. package/skills/pixerate-animation-editor/SKILL.md +10 -0
  50. package/skills/pixerate-animation-motion-graphics/SKILL.md +4 -0
  51. package/skills/pixerate-canvas/SKILL.md +2 -2
  52. package/skills/pixerate-video-editor/SKILL.md +11 -0
  53. package/skills/pixerate-video-montage/SKILL.md +2 -0
  54. package/dist/{chunk-PQYDJ2AV.js → chunk-SIK3LT6M.js} +16 -16
@@ -3,7 +3,28 @@
3
3
  var _chunk4XSBOGMKcjs = require('../chunk-4XSBOGMK.cjs');
4
4
 
5
5
 
6
- var _chunkRG4O6K2Acjs = require('../chunk-RG4O6K2A.cjs');
6
+ var _chunkA7PQNIBXcjs = require('../chunk-A7PQNIBX.cjs');
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ var _chunk6RZVFYGJcjs = require('../chunk-6RZVFYGJ.cjs');
7
28
 
8
29
 
9
30
  var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
@@ -50,244 +71,15 @@ var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
50
71
 
51
72
 
52
73
 
53
- var _chunk2K5TELHVcjs = require('../chunk-2K5TELHV.cjs');
74
+ var _chunkJAOSL334cjs = require('../chunk-JAOSL334.cjs');
54
75
  require('../chunk-WOFXZ3XU.cjs');
55
76
  require('../chunk-FJ2MSI43.cjs');
56
77
 
57
78
 
58
79
  var _chunkDWJJI6RTcjs = require('../chunk-DWJJI6RT.cjs');
59
80
 
60
- // src/effects/templates.ts
61
- var SLOT_NAME = /^[A-Za-z][\w-]*$/;
62
- var COLOR = /^#[0-9a-fA-F]{6}$/;
63
- var EFFECT_SEQUENCE_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
64
- var isObject = (v) => !!v && typeof v === "object" && !Array.isArray(v);
65
- var isSubjectTemplateSlot = (slot) => slot.type === "image" || slot.type === "video" || slot.type === "svg";
66
- function effectSubjectKind(subject) {
67
- if (!isObject(subject)) return void 0;
68
- for (const k of ["slot", "image", "video", "svg", "text"]) if (typeof subject[k] === "string") return k;
69
- return void 0;
70
- }
71
- var typeName = (value) => value === null ? "null" : Array.isArray(value) ? "a list" : typeof value === "object" ? "an object" : typeof value === "string" ? `the words ${JSON.stringify(value.length > 40 ? `${value.slice(0, 40)}\u2026` : value)}` : `${typeof value === "number" ? "the number" : "the value"} ${String(value)}`;
72
- function range(slot) {
73
- const whole = slot.integer ? "whole number" : "number";
74
- if (slot.min !== void 0 && slot.max !== void 0) return `a ${whole} from ${slot.min} to ${slot.max}`;
75
- if (slot.min !== void 0) return `a ${whole} of at least ${slot.min}`;
76
- if (slot.max !== void 0) return `a ${whole} of at most ${slot.max}`;
77
- return `a ${whole}`;
78
- }
79
- function templateSlotTakes(slot) {
80
- switch (slot.type) {
81
- case "text":
82
- return `words${slot.maxLength !== void 0 ? ` (up to ${slot.maxLength} characters)` : ""}`;
83
- case "color":
84
- return `a colour written #RRGGBB, like "${slot.default}"`;
85
- case "number":
86
- return range(slot);
87
- case "video":
88
- return "a video URL";
89
- case "svg":
90
- return "SVG markup or an SVG URL";
91
- default:
92
- return "a picture: a URL, a data: URL or <svg> markup";
93
- }
94
- }
95
- function templateValueProblem(slot, value) {
96
- const no = (extra = "") => `Slot "${slot.name}" takes ${templateSlotTakes(slot)}${extra}, not ${typeName(value)}.`;
97
- switch (slot.type) {
98
- case "text":
99
- if (typeof value !== "string") return no();
100
- if (slot.maxLength !== void 0 && value.length > slot.maxLength) return `Slot "${slot.name}" takes up to ${slot.maxLength} characters; the value has ${value.length}. Shorten it.`;
101
- return void 0;
102
- case "color":
103
- return typeof value === "string" && COLOR.test(value) ? void 0 : no();
104
- case "number":
105
- if (typeof value !== "number" || !Number.isFinite(value)) return no();
106
- if (slot.integer && !Number.isInteger(value)) return `Slot "${slot.name}" takes ${range(slot)}; ${value} is not whole.`;
107
- if (slot.min !== void 0 && value < slot.min || slot.max !== void 0 && value > slot.max) return `Slot "${slot.name}" takes ${range(slot)}; ${value} is out of range.`;
108
- return void 0;
109
- default: {
110
- const host = ` (or { "slot": "${slot.name}" } to leave it for the host)`;
111
- if (typeof value === "string") return value.trim() ? void 0 : no(host);
112
- const kind = effectSubjectKind(value);
113
- if (!kind) return no(host);
114
- if (kind === "slot") return SLOT_NAME.test(value.slot) ? void 0 : `Slot "${slot.name}" left for the host is { "slot": name }, the name letters, digits, "-" and "_", starting with a letter.`;
115
- const fits = kind === slot.type || slot.type === "image" && kind === "svg";
116
- if (!fits) return `Slot "${slot.name}" takes { "${slot.type}": \u2026 }${slot.type === "image" ? ' or { "svg": \u2026 }' : ""}, not { "${kind}": \u2026 }.`;
117
- return value[kind].trim() ? void 0 : `Slot "${slot.name}"'s "${kind}" is a non-empty string.`;
118
- }
119
- }
120
- }
121
- var slotList = (slots) => slots.length ? `the slots are ${slots.map((s) => `${s.name} (${s.type})`).join(", ")}` : "the template has no slots";
122
- function checkTemplateValues(slots, values) {
123
- if (values === void 0) return [];
124
- if (!isObject(values)) return [`Values are an object of slot names to values; ${slotList(slots)}.`];
125
- const byName = new Map(slots.map((s) => [s.name, s]));
126
- const errors = [];
127
- for (const [name, value] of Object.entries(values)) {
128
- const slot = byName.get(name);
129
- if (!slot) errors.push(`There is no slot "${name}"; ${slotList(slots)}.`);
130
- else if (value !== void 0) {
131
- const problem = templateValueProblem(slot, value);
132
- if (problem) errors.push(problem);
133
- }
134
- }
135
- return errors;
136
- }
137
- function templateSlotSchema(slot) {
138
- const about = `${slot.label}${slot.description ? `: ${slot.description}` : ""}.`;
139
- switch (slot.type) {
140
- case "text":
141
- return { type: "string", ...slot.maxLength !== void 0 ? { maxLength: slot.maxLength } : {}, description: `${about} Words${slot.maxLength !== void 0 ? `, up to ${slot.maxLength} characters` : ""}. Default ${JSON.stringify(slot.default)}.` };
142
- case "color":
143
- return { type: "string", pattern: COLOR.source, description: `${about} A colour as #RRGGBB. Default ${slot.default}.` };
144
- case "number":
145
- return {
146
- type: slot.integer ? "integer" : "number",
147
- ...slot.min !== void 0 ? { minimum: slot.min } : {},
148
- ...slot.max !== void 0 ? { maximum: slot.max } : {},
149
- description: `${about} ${range(slot).replace(/^a /, "A ")}. Default ${slot.default}.`
150
- };
151
- default: {
152
- const key = slot.type;
153
- const object2 = (k, what) => ({ type: "object", properties: { [k]: { type: "string", description: what } }, required: [k], additionalProperties: false, description: `{ "${k}": \u2026 }` });
154
- return {
155
- anyOf: [
156
- { type: "string", minLength: 1, description: key === "video" ? "A video URL." : key === "svg" ? "SVG markup or an SVG URL." : "A picture URL, a data: URL or <svg> markup." },
157
- object2(key, key === "video" ? "A video URL." : key === "svg" ? "SVG markup or an SVG URL." : "A picture URL or a data: URL."),
158
- ...key === "image" ? [object2("svg", "SVG markup.")] : [],
159
- object2("slot", "A slot name, to leave the subject for the host to fill.")
160
- ],
161
- description: `${about} ${templateSlotTakes(slot).replace(/^a /, "A ")}. ${slot.hasDefault ? "Default: a placeholder picture." : "No default: left out, the host fills it."}`
162
- };
163
- }
164
- }
165
- }
166
- function templateValuesSchema(slots) {
167
- return {
168
- type: "object",
169
- properties: Object.fromEntries(slots.map((s) => [s.name, templateSlotSchema(s)])),
170
- additionalProperties: false,
171
- description: `Slot values by name; slots left out take their defaults. ${slots.length ? `Slots: ${slots.map((s) => s.name).join(", ")}.` : "This template has no slots."}`
172
- };
173
- }
174
- function templateDefaultValues(slots) {
175
- const out = {};
176
- for (const s of slots) if (!isSubjectTemplateSlot(s)) out[s.name] = s.default;
177
- return out;
178
- }
179
- function templateSlotSummary(slot) {
180
- const fallback = isSubjectTemplateSlot(slot) ? slot.hasDefault ? "a placeholder by default" : "the host fills it when none is given" : `default ${JSON.stringify(slot.default)}`;
181
- return `${slot.name} (${slot.type}): ${slot.label}; takes ${templateSlotTakes(slot)}; ${fallback}.`;
182
- }
183
- function searchTemplateSummaries(catalog, options = {}) {
184
- const words = (_nullishCoalesce(options.query, () => ( ""))).toLowerCase().split(/\s+/).filter(Boolean);
185
- const scored = [];
186
- for (const t of catalog) {
187
- if (!_chunk2K5TELHVcjs.hasEffectTags.call(void 0, t, options.tags)) continue;
188
- let score = 0;
189
- const name = t.name.toLowerCase();
190
- const rest = [t.id, ..._nullishCoalesce(t.tags, () => ( [])), t.description].join(" ").toLowerCase();
191
- if (!words.every((w) => name.includes(w) || rest.includes(w))) continue;
192
- for (const w of words) score += name.includes(w) ? 2 : 1;
193
- scored.push({ t, score });
194
- }
195
- scored.sort((a, b) => b.score - a.score);
196
- const out = scored.map((s) => s.t);
197
- return options.limit !== void 0 ? out.slice(0, Math.max(0, options.limit)) : out;
198
- }
199
- var effectLayerRole = (layer) => _nullishCoalesce(layer.role, () => ( (layer.rect ? "subject" : "background")));
200
- function effectLayerInput(description) {
201
- const images = description.inputs.filter((i) => i.kind === "image");
202
- return _optionalChain([(_nullishCoalesce(images.find((i) => i.name === "source"), () => ( images.find((i) => i.name !== "from" && i.name !== "to")))), 'optionalAccess', _ => _.name]);
203
- }
204
- var EFFECT_LAYER_USES = ["generator", "filter", "overlay", "title"];
205
- var effectLayerOffered = (e) => (e.kind === "shader" || e.kind === "vector") && e.uses.some((u) => EFFECT_LAYER_USES.includes(u));
206
- var isRect = (r) => isObject(r) && ["x", "y", "width", "height"].every((k) => Number.isFinite(r[k])) && r.width > 0 && r.height > 0;
207
- var isLayerTime = (t) => typeof t === "number" && Number.isFinite(t) && t >= 0 || isObject(t) && Number.isInteger(t.shots) && t.shots >= 1;
208
- function effectSubjectProblem(subject) {
209
- const kind = effectSubjectKind(subject);
210
- if (!kind) return `a subject is one of { image }, { video }, { svg }, { text } or { slot }, not ${typeName(subject)}`;
211
- if (!subject[kind].trim()) return `a subject's "${kind}" is a non-empty string`;
212
- return void 0;
213
- }
214
- function checkEffectSequence(sequence, catalog) {
215
- const problems = [];
216
- if (!isObject(sequence)) return ["A sequence is an object with name, stage and shots."];
217
- if (typeof sequence.name !== "string" || !sequence.name) problems.push("The sequence needs a name.");
218
- const stage = sequence.stage;
219
- if (!isObject(stage) || !(Number(stage.width) > 0) || !(Number(stage.height) > 0)) problems.push("The sequence needs a stage { width, height } in pixels, both > 0.");
220
- if (!Array.isArray(sequence.shots) || !sequence.shots.length) return [...problems, "The sequence needs at least one shot."];
221
- const byId = catalog ? new Map(catalog.map((e) => [e.id, e])) : void 0;
222
- const ids = /* @__PURE__ */ new Set();
223
- sequence.shots.forEach((shot, i) => {
224
- const at = `shot ${i + 1}`;
225
- if (!isObject(shot)) return void problems.push(`${at} is not an object.`);
226
- if (!(Number.isFinite(shot.hold) && shot.hold >= 0)) problems.push(`${at}: hold must be ms \u2265 0.`);
227
- for (const k of ["title", "caption"]) if (shot[k] !== void 0 && typeof shot[k] !== "string") problems.push(`${at}: ${k} must be words.`);
228
- if (shot.camera !== void 0) {
229
- const camera = shot.camera;
230
- if (!isObject(camera)) problems.push(`${at}: camera must be an object.`);
231
- else if (camera.framing !== void 0 && !isRect(camera.framing)) problems.push(`${at}: camera.framing must be { x, y, width, height } with width and height > 0.`);
232
- }
233
- if (!Array.isArray(shot.layers)) problems.push(`${at}: layers must be a list (it may be empty).`);
234
- else
235
- shot.layers.forEach((layer, j) => {
236
- const where = `${at}, layer ${j + 1}`;
237
- if (!isObject(layer)) return void problems.push(`${where} is not an object.`);
238
- if (layer.id !== void 0) {
239
- if (typeof layer.id !== "string" || !layer.id) problems.push(`${where}: id must be a non-empty string.`);
240
- else if (ids.has(layer.id)) problems.push(`${where}: id "${layer.id}" is used twice.`);
241
- else ids.add(layer.id);
242
- }
243
- if (layer.effect === void 0 && layer.subject === void 0) problems.push(`${where} has neither an effect nor a subject.`);
244
- if (layer.effect !== void 0 && (typeof layer.effect !== "string" || !layer.effect)) problems.push(`${where}: effect must be an effect id.`);
245
- else if (typeof layer.effect === "string" && byId) {
246
- const e = byId.get(layer.effect);
247
- if (!e) problems.push(`${where}: the provider has no effect "${layer.effect}".`);
248
- else if (!effectLayerOffered(e)) problems.push(`${where}: "${layer.effect}" (${e.kind}, ${e.uses.join("/")}) cannot be a layer; a layer's effect is a generator, filter, overlay or title.`);
249
- }
250
- if (layer.subject !== void 0) {
251
- const p = effectSubjectProblem(layer.subject);
252
- if (p) problems.push(`${where}: ${p}.`);
253
- }
254
- if (layer.role !== void 0 && !_chunk2K5TELHVcjs.EFFECT_LAYER_ROLES.includes(layer.role)) problems.push(`${where}: role is one of ${_chunk2K5TELHVcjs.EFFECT_LAYER_ROLES.join(", ")}.`);
255
- if (layer.rect !== void 0 && !isRect(layer.rect)) problems.push(`${where}: rect must be { x, y, width, height } with width and height > 0.`);
256
- for (const k of ["from", "until"]) if (layer[k] !== void 0 && !isLayerTime(layer[k])) problems.push(`${where}: ${k} is ms \u2265 0 or { shots: n } with n \u2265 1.`);
257
- if (layer.opacity !== void 0 && !(typeof layer.opacity === "number" && layer.opacity >= 0 && layer.opacity <= 1)) problems.push(`${where}: opacity is 0\u20131.`);
258
- if (layer.fade !== void 0 && !(typeof layer.fade === "number" && layer.fade >= 0)) problems.push(`${where}: fade is ms \u2265 0.`);
259
- if (layer.values !== void 0 && !isObject(layer.values)) problems.push(`${where}: values must be an object of control values.`);
260
- });
261
- if (shot.transition !== void 0) {
262
- const t = shot.transition;
263
- if (i === 0) problems.push(`${at} has a transition, but there is no shot before it.`);
264
- if (!isObject(t) || typeof t.effect !== "string" || !t.effect) problems.push(`${at}: transition needs an effect id.`);
265
- else {
266
- if (t.ms !== void 0 && !(typeof t.ms === "number" && t.ms > 0)) problems.push(`${at}: transition ms must be > 0.`);
267
- const e = _optionalChain([byId, 'optionalAccess', _2 => _2.get, 'call', _3 => _3(t.effect)]);
268
- if (byId && !e) problems.push(`${at}: the provider has no transition "${t.effect}".`);
269
- else if (e && !e.uses.includes("transition")) problems.push(`${at}: "${t.effect}" is not a transition (its uses are ${e.uses.join(", ")}).`);
270
- }
271
- }
272
- });
273
- return problems;
274
- }
275
- function effectSequenceEffects(sequence) {
276
- const out = /* @__PURE__ */ new Set();
277
- for (const shot of sequence.shots) {
278
- for (const l of shot.layers) if (l.effect) out.add(l.effect);
279
- if (shot.transition) out.add(shot.transition.effect);
280
- }
281
- return [...out];
282
- }
283
- function effectSequenceSlots(sequence) {
284
- const out = /* @__PURE__ */ new Set();
285
- for (const shot of sequence.shots) for (const l of shot.layers) if (l.subject && "slot" in l.subject) out.add(l.subject.slot);
286
- return [...out];
287
- }
288
-
289
81
  // src/effects/conformance.ts
290
- var codeOf = (e) => _chunk2K5TELHVcjs.isEffectError.call(void 0, e) ? e.code : e instanceof Error ? `untyped ${e.name}: ${e.message}` : String(e);
82
+ var codeOf = (e) => _chunkJAOSL334cjs.isEffectError.call(void 0, e) ? e.code : e instanceof Error ? `untyped ${e.name}: ${e.message}` : String(e);
291
83
  async function rejectsWith(code, run) {
292
84
  try {
293
85
  await run();
@@ -301,26 +93,26 @@ function checkSummary(e, issues) {
301
93
  const at = (message) => issues.push({ effectId: e.id, message });
302
94
  if (!e.id || typeof e.id !== "string") at("summary has no id");
303
95
  if (!e.name) at("summary has no name");
304
- if (!_chunk2K5TELHVcjs.EFFECT_KINDS.includes(e.kind)) at(`kind "${e.kind}" is not one of ${_chunk2K5TELHVcjs.EFFECT_KINDS.join(", ")}`);
96
+ if (!_chunkJAOSL334cjs.EFFECT_KINDS.includes(e.kind)) at(`kind "${e.kind}" is not one of ${_chunkJAOSL334cjs.EFFECT_KINDS.join(", ")}`);
305
97
  if (!e.category) at("summary has no category");
306
98
  if (!Array.isArray(e.uses) || !e.uses.length) at("summary has no uses");
307
- for (const u of _nullishCoalesce(e.uses, () => ( []))) if (!_chunk2K5TELHVcjs.EFFECT_USES.includes(u)) at(`use "${u}" is not one of ${_chunk2K5TELHVcjs.EFFECT_USES.join(", ")}`);
99
+ for (const u of _nullishCoalesce(e.uses, () => ( []))) if (!_chunkJAOSL334cjs.EFFECT_USES.includes(u)) at(`use "${u}" is not one of ${_chunkJAOSL334cjs.EFFECT_USES.join(", ")}`);
308
100
  if (typeof e.transparent !== "boolean") at("transparent is not a boolean");
309
101
  if (typeof e.loop !== "boolean") at("loop is not a boolean");
310
102
  if (e.duration !== void 0 && !(e.duration > 0)) at("duration must be a positive number of ms when present");
311
103
  if (e.backgroundOpacity !== void 0 && (typeof e.backgroundOpacity !== "string" || !e.backgroundOpacity)) at("backgroundOpacity must name a control when present");
312
104
  if (e.kind === "camera") {
313
- if (_optionalChain([e, 'access', _4 => _4.uses, 'optionalAccess', _5 => _5.length]) !== 1 || e.uses[0] !== "camera") at('a camera effect must have exactly the use "camera"');
105
+ if (_optionalChain([e, 'access', _ => _.uses, 'optionalAccess', _2 => _2.length]) !== 1 || e.uses[0] !== "camera") at('a camera effect must have exactly the use "camera"');
314
106
  const m = e.camera;
315
107
  if (!m) at("a camera effect needs camera: { role, durationMs }");
316
108
  else {
317
- if (!_chunk2K5TELHVcjs.CAMERA_MOVE_ROLES.includes(m.role)) at(`camera.role "${m.role}" is not one of ${_chunk2K5TELHVcjs.CAMERA_MOVE_ROLES.join(", ")}`);
109
+ if (!_chunkJAOSL334cjs.CAMERA_MOVE_ROLES.includes(m.role)) at(`camera.role "${m.role}" is not one of ${_chunkJAOSL334cjs.CAMERA_MOVE_ROLES.join(", ")}`);
318
110
  if (!(Number.isFinite(m.durationMs) && m.durationMs >= 0)) at("camera.durationMs must be a number of ms \u2265 0");
319
111
  if (m.cut !== void 0 && !(m.cut >= 0 && m.cut <= 1)) at("camera.cut must be 0\u20131 when present");
320
112
  if (e.duration !== void 0 && e.duration !== m.durationMs) at(`duration ${e.duration} differs from camera.durationMs ${m.durationMs}`);
321
113
  }
322
114
  } else {
323
- if (_optionalChain([e, 'access', _6 => _6.uses, 'optionalAccess', _7 => _7.includes, 'call', _8 => _8("camera")])) at('only camera effects may have the use "camera"');
115
+ if (_optionalChain([e, 'access', _3 => _3.uses, 'optionalAccess', _4 => _4.includes, 'call', _5 => _5("camera")])) at('only camera effects may have the use "camera"');
324
116
  if (e.camera !== void 0) at("only camera effects may have camera");
325
117
  }
326
118
  }
@@ -329,19 +121,19 @@ function checkDescription(id, d, issues) {
329
121
  if (d.id !== id) at(`describe("${id}") returned id "${d.id}"`);
330
122
  const c = d.controls;
331
123
  if (!c || c.type !== "object") at("controls is not an object schema");
332
- if (_optionalChain([c, 'optionalAccess', _9 => _9.additionalProperties]) !== false) at("controls must set additionalProperties: false");
333
- for (const [name, schema] of Object.entries(_nullishCoalesce(_optionalChain([c, 'optionalAccess', _10 => _10.properties]), () => ( {})))) {
124
+ if (_optionalChain([c, 'optionalAccess', _6 => _6.additionalProperties]) !== false) at("controls must set additionalProperties: false");
125
+ for (const [name, schema] of Object.entries(_nullishCoalesce(_optionalChain([c, 'optionalAccess', _7 => _7.properties]), () => ( {})))) {
334
126
  if (!schema.description || !String(schema.description).trim()) at(`control "${name}" has no description`);
335
127
  if (!(name in (_nullishCoalesce(d.defaults, () => ( {}))))) at(`control "${name}" has no default`);
336
128
  }
337
- for (const name of Object.keys(_nullishCoalesce(d.defaults, () => ( {})))) if (!(name in (_nullishCoalesce(_optionalChain([c, 'optionalAccess', _11 => _11.properties]), () => ( {}))))) at(`default "${name}" is not a control`);
129
+ for (const name of Object.keys(_nullishCoalesce(d.defaults, () => ( {})))) if (!(name in (_nullishCoalesce(_optionalChain([c, 'optionalAccess', _8 => _8.properties]), () => ( {}))))) at(`default "${name}" is not a control`);
338
130
  if (d.backgroundOpacity !== void 0) {
339
- const control = _optionalChain([c, 'optionalAccess', _12 => _12.properties, 'optionalAccess', _13 => _13[d.backgroundOpacity]]);
131
+ const control = _optionalChain([c, 'optionalAccess', _9 => _9.properties, 'optionalAccess', _10 => _10[d.backgroundOpacity]]);
340
132
  if (!control) at(`backgroundOpacity "${d.backgroundOpacity}" is not a control`);
341
133
  else if (control.type !== "number" || control.minimum !== 0 || control.maximum !== 1) at(`backgroundOpacity "${d.backgroundOpacity}" must be a number control from 0 to 1`);
342
134
  }
343
- for (const e of _chunk2K5TELHVcjs.effectValueErrors.call(void 0, d, d.defaults)) at(`default ${e.path}: ${e.message}`);
344
- for (const p of _nullishCoalesce(d.presets, () => ( []))) for (const e of _chunk2K5TELHVcjs.effectValueErrors.call(void 0, d, p.values)) at(`preset "${p.name}" ${e.path}: ${e.message}`);
135
+ for (const e of _chunkJAOSL334cjs.effectValueErrors.call(void 0, d, d.defaults)) at(`default ${e.path}: ${e.message}`);
136
+ for (const p of _nullishCoalesce(d.presets, () => ( []))) for (const e of _chunkJAOSL334cjs.effectValueErrors.call(void 0, d, p.values)) at(`preset "${p.name}" ${e.path}: ${e.message}`);
345
137
  for (const input2 of _nullishCoalesce(d.inputs, () => ( []))) {
346
138
  if (!input2.name || !input2.description) at("every input needs a name and a description");
347
139
  if (input2.kind !== "image" && input2.kind !== "audio") at(`input "${input2.name}" has kind "${input2.kind}"`);
@@ -352,7 +144,7 @@ function checkDescription(id, d, issues) {
352
144
  }
353
145
  }
354
146
  function grey(size) {
355
- const p = _chunk2K5TELHVcjs.createEffectPixels.call(void 0, size, size);
147
+ const p = _chunkJAOSL334cjs.createEffectPixels.call(void 0, size, size);
356
148
  p.data.fill(128);
357
149
  return p;
358
150
  }
@@ -369,7 +161,7 @@ async function checkRender(provider, d, size, issues) {
369
161
  }
370
162
  try {
371
163
  const out = await renderer.render({ time: 0, inputs });
372
- if (!_chunk2K5TELHVcjs.isEffectPixels.call(void 0, out)) at("render did not return EffectPixels");
164
+ if (!_chunkJAOSL334cjs.isEffectPixels.call(void 0, out)) at("render did not return EffectPixels");
373
165
  else if (out.width !== size || out.height !== size || out.data.length !== size * size * 4) at(`render returned ${out.width}\xD7${out.height}, not ${size}\xD7${size}`);
374
166
  } catch (e) {
375
167
  at(`render failed: ${codeOf(e)}`);
@@ -399,10 +191,10 @@ async function checkCamera(provider, d, issues) {
399
191
  at("cameraView must be synchronous; it returned a Promise");
400
192
  return;
401
193
  }
402
- if (!_chunk2K5TELHVcjs.isCameraView.call(void 0, view)) at(`cameraView at u ${u} is not a CameraView (zoom > 0, finite scrollX and scrollY): ${JSON.stringify(view)}`);
194
+ if (!_chunkJAOSL334cjs.isCameraView.call(void 0, view)) at(`cameraView at u ${u} is not a CameraView (zoom > 0, finite scrollX and scrollY): ${JSON.stringify(view)}`);
403
195
  else views.push(view);
404
196
  const again = provider.cameraView(d.id, ctx(u));
405
- if (_chunk2K5TELHVcjs.isCameraView.call(void 0, view) && !sameView(view, again)) at(`cameraView is not pure: two calls at u ${u} gave different views`);
197
+ if (_chunkJAOSL334cjs.isCameraView.call(void 0, view) && !sameView(view, again)) at(`cameraView is not pure: two calls at u ${u} gave different views`);
406
198
  } catch (e) {
407
199
  at(`cameraView at u ${u} failed: ${codeOf(e)}`);
408
200
  }
@@ -412,10 +204,10 @@ async function checkCamera(provider, d, issues) {
412
204
  if (provider.sampleCameraMove && views.length === 5) {
413
205
  try {
414
206
  const sample = await provider.sampleCameraMove(d.id, { from: WIDE, to, ms, stage: STAGE, fps: 10 });
415
- const keys = _optionalChain([sample, 'optionalAccess', _14 => _14.keys]);
207
+ const keys = _optionalChain([sample, 'optionalAccess', _11 => _11.keys]);
416
208
  if (!Array.isArray(keys) || keys.length < 2) at("sampleCameraMove returned fewer than two keys");
417
209
  else {
418
- if (keys.some((k, i) => !_chunk2K5TELHVcjs.isCameraView.call(void 0, k.view) || !Number.isFinite(k.t) || i > 0 && k.t < keys[i - 1].t)) at("sampleCameraMove keys must be CameraViews in time order");
210
+ if (keys.some((k, i) => !_chunkJAOSL334cjs.isCameraView.call(void 0, k.view) || !Number.isFinite(k.t) || i > 0 && k.t < keys[i - 1].t)) at("sampleCameraMove keys must be CameraViews in time order");
419
211
  if (keys[0].t !== 0 || keys[keys.length - 1].t !== ms) at(`sampleCameraMove keys must run from 0 to ${ms} ms, got ${keys[0].t} to ${keys[keys.length - 1].t}`);
420
212
  else if (!near(keys[0].view, views[0]) || !near(keys[keys.length - 1].view, views[4])) at("sampleCameraMove disagrees with cameraView at the start or end of the move");
421
213
  if (camera.cut !== void 0 && sample.cut === void 0) at("sampleCameraMove gave no cut for a move that cuts");
@@ -427,18 +219,18 @@ async function checkCamera(provider, d, issues) {
427
219
  }
428
220
  var wrongValue = (slot) => slot.type === "number" ? "not a number" : slot.type === "text" ? 42 : slot.type === "color" ? "blue" : 42;
429
221
  function checkSlot(templateId, slot, issues) {
430
- const at = (message) => issues.push({ templateId, message: `slot ${JSON.stringify(_optionalChain([slot, 'optionalAccess', _15 => _15.name]))}: ${message}` });
222
+ const at = (message) => issues.push({ templateId, message: `slot ${JSON.stringify(_optionalChain([slot, 'optionalAccess', _12 => _12.name]))}: ${message}` });
431
223
  if (!slot || typeof slot.name !== "string" || !/^[A-Za-z][\w-]*$/.test(slot.name)) return at('needs a name of letters, digits, "-" and "_", starting with a letter');
432
- if (!_chunk2K5TELHVcjs.EFFECT_TEMPLATE_SLOT_TYPES.includes(slot.type)) return at(`type "${slot.type}" is not one of ${_chunk2K5TELHVcjs.EFFECT_TEMPLATE_SLOT_TYPES.join(", ")}`);
224
+ if (!_chunkJAOSL334cjs.EFFECT_TEMPLATE_SLOT_TYPES.includes(slot.type)) return at(`type "${slot.type}" is not one of ${_chunkJAOSL334cjs.EFFECT_TEMPLATE_SLOT_TYPES.join(", ")}`);
433
225
  if (typeof slot.label !== "string" || !slot.label) at("needs a label");
434
- if (isSubjectTemplateSlot(slot)) {
226
+ if (_chunk6RZVFYGJcjs.isSubjectTemplateSlot.call(void 0, slot)) {
435
227
  if (typeof slot.hasDefault !== "boolean") at("a subject slot needs hasDefault (a boolean)");
436
228
  if ("default" in slot) at("a subject slot describes hasDefault, not its default");
437
229
  return;
438
230
  }
439
231
  const fallback = slot.default;
440
232
  if (fallback === void 0) return at("needs a default");
441
- const problem = templateValueProblem(slot, fallback);
233
+ const problem = _chunk6RZVFYGJcjs.templateValueProblem.call(void 0, slot, fallback);
442
234
  if (problem) at(`its default does not fit: ${problem}`);
443
235
  if (slot.type === "number" && slot.min !== void 0 && slot.max !== void 0 && slot.min > slot.max) at("min is above max");
444
236
  }
@@ -472,8 +264,8 @@ async function checkTemplates(provider, list, issues) {
472
264
  slots = d.slots;
473
265
  const names = /* @__PURE__ */ new Set();
474
266
  for (const slot of slots) {
475
- if (names.has(_optionalChain([slot, 'optionalAccess', _16 => _16.name]))) at(`slot "${slot.name}" is declared twice`);
476
- names.add(_optionalChain([slot, 'optionalAccess', _17 => _17.name]));
267
+ if (names.has(_optionalChain([slot, 'optionalAccess', _13 => _13.name]))) at(`slot "${slot.name}" is declared twice`);
268
+ names.add(_optionalChain([slot, 'optionalAccess', _14 => _14.name]));
477
269
  checkSlot(id, slot, issues);
478
270
  }
479
271
  } catch (e) {
@@ -484,11 +276,11 @@ async function checkTemplates(provider, list, issues) {
484
276
  const result = await provider.instantiateTemplate(id);
485
277
  if (!result.ok) at(`instantiateTemplate with the defaults failed: ${result.errors.join(" ")}`);
486
278
  else {
487
- for (const p of checkEffectSequence(result.sequence, list)) at(`with the defaults, ${p}`);
488
- if (_optionalChain([result, 'access', _18 => _18.sequence, 'optionalAccess', _19 => _19.shots, 'optionalAccess', _20 => _20.length]) !== summary.shots) at(`listTemplates says ${summary.shots} shots; the sequence has ${_optionalChain([result, 'access', _21 => _21.sequence, 'optionalAccess', _22 => _22.shots, 'optionalAccess', _23 => _23.length])}`);
279
+ for (const p of _chunk6RZVFYGJcjs.checkEffectSequence.call(void 0, result.sequence, list)) at(`with the defaults, ${p}`);
280
+ if (_optionalChain([result, 'access', _15 => _15.sequence, 'optionalAccess', _16 => _16.shots, 'optionalAccess', _17 => _17.length]) !== summary.shots) at(`listTemplates says ${summary.shots} shots; the sequence has ${_optionalChain([result, 'access', _18 => _18.sequence, 'optionalAccess', _19 => _19.shots, 'optionalAccess', _20 => _20.length])}`);
489
281
  if (!Array.isArray(result.openSlots) || !Array.isArray(result.notes)) at("instantiateTemplate needs openSlots and notes lists");
490
282
  else {
491
- const open = Array.isArray(_optionalChain([result, 'access', _24 => _24.sequence, 'optionalAccess', _25 => _25.shots])) ? effectSequenceSlots(result.sequence) : [];
283
+ const open = Array.isArray(_optionalChain([result, 'access', _21 => _21.sequence, 'optionalAccess', _22 => _22.shots])) ? _chunk6RZVFYGJcjs.effectSequenceSlots.call(void 0, result.sequence) : [];
492
284
  if (open.some((s) => !result.openSlots.includes(s))) at(`openSlots ${JSON.stringify(result.openSlots)} misses slots the sequence leaves open (${open.join(", ")})`);
493
285
  }
494
286
  }
@@ -512,20 +304,20 @@ async function checkEffectProvider(provider, options = {}) {
512
304
  if (!provider.id) top("provider has no id");
513
305
  const caps = provider.capabilities;
514
306
  for (const k of ["supportsWorker", "supportsFloat", "supportsMask", "supportsHostImages", "supportsVector"]) {
515
- if (typeof _optionalChain([caps, 'optionalAccess', _26 => _26[k]]) !== "boolean") top(`capabilities.${k} is not a boolean`);
307
+ if (typeof _optionalChain([caps, 'optionalAccess', _23 => _23[k]]) !== "boolean") top(`capabilities.${k} is not a boolean`);
516
308
  }
517
- if (_optionalChain([caps, 'optionalAccess', _27 => _27.supportsAuthoring]) !== void 0 && typeof caps.supportsAuthoring !== "boolean") top("capabilities.supportsAuthoring is not a boolean");
518
- if (_optionalChain([caps, 'optionalAccess', _28 => _28.supportsVector]) && typeof provider.applyVectorEffect !== "function") top("supportsVector is set but applyVectorEffect is missing");
519
- if (_optionalChain([caps, 'optionalAccess', _29 => _29.supportsAuthoring]) && typeof provider.openAuthoring !== "function") top("supportsAuthoring is set but openAuthoring is missing");
520
- if (_optionalChain([caps, 'optionalAccess', _30 => _30.supportsCamera]) !== void 0 && typeof caps.supportsCamera !== "boolean") top("capabilities.supportsCamera is not a boolean");
521
- if (_optionalChain([caps, 'optionalAccess', _31 => _31.supportsCamera]) && typeof provider.cameraView !== "function") top("supportsCamera is set but cameraView is missing");
309
+ if (_optionalChain([caps, 'optionalAccess', _24 => _24.supportsAuthoring]) !== void 0 && typeof caps.supportsAuthoring !== "boolean") top("capabilities.supportsAuthoring is not a boolean");
310
+ if (_optionalChain([caps, 'optionalAccess', _25 => _25.supportsVector]) && typeof provider.applyVectorEffect !== "function") top("supportsVector is set but applyVectorEffect is missing");
311
+ if (_optionalChain([caps, 'optionalAccess', _26 => _26.supportsAuthoring]) && typeof provider.openAuthoring !== "function") top("supportsAuthoring is set but openAuthoring is missing");
312
+ if (_optionalChain([caps, 'optionalAccess', _27 => _27.supportsCamera]) !== void 0 && typeof caps.supportsCamera !== "boolean") top("capabilities.supportsCamera is not a boolean");
313
+ if (_optionalChain([caps, 'optionalAccess', _28 => _28.supportsCamera]) && typeof provider.cameraView !== "function") top("supportsCamera is set but cameraView is missing");
522
314
  if (provider.sampleCameraMove && typeof provider.cameraView !== "function") top("sampleCameraMove is present but cameraView is missing");
523
- if (_optionalChain([caps, 'optionalAccess', _32 => _32.supportsTemplates]) !== void 0 && typeof caps.supportsTemplates !== "boolean") top("capabilities.supportsTemplates is not a boolean");
315
+ if (_optionalChain([caps, 'optionalAccess', _29 => _29.supportsTemplates]) !== void 0 && typeof caps.supportsTemplates !== "boolean") top("capabilities.supportsTemplates is not a boolean");
524
316
  const templateMethods = ["listTemplates", "describeTemplate", "instantiateTemplate"];
525
- if (_optionalChain([caps, 'optionalAccess', _33 => _33.supportsTemplates])) {
317
+ if (_optionalChain([caps, 'optionalAccess', _30 => _30.supportsTemplates])) {
526
318
  for (const m of templateMethods) if (typeof provider[m] !== "function") top(`supportsTemplates is set but ${m} is missing`);
527
319
  }
528
- if (!_optionalChain([caps, 'optionalAccess', _34 => _34.supportsTemplates]) && templateMethods.some((m) => typeof provider[m] === "function")) top("template methods are present but capabilities.supportsTemplates is not set");
320
+ if (!_optionalChain([caps, 'optionalAccess', _31 => _31.supportsTemplates]) && templateMethods.some((m) => typeof provider[m] === "function")) top("template methods are present but capabilities.supportsTemplates is not set");
529
321
  const list = await provider.list();
530
322
  const ids = /* @__PURE__ */ new Set();
531
323
  for (const e of list) {
@@ -533,10 +325,10 @@ async function checkEffectProvider(provider, options = {}) {
533
325
  ids.add(e.id);
534
326
  checkSummary(e, issues);
535
327
  }
536
- if (!_optionalChain([caps, 'optionalAccess', _35 => _35.supportsCamera]) && list.some((e) => e.kind === "camera")) top("the catalog lists camera effects but capabilities.supportsCamera is not set");
328
+ if (!_optionalChain([caps, 'optionalAccess', _32 => _32.supportsCamera]) && list.some((e) => e.kind === "camera")) top("the catalog lists camera effects but capabilities.supportsCamera is not set");
537
329
  const all = await provider.search("");
538
330
  if (all.length !== list.length) top(`search("") returned ${all.length} effects, list() ${list.length}`);
539
- const firstUse = _optionalChain([list, 'access', _36 => _36[0], 'optionalAccess', _37 => _37.uses, 'access', _38 => _38[0]]);
331
+ const firstUse = _optionalChain([list, 'access', _33 => _33[0], 'optionalAccess', _34 => _34.uses, 'access', _35 => _35[0]]);
540
332
  if (firstUse) {
541
333
  const filtered = await provider.search("", { use: firstUse });
542
334
  if (filtered.some((e) => !e.uses.includes(firstUse))) top(`search("", { use: "${firstUse}" }) returned effects without that use`);
@@ -545,7 +337,7 @@ async function checkEffectProvider(provider, options = {}) {
545
337
  if (unknown) top(`describe of an unknown id ${unknown}`);
546
338
  const unknownRenderer = await rejectsWith("unknown_effect", () => provider.createRenderer("__no_such_effect__", { width: 4, height: 4 }));
547
339
  if (unknownRenderer) top(`createRenderer of an unknown id ${unknownRenderer}`);
548
- if (_optionalChain([caps, 'optionalAccess', _39 => _39.supportsCamera]) && provider.cameraView) {
340
+ if (_optionalChain([caps, 'optionalAccess', _36 => _36.supportsCamera]) && provider.cameraView) {
549
341
  const probe = { from: WIDE, to: CLOSE, u: 0.5, ms: 1e3, stage: STAGE };
550
342
  const unknownCamera = await rejectsWith("unknown_effect", () => provider.cameraView("__no_such_effect__", probe));
551
343
  if (unknownCamera) top(`cameraView of an unknown id ${unknownCamera}`);
@@ -577,7 +369,7 @@ async function checkEffectProvider(provider, options = {}) {
577
369
  if (bad) issues.push({ effectId: id, message: `applyVectorEffect with an unknown control ${bad}` });
578
370
  }
579
371
  }
580
- if (_optionalChain([caps, 'optionalAccess', _40 => _40.supportsAuthoring]) && options.authoring !== false && typeof provider.openAuthoring === "function") {
372
+ if (_optionalChain([caps, 'optionalAccess', _37 => _37.supportsAuthoring]) && options.authoring !== false && typeof provider.openAuthoring === "function") {
581
373
  const targetEffect = (await Promise.all((_nullishCoalesce(options.ids, () => ( [...ids]))).map((id) => provider.describe(id)))).find(
582
374
  (d) => d.kind !== "motion" && d.kind !== "vector" && d.kind !== "camera"
583
375
  );
@@ -628,7 +420,7 @@ async function checkEffectProvider(provider, options = {}) {
628
420
  }
629
421
  }
630
422
  }
631
- if (_optionalChain([caps, 'optionalAccess', _41 => _41.supportsTemplates]) && options.templates !== false && templateMethods.every((m) => typeof provider[m] === "function")) await checkTemplates(provider, list, issues);
423
+ if (_optionalChain([caps, 'optionalAccess', _38 => _38.supportsTemplates]) && options.templates !== false && templateMethods.every((m) => typeof provider[m] === "function")) await checkTemplates(provider, list, issues);
632
424
  return issues;
633
425
  }
634
426
 
@@ -706,7 +498,7 @@ function fill(t, values) {
706
498
  const slots = new Map(t.slots.map((s) => [s.name, s]));
707
499
  const valueOf = (name) => {
708
500
  const s = slots.get(name);
709
- return _nullishCoalesce(values[name], () => ( (isSubjectTemplateSlot(s) ? s.subjectDefault : s.default)));
501
+ return _nullishCoalesce(values[name], () => ( (_chunk6RZVFYGJcjs.isSubjectTemplateSlot.call(void 0, s) ? s.subjectDefault : s.default)));
710
502
  };
711
503
  const walk = (v, key) => {
712
504
  if (typeof v === "string") {
@@ -729,20 +521,20 @@ function fakeTemplateMethods() {
729
521
  const byId = new Map(TEMPLATES.map((t) => [t.summary.id, t]));
730
522
  const get = (id) => {
731
523
  const t = byId.get(id);
732
- if (!t) throw new (0, _chunk2K5TELHVcjs.UnknownTemplateError)(id, "the fake provider");
524
+ if (!t) throw new (0, _chunkJAOSL334cjs.UnknownTemplateError)(id, "the fake provider");
733
525
  return t;
734
526
  };
735
527
  return {
736
- listTemplates: (options) => searchTemplateSummaries(TEMPLATES.map((t) => t.summary), options).map((s) => structuredClone(s)),
528
+ listTemplates: (options) => _chunk6RZVFYGJcjs.searchTemplateSummaries.call(void 0, TEMPLATES.map((t) => t.summary), options).map((s) => structuredClone(s)),
737
529
  describeTemplate: (id) => structuredClone(describeOf(get(id))),
738
530
  instantiateTemplate(id, values = {}, options = {}) {
739
531
  const t = get(id);
740
- const errors = checkTemplateValues(describeOf(t).slots, values);
741
- if (options.name !== void 0 && (typeof options.name !== "string" || !EFFECT_SEQUENCE_NAME.test(options.name))) errors.push(`The sequence name is lowercase words and dashes (like "${t.summary.id.replace(/^fake\./, "")}").`);
532
+ const errors = _chunk6RZVFYGJcjs.checkTemplateValues.call(void 0, describeOf(t).slots, values);
533
+ if (options.name !== void 0 && (typeof options.name !== "string" || !_chunk6RZVFYGJcjs.EFFECT_SEQUENCE_NAME.test(options.name))) errors.push(`The sequence name is lowercase words and dashes (like "${t.summary.id.replace(/^fake\./, "")}").`);
742
534
  if (errors.length) return { ok: false, errors };
743
535
  const sequence = fill(t, values);
744
536
  if (options.name) sequence.name = options.name;
745
- return { ok: true, sequence, openSlots: effectSequenceSlots(sequence), notes: [] };
537
+ return { ok: true, sequence, openSlots: _chunk6RZVFYGJcjs.effectSequenceSlots.call(void 0, sequence), notes: [] };
746
538
  }
747
539
  };
748
540
  }
@@ -987,16 +779,16 @@ var hexToRgb = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
987
779
  var smooth = (t) => t * t * (3 - 2 * t);
988
780
  var clamp01 = (v) => v < 0 ? 0 : v > 1 ? 1 : v;
989
781
  function input(request, name, id, width, height) {
990
- const src = _optionalChain([request, 'access', _42 => _42.inputs, 'optionalAccess', _43 => _43[name]]);
991
- if (!src) throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`Effect "${id}" needs an input named "${name}".`, id);
992
- if (!_chunk2K5TELHVcjs.isEffectPixels.call(void 0, src)) throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`The fake provider only takes EffectPixels inputs ("${name}").`, id);
782
+ const src = _optionalChain([request, 'access', _39 => _39.inputs, 'optionalAccess', _40 => _40[name]]);
783
+ if (!src) throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`Effect "${id}" needs an input named "${name}".`, id);
784
+ if (!_chunkJAOSL334cjs.isEffectPixels.call(void 0, src)) throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`The fake provider only takes EffectPixels inputs ("${name}").`, id);
993
785
  if (src.width !== width || src.height !== height) {
994
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`Input "${name}" is ${src.width}\xD7${src.height}; the renderer is ${width}\xD7${height}.`, id);
786
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`Input "${name}" is ${src.width}\xD7${src.height}; the renderer is ${width}\xD7${height}.`, id);
995
787
  }
996
788
  return src;
997
789
  }
998
790
  function renderPixels(d, v, request, width, height) {
999
- const out = _chunk2K5TELHVcjs.createEffectPixels.call(void 0, width, height);
791
+ const out = _chunkJAOSL334cjs.createEffectPixels.call(void 0, width, height);
1000
792
  const o = out.data;
1001
793
  switch (d.id) {
1002
794
  case "fake.invert": {
@@ -1062,7 +854,7 @@ function renderPixels(d, v, request, width, height) {
1062
854
  break;
1063
855
  }
1064
856
  default:
1065
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect; use applyVectorEffect.`, d.id);
857
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect; use applyVectorEffect.`, d.id);
1066
858
  }
1067
859
  return out;
1068
860
  }
@@ -1092,22 +884,22 @@ function cameraViewOf(d, ctx, v) {
1092
884
  case "fake.drift":
1093
885
  return viewAt(x0, y0, from.zoom * lerp(1, v.scale, smooth(u)), ctx);
1094
886
  default:
1095
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect, not a camera move.`, d.id);
887
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect, not a camera move.`, d.id);
1096
888
  }
1097
889
  }
1098
890
  function toFloat(p) {
1099
891
  const f = new Float32Array(p.data.length);
1100
892
  for (let i = 0; i < f.length; i += 4) {
1101
- f[i] = _chunk2K5TELHVcjs.srgbToLinear.call(void 0, p.data[i] / 255);
1102
- f[i + 1] = _chunk2K5TELHVcjs.srgbToLinear.call(void 0, p.data[i + 1] / 255);
1103
- f[i + 2] = _chunk2K5TELHVcjs.srgbToLinear.call(void 0, p.data[i + 2] / 255);
893
+ f[i] = _chunkJAOSL334cjs.srgbToLinear.call(void 0, p.data[i] / 255);
894
+ f[i + 1] = _chunkJAOSL334cjs.srgbToLinear.call(void 0, p.data[i + 1] / 255);
895
+ f[i + 2] = _chunkJAOSL334cjs.srgbToLinear.call(void 0, p.data[i + 2] / 255);
1104
896
  f[i + 3] = p.data[i + 3] / 255;
1105
897
  }
1106
- return _chunk2K5TELHVcjs.encodeEffectFloat.call(void 0, { ...p, float: f });
898
+ return _chunkJAOSL334cjs.encodeEffectFloat.call(void 0, { ...p, float: f });
1107
899
  }
1108
900
  function maskResult(out, mask, source, id) {
1109
- if (!_chunk2K5TELHVcjs.isEffectPixels.call(void 0, mask) || mask.width !== out.width || mask.height !== out.height) {
1110
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)("The mask must be EffectPixels the size of the renderer.", id);
901
+ if (!_chunkJAOSL334cjs.isEffectPixels.call(void 0, mask) || mask.width !== out.width || mask.height !== out.height) {
902
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)("The mask must be EffectPixels the size of the renderer.", id);
1111
903
  }
1112
904
  const o = out.data;
1113
905
  for (let i = 0; i < o.length; i += 4) {
@@ -1134,32 +926,32 @@ function createFakeEffectProvider(options = {}) {
1134
926
  const byId = new Map(all.map((d) => [d.id, d]));
1135
927
  const get = (id) => {
1136
928
  const d = byId.get(id);
1137
- if (!d) throw new (0, _chunk2K5TELHVcjs.UnknownEffectError)(id, "the fake provider");
929
+ if (!d) throw new (0, _chunkJAOSL334cjs.UnknownEffectError)(id, "the fake provider");
1138
930
  return d;
1139
931
  };
1140
932
  const summaries = all.map(summaryOf);
1141
933
  const camera = (id, ctx, values) => {
1142
934
  const d = get(id);
1143
- if (d.kind !== "camera") throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a camera move.`, id);
1144
- if (!(ctx.u >= 0 && ctx.u <= 1)) throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`u must be 0\u20131 through the move, got ${ctx.u}.`, id);
1145
- return cameraViewOf(d, ctx, _chunk2K5TELHVcjs.resolveEffectValues.call(void 0, d, values));
935
+ if (d.kind !== "camera") throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a camera move.`, id);
936
+ if (!(ctx.u >= 0 && ctx.u <= 1)) throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`u must be 0\u20131 through the move, got ${ctx.u}.`, id);
937
+ return cameraViewOf(d, ctx, _chunkJAOSL334cjs.resolveEffectValues.call(void 0, d, values));
1146
938
  };
1147
939
  const provider = {
1148
940
  id: "fake",
1149
941
  name: "Fake effects",
1150
942
  version: "1",
1151
943
  capabilities,
1152
- list: (o) => _chunk2K5TELHVcjs.searchEffectSummaries.call(void 0, summaries, "", o),
1153
- search: (q, o) => _chunk2K5TELHVcjs.searchEffectSummaries.call(void 0, summaries, q, o),
944
+ list: (o) => _chunkJAOSL334cjs.searchEffectSummaries.call(void 0, summaries, "", o),
945
+ search: (q, o) => _chunkJAOSL334cjs.searchEffectSummaries.call(void 0, summaries, q, o),
1154
946
  describe: (id) => structuredClone(get(id)),
1155
947
  createRenderer(id, ro) {
1156
948
  const d = get(id);
1157
- if (d.kind === "camera") throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${id}" is a camera move: it moves a scene's camera and draws no pixels. Use cameraView.`, id);
1158
- if (d.kind !== "shader") throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect; use applyVectorEffect.`, id);
949
+ if (d.kind === "camera") throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${id}" is a camera move: it moves a scene's camera and draws no pixels. Use cameraView.`, id);
950
+ if (d.kind !== "shader") throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect; use applyVectorEffect.`, id);
1159
951
  const { width, height } = ro;
1160
952
  const depth = _nullishCoalesce(ro.depth, () => ( 8));
1161
953
  if (!(width > 0 && height > 0) || width > capabilities.maxSize || height > capabilities.maxSize) {
1162
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`Renderer size ${width}\xD7${height} is outside 1\u2013${capabilities.maxSize}.`, id);
954
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`Renderer size ${width}\xD7${height} is outside 1\u2013${capabilities.maxSize}.`, id);
1163
955
  }
1164
956
  let disposed = false;
1165
957
  return {
@@ -1168,16 +960,16 @@ function createFakeEffectProvider(options = {}) {
1168
960
  height,
1169
961
  depth,
1170
962
  async render(request) {
1171
- if (disposed) throw new (0, _chunk2K5TELHVcjs.EffectDisposedError)(id);
963
+ if (disposed) throw new (0, _chunkJAOSL334cjs.EffectDisposedError)(id);
1172
964
  if (!Number.isFinite(request.time) || request.time < 0) {
1173
- throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`time must be a finite number of ms \u2265 0, got ${request.time}.`, id);
965
+ throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`time must be a finite number of ms \u2265 0, got ${request.time}.`, id);
1174
966
  }
1175
- const values = _chunk2K5TELHVcjs.resolveEffectValues.call(void 0, d, request.values);
1176
- _optionalChain([options, 'access', _44 => _44.onRender, 'optionalCall', _45 => _45(id, request)]);
967
+ const values = _chunkJAOSL334cjs.resolveEffectValues.call(void 0, d, request.values);
968
+ _optionalChain([options, 'access', _41 => _41.onRender, 'optionalCall', _42 => _42(id, request)]);
1177
969
  const out = renderPixels(d, values, request, width, height);
1178
970
  if (request.mask) {
1179
- if (!capabilities.supportsMask) throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)("This provider does not take masks.", id);
1180
- const source = d.uses.includes("filter") ? _optionalChain([request, 'access', _46 => _46.inputs, 'optionalAccess', _47 => _47.source]) : void 0;
971
+ if (!capabilities.supportsMask) throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)("This provider does not take masks.", id);
972
+ const source = d.uses.includes("filter") ? _optionalChain([request, 'access', _43 => _43.inputs, 'optionalAccess', _44 => _44.source]) : void 0;
1181
973
  maskResult(out, request.mask, source, id);
1182
974
  }
1183
975
  return depth > 8 && capabilities.supportsFloat ? toFloat(out) : out;
@@ -1189,8 +981,8 @@ function createFakeEffectProvider(options = {}) {
1189
981
  },
1190
982
  applyVectorEffect(id, target, values) {
1191
983
  const d = get(id);
1192
- if (d.kind !== "motion" && d.kind !== "vector") throw new (0, _chunk2K5TELHVcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a vector one.`, id);
1193
- const v = _chunk2K5TELHVcjs.resolveEffectValues.call(void 0, d, values);
984
+ if (d.kind !== "motion" && d.kind !== "vector") throw new (0, _chunkJAOSL334cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a vector one.`, id);
985
+ const v = _chunkJAOSL334cjs.resolveEffectValues.call(void 0, d, values);
1194
986
  if (d.kind === "vector") {
1195
987
  return { svg: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100"><circle id="badge" cx="50" cy="50" r="40" fill="${v.color}"/></svg>`, animate: [{ id: "badge", ms: v.ms, attrs: { opacity: [0, 1] } }], duration: v.ms, loop: false };
1196
988
  }
@@ -1210,12 +1002,12 @@ function createFakeEffectProvider(options = {}) {
1210
1002
  sampleCameraMove: (id, request) => {
1211
1003
  const d = get(id);
1212
1004
  const { from, to, ms, stage, fps, values } = request;
1213
- return _chunk2K5TELHVcjs.sampleCameraViews.call(void 0, (u) => camera(id, { from, to, u, ms, stage }, values), { ms, fps, cut: _optionalChain([d, 'access', _48 => _48.camera, 'optionalAccess', _49 => _49.cut]) });
1005
+ return _chunkJAOSL334cjs.sampleCameraViews.call(void 0, (u) => camera(id, { from, to, u, ms, stage }, values), { ms, fps, cut: _optionalChain([d, 'access', _45 => _45.camera, 'optionalAccess', _46 => _46.cut]) });
1214
1006
  }
1215
1007
  } : {},
1216
1008
  ...options.templates ? fakeTemplateMethods() : {},
1217
1009
  ...supportsAuthoring ? {
1218
- openAuthoring: (from) => _chunkRG4O6K2Acjs.createEffectAuthoringSession.call(void 0, from, { provider })
1010
+ openAuthoring: (from) => _chunkA7PQNIBXcjs.createEffectAuthoringSession.call(void 0, from, { provider })
1219
1011
  } : {}
1220
1012
  };
1221
1013
  return provider;
@@ -1251,7 +1043,7 @@ function jsonTypeOf(value) {
1251
1043
  function effectControlField(name, schema, fallback, options = {}) {
1252
1044
  const base = { id: name, ...schema.title ? { label: schema.title } : {}, ...schema.description ? { description: schema.description } : {} };
1253
1045
  const def = _nullishCoalesce(schema.default, () => ( fallback));
1254
- const type = _nullishCoalesce(typeOf(schema), () => ( typeOf(_nullishCoalesce(_optionalChain([schema, 'access', _50 => _50.anyOf, 'optionalAccess', _51 => _51.find, 'call', _52 => _52((s) => typeOf(s) === jsonTypeOf(def))]), () => ( {})))));
1046
+ const type = _nullishCoalesce(typeOf(schema), () => ( typeOf(_nullishCoalesce(_optionalChain([schema, 'access', _47 => _47.anyOf, 'optionalAccess', _48 => _48.find, 'call', _49 => _49((s) => typeOf(s) === jsonTypeOf(def))]), () => ( {})))));
1255
1047
  if (Array.isArray(schema.enum) && schema.enum.length) {
1256
1048
  const options2 = schema.enum.filter((v) => typeof v === "string" || typeof v === "number");
1257
1049
  return { ...base, type: "choice", options: options2, default: typeof def === "string" || typeof def === "number" ? def : options2[0], control: options2.length <= 4 ? "segmented" : "select" };
@@ -1265,7 +1057,7 @@ function effectControlField(name, schema, fallback, options = {}) {
1265
1057
  if (isEffectFontControl(schema)) {
1266
1058
  const fonts = _nullishCoalesce(options.fonts, () => ( _chunk4XSBOGMKcjs.SYSTEM_FONT_CATALOG));
1267
1059
  const opts = fonts.map((f) => ({ value: f.family, label: f.family, description: f.category }));
1268
- const current = typeof def === "string" && def ? def : _nullishCoalesce(_optionalChain([opts, 'access', _53 => _53[0], 'optionalAccess', _54 => _54.value]), () => ( "sans-serif"));
1060
+ const current = typeof def === "string" && def ? def : _nullishCoalesce(_optionalChain([opts, 'access', _50 => _50[0], 'optionalAccess', _51 => _51.value]), () => ( "sans-serif"));
1269
1061
  if (!opts.some((o) => o.value.toLowerCase() === current.toLowerCase())) opts.unshift({ value: current, label: current, description: "current" });
1270
1062
  return { ...base, type: "choice", options: opts, default: opts.find((o) => o.value.toLowerCase() === current.toLowerCase()).value, control: "select" };
1271
1063
  }
@@ -1274,7 +1066,7 @@ function effectControlField(name, schema, fallback, options = {}) {
1274
1066
  return { ...base, type: "text", default: typeof def === "string" ? def : "", ...schema.maxLength ? { maxLength: schema.maxLength } : {} };
1275
1067
  }
1276
1068
  if (type === "array" && Array.isArray(def) && def.length >= 2 && def.length <= 4 && def.every((n) => typeof n === "number")) {
1277
- const items = _nullishCoalesce(_nullishCoalesce(schema.items, () => ( _optionalChain([schema, 'access', _55 => _55.anyOf, 'optionalAccess', _56 => _56.find, 'call', _57 => _57((s) => typeOf(s) === "array"), 'optionalAccess', _58 => _58.items]))), () => ( {}));
1069
+ const items = _nullishCoalesce(_nullishCoalesce(schema.items, () => ( _optionalChain([schema, 'access', _52 => _52.anyOf, 'optionalAccess', _53 => _53.find, 'call', _54 => _54((s) => typeOf(s) === "array"), 'optionalAccess', _55 => _55.items]))), () => ( {}));
1278
1070
  return { ...base, type: "vector", size: def.length, default: [...def], ...items.minimum !== void 0 ? { min: items.minimum } : {}, ...items.maximum !== void 0 ? { max: items.maximum } : {} };
1279
1071
  }
1280
1072
  return null;
@@ -1296,7 +1088,7 @@ var effectFieldValue = (field, value) => {
1296
1088
  return value === void 0 || value === null || typeof value === "object" && !Array.isArray(value) ? field.default : value;
1297
1089
  };
1298
1090
  function effectSamplePicture(width, height, variant = 0) {
1299
- const p = _chunk2K5TELHVcjs.createEffectPixels.call(void 0, width, height);
1091
+ const p = _chunkJAOSL334cjs.createEffectPixels.call(void 0, width, height);
1300
1092
  for (let y = 0, i = 0; y < height; y++) {
1301
1093
  for (let x = 0; x < width; x++, i += 4) {
1302
1094
  const u = x / Math.max(1, width - 1);
@@ -1387,11 +1179,11 @@ var EASING_SCHEMA = {
1387
1179
  };
1388
1180
  var NO_SESSION = "No effect authoring session is currently open. Open an effect using EffectProvider.openAuthoring() or in an authoring editor before calling effect authoring tools.";
1389
1181
  function createEffectAuthoringToolProvider(host, options) {
1390
- const id = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _59 => _59.id]), () => ( "effect-authoring"));
1391
- const namespace = _optionalChain([options, 'optionalAccess', _60 => _60.namespace]);
1392
- const title = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _61 => _61.title]), () => ( "Effect authoring"));
1393
- const description = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _62 => _62.description]), () => ( "Author shaders and procedural effects, inspect parameters, adjust values, and manage keyframe animations."));
1394
- const skill = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _63 => _63.skill]), () => ( "pixerate-effect-authoring"));
1182
+ const id = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _56 => _56.id]), () => ( "effect-authoring"));
1183
+ const namespace = _optionalChain([options, 'optionalAccess', _57 => _57.namespace]);
1184
+ const title = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _58 => _58.title]), () => ( "Effect authoring"));
1185
+ const description = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _59 => _59.description]), () => ( "Author shaders and procedural effects, inspect parameters, adjust values, and manage keyframe animations."));
1186
+ const skill = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _60 => _60.skill]), () => ( "pixerate-effect-authoring"));
1395
1187
  const requireSession = () => {
1396
1188
  const s = host.session();
1397
1189
  if (!s) throw new Error(NO_SESSION);
@@ -1412,7 +1204,7 @@ function createEffectAuthoringToolProvider(host, options) {
1412
1204
  sourceLanguage: state.sourceLanguage,
1413
1205
  controls: effectParameterFields(state.description),
1414
1206
  values: state.values,
1415
- presets: _nullishCoalesce(_optionalChain([state, 'access', _64 => _64.description, 'access', _65 => _65.presets, 'optionalAccess', _66 => _66.map, 'call', _67 => _67((p) => p.name)]), () => ( [])),
1207
+ presets: _nullishCoalesce(_optionalChain([state, 'access', _61 => _61.description, 'access', _62 => _62.presets, 'optionalAccess', _63 => _63.map, 'call', _64 => _64((p) => p.name)]), () => ( [])),
1416
1208
  tracks: Object.entries(state.tracks).map(([control, track]) => ({
1417
1209
  control,
1418
1210
  keyframes: track.length
@@ -1719,7 +1511,7 @@ function createEffectAuthoringToolProvider(host, options) {
1719
1511
  const tools = [
1720
1512
  describeTool,
1721
1513
  getSourceTool,
1722
- ..._optionalChain([session, 'optionalAccess', _68 => _68.setSource]) ? [setSourceTool] : [],
1514
+ ..._optionalChain([session, 'optionalAccess', _65 => _65.setSource]) ? [setSourceTool] : [],
1723
1515
  setValuesTool,
1724
1516
  resetValuesTool,
1725
1517
  applyPresetTool,
@@ -1815,4 +1607,4 @@ function createEffectAuthoringToolProvider(host, options) {
1815
1607
 
1816
1608
 
1817
1609
 
1818
- exports.CAMERA_MOVE_MAX_MS = _chunk2K5TELHVcjs.CAMERA_MOVE_MAX_MS; exports.CAMERA_MOVE_ROLES = _chunk2K5TELHVcjs.CAMERA_MOVE_ROLES; exports.EFFECT_ERROR_CODES = _chunk2K5TELHVcjs.EFFECT_ERROR_CODES; exports.EFFECT_KINDS = _chunk2K5TELHVcjs.EFFECT_KINDS; exports.EFFECT_LAYER_ROLES = _chunk2K5TELHVcjs.EFFECT_LAYER_ROLES; exports.EFFECT_LAYER_USES = EFFECT_LAYER_USES; exports.EFFECT_SEQUENCE_NAME = EFFECT_SEQUENCE_NAME; exports.EFFECT_SUBJECT_KINDS = _chunk2K5TELHVcjs.EFFECT_SUBJECT_KINDS; exports.EFFECT_TEMPLATE_SLOT_TYPES = _chunk2K5TELHVcjs.EFFECT_TEMPLATE_SLOT_TYPES; exports.EFFECT_TRANSITION_MS = _chunk2K5TELHVcjs.EFFECT_TRANSITION_MS; exports.EFFECT_USES = _chunk2K5TELHVcjs.EFFECT_USES; exports.EFFECT_USE_LABELS = EFFECT_USE_LABELS; exports.EffectControlError = _chunk2K5TELHVcjs.EffectControlError; exports.EffectDisposedError = _chunk2K5TELHVcjs.EffectDisposedError; exports.EffectError = _chunk2K5TELHVcjs.EffectError; exports.EffectRendererPool = _chunkPY4GWSE2cjs.EffectRendererPool; exports.EffectUnsupportedError = _chunk2K5TELHVcjs.EffectUnsupportedError; exports.EffectsSlot = _chunk2K5TELHVcjs.EffectsSlot; exports.NoEffectsProviderError = _chunk2K5TELHVcjs.NoEffectsProviderError; exports.UnknownEffectError = _chunk2K5TELHVcjs.UnknownEffectError; exports.UnknownTemplateError = _chunk2K5TELHVcjs.UnknownTemplateError; exports.applyEffectMask = _chunk2K5TELHVcjs.applyEffectMask; exports.cameraBoxOfView = _chunk2K5TELHVcjs.cameraBoxOfView; exports.cameraMoveField = _chunk2K5TELHVcjs.cameraMoveField; exports.cameraMoveIdList = _chunk2K5TELHVcjs.cameraMoveIdList; exports.cameraMoveParts = _chunk2K5TELHVcjs.cameraMoveParts; exports.cameraMovesFor = _chunk2K5TELHVcjs.cameraMovesFor; exports.cameraViewOfBox = _chunk2K5TELHVcjs.cameraViewOfBox; exports.checkEffectProvider = checkEffectProvider; exports.checkEffectSequence = checkEffectSequence; exports.checkTemplateValues = checkTemplateValues; exports.countEffectTags = _chunk2K5TELHVcjs.countEffectTags; exports.createEffectAuthoringSession = _chunkRG4O6K2Acjs.createEffectAuthoringSession; exports.createEffectAuthoringToolProvider = createEffectAuthoringToolProvider; exports.createEffectPixels = _chunk2K5TELHVcjs.createEffectPixels; exports.createEffectToolProvider = _chunk2K5TELHVcjs.createEffectToolProvider; exports.createFakeEffectProvider = createFakeEffectProvider; exports.effectControlField = effectControlField; exports.effectFieldValue = effectFieldValue; exports.effectFontFamilies = effectFontFamilies; exports.effectLayerInput = effectLayerInput; exports.effectLayerOffered = effectLayerOffered; exports.effectLayerRole = effectLayerRole; exports.effectOffered = _chunk2K5TELHVcjs.effectOffered; exports.effectParameterFields = effectParameterFields; exports.effectSampleInputs = effectSampleInputs; exports.effectSamplePicture = effectSamplePicture; exports.effectSequenceEffects = effectSequenceEffects; exports.effectSequenceSlots = effectSequenceSlots; exports.effectSubjectKind = effectSubjectKind; exports.effectSubjectProblem = effectSubjectProblem; exports.effectValueErrors = _chunk2K5TELHVcjs.effectValueErrors; exports.encodeEffectFloat = _chunk2K5TELHVcjs.encodeEffectFloat; exports.groupEffectsByCategory = groupEffectsByCategory; exports.hasEffectTags = _chunk2K5TELHVcjs.hasEffectTags; exports.isCameraView = _chunk2K5TELHVcjs.isCameraView; exports.isEffectError = _chunk2K5TELHVcjs.isEffectError; exports.isEffectFontControl = isEffectFontControl; exports.isEffectPixels = _chunk2K5TELHVcjs.isEffectPixels; exports.isSubjectTemplateSlot = isSubjectTemplateSlot; exports.linearToSrgb = _chunk2K5TELHVcjs.linearToSrgb; exports.normaliseEffectTag = _chunk2K5TELHVcjs.normaliseEffectTag; exports.renderEffectThumbnail = renderEffectThumbnail; exports.resolveCameraMoveSpec = _chunk2K5TELHVcjs.resolveCameraMoveSpec; exports.resolveEffectValues = _chunk2K5TELHVcjs.resolveEffectValues; exports.sampleCameraViews = _chunk2K5TELHVcjs.sampleCameraViews; exports.sampleEffectCameraMove = _chunk2K5TELHVcjs.sampleEffectCameraMove; exports.searchEffectSummaries = _chunk2K5TELHVcjs.searchEffectSummaries; exports.searchTemplateSummaries = searchTemplateSummaries; exports.srgbToLinear = _chunk2K5TELHVcjs.srgbToLinear; exports.templateDefaultValues = templateDefaultValues; exports.templateSlotSchema = templateSlotSchema; exports.templateSlotSummary = templateSlotSummary; exports.templateSlotTakes = templateSlotTakes; exports.templateValueProblem = templateValueProblem; exports.templateValuesSchema = templateValuesSchema;
1610
+ exports.CAMERA_MOVE_MAX_MS = _chunkJAOSL334cjs.CAMERA_MOVE_MAX_MS; exports.CAMERA_MOVE_ROLES = _chunkJAOSL334cjs.CAMERA_MOVE_ROLES; exports.EFFECT_ERROR_CODES = _chunkJAOSL334cjs.EFFECT_ERROR_CODES; exports.EFFECT_KINDS = _chunkJAOSL334cjs.EFFECT_KINDS; exports.EFFECT_LAYER_ROLES = _chunkJAOSL334cjs.EFFECT_LAYER_ROLES; exports.EFFECT_LAYER_USES = _chunk6RZVFYGJcjs.EFFECT_LAYER_USES; exports.EFFECT_SEQUENCE_NAME = _chunk6RZVFYGJcjs.EFFECT_SEQUENCE_NAME; exports.EFFECT_SUBJECT_KINDS = _chunkJAOSL334cjs.EFFECT_SUBJECT_KINDS; exports.EFFECT_TEMPLATE_SLOT_TYPES = _chunkJAOSL334cjs.EFFECT_TEMPLATE_SLOT_TYPES; exports.EFFECT_TRANSITION_MS = _chunkJAOSL334cjs.EFFECT_TRANSITION_MS; exports.EFFECT_USES = _chunkJAOSL334cjs.EFFECT_USES; exports.EFFECT_USE_LABELS = EFFECT_USE_LABELS; exports.EffectControlError = _chunkJAOSL334cjs.EffectControlError; exports.EffectDisposedError = _chunkJAOSL334cjs.EffectDisposedError; exports.EffectError = _chunkJAOSL334cjs.EffectError; exports.EffectRendererPool = _chunkPY4GWSE2cjs.EffectRendererPool; exports.EffectUnsupportedError = _chunkJAOSL334cjs.EffectUnsupportedError; exports.EffectsSlot = _chunkJAOSL334cjs.EffectsSlot; exports.NoEffectsProviderError = _chunkJAOSL334cjs.NoEffectsProviderError; exports.UnknownEffectError = _chunkJAOSL334cjs.UnknownEffectError; exports.UnknownTemplateError = _chunkJAOSL334cjs.UnknownTemplateError; exports.applyEffectMask = _chunkJAOSL334cjs.applyEffectMask; exports.cameraBoxOfView = _chunkJAOSL334cjs.cameraBoxOfView; exports.cameraMoveField = _chunkJAOSL334cjs.cameraMoveField; exports.cameraMoveIdList = _chunkJAOSL334cjs.cameraMoveIdList; exports.cameraMoveParts = _chunkJAOSL334cjs.cameraMoveParts; exports.cameraMovesFor = _chunkJAOSL334cjs.cameraMovesFor; exports.cameraViewOfBox = _chunkJAOSL334cjs.cameraViewOfBox; exports.checkEffectProvider = checkEffectProvider; exports.checkEffectSequence = _chunk6RZVFYGJcjs.checkEffectSequence; exports.checkTemplateValues = _chunk6RZVFYGJcjs.checkTemplateValues; exports.countEffectTags = _chunkJAOSL334cjs.countEffectTags; exports.createEffectAuthoringSession = _chunkA7PQNIBXcjs.createEffectAuthoringSession; exports.createEffectAuthoringToolProvider = createEffectAuthoringToolProvider; exports.createEffectPixels = _chunkJAOSL334cjs.createEffectPixels; exports.createEffectToolProvider = _chunkJAOSL334cjs.createEffectToolProvider; exports.createFakeEffectProvider = createFakeEffectProvider; exports.effectControlField = effectControlField; exports.effectFieldValue = effectFieldValue; exports.effectFontFamilies = effectFontFamilies; exports.effectLayerInput = _chunk6RZVFYGJcjs.effectLayerInput; exports.effectLayerOffered = _chunk6RZVFYGJcjs.effectLayerOffered; exports.effectLayerRole = _chunk6RZVFYGJcjs.effectLayerRole; exports.effectOffered = _chunkJAOSL334cjs.effectOffered; exports.effectParameterFields = effectParameterFields; exports.effectSampleInputs = effectSampleInputs; exports.effectSamplePicture = effectSamplePicture; exports.effectSequenceEffects = _chunk6RZVFYGJcjs.effectSequenceEffects; exports.effectSequenceSlots = _chunk6RZVFYGJcjs.effectSequenceSlots; exports.effectSubjectKind = _chunk6RZVFYGJcjs.effectSubjectKind; exports.effectSubjectProblem = _chunk6RZVFYGJcjs.effectSubjectProblem; exports.effectValueErrors = _chunkJAOSL334cjs.effectValueErrors; exports.encodeEffectFloat = _chunkJAOSL334cjs.encodeEffectFloat; exports.groupEffectsByCategory = groupEffectsByCategory; exports.hasEffectTags = _chunkJAOSL334cjs.hasEffectTags; exports.isCameraView = _chunkJAOSL334cjs.isCameraView; exports.isEffectError = _chunkJAOSL334cjs.isEffectError; exports.isEffectFontControl = isEffectFontControl; exports.isEffectPixels = _chunkJAOSL334cjs.isEffectPixels; exports.isSubjectTemplateSlot = _chunk6RZVFYGJcjs.isSubjectTemplateSlot; exports.linearToSrgb = _chunkJAOSL334cjs.linearToSrgb; exports.normaliseEffectTag = _chunkJAOSL334cjs.normaliseEffectTag; exports.renderEffectThumbnail = renderEffectThumbnail; exports.resolveCameraMoveSpec = _chunkJAOSL334cjs.resolveCameraMoveSpec; exports.resolveEffectValues = _chunkJAOSL334cjs.resolveEffectValues; exports.sampleCameraViews = _chunkJAOSL334cjs.sampleCameraViews; exports.sampleEffectCameraMove = _chunkJAOSL334cjs.sampleEffectCameraMove; exports.searchEffectSummaries = _chunkJAOSL334cjs.searchEffectSummaries; exports.searchTemplateSummaries = _chunk6RZVFYGJcjs.searchTemplateSummaries; exports.srgbToLinear = _chunkJAOSL334cjs.srgbToLinear; exports.templateDefaultValues = _chunk6RZVFYGJcjs.templateDefaultValues; exports.templateSlotSchema = _chunk6RZVFYGJcjs.templateSlotSchema; exports.templateSlotSummary = _chunk6RZVFYGJcjs.templateSlotSummary; exports.templateSlotTakes = _chunk6RZVFYGJcjs.templateSlotTakes; exports.templateValueProblem = _chunk6RZVFYGJcjs.templateValueProblem; exports.templateValuesSchema = _chunk6RZVFYGJcjs.templateValuesSchema;