@pixerate/editor 0.248.0 → 0.250.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 (122) hide show
  1. package/README.md +1 -0
  2. package/dist/animation-editor/index.cjs +118 -114
  3. package/dist/animation-editor/index.js +11 -7
  4. package/dist/{brushstrokeRender-QLCXROJK.js → brushstrokeRender-2FHFLSEG.js} +8 -4
  5. package/dist/{brushstrokeRender-DTDPFBLC.cjs → brushstrokeRender-QGRXOKDA.cjs} +15 -11
  6. package/dist/canvas/index.cjs +71 -15
  7. package/dist/canvas/index.d.cts +1 -0
  8. package/dist/canvas/index.d.ts +1 -0
  9. package/dist/canvas/index.js +58 -2
  10. package/dist/canvas/stickers.d.cts +35 -0
  11. package/dist/canvas/stickers.d.ts +35 -0
  12. package/dist/{chunk-RXZL4NG5.js → chunk-226QDRO3.js} +1 -1
  13. package/dist/{chunk-SC2RZ5EF.js → chunk-2VJAVXLI.js} +2 -2
  14. package/dist/{chunk-OLNIPTB3.cjs → chunk-2VX55NFM.cjs} +1 -320
  15. package/dist/chunk-3K6HWEXZ.cjs +92 -0
  16. package/dist/{chunk-UOOK7HTX.js → chunk-3PPJRMIG.js} +1 -1
  17. package/dist/{chunk-ZFSLEOSQ.js → chunk-3TWOCSCY.js} +11 -9
  18. package/dist/chunk-4D6KP5BV.js +92 -0
  19. package/dist/chunk-4JNWA3VT.cjs +302 -0
  20. package/dist/{chunk-L3JFOTBQ.js → chunk-5E2Q7ZHI.js} +1 -1
  21. package/dist/{chunk-2ONK3ERD.cjs → chunk-75K3W4D6.cjs} +20 -20
  22. package/dist/{chunk-AU6MWQKZ.js → chunk-ABL7IWFZ.js} +1 -1
  23. package/dist/chunk-ATK6ABN3.cjs +303 -0
  24. package/dist/{chunk-7T7JWTVE.cjs → chunk-BOHDJJ2O.cjs} +8 -8
  25. package/dist/{chunk-2PBZBRP5.js → chunk-D5KGAO4Z.js} +10 -92
  26. package/dist/{chunk-HB4ICNNA.cjs → chunk-DPYAO5U6.cjs} +42 -42
  27. package/dist/{chunk-6G6ZDDDB.cjs → chunk-GT77U7QG.cjs} +303 -149
  28. package/dist/{chunk-PQ3H2AAN.cjs → chunk-I7NJPHWV.cjs} +122 -204
  29. package/dist/{chunk-42TWUPNJ.js → chunk-IRSTHLQQ.js} +1 -320
  30. package/dist/{chunk-GHCSC2WP.cjs → chunk-ISIO63Q5.cjs} +21 -15
  31. package/dist/{chunk-OFH6Q67U.js → chunk-JA57JIT5.js} +9 -3
  32. package/dist/{chunk-VMROIWLL.cjs → chunk-KBYB7OWB.cjs} +3 -3
  33. package/dist/{chunk-Q2HA52V4.js → chunk-KDLBJ6QR.js} +2 -2
  34. package/dist/{chunk-WVS5KQDH.cjs → chunk-M2VKFE5L.cjs} +246 -244
  35. package/dist/{chunk-5GLYUSNT.js → chunk-NOHJP5TK.js} +1 -1
  36. package/dist/{chunk-XNRBMYNB.js → chunk-NTRAVM2I.js} +1 -1
  37. package/dist/{chunk-VNBUDVD4.js → chunk-OTEPAQJX.js} +228 -74
  38. package/dist/chunk-OTTT5N3K.js +322 -0
  39. package/dist/{chunk-QOBCBGGI.cjs → chunk-QKXO6JPP.cjs} +14 -14
  40. package/dist/{chunk-NZ3O3A5C.js → chunk-SMSGP2HQ.js} +1 -1
  41. package/dist/chunk-SZTI6EER.js +13 -0
  42. package/dist/chunk-U4NUOKBT.js +303 -0
  43. package/dist/chunk-U67EN7GG.cjs +13 -0
  44. package/dist/chunk-W5M3J7PV.cjs +322 -0
  45. package/dist/{chunk-4P6H35HU.js → chunk-WA44NKPF.js} +2 -2
  46. package/dist/chunk-WKH5ZAUA.js +302 -0
  47. package/dist/{chunk-L6REDLNB.cjs → chunk-WPUXGDH4.cjs} +7 -7
  48. package/dist/{chunk-P3NIPIKS.js → chunk-WQCNC4DK.js} +1 -1
  49. package/dist/{chunk-IBDU6EGZ.cjs → chunk-X7WRL5ZZ.cjs} +35 -35
  50. package/dist/{chunk-XWTRATIM.cjs → chunk-YM6ZBTXG.cjs} +23 -23
  51. package/dist/{chunk-TPWB4Y6L.cjs → chunk-YW43M56C.cjs} +1 -1
  52. package/dist/{chunk-K5DS2JTA.cjs → chunk-Z3BRH4JK.cjs} +6 -6
  53. package/dist/{chunk-XNZFVYC2.cjs → chunk-ZBCT5MEA.cjs} +7 -7
  54. package/dist/effects/helpers.d.cts +6 -0
  55. package/dist/effects/helpers.d.ts +6 -0
  56. package/dist/effects/index.cjs +62 -60
  57. package/dist/effects/index.js +5 -3
  58. package/dist/effects/tools.d.cts +6 -0
  59. package/dist/effects/tools.d.ts +6 -0
  60. package/dist/image-editor/effects.d.cts +1 -1
  61. package/dist/image-editor/effects.d.ts +1 -1
  62. package/dist/image-editor/index.cjs +1097 -1069
  63. package/dist/image-editor/index.d.cts +1 -0
  64. package/dist/image-editor/index.d.ts +1 -0
  65. package/dist/image-editor/index.js +58 -30
  66. package/dist/image-editor/stickers.d.cts +9 -0
  67. package/dist/image-editor/stickers.d.ts +9 -0
  68. package/dist/paint/index.cjs +8 -5
  69. package/dist/paint/index.js +13 -10
  70. package/dist/paint-editor/controller.d.cts +37 -1
  71. package/dist/paint-editor/controller.d.ts +37 -1
  72. package/dist/paint-editor/index.cjs +753 -609
  73. package/dist/paint-editor/index.d.cts +3 -0
  74. package/dist/paint-editor/index.d.ts +3 -0
  75. package/dist/paint-editor/index.js +187 -43
  76. package/dist/paint-editor/sticker-art.d.cts +55 -0
  77. package/dist/paint-editor/sticker-art.d.ts +55 -0
  78. package/dist/paint-editor/stickers.d.cts +30 -17
  79. package/dist/paint-editor/stickers.d.ts +30 -17
  80. package/dist/paint-editor/stroke.d.cts +4 -0
  81. package/dist/paint-editor/stroke.d.ts +4 -0
  82. package/dist/paint-editor/ui.d.cts +10 -2
  83. package/dist/paint-editor/ui.d.ts +10 -2
  84. package/dist/raster/index.cjs +6 -4
  85. package/dist/raster/index.js +12 -10
  86. package/dist/stickers/browser.d.cts +48 -0
  87. package/dist/stickers/browser.d.ts +48 -0
  88. package/dist/stickers/combine.d.cts +10 -0
  89. package/dist/stickers/combine.d.ts +10 -0
  90. package/dist/stickers/conformance.d.cts +18 -0
  91. package/dist/stickers/conformance.d.ts +18 -0
  92. package/dist/stickers/editor.d.cts +14 -0
  93. package/dist/stickers/editor.d.ts +14 -0
  94. package/dist/stickers/errors.d.cts +6 -0
  95. package/dist/stickers/errors.d.ts +6 -0
  96. package/dist/stickers/fake.d.cts +16 -0
  97. package/dist/stickers/fake.d.ts +16 -0
  98. package/dist/stickers/helpers.d.cts +51 -0
  99. package/dist/stickers/helpers.d.ts +51 -0
  100. package/dist/stickers/index.cjs +337 -0
  101. package/dist/stickers/index.d.cts +16 -0
  102. package/dist/stickers/index.d.ts +16 -0
  103. package/dist/stickers/index.js +337 -0
  104. package/dist/stickers/stamps.d.cts +13 -0
  105. package/dist/stickers/stamps.d.ts +13 -0
  106. package/dist/stickers/tools.d.cts +81 -0
  107. package/dist/stickers/tools.d.ts +81 -0
  108. package/dist/stickers/types.d.cts +123 -0
  109. package/dist/stickers/types.d.ts +123 -0
  110. package/dist/vector/index.cjs +1018 -981
  111. package/dist/vector/index.d.cts +1 -0
  112. package/dist/vector/index.d.ts +1 -0
  113. package/dist/vector/index.js +44 -7
  114. package/dist/vector/stickers.d.cts +11 -0
  115. package/dist/vector/stickers.d.ts +11 -0
  116. package/dist/video-editor/index.cjs +344 -344
  117. package/dist/video-editor/index.js +4 -4
  118. package/package.json +11 -1
  119. package/skills/README.md +1 -0
  120. package/skills/pixerate-image-editor/SKILL.md +1 -1
  121. package/skills/pixerate-paint-editor/SKILL.md +8 -5
  122. package/skills/pixerate-stickers/SKILL.md +57 -0
@@ -3,7 +3,7 @@
3
3
  var _chunk4XSBOGMKcjs = require('../chunk-4XSBOGMK.cjs');
4
4
 
5
5
 
6
- var _chunkQOBCBGGIcjs = require('../chunk-QOBCBGGI.cjs');
6
+ var _chunkQKXO6JPPcjs = require('../chunk-QKXO6JPP.cjs');
7
7
 
8
8
 
9
9
 
@@ -28,7 +28,7 @@ var _chunkQOBCBGGIcjs = require('../chunk-QOBCBGGI.cjs');
28
28
 
29
29
 
30
30
 
31
- var _chunkK5DS2JTAcjs = require('../chunk-K5DS2JTA.cjs');
31
+ var _chunkZ3BRH4JKcjs = require('../chunk-Z3BRH4JK.cjs');
32
32
 
33
33
 
34
34
  var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
@@ -78,7 +78,8 @@ var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
78
78
 
79
79
 
80
80
 
81
- var _chunkGHCSC2WPcjs = require('../chunk-GHCSC2WP.cjs');
81
+
82
+ var _chunkISIO63Q5cjs = require('../chunk-ISIO63Q5.cjs');
82
83
  require('../chunk-WOFXZ3XU.cjs');
83
84
  require('../chunk-WKPXOGZZ.cjs');
84
85
 
@@ -86,7 +87,7 @@ require('../chunk-WKPXOGZZ.cjs');
86
87
  var _chunkDWJJI6RTcjs = require('../chunk-DWJJI6RT.cjs');
87
88
 
88
89
  // src/effects/conformance.ts
89
- var codeOf = (e) => _chunkGHCSC2WPcjs.isEffectError.call(void 0, e) ? e.code : e instanceof Error ? `untyped ${e.name}: ${e.message}` : String(e);
90
+ var codeOf = (e) => _chunkISIO63Q5cjs.isEffectError.call(void 0, e) ? e.code : e instanceof Error ? `untyped ${e.name}: ${e.message}` : String(e);
90
91
  async function rejectsWith(code, run) {
91
92
  try {
92
93
  await run();
@@ -100,21 +101,21 @@ function checkSummary(e, issues) {
100
101
  const at = (message) => issues.push({ effectId: e.id, message });
101
102
  if (!e.id || typeof e.id !== "string") at("summary has no id");
102
103
  if (!e.name) at("summary has no name");
103
- if (!_chunkGHCSC2WPcjs.EFFECT_KINDS.includes(e.kind)) at(`kind "${e.kind}" is not one of ${_chunkGHCSC2WPcjs.EFFECT_KINDS.join(", ")}`);
104
+ if (!_chunkISIO63Q5cjs.EFFECT_KINDS.includes(e.kind)) at(`kind "${e.kind}" is not one of ${_chunkISIO63Q5cjs.EFFECT_KINDS.join(", ")}`);
104
105
  if (!e.category) at("summary has no category");
105
106
  if (!Array.isArray(e.uses) || !e.uses.length) at("summary has no uses");
106
- for (const u of _nullishCoalesce(e.uses, () => ( []))) if (!_chunkGHCSC2WPcjs.EFFECT_USES.includes(u)) at(`use "${u}" is not one of ${_chunkGHCSC2WPcjs.EFFECT_USES.join(", ")}`);
107
+ for (const u of _nullishCoalesce(e.uses, () => ( []))) if (!_chunkISIO63Q5cjs.EFFECT_USES.includes(u)) at(`use "${u}" is not one of ${_chunkISIO63Q5cjs.EFFECT_USES.join(", ")}`);
107
108
  if (typeof e.transparent !== "boolean") at("transparent is not a boolean");
108
109
  if (typeof e.loop !== "boolean") at("loop is not a boolean");
109
110
  if (e.duration !== void 0 && !(e.duration > 0)) at("duration must be a positive number of ms when present");
110
111
  if (e.backgroundOpacity !== void 0 && (typeof e.backgroundOpacity !== "string" || !e.backgroundOpacity)) at("backgroundOpacity must name a control when present");
111
- for (const a of _nullishCoalesce(e.accepts, () => ( []))) if (!_chunkGHCSC2WPcjs.EFFECT_ACCEPTS.includes(a)) at(`accepts "${a}" is not one of ${_chunkGHCSC2WPcjs.EFFECT_ACCEPTS.join(", ")}`);
112
+ for (const a of _nullishCoalesce(e.accepts, () => ( []))) if (!_chunkISIO63Q5cjs.EFFECT_ACCEPTS.includes(a)) at(`accepts "${a}" is not one of ${_chunkISIO63Q5cjs.EFFECT_ACCEPTS.join(", ")}`);
112
113
  if (e.kind === "camera") {
113
114
  if (_optionalChain([e, 'access', _2 => _2.uses, 'optionalAccess', _3 => _3.length]) !== 1 || e.uses[0] !== "camera") at('a camera effect must have exactly the use "camera"');
114
115
  const m = e.camera;
115
116
  if (!m) at("a camera effect needs camera: { role, durationMs }");
116
117
  else {
117
- if (!_chunkGHCSC2WPcjs.CAMERA_MOVE_ROLES.includes(m.role)) at(`camera.role "${m.role}" is not one of ${_chunkGHCSC2WPcjs.CAMERA_MOVE_ROLES.join(", ")}`);
118
+ if (!_chunkISIO63Q5cjs.CAMERA_MOVE_ROLES.includes(m.role)) at(`camera.role "${m.role}" is not one of ${_chunkISIO63Q5cjs.CAMERA_MOVE_ROLES.join(", ")}`);
118
119
  if (!(Number.isFinite(m.durationMs) && m.durationMs >= 0)) at("camera.durationMs must be a number of ms \u2265 0");
119
120
  if (m.cut !== void 0 && !(m.cut >= 0 && m.cut <= 1)) at("camera.cut must be 0\u20131 when present");
120
121
  if (e.duration !== void 0 && e.duration !== m.durationMs) at(`duration ${e.duration} differs from camera.durationMs ${m.durationMs}`);
@@ -140,11 +141,11 @@ function checkDescription(id, d, issues) {
140
141
  if (!control) at(`backgroundOpacity "${d.backgroundOpacity}" is not a control`);
141
142
  else if (control.type !== "number" || control.minimum !== 0 || control.maximum !== 1) at(`backgroundOpacity "${d.backgroundOpacity}" must be a number control from 0 to 1`);
142
143
  }
143
- const paths = _chunkGHCSC2WPcjs.pathControlsOf.call(void 0, d);
144
+ const paths = _chunkISIO63Q5cjs.pathControlsOf.call(void 0, d);
144
145
  if (paths.length && !_optionalChain([d, 'access', _12 => _12.accepts, 'optionalAccess', _13 => _13.includes, 'call', _14 => _14("path")])) at(`controls ${paths.map((p) => `"${p}"`).join(", ")} take a path, but accepts does not list "path"`);
145
146
  if (!paths.length && _optionalChain([d, 'access', _15 => _15.accepts, 'optionalAccess', _16 => _16.includes, 'call', _17 => _17("path")])) at('accepts lists "path", but no control has format "svg-path"');
146
- for (const e of _chunkGHCSC2WPcjs.effectValueErrors.call(void 0, d, d.defaults)) at(`default ${e.path}: ${e.message}`);
147
- for (const p of _nullishCoalesce(d.presets, () => ( []))) for (const e of _chunkGHCSC2WPcjs.effectValueErrors.call(void 0, d, p.values)) at(`preset "${p.name}" ${e.path}: ${e.message}`);
147
+ for (const e of _chunkISIO63Q5cjs.effectValueErrors.call(void 0, d, d.defaults)) at(`default ${e.path}: ${e.message}`);
148
+ for (const p of _nullishCoalesce(d.presets, () => ( []))) for (const e of _chunkISIO63Q5cjs.effectValueErrors.call(void 0, d, p.values)) at(`preset "${p.name}" ${e.path}: ${e.message}`);
148
149
  for (const input2 of _nullishCoalesce(d.inputs, () => ( []))) {
149
150
  if (!input2.name || !input2.description) at("every input needs a name and a description");
150
151
  if (input2.kind !== "image" && input2.kind !== "audio") at(`input "${input2.name}" has kind "${input2.kind}"`);
@@ -155,7 +156,7 @@ function checkDescription(id, d, issues) {
155
156
  }
156
157
  }
157
158
  function grey(size) {
158
- const p = _chunkGHCSC2WPcjs.createEffectPixels.call(void 0, size, size);
159
+ const p = _chunkISIO63Q5cjs.createEffectPixels.call(void 0, size, size);
159
160
  p.data.fill(128);
160
161
  return p;
161
162
  }
@@ -172,7 +173,7 @@ async function checkRender(provider, d, size, issues) {
172
173
  }
173
174
  try {
174
175
  const out = await renderer.render({ time: 0, inputs });
175
- if (!_chunkGHCSC2WPcjs.isEffectPixels.call(void 0, out)) at("render did not return EffectPixels");
176
+ if (!_chunkISIO63Q5cjs.isEffectPixels.call(void 0, out)) at("render did not return EffectPixels");
176
177
  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}`);
177
178
  } catch (e) {
178
179
  at(`render failed: ${codeOf(e)}`);
@@ -202,10 +203,10 @@ async function checkCamera(provider, d, issues) {
202
203
  at("cameraView must be synchronous; it returned a Promise");
203
204
  return;
204
205
  }
205
- if (!_chunkGHCSC2WPcjs.isCameraView.call(void 0, view)) at(`cameraView at u ${u} is not a CameraView (zoom > 0, finite scrollX and scrollY): ${JSON.stringify(view)}`);
206
+ if (!_chunkISIO63Q5cjs.isCameraView.call(void 0, view)) at(`cameraView at u ${u} is not a CameraView (zoom > 0, finite scrollX and scrollY): ${JSON.stringify(view)}`);
206
207
  else views.push(view);
207
208
  const again = provider.cameraView(d.id, ctx(u));
208
- if (_chunkGHCSC2WPcjs.isCameraView.call(void 0, view) && !sameView(view, again)) at(`cameraView is not pure: two calls at u ${u} gave different views`);
209
+ if (_chunkISIO63Q5cjs.isCameraView.call(void 0, view) && !sameView(view, again)) at(`cameraView is not pure: two calls at u ${u} gave different views`);
209
210
  } catch (e) {
210
211
  at(`cameraView at u ${u} failed: ${codeOf(e)}`);
211
212
  }
@@ -218,7 +219,7 @@ async function checkCamera(provider, d, issues) {
218
219
  const keys = _optionalChain([sample, 'optionalAccess', _18 => _18.keys]);
219
220
  if (!Array.isArray(keys) || keys.length < 2) at("sampleCameraMove returned fewer than two keys");
220
221
  else {
221
- if (keys.some((k, i) => !_chunkGHCSC2WPcjs.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");
222
+ if (keys.some((k, i) => !_chunkISIO63Q5cjs.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");
222
223
  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}`);
223
224
  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");
224
225
  if (camera.cut !== void 0 && sample.cut === void 0) at("sampleCameraMove gave no cut for a move that cuts");
@@ -232,16 +233,16 @@ var wrongValue = (slot) => slot.type === "number" ? "not a number" : slot.type =
232
233
  function checkSlot(templateId, slot, issues) {
233
234
  const at = (message) => issues.push({ templateId, message: `slot ${JSON.stringify(_optionalChain([slot, 'optionalAccess', _19 => _19.name]))}: ${message}` });
234
235
  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');
235
- if (!_chunkGHCSC2WPcjs.EFFECT_TEMPLATE_SLOT_TYPES.includes(slot.type)) return at(`type "${slot.type}" is not one of ${_chunkGHCSC2WPcjs.EFFECT_TEMPLATE_SLOT_TYPES.join(", ")}`);
236
+ if (!_chunkISIO63Q5cjs.EFFECT_TEMPLATE_SLOT_TYPES.includes(slot.type)) return at(`type "${slot.type}" is not one of ${_chunkISIO63Q5cjs.EFFECT_TEMPLATE_SLOT_TYPES.join(", ")}`);
236
237
  if (typeof slot.label !== "string" || !slot.label) at("needs a label");
237
- if (_chunkK5DS2JTAcjs.isSubjectTemplateSlot.call(void 0, slot)) {
238
+ if (_chunkZ3BRH4JKcjs.isSubjectTemplateSlot.call(void 0, slot)) {
238
239
  if (typeof slot.hasDefault !== "boolean") at("a subject slot needs hasDefault (a boolean)");
239
240
  if ("default" in slot) at("a subject slot describes hasDefault, not its default");
240
241
  return;
241
242
  }
242
243
  const fallback = slot.default;
243
244
  if (fallback === void 0) return at("needs a default");
244
- const problem = _chunkK5DS2JTAcjs.templateValueProblem.call(void 0, slot, fallback);
245
+ const problem = _chunkZ3BRH4JKcjs.templateValueProblem.call(void 0, slot, fallback);
245
246
  if (problem) at(`its default does not fit: ${problem}`);
246
247
  if (slot.type === "number" && slot.min !== void 0 && slot.max !== void 0 && slot.min > slot.max) at("min is above max");
247
248
  }
@@ -287,11 +288,11 @@ async function checkTemplates(provider, list, issues) {
287
288
  const result = await provider.instantiateTemplate(id);
288
289
  if (!result.ok) at(`instantiateTemplate with the defaults failed: ${result.errors.join(" ")}`);
289
290
  else {
290
- for (const p of _chunkK5DS2JTAcjs.checkEffectSequence.call(void 0, result.sequence, list)) at(`with the defaults, ${p}`);
291
+ for (const p of _chunkZ3BRH4JKcjs.checkEffectSequence.call(void 0, result.sequence, list)) at(`with the defaults, ${p}`);
291
292
  if (_optionalChain([result, 'access', _22 => _22.sequence, 'optionalAccess', _23 => _23.shots, 'optionalAccess', _24 => _24.length]) !== summary.shots) at(`listTemplates says ${summary.shots} shots; the sequence has ${_optionalChain([result, 'access', _25 => _25.sequence, 'optionalAccess', _26 => _26.shots, 'optionalAccess', _27 => _27.length])}`);
292
293
  if (!Array.isArray(result.openSlots) || !Array.isArray(result.notes)) at("instantiateTemplate needs openSlots and notes lists");
293
294
  else {
294
- const open = Array.isArray(_optionalChain([result, 'access', _28 => _28.sequence, 'optionalAccess', _29 => _29.shots])) ? _chunkK5DS2JTAcjs.effectSequenceSlots.call(void 0, result.sequence) : [];
295
+ const open = Array.isArray(_optionalChain([result, 'access', _28 => _28.sequence, 'optionalAccess', _29 => _29.shots])) ? _chunkZ3BRH4JKcjs.effectSequenceSlots.call(void 0, result.sequence) : [];
295
296
  if (open.some((s) => !result.openSlots.includes(s))) at(`openSlots ${JSON.stringify(result.openSlots)} misses slots the sequence leaves open (${open.join(", ")})`);
296
297
  }
297
298
  }
@@ -509,7 +510,7 @@ function fill(t, values) {
509
510
  const slots = new Map(t.slots.map((s) => [s.name, s]));
510
511
  const valueOf = (name) => {
511
512
  const s = slots.get(name);
512
- return _nullishCoalesce(values[name], () => ( (_chunkK5DS2JTAcjs.isSubjectTemplateSlot.call(void 0, s) ? s.subjectDefault : s.default)));
513
+ return _nullishCoalesce(values[name], () => ( (_chunkZ3BRH4JKcjs.isSubjectTemplateSlot.call(void 0, s) ? s.subjectDefault : s.default)));
513
514
  };
514
515
  const walk = (v, key) => {
515
516
  if (typeof v === "string") {
@@ -532,20 +533,20 @@ function fakeTemplateMethods() {
532
533
  const byId = new Map(TEMPLATES.map((t) => [t.summary.id, t]));
533
534
  const get = (id) => {
534
535
  const t = byId.get(id);
535
- if (!t) throw new (0, _chunkGHCSC2WPcjs.UnknownTemplateError)(id, "the fake provider");
536
+ if (!t) throw new (0, _chunkISIO63Q5cjs.UnknownTemplateError)(id, "the fake provider");
536
537
  return t;
537
538
  };
538
539
  return {
539
- listTemplates: (options) => _chunkK5DS2JTAcjs.searchTemplateSummaries.call(void 0, TEMPLATES.map((t) => t.summary), options).map((s) => structuredClone(s)),
540
+ listTemplates: (options) => _chunkZ3BRH4JKcjs.searchTemplateSummaries.call(void 0, TEMPLATES.map((t) => t.summary), options).map((s) => structuredClone(s)),
540
541
  describeTemplate: (id) => structuredClone(describeOf(get(id))),
541
542
  instantiateTemplate(id, values = {}, options = {}) {
542
543
  const t = get(id);
543
- const errors = _chunkK5DS2JTAcjs.checkTemplateValues.call(void 0, describeOf(t).slots, values);
544
- if (options.name !== void 0 && (typeof options.name !== "string" || !_chunkK5DS2JTAcjs.EFFECT_SEQUENCE_NAME.test(options.name))) errors.push(`The sequence name is lowercase words and dashes (like "${t.summary.id.replace(/^fake\./, "")}").`);
544
+ const errors = _chunkZ3BRH4JKcjs.checkTemplateValues.call(void 0, describeOf(t).slots, values);
545
+ if (options.name !== void 0 && (typeof options.name !== "string" || !_chunkZ3BRH4JKcjs.EFFECT_SEQUENCE_NAME.test(options.name))) errors.push(`The sequence name is lowercase words and dashes (like "${t.summary.id.replace(/^fake\./, "")}").`);
545
546
  if (errors.length) return { ok: false, errors };
546
547
  const sequence = fill(t, values);
547
548
  if (options.name) sequence.name = options.name;
548
- return { ok: true, sequence, openSlots: _chunkK5DS2JTAcjs.effectSequenceSlots.call(void 0, sequence), notes: [] };
549
+ return { ok: true, sequence, openSlots: _chunkZ3BRH4JKcjs.effectSequenceSlots.call(void 0, sequence), notes: [] };
549
550
  }
550
551
  };
551
552
  }
@@ -867,15 +868,15 @@ var smooth = (t) => t * t * (3 - 2 * t);
867
868
  var clamp01 = (v) => v < 0 ? 0 : v > 1 ? 1 : v;
868
869
  function input(request, name, id, width, height) {
869
870
  const src = _optionalChain([request, 'access', _46 => _46.inputs, 'optionalAccess', _47 => _47[name]]);
870
- if (!src) throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`Effect "${id}" needs an input named "${name}".`, id);
871
- if (!_chunkGHCSC2WPcjs.isEffectPixels.call(void 0, src)) throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`The fake provider only takes EffectPixels inputs ("${name}").`, id);
871
+ if (!src) throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`Effect "${id}" needs an input named "${name}".`, id);
872
+ if (!_chunkISIO63Q5cjs.isEffectPixels.call(void 0, src)) throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`The fake provider only takes EffectPixels inputs ("${name}").`, id);
872
873
  if (src.width !== width || src.height !== height) {
873
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`Input "${name}" is ${src.width}\xD7${src.height}; the renderer is ${width}\xD7${height}.`, id);
874
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`Input "${name}" is ${src.width}\xD7${src.height}; the renderer is ${width}\xD7${height}.`, id);
874
875
  }
875
876
  return src;
876
877
  }
877
878
  function renderPixels(d, v, request, width, height) {
878
- const out = _chunkGHCSC2WPcjs.createEffectPixels.call(void 0, width, height);
879
+ const out = _chunkISIO63Q5cjs.createEffectPixels.call(void 0, width, height);
879
880
  const o = out.data;
880
881
  switch (d.id) {
881
882
  case "fake.invert": {
@@ -964,7 +965,7 @@ function renderPixels(d, v, request, width, height) {
964
965
  break;
965
966
  }
966
967
  default:
967
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect; use applyVectorEffect.`, d.id);
968
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect; use applyVectorEffect.`, d.id);
968
969
  }
969
970
  return out;
970
971
  }
@@ -994,22 +995,22 @@ function cameraViewOf(d, ctx, v) {
994
995
  case "fake.drift":
995
996
  return viewAt(x0, y0, from.zoom * lerp(1, v.scale, smooth(u)), ctx);
996
997
  default:
997
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect, not a camera move.`, d.id);
998
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${d.id}" is a ${d.kind} effect, not a camera move.`, d.id);
998
999
  }
999
1000
  }
1000
1001
  function toFloat(p) {
1001
1002
  const f = new Float32Array(p.data.length);
1002
1003
  for (let i = 0; i < f.length; i += 4) {
1003
- f[i] = _chunkGHCSC2WPcjs.srgbToLinear.call(void 0, p.data[i] / 255);
1004
- f[i + 1] = _chunkGHCSC2WPcjs.srgbToLinear.call(void 0, p.data[i + 1] / 255);
1005
- f[i + 2] = _chunkGHCSC2WPcjs.srgbToLinear.call(void 0, p.data[i + 2] / 255);
1004
+ f[i] = _chunkISIO63Q5cjs.srgbToLinear.call(void 0, p.data[i] / 255);
1005
+ f[i + 1] = _chunkISIO63Q5cjs.srgbToLinear.call(void 0, p.data[i + 1] / 255);
1006
+ f[i + 2] = _chunkISIO63Q5cjs.srgbToLinear.call(void 0, p.data[i + 2] / 255);
1006
1007
  f[i + 3] = p.data[i + 3] / 255;
1007
1008
  }
1008
- return _chunkGHCSC2WPcjs.encodeEffectFloat.call(void 0, { ...p, float: f });
1009
+ return _chunkISIO63Q5cjs.encodeEffectFloat.call(void 0, { ...p, float: f });
1009
1010
  }
1010
1011
  function maskResult(out, mask, source, id) {
1011
- if (!_chunkGHCSC2WPcjs.isEffectPixels.call(void 0, mask) || mask.width !== out.width || mask.height !== out.height) {
1012
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)("The mask must be EffectPixels the size of the renderer.", id);
1012
+ if (!_chunkISIO63Q5cjs.isEffectPixels.call(void 0, mask) || mask.width !== out.width || mask.height !== out.height) {
1013
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)("The mask must be EffectPixels the size of the renderer.", id);
1013
1014
  }
1014
1015
  const o = out.data;
1015
1016
  for (let i = 0; i < o.length; i += 4) {
@@ -1036,32 +1037,32 @@ function createFakeEffectProvider(options = {}) {
1036
1037
  const byId = new Map(all.map((d) => [d.id, d]));
1037
1038
  const get = (id) => {
1038
1039
  const d = byId.get(id);
1039
- if (!d) throw new (0, _chunkGHCSC2WPcjs.UnknownEffectError)(id, "the fake provider");
1040
+ if (!d) throw new (0, _chunkISIO63Q5cjs.UnknownEffectError)(id, "the fake provider");
1040
1041
  return d;
1041
1042
  };
1042
1043
  const summaries = all.map(summaryOf);
1043
1044
  const camera = (id, ctx, values) => {
1044
1045
  const d = get(id);
1045
- if (d.kind !== "camera") throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a camera move.`, id);
1046
- if (!(ctx.u >= 0 && ctx.u <= 1)) throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`u must be 0\u20131 through the move, got ${ctx.u}.`, id);
1047
- return cameraViewOf(d, ctx, _chunkGHCSC2WPcjs.resolveEffectValues.call(void 0, d, values));
1046
+ if (d.kind !== "camera") throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a camera move.`, id);
1047
+ if (!(ctx.u >= 0 && ctx.u <= 1)) throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`u must be 0\u20131 through the move, got ${ctx.u}.`, id);
1048
+ return cameraViewOf(d, ctx, _chunkISIO63Q5cjs.resolveEffectValues.call(void 0, d, values));
1048
1049
  };
1049
1050
  const provider = {
1050
1051
  id: "fake",
1051
1052
  name: "Fake effects",
1052
1053
  version: "1",
1053
1054
  capabilities,
1054
- list: (o) => _chunkGHCSC2WPcjs.searchEffectSummaries.call(void 0, summaries, "", o),
1055
- search: (q, o) => _chunkGHCSC2WPcjs.searchEffectSummaries.call(void 0, summaries, q, o),
1055
+ list: (o) => _chunkISIO63Q5cjs.searchEffectSummaries.call(void 0, summaries, "", o),
1056
+ search: (q, o) => _chunkISIO63Q5cjs.searchEffectSummaries.call(void 0, summaries, q, o),
1056
1057
  describe: (id) => structuredClone(get(id)),
1057
1058
  createRenderer(id, ro) {
1058
1059
  const d = get(id);
1059
- if (d.kind === "camera") throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${id}" is a camera move: it moves a scene's camera and draws no pixels. Use cameraView.`, id);
1060
- if (d.kind !== "shader") throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect; use applyVectorEffect.`, id);
1060
+ if (d.kind === "camera") throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${id}" is a camera move: it moves a scene's camera and draws no pixels. Use cameraView.`, id);
1061
+ if (d.kind !== "shader") throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect; use applyVectorEffect.`, id);
1061
1062
  const { width, height } = ro;
1062
1063
  const depth = _nullishCoalesce(ro.depth, () => ( 8));
1063
1064
  if (!(width > 0 && height > 0) || width > capabilities.maxSize || height > capabilities.maxSize) {
1064
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`Renderer size ${width}\xD7${height} is outside 1\u2013${capabilities.maxSize}.`, id);
1065
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`Renderer size ${width}\xD7${height} is outside 1\u2013${capabilities.maxSize}.`, id);
1065
1066
  }
1066
1067
  let disposed = false;
1067
1068
  return {
@@ -1070,15 +1071,15 @@ function createFakeEffectProvider(options = {}) {
1070
1071
  height,
1071
1072
  depth,
1072
1073
  async render(request) {
1073
- if (disposed) throw new (0, _chunkGHCSC2WPcjs.EffectDisposedError)(id);
1074
+ if (disposed) throw new (0, _chunkISIO63Q5cjs.EffectDisposedError)(id);
1074
1075
  if (!Number.isFinite(request.time) || request.time < 0) {
1075
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`time must be a finite number of ms \u2265 0, got ${request.time}.`, id);
1076
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`time must be a finite number of ms \u2265 0, got ${request.time}.`, id);
1076
1077
  }
1077
- const values = _chunkGHCSC2WPcjs.resolveEffectValues.call(void 0, d, request.values);
1078
+ const values = _chunkISIO63Q5cjs.resolveEffectValues.call(void 0, d, request.values);
1078
1079
  _optionalChain([options, 'access', _48 => _48.onRender, 'optionalCall', _49 => _49(id, request)]);
1079
1080
  const out = renderPixels(d, values, request, width, height);
1080
1081
  if (request.mask) {
1081
- if (!capabilities.supportsMask) throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)("This provider does not take masks.", id);
1082
+ if (!capabilities.supportsMask) throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)("This provider does not take masks.", id);
1082
1083
  const source = d.uses.includes("filter") ? _optionalChain([request, 'access', _50 => _50.inputs, 'optionalAccess', _51 => _51.source]) : void 0;
1083
1084
  maskResult(out, request.mask, source, id);
1084
1085
  }
@@ -1090,14 +1091,14 @@ function createFakeEffectProvider(options = {}) {
1090
1091
  };
1091
1092
  },
1092
1093
  pathFromText(text, opts) {
1093
- if (typeof text !== "string" || !text.trim()) throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)("There are no words to write; pass some text.");
1094
- if (_optionalChain([opts, 'optionalAccess', _52 => _52.font]) !== void 0 && opts.font !== "zig") throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`The fake provider has no font "${opts.font}"; its only font is "zig".`);
1094
+ if (typeof text !== "string" || !text.trim()) throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)("There are no words to write; pass some text.");
1095
+ if (_optionalChain([opts, 'optionalAccess', _52 => _52.font]) !== void 0 && opts.font !== "zig") throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`The fake provider has no font "${opts.font}"; its only font is "zig".`);
1095
1096
  return [...text].map((_, i) => `M${i * 10} 10 L${i * 10 + 3} 0 L${i * 10 + 6} 10`).join(" ");
1096
1097
  },
1097
1098
  applyVectorEffect(id, target, values) {
1098
1099
  const d = get(id);
1099
- if (d.kind !== "motion" && d.kind !== "vector") throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a vector one.`, id);
1100
- const v = _chunkGHCSC2WPcjs.resolveEffectValues.call(void 0, d, values);
1100
+ if (d.kind !== "motion" && d.kind !== "vector") throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${id}" is a ${d.kind} effect, not a vector one.`, id);
1101
+ const v = _chunkISIO63Q5cjs.resolveEffectValues.call(void 0, d, values);
1101
1102
  if (d.id === "fake.route") {
1102
1103
  const pts = Array.isArray(v.path) && v.path.length >= 4 ? v.path : typeof v.path === "string" && pathNumbers(v.path).length >= 4 ? pathNumbers(v.path) : [0, 20, 25, 0, 50, 20, 75, 40, 100, 20];
1103
1104
  const xs = pts.filter((_, i) => i % 2 === 0);
@@ -1131,12 +1132,12 @@ function createFakeEffectProvider(options = {}) {
1131
1132
  sampleCameraMove: (id, request) => {
1132
1133
  const d = get(id);
1133
1134
  const { from, to, ms, stage, fps, values } = request;
1134
- return _chunkGHCSC2WPcjs.sampleCameraViews.call(void 0, (u) => camera(id, { from, to, u, ms, stage }, values), { ms, fps, cut: _optionalChain([d, 'access', _53 => _53.camera, 'optionalAccess', _54 => _54.cut]) });
1135
+ return _chunkISIO63Q5cjs.sampleCameraViews.call(void 0, (u) => camera(id, { from, to, u, ms, stage }, values), { ms, fps, cut: _optionalChain([d, 'access', _53 => _53.camera, 'optionalAccess', _54 => _54.cut]) });
1135
1136
  }
1136
1137
  } : {},
1137
1138
  ...options.templates ? fakeTemplateMethods() : {},
1138
1139
  ...supportsAuthoring ? {
1139
- openAuthoring: (from) => _chunkQOBCBGGIcjs.createEffectAuthoringSession.call(void 0, from, { provider })
1140
+ openAuthoring: (from) => _chunkQKXO6JPPcjs.createEffectAuthoringSession.call(void 0, from, { provider })
1140
1141
  } : {}
1141
1142
  };
1142
1143
  return provider;
@@ -1217,7 +1218,7 @@ var effectFieldValue = (field, value) => {
1217
1218
  return value === void 0 || value === null || typeof value === "object" && !Array.isArray(value) ? field.default : value;
1218
1219
  };
1219
1220
  function effectSamplePicture(width, height, variant = 0) {
1220
- const p = _chunkGHCSC2WPcjs.createEffectPixels.call(void 0, width, height);
1221
+ const p = _chunkISIO63Q5cjs.createEffectPixels.call(void 0, width, height);
1221
1222
  for (let y = 0, i = 0; y < height; y++) {
1222
1223
  for (let x = 0; x < width; x++, i += 4) {
1223
1224
  const u = x / Math.max(1, width - 1);
@@ -1743,4 +1744,5 @@ function createEffectAuthoringToolProvider(host, options) {
1743
1744
 
1744
1745
 
1745
1746
 
1746
- exports.CAMERA_MOVE_MAX_MS = _chunkGHCSC2WPcjs.CAMERA_MOVE_MAX_MS; exports.CAMERA_MOVE_ROLES = _chunkGHCSC2WPcjs.CAMERA_MOVE_ROLES; exports.EFFECT_ACCEPTS = _chunkGHCSC2WPcjs.EFFECT_ACCEPTS; exports.EFFECT_ERROR_CODES = _chunkGHCSC2WPcjs.EFFECT_ERROR_CODES; exports.EFFECT_KINDS = _chunkGHCSC2WPcjs.EFFECT_KINDS; exports.EFFECT_LAYER_ROLES = _chunkGHCSC2WPcjs.EFFECT_LAYER_ROLES; exports.EFFECT_LAYER_USES = _chunkK5DS2JTAcjs.EFFECT_LAYER_USES; exports.EFFECT_PATH_FORMAT = _chunkGHCSC2WPcjs.EFFECT_PATH_FORMAT; exports.EFFECT_SEQUENCE_NAME = _chunkK5DS2JTAcjs.EFFECT_SEQUENCE_NAME; exports.EFFECT_SUBJECT_KINDS = _chunkGHCSC2WPcjs.EFFECT_SUBJECT_KINDS; exports.EFFECT_TEMPLATE_SLOT_TYPES = _chunkGHCSC2WPcjs.EFFECT_TEMPLATE_SLOT_TYPES; exports.EFFECT_TRANSITION_MS = _chunkGHCSC2WPcjs.EFFECT_TRANSITION_MS; exports.EFFECT_USES = _chunkGHCSC2WPcjs.EFFECT_USES; exports.EFFECT_USE_LABELS = EFFECT_USE_LABELS; exports.EffectControlError = _chunkGHCSC2WPcjs.EffectControlError; exports.EffectDisposedError = _chunkGHCSC2WPcjs.EffectDisposedError; exports.EffectError = _chunkGHCSC2WPcjs.EffectError; exports.EffectRendererPool = _chunkPY4GWSE2cjs.EffectRendererPool; exports.EffectUnsupportedError = _chunkGHCSC2WPcjs.EffectUnsupportedError; exports.EffectsSlot = _chunkGHCSC2WPcjs.EffectsSlot; exports.NoEffectsProviderError = _chunkGHCSC2WPcjs.NoEffectsProviderError; exports.UnknownEffectError = _chunkGHCSC2WPcjs.UnknownEffectError; exports.UnknownTemplateError = _chunkGHCSC2WPcjs.UnknownTemplateError; exports.applyEffectMask = _chunkGHCSC2WPcjs.applyEffectMask; exports.cameraBoxOfView = _chunkGHCSC2WPcjs.cameraBoxOfView; exports.cameraMoveField = _chunkGHCSC2WPcjs.cameraMoveField; exports.cameraMoveIdList = _chunkGHCSC2WPcjs.cameraMoveIdList; exports.cameraMoveParts = _chunkGHCSC2WPcjs.cameraMoveParts; exports.cameraMovesFor = _chunkGHCSC2WPcjs.cameraMovesFor; exports.cameraViewOfBox = _chunkGHCSC2WPcjs.cameraViewOfBox; exports.checkEffectProvider = checkEffectProvider; exports.checkEffectSequence = _chunkK5DS2JTAcjs.checkEffectSequence; exports.checkTemplateValues = _chunkK5DS2JTAcjs.checkTemplateValues; exports.countEffectTags = _chunkGHCSC2WPcjs.countEffectTags; exports.createEffectAuthoringSession = _chunkQOBCBGGIcjs.createEffectAuthoringSession; exports.createEffectAuthoringToolProvider = createEffectAuthoringToolProvider; exports.createEffectPixels = _chunkGHCSC2WPcjs.createEffectPixels; exports.createEffectToolProvider = _chunkGHCSC2WPcjs.createEffectToolProvider; exports.createFakeEffectProvider = createFakeEffectProvider; exports.effectControlField = effectControlField; exports.effectFieldValue = effectFieldValue; exports.effectFontFamilies = effectFontFamilies; exports.effectLayerInput = _chunkK5DS2JTAcjs.effectLayerInput; exports.effectLayerOffered = _chunkK5DS2JTAcjs.effectLayerOffered; exports.effectLayerRole = _chunkK5DS2JTAcjs.effectLayerRole; exports.effectLayerSpan = _chunkK5DS2JTAcjs.effectLayerSpan; exports.effectOffered = _chunkGHCSC2WPcjs.effectOffered; exports.effectParameterFields = effectParameterFields; exports.effectSampleInputs = effectSampleInputs; exports.effectSamplePicture = effectSamplePicture; exports.effectSequenceEffects = _chunkK5DS2JTAcjs.effectSequenceEffects; exports.effectSequenceSlots = _chunkK5DS2JTAcjs.effectSequenceSlots; exports.effectSequenceTiming = _chunkK5DS2JTAcjs.effectSequenceTiming; exports.effectSubjectKind = _chunkK5DS2JTAcjs.effectSubjectKind; exports.effectSubjectProblem = _chunkK5DS2JTAcjs.effectSubjectProblem; exports.effectTemplateTools = _chunkK5DS2JTAcjs.effectTemplateTools; exports.effectValueErrors = _chunkGHCSC2WPcjs.effectValueErrors; exports.encodeEffectFloat = _chunkGHCSC2WPcjs.encodeEffectFloat; exports.fillEffectTemplate = _chunkK5DS2JTAcjs.fillEffectTemplate; exports.groupEffectsByCategory = groupEffectsByCategory; exports.hasEffectTags = _chunkGHCSC2WPcjs.hasEffectTags; exports.isCameraView = _chunkGHCSC2WPcjs.isCameraView; exports.isEffectError = _chunkGHCSC2WPcjs.isEffectError; exports.isEffectFontControl = isEffectFontControl; exports.isEffectPixels = _chunkGHCSC2WPcjs.isEffectPixels; exports.isSubjectTemplateSlot = _chunkK5DS2JTAcjs.isSubjectTemplateSlot; exports.linearToSrgb = _chunkGHCSC2WPcjs.linearToSrgb; exports.normaliseEffectTag = _chunkGHCSC2WPcjs.normaliseEffectTag; exports.pathControlsOf = _chunkGHCSC2WPcjs.pathControlsOf; exports.renderEffectThumbnail = renderEffectThumbnail; exports.resolveCameraMoveSpec = _chunkGHCSC2WPcjs.resolveCameraMoveSpec; exports.resolveEffectValues = _chunkGHCSC2WPcjs.resolveEffectValues; exports.sampleCameraViews = _chunkGHCSC2WPcjs.sampleCameraViews; exports.sampleEffectCameraMove = _chunkGHCSC2WPcjs.sampleEffectCameraMove; exports.searchEffectSummaries = _chunkGHCSC2WPcjs.searchEffectSummaries; exports.searchTemplateSummaries = _chunkK5DS2JTAcjs.searchTemplateSummaries; exports.srgbToLinear = _chunkGHCSC2WPcjs.srgbToLinear; exports.templateDefaultValues = _chunkK5DS2JTAcjs.templateDefaultValues; exports.templateSlotSchema = _chunkK5DS2JTAcjs.templateSlotSchema; exports.templateSlotSummary = _chunkK5DS2JTAcjs.templateSlotSummary; exports.templateSlotTakes = _chunkK5DS2JTAcjs.templateSlotTakes; exports.templateValueProblem = _chunkK5DS2JTAcjs.templateValueProblem; exports.templateValuesSchema = _chunkK5DS2JTAcjs.templateValuesSchema;
1747
+
1748
+ exports.CAMERA_MOVE_MAX_MS = _chunkISIO63Q5cjs.CAMERA_MOVE_MAX_MS; exports.CAMERA_MOVE_ROLES = _chunkISIO63Q5cjs.CAMERA_MOVE_ROLES; exports.EFFECT_ACCEPTS = _chunkISIO63Q5cjs.EFFECT_ACCEPTS; exports.EFFECT_ERROR_CODES = _chunkISIO63Q5cjs.EFFECT_ERROR_CODES; exports.EFFECT_KINDS = _chunkISIO63Q5cjs.EFFECT_KINDS; exports.EFFECT_LAYER_ROLES = _chunkISIO63Q5cjs.EFFECT_LAYER_ROLES; exports.EFFECT_LAYER_USES = _chunkZ3BRH4JKcjs.EFFECT_LAYER_USES; exports.EFFECT_PATH_FORMAT = _chunkISIO63Q5cjs.EFFECT_PATH_FORMAT; exports.EFFECT_SEQUENCE_NAME = _chunkZ3BRH4JKcjs.EFFECT_SEQUENCE_NAME; exports.EFFECT_SUBJECT_KINDS = _chunkISIO63Q5cjs.EFFECT_SUBJECT_KINDS; exports.EFFECT_TEMPLATE_SLOT_TYPES = _chunkISIO63Q5cjs.EFFECT_TEMPLATE_SLOT_TYPES; exports.EFFECT_TRANSITION_MS = _chunkISIO63Q5cjs.EFFECT_TRANSITION_MS; exports.EFFECT_USES = _chunkISIO63Q5cjs.EFFECT_USES; exports.EFFECT_USE_LABELS = EFFECT_USE_LABELS; exports.EffectControlError = _chunkISIO63Q5cjs.EffectControlError; exports.EffectDisposedError = _chunkISIO63Q5cjs.EffectDisposedError; exports.EffectError = _chunkISIO63Q5cjs.EffectError; exports.EffectRendererPool = _chunkPY4GWSE2cjs.EffectRendererPool; exports.EffectUnsupportedError = _chunkISIO63Q5cjs.EffectUnsupportedError; exports.EffectsSlot = _chunkISIO63Q5cjs.EffectsSlot; exports.NoEffectsProviderError = _chunkISIO63Q5cjs.NoEffectsProviderError; exports.UnknownEffectError = _chunkISIO63Q5cjs.UnknownEffectError; exports.UnknownTemplateError = _chunkISIO63Q5cjs.UnknownTemplateError; exports.applyEffectMask = _chunkISIO63Q5cjs.applyEffectMask; exports.cameraBoxOfView = _chunkISIO63Q5cjs.cameraBoxOfView; exports.cameraMoveField = _chunkISIO63Q5cjs.cameraMoveField; exports.cameraMoveIdList = _chunkISIO63Q5cjs.cameraMoveIdList; exports.cameraMoveParts = _chunkISIO63Q5cjs.cameraMoveParts; exports.cameraMovesFor = _chunkISIO63Q5cjs.cameraMovesFor; exports.cameraViewOfBox = _chunkISIO63Q5cjs.cameraViewOfBox; exports.checkEffectProvider = checkEffectProvider; exports.checkEffectSequence = _chunkZ3BRH4JKcjs.checkEffectSequence; exports.checkTemplateValues = _chunkZ3BRH4JKcjs.checkTemplateValues; exports.countEffectTags = _chunkISIO63Q5cjs.countEffectTags; exports.createEffectAuthoringSession = _chunkQKXO6JPPcjs.createEffectAuthoringSession; exports.createEffectAuthoringToolProvider = createEffectAuthoringToolProvider; exports.createEffectPixels = _chunkISIO63Q5cjs.createEffectPixels; exports.createEffectToolProvider = _chunkISIO63Q5cjs.createEffectToolProvider; exports.createFakeEffectProvider = createFakeEffectProvider; exports.effectControlField = effectControlField; exports.effectFieldValue = effectFieldValue; exports.effectFontFamilies = effectFontFamilies; exports.effectLayerInput = _chunkZ3BRH4JKcjs.effectLayerInput; exports.effectLayerOffered = _chunkZ3BRH4JKcjs.effectLayerOffered; exports.effectLayerRole = _chunkZ3BRH4JKcjs.effectLayerRole; exports.effectLayerSpan = _chunkZ3BRH4JKcjs.effectLayerSpan; exports.effectOffered = _chunkISIO63Q5cjs.effectOffered; exports.effectParameterFields = effectParameterFields; exports.effectSampleInputs = effectSampleInputs; exports.effectSamplePicture = effectSamplePicture; exports.effectSequenceEffects = _chunkZ3BRH4JKcjs.effectSequenceEffects; exports.effectSequenceSlots = _chunkZ3BRH4JKcjs.effectSequenceSlots; exports.effectSequenceTiming = _chunkZ3BRH4JKcjs.effectSequenceTiming; exports.effectSubjectKind = _chunkZ3BRH4JKcjs.effectSubjectKind; exports.effectSubjectProblem = _chunkZ3BRH4JKcjs.effectSubjectProblem; exports.effectTemplateTools = _chunkZ3BRH4JKcjs.effectTemplateTools; exports.effectValueErrors = _chunkISIO63Q5cjs.effectValueErrors; exports.encodeEffectFloat = _chunkISIO63Q5cjs.encodeEffectFloat; exports.fillEffectTemplate = _chunkZ3BRH4JKcjs.fillEffectTemplate; exports.groupEffectsByCategory = groupEffectsByCategory; exports.hasEffectTags = _chunkISIO63Q5cjs.hasEffectTags; exports.isCameraView = _chunkISIO63Q5cjs.isCameraView; exports.isEffectError = _chunkISIO63Q5cjs.isEffectError; exports.isEffectFontControl = isEffectFontControl; exports.isEffectPixels = _chunkISIO63Q5cjs.isEffectPixels; exports.isSubjectTemplateSlot = _chunkZ3BRH4JKcjs.isSubjectTemplateSlot; exports.layerImageInput = _chunkISIO63Q5cjs.layerImageInput; exports.linearToSrgb = _chunkISIO63Q5cjs.linearToSrgb; exports.normaliseEffectTag = _chunkISIO63Q5cjs.normaliseEffectTag; exports.pathControlsOf = _chunkISIO63Q5cjs.pathControlsOf; exports.renderEffectThumbnail = renderEffectThumbnail; exports.resolveCameraMoveSpec = _chunkISIO63Q5cjs.resolveCameraMoveSpec; exports.resolveEffectValues = _chunkISIO63Q5cjs.resolveEffectValues; exports.sampleCameraViews = _chunkISIO63Q5cjs.sampleCameraViews; exports.sampleEffectCameraMove = _chunkISIO63Q5cjs.sampleEffectCameraMove; exports.searchEffectSummaries = _chunkISIO63Q5cjs.searchEffectSummaries; exports.searchTemplateSummaries = _chunkZ3BRH4JKcjs.searchTemplateSummaries; exports.srgbToLinear = _chunkISIO63Q5cjs.srgbToLinear; exports.templateDefaultValues = _chunkZ3BRH4JKcjs.templateDefaultValues; exports.templateSlotSchema = _chunkZ3BRH4JKcjs.templateSlotSchema; exports.templateSlotSummary = _chunkZ3BRH4JKcjs.templateSlotSummary; exports.templateSlotTakes = _chunkZ3BRH4JKcjs.templateSlotTakes; exports.templateValueProblem = _chunkZ3BRH4JKcjs.templateValueProblem; exports.templateValuesSchema = _chunkZ3BRH4JKcjs.templateValuesSchema;
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-N4ZXW3WB.js";
4
4
  import {
5
5
  createEffectAuthoringSession
6
- } from "../chunk-AU6MWQKZ.js";
6
+ } from "../chunk-ABL7IWFZ.js";
7
7
  import {
8
8
  EFFECT_LAYER_USES,
9
9
  EFFECT_SEQUENCE_NAME,
@@ -28,7 +28,7 @@ import {
28
28
  templateSlotTakes,
29
29
  templateValueProblem,
30
30
  templateValuesSchema
31
- } from "../chunk-RXZL4NG5.js";
31
+ } from "../chunk-226QDRO3.js";
32
32
  import {
33
33
  EffectRendererPool
34
34
  } from "../chunk-EHLOCVWB.js";
@@ -69,6 +69,7 @@ import {
69
69
  isCameraView,
70
70
  isEffectError,
71
71
  isEffectPixels,
72
+ layerImageInput,
72
73
  linearToSrgb,
73
74
  normaliseEffectTag,
74
75
  pathControlsOf,
@@ -78,7 +79,7 @@ import {
78
79
  sampleEffectCameraMove,
79
80
  searchEffectSummaries,
80
81
  srgbToLinear
81
- } from "../chunk-OFH6Q67U.js";
82
+ } from "../chunk-JA57JIT5.js";
82
83
  import "../chunk-V2ZCJRDM.js";
83
84
  import "../chunk-NS62CQ2B.js";
84
85
  import {
@@ -1726,6 +1727,7 @@ export {
1726
1727
  isEffectFontControl,
1727
1728
  isEffectPixels,
1728
1729
  isSubjectTemplateSlot,
1730
+ layerImageInput,
1729
1731
  linearToSrgb,
1730
1732
  normaliseEffectTag,
1731
1733
  pathControlsOf,
@@ -60,6 +60,12 @@ export interface EffectToolHost {
60
60
  };
61
61
  /** The uses `apply_effect` takes on a target (others go through `extraTools`). */
62
62
  applyUses: readonly EffectUse[];
63
+ /**
64
+ * `apply_effect` also takes any effect with a picture input (the target is the picture), of any
65
+ * use: a holo-foil treatment of a sticker. Summaries don't list inputs, so its effect id is then
66
+ * any id, checked when applied.
67
+ */
68
+ applyImageInputs?: boolean;
63
69
  /** Text added to `apply_effect`'s description: where the effect goes and how it is drawn. */
64
70
  applyDetails: string;
65
71
  /** The current provider, or `null`. */
@@ -60,6 +60,12 @@ export interface EffectToolHost {
60
60
  };
61
61
  /** The uses `apply_effect` takes on a target (others go through `extraTools`). */
62
62
  applyUses: readonly EffectUse[];
63
+ /**
64
+ * `apply_effect` also takes any effect with a picture input (the target is the picture), of any
65
+ * use: a holo-foil treatment of a sticker. Summaries don't list inputs, so its effect id is then
66
+ * any id, checked when applied.
67
+ */
68
+ applyImageInputs?: boolean;
63
69
  /** Text added to `apply_effect`'s description: where the effect goes and how it is drawn. */
64
70
  applyDetails: string;
65
71
  /** The current provider, or `null`. */
@@ -15,7 +15,7 @@ import type { EffectSmartFilter } from './layers/model.cjs';
15
15
  import type { SmartEffectResolver } from './layers/smart.cjs';
16
16
  /** Which uses each place in the image editor takes. */
17
17
  export declare const IMAGE_EFFECT_PLACES: {
18
- /** A smart filter: the effect changes the pixels below it. */
18
+ /** A smart filter: the effect changes the pixels below it (and any effect that takes a picture: the layer is its input). */
19
19
  readonly filter: readonly ["filter"];
20
20
  /** An effect layer: drawn at the document's size. */
21
21
  readonly layer: readonly ["generator", "overlay", "title"];
@@ -15,7 +15,7 @@ import type { EffectSmartFilter } from './layers/model.js';
15
15
  import type { SmartEffectResolver } from './layers/smart.js';
16
16
  /** Which uses each place in the image editor takes. */
17
17
  export declare const IMAGE_EFFECT_PLACES: {
18
- /** A smart filter: the effect changes the pixels below it. */
18
+ /** A smart filter: the effect changes the pixels below it (and any effect that takes a picture: the layer is its input). */
19
19
  readonly filter: readonly ["filter"];
20
20
  /** An effect layer: drawn at the document's size. */
21
21
  readonly layer: readonly ["generator", "overlay", "title"];