@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.
- package/dist/animation-editor/compile.d.cts +3 -0
- package/dist/animation-editor/compile.d.ts +3 -0
- package/dist/animation-editor/controller.d.cts +67 -2
- package/dist/animation-editor/controller.d.ts +67 -2
- package/dist/animation-editor/edit.d.cts +1 -1
- package/dist/animation-editor/edit.d.ts +1 -1
- package/dist/animation-editor/evaluate.d.cts +8 -1
- package/dist/animation-editor/evaluate.d.ts +8 -1
- package/dist/animation-editor/index.cjs +1202 -371
- package/dist/animation-editor/index.d.cts +3 -0
- package/dist/animation-editor/index.d.ts +3 -0
- package/dist/animation-editor/index.js +1032 -201
- package/dist/animation-editor/issues.d.cts +28 -0
- package/dist/animation-editor/issues.d.ts +28 -0
- package/dist/animation-editor/layer-edit.d.cts +55 -0
- package/dist/animation-editor/layer-edit.d.ts +55 -0
- package/dist/animation-editor/layer-tools.d.cts +11 -0
- package/dist/animation-editor/layer-tools.d.ts +11 -0
- package/dist/animation-editor/layers.d.cts +166 -0
- package/dist/animation-editor/layers.d.ts +166 -0
- package/dist/animation-editor/parse.d.cts +2 -0
- package/dist/animation-editor/parse.d.ts +2 -0
- package/dist/animation-editor/types.d.cts +44 -1
- package/dist/animation-editor/types.d.ts +44 -1
- package/dist/canvas/editorDocument.d.cts +49 -4
- package/dist/canvas/editorDocument.d.ts +49 -4
- package/dist/canvas/index.cjs +57 -30
- package/dist/canvas/index.js +44 -17
- package/dist/chunk-6RZVFYGJ.cjs +255 -0
- package/dist/{chunk-RG4O6K2A.cjs → chunk-A7PQNIBX.cjs} +14 -14
- package/dist/{chunk-ERJA5CGT.cjs → chunk-DGWOGQJ5.cjs} +8 -1
- package/dist/{chunk-TYCJGFCF.js → chunk-EUKY4KFX.js} +8 -1
- package/dist/chunk-I277KJLQ.js +255 -0
- package/dist/{chunk-2K5TELHV.cjs → chunk-JAOSL334.cjs} +10 -10
- package/dist/{chunk-MUSZYMBX.js → chunk-TEFQISBY.js} +1 -1
- package/dist/{chunk-6QLTUGMO.js → chunk-WDDUPWVG.js} +1 -1
- package/dist/{chunk-A653N65Q.cjs → chunk-ZQIWBJGH.cjs} +7 -7
- package/dist/effects/index.cjs +114 -322
- package/dist/effects/index.js +23 -231
- package/dist/image-editor/index.cjs +16 -16
- package/dist/image-editor/index.js +4 -4
- package/dist/paint-editor/index.cjs +10 -10
- package/dist/paint-editor/index.js +5 -5
- package/dist/vector/index.cjs +6 -6
- package/dist/vector/index.js +1 -1
- package/dist/video-editor/index.cjs +339 -339
- package/dist/video-editor/index.js +5 -5
- package/package.json +1 -1
- package/skills/pixerate-animation-editor/SKILL.md +10 -0
- package/skills/pixerate-animation-motion-graphics/SKILL.md +4 -0
- package/skills/pixerate-canvas/SKILL.md +2 -2
- package/skills/pixerate-video-editor/SKILL.md +11 -0
- package/skills/pixerate-video-montage/SKILL.md +2 -0
- package/dist/{chunk-PQYDJ2AV.js → chunk-SIK3LT6M.js} +16 -16
package/dist/effects/index.cjs
CHANGED
|
@@ -3,7 +3,28 @@
|
|
|
3
3
|
var _chunk4XSBOGMKcjs = require('../chunk-4XSBOGMK.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
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
|
|
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) =>
|
|
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 (!
|
|
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 (!
|
|
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',
|
|
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 (!
|
|
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',
|
|
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',
|
|
333
|
-
for (const [name, schema] of Object.entries(_nullishCoalesce(_optionalChain([c, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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
|
|
344
|
-
for (const p of _nullishCoalesce(d.presets, () => ( []))) for (const e of
|
|
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 =
|
|
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 (!
|
|
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 (!
|
|
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 (
|
|
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',
|
|
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) => !
|
|
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',
|
|
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 (!
|
|
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',
|
|
476
|
-
names.add(_optionalChain([slot, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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',
|
|
307
|
+
if (typeof _optionalChain([caps, 'optionalAccess', _23 => _23[k]]) !== "boolean") top(`capabilities.${k} is not a boolean`);
|
|
516
308
|
}
|
|
517
|
-
if (_optionalChain([caps, 'optionalAccess',
|
|
518
|
-
if (_optionalChain([caps, 'optionalAccess',
|
|
519
|
-
if (_optionalChain([caps, 'optionalAccess',
|
|
520
|
-
if (_optionalChain([caps, 'optionalAccess',
|
|
521
|
-
if (_optionalChain([caps, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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',
|
|
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',
|
|
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',
|
|
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',
|
|
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',
|
|
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',
|
|
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,
|
|
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',
|
|
991
|
-
if (!src) throw new (0,
|
|
992
|
-
if (!
|
|
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,
|
|
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 =
|
|
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,
|
|
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,
|
|
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] =
|
|
1102
|
-
f[i + 1] =
|
|
1103
|
-
f[i + 2] =
|
|
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
|
|
898
|
+
return _chunkJAOSL334cjs.encodeEffectFloat.call(void 0, { ...p, float: f });
|
|
1107
899
|
}
|
|
1108
900
|
function maskResult(out, mask, source, id) {
|
|
1109
|
-
if (!
|
|
1110
|
-
throw new (0,
|
|
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,
|
|
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,
|
|
1144
|
-
if (!(ctx.u >= 0 && ctx.u <= 1)) throw new (0,
|
|
1145
|
-
return cameraViewOf(d, ctx,
|
|
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) =>
|
|
1153
|
-
search: (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,
|
|
1158
|
-
if (d.kind !== "shader") throw new (0,
|
|
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,
|
|
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,
|
|
963
|
+
if (disposed) throw new (0, _chunkJAOSL334cjs.EffectDisposedError)(id);
|
|
1172
964
|
if (!Number.isFinite(request.time) || request.time < 0) {
|
|
1173
|
-
throw new (0,
|
|
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 =
|
|
1176
|
-
_optionalChain([options, 'access',
|
|
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,
|
|
1180
|
-
const source = d.uses.includes("filter") ? _optionalChain([request, 'access',
|
|
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,
|
|
1193
|
-
const v =
|
|
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
|
|
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) =>
|
|
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',
|
|
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',
|
|
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',
|
|
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 =
|
|
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',
|
|
1391
|
-
const namespace = _optionalChain([options, 'optionalAccess',
|
|
1392
|
-
const title = _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
1393
|
-
const description = _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
1394
|
-
const skill = _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
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',
|
|
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',
|
|
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 =
|
|
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;
|