@popcraft/cli 0.56.5 → 0.57.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 (2) hide show
  1. package/dist/popcraft.mjs +760 -292
  2. package/package.json +2 -2
package/dist/popcraft.mjs CHANGED
@@ -1198,7 +1198,7 @@ function operations(spec = openapi) {
1198
1198
  }
1199
1199
  async function call(target2, method, path, opts = {}) {
1200
1200
  const qs = new URLSearchParams(opts.query ?? {}).toString();
1201
- const headers = { "user-agent": `popcraft-cli/${"0.56.5"}`, ...opts.headers };
1201
+ const headers = { "user-agent": `popcraft-cli/${"0.57.0"}`, ...opts.headers };
1202
1202
  if (target2.token) headers.authorization = `Bearer ${target2.token}`;
1203
1203
  if (opts.contentType) headers["content-type"] = opts.contentType;
1204
1204
  try {
@@ -2024,7 +2024,7 @@ function updateV7State(state, now3, rnds) {
2024
2024
  }
2025
2025
  return state;
2026
2026
  }
2027
- function v7Bytes(rnds, msecs, seq8, buf, offset = 0) {
2027
+ function v7Bytes(rnds, msecs, seq9, buf, offset = 0) {
2028
2028
  if (rnds.length < 16) {
2029
2029
  throw new Error("Random bytes length must be >= 16");
2030
2030
  }
@@ -2037,18 +2037,18 @@ function v7Bytes(rnds, msecs, seq8, buf, offset = 0) {
2037
2037
  }
2038
2038
  }
2039
2039
  msecs ??= Date.now();
2040
- seq8 ??= v7Sequence(rnds);
2040
+ seq9 ??= v7Sequence(rnds);
2041
2041
  buf[offset++] = msecs / 1099511627776 & 255;
2042
2042
  buf[offset++] = msecs / 4294967296 & 255;
2043
2043
  buf[offset++] = msecs / 16777216 & 255;
2044
2044
  buf[offset++] = msecs / 65536 & 255;
2045
2045
  buf[offset++] = msecs / 256 & 255;
2046
2046
  buf[offset++] = msecs & 255;
2047
- buf[offset++] = 112 | seq8 >>> 28 & 15;
2048
- buf[offset++] = seq8 >>> 20 & 255;
2049
- buf[offset++] = 128 | seq8 >>> 14 & 63;
2050
- buf[offset++] = seq8 >>> 6 & 255;
2051
- buf[offset++] = seq8 << 2 & 255 | rnds[10] & 3;
2047
+ buf[offset++] = 112 | seq9 >>> 28 & 15;
2048
+ buf[offset++] = seq9 >>> 20 & 255;
2049
+ buf[offset++] = 128 | seq9 >>> 14 & 63;
2050
+ buf[offset++] = seq9 >>> 6 & 255;
2051
+ buf[offset++] = seq9 << 2 & 255 | rnds[10] & 3;
2052
2052
  buf[offset++] = rnds[11];
2053
2053
  buf[offset++] = rnds[12];
2054
2054
  buf[offset++] = rnds[13];
@@ -4547,18 +4547,18 @@ function staggerRanks(ids2, order2, seed2 = 0) {
4547
4547
  function staggerOffset(parent, childId) {
4548
4548
  const stagger = parent?.motion?.stagger;
4549
4549
  if (!parent || !stagger || !(stagger.delay > 0 || stagger.delay < 0)) return 0;
4550
- let memo7 = staggerMemo.get(parent);
4551
- if (!memo7) {
4550
+ let memo8 = staggerMemo.get(parent);
4551
+ if (!memo8) {
4552
4552
  const ranks = staggerRanks(parent.childIds, stagger.order, stagger.seed);
4553
4553
  let max3 = 0;
4554
4554
  for (const r of ranks.values()) if (r > max3) max3 = r;
4555
4555
  const total2 = stagger.delay * max3;
4556
4556
  const offsets = /* @__PURE__ */ new Map();
4557
4557
  for (const [id3, r] of ranks) offsets.set(id3, stagger.distribution && max3 > 0 ? total2 * evalInterp(stagger.distribution, r / max3, Math.abs(total2)) : stagger.delay * r);
4558
- memo7 = { offsets };
4559
- staggerMemo.set(parent, memo7);
4558
+ memo8 = { offsets };
4559
+ staggerMemo.set(parent, memo8);
4560
4560
  }
4561
- return memo7.offsets.get(childId) ?? 0;
4561
+ return memo8.offsets.get(childId) ?? 0;
4562
4562
  }
4563
4563
  function layerTime(nodes, id3, parentLocalMs) {
4564
4564
  const n = nodes[id3];
@@ -4745,9 +4745,9 @@ function unitCount(node2, unit) {
4745
4745
  return textUnits(chars, unit, lines2).count;
4746
4746
  }
4747
4747
  function animatorTail(node2, id3) {
4748
- let memo7 = tails.get(node2);
4749
- if (!memo7) tails.set(node2, memo7 = /* @__PURE__ */ new Map());
4750
- const hit = memo7.get(id3);
4748
+ let memo8 = tails.get(node2);
4749
+ if (!memo8) tails.set(node2, memo8 = /* @__PURE__ */ new Map());
4750
+ const hit = memo8.get(id3);
4751
4751
  if (hit !== void 0) return hit;
4752
4752
  const a = node2.textAnimators?.find((x2) => x2.id === id3);
4753
4753
  let tail = 0;
@@ -4761,7 +4761,7 @@ function animatorTail(node2, id3) {
4761
4761
  tail = s * max3;
4762
4762
  }
4763
4763
  }
4764
- memo7.set(id3, tail);
4764
+ memo8.set(id3, tail);
4765
4765
  return tail;
4766
4766
  }
4767
4767
  function trackTail(node2, path) {
@@ -8081,11 +8081,11 @@ function componentsDrawnBy(document2, rootId) {
8081
8081
  }
8082
8082
  function wouldCreateCycle(document2, nodeId2, newParentId) {
8083
8083
  if (nodeId2 === newParentId) return true;
8084
- const chain3 = [document2.nodes[newParentId], ...getAncestors(document2, newParentId)].filter(Boolean);
8085
- if (chain3.some((a) => a.id === nodeId2)) return true;
8084
+ const chain5 = [document2.nodes[newParentId], ...getAncestors(document2, newParentId)].filter(Boolean);
8085
+ if (chain5.some((a) => a.id === nodeId2)) return true;
8086
8086
  const drawn = componentsDrawnBy(document2, nodeId2);
8087
8087
  if (!drawn.size) return false;
8088
- const enclosing = new Set(chain3.filter((a) => a.type === "COMPONENT" || a.type === "COMPONENT_SET").map((a) => a.id));
8088
+ const enclosing = new Set(chain5.filter((a) => a.type === "COMPONENT" || a.type === "COMPONENT_SET").map((a) => a.id));
8089
8089
  for (const c2 of drawn) if (enclosing.has(c2)) return true;
8090
8090
  for (const c2 of drawn) {
8091
8091
  const comp = document2.nodes[c2];
@@ -12037,8 +12037,8 @@ var init_schemas = __esm({
12037
12037
  });
12038
12038
  $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => {
12039
12039
  $ZodType.init(inst, def);
12040
- const memo7 = globalConfig.memoizer;
12041
- memo7?.attach(inst);
12040
+ const memo8 = globalConfig.memoizer;
12041
+ memo8?.attach(inst);
12042
12042
  inst._zod.parse = (payload, ctx2) => {
12043
12043
  const input2 = payload.value;
12044
12044
  if (!Array.isArray(input2)) {
@@ -12050,7 +12050,7 @@ var init_schemas = __esm({
12050
12050
  });
12051
12051
  return payload;
12052
12052
  }
12053
- payload.value = memo7 ? memo7.alloc(inst, payload, Array(input2.length), ctx2) : Array(input2.length);
12053
+ payload.value = memo8 ? memo8.alloc(inst, payload, Array(input2.length), ctx2) : Array(input2.length);
12054
12054
  const proms = [];
12055
12055
  const abortEarly = ctx2?.abortEarly;
12056
12056
  for (let i2 = 0; i2 < input2.length; i2++) {
@@ -12109,8 +12109,8 @@ var init_schemas = __esm({
12109
12109
  const isObject2 = isObject;
12110
12110
  const catchall = def.catchall;
12111
12111
  let value3;
12112
- const memo7 = globalConfig.memoizer;
12113
- memo7?.attach(inst);
12112
+ const memo8 = globalConfig.memoizer;
12113
+ memo8?.attach(inst);
12114
12114
  inst._zod.parse = (payload, ctx2) => {
12115
12115
  value3 ?? (value3 = _normalized.value);
12116
12116
  const input2 = payload.value;
@@ -12123,7 +12123,7 @@ var init_schemas = __esm({
12123
12123
  });
12124
12124
  return payload;
12125
12125
  }
12126
- payload.value = memo7 ? memo7.alloc(inst, payload, {}, ctx2) : {};
12126
+ payload.value = memo8 ? memo8.alloc(inst, payload, {}, ctx2) : {};
12127
12127
  const proms = [];
12128
12128
  const shape2 = value3.shape;
12129
12129
  const abortEarly = ctx2?.abortEarly;
@@ -12156,11 +12156,11 @@ var init_schemas = __esm({
12156
12156
  $ZodObject.init(inst, def);
12157
12157
  const superParse = inst._zod.parse;
12158
12158
  const _normalized = cached(() => normalizeDef(def));
12159
- const memo7 = globalConfig.memoizer;
12159
+ const memo8 = globalConfig.memoizer;
12160
12160
  const generateFastpass = (shape2) => {
12161
12161
  const normalized = _normalized.value;
12162
12162
  const syms = normalized.symbolKeys;
12163
- const doc2 = new Doc(["payload", "ctx"], { shape: shape2, inst, memo: memo7, syms });
12163
+ const doc2 = new Doc(["payload", "ctx"], { shape: shape2, inst, memo: memo8, syms });
12164
12164
  const parseStr = (k2) => `shape[${k2}]._zod.run({ value: input[${k2}], issues: [] }, ctx)`;
12165
12165
  const prefixStr = (id3, k2) => `
12166
12166
  let ${id3}_ab = false;
@@ -12180,7 +12180,7 @@ var init_schemas = __esm({
12180
12180
  for (const key5 of normalized.allKeys) {
12181
12181
  ids2[key5] = `key_${counter++}`;
12182
12182
  }
12183
- doc2.write(memo7 ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);
12183
+ doc2.write(memo8 ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);
12184
12184
  for (const key5 of normalized.allKeys) {
12185
12185
  if (key5 === "__proto__")
12186
12186
  continue;
@@ -12436,8 +12436,8 @@ var init_schemas = __esm({
12436
12436
  $ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => {
12437
12437
  $ZodType.init(inst, def);
12438
12438
  const items = def.items;
12439
- const memo7 = globalConfig.memoizer;
12440
- memo7?.attach(inst);
12439
+ const memo8 = globalConfig.memoizer;
12440
+ memo8?.attach(inst);
12441
12441
  inst._zod.parse = (payload, ctx2) => {
12442
12442
  const input2 = payload.value;
12443
12443
  if (!Array.isArray(input2)) {
@@ -12449,7 +12449,7 @@ var init_schemas = __esm({
12449
12449
  });
12450
12450
  return payload;
12451
12451
  }
12452
- payload.value = memo7 ? memo7.alloc(inst, payload, [], ctx2) : [];
12452
+ payload.value = memo8 ? memo8.alloc(inst, payload, [], ctx2) : [];
12453
12453
  const proms = [];
12454
12454
  const optinStart = getTupleOptStart(items, "optin");
12455
12455
  const optoutStart = getTupleOptStart(items, "optout");
@@ -12518,8 +12518,8 @@ var init_schemas = __esm({
12518
12518
  });
12519
12519
  $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => {
12520
12520
  $ZodType.init(inst, def);
12521
- const memo7 = globalConfig.memoizer;
12522
- memo7?.attach(inst);
12521
+ const memo8 = globalConfig.memoizer;
12522
+ memo8?.attach(inst);
12523
12523
  inst._zod.parse = (payload, ctx2) => {
12524
12524
  const input2 = payload.value;
12525
12525
  if (!isPlainObject(input2)) {
@@ -12534,7 +12534,7 @@ var init_schemas = __esm({
12534
12534
  const proms = [];
12535
12535
  const values3 = def.keyType._zod.values;
12536
12536
  if (values3 && !def.partial) {
12537
- payload.value = memo7 ? memo7.alloc(inst, payload, {}, ctx2) : {};
12537
+ payload.value = memo8 ? memo8.alloc(inst, payload, {}, ctx2) : {};
12538
12538
  const recordKeys = /* @__PURE__ */ new Set();
12539
12539
  for (const key5 of values3) {
12540
12540
  if (typeof key5 === "string" || typeof key5 === "number" || typeof key5 === "symbol") {
@@ -12598,7 +12598,7 @@ var init_schemas = __esm({
12598
12598
  });
12599
12599
  }
12600
12600
  } else {
12601
- payload.value = memo7 ? memo7.alloc(inst, payload, {}, ctx2) : {};
12601
+ payload.value = memo8 ? memo8.alloc(inst, payload, {}, ctx2) : {};
12602
12602
  let unrecognized;
12603
12603
  for (const key5 of Reflect.ownKeys(input2)) {
12604
12604
  if (key5 === "__proto__")
@@ -12673,8 +12673,8 @@ var init_schemas = __esm({
12673
12673
  });
12674
12674
  $ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => {
12675
12675
  $ZodType.init(inst, def);
12676
- const memo7 = globalConfig.memoizer;
12677
- memo7?.attach(inst);
12676
+ const memo8 = globalConfig.memoizer;
12677
+ memo8?.attach(inst);
12678
12678
  inst._zod.parse = (payload, ctx2) => {
12679
12679
  const input2 = payload.value;
12680
12680
  if (!(input2 instanceof Map)) {
@@ -12687,7 +12687,7 @@ var init_schemas = __esm({
12687
12687
  return payload;
12688
12688
  }
12689
12689
  const proms = [];
12690
- payload.value = memo7 ? memo7.alloc(inst, payload, /* @__PURE__ */ new Map(), ctx2) : /* @__PURE__ */ new Map();
12690
+ payload.value = memo8 ? memo8.alloc(inst, payload, /* @__PURE__ */ new Map(), ctx2) : /* @__PURE__ */ new Map();
12691
12691
  const abortEarly = ctx2?.abortEarly;
12692
12692
  let seen = payload.issues.length;
12693
12693
  for (const [key5, value3] of input2) {
@@ -12713,8 +12713,8 @@ var init_schemas = __esm({
12713
12713
  });
12714
12714
  $ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => {
12715
12715
  $ZodType.init(inst, def);
12716
- const memo7 = globalConfig.memoizer;
12717
- memo7?.attach(inst);
12716
+ const memo8 = globalConfig.memoizer;
12717
+ memo8?.attach(inst);
12718
12718
  inst._zod.parse = (payload, ctx2) => {
12719
12719
  const input2 = payload.value;
12720
12720
  if (!(input2 instanceof Set)) {
@@ -12727,7 +12727,7 @@ var init_schemas = __esm({
12727
12727
  return payload;
12728
12728
  }
12729
12729
  const proms = [];
12730
- payload.value = memo7 ? memo7.alloc(inst, payload, /* @__PURE__ */ new Set(), ctx2) : /* @__PURE__ */ new Set();
12730
+ payload.value = memo8 ? memo8.alloc(inst, payload, /* @__PURE__ */ new Set(), ctx2) : /* @__PURE__ */ new Set();
12731
12731
  const abortEarly = ctx2?.abortEarly;
12732
12732
  let seen = payload.issues.length;
12733
12733
  for (const item of input2) {
@@ -29244,7 +29244,6 @@ function selectionWorldBounds(nodes, ids2, scrollState) {
29244
29244
  }
29245
29245
  var init_selection_bounds = __esm({
29246
29246
  "lib/editor/selection-bounds.ts"() {
29247
- "use strict";
29248
29247
  init_scene_graph();
29249
29248
  init_transform();
29250
29249
  }
@@ -164929,9 +164928,9 @@ var init_module2 = __esm({
164929
164928
  // Processes an array of glyphs and applies the specified features
164930
164929
  // Features should be in the form of {featureType:{featureSetting:boolean}}
164931
164930
  process(glyphs, features = {}) {
164932
- for (let chain3 of this.morx.chains) {
164933
- let flags = chain3.defaultFlags;
164934
- for (let feature of chain3.features) {
164931
+ for (let chain5 of this.morx.chains) {
164932
+ let flags = chain5.defaultFlags;
164933
+ for (let feature of chain5.features) {
164935
164934
  let f2;
164936
164935
  if (f2 = features[feature.featureType]) {
164937
164936
  if (f2[feature.featureSetting]) {
@@ -164943,7 +164942,7 @@ var init_module2 = __esm({
164943
164942
  }
164944
164943
  }
164945
164944
  }
164946
- for (let subtable of chain3.subtables) if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs);
164945
+ for (let subtable of chain5.subtables) if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs);
164947
164946
  }
164948
164947
  let index2 = glyphs.length - 1;
164949
164948
  while (index2 >= 0) {
@@ -165077,7 +165076,7 @@ var init_module2 = __esm({
165077
165076
  }
165078
165077
  getSupportedFeatures() {
165079
165078
  let features = [];
165080
- for (let chain3 of this.morx.chains) for (let feature of chain3.features) features.push([
165079
+ for (let chain5 of this.morx.chains) for (let feature of chain5.features) features.push([
165081
165080
  feature.featureType,
165082
165081
  feature.featureSetting
165083
165082
  ]);
@@ -165089,9 +165088,9 @@ var init_module2 = __esm({
165089
165088
  }
165090
165089
  generateInputCache() {
165091
165090
  this.inputCache = {};
165092
- for (let chain3 of this.morx.chains) {
165093
- let flags = chain3.defaultFlags;
165094
- for (let subtable of chain3.subtables) if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable);
165091
+ for (let chain5 of this.morx.chains) {
165092
+ let flags = chain5.defaultFlags;
165093
+ for (let subtable of chain5.subtables) if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable);
165095
165094
  }
165096
165095
  }
165097
165096
  generateInputsForSubtable(subtable) {
@@ -176106,16 +176105,16 @@ var init_tokens = __esm({
176106
176105
 
176107
176106
  // lib/theme/resolve.ts
176108
176107
  function resolveTheme(themeId, lookup, overrides2 = {}) {
176109
- const chain3 = [];
176108
+ const chain5 = [];
176110
176109
  const seen = /* @__PURE__ */ new Set();
176111
176110
  for (let t3 = lookup(themeId); t3 && !seen.has(t3.id); t3 = t3.extends ? lookup(t3.extends) : void 0) {
176112
176111
  seen.add(t3.id);
176113
- chain3.unshift(t3);
176112
+ chain5.unshift(t3);
176114
176113
  }
176115
176114
  const out = {};
176116
176115
  for (const id3 of TOKEN_IDS) out[id3] = TOKENS[id3].default;
176117
176116
  const set4 = /* @__PURE__ */ new Set();
176118
- for (const t3 of chain3) for (const [k2, v] of Object.entries(t3.tokens)) {
176117
+ for (const t3 of chain5) for (const [k2, v] of Object.entries(t3.tokens)) {
176119
176118
  out[k2] = v;
176120
176119
  set4.add(k2);
176121
176120
  }
@@ -176241,7 +176240,6 @@ var init_frame_labels = __esm({
176241
176240
  var MODE_PROFILES, isTimelineMode, FOCUS_PROFILES, MODE_LIST, FOCUS_BY_PRECEDENCE;
176242
176241
  var init_registry2 = __esm({
176243
176242
  "lib/editor/modes/registry.ts"() {
176244
- "use strict";
176245
176243
  MODE_PROFILES = {
176246
176244
  DESIGN: {
176247
176245
  id: "DESIGN",
@@ -176460,15 +176458,15 @@ function changedSince(from2, to) {
176460
176458
  return null;
176461
176459
  }
176462
176460
  function nodeIndex(build3, update3) {
176463
- const memo7 = /* @__PURE__ */ new WeakMap();
176461
+ const memo8 = /* @__PURE__ */ new WeakMap();
176464
176462
  let last3 = null;
176465
176463
  return (nodes) => {
176466
- const hit = memo7.get(nodes);
176464
+ const hit = memo8.get(nodes);
176467
176465
  if (hit !== void 0) return hit;
176468
176466
  const changed = last3 ? changedSince(last3.nodes, nodes) : null;
176469
176467
  let value3 = last3 && changed ? update3(last3.value, last3.nodes, nodes, changed) : void 0;
176470
176468
  if (value3 === void 0) value3 = build3(nodes);
176471
- memo7.set(nodes, value3);
176469
+ memo8.set(nodes, value3);
176472
176470
  last3 = { nodes, value: value3 };
176473
176471
  return value3;
176474
176472
  };
@@ -177185,17 +177183,17 @@ function follow(x2, attack, release, fps = ANALYSIS_FPS) {
177185
177183
  function seriesOf(a, spec) {
177186
177184
  const attack = Math.max(0, spec.attack ?? 0), release = Math.max(0, spec.release ?? 0);
177187
177185
  const key5 = `${spec.signal}|${spec.signal === "spectrum" ? spectrumIndex(spec.bin) : ""}|${attack}|${release}`;
177188
- let memo7 = smoothed.get(a);
177189
- if (!memo7) {
177190
- memo7 = /* @__PURE__ */ new Map();
177191
- smoothed.set(a, memo7);
177186
+ let memo8 = smoothed.get(a);
177187
+ if (!memo8) {
177188
+ memo8 = /* @__PURE__ */ new Map();
177189
+ smoothed.set(a, memo8);
177192
177190
  }
177193
- const hit = memo7.get(key5);
177191
+ const hit = memo8.get(key5);
177194
177192
  if (hit) return hit;
177195
177193
  const raw = rawSeries(a, spec);
177196
177194
  const s = attack || release ? follow(raw, attack, release, a.fps) : raw;
177197
- if (memo7.size >= MAX_SERIES_PER_FILE) memo7.clear();
177198
- memo7.set(key5, s);
177195
+ if (memo8.size >= MAX_SERIES_PER_FILE) memo8.clear();
177196
+ memo8.set(key5, s);
177199
177197
  return s;
177200
177198
  }
177201
177199
  function at(series, fps, ms3) {
@@ -177474,16 +177472,16 @@ function sampleNode(node2, t3, nodes, inputs) {
177474
177472
  return patch2 ? { ...posed2, ...patch2 } : posed2;
177475
177473
  }
177476
177474
  function motionNodes(nodes, rootId) {
177477
- let memo7 = motionMemo.get(nodes);
177478
- if (!memo7) {
177479
- memo7 = /* @__PURE__ */ new Map();
177480
- motionMemo.set(nodes, memo7);
177475
+ let memo8 = motionMemo.get(nodes);
177476
+ if (!memo8) {
177477
+ memo8 = /* @__PURE__ */ new Map();
177478
+ motionMemo.set(nodes, memo8);
177481
177479
  }
177482
- const hit = memo7.get(rootId);
177480
+ const hit = memo8.get(rootId);
177483
177481
  if (hit) return hit;
177484
177482
  const out = [];
177485
177483
  for (const id3 of animatedIds(nodes)) if (localTime(nodes, id3, rootId, 0) !== void 0) out.push(nodes[id3]);
177486
- memo7.set(rootId, out);
177484
+ memo8.set(rootId, out);
177487
177485
  return out;
177488
177486
  }
177489
177487
  function motionEnd(nodes, rootId) {
@@ -184545,7 +184543,7 @@ var init_en2 = __esm({
184545
184543
  "designPanel.goToMainComponent": "Go to main component",
184546
184544
  "designPanel.grid": "Grid",
184547
184545
  "designPanel.gridSettings": "Grid settings",
184548
- "designPanel.hexColour": "Hex colour",
184546
+ "designPanel.hexColour": "Hex color",
184549
184547
  "designPanel.horizontal": "Horizontal",
184550
184548
  "designPanel.howTheInstanceSControl": "How the instance's control steps",
184551
184549
  "designPanel.hug": "Hug",
@@ -184924,6 +184922,7 @@ var init_en2 = __esm({
184924
184922
  "edit.cropTop": "Top",
184925
184923
  "edit.crossfadeNext": "Crossfade into {name}",
184926
184924
  "edit.curve": "Curve",
184925
+ "edit.customShader": "Custom shader",
184927
184926
  "edit.cut": "Cut",
184928
184927
  "edit.db": "{value} dB",
184929
184928
  "edit.dbSilent": "\u2212\u221E dB",
@@ -184936,6 +184935,7 @@ var init_en2 = __esm({
184936
184935
  "edit.duckRun": "Duck {track} under {under}",
184937
184936
  "edit.duckTrack": "Duck",
184938
184937
  "edit.duckUnder": "Under",
184938
+ "edit.editNodes": "Edit its nodes",
184939
184939
  "edit.editScene": "Edit this scene's animation",
184940
184940
  "edit.effect.BLUR": "Blur",
184941
184941
  "edit.effect.BRIGHTNESS": "Brightness",
@@ -184971,7 +184971,7 @@ var init_en2 = __esm({
184971
184971
  "edit.effectControl.Temp": "Temperature",
184972
184972
  "edit.effectControl.Tint": "Tint",
184973
184973
  "edit.effectDown": "Move down",
184974
- "edit.effectGroup.Color": "Colour",
184974
+ "edit.effectGroup.Color": "Color",
184975
184975
  "edit.effectGroup.Filter": "Filter",
184976
184976
  "edit.effectGroup.Warp": "Warp",
184977
184977
  "edit.effects": "Effects",
@@ -185161,6 +185161,19 @@ var init_en2 = __esm({
185161
185161
  "edit.sequences": "Sequences",
185162
185162
  "edit.sequencesBin": "Sequences",
185163
185163
  "edit.sequenceSettings": "Sequence settings",
185164
+ "edit.shader.chromatic": "Chromatic aberration",
185165
+ "edit.shader.duotone": "Duotone",
185166
+ "edit.shader.glitch": "Glitch",
185167
+ "edit.shader.glow": "Glow",
185168
+ "edit.shader.halftone": "Halftone",
185169
+ "edit.shader.kaleidoscope": "Kaleidoscope",
185170
+ "edit.shader.liquid": "Liquid",
185171
+ "edit.shader.mirror": "Mirror",
185172
+ "edit.shader.sketch": "Edge glow",
185173
+ "edit.shader.soft": "Soft focus",
185174
+ "edit.shader.vhs": "VHS",
185175
+ "edit.shaders": "Shader effects",
185176
+ "edit.shadersHint": "Click one in the bin's Shader effects, or start a custom shader and build it from nodes.",
185164
185177
  "edit.showBin": "Show bin",
185165
185178
  "edit.showInspector": "Show clip inspector",
185166
185179
  "edit.showTrack": "Show track",
@@ -185429,7 +185442,7 @@ var init_en2 = __esm({
185429
185442
  "fillFlyout.spacingX": "Spacing X",
185430
185443
  "fillFlyout.spacingY": "Spacing Y",
185431
185444
  "fillFlyout.stock": "Stock",
185432
- "fillFlyout.stopColour": "Stop colour",
185445
+ "fillFlyout.stopColour": "Stop color",
185433
185446
  "fillFlyout.stops": "Stops",
185434
185447
  "fillFlyout.textureNoise": "Texture / noise",
185435
185448
  "fillFlyout.thePosterFrameIsShown": "The poster frame is shown while paused and used for SVG/PDF export.",
@@ -185749,7 +185762,7 @@ var init_en2 = __esm({
185749
185762
  "imageAdjustSection.resetThisChannel": "Reset this channel",
185750
185763
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Save current adjustments as a preset",
185751
185764
  "imageAdjustSection.tint": "Tint",
185752
- "imageAdjustSection.tintColour": "Tint colour",
185765
+ "imageAdjustSection.tintColour": "Tint color",
185753
185766
  "imageEditToolbar.altClickToPickA": "Alt-click to pick a source",
185754
185767
  "imageEditToolbar.bringTheSelectionBack": "Bring the selection back",
185755
185768
  "imageEditToolbar.bringTheWholePictureBack": "Bring the whole picture back",
@@ -185895,7 +185908,7 @@ var init_en2 = __esm({
185895
185908
  "keyInspector.howTheValueTravelsTo": "How the value travels to the next key",
185896
185909
  "keyInspector.keys": "{length} keys",
185897
185910
  "keyInspector.noKeysPicked": "No keys picked.",
185898
- "keyInspector.theKeySColour": "The key's colour",
185911
+ "keyInspector.theKeySColour": "The key's color",
185899
185912
  "keyInspector.time": "Time",
185900
185913
  "keyInspector.value": "Value",
185901
185914
  "keyInspector.whenTheFirstPickedKey": "When the first picked key plays; the others keep their distance",
@@ -186007,12 +186020,12 @@ var init_en2 = __esm({
186007
186020
  "libraryLinkChoice.unlinked": "Unlinked",
186008
186021
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Unlinked: a local copy in this file \u2014 inputs and motion kept, no link back to the library",
186009
186022
  "librarySection.clickToAddFillsA": "Click to add (fills a selected photo frame)",
186010
- "librarySwatchesPanel.colourVariablesBindTheFill": "Colour variables bind the fill, so it follows the library's updates",
186011
- "librarySwatchesPanel.noColoursMatch": "No colours match \u201C{query}\u201D",
186012
- "librarySwatchesPanel.noColoursOrPaintStyles": "No colours or paint styles in this library",
186013
- "librarySwatchesPanel.noColourStylesOrVariables": "No colour styles or variables yet. {value}",
186014
- "librarySwatchesPanel.searchLibraryColours": "Search library colours",
186015
- "librarySwatchesPanel.searchStylesAndColours": "Search styles and colours",
186023
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Color variables bind the fill, so it follows the library's updates",
186024
+ "librarySwatchesPanel.noColoursMatch": "No colors match \u201C{query}\u201D",
186025
+ "librarySwatchesPanel.noColoursOrPaintStyles": "No colors or paint styles in this library",
186026
+ "librarySwatchesPanel.noColourStylesOrVariables": "No color styles or variables yet. {value}",
186027
+ "librarySwatchesPanel.searchLibraryColours": "Search library colors",
186028
+ "librarySwatchesPanel.searchStylesAndColours": "Search styles and colors",
186016
186029
  "linkFields.anchor": "Layer on this page",
186017
186030
  "linkFields.anchorOption": "{name} (#{anchor})",
186018
186031
  "linkFields.choose": "Choose\u2026",
@@ -186237,7 +186250,7 @@ var init_en2 = __esm({
186237
186250
  "modifierList.noneYetABehaviourMoves": "None yet. A behaviour moves the value on its own \u2014 a spin needs no keys at all.",
186238
186251
  "modifierList.remove": "Remove {toLowerCase}",
186239
186252
  "modifierList.removeTheKeyHere": "Remove the {toLowerCase} key here",
186240
- "modifierList.theColourItMixesToward": "The colour it mixes toward as the signal rises",
186253
+ "modifierList.theColourItMixesToward": "The color it mixes toward as the signal rises",
186241
186254
  "motionComponentSection.componentInputs": "Component inputs",
186242
186255
  "motionComponentSection.motion": "Motion",
186243
186256
  "motionComponentSection.notUsedHere": "Not used here",
@@ -187517,7 +187530,7 @@ var init_en2 = __esm({
187517
187530
  "settingsDialog.accentSky": "Sky",
187518
187531
  "settingsDialog.accentSystem": "System",
187519
187532
  "settingsDialog.accentSystemBrowserBlue": "System: this browser shares only its standard blue with web pages. Checkboxes and sliders follow your system accent where the browser allows; the PopCraft app uses it everywhere.",
187520
- "settingsDialog.accentSystemUnavailable": "System: this device does not share its accent colour, so Lavender is used.",
187533
+ "settingsDialog.accentSystemUnavailable": "System: this device does not share its accent color, so Lavender is used.",
187521
187534
  "settingsDialog.accentTeal": "Teal",
187522
187535
  "settingsDialog.account": "Account",
187523
187536
  "settingsDialog.contrast": "Contrast",
@@ -187959,7 +187972,7 @@ var init_en2 = __esm({
187959
187972
  "textAnimatorPanel.theRandomOrderSSeed": "The random order's seed",
187960
187973
  "textAnimatorPanel.thousandsSeparator": "Thousands separator",
187961
187974
  "textAnimatorPanel.tint": "Tint",
187962
- "textAnimatorPanel.tintTheColourAFully": "Tint: the colour a fully moved unit takes",
187975
+ "textAnimatorPanel.tintTheColourAFully": "Tint: the color a fully moved unit takes",
187963
187976
  "textAnimatorPanel.to": "To",
187964
187977
  "textAnimatorPanel.turn": "Turn",
187965
187978
  "textAnimatorPanel.typewriter": "Typewriter",
@@ -190211,6 +190224,7 @@ var require_es = __commonJS({
190211
190224
  "edit.cropTop": "Superior",
190212
190225
  "edit.crossfadeNext": "Fundido encadenado a {name}",
190213
190226
  "edit.curve": "Curva",
190227
+ "edit.customShader": "Shader personalizado",
190214
190228
  "edit.cut": "Cortar",
190215
190229
  "edit.db": "{value} dB",
190216
190230
  "edit.dbSilent": "\u2212\u221E dB",
@@ -190223,6 +190237,7 @@ var require_es = __commonJS({
190223
190237
  "edit.duckRun": "Atenuar {track} bajo {under}",
190224
190238
  "edit.duckTrack": "Atenuar",
190225
190239
  "edit.duckUnder": "Bajo",
190240
+ "edit.editNodes": "Editar sus nodos",
190226
190241
  "edit.editScene": "Editar la animaci\xF3n de esta escena",
190227
190242
  "edit.effect.BLUR": "Desenfoque",
190228
190243
  "edit.effect.BRIGHTNESS": "Brillo",
@@ -190448,6 +190463,19 @@ var require_es = __commonJS({
190448
190463
  "edit.sequences": "Secuencias",
190449
190464
  "edit.sequencesBin": "Secuencias",
190450
190465
  "edit.sequenceSettings": "Ajustes de secuencia",
190466
+ "edit.shader.chromatic": "Aberraci\xF3n crom\xE1tica",
190467
+ "edit.shader.duotone": "Duotono",
190468
+ "edit.shader.glitch": "Glitch",
190469
+ "edit.shader.glow": "Resplandor",
190470
+ "edit.shader.halftone": "Medio tono",
190471
+ "edit.shader.kaleidoscope": "Caleidoscopio",
190472
+ "edit.shader.liquid": "L\xEDquido",
190473
+ "edit.shader.mirror": "Espejo",
190474
+ "edit.shader.sketch": "Resplandor de borde",
190475
+ "edit.shader.soft": "Enfoque suave",
190476
+ "edit.shader.vhs": "VHS",
190477
+ "edit.shaders": "Efectos de shader",
190478
+ "edit.shadersHint": "Haz clic en uno de los efectos de shader de la bandeja, o inicia un shader personalizado y constr\xFAyelo a partir de nodos.",
190451
190479
  "edit.showBin": "Mostrar bandeja",
190452
190480
  "edit.showInspector": "Mostrar inspector de clip",
190453
190481
  "edit.showTrack": "Mostrar pista",
@@ -191036,7 +191064,7 @@ var require_es = __commonJS({
191036
191064
  "imageAdjustSection.resetThisChannel": "Restablecer este canal",
191037
191065
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Guardar ajustes actuales como preajuste",
191038
191066
  "imageAdjustSection.tint": "Tinte",
191039
- "imageAdjustSection.tintColour": "Color del tinte",
191067
+ "imageAdjustSection.tintColour": "Color de tinte",
191040
191068
  "imageEditToolbar.altClickToPickA": "Alt-clic para seleccionar un origen",
191041
191069
  "imageEditToolbar.bringTheSelectionBack": "Recuperar la selecci\xF3n",
191042
191070
  "imageEditToolbar.bringTheWholePictureBack": "Recuperar la imagen completa",
@@ -191294,11 +191322,11 @@ var require_es = __commonJS({
191294
191322
  "libraryLinkChoice.unlinked": "Desenlazado",
191295
191323
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Desenlazado: una copia local en este archivo \u2014 entradas y movimiento conservados, sin enlace a la biblioteca",
191296
191324
  "librarySection.clickToAddFillsA": "Haz clic para a\xF1adir (rellena un marco de foto seleccionado)",
191297
- "librarySwatchesPanel.colourVariablesBindTheFill": "Las variables de color vinculan el relleno, para que siga las actualizaciones de la biblioteca",
191325
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Las variables de color vinculan el relleno, por lo que sigue las actualizaciones de la biblioteca.",
191298
191326
  "librarySwatchesPanel.noColoursMatch": "Ning\xFAn color coincide con \u201C{query}\u201D",
191299
- "librarySwatchesPanel.noColoursOrPaintStyles": "No hay colores o estilos de pintura en esta biblioteca",
191327
+ "librarySwatchesPanel.noColoursOrPaintStyles": "No hay colores ni estilos de pintura en esta biblioteca.",
191300
191328
  "librarySwatchesPanel.noColourStylesOrVariables": "A\xFAn no hay estilos de color o variables. {value}",
191301
- "librarySwatchesPanel.searchLibraryColours": "Buscar colores de biblioteca",
191329
+ "librarySwatchesPanel.searchLibraryColours": "Buscar colores de la biblioteca",
191302
191330
  "librarySwatchesPanel.searchStylesAndColours": "Buscar estilos y colores",
191303
191331
  "linkFields.anchor": "Capa en esta p\xE1gina",
191304
191332
  "linkFields.anchorOption": "{name} (#{anchor})",
@@ -191524,7 +191552,7 @@ var require_es = __commonJS({
191524
191552
  "modifierList.noneYetABehaviourMoves": "Ninguno todav\xEDa. Un comportamiento mueve el valor por s\xED solo \u2014 un giro no necesita ninguna clave.",
191525
191553
  "modifierList.remove": "Eliminar {toLowerCase}",
191526
191554
  "modifierList.removeTheKeyHere": "Eliminar la clave {toLowerCase} aqu\xED",
191527
- "modifierList.theColourItMixesToward": "El color hacia el que se mezcla a medida que la se\xF1al aumenta",
191555
+ "modifierList.theColourItMixesToward": "El color hacia el que se mezcla a medida que la se\xF1al aumenta.",
191528
191556
  "motionComponentSection.componentInputs": "Entradas del componente",
191529
191557
  "motionComponentSection.motion": "Movimiento",
191530
191558
  "motionComponentSection.notUsedHere": "No se usa aqu\xED",
@@ -192804,7 +192832,7 @@ var require_es = __commonJS({
192804
192832
  "settingsDialog.accentSky": "Cielo",
192805
192833
  "settingsDialog.accentSystem": "Sistema",
192806
192834
  "settingsDialog.accentSystemBrowserBlue": "Sistema: este navegador solo comparte su azul est\xE1ndar con las p\xE1ginas web. Las casillas de verificaci\xF3n y los controles deslizantes siguen el color de acento de su sistema donde el navegador lo permite; la aplicaci\xF3n PopCraft lo usa en todas partes.",
192807
- "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo no comparte su color de acento, por lo que se usa Lavanda.",
192835
+ "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo no comparte su color de \xE9nfasis, por lo que se usa Lavanda.",
192808
192836
  "settingsDialog.accentTeal": "Verde azulado",
192809
192837
  "settingsDialog.account": "Cuenta",
192810
192838
  "settingsDialog.contrast": "Contraste",
@@ -193246,7 +193274,7 @@ var require_es = __commonJS({
193246
193274
  "textAnimatorPanel.theRandomOrderSSeed": "La semilla del orden aleatorio",
193247
193275
  "textAnimatorPanel.thousandsSeparator": "Separador de miles",
193248
193276
  "textAnimatorPanel.tint": "Tinte",
193249
- "textAnimatorPanel.tintTheColourAFully": "Tinte: el color que toma una unidad completamente movida",
193277
+ "textAnimatorPanel.tintTheColourAFully": "Tinte: el color que adquiere una unidad completamente movida.",
193250
193278
  "textAnimatorPanel.to": "A",
193251
193279
  "textAnimatorPanel.turn": "Giro",
193252
193280
  "textAnimatorPanel.typewriter": "M\xE1quina de escribir",
@@ -195498,6 +195526,7 @@ var require_fr = __commonJS({
195498
195526
  "edit.cropTop": "Haut",
195499
195527
  "edit.crossfadeNext": "Fondu encha\xEEn\xE9 vers {name}",
195500
195528
  "edit.curve": "Courbe",
195529
+ "edit.customShader": "Shader personnalis\xE9",
195501
195530
  "edit.cut": "Couper",
195502
195531
  "edit.db": "{value} dB",
195503
195532
  "edit.dbSilent": "\u2212\u221E dB",
@@ -195510,6 +195539,7 @@ var require_fr = __commonJS({
195510
195539
  "edit.duckRun": "Att\xE9nuer {track} sous {under}",
195511
195540
  "edit.duckTrack": "Att\xE9nuer",
195512
195541
  "edit.duckUnder": "Sous",
195542
+ "edit.editNodes": "Modifier ses n\u0153uds",
195513
195543
  "edit.editScene": "Modifier l\u2019animation de cette sc\xE8ne",
195514
195544
  "edit.effect.BLUR": "Flou",
195515
195545
  "edit.effect.BRIGHTNESS": "Luminosit\xE9",
@@ -195735,6 +195765,19 @@ var require_fr = __commonJS({
195735
195765
  "edit.sequences": "S\xE9quences",
195736
195766
  "edit.sequencesBin": "S\xE9quences",
195737
195767
  "edit.sequenceSettings": "Param\xE8tres de s\xE9quence",
195768
+ "edit.shader.chromatic": "Aberration chromatique",
195769
+ "edit.shader.duotone": "Duoton",
195770
+ "edit.shader.glitch": "Glitch",
195771
+ "edit.shader.glow": "Lueur",
195772
+ "edit.shader.halftone": "Demi-teinte",
195773
+ "edit.shader.kaleidoscope": "Kal\xE9idoscope",
195774
+ "edit.shader.liquid": "Liquide",
195775
+ "edit.shader.mirror": "Miroir",
195776
+ "edit.shader.sketch": "Lueur de bord",
195777
+ "edit.shader.soft": "Flou artistique",
195778
+ "edit.shader.vhs": "VHS",
195779
+ "edit.shaders": "Effets de shader",
195780
+ "edit.shadersHint": "Cliquez sur l\u2019un des effets de shader dans le panneau, ou cr\xE9ez un shader personnalis\xE9 et construisez-le \xE0 partir de n\u0153uds.",
195738
195781
  "edit.showBin": "Afficher le chutier",
195739
195782
  "edit.showInspector": "Afficher l\u2019inspecteur de clip",
195740
195783
  "edit.showTrack": "Afficher la piste",
@@ -196003,7 +196046,7 @@ var require_fr = __commonJS({
196003
196046
  "fillFlyout.spacingX": "Espacement X",
196004
196047
  "fillFlyout.spacingY": "Espacement Y",
196005
196048
  "fillFlyout.stock": "Stock",
196006
- "fillFlyout.stopColour": "Couleur du point",
196049
+ "fillFlyout.stopColour": "Couleur d\u2019arr\xEAt",
196007
196050
  "fillFlyout.stops": "Points",
196008
196051
  "fillFlyout.textureNoise": "Texture / bruit",
196009
196052
  "fillFlyout.thePosterFrameIsShown": "L\u2019image d\u2019affiche est affich\xE9e en pause et utilis\xE9e pour l\u2019exportation SVG/PDF.",
@@ -196323,7 +196366,7 @@ var require_fr = __commonJS({
196323
196366
  "imageAdjustSection.resetThisChannel": "R\xE9initialiser ce canal",
196324
196367
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Enregistrer les r\xE9glages actuels comme pr\xE9r\xE9glage",
196325
196368
  "imageAdjustSection.tint": "Teinte",
196326
- "imageAdjustSection.tintColour": "Couleur de la teinte",
196369
+ "imageAdjustSection.tintColour": "Couleur de teinte",
196327
196370
  "imageEditToolbar.altClickToPickA": "Alt-clic pour choisir une source",
196328
196371
  "imageEditToolbar.bringTheSelectionBack": "R\xE9tablir la s\xE9lection",
196329
196372
  "imageEditToolbar.bringTheWholePictureBack": "R\xE9tablir l\u2019image enti\xE8re",
@@ -196581,7 +196624,7 @@ var require_fr = __commonJS({
196581
196624
  "libraryLinkChoice.unlinked": "D\xE9li\xE9",
196582
196625
  "libraryLinkChoice.unlinkedALocalCopyInThis": "D\xE9li\xE9 : une copie locale dans ce fichier \u2014 entr\xE9es et mouvement conserv\xE9s, pas de lien vers la biblioth\xE8que",
196583
196626
  "librarySection.clickToAddFillsA": "Cliquer pour ajouter (remplit un cadre photo s\xE9lectionn\xE9)",
196584
- "librarySwatchesPanel.colourVariablesBindTheFill": "Les variables de couleur lient le remplissage, de sorte qu\u2019il suit les mises \xE0 jour de la biblioth\xE8que",
196627
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Les variables de couleur lient le remplissage, il suit donc les mises \xE0 jour de la biblioth\xE8que",
196585
196628
  "librarySwatchesPanel.noColoursMatch": "Aucune couleur ne correspond \xE0 \xAB {query} \xBB",
196586
196629
  "librarySwatchesPanel.noColoursOrPaintStyles": "Aucune couleur ou style de peinture dans cette biblioth\xE8que",
196587
196630
  "librarySwatchesPanel.noColourStylesOrVariables": "Aucun style de couleur ou variable pour l\u2019instant. {value}",
@@ -198091,7 +198134,7 @@ var require_fr = __commonJS({
198091
198134
  "settingsDialog.accentSky": "Ciel",
198092
198135
  "settingsDialog.accentSystem": "Syst\xE8me",
198093
198136
  "settingsDialog.accentSystemBrowserBlue": "Syst\xE8me : ce navigateur ne partage que son bleu standard avec les pages web. Les cases \xE0 cocher et les curseurs suivent la couleur d\u2019accentuation de votre syst\xE8me l\xE0 o\xF9 le navigateur le permet ; l\u2019application PopCraft l\u2019utilise partout.",
198094
- "settingsDialog.accentSystemUnavailable": "Syst\xE8me : cet appareil ne partage pas sa couleur d\u2019accentuation, la Lavande est donc utilis\xE9e.",
198137
+ "settingsDialog.accentSystemUnavailable": "Syst\xE8me : cet appareil ne partage pas sa couleur d\u2019accentuation, le Lavande est donc utilis\xE9.",
198095
198138
  "settingsDialog.accentTeal": "Sarcelle",
198096
198139
  "settingsDialog.account": "Compte",
198097
198140
  "settingsDialog.contrast": "Contraste",
@@ -200785,6 +200828,7 @@ var require_de = __commonJS({
200785
200828
  "edit.cropTop": "Oben",
200786
200829
  "edit.crossfadeNext": "\xDCberblenden in {name}",
200787
200830
  "edit.curve": "Kurve",
200831
+ "edit.customShader": "Benutzerdefinierter Shader",
200788
200832
  "edit.cut": "Ausschneiden",
200789
200833
  "edit.db": "{value} dB",
200790
200834
  "edit.dbSilent": "\u2212\u221E dB",
@@ -200797,6 +200841,7 @@ var require_de = __commonJS({
200797
200841
  "edit.duckRun": "{track} unter {under} absenken",
200798
200842
  "edit.duckTrack": "Absenken",
200799
200843
  "edit.duckUnder": "Unter",
200844
+ "edit.editNodes": "Knoten bearbeiten",
200800
200845
  "edit.editScene": "Animation dieser Szene bearbeiten",
200801
200846
  "edit.effect.BLUR": "Weichzeichnen",
200802
200847
  "edit.effect.BRIGHTNESS": "Helligkeit",
@@ -201022,6 +201067,19 @@ var require_de = __commonJS({
201022
201067
  "edit.sequences": "Sequenzen",
201023
201068
  "edit.sequencesBin": "Sequenzen",
201024
201069
  "edit.sequenceSettings": "Sequenzeinstellungen",
201070
+ "edit.shader.chromatic": "Chromatische Aberration",
201071
+ "edit.shader.duotone": "Duplex",
201072
+ "edit.shader.glitch": "Glitch",
201073
+ "edit.shader.glow": "Gl\xFChen",
201074
+ "edit.shader.halftone": "Halbton",
201075
+ "edit.shader.kaleidoscope": "Kaleidoskop",
201076
+ "edit.shader.liquid": "Fl\xFCssigkeit",
201077
+ "edit.shader.mirror": "Spiegel",
201078
+ "edit.shader.sketch": "Kantenglanz",
201079
+ "edit.shader.soft": "Weichzeichner",
201080
+ "edit.shader.vhs": "VHS",
201081
+ "edit.shaders": "Shader-Effekte",
201082
+ "edit.shadersHint": "Klicke auf einen in den Shader-Effekten der Ablage, oder starte einen benutzerdefinierten Shader und baue ihn aus Knoten auf.",
201025
201083
  "edit.showBin": "Ablage anzeigen",
201026
201084
  "edit.showInspector": "Clip-Inspektor anzeigen",
201027
201085
  "edit.showTrack": "Spur anzeigen",
@@ -201610,7 +201668,7 @@ var require_de = __commonJS({
201610
201668
  "imageAdjustSection.resetThisChannel": "Diesen Kanal zur\xFCcksetzen",
201611
201669
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Aktuelle Anpassungen als Voreinstellung speichern",
201612
201670
  "imageAdjustSection.tint": "Farbton",
201613
- "imageAdjustSection.tintColour": "T\xF6nungsfarbe",
201671
+ "imageAdjustSection.tintColour": "Einf\xE4rbefarbe",
201614
201672
  "imageEditToolbar.altClickToPickA": "Alt-Klick, um eine Quelle auszuw\xE4hlen",
201615
201673
  "imageEditToolbar.bringTheSelectionBack": "Auswahl zur\xFCckholen",
201616
201674
  "imageEditToolbar.bringTheWholePictureBack": "Ganzes Bild zur\xFCckholen",
@@ -201756,7 +201814,7 @@ var require_de = __commonJS({
201756
201814
  "keyInspector.howTheValueTravelsTo": "Wie der Wert zum n\xE4chsten Key \xFCbergeht",
201757
201815
  "keyInspector.keys": "{length} Keys",
201758
201816
  "keyInspector.noKeysPicked": "Keine Keys ausgew\xE4hlt.",
201759
- "keyInspector.theKeySColour": "Die Farbe des Keys",
201817
+ "keyInspector.theKeySColour": "Die Farbe des Schl\xFCssels",
201760
201818
  "keyInspector.time": "Zeit",
201761
201819
  "keyInspector.value": "Wert",
201762
201820
  "keyInspector.whenTheFirstPickedKey": "Wann der erste ausgew\xE4hlte Key abgespielt wird; die anderen behalten ihren Abstand bei",
@@ -202098,7 +202156,7 @@ var require_de = __commonJS({
202098
202156
  "modifierList.noneYetABehaviourMoves": "Noch keine. Ein Verhalten bewegt den Wert von selbst \u2013 eine Drehung ben\xF6tigt \xFCberhaupt keine Keys.",
202099
202157
  "modifierList.remove": "{toLowerCase} entfernen",
202100
202158
  "modifierList.removeTheKeyHere": "Den {toLowerCase}-Key hier entfernen",
202101
- "modifierList.theColourItMixesToward": "Die Farbe, zu der es sich mischt, wenn das Signal ansteigt",
202159
+ "modifierList.theColourItMixesToward": "Die Farbe, zu der es sich mischt, wenn das Signal steigt",
202102
202160
  "motionComponentSection.componentInputs": "Komponenten-Inputs",
202103
202161
  "motionComponentSection.motion": "Bewegung",
202104
202162
  "motionComponentSection.notUsedHere": "Hier nicht verwendet",
@@ -206072,6 +206130,7 @@ var require_it = __commonJS({
206072
206130
  "edit.cropTop": "Superiore",
206073
206131
  "edit.crossfadeNext": "Dissolvenza incrociata in {name}",
206074
206132
  "edit.curve": "Curva",
206133
+ "edit.customShader": "Shader personalizzato",
206075
206134
  "edit.cut": "Taglia",
206076
206135
  "edit.db": "{value} dB",
206077
206136
  "edit.dbSilent": "\u2212\u221E dB",
@@ -206084,6 +206143,7 @@ var require_it = __commonJS({
206084
206143
  "edit.duckRun": "Attenua {track} sotto {under}",
206085
206144
  "edit.duckTrack": "Attenua",
206086
206145
  "edit.duckUnder": "Sotto",
206146
+ "edit.editNodes": "Modifica i suoi nodi",
206087
206147
  "edit.editScene": "Modifica l\u2019animazione di questa scena",
206088
206148
  "edit.effect.BLUR": "Sfocatura",
206089
206149
  "edit.effect.BRIGHTNESS": "Luminosit\xE0",
@@ -206309,6 +206369,19 @@ var require_it = __commonJS({
206309
206369
  "edit.sequences": "Sequenze",
206310
206370
  "edit.sequencesBin": "Sequenze",
206311
206371
  "edit.sequenceSettings": "Impostazioni sequenza",
206372
+ "edit.shader.chromatic": "Aberrazione cromatica",
206373
+ "edit.shader.duotone": "Bicolore",
206374
+ "edit.shader.glitch": "Glitch",
206375
+ "edit.shader.glow": "Bagliore",
206376
+ "edit.shader.halftone": "Mezzatinta",
206377
+ "edit.shader.kaleidoscope": "Caleidoscopio",
206378
+ "edit.shader.liquid": "Liquido",
206379
+ "edit.shader.mirror": "Specchio",
206380
+ "edit.shader.sketch": "Bagliore bordi",
206381
+ "edit.shader.soft": "Messa a fuoco morbida",
206382
+ "edit.shader.vhs": "VHS",
206383
+ "edit.shaders": "Effetti shader",
206384
+ "edit.shadersHint": "Fai clic su uno degli effetti shader nel pannello, oppure avvia uno shader personalizzato e crealo dai nodi.",
206312
206385
  "edit.showBin": "Mostra cestino",
206313
206386
  "edit.showInspector": "Mostra ispettore clip",
206314
206387
  "edit.showTrack": "Mostra traccia",
@@ -206577,7 +206650,7 @@ var require_it = __commonJS({
206577
206650
  "fillFlyout.spacingX": "Spaziatura X",
206578
206651
  "fillFlyout.spacingY": "Spaziatura Y",
206579
206652
  "fillFlyout.stock": "Stock",
206580
- "fillFlyout.stopColour": "Colore stop",
206653
+ "fillFlyout.stopColour": "Colore di stop",
206581
206654
  "fillFlyout.stops": "Stop",
206582
206655
  "fillFlyout.textureNoise": "Texture / rumore",
206583
206656
  "fillFlyout.thePosterFrameIsShown": "Il fotogramma poster viene mostrato in pausa e usato per l\u2019esportazione SVG/PDF.",
@@ -207043,7 +207116,7 @@ var require_it = __commonJS({
207043
207116
  "keyInspector.howTheValueTravelsTo": "Come il valore si sposta al fotogramma chiave successivo",
207044
207117
  "keyInspector.keys": "{length, plural, one {# fotogramma chiave} other {# fotogrammi chiave}}",
207045
207118
  "keyInspector.noKeysPicked": "Nessun fotogramma chiave selezionato.",
207046
- "keyInspector.theKeySColour": "Colore del fotogramma chiave",
207119
+ "keyInspector.theKeySColour": "Il colore della chiave",
207047
207120
  "keyInspector.time": "Tempo",
207048
207121
  "keyInspector.value": "Valore",
207049
207122
  "keyInspector.whenTheFirstPickedKey": "Quando il primo fotogramma chiave selezionato viene riprodotto; gli altri mantengono la loro distanza",
@@ -207155,7 +207228,7 @@ var require_it = __commonJS({
207155
207228
  "libraryLinkChoice.unlinked": "Scollegato",
207156
207229
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Scollegato: una copia locale in questo file \u2014 input e movimento mantenuti, nessun collegamento alla libreria",
207157
207230
  "librarySection.clickToAddFillsA": "Clicca per aggiungere (riempie una cornice foto selezionata)",
207158
- "librarySwatchesPanel.colourVariablesBindTheFill": "Le variabili colore legano il riempimento, quindi segue gli aggiornamenti della libreria",
207231
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Le variabili colore collegano il riempimento, in modo che segua gli aggiornamenti della libreria",
207159
207232
  "librarySwatchesPanel.noColoursMatch": "Nessun colore corrisponde a \u201C{query}\u201D",
207160
207233
  "librarySwatchesPanel.noColoursOrPaintStyles": "Nessun colore o stile di pittura in questa libreria",
207161
207234
  "librarySwatchesPanel.noColourStylesOrVariables": "Nessuno stile colore o variabile ancora. {value}",
@@ -208665,7 +208738,7 @@ var require_it = __commonJS({
208665
208738
  "settingsDialog.accentSky": "Cielo",
208666
208739
  "settingsDialog.accentSystem": "Sistema",
208667
208740
  "settingsDialog.accentSystemBrowserBlue": "Sistema: questo browser condivide solo il suo blu standard con le pagine web. Caselle di controllo e cursori seguono il colore principale del sistema dove il browser lo consente; l\u2019app PopCraft lo usa ovunque.",
208668
- "settingsDialog.accentSystemUnavailable": "Sistema: questo dispositivo non condivide il suo colore accento, quindi viene usato Lavanda.",
208741
+ "settingsDialog.accentSystemUnavailable": "Sistema: questo dispositivo non condivide il suo colore accento, quindi viene usato il Lavanda.",
208669
208742
  "settingsDialog.accentTeal": "Verde acqua",
208670
208743
  "settingsDialog.account": "Account",
208671
208744
  "settingsDialog.contrast": "Contrasto",
@@ -211359,6 +211432,7 @@ var require_pt_BR = __commonJS({
211359
211432
  "edit.cropTop": "Superior",
211360
211433
  "edit.crossfadeNext": "Transi\xE7\xE3o para {name}",
211361
211434
  "edit.curve": "Curva",
211435
+ "edit.customShader": "Shader personalizado",
211362
211436
  "edit.cut": "Cortar",
211363
211437
  "edit.db": "{value} dB",
211364
211438
  "edit.dbSilent": "\u2212\u221E dB",
@@ -211371,6 +211445,7 @@ var require_pt_BR = __commonJS({
211371
211445
  "edit.duckRun": "Atenuar {track} sob {under}",
211372
211446
  "edit.duckTrack": "Atenuar",
211373
211447
  "edit.duckUnder": "Sob",
211448
+ "edit.editNodes": "Editar seus n\xF3s",
211374
211449
  "edit.editScene": "Editar anima\xE7\xE3o desta cena",
211375
211450
  "edit.effect.BLUR": "Desfoque",
211376
211451
  "edit.effect.BRIGHTNESS": "Brilho",
@@ -211596,6 +211671,19 @@ var require_pt_BR = __commonJS({
211596
211671
  "edit.sequences": "Sequ\xEAncias",
211597
211672
  "edit.sequencesBin": "Sequ\xEAncias",
211598
211673
  "edit.sequenceSettings": "Configura\xE7\xF5es da sequ\xEAncia",
211674
+ "edit.shader.chromatic": "Aberra\xE7\xE3o crom\xE1tica",
211675
+ "edit.shader.duotone": "Duot\xF4nico",
211676
+ "edit.shader.glitch": "Glitch",
211677
+ "edit.shader.glow": "Brilho",
211678
+ "edit.shader.halftone": "Meio-tom",
211679
+ "edit.shader.kaleidoscope": "Caleidosc\xF3pio",
211680
+ "edit.shader.liquid": "L\xEDquido",
211681
+ "edit.shader.mirror": "Espelho",
211682
+ "edit.shader.sketch": "Brilho de borda",
211683
+ "edit.shader.soft": "Foco suave",
211684
+ "edit.shader.vhs": "VHS",
211685
+ "edit.shaders": "Efeitos de shader",
211686
+ "edit.shadersHint": "Clique em um dos Efeitos de shader na biblioteca, ou inicie um shader personalizado e construa-o a partir de n\xF3s.",
211599
211687
  "edit.showBin": "Mostrar compartimento",
211600
211688
  "edit.showInspector": "Mostrar inspetor de clipe",
211601
211689
  "edit.showTrack": "Mostrar trilha",
@@ -211864,7 +211952,7 @@ var require_pt_BR = __commonJS({
211864
211952
  "fillFlyout.spacingX": "Espa\xE7amento X",
211865
211953
  "fillFlyout.spacingY": "Espa\xE7amento Y",
211866
211954
  "fillFlyout.stock": "Banco",
211867
- "fillFlyout.stopColour": "Cor da parada",
211955
+ "fillFlyout.stopColour": "Cor de parada",
211868
211956
  "fillFlyout.stops": "Paradas",
211869
211957
  "fillFlyout.textureNoise": "Textura / ru\xEDdo",
211870
211958
  "fillFlyout.thePosterFrameIsShown": "O quadro de p\xF4ster \xE9 exibido quando pausado e usado para exporta\xE7\xE3o SVG/PDF.",
@@ -212184,7 +212272,7 @@ var require_pt_BR = __commonJS({
212184
212272
  "imageAdjustSection.resetThisChannel": "Redefinir este canal",
212185
212273
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Salvar ajustes atuais como uma predefini\xE7\xE3o",
212186
212274
  "imageAdjustSection.tint": "Matiz",
212187
- "imageAdjustSection.tintColour": "Cor do matiz",
212275
+ "imageAdjustSection.tintColour": "Cor de tonalidade",
212188
212276
  "imageEditToolbar.altClickToPickA": "Alt+clique para selecionar uma origem",
212189
212277
  "imageEditToolbar.bringTheSelectionBack": "Trazer a sele\xE7\xE3o de volta",
212190
212278
  "imageEditToolbar.bringTheWholePictureBack": "Trazer a imagem inteira de volta",
@@ -213952,7 +214040,7 @@ var require_pt_BR = __commonJS({
213952
214040
  "settingsDialog.accentSky": "Azul-celeste",
213953
214041
  "settingsDialog.accentSystem": "Sistema",
213954
214042
  "settingsDialog.accentSystemBrowserBlue": "Sistema: este navegador compartilha apenas seu azul padr\xE3o com p\xE1ginas web. Caixas de sele\xE7\xE3o e controles deslizantes seguem o destaque do seu sistema onde o navegador permite; o aplicativo PopCraft o usa em todos os lugares.",
213955
- "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo n\xE3o compartilha sua cor de destaque, ent\xE3o Lavanda \xE9 usado.",
214043
+ "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo n\xE3o compartilha sua cor de destaque, ent\xE3o Lavanda \xE9 usada.",
213956
214044
  "settingsDialog.accentTeal": "Verde-azulado",
213957
214045
  "settingsDialog.account": "Conta",
213958
214046
  "settingsDialog.contrast": "Contraste",
@@ -214394,7 +214482,7 @@ var require_pt_BR = __commonJS({
214394
214482
  "textAnimatorPanel.theRandomOrderSSeed": "A semente da ordem aleat\xF3ria",
214395
214483
  "textAnimatorPanel.thousandsSeparator": "Separador de milhares",
214396
214484
  "textAnimatorPanel.tint": "Matiz",
214397
- "textAnimatorPanel.tintTheColourAFully": "Matiz: a cor que uma unidade totalmente movida assume",
214485
+ "textAnimatorPanel.tintTheColourAFully": "Tonalidade: a cor que uma unidade totalmente movida assume",
214398
214486
  "textAnimatorPanel.to": "Para",
214399
214487
  "textAnimatorPanel.turn": "Girar",
214400
214488
  "textAnimatorPanel.typewriter": "M\xE1quina de escrever",
@@ -216267,7 +216355,7 @@ var require_ja = __commonJS({
216267
216355
  "designPanel.goToMainComponent": "\u30E1\u30A4\u30F3\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3078\u79FB\u52D5",
216268
216356
  "designPanel.grid": "\u30B0\u30EA\u30C3\u30C9",
216269
216357
  "designPanel.gridSettings": "\u30B0\u30EA\u30C3\u30C9\u8A2D\u5B9A",
216270
- "designPanel.hexColour": "HEX\u30AB\u30E9\u30FC",
216358
+ "designPanel.hexColour": "16\u9032\u6570\u30AB\u30E9\u30FC",
216271
216359
  "designPanel.horizontal": "\u6C34\u5E73",
216272
216360
  "designPanel.howTheInstanceSControl": "\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u306E\u5236\u5FA1\u30B9\u30C6\u30C3\u30D7",
216273
216361
  "designPanel.hug": "\u30CF\u30B0",
@@ -216646,6 +216734,7 @@ var require_ja = __commonJS({
216646
216734
  "edit.cropTop": "\u4E0A",
216647
216735
  "edit.crossfadeNext": "{name} \u306B\u30AF\u30ED\u30B9\u30D5\u30A7\u30FC\u30C9",
216648
216736
  "edit.curve": "\u30AB\u30FC\u30D6",
216737
+ "edit.customShader": "\u30AB\u30B9\u30BF\u30E0\u30B7\u30A7\u30FC\u30C0\u30FC",
216649
216738
  "edit.cut": "\u30AB\u30C3\u30C8",
216650
216739
  "edit.db": "{value} dB",
216651
216740
  "edit.dbSilent": "\u2212\u221E dB",
@@ -216658,6 +216747,7 @@ var require_ja = __commonJS({
216658
216747
  "edit.duckRun": "{track} \u3092 {under} \u306E\u4E0B\u306B\u30C0\u30C3\u30AD\u30F3\u30B0",
216659
216748
  "edit.duckTrack": "\u30C0\u30C3\u30AD\u30F3\u30B0",
216660
216749
  "edit.duckUnder": "\u4E0B",
216750
+ "edit.editNodes": "\u30CE\u30FC\u30C9\u3092\u7DE8\u96C6",
216661
216751
  "edit.editScene": "\u3053\u306E\u30B7\u30FC\u30F3\u306E\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u3092\u7DE8\u96C6",
216662
216752
  "edit.effect.BLUR": "\u307C\u304B\u3057",
216663
216753
  "edit.effect.BRIGHTNESS": "\u660E\u308B\u3055",
@@ -216883,6 +216973,19 @@ var require_ja = __commonJS({
216883
216973
  "edit.sequences": "\u30B7\u30FC\u30B1\u30F3\u30B9",
216884
216974
  "edit.sequencesBin": "\u30B7\u30FC\u30B1\u30F3\u30B9",
216885
216975
  "edit.sequenceSettings": "\u30B7\u30FC\u30B1\u30F3\u30B9\u8A2D\u5B9A",
216976
+ "edit.shader.chromatic": "\u8272\u53CE\u5DEE",
216977
+ "edit.shader.duotone": "\u30C7\u30E5\u30AA\u30C8\u30FC\u30F3",
216978
+ "edit.shader.glitch": "\u30B0\u30EA\u30C3\u30C1",
216979
+ "edit.shader.glow": "\u30B0\u30ED\u30FC",
216980
+ "edit.shader.halftone": "\u30CF\u30FC\u30D5\u30C8\u30FC\u30F3",
216981
+ "edit.shader.kaleidoscope": "\u30AB\u30EC\u30A4\u30C9\u30B9\u30B3\u30FC\u30D7",
216982
+ "edit.shader.liquid": "\u30EA\u30AD\u30C3\u30C9",
216983
+ "edit.shader.mirror": "\u30DF\u30E9\u30FC",
216984
+ "edit.shader.sketch": "\u30A8\u30C3\u30B8\u30B0\u30ED\u30FC",
216985
+ "edit.shader.soft": "\u30BD\u30D5\u30C8\u30D5\u30A9\u30FC\u30AB\u30B9",
216986
+ "edit.shader.vhs": "VHS",
216987
+ "edit.shaders": "\u30B7\u30A7\u30FC\u30C0\u30FC\u30A8\u30D5\u30A7\u30AF\u30C8",
216988
+ "edit.shadersHint": "\u30D3\u30F3\u306E\u300C\u30B7\u30A7\u30FC\u30C0\u30FC\u30A8\u30D5\u30A7\u30AF\u30C8\u300D\u304B\u30891\u3064\u9078\u629E\u3059\u308B\u304B\u3001\u30AB\u30B9\u30BF\u30E0\u30B7\u30A7\u30FC\u30C0\u30FC\u3092\u958B\u59CB\u3057\u3066\u30CE\u30FC\u30C9\u304B\u3089\u69CB\u7BC9\u3057\u307E\u3059\u3002",
216886
216989
  "edit.showBin": "\u30D3\u30F3\u3092\u8868\u793A",
216887
216990
  "edit.showInspector": "\u30AF\u30EA\u30C3\u30D7\u30A4\u30F3\u30B9\u30DA\u30AF\u30BF\u30FC\u3092\u8868\u793A",
216888
216991
  "edit.showTrack": "\u30C8\u30E9\u30C3\u30AF\u3092\u8868\u793A",
@@ -217471,7 +217574,7 @@ var require_ja = __commonJS({
217471
217574
  "imageAdjustSection.resetThisChannel": "\u3053\u306E\u30C1\u30E3\u30F3\u30CD\u30EB\u3092\u30EA\u30BB\u30C3\u30C8",
217472
217575
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "\u73FE\u5728\u306E\u8ABF\u6574\u3092\u30D7\u30EA\u30BB\u30C3\u30C8\u3068\u3057\u3066\u4FDD\u5B58",
217473
217576
  "imageAdjustSection.tint": "\u8272\u5408\u3044",
217474
- "imageAdjustSection.tintColour": "\u8272\u5408\u3044\u306E\u8272",
217577
+ "imageAdjustSection.tintColour": "\u8272\u5408\u3044\u30AB\u30E9\u30FC",
217475
217578
  "imageEditToolbar.altClickToPickA": "Alt\u30AD\u30FC\u3092\u62BC\u3057\u306A\u304C\u3089\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30BD\u30FC\u30B9\u3092\u9078\u629E",
217476
217579
  "imageEditToolbar.bringTheSelectionBack": "\u9078\u629E\u7BC4\u56F2\u3092\u5143\u306B\u623B\u3059",
217477
217580
  "imageEditToolbar.bringTheWholePictureBack": "\u753B\u50CF\u5168\u4F53\u3092\u5143\u306B\u623B\u3059",
@@ -217617,7 +217720,7 @@ var require_ja = __commonJS({
217617
217720
  "keyInspector.howTheValueTravelsTo": "\u5024\u304C\u6B21\u306E\u30AD\u30FC\u306B\u3069\u306E\u3088\u3046\u306B\u9077\u79FB\u3059\u308B\u304B",
217618
217721
  "keyInspector.keys": "{length} \u500B\u306E\u30AD\u30FC",
217619
217722
  "keyInspector.noKeysPicked": "\u30AD\u30FC\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",
217620
- "keyInspector.theKeySColour": "\u30AD\u30FC\u306E\u8272",
217723
+ "keyInspector.theKeySColour": "\u30AD\u30FC\u306E\u30AB\u30E9\u30FC",
217621
217724
  "keyInspector.time": "\u6642\u9593",
217622
217725
  "keyInspector.value": "\u5024",
217623
217726
  "keyInspector.whenTheFirstPickedKey": "\u6700\u521D\u306B\u9078\u629E\u3055\u308C\u305F\u30AD\u30FC\u304C\u518D\u751F\u3055\u308C\u308B\u3068\u304D\u3002\u4ED6\u306E\u30AD\u30FC\u306F\u8DDD\u96E2\u3092\u4FDD\u3061\u307E\u3059\u3002",
@@ -217729,10 +217832,10 @@ var require_ja = __commonJS({
217729
217832
  "libraryLinkChoice.unlinked": "\u30EA\u30F3\u30AF\u89E3\u9664\u6E08\u307F",
217730
217833
  "libraryLinkChoice.unlinkedALocalCopyInThis": "\u30EA\u30F3\u30AF\u89E3\u9664\u6E08\u307F: \u3053\u306E\u30D5\u30A1\u30A4\u30EB\u5185\u306E\u30ED\u30FC\u30AB\u30EB\u30B3\u30D4\u30FC \u2014 \u5165\u529B\u3068\u30E2\u30FC\u30B7\u30E7\u30F3\u306F\u4FDD\u6301\u3055\u308C\u307E\u3059\u304C\u3001\u30E9\u30A4\u30D6\u30E9\u30EA\u3078\u306E\u30EA\u30F3\u30AF\u306F\u3042\u308A\u307E\u305B\u3093",
217731
217834
  "librarySection.clickToAddFillsA": "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u8FFD\u52A0\uFF08\u9078\u629E\u3057\u305F\u30D5\u30A9\u30C8\u30D5\u30EC\u30FC\u30E0\u3092\u57CB\u3081\u307E\u3059\uFF09",
217732
- "librarySwatchesPanel.colourVariablesBindTheFill": "\u30AB\u30E9\u30FC\u5909\u6570\u306F\u5857\u308A\u3064\u3076\u3057\u306B\u30D0\u30A4\u30F3\u30C9\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u30E9\u30A4\u30D6\u30E9\u30EA\u306E\u66F4\u65B0\u306B\u5F93\u3044\u307E\u3059",
217835
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u30AB\u30E9\u30FC\u5909\u6570\u306F\u5857\u308A\u3064\u3076\u3057\u306B\u30D0\u30A4\u30F3\u30C9\u3055\u308C\u3001\u30E9\u30A4\u30D6\u30E9\u30EA\u306E\u66F4\u65B0\u306B\u5F93\u3044\u307E\u3059",
217733
217836
  "librarySwatchesPanel.noColoursMatch": "\u300C{query}\u300D\u306B\u4E00\u81F4\u3059\u308B\u30AB\u30E9\u30FC\u306F\u3042\u308A\u307E\u305B\u3093",
217734
- "librarySwatchesPanel.noColoursOrPaintStyles": "\u3053\u306E\u30E9\u30A4\u30D6\u30E9\u30EA\u306B\u30AB\u30E9\u30FC\u307E\u305F\u306F\u30DA\u30A4\u30F3\u30C8\u30B9\u30BF\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093",
217735
- "librarySwatchesPanel.noColourStylesOrVariables": "\u30AB\u30E9\u30FC \u30B9\u30BF\u30A4\u30EB\u307E\u305F\u306F\u5909\u6570\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002{value}",
217837
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u3053\u306E\u30E9\u30A4\u30D6\u30E9\u30EA\u306B\u306F\u30AB\u30E9\u30FC\u307E\u305F\u306F\u30DA\u30A4\u30F3\u30C8\u30B9\u30BF\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093",
217838
+ "librarySwatchesPanel.noColourStylesOrVariables": "\u30AB\u30E9\u30FC\u30BF\u30A4\u30EB\u307E\u305F\u306F\u5909\u6570\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002{value}",
217736
217839
  "librarySwatchesPanel.searchLibraryColours": "\u30E9\u30A4\u30D6\u30E9\u30EA\u30AB\u30E9\u30FC\u3092\u691C\u7D22",
217737
217840
  "librarySwatchesPanel.searchStylesAndColours": "\u30B9\u30BF\u30A4\u30EB\u3068\u30AB\u30E9\u30FC\u3092\u691C\u7D22",
217738
217841
  "linkFields.anchor": "\u3053\u306E\u30DA\u30FC\u30B8\u306E\u30EC\u30A4\u30E4\u30FC",
@@ -217959,7 +218062,7 @@ var require_ja = __commonJS({
217959
218062
  "modifierList.noneYetABehaviourMoves": "\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002\u52D5\u4F5C\u306F\u5024\u3092\u305D\u308C\u81EA\u4F53\u3067\u52D5\u304B\u3057\u307E\u3059 \u2014 \u30B9\u30D4\u30F3\u306B\u306F\u30AD\u30FC\u304C\u307E\u3063\u305F\u304F\u5FC5\u8981\u3042\u308A\u307E\u305B\u3093\u3002",
217960
218063
  "modifierList.remove": "{toLowerCase}\u3092\u524A\u9664",
217961
218064
  "modifierList.removeTheKeyHere": "\u3053\u3053\u306E{toLowerCase}\u30AD\u30FC\u3092\u524A\u9664",
217962
- "modifierList.theColourItMixesToward": "\u4FE1\u53F7\u304C\u4E0A\u6607\u3059\u308B\u306B\u3064\u308C\u3066\u6DF7\u3056\u308A\u5408\u3046\u8272",
218065
+ "modifierList.theColourItMixesToward": "\u4FE1\u53F7\u304C\u4E0A\u6607\u3059\u308B\u306B\u3064\u308C\u3066\u6DF7\u8272\u3055\u308C\u308B\u30AB\u30E9\u30FC",
217963
218066
  "motionComponentSection.componentInputs": "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u5165\u529B",
217964
218067
  "motionComponentSection.motion": "\u30E2\u30FC\u30B7\u30E7\u30F3",
217965
218068
  "motionComponentSection.notUsedHere": "\u3053\u3053\u3067\u306F\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
@@ -219239,7 +219342,7 @@ var require_ja = __commonJS({
219239
219342
  "settingsDialog.accentSky": "\u30B9\u30AB\u30A4",
219240
219343
  "settingsDialog.accentSystem": "\u30B7\u30B9\u30C6\u30E0",
219241
219344
  "settingsDialog.accentSystemBrowserBlue": "\u30B7\u30B9\u30C6\u30E0: \u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u3001\u6A19\u6E96\u306E\u9752\u8272\u306E\u307F\u3092\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u3068\u5171\u6709\u3057\u307E\u3059\u3002\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3068\u30B9\u30E9\u30A4\u30C0\u30FC\u306F\u3001\u30D6\u30E9\u30A6\u30B6\u304C\u8A31\u53EF\u3059\u308B\u7BC4\u56F2\u3067\u30B7\u30B9\u30C6\u30E0\u306E\u30A2\u30AF\u30BB\u30F3\u30C8\u30AB\u30E9\u30FC\u306B\u5F93\u3044\u307E\u3059\u3002PopCraft\u30A2\u30D7\u30EA\u306F\u3059\u3079\u3066\u306E\u5834\u6240\u3067\u305D\u308C\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002",
219242
- "settingsDialog.accentSystemUnavailable": "\u30B7\u30B9\u30C6\u30E0\uFF1A\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u306F\u30A2\u30AF\u30BB\u30F3\u30C8\u30AB\u30E9\u30FC\u3092\u5171\u6709\u3057\u306A\u3044\u305F\u3081\u3001\u30E9\u30D9\u30F3\u30C0\u30FC\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002",
219345
+ "settingsDialog.accentSystemUnavailable": "\u30B7\u30B9\u30C6\u30E0: \u3053\u306E\u30C7\u30D0\u30A4\u30B9\u306F\u30A2\u30AF\u30BB\u30F3\u30C8\u30AB\u30E9\u30FC\u3092\u5171\u6709\u3057\u306A\u3044\u305F\u3081\u3001\u30E9\u30D9\u30F3\u30C0\u30FC\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002",
219243
219346
  "settingsDialog.accentTeal": "\u30C6\u30A3\u30FC\u30EB",
219244
219347
  "settingsDialog.account": "\u30A2\u30AB\u30A6\u30F3\u30C8",
219245
219348
  "settingsDialog.contrast": "\u30B3\u30F3\u30C8\u30E9\u30B9\u30C8",
@@ -219681,7 +219784,7 @@ var require_ja = __commonJS({
219681
219784
  "textAnimatorPanel.theRandomOrderSSeed": "\u30E9\u30F3\u30C0\u30E0\u9806\u5E8F\u306E\u30B7\u30FC\u30C9",
219682
219785
  "textAnimatorPanel.thousandsSeparator": "\u6841\u533A\u5207\u308A\u8A18\u53F7",
219683
219786
  "textAnimatorPanel.tint": "\u8272\u5408\u3044",
219684
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u5408\u3044: \u5B8C\u5168\u306B\u79FB\u52D5\u3057\u305F\u5358\u4F4D\u304C\u53D6\u308B\u8272",
219787
+ "textAnimatorPanel.tintTheColourAFully": "\u8272\u5408\u3044: \u5B8C\u5168\u306B\u79FB\u52D5\u3057\u305F\u30E6\u30CB\u30C3\u30C8\u304C\u53D6\u308B\u30AB\u30E9\u30FC",
219685
219788
  "textAnimatorPanel.to": "\u7D42\u4E86",
219686
219789
  "textAnimatorPanel.turn": "\u56DE\u8EE2",
219687
219790
  "textAnimatorPanel.typewriter": "\u30BF\u30A4\u30D7\u30E9\u30A4\u30BF\u30FC",
@@ -221554,7 +221657,7 @@ var require_ko = __commonJS({
221554
221657
  "designPanel.goToMainComponent": "\uBA54\uC778 \uCEF4\uD3EC\uB10C\uD2B8\uB85C \uC774\uB3D9",
221555
221658
  "designPanel.grid": "\uADF8\uB9AC\uB4DC",
221556
221659
  "designPanel.gridSettings": "\uADF8\uB9AC\uB4DC \uC124\uC815",
221557
- "designPanel.hexColour": "16\uC9C4\uC218 \uC0C9\uC0C1",
221660
+ "designPanel.hexColour": "\uD5E5\uC2A4 \uC0C9\uC0C1",
221558
221661
  "designPanel.horizontal": "\uAC00\uB85C",
221559
221662
  "designPanel.howTheInstanceSControl": "\uC778\uC2A4\uD134\uC2A4\uC758 \uC81C\uC5B4 \uB2E8\uACC4",
221560
221663
  "designPanel.hug": "\uAC10\uC2F8\uAE30",
@@ -221933,6 +222036,7 @@ var require_ko = __commonJS({
221933
222036
  "edit.cropTop": "\uC704",
221934
222037
  "edit.crossfadeNext": "{name}\uC73C\uB85C \uD06C\uB85C\uC2A4\uD398\uC774\uB4DC",
221935
222038
  "edit.curve": "\uACE1\uC120",
222039
+ "edit.customShader": "\uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC170\uC774\uB354",
221936
222040
  "edit.cut": "\uC798\uB77C\uB0B4\uAE30",
221937
222041
  "edit.db": "{value} dB",
221938
222042
  "edit.dbSilent": "\u2212\u221E dB",
@@ -221945,6 +222049,7 @@ var require_ko = __commonJS({
221945
222049
  "edit.duckRun": "{track}\uC744(\uB97C) {under} \uC544\uB798\uB85C \uB354\uD0B9",
221946
222050
  "edit.duckTrack": "\uB354\uD0B9",
221947
222051
  "edit.duckUnder": "\uC544\uB798",
222052
+ "edit.editNodes": "\uB178\uB4DC \uD3B8\uC9D1",
221948
222053
  "edit.editScene": "\uC774 \uC7A5\uBA74\uC758 \uC560\uB2C8\uBA54\uC774\uC158 \uD3B8\uC9D1",
221949
222054
  "edit.effect.BLUR": "\uD750\uB9BC",
221950
222055
  "edit.effect.BRIGHTNESS": "\uBC1D\uAE30",
@@ -222170,6 +222275,19 @@ var require_ko = __commonJS({
222170
222275
  "edit.sequences": "\uC2DC\uD000\uC2A4",
222171
222276
  "edit.sequencesBin": "\uC2DC\uD000\uC2A4",
222172
222277
  "edit.sequenceSettings": "\uC2DC\uD000\uC2A4 \uC124\uC815",
222278
+ "edit.shader.chromatic": "\uC0C9\uC218\uCC28",
222279
+ "edit.shader.duotone": "\uB4C0\uC624\uD1A4",
222280
+ "edit.shader.glitch": "\uAE00\uB9AC\uCE58",
222281
+ "edit.shader.glow": "\uAD11\uC120",
222282
+ "edit.shader.halftone": "\uD558\uD504\uD1A4",
222283
+ "edit.shader.kaleidoscope": "\uB9CC\uD654\uACBD",
222284
+ "edit.shader.liquid": "\uC561\uCCB4",
222285
+ "edit.shader.mirror": "\uAC70\uC6B8",
222286
+ "edit.shader.sketch": "\uAC00\uC7A5\uC790\uB9AC \uAD11\uC120",
222287
+ "edit.shader.soft": "\uC18C\uD504\uD2B8 \uD3EC\uCEE4\uC2A4",
222288
+ "edit.shader.vhs": "VHS",
222289
+ "edit.shaders": "\uC170\uC774\uB354 \uD6A8\uACFC",
222290
+ "edit.shadersHint": "\uBE48\uC758 \uC170\uC774\uB354 \uD6A8\uACFC \uC911 \uD558\uB098\uB97C \uD074\uB9AD\uD558\uAC70\uB098, \uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC170\uC774\uB354\uB97C \uC2DC\uC791\uD558\uC5EC \uB178\uB4DC\uC5D0\uC11C \uBE4C\uB4DC\uD558\uC138\uC694.",
222173
222291
  "edit.showBin": "\uBE48 \uD45C\uC2DC",
222174
222292
  "edit.showInspector": "\uD074\uB9BD \uAC80\uC0AC\uAE30 \uD45C\uC2DC",
222175
222293
  "edit.showTrack": "\uD2B8\uB799 \uD45C\uC2DC",
@@ -223019,7 +223137,7 @@ var require_ko = __commonJS({
223019
223137
  "librarySwatchesPanel.colourVariablesBindTheFill": "\uC0C9\uC0C1 \uBCC0\uC218\uAC00 \uCC44\uC6B0\uAE30\uB97C \uBC14\uC778\uB529\uD558\uBBC0\uB85C \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC5C5\uB370\uC774\uD2B8\uB97C \uB530\uB985\uB2C8\uB2E4.",
223020
223138
  "librarySwatchesPanel.noColoursMatch": "\u201C{query}\u201D\uC640 \uC77C\uCE58\uD558\uB294 \uC0C9\uC0C1\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
223021
223139
  "librarySwatchesPanel.noColoursOrPaintStyles": "\uC774 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uC5D0 \uC0C9\uC0C1 \uB610\uB294 \uD398\uC778\uD2B8 \uC2A4\uD0C0\uC77C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
223022
- "librarySwatchesPanel.noColourStylesOrVariables": "\uC544\uC9C1 \uC0C9\uC0C1 \uC2A4\uD0C0\uC77C \uB610\uB294 \uBCC0\uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. {value}",
223140
+ "librarySwatchesPanel.noColourStylesOrVariables": "\uC544\uC9C1 \uC0C9\uC0C1 \uC2A4\uD0C0\uC77C\uC774\uB098 \uBCC0\uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. {value}",
223023
223141
  "librarySwatchesPanel.searchLibraryColours": "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uC0C9\uC0C1 \uAC80\uC0C9",
223024
223142
  "librarySwatchesPanel.searchStylesAndColours": "\uC2A4\uD0C0\uC77C \uBC0F \uC0C9\uC0C1 \uAC80\uC0C9",
223025
223143
  "linkFields.anchor": "\uC774 \uD398\uC774\uC9C0\uC758 \uB808\uC774\uC5B4",
@@ -224526,7 +224644,7 @@ var require_ko = __commonJS({
224526
224644
  "settingsDialog.accentSky": "\uC2A4\uCE74\uC774",
224527
224645
  "settingsDialog.accentSystem": "\uC2DC\uC2A4\uD15C",
224528
224646
  "settingsDialog.accentSystemBrowserBlue": "\uC2DC\uC2A4\uD15C: \uC774 \uBE0C\uB77C\uC6B0\uC800\uB294 \uC6F9 \uD398\uC774\uC9C0\uC640 \uD45C\uC900 \uD30C\uB780\uC0C9\uB9CC \uACF5\uC720\uD569\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uAC00 \uD5C8\uC6A9\uD558\uB294 \uACBD\uC6B0 \uCCB4\uD06C\uBC15\uC2A4\uC640 \uC2AC\uB77C\uC774\uB354\uB294 \uC2DC\uC2A4\uD15C \uAC15\uC870 \uC0C9\uC0C1\uC744 \uB530\uB974\uBA70, PopCraft \uC571\uC740 \uBAA8\uB4E0 \uACF3\uC5D0\uC11C \uC774\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.",
224529
- "settingsDialog.accentSystemUnavailable": "\uC2DC\uC2A4\uD15C: \uC774 \uAE30\uAE30\uB294 \uAC15\uC870 \uC0C9\uC0C1\uC744 \uACF5\uC720\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uB77C\uBCA4\uB354\uAC00 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",
224647
+ "settingsDialog.accentSystemUnavailable": "\uC2DC\uC2A4\uD15C: \uC774 \uC7A5\uCE58\uB294 \uAC15\uC870 \uC0C9\uC0C1\uC744 \uACF5\uC720\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uB77C\uBCA4\uB354 \uC0C9\uC0C1\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",
224530
224648
  "settingsDialog.accentTeal": "\uD2F8",
224531
224649
  "settingsDialog.account": "\uACC4\uC815",
224532
224650
  "settingsDialog.contrast": "\uB300\uBE44",
@@ -227220,6 +227338,7 @@ var require_zh_CN = __commonJS({
227220
227338
  "edit.cropTop": "\u9876\u90E8",
227221
227339
  "edit.crossfadeNext": "\u4EA4\u53C9\u6DE1\u5316\u5230 {name}",
227222
227340
  "edit.curve": "\u66F2\u7EBF",
227341
+ "edit.customShader": "\u81EA\u5B9A\u4E49\u7740\u8272\u5668",
227223
227342
  "edit.cut": "\u526A\u5207",
227224
227343
  "edit.db": "{value} dB",
227225
227344
  "edit.dbSilent": "\u2212\u221E dB",
@@ -227232,6 +227351,7 @@ var require_zh_CN = __commonJS({
227232
227351
  "edit.duckRun": "\u5C06 {track} \u95EA\u907F\u5230 {under} \u4E0B\u65B9",
227233
227352
  "edit.duckTrack": "\u95EA\u907F",
227234
227353
  "edit.duckUnder": "\u4E0B\u65B9",
227354
+ "edit.editNodes": "\u7F16\u8F91\u5176\u8282\u70B9",
227235
227355
  "edit.editScene": "\u7F16\u8F91\u6B64\u573A\u666F\u7684\u52A8\u753B",
227236
227356
  "edit.effect.BLUR": "\u6A21\u7CCA",
227237
227357
  "edit.effect.BRIGHTNESS": "\u4EAE\u5EA6",
@@ -227457,6 +227577,19 @@ var require_zh_CN = __commonJS({
227457
227577
  "edit.sequences": "\u5E8F\u5217",
227458
227578
  "edit.sequencesBin": "\u5E8F\u5217",
227459
227579
  "edit.sequenceSettings": "\u5E8F\u5217\u8BBE\u7F6E",
227580
+ "edit.shader.chromatic": "\u8272\u5DEE",
227581
+ "edit.shader.duotone": "\u53CC\u8272\u8C03",
227582
+ "edit.shader.glitch": "\u6545\u969C",
227583
+ "edit.shader.glow": "\u53D1\u5149",
227584
+ "edit.shader.halftone": "\u534A\u8C03",
227585
+ "edit.shader.kaleidoscope": "\u4E07\u82B1\u7B52",
227586
+ "edit.shader.liquid": "\u6DB2\u4F53",
227587
+ "edit.shader.mirror": "\u955C\u50CF",
227588
+ "edit.shader.sketch": "\u8FB9\u7F18\u53D1\u5149",
227589
+ "edit.shader.soft": "\u67D4\u7126",
227590
+ "edit.shader.vhs": "VHS",
227591
+ "edit.shaders": "\u7740\u8272\u5668\u6548\u679C",
227592
+ "edit.shadersHint": "\u5728\u7D20\u6750\u5E93\u7684\u7740\u8272\u5668\u6548\u679C\u4E2D\u9009\u62E9\u4E00\u4E2A\uFF0C\u6216\u5F00\u59CB\u81EA\u5B9A\u4E49\u7740\u8272\u5668\u5E76\u4ECE\u8282\u70B9\u6784\u5EFA\u3002",
227460
227593
  "edit.showBin": "\u663E\u793A\u7D20\u6750\u7BB1",
227461
227594
  "edit.showInspector": "\u663E\u793A\u7247\u6BB5\u68C0\u67E5\u5668",
227462
227595
  "edit.showTrack": "\u663E\u793A\u8F68\u9053",
@@ -227725,7 +227858,7 @@ var require_zh_CN = __commonJS({
227725
227858
  "fillFlyout.spacingX": "X \u95F4\u8DDD",
227726
227859
  "fillFlyout.spacingY": "Y \u95F4\u8DDD",
227727
227860
  "fillFlyout.stock": "\u56FE\u5E93",
227728
- "fillFlyout.stopColour": "\u8272\u6807\u989C\u8272",
227861
+ "fillFlyout.stopColour": "\u505C\u6B62\u989C\u8272",
227729
227862
  "fillFlyout.stops": "\u8272\u6807",
227730
227863
  "fillFlyout.textureNoise": "\u7EB9\u7406/\u566A\u70B9",
227731
227864
  "fillFlyout.thePosterFrameIsShown": "\u6D77\u62A5\u5E27\u5728\u6682\u505C\u65F6\u663E\u793A\uFF0C\u5E76\u7528\u4E8E SVG/PDF \u5BFC\u51FA\u3002",
@@ -228191,7 +228324,7 @@ var require_zh_CN = __commonJS({
228191
228324
  "keyInspector.howTheValueTravelsTo": "\u503C\u5982\u4F55\u8FC7\u6E21\u5230\u4E0B\u4E00\u4E2A\u5173\u952E\u5E27",
228192
228325
  "keyInspector.keys": "{length} \u4E2A\u5173\u952E\u5E27",
228193
228326
  "keyInspector.noKeysPicked": "\u672A\u9009\u62E9\u5173\u952E\u5E27\u3002",
228194
- "keyInspector.theKeySColour": "\u5173\u952E\u5E27\u989C\u8272",
228327
+ "keyInspector.theKeySColour": "\u6309\u952E\u989C\u8272",
228195
228328
  "keyInspector.time": "\u65F6\u95F4",
228196
228329
  "keyInspector.value": "\u503C",
228197
228330
  "keyInspector.whenTheFirstPickedKey": "\u5F53\u7B2C\u4E00\u4E2A\u9009\u5B9A\u7684\u5173\u952E\u5E27\u64AD\u653E\u65F6\uFF1B\u5176\u4ED6\u5173\u952E\u5E27\u4FDD\u6301\u5176\u76F8\u5BF9\u8DDD\u79BB",
@@ -228303,9 +228436,9 @@ var require_zh_CN = __commonJS({
228303
228436
  "libraryLinkChoice.unlinked": "\u672A\u94FE\u63A5",
228304
228437
  "libraryLinkChoice.unlinkedALocalCopyInThis": "\u672A\u94FE\u63A5\uFF1A\u6B64\u6587\u4EF6\u4E2D\u7684\u672C\u5730\u526F\u672C \u2014 \u8F93\u5165\u548C\u52A8\u6548\u4FDD\u7559\uFF0C\u4E0D\u94FE\u63A5\u56DE\u5E93",
228305
228438
  "librarySection.clickToAddFillsA": "\u70B9\u51FB\u6DFB\u52A0\uFF08\u586B\u5145\u9009\u5B9A\u7684\u76F8\u6846\uFF09",
228306
- "librarySwatchesPanel.colourVariablesBindTheFill": "\u989C\u8272\u53D8\u91CF\u7ED1\u5B9A\u586B\u5145\uFF0C\u56E0\u6B64\u5B83\u4F1A\u968F\u5E93\u7684\u66F4\u65B0\u800C\u66F4\u65B0",
228307
- "librarySwatchesPanel.noColoursMatch": "\u6CA1\u6709\u989C\u8272\u4E0E\u201C{query}\u201D\u5339\u914D",
228308
- "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u5E93\u4E2D\u6CA1\u6709\u989C\u8272\u6216\u7ED8\u753B\u6837\u5F0F",
228439
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u989C\u8272\u53D8\u91CF\u7ED1\u5B9A\u586B\u5145\uFF0C\u56E0\u6B64\u5B83\u4F1A\u968F\u5E93\u7684\u66F4\u65B0\u800C\u53D8\u5316",
228440
+ "librarySwatchesPanel.noColoursMatch": "\u6CA1\u6709\u989C\u8272\u5339\u914D\u201C{query}\u201D",
228441
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u5E93\u4E2D\u6CA1\u6709\u989C\u8272\u6216\u7ED8\u5236\u6837\u5F0F",
228309
228442
  "librarySwatchesPanel.noColourStylesOrVariables": "\u5C1A\u65E0\u989C\u8272\u6837\u5F0F\u6216\u53D8\u91CF\u3002{value}",
228310
228443
  "librarySwatchesPanel.searchLibraryColours": "\u641C\u7D22\u5E93\u989C\u8272",
228311
228444
  "librarySwatchesPanel.searchStylesAndColours": "\u641C\u7D22\u6837\u5F0F\u548C\u989C\u8272",
@@ -228533,7 +228666,7 @@ var require_zh_CN = __commonJS({
228533
228666
  "modifierList.noneYetABehaviourMoves": "\u6682\u65E0\u3002\u884C\u4E3A\u4F1A\u81EA\u884C\u79FB\u52A8\u503C\u2014\u2014\u4F8B\u5982\uFF0C\u65CB\u8F6C\u4E0D\u9700\u8981\u4EFB\u4F55\u952E\u3002",
228534
228667
  "modifierList.remove": "\u79FB\u9664 {toLowerCase}",
228535
228668
  "modifierList.removeTheKeyHere": "\u5728\u6B64\u5904\u79FB\u9664 {toLowerCase} \u952E",
228536
- "modifierList.theColourItMixesToward": "\u4FE1\u53F7\u5347\u9AD8\u65F6\u6DF7\u5408\u7684\u989C\u8272",
228669
+ "modifierList.theColourItMixesToward": "\u968F\u7740\u4FE1\u53F7\u589E\u5F3A\uFF0C\u6DF7\u5408\u8D8B\u5411\u7684\u989C\u8272",
228537
228670
  "motionComponentSection.componentInputs": "\u7EC4\u4EF6\u8F93\u5165",
228538
228671
  "motionComponentSection.motion": "\u52A8\u6548",
228539
228672
  "motionComponentSection.notUsedHere": "\u6B64\u5904\u672A\u4F7F\u7528",
@@ -229813,7 +229946,7 @@ var require_zh_CN = __commonJS({
229813
229946
  "settingsDialog.accentSky": "\u5929\u84DD\u8272",
229814
229947
  "settingsDialog.accentSystem": "\u7CFB\u7EDF",
229815
229948
  "settingsDialog.accentSystemBrowserBlue": "\u7CFB\u7EDF\uFF1A\u6B64\u6D4F\u89C8\u5668\u4EC5\u4E0E\u7F51\u9875\u5171\u4EAB\u5176\u6807\u51C6\u84DD\u8272\u3002\u590D\u9009\u6846\u548C\u6ED1\u5757\u9075\u5FAA\u60A8\u7684\u7CFB\u7EDF\u5F3A\u8C03\u8272\uFF08\u5982\u679C\u6D4F\u89C8\u5668\u5141\u8BB8\uFF09\uFF1BPopCraft \u5E94\u7528\u5728\u6240\u6709\u5730\u65B9\u90FD\u4F7F\u7528\u5B83\u3002",
229816
- "settingsDialog.accentSystemUnavailable": "\u7CFB\u7EDF\uFF1A\u6B64\u8BBE\u5907\u672A\u5171\u4EAB\u5176\u5F3A\u8C03\u8272\uFF0C\u56E0\u6B64\u4F7F\u7528\u6DE1\u7D2B\u8272\u3002",
229949
+ "settingsDialog.accentSystemUnavailable": "\u7CFB\u7EDF\uFF1A\u6B64\u8BBE\u5907\u4E0D\u5171\u4EAB\u5176\u5F3A\u8C03\u8272\uFF0C\u56E0\u6B64\u4F7F\u7528\u6DE1\u7D2B\u8272\u3002",
229817
229950
  "settingsDialog.accentTeal": "\u9752\u8272",
229818
229951
  "settingsDialog.account": "\u8D26\u6237",
229819
229952
  "settingsDialog.contrast": "\u5BF9\u6BD4\u5EA6",
@@ -230255,7 +230388,7 @@ var require_zh_CN = __commonJS({
230255
230388
  "textAnimatorPanel.theRandomOrderSSeed": "\u968F\u673A\u987A\u5E8F\u7684\u79CD\u5B50",
230256
230389
  "textAnimatorPanel.thousandsSeparator": "\u5343\u4F4D\u5206\u9694\u7B26",
230257
230390
  "textAnimatorPanel.tint": "\u8272\u8C03",
230258
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u8C03\uFF1A\u5B8C\u5168\u79FB\u52A8\u7684\u5355\u4F4D\u6240\u5448\u73B0\u7684\u989C\u8272",
230391
+ "textAnimatorPanel.tintTheColourAFully": "\u7740\u8272\uFF1A\u5B8C\u5168\u79FB\u52A8\u7684\u5355\u5143\u6240\u5448\u73B0\u7684\u989C\u8272",
230259
230392
  "textAnimatorPanel.to": "\u5230",
230260
230393
  "textAnimatorPanel.turn": "\u65CB\u8F6C",
230261
230394
  "textAnimatorPanel.typewriter": "\u6253\u5B57\u673A",
@@ -232128,7 +232261,7 @@ var require_zh_TW = __commonJS({
232128
232261
  "designPanel.goToMainComponent": "\u524D\u5F80\u4E3B\u5143\u4EF6",
232129
232262
  "designPanel.grid": "\u683C\u7DDA",
232130
232263
  "designPanel.gridSettings": "\u683C\u7DDA\u8A2D\u5B9A",
232131
- "designPanel.hexColour": "\u5341\u516D\u9032\u4F4D\u984F\u8272",
232264
+ "designPanel.hexColour": "\u5341\u516D\u9032\u4F4D\u8272\u5F69",
232132
232265
  "designPanel.horizontal": "\u6C34\u5E73",
232133
232266
  "designPanel.howTheInstanceSControl": "\u5BE6\u4F8B\u63A7\u5236\u7684\u6B65\u9032\u65B9\u5F0F",
232134
232267
  "designPanel.hug": "\u74B0\u62B1",
@@ -232507,6 +232640,7 @@ var require_zh_TW = __commonJS({
232507
232640
  "edit.cropTop": "\u4E0A",
232508
232641
  "edit.crossfadeNext": "\u4EA4\u53C9\u6DE1\u5316\u81F3 {name}",
232509
232642
  "edit.curve": "\u66F2\u7DDA",
232643
+ "edit.customShader": "\u81EA\u8A02\u8457\u8272\u5668",
232510
232644
  "edit.cut": "\u526A\u4E0B",
232511
232645
  "edit.db": "{value} dB",
232512
232646
  "edit.dbSilent": "\u2212\u221E dB",
@@ -232519,6 +232653,7 @@ var require_zh_TW = __commonJS({
232519
232653
  "edit.duckRun": "\u5C07 {track} \u58D3\u4F4E\u5728 {under} \u4E4B\u4E0B",
232520
232654
  "edit.duckTrack": "\u58D3\u4F4E",
232521
232655
  "edit.duckUnder": "\u4E4B\u4E0B",
232656
+ "edit.editNodes": "\u7DE8\u8F2F\u5176\u7BC0\u9EDE",
232522
232657
  "edit.editScene": "\u7DE8\u8F2F\u6B64\u5834\u666F\u7684\u52D5\u756B",
232523
232658
  "edit.effect.BLUR": "\u6A21\u7CCA",
232524
232659
  "edit.effect.BRIGHTNESS": "\u4EAE\u5EA6",
@@ -232554,7 +232689,7 @@ var require_zh_TW = __commonJS({
232554
232689
  "edit.effectControl.Temp": "\u8272\u6EAB",
232555
232690
  "edit.effectControl.Tint": "\u8272\u8ABF",
232556
232691
  "edit.effectDown": "\u4E0B\u79FB",
232557
- "edit.effectGroup.Color": "\u984F\u8272",
232692
+ "edit.effectGroup.Color": "\u8272\u5F69",
232558
232693
  "edit.effectGroup.Filter": "\u6FFE\u93E1",
232559
232694
  "edit.effectGroup.Warp": "\u626D\u66F2",
232560
232695
  "edit.effects": "\u6548\u679C",
@@ -232744,6 +232879,19 @@ var require_zh_TW = __commonJS({
232744
232879
  "edit.sequences": "\u5E8F\u5217",
232745
232880
  "edit.sequencesBin": "\u5E8F\u5217",
232746
232881
  "edit.sequenceSettings": "\u5E8F\u5217\u8A2D\u5B9A",
232882
+ "edit.shader.chromatic": "\u8272\u5DEE",
232883
+ "edit.shader.duotone": "\u96D9\u8272\u8ABF",
232884
+ "edit.shader.glitch": "\u6545\u969C\u6548\u679C",
232885
+ "edit.shader.glow": "\u767C\u5149",
232886
+ "edit.shader.halftone": "\u534A\u8272\u8ABF",
232887
+ "edit.shader.kaleidoscope": "\u842C\u82B1\u7B52",
232888
+ "edit.shader.liquid": "\u6DB2\u614B",
232889
+ "edit.shader.mirror": "\u93E1\u50CF",
232890
+ "edit.shader.sketch": "\u908A\u7DE3\u767C\u5149",
232891
+ "edit.shader.soft": "\u67D4\u7126",
232892
+ "edit.shader.vhs": "VHS",
232893
+ "edit.shaders": "\u8457\u8272\u5668\u6548\u679C",
232894
+ "edit.shadersHint": "\u9EDE\u64CA\u5DE5\u5177\u7BB1\u4E2D\u7684\u8457\u8272\u5668\u6548\u679C\uFF0C\u6216\u958B\u59CB\u81EA\u8A02\u8457\u8272\u5668\u4E26\u5F9E\u7BC0\u9EDE\u5EFA\u69CB\u3002",
232747
232895
  "edit.showBin": "\u986F\u793A\u7D20\u6750\u5EAB",
232748
232896
  "edit.showInspector": "\u986F\u793A\u7247\u6BB5\u6AA2\u8996\u5668",
232749
232897
  "edit.showTrack": "\u986F\u793A\u8ECC\u9053",
@@ -233012,7 +233160,7 @@ var require_zh_TW = __commonJS({
233012
233160
  "fillFlyout.spacingX": "X \u9593\u8DDD",
233013
233161
  "fillFlyout.spacingY": "Y \u9593\u8DDD",
233014
233162
  "fillFlyout.stock": "\u5716\u5EAB",
233015
- "fillFlyout.stopColour": "\u505C\u99D0\u9EDE\u984F\u8272",
233163
+ "fillFlyout.stopColour": "\u505C\u6B62\u8272\u5F69",
233016
233164
  "fillFlyout.stops": "\u505C\u99D0\u9EDE",
233017
233165
  "fillFlyout.textureNoise": "\u7D0B\u7406 / \u96DC\u8A0A",
233018
233166
  "fillFlyout.thePosterFrameIsShown": "\u66AB\u505C\u6642\u6703\u986F\u793A\u6D77\u5831\u5F71\u683C\uFF0C\u4E26\u7528\u65BC SVG/PDF \u532F\u51FA\u3002",
@@ -233332,7 +233480,7 @@ var require_zh_TW = __commonJS({
233332
233480
  "imageAdjustSection.resetThisChannel": "\u91CD\u8A2D\u6B64\u8272\u7248",
233333
233481
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "\u5C07\u76EE\u524D\u7684\u8ABF\u6574\u5132\u5B58\u70BA\u9810\u8A2D\u96C6",
233334
233482
  "imageAdjustSection.tint": "\u8272\u8ABF",
233335
- "imageAdjustSection.tintColour": "\u8272\u8ABF\u984F\u8272",
233483
+ "imageAdjustSection.tintColour": "\u8272\u8ABF\u8272\u5F69",
233336
233484
  "imageEditToolbar.altClickToPickA": "\u6309\u4F4F Alt \u9375\u9EDE\u64CA\u4EE5\u9078\u64C7\u4F86\u6E90",
233337
233485
  "imageEditToolbar.bringTheSelectionBack": "\u6062\u5FA9\u9078\u53D6\u7BC4\u570D",
233338
233486
  "imageEditToolbar.bringTheWholePictureBack": "\u6062\u5FA9\u6574\u500B\u5716\u7247",
@@ -233478,7 +233626,7 @@ var require_zh_TW = __commonJS({
233478
233626
  "keyInspector.howTheValueTravelsTo": "\u503C\u5982\u4F55\u50B3\u905E\u81F3\u4E0B\u4E00\u500B\u95DC\u9375\u5F71\u683C",
233479
233627
  "keyInspector.keys": "{length} \u500B\u95DC\u9375\u5F71\u683C",
233480
233628
  "keyInspector.noKeysPicked": "\u672A\u9078\u53D6\u4EFB\u4F55\u95DC\u9375\u5F71\u683C\u3002",
233481
- "keyInspector.theKeySColour": "\u95DC\u9375\u5F71\u683C\u7684\u984F\u8272",
233629
+ "keyInspector.theKeySColour": "\u6B64\u9375\u7684\u8272\u5F69",
233482
233630
  "keyInspector.time": "\u6642\u9593",
233483
233631
  "keyInspector.value": "\u503C",
233484
233632
  "keyInspector.whenTheFirstPickedKey": "\u7576\u7B2C\u4E00\u500B\u9078\u53D6\u7684\u95DC\u9375\u5F71\u683C\u64AD\u653E\u6642\uFF1B\u5176\u4ED6\u95DC\u9375\u5F71\u683C\u4FDD\u6301\u5176\u8DDD\u96E2",
@@ -233590,12 +233738,12 @@ var require_zh_TW = __commonJS({
233590
233738
  "libraryLinkChoice.unlinked": "\u672A\u9023\u7D50",
233591
233739
  "libraryLinkChoice.unlinkedALocalCopyInThis": "\u672A\u9023\u7D50\uFF1A\u6B64\u6A94\u6848\u4E2D\u7684\u672C\u6A5F\u526F\u672C \u2014 \u8F38\u5165\u548C\u52D5\u614B\u4FDD\u7559\uFF0C\u4E0D\u9023\u7D50\u56DE\u5EAB",
233592
233740
  "librarySection.clickToAddFillsA": "\u9EDE\u64CA\u4EE5\u65B0\u589E\uFF08\u586B\u6EFF\u9078\u53D6\u7684\u76F8\u6846\uFF09",
233593
- "librarySwatchesPanel.colourVariablesBindTheFill": "\u984F\u8272\u8B8A\u6578\u7D81\u5B9A\u586B\u8272\uFF0C\u56E0\u6B64\u5B83\u6703\u96A8\u8457\u51FD\u5F0F\u5EAB\u7684\u66F4\u65B0\u800C\u8B8A\u5316",
233594
- "librarySwatchesPanel.noColoursMatch": "\u6C92\u6709\u984F\u8272\u7B26\u5408\u300C{query}\u300D",
233595
- "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u51FD\u5F0F\u5EAB\u4E2D\u6C92\u6709\u984F\u8272\u6216\u7E6A\u5716\u6A23\u5F0F",
233596
- "librarySwatchesPanel.noColourStylesOrVariables": "\u5C1A\u7121\u984F\u8272\u6A23\u5F0F\u6216\u8B8A\u6578\u3002{value}",
233597
- "librarySwatchesPanel.searchLibraryColours": "\u641C\u5C0B\u51FD\u5F0F\u5EAB\u984F\u8272",
233598
- "librarySwatchesPanel.searchStylesAndColours": "\u641C\u5C0B\u6A23\u5F0F\u548C\u984F\u8272",
233741
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u8272\u5F69\u8B8A\u6578\u7D81\u5B9A\u586B\u8272\uFF0C\u56E0\u6B64\u6703\u96A8\u51FD\u5F0F\u5EAB\u66F4\u65B0\u800C\u8B8A\u52D5",
233742
+ "librarySwatchesPanel.noColoursMatch": "\u6C92\u6709\u8272\u5F69\u7B26\u5408\u300C{query}\u300D",
233743
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u51FD\u5F0F\u5EAB\u4E2D\u6C92\u6709\u8272\u5F69\u6216\u7E6A\u5716\u6A23\u5F0F",
233744
+ "librarySwatchesPanel.noColourStylesOrVariables": "\u5C1A\u7121\u8272\u5F69\u6A23\u5F0F\u6216\u8B8A\u6578\u3002{value}",
233745
+ "librarySwatchesPanel.searchLibraryColours": "\u641C\u5C0B\u51FD\u5F0F\u5EAB\u8272\u5F69",
233746
+ "librarySwatchesPanel.searchStylesAndColours": "\u641C\u5C0B\u6A23\u5F0F\u548C\u8272\u5F69",
233599
233747
  "linkFields.anchor": "\u6B64\u9801\u9762\u4E0A\u7684\u5716\u5C64",
233600
233748
  "linkFields.anchorOption": "{name} (\u9328\u9EDE #{anchor})",
233601
233749
  "linkFields.choose": "\u9078\u64C7\u2026",
@@ -233820,7 +233968,7 @@ var require_zh_TW = __commonJS({
233820
233968
  "modifierList.noneYetABehaviourMoves": "\u5C1A\u7121\u3002\u884C\u70BA\u6703\u81EA\u884C\u79FB\u52D5\u6578\u503C \u2014 \u65CB\u8F49\u5B8C\u5168\u4E0D\u9700\u8981\u95DC\u9375\u5F71\u683C\u3002",
233821
233969
  "modifierList.remove": "\u79FB\u9664{toLowerCase}",
233822
233970
  "modifierList.removeTheKeyHere": "\u79FB\u9664\u6B64\u8655\u7684{toLowerCase}\u9375",
233823
- "modifierList.theColourItMixesToward": "\u8A0A\u865F\u5347\u9AD8\u6642\u6DF7\u5408\u7684\u984F\u8272",
233971
+ "modifierList.theColourItMixesToward": "\u7576\u8A0A\u865F\u589E\u5F37\u6642\uFF0C\u6DF7\u5408\u8DA8\u5411\u7684\u8272\u5F69",
233824
233972
  "motionComponentSection.componentInputs": "\u5143\u4EF6\u8F38\u5165",
233825
233973
  "motionComponentSection.motion": "\u52D5\u614B",
233826
233974
  "motionComponentSection.notUsedHere": "\u6B64\u8655\u672A\u4F7F\u7528",
@@ -235100,7 +235248,7 @@ var require_zh_TW = __commonJS({
235100
235248
  "settingsDialog.accentSky": "\u5929\u7A7A\u85CD",
235101
235249
  "settingsDialog.accentSystem": "\u7CFB\u7D71",
235102
235250
  "settingsDialog.accentSystemBrowserBlue": "\u7CFB\u7D71\uFF1A\u6B64\u700F\u89BD\u5668\u50C5\u8207\u7DB2\u9801\u5171\u7528\u5176\u6A19\u6E96\u85CD\u8272\u3002\u52FE\u9078\u6846\u548C\u6ED1\u687F\u6703\u4F9D\u7167\u700F\u89BD\u5668\u5141\u8A31\u7684\u60C5\u6CC1\uFF0C\u4F7F\u7528\u60A8\u7684\u7CFB\u7D71\u5F37\u8ABF\u8272\uFF1BPopCraft \u61C9\u7528\u7A0B\u5F0F\u5247\u6703\u5728\u6240\u6709\u5730\u65B9\u4F7F\u7528\u5B83\u3002",
235103
- "settingsDialog.accentSystemUnavailable": "\u7CFB\u7D71\uFF1A\u6B64\u88DD\u7F6E\u672A\u5206\u4EAB\u5176\u5F37\u8ABF\u8272\uFF0C\u56E0\u6B64\u4F7F\u7528\u85B0\u8863\u8349\u8272\u3002",
235251
+ "settingsDialog.accentSystemUnavailable": "\u7CFB\u7D71\uFF1A\u6B64\u88DD\u7F6E\u672A\u5206\u4EAB\u5176\u5F37\u8ABF\u8272\u5F69\uFF0C\u56E0\u6B64\u4F7F\u7528\u85B0\u8863\u8349\u8272\u3002",
235104
235252
  "settingsDialog.accentTeal": "\u9752\u8272",
235105
235253
  "settingsDialog.account": "\u5E33\u6236",
235106
235254
  "settingsDialog.contrast": "\u5C0D\u6BD4\u5EA6",
@@ -235542,7 +235690,7 @@ var require_zh_TW = __commonJS({
235542
235690
  "textAnimatorPanel.theRandomOrderSSeed": "\u96A8\u6A5F\u9806\u5E8F\u7684\u7A2E\u5B50",
235543
235691
  "textAnimatorPanel.thousandsSeparator": "\u5343\u4F4D\u5206\u9694\u7B26",
235544
235692
  "textAnimatorPanel.tint": "\u8272\u8ABF",
235545
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u8ABF\uFF1A\u5B8C\u5168\u79FB\u52D5\u7684\u55AE\u4F4D\u6240\u5448\u73FE\u7684\u984F\u8272",
235693
+ "textAnimatorPanel.tintTheColourAFully": "\u8272\u8ABF\uFF1A\u5B8C\u5168\u79FB\u52D5\u7684\u55AE\u4F4D\u6240\u63A1\u7528\u7684\u8272\u5F69",
235546
235694
  "textAnimatorPanel.to": "\u5230",
235547
235695
  "textAnimatorPanel.turn": "\u8F49\u52D5",
235548
235696
  "textAnimatorPanel.typewriter": "\u6253\u5B57\u6A5F",
@@ -237415,7 +237563,7 @@ var require_ru = __commonJS({
237415
237563
  "designPanel.goToMainComponent": "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0443",
237416
237564
  "designPanel.grid": "\u0421\u0435\u0442\u043A\u0430",
237417
237565
  "designPanel.gridSettings": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0435\u0442\u043A\u0438",
237418
- "designPanel.hexColour": "\u0426\u0432\u0435\u0442 \u0432 \u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435",
237566
+ "designPanel.hexColour": "\u0426\u0432\u0435\u0442 Hex",
237419
237567
  "designPanel.horizontal": "\u041F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438",
237420
237568
  "designPanel.howTheInstanceSControl": "\u041A\u0430\u043A \u0448\u0430\u0433\u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430",
237421
237569
  "designPanel.hug": "\u041E\u0431\u0445\u0432\u0430\u0442",
@@ -237794,6 +237942,7 @@ var require_ru = __commonJS({
237794
237942
  "edit.cropTop": "\u0412\u0435\u0440\u0445",
237795
237943
  "edit.crossfadeNext": "\u041D\u0430\u043F\u043B\u044B\u0432 \u0432 {name}",
237796
237944
  "edit.curve": "\u041A\u0440\u0438\u0432\u0430\u044F",
237945
+ "edit.customShader": "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0448\u0435\u0439\u0434\u0435\u0440",
237797
237946
  "edit.cut": "\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C",
237798
237947
  "edit.db": "{value} \u0434\u0411",
237799
237948
  "edit.dbSilent": "\u2212\u221E \u0434\u0411",
@@ -237806,6 +237955,7 @@ var require_ru = __commonJS({
237806
237955
  "edit.duckRun": "\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0438\u0442\u044C {track} \u043F\u043E\u0434 {under}",
237807
237956
  "edit.duckTrack": "\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0438\u0435",
237808
237957
  "edit.duckUnder": "\u041F\u043E\u0434",
237958
+ "edit.editNodes": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u043B\u044B",
237809
237959
  "edit.editScene": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044E \u044D\u0442\u043E\u0439 \u0441\u0446\u0435\u043D\u044B",
237810
237960
  "edit.effect.BLUR": "\u0420\u0430\u0437\u043C\u044B\u0442\u0438\u0435",
237811
237961
  "edit.effect.BRIGHTNESS": "\u042F\u0440\u043A\u043E\u0441\u0442\u044C",
@@ -238031,6 +238181,19 @@ var require_ru = __commonJS({
238031
238181
  "edit.sequences": "\u0421\u0435\u043A\u0432\u0435\u043D\u0446\u0438\u0438",
238032
238182
  "edit.sequencesBin": "\u0421\u0435\u043A\u0432\u0435\u043D\u0446\u0438\u0438",
238033
238183
  "edit.sequenceSettings": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438",
238184
+ "edit.shader.chromatic": "\u0425\u0440\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0430\u0431\u0435\u0440\u0440\u0430\u0446\u0438\u044F",
238185
+ "edit.shader.duotone": "\u0414\u0443\u043E\u0442\u043E\u043D",
238186
+ "edit.shader.glitch": "\u0413\u043B\u0438\u0442\u0447",
238187
+ "edit.shader.glow": "\u0421\u0432\u0435\u0447\u0435\u043D\u0438\u0435",
238188
+ "edit.shader.halftone": "\u0420\u0430\u0441\u0442\u0440",
238189
+ "edit.shader.kaleidoscope": "\u041A\u0430\u043B\u0435\u0439\u0434\u043E\u0441\u043A\u043E\u043F",
238190
+ "edit.shader.liquid": "\u0416\u0438\u0434\u043A\u0438\u0439",
238191
+ "edit.shader.mirror": "\u0417\u0435\u0440\u043A\u0430\u043B\u043E",
238192
+ "edit.shader.sketch": "\u0421\u0432\u0435\u0447\u0435\u043D\u0438\u0435 \u043F\u043E \u043A\u0440\u0430\u044F\u043C",
238193
+ "edit.shader.soft": "\u041C\u044F\u0433\u043A\u0438\u0439 \u0444\u043E\u043A\u0443\u0441",
238194
+ "edit.shader.vhs": "VHS",
238195
+ "edit.shaders": "\u0428\u0435\u0439\u0434\u0435\u0440\u043D\u044B\u0435 \u044D\u0444\u0444\u0435\u043A\u0442\u044B",
238196
+ "edit.shadersHint": "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u043E\u0434\u0438\u043D \u0438\u0437 \u0448\u0435\u0439\u0434\u0435\u0440\u043D\u044B\u0445 \u044D\u0444\u0444\u0435\u043A\u0442\u043E\u0432 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0435 \u0438\u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0439\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0438 \u0441\u043E\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0433\u043E \u0438\u0437 \u0443\u0437\u043B\u043E\u0432.",
238034
238197
  "edit.showBin": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u0440\u0437\u0438\u043D\u0443",
238035
238198
  "edit.showInspector": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u043D\u0441\u043F\u0435\u043A\u0442\u043E\u0440 \u043A\u043B\u0438\u043F\u0430",
238036
238199
  "edit.showTrack": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0434\u043E\u0440\u043E\u0436\u043A\u0443",
@@ -238877,7 +239040,7 @@ var require_ru = __commonJS({
238877
239040
  "libraryLinkChoice.unlinked": "\u041E\u0442\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043D\u044B\u0439",
238878
239041
  "libraryLinkChoice.unlinkedALocalCopyInThis": "\u041E\u0442\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043D\u044B\u0439: \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0430\u044F \u043A\u043E\u043F\u0438\u044F \u0432 \u044D\u0442\u043E\u043C \u0444\u0430\u0439\u043B\u0435 \u2014 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438 \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F, \u0431\u0435\u0437 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u0439 \u0441\u0432\u044F\u0437\u0438 \u0441 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u043E\u0439",
238879
239042
  "librarySection.clickToAddFillsA": "\u041D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C (\u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u0443\u044E \u0444\u043E\u0442\u043E\u0440\u0430\u043C\u043A\u0443)",
238880
- "librarySwatchesPanel.colourVariablesBindTheFill": "\u0426\u0432\u0435\u0442\u043E\u0432\u044B\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u0438\u0432\u044F\u0437\u044B\u0432\u0430\u044E\u0442 \u0437\u0430\u043B\u0438\u0432\u043A\u0443, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u043C \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438",
239043
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u0426\u0432\u0435\u0442\u043E\u0432\u044B\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u0438\u0432\u044F\u0437\u044B\u0432\u0430\u044E\u0442 \u0437\u0430\u043B\u0438\u0432\u043A\u0443, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u043D\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u043E\u0439",
238881
239044
  "librarySwatchesPanel.noColoursMatch": "\u041D\u0435\u0442 \u0446\u0432\u0435\u0442\u043E\u0432, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0445 \xAB{query}\xBB",
238882
239045
  "librarySwatchesPanel.noColoursOrPaintStyles": "\u0412 \u044D\u0442\u043E\u0439 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0435 \u043D\u0435\u0442 \u0446\u0432\u0435\u0442\u043E\u0432 \u0438\u043B\u0438 \u0441\u0442\u0438\u043B\u0435\u0439 \u0437\u0430\u043B\u0438\u0432\u043A\u0438",
238883
239046
  "librarySwatchesPanel.noColourStylesOrVariables": "\u041F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0446\u0432\u0435\u0442\u043E\u0432\u044B\u0445 \u0441\u0442\u0438\u043B\u0435\u0439 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445. {value}",
@@ -239107,7 +239270,7 @@ var require_ru = __commonJS({
239107
239270
  "modifierList.noneYetABehaviourMoves": "\u041F\u043E\u043A\u0430 \u043D\u0435\u0442. \u041F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0441\u0430\u043C\u043E \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u2014 \u0434\u043B\u044F \u0432\u0440\u0430\u0449\u0435\u043D\u0438\u044F \u043A\u043B\u044E\u0447\u0438 \u043D\u0435 \u043D\u0443\u0436\u043D\u044B.",
239108
239271
  "modifierList.remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C {toLowerCase}",
239109
239272
  "modifierList.removeTheKeyHere": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u043B\u044E\u0447 {toLowerCase} \u0437\u0434\u0435\u0441\u044C",
239110
- "modifierList.theColourItMixesToward": "\u0426\u0432\u0435\u0442, \u043A \u043A\u043E\u0442\u043E\u0440\u043E\u043C\u0443 \u043E\u043D \u043F\u0440\u0438\u043C\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043C\u0435\u0440\u0435 \u0443\u0441\u0438\u043B\u0435\u043D\u0438\u044F \u0441\u0438\u0433\u043D\u0430\u043B\u0430",
239273
+ "modifierList.theColourItMixesToward": "\u0426\u0432\u0435\u0442, \u043A \u043A\u043E\u0442\u043E\u0440\u043E\u043C\u0443 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u0441\u043C\u0435\u0448\u0438\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0438 \u0441\u0438\u0433\u043D\u0430\u043B\u0430",
239111
239274
  "motionComponentSection.componentInputs": "\u0412\u0445\u043E\u0434\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430",
239112
239275
  "motionComponentSection.motion": "\u0414\u0432\u0438\u0436\u0435\u043D\u0438\u0435",
239113
239276
  "motionComponentSection.notUsedHere": "\u0417\u0434\u0435\u0441\u044C \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F",
@@ -240387,7 +240550,7 @@ var require_ru = __commonJS({
240387
240550
  "settingsDialog.accentSky": "\u041D\u0435\u0431\u0435\u0441\u043D\u044B\u0439",
240388
240551
  "settingsDialog.accentSystem": "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439",
240389
240552
  "settingsDialog.accentSystemBrowserBlue": "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439: \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0432\u043E\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0441\u0438\u043D\u0438\u0439 \u0446\u0432\u0435\u0442 \u0434\u043B\u044F \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043D\u0438\u0446. \u0424\u043B\u0430\u0436\u043A\u0438 \u0438 \u043F\u043E\u043B\u0437\u0443\u043D\u043A\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u043C\u0443 \u0430\u043A\u0446\u0435\u043D\u0442\u0443, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440; \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 PopCraft \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0435\u0433\u043E \u043F\u043E\u0432\u0441\u0435\u043C\u0435\u0441\u0442\u043D\u043E.",
240390
- "settingsDialog.accentSystemUnavailable": "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439: \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0432\u043E\u0439 \u0430\u043A\u0446\u0435\u043D\u0442\u043D\u044B\u0439 \u0446\u0432\u0435\u0442, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u041B\u0430\u0432\u0430\u043D\u0434\u043E\u0432\u044B\u0439.",
240553
+ "settingsDialog.accentSystemUnavailable": "\u0421\u0438\u0441\u0442\u0435\u043C\u0430: \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0432\u043E\u0439 \u0430\u043A\u0446\u0435\u043D\u0442\u043D\u044B\u0439 \u0446\u0432\u0435\u0442, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043B\u0430\u0432\u0430\u043D\u0434\u043E\u0432\u044B\u0439.",
240391
240554
  "settingsDialog.accentTeal": "\u0411\u0438\u0440\u044E\u0437\u043E\u0432\u044B\u0439",
240392
240555
  "settingsDialog.account": "\u0410\u043A\u043A\u0430\u0443\u043D\u0442",
240393
240556
  "settingsDialog.contrast": "\u041A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u043D\u043E\u0441\u0442\u044C",
@@ -240829,7 +240992,7 @@ var require_ru = __commonJS({
240829
240992
  "textAnimatorPanel.theRandomOrderSSeed": "\u0417\u0435\u0440\u043D\u043E \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0430",
240830
240993
  "textAnimatorPanel.thousandsSeparator": "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0442\u044B\u0441\u044F\u0447",
240831
240994
  "textAnimatorPanel.tint": "\u041E\u0442\u0442\u0435\u043D\u043E\u043A",
240832
- "textAnimatorPanel.tintTheColourAFully": "\u041E\u0442\u0442\u0435\u043D\u043E\u043A: \u0446\u0432\u0435\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u043D\u0430\u044F \u0435\u0434\u0438\u043D\u0438\u0446\u0430",
240995
+ "textAnimatorPanel.tintTheColourAFully": "\u041E\u0442\u0442\u0435\u043D\u043E\u043A: \u0446\u0432\u0435\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442",
240833
240996
  "textAnimatorPanel.to": "\u0414\u043E",
240834
240997
  "textAnimatorPanel.turn": "\u041F\u043E\u0432\u043E\u0440\u043E\u0442",
240835
240998
  "textAnimatorPanel.typewriter": "\u041F\u0435\u0447\u0430\u0442\u043D\u0430\u044F \u043C\u0430\u0448\u0438\u043D\u043A\u0430",
@@ -242702,7 +242865,7 @@ var require_ar = __commonJS({
242702
242865
  "designPanel.goToMainComponent": "\u0627\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0643\u0648\u0646 \u0627\u0644\u0631\u0626\u064A\u0633\u064A",
242703
242866
  "designPanel.grid": "\u0634\u0628\u0643\u0629",
242704
242867
  "designPanel.gridSettings": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0634\u0628\u0643\u0629",
242705
- "designPanel.hexColour": "\u0644\u0648\u0646 \u0633\u062F\u0627\u0633\u064A \u0639\u0634\u0631\u064A",
242868
+ "designPanel.hexColour": "\u0644\u0648\u0646 Hex",
242706
242869
  "designPanel.horizontal": "\u0623\u0641\u0642\u064A",
242707
242870
  "designPanel.howTheInstanceSControl": "\u062E\u0637\u0648\u0627\u062A \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u062B\u064A\u0644",
242708
242871
  "designPanel.hug": "\u0627\u062D\u062A\u0648\u0627\u0621",
@@ -243081,6 +243244,7 @@ var require_ar = __commonJS({
243081
243244
  "edit.cropTop": "\u0623\u0639\u0644\u0649",
243082
243245
  "edit.crossfadeNext": "\u062A\u0644\u0627\u0634\u064D \u0645\u062A\u0642\u0627\u0637\u0639 \u0625\u0644\u0649 {name}",
243083
243246
  "edit.curve": "\u0645\u0646\u062D\u0646\u0649",
243247
+ "edit.customShader": "\u0645\u0638\u0644\u0644 \u0645\u062E\u0635\u0635",
243084
243248
  "edit.cut": "\u0642\u0635",
243085
243249
  "edit.db": "{value} \u062F\u064A\u0633\u064A\u0628\u0644",
243086
243250
  "edit.dbSilent": "\u2212\u221E \u062F\u064A\u0633\u064A\u0628\u0644",
@@ -243093,6 +243257,7 @@ var require_ar = __commonJS({
243093
243257
  "edit.duckRun": "\u062E\u0641\u0636 \u0635\u0648\u062A {track} \u062A\u062D\u062A {under}",
243094
243258
  "edit.duckTrack": "\u062E\u0641\u0636 \u0627\u0644\u0635\u0648\u062A",
243095
243259
  "edit.duckUnder": "\u062A\u062D\u062A",
243260
+ "edit.editNodes": "\u062A\u0639\u062F\u064A\u0644 \u0639\u064F\u0642\u062F\u0647",
243096
243261
  "edit.editScene": "\u062A\u0639\u062F\u064A\u0644 \u062D\u0631\u0643\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0634\u0647\u062F",
243097
243262
  "edit.effect.BLUR": "\u062A\u0645\u0648\u064A\u0647",
243098
243263
  "edit.effect.BRIGHTNESS": "\u0633\u0637\u0648\u0639",
@@ -243128,7 +243293,7 @@ var require_ar = __commonJS({
243128
243293
  "edit.effectControl.Temp": "\u062F\u0631\u062C\u0629 \u0627\u0644\u062D\u0631\u0627\u0631\u0629",
243129
243294
  "edit.effectControl.Tint": "\u0627\u0644\u0635\u0628\u063A\u0629",
243130
243295
  "edit.effectDown": "\u062A\u062D\u0631\u064A\u0643 \u0644\u0644\u0623\u0633\u0641\u0644",
243131
- "edit.effectGroup.Color": "\u0627\u0644\u0644\u0648\u0646",
243296
+ "edit.effectGroup.Color": "\u0644\u0648\u0646",
243132
243297
  "edit.effectGroup.Filter": "\u062A\u0635\u0641\u064A\u0629",
243133
243298
  "edit.effectGroup.Warp": "\u062A\u0634\u0648\u064A\u0647",
243134
243299
  "edit.effects": "\u062A\u0623\u062B\u064A\u0631\u0627\u062A",
@@ -243318,6 +243483,19 @@ var require_ar = __commonJS({
243318
243483
  "edit.sequences": "\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
243319
243484
  "edit.sequencesBin": "\u0627\u0644\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
243320
243485
  "edit.sequenceSettings": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u0633\u0644\u0633\u0644",
243486
+ "edit.shader.chromatic": "\u0627\u0646\u062D\u0631\u0627\u0641 \u0644\u0648\u0646\u064A",
243487
+ "edit.shader.duotone": "\u062B\u0646\u0627\u0626\u064A \u0627\u0644\u0644\u0648\u0646",
243488
+ "edit.shader.glitch": "\u062E\u0644\u0644",
243489
+ "edit.shader.glow": "\u062A\u0648\u0647\u062C",
243490
+ "edit.shader.halftone": "\u062A\u0646\u0642\u064A\u0637",
243491
+ "edit.shader.kaleidoscope": "\u0643\u0627\u0644\u064A\u062F\u0648\u0633\u0643\u0648\u0628",
243492
+ "edit.shader.liquid": "\u0633\u0627\u0626\u0644",
243493
+ "edit.shader.mirror": "\u0645\u0631\u0622\u0629",
243494
+ "edit.shader.sketch": "\u062A\u0648\u0647\u062C \u0627\u0644\u062D\u0648\u0627\u0641",
243495
+ "edit.shader.soft": "\u062A\u0631\u0643\u064A\u0632 \u0646\u0627\u0639\u0645",
243496
+ "edit.shader.vhs": "VHS",
243497
+ "edit.shaders": "\u062A\u0623\u062B\u064A\u0631\u0627\u062A \u0627\u0644\u0645\u0638\u0644\u0644",
243498
+ "edit.shadersHint": "\u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0623\u062D\u062F\u0647\u0627 \u0641\u064A \u062A\u0623\u062B\u064A\u0631\u0627\u062A \u0627\u0644\u0645\u0638\u0644\u0644 \u0641\u064A \u0627\u0644\u0633\u0644\u0629\u060C \u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0638\u0644\u0644\u064B\u0627 \u0645\u062E\u0635\u0635\u064B\u0627 \u0648\u0642\u0645 \u0628\u0628\u0646\u0627\u0626\u0647 \u0645\u0646 \u0627\u0644\u0639\u064F\u0642\u062F.",
243321
243499
  "edit.showBin": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u0644\u0629",
243322
243500
  "edit.showInspector": "\u0625\u0638\u0647\u0627\u0631 \u0645\u0641\u062A\u0634 \u0627\u0644\u0645\u0642\u0637\u0639",
243323
243501
  "edit.showTrack": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0631",
@@ -243586,7 +243764,7 @@ var require_ar = __commonJS({
243586
243764
  "fillFlyout.spacingX": "\u062A\u0628\u0627\u0639\u062F \u0633",
243587
243765
  "fillFlyout.spacingY": "\u062A\u0628\u0627\u0639\u062F \u0635",
243588
243766
  "fillFlyout.stock": "\u0645\u062E\u0632\u0648\u0646",
243589
- "fillFlyout.stopColour": "\u0644\u0648\u0646 \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0648\u0642\u0641",
243767
+ "fillFlyout.stopColour": "\u0644\u0648\u0646 \u0627\u0644\u062A\u0648\u0642\u0641",
243590
243768
  "fillFlyout.stops": "\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0648\u0642\u0641",
243591
243769
  "fillFlyout.textureNoise": "\u0646\u0633\u064A\u062C / \u0636\u0648\u0636\u0627\u0621",
243592
243770
  "fillFlyout.thePosterFrameIsShown": "\u064A\u062A\u0645 \u0639\u0631\u0636 \u0625\u0637\u0627\u0631 \u0627\u0644\u0645\u0644\u0635\u0642 \u0639\u0646\u062F \u0627\u0644\u062A\u0648\u0642\u0641 \u0645\u0624\u0642\u062A\u064B\u0627 \u0648\u064A\u0633\u062A\u062E\u062F\u0645 \u0644\u062A\u0635\u062F\u064A\u0631 SVG/PDF.",
@@ -243906,7 +244084,7 @@ var require_ar = __commonJS({
243906
244084
  "imageAdjustSection.resetThisChannel": "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0646\u0627\u0629",
243907
244085
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "\u062D\u0641\u0638 \u0627\u0644\u062A\u0639\u062F\u064A\u0644\u0627\u062A \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u0643\u0625\u0639\u062F\u0627\u062F \u0645\u0633\u0628\u0642",
243908
244086
  "imageAdjustSection.tint": "\u062A\u0644\u0648\u064A\u0646",
243909
- "imageAdjustSection.tintColour": "\u0644\u0648\u0646 \u0627\u0644\u062A\u0644\u0648\u064A\u0646",
244087
+ "imageAdjustSection.tintColour": "\u0644\u0648\u0646 \u0627\u0644\u0635\u0628\u063A\u0629",
243910
244088
  "imageEditToolbar.altClickToPickA": "\u0627\u0646\u0642\u0631 \u0645\u0639 Alt \u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u0635\u062F\u0631",
243911
244089
  "imageEditToolbar.bringTheSelectionBack": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u062D\u062F\u064A\u062F",
243912
244090
  "imageEditToolbar.bringTheWholePictureBack": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627",
@@ -245674,7 +245852,7 @@ var require_ar = __commonJS({
245674
245852
  "settingsDialog.accentSky": "\u0633\u0645\u0627\u0648\u064A",
245675
245853
  "settingsDialog.accentSystem": "\u0627\u0644\u0646\u0638\u0627\u0645",
245676
245854
  "settingsDialog.accentSystemBrowserBlue": "\u0627\u0644\u0646\u0638\u0627\u0645: \u064A\u0634\u0627\u0631\u0643 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0644\u0648\u0646\u0647 \u0627\u0644\u0623\u0632\u0631\u0642 \u0627\u0644\u0642\u064A\u0627\u0633\u064A \u0641\u0642\u0637 \u0645\u0639 \u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0648\u064A\u0628. \u062A\u062A\u0628\u0639 \u0645\u0631\u0628\u0639\u0627\u062A \u0627\u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0648\u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u062A\u0645\u0631\u064A\u0631 \u0644\u0648\u0646 \u062A\u0645\u064A\u064A\u0632 \u0646\u0638\u0627\u0645\u0643 \u062D\u064A\u062B\u0645\u0627 \u064A\u0633\u0645\u062D \u0627\u0644\u0645\u062A\u0635\u0641\u062D\u061B \u064A\u0633\u062A\u062E\u062F\u0645 \u062A\u0637\u0628\u064A\u0642 PopCraft \u0630\u0644\u0643 \u0641\u064A \u0643\u0644 \u0645\u0643\u0627\u0646.",
245677
- "settingsDialog.accentSystemUnavailable": "\u0627\u0644\u0646\u0638\u0627\u0645: \u0644\u0627 \u064A\u0634\u0627\u0631\u0643 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0644\u0648\u0646 \u0627\u0644\u062A\u0645\u064A\u064A\u0632 \u0627\u0644\u062E\u0627\u0635 \u0628\u0647\u060C \u0644\u0630\u0627 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u062E\u0632\u0627\u0645\u064A.",
245855
+ "settingsDialog.accentSystemUnavailable": "\u0627\u0644\u0646\u0638\u0627\u0645: \u0644\u0627 \u064A\u0634\u0627\u0631\u0643 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0644\u0648\u0646 \u0627\u0644\u062A\u0645\u064A\u064A\u0632 \u0627\u0644\u062E\u0627\u0635 \u0628\u0647\u060C \u0644\u0630\u0627 \u064A\u062A\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u0648\u0646 \u0627\u0644\u0644\u0627\u0641\u0646\u062F\u0631.",
245678
245856
  "settingsDialog.accentTeal": "\u0623\u0632\u0631\u0642 \u0645\u062E\u0636\u0631",
245679
245857
  "settingsDialog.account": "\u0627\u0644\u062D\u0633\u0627\u0628",
245680
245858
  "settingsDialog.contrast": "\u0627\u0644\u062A\u0628\u0627\u064A\u0646",
@@ -246116,7 +246294,7 @@ var require_ar = __commonJS({
246116
246294
  "textAnimatorPanel.theRandomOrderSSeed": "\u0628\u0630\u0631\u0629 \u0627\u0644\u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A",
246117
246295
  "textAnimatorPanel.thousandsSeparator": "\u0641\u0627\u0635\u0644 \u0627\u0644\u0622\u0644\u0627\u0641",
246118
246296
  "textAnimatorPanel.tint": "\u062F\u0631\u062C\u0629 \u0627\u0644\u0644\u0648\u0646",
246119
- "textAnimatorPanel.tintTheColourAFully": "\u062F\u0631\u062C\u0629 \u0627\u0644\u0644\u0648\u0646: \u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0630\u064A \u062A\u0623\u062E\u0630\u0647 \u0627\u0644\u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u062A\u062D\u0631\u0643\u0629 \u0628\u0627\u0644\u0643\u0627\u0645\u0644",
246297
+ "textAnimatorPanel.tintTheColourAFully": "\u0627\u0644\u0635\u0628\u063A\u0629: \u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0630\u064A \u062A\u0623\u062E\u0630\u0647 \u0627\u0644\u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u062A\u062D\u0631\u0643\u0629 \u0628\u0627\u0644\u0643\u0627\u0645\u0644",
246120
246298
  "textAnimatorPanel.to": "\u0625\u0644\u0649",
246121
246299
  "textAnimatorPanel.turn": "\u062F\u0648\u0631\u0629",
246122
246300
  "textAnimatorPanel.typewriter": "\u0622\u0644\u0629 \u0643\u0627\u062A\u0628\u0629",
@@ -248368,6 +248546,7 @@ var require_hi = __commonJS({
248368
248546
  "edit.cropTop": "\u090A\u092A\u0930",
248369
248547
  "edit.crossfadeNext": "{name} \u092E\u0947\u0902 \u0915\u094D\u0930\u0949\u0938\u092B\u093C\u0947\u0921 \u0915\u0930\u0947\u0902",
248370
248548
  "edit.curve": "\u0935\u0915\u094D\u0930",
248549
+ "edit.customShader": "\u0915\u0938\u094D\u091F\u092E \u0936\u0947\u0921\u0930",
248371
248550
  "edit.cut": "\u0915\u091F \u0915\u0930\u0947\u0902",
248372
248551
  "edit.db": "{value} dB",
248373
248552
  "edit.dbSilent": "\u2212\u221E dB",
@@ -248380,6 +248559,7 @@ var require_hi = __commonJS({
248380
248559
  "edit.duckRun": "{track} \u0915\u094B {under} \u0915\u0947 \u0928\u0940\u091A\u0947 \u0921\u0915 \u0915\u0930\u0947\u0902",
248381
248560
  "edit.duckTrack": "\u0921\u0915 \u0915\u0930\u0947\u0902",
248382
248561
  "edit.duckUnder": "\u0928\u0940\u091A\u0947",
248562
+ "edit.editNodes": "\u0907\u0938\u0915\u0947 \u0928\u094B\u0921\u094D\u0938 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
248383
248563
  "edit.editScene": "\u0907\u0938 \u0926\u0943\u0936\u094D\u092F \u0915\u093E \u090F\u0928\u093F\u092E\u0947\u0936\u0928 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
248384
248564
  "edit.effect.BLUR": "\u092C\u094D\u0932\u0930",
248385
248565
  "edit.effect.BRIGHTNESS": "\u091A\u092E\u0915",
@@ -248605,6 +248785,19 @@ var require_hi = __commonJS({
248605
248785
  "edit.sequences": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E",
248606
248786
  "edit.sequencesBin": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E",
248607
248787
  "edit.sequenceSettings": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938",
248788
+ "edit.shader.chromatic": "\u0915\u094D\u0930\u094B\u092E\u0948\u091F\u093F\u0915 \u090F\u092C\u0930\u0947\u0936\u0928",
248789
+ "edit.shader.duotone": "\u0921\u094D\u092F\u0942\u091F\u094B\u0928",
248790
+ "edit.shader.glitch": "\u0917\u094D\u0932\u093F\u091A",
248791
+ "edit.shader.glow": "\u091A\u092E\u0915",
248792
+ "edit.shader.halftone": "\u0939\u093E\u092B\u091F\u094B\u0928",
248793
+ "edit.shader.kaleidoscope": "\u0915\u0948\u0932\u093F\u0921\u094B\u0938\u094D\u0915\u094B\u092A",
248794
+ "edit.shader.liquid": "\u0932\u093F\u0915\u094D\u0935\u093F\u0921",
248795
+ "edit.shader.mirror": "\u092E\u093F\u0930\u0930",
248796
+ "edit.shader.sketch": "\u0915\u093F\u0928\u093E\u0930\u094B\u0902 \u0915\u0940 \u091A\u092E\u0915",
248797
+ "edit.shader.soft": "\u0938\u0949\u092B\u094D\u091F \u092B\u094B\u0915\u0938",
248798
+ "edit.shader.vhs": "VHS",
248799
+ "edit.shaders": "\u0936\u0947\u0921\u0930 \u092A\u094D\u0930\u092D\u093E\u0935",
248800
+ "edit.shadersHint": "\u092C\u093F\u0928 \u0915\u0947 \u0936\u0947\u0921\u0930 \u092A\u094D\u0930\u092D\u093E\u0935\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u093F\u0938\u0940 \u090F\u0915 \u092A\u0930 \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902, \u092F\u093E \u090F\u0915 \u0915\u0938\u094D\u091F\u092E \u0936\u0947\u0921\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902 \u0914\u0930 \u0909\u0938\u0947 \u0928\u094B\u0921\u094D\u0938 \u0938\u0947 \u092C\u0928\u093E\u090F\u0902\u0964",
248608
248801
  "edit.showBin": "\u092C\u093F\u0928 \u0926\u093F\u0916\u093E\u090F\u0901",
248609
248802
  "edit.showInspector": "\u0915\u094D\u0932\u093F\u092A \u0907\u0902\u0938\u094D\u092A\u0947\u0915\u094D\u091F\u0930 \u0926\u093F\u0916\u093E\u090F\u0901",
248610
248803
  "edit.showTrack": "\u091F\u094D\u0930\u0948\u0915 \u0926\u093F\u0916\u093E\u090F\u0901",
@@ -249451,12 +249644,12 @@ var require_hi = __commonJS({
249451
249644
  "libraryLinkChoice.unlinked": "\u0905\u0928\u0932\u093F\u0902\u0915 \u0915\u093F\u092F\u093E \u0917\u092F\u093E",
249452
249645
  "libraryLinkChoice.unlinkedALocalCopyInThis": "\u0905\u0928\u0932\u093F\u0902\u0915 \u0915\u093F\u092F\u093E \u0917\u092F\u093E: \u0907\u0938 \u092B\u093C\u093E\u0907\u0932 \u092E\u0947\u0902 \u090F\u0915 \u0938\u094D\u0925\u093E\u0928\u0940\u092F \u092A\u094D\u0930\u0924\u093F\u0932\u093F\u092A\u093F \u2014 \u0907\u0928\u092A\u0941\u091F \u0914\u0930 \u092E\u094B\u0936\u0928 \u0930\u0916\u0947 \u0917\u090F, \u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u0938\u0947 \u0915\u094B\u0908 \u0932\u093F\u0902\u0915 \u0935\u093E\u092A\u0938 \u0928\u0939\u0940\u0902",
249453
249646
  "librarySection.clickToAddFillsA": "\u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902 (\u090F\u0915 \u091A\u092F\u0928\u093F\u0924 \u092B\u094B\u091F\u094B \u092B\u094D\u0930\u0947\u092E \u092D\u0930\u0924\u093E \u0939\u0948)",
249454
- "librarySwatchesPanel.colourVariablesBindTheFill": "\u0930\u0902\u0917 \u0935\u0948\u0930\u093F\u090F\u092C\u0932 \u092D\u0930\u0923 \u0915\u094B \u092C\u093E\u0902\u0927\u0924\u0947 \u0939\u0948\u0902, \u0907\u0938\u0932\u093F\u090F \u092F\u0939 \u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u0915\u0947 \u0905\u092A\u0921\u0947\u091F \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0924\u093E \u0939\u0948",
249647
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u0930\u0902\u0917 \u0935\u0948\u0930\u093F\u090F\u092C\u0932 \u092B\u093F\u0932 \u0915\u094B \u092C\u093E\u0902\u0927\u0924\u0947 \u0939\u0948\u0902, \u0924\u093E\u0915\u093F \u092F\u0939 \u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u0915\u0947 \u0905\u092A\u0921\u0947\u091F \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947",
249455
249648
  "librarySwatchesPanel.noColoursMatch": "\u201C{query}\u201D \u0938\u0947 \u0915\u094B\u0908 \u0930\u0902\u0917 \u092E\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093E\u0924\u093E",
249456
- "librarySwatchesPanel.noColoursOrPaintStyles": "\u0907\u0938 \u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u092E\u0947\u0902 \u0915\u094B\u0908 \u0930\u0902\u0917 \u092F\u093E \u092A\u0947\u0902\u091F \u0936\u0948\u0932\u093F\u092F\u093E\u0901 \u0928\u0939\u0940\u0902 \u0939\u0948\u0902",
249457
- "librarySwatchesPanel.noColourStylesOrVariables": "\u0905\u092D\u0940 \u0924\u0915 \u0915\u094B\u0908 \u0930\u0902\u0917 \u0936\u0948\u0932\u093F\u092F\u093E\u0901 \u092F\u093E \u0935\u0948\u0930\u093F\u090F\u092C\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964 {value}",
249458
- "librarySwatchesPanel.searchLibraryColours": "\u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u0915\u0947 \u0930\u0902\u0917 \u0916\u094B\u091C\u0947\u0902",
249459
- "librarySwatchesPanel.searchStylesAndColours": "\u0936\u0948\u0932\u093F\u092F\u093E\u0901 \u0914\u0930 \u0930\u0902\u0917 \u0916\u094B\u091C\u0947\u0902",
249649
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u0907\u0938 \u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u092E\u0947\u0902 \u0915\u094B\u0908 \u0930\u0902\u0917 \u092F\u093E \u092A\u0947\u0902\u091F \u0938\u094D\u091F\u093E\u0907\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948",
249650
+ "librarySwatchesPanel.noColourStylesOrVariables": "\u0905\u092D\u0940 \u0924\u0915 \u0915\u094B\u0908 \u0930\u0902\u0917 \u0938\u094D\u091F\u093E\u0907\u0932 \u092F\u093E \u0935\u0948\u0930\u093F\u090F\u092C\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 {value}",
249651
+ "librarySwatchesPanel.searchLibraryColours": "\u0932\u093E\u0907\u092C\u094D\u0930\u0947\u0930\u0940 \u0915\u0947 \u0930\u0902\u0917\u094B\u0902 \u0915\u094B \u0916\u094B\u091C\u0947\u0902",
249652
+ "librarySwatchesPanel.searchStylesAndColours": "\u0938\u094D\u091F\u093E\u0907\u0932 \u0914\u0930 \u0930\u0902\u0917\u094B\u0902 \u0915\u094B \u0916\u094B\u091C\u0947\u0902",
249460
249653
  "linkFields.anchor": "\u0907\u0938 \u092A\u0943\u0937\u094D\u0920 \u092A\u0930 \u092A\u0930\u0924",
249461
249654
  "linkFields.anchorOption": "{name} (#{anchor})",
249462
249655
  "linkFields.choose": "\u091A\u0941\u0928\u0947\u0902\u2026",
@@ -249681,7 +249874,7 @@ var require_hi = __commonJS({
249681
249874
  "modifierList.noneYetABehaviourMoves": "\u0905\u092D\u0940 \u0924\u0915 \u0915\u094B\u0908 \u0928\u0939\u0940\u0902\u0964 \u090F\u0915 \u0935\u094D\u092F\u0935\u0939\u093E\u0930 \u092E\u093E\u0928 \u0915\u094B \u0905\u092A\u0928\u0947 \u0906\u092A \u092C\u0926\u0932\u0924\u093E \u0939\u0948 \u2014 \u090F\u0915 \u0938\u094D\u092A\u093F\u0928 \u0915\u094B \u0915\u093F\u0938\u0940 \u0915\u0941\u0902\u091C\u0940 \u0915\u0940 \u0906\u0935\u0936\u094D\u092F\u0915\u0924\u093E \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u0940\u0964",
249682
249875
  "modifierList.remove": "{toLowerCase} \u0939\u091F\u093E\u090F\u0901",
249683
249876
  "modifierList.removeTheKeyHere": "\u092F\u0939\u093E\u0901 \u0938\u0947 {toLowerCase} \u0915\u0941\u0902\u091C\u0940 \u0939\u091F\u093E\u090F\u0901",
249684
- "modifierList.theColourItMixesToward": "\u0935\u0939 \u0930\u0902\u0917 \u091C\u093F\u0938\u0915\u0940 \u0913\u0930 \u092F\u0939 \u092E\u093F\u0936\u094D\u0930\u093F\u0924 \u0939\u094B\u0924\u093E \u0939\u0948 \u091C\u0948\u0938\u0947-\u091C\u0948\u0938\u0947 \u0938\u093F\u0917\u094D\u0928\u0932 \u092C\u0922\u093C\u0924\u093E \u0939\u0948",
249877
+ "modifierList.theColourItMixesToward": "\u0935\u0939 \u0930\u0902\u0917 \u091C\u093F\u0938\u0915\u0940 \u0913\u0930 \u0938\u093F\u0917\u094D\u0928\u0932 \u092C\u0922\u093C\u0928\u0947 \u092A\u0930 \u092F\u0939 \u092E\u093F\u0932\u0924\u093E \u0939\u0948",
249685
249878
  "motionComponentSection.componentInputs": "\u0918\u091F\u0915 \u0907\u0928\u092A\u0941\u091F",
249686
249879
  "motionComponentSection.motion": "\u0917\u0924\u093F",
249687
249880
  "motionComponentSection.notUsedHere": "\u092F\u0939\u093E\u0901 \u0909\u092A\u092F\u094B\u0917 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u0917\u092F\u093E",
@@ -251403,7 +251596,7 @@ var require_hi = __commonJS({
251403
251596
  "textAnimatorPanel.theRandomOrderSSeed": "\u092F\u093E\u0926\u0943\u091A\u094D\u091B\u093F\u0915 \u0915\u094D\u0930\u092E \u0915\u093E \u0938\u0940\u0921",
251404
251597
  "textAnimatorPanel.thousandsSeparator": "\u0939\u091C\u093E\u0930\u094B\u0902 \u0915\u093E \u0935\u093F\u092D\u093E\u091C\u0915",
251405
251598
  "textAnimatorPanel.tint": "\u091F\u093F\u0902\u091F",
251406
- "textAnimatorPanel.tintTheColourAFully": "\u091F\u093F\u0902\u091F: \u0935\u0939 \u0930\u0902\u0917 \u091C\u094B \u092A\u0942\u0930\u0940 \u0924\u0930\u0939 \u0938\u0947 \u091A\u0932\u0940 \u0917\u0908 \u0907\u0915\u093E\u0908 \u0932\u0947\u0924\u0940 \u0939\u0948",
251599
+ "textAnimatorPanel.tintTheColourAFully": "\u091F\u093F\u0902\u091F: \u092A\u0942\u0930\u0940 \u0924\u0930\u0939 \u0938\u0947 \u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u093F\u0924 \u0907\u0915\u093E\u0908 \u0926\u094D\u0935\u093E\u0930\u093E \u0932\u093F\u092F\u093E \u0917\u092F\u093E \u0930\u0902\u0917",
251407
251600
  "textAnimatorPanel.to": "\u0924\u0915",
251408
251601
  "textAnimatorPanel.turn": "\u092E\u094B\u0921\u093C",
251409
251602
  "textAnimatorPanel.typewriter": "\u091F\u093E\u0907\u092A\u0930\u093E\u0907\u091F\u0930",
@@ -253670,9 +253863,11 @@ var init_shader_graph = __esm({
253670
253863
  lib: ["aspect"],
253671
253864
  emit: (c2) => c2.opt("space") === "centered" ? `return (uv - vec2<f32>(0.5)) * vec2<f32>(sgl_aspect(), 1.0) * 2.0;` : `return uv;`
253672
253865
  },
253866
+ // The picture underneath: a clip's frame when the graph is a clip effect (Edit mode), sampled at the coordinate.
253867
+ { kind: "image", label: "Image", category: "input", output: "vec4f", inputs: [coord2], emit: (c2) => `return image_at(${c2.in("uv")});` },
253673
253868
  { kind: "time", label: "Time", category: "input", output: "f32", time: true, inputs: [f322("speed", 1, [0, 4])], emit: (c2) => `return sg_time * ${c2.in("speed")};` },
253674
253869
  { kind: "value", label: "Value", category: "input", output: "f32", inputs: [f322("value", 0.5, [0, 1])], emit: (c2) => `return ${c2.in("value")};` },
253675
- { kind: "color", label: "Colour", category: "input", output: "vec4f", inputs: [col2("color", WHITE2)], emit: (c2) => `return ${c2.in("color")};` },
253870
+ { kind: "color", label: "Color", category: "input", output: "vec4f", inputs: [col2("color", WHITE2)], emit: (c2) => `return ${c2.in("color")};` },
253676
253871
  {
253677
253872
  // The music: its `value` knob is fed by an audio behaviour on the fill (lib/motion/shader-audio.ts), 0…1.
253678
253873
  kind: "audio",
@@ -253726,10 +253921,10 @@ var init_shader_graph = __esm({
253726
253921
  return vec4<f32>(mix(a.rgb, ${mixed}, k), max(a.a, b.a * min(k, 1.0)));`;
253727
253922
  }
253728
253923
  },
253729
- { kind: "hsv", label: "HSV colour", category: "color", output: "vec4f", lib: ["hsv"], inputs: [f322("hue", 0, [0, 1]), f322("saturation", 0.8, [0, 1]), f322("value", 1, [0, 1])], emit: (c2) => `return vec4<f32>(sgl_hsv(${c2.in("hue")}, ${c2.in("saturation")}, ${c2.in("value")}), 1.0);` },
253924
+ { kind: "hsv", label: "HSV color", category: "color", output: "vec4f", lib: ["hsv"], inputs: [f322("hue", 0, [0, 1]), f322("saturation", 0.8, [0, 1]), f322("value", 1, [0, 1])], emit: (c2) => `return vec4<f32>(sgl_hsv(${c2.in("hue")}, ${c2.in("saturation")}, ${c2.in("value")}), 1.0);` },
253730
253925
  {
253731
253926
  kind: "ramp",
253732
- label: "Colour ramp",
253927
+ label: "Color ramp",
253733
253928
  category: "color",
253734
253929
  output: "vec4f",
253735
253930
  inputs: [f322("t", 0.5, [0, 1]), col2("a", BLACK2), col2("b", { r: 0.5, g: 0.2, b: 0.9, a: 1 }), col2("c", WHITE2)],
@@ -253929,6 +254124,101 @@ var init_shader_graph = __esm({
253929
254124
  let w2 = vec2<f32>(sgl_fbm(p0 + w * 3.0 + vec2<f32>(1.7, 9.2) + t), sgl_fbm(p0 + w * 3.0 + vec2<f32>(8.3, 2.8) - t));
253930
254125
  let k = uv + (w2 - vec2<f32>(0.5)) * ${c2.in("amount")};
253931
254126
  return ${c2.in("input", "k")};`
254127
+ },
254128
+ // Effects on whatever feeds them (an Image, a pattern): each samples its input around the coordinate.
254129
+ {
254130
+ kind: "rgbSplit",
254131
+ label: "RGB split",
254132
+ category: "effect",
254133
+ output: "vec4f",
254134
+ inputs: [col2("input", BLACK2), f322("amount", 8e-3, [0, 0.05]), f322("angle", 0, [-3.1416, 3.1416])],
254135
+ emit: (c2) => `let d = vec2<f32>(cos(${c2.in("angle")}), sin(${c2.in("angle")})) * ${c2.in("amount")};
254136
+ let mid = ${c2.in("input", "uv")};
254137
+ return vec4<f32>(${c2.in("input", "uv + d")}.r, mid.g, ${c2.in("input", "uv - d")}.b, mid.a);`
254138
+ },
254139
+ {
254140
+ kind: "blur",
254141
+ label: "Blur",
254142
+ category: "effect",
254143
+ output: "vec4f",
254144
+ inputs: [col2("input", BLACK2), f322("radius", 6e-3, [0, 0.05])],
254145
+ emit: (c2) => {
254146
+ const taps = [];
254147
+ for (let x2 = -1; x2 <= 1; x2++) for (let y = -1; y <= 1; y++) taps.push(`${c2.in("input", `uv + vec2<f32>(${x2}.0, ${y}.0) * r`)} * ${x2 === 0 && y === 0 ? "0.25" : x2 === 0 || y === 0 ? "0.125" : "0.0625"}`);
254148
+ return `let r = ${c2.in("radius")};
254149
+ return ${taps.join(" +\n ")};`;
254150
+ }
254151
+ },
254152
+ {
254153
+ kind: "glow",
254154
+ label: "Glow",
254155
+ category: "effect",
254156
+ output: "vec4f",
254157
+ inputs: [col2("input", BLACK2), f322("radius", 0.01, [0, 0.05]), f322("amount", 0.8, [0, 3]), f322("threshold", 0.6, [0, 1])],
254158
+ emit: (c2) => {
254159
+ const taps = [];
254160
+ for (let i2 = 0; i2 < 8; i2++) {
254161
+ const a = i2 / 8 * Math.PI * 2;
254162
+ taps.push(`max(${c2.in("input", `uv + vec2<f32>(${Math.cos(a).toFixed(4)}, ${Math.sin(a).toFixed(4)}) * r`)}.rgb - vec3<f32>(th), vec3<f32>(0.0))`);
254163
+ }
254164
+ return `let r = ${c2.in("radius")};
254165
+ let th = ${c2.in("threshold")};
254166
+ let base = ${c2.in("input", "uv")};
254167
+ let halo = (${taps.join(" +\n ")}) / 8.0;
254168
+ return vec4<f32>(base.rgb + halo * ${c2.in("amount")}, base.a);`;
254169
+ }
254170
+ },
254171
+ {
254172
+ kind: "edges",
254173
+ label: "Edges",
254174
+ category: "effect",
254175
+ output: "vec4f",
254176
+ inputs: [col2("input", BLACK2), f322("width", 2e-3, [0, 0.02]), f322("strength", 2, [0, 8])],
254177
+ emit: (c2) => `let w = ${c2.in("width")};
254178
+ let l = dot(${c2.in("input", "uv - vec2<f32>(w, 0.0)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254179
+ let rr = dot(${c2.in("input", "uv + vec2<f32>(w, 0.0)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254180
+ let t = dot(${c2.in("input", "uv - vec2<f32>(0.0, w)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254181
+ let b = dot(${c2.in("input", "uv + vec2<f32>(0.0, w)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254182
+ let e = clamp(length(vec2<f32>(rr - l, b - t)) * ${c2.in("strength")}, 0.0, 1.0);
254183
+ return vec4<f32>(vec3<f32>(e), ${c2.in("input", "uv")}.a);`
254184
+ },
254185
+ {
254186
+ kind: "halftone",
254187
+ label: "Halftone",
254188
+ category: "effect",
254189
+ output: "vec4f",
254190
+ lib: ["aspect"],
254191
+ inputs: [col2("input", BLACK2), f322("size", 0.02, [4e-3, 0.1]), col2("ink", BLACK2), col2("paper", WHITE2)],
254192
+ emit: (c2) => `let s = ${c2.in("size")};
254193
+ let a = vec2<f32>(sgl_aspect(), 1.0);
254194
+ let q = uv * a / s;
254195
+ let cell = (floor(q) + vec2<f32>(0.5)) * s / a;
254196
+ let k = ${c2.in("input", "cell")};
254197
+ let dark = 1.0 - dot(k.rgb, vec3<f32>(0.299, 0.587, 0.114));
254198
+ let d = length(fract(q) - vec2<f32>(0.5));
254199
+ let dot_ = 1.0 - smoothstep(sqrt(dark) * 0.5 - 0.04, sqrt(dark) * 0.5 + 0.04, d);
254200
+ return vec4<f32>(mix(${c2.in("paper")}.rgb, ${c2.in("ink")}.rgb, dot_), k.a);`
254201
+ },
254202
+ {
254203
+ kind: "scanlines",
254204
+ label: "Scanlines",
254205
+ category: "effect",
254206
+ output: "vec4f",
254207
+ inputs: [col2("input", BLACK2), f322("lines", 240, [20, 1e3]), f322("amount", 0.25, [0, 1])],
254208
+ emit: (c2) => `let k = ${c2.in("input", "uv")};
254209
+ let s = 0.5 + 0.5 * cos(uv.y * ${c2.in("lines")} * ${TAU2});
254210
+ return vec4<f32>(k.rgb * (1.0 - ${c2.in("amount")} * s), k.a);`
254211
+ },
254212
+ { kind: "luma", label: "Luma", category: "color", output: "f32", inputs: [col2("color", WHITE2)], emit: (c2) => `return dot(${c2.in("color")}.rgb, vec3<f32>(0.299, 0.587, 0.114));` },
254213
+ {
254214
+ kind: "duotone",
254215
+ label: "Duotone",
254216
+ category: "color",
254217
+ output: "vec4f",
254218
+ inputs: [col2("color", WHITE2), col2("shadows", { r: 0.1, g: 0.05, b: 0.35, a: 1 }), col2("highlights", { r: 1, g: 0.8, b: 0.2, a: 1 })],
254219
+ emit: (c2) => `let k = ${c2.in("color")};
254220
+ let l = dot(k.rgb, vec3<f32>(0.299, 0.587, 0.114));
254221
+ return vec4<f32>(mix(${c2.in("shadows")}.rgb, ${c2.in("highlights")}.rgb, l), k.a);`
253932
254222
  },
253933
254223
  {
253934
254224
  kind: "mirror",
@@ -256604,19 +256894,19 @@ function rootInstances(nodes, rootId) {
256604
256894
  return out;
256605
256895
  }
256606
256896
  function frameMotionEnd(nodes, rootId) {
256607
- let memo7 = endMemo.get(nodes);
256608
- if (!memo7) {
256609
- memo7 = /* @__PURE__ */ new Map();
256610
- endMemo.set(nodes, memo7);
256897
+ let memo8 = endMemo.get(nodes);
256898
+ if (!memo8) {
256899
+ memo8 = /* @__PURE__ */ new Map();
256900
+ endMemo.set(nodes, memo8);
256611
256901
  }
256612
- const hit = memo7.get(rootId);
256902
+ const hit = memo8.get(rootId);
256613
256903
  if (hit !== void 0) return hit;
256614
256904
  let end = motionEnd(nodes, rootId);
256615
256905
  for (const { m, shift } of rootInstances(nodes, rootId)) {
256616
256906
  const e = playbackEnd(m);
256617
256907
  if (Number.isFinite(e)) end = Math.max(end, shift + e);
256618
256908
  }
256619
- memo7.set(rootId, end);
256909
+ memo8.set(rootId, end);
256620
256910
  return end;
256621
256911
  }
256622
256912
  function frameRunsOn(nodes, rootId) {
@@ -256651,19 +256941,19 @@ function layerOf(nodes, vid, id3, comp) {
256651
256941
  byComp = /* @__PURE__ */ new Map();
256652
256942
  layerMemo.set(nodes, byComp);
256653
256943
  }
256654
- let memo7 = byComp.get(comp);
256655
- if (!memo7) {
256656
- memo7 = /* @__PURE__ */ new Map();
256657
- byComp.set(comp, memo7);
256944
+ let memo8 = byComp.get(comp);
256945
+ if (!memo8) {
256946
+ memo8 = /* @__PURE__ */ new Map();
256947
+ byComp.set(comp, memo8);
256658
256948
  }
256659
256949
  const key5 = joinVirtual(vid, id3);
256660
- let hit = memo7.get(key5);
256950
+ let hit = memo8.get(key5);
256661
256951
  if (hit === void 0) {
256662
256952
  const resolved = resolveVirtualNode2(nodes, key5);
256663
256953
  const parent = nodes[id3]?.parentId;
256664
256954
  const parentId = parent === comp ? vid : joinVirtual(vid, parent ?? "");
256665
256955
  hit = !resolved ? null : resolved.parentId === parentId ? resolved : { ...resolved, parentId };
256666
- memo7.set(key5, hit);
256956
+ memo8.set(key5, hit);
256667
256957
  }
256668
256958
  return hit;
256669
256959
  }
@@ -257824,7 +258114,7 @@ function drawCue(cue, style, t3, stage) {
257824
258114
  fontStyle: "normal",
257825
258115
  textAlign: "CENTER",
257826
258116
  verticalAlign: "CENTER",
257827
- lineHeight: 1.2,
258117
+ lineHeight: lineH,
257828
258118
  letterSpacing: 0,
257829
258119
  paragraphSpacing: 0,
257830
258120
  paragraphIndent: 0,
@@ -259227,11 +259517,7 @@ function audioModelFor(use, id3) {
259227
259517
  if (!id3) return AUDIO_MODELS[use];
259228
259518
  return AUDIO_MODEL_OPTIONS[use].find((m) => m.id === id3) ?? null;
259229
259519
  }
259230
- function audioUseBlocked(use) {
259231
- if (use === "voice" && !voiceEnabled()) return "Voice-over needs Hypery's ai:audio permission, which this app does not ask for yet.";
259232
- return null;
259233
- }
259234
- var AUDIO_USES, MUSICGEN, LYRIA, AUDIOGEN, AUDIO_MODELS, AUDIO_MODEL_OPTIONS, SPEECH_MODEL_IDS, MUSIC_MODEL_IDS, SFX_MODEL_IDS, AUDIO_LIST_PRICES, VOICES, AUDIO_LIMITS, voiceEnabled;
259520
+ var AUDIO_USES, MUSICGEN, LYRIA, AUDIOGEN, AUDIO_MODELS, AUDIO_MODEL_OPTIONS, SPEECH_MODEL_IDS, MUSIC_MODEL_IDS, SFX_MODEL_IDS, AUDIO_LIST_PRICES, VOICES, AUDIO_LIMITS;
259235
259521
  var init_audio_models = __esm({
259236
259522
  "lib/ai/audio-models.ts"() {
259237
259523
  "use strict";
@@ -259325,7 +259611,6 @@ var init_audio_models = __esm({
259325
259611
  /** Upper bound for one generation (the route aborts the upstream request after this). */
259326
259612
  timeoutMs: 28e4
259327
259613
  };
259328
- voiceEnabled = () => process.env.NEXT_PUBLIC_HYPERY_AUDIO === "1";
259329
259614
  }
259330
259615
  });
259331
259616
 
@@ -260192,6 +260477,14 @@ function repairClipMotion(clip) {
260192
260477
  out = { ...out };
260193
260478
  delete out.matte;
260194
260479
  }
260480
+ if (clip.shaders !== void 0) {
260481
+ const ok2 = Array.isArray(clip.shaders) ? clip.shaders.filter((x2) => isObj5(x2) && typeof x2.id === "string" && typeof x2.name === "string" && isObj5(x2.graph) && isObj5(x2.graph.nodes) && isObj5(x2.graph.edges)) : [];
260482
+ if (!Array.isArray(clip.shaders) || ok2.length !== clip.shaders.length) {
260483
+ out = { ...out };
260484
+ if (ok2.length) out.shaders = ok2;
260485
+ else delete out.shaders;
260486
+ }
260487
+ }
260195
260488
  if ("angle" in clip && clip.angle !== void 0 && !(Number.isInteger(clip.angle) && clip.angle >= 1 && clip.angle < MAX_VIDEO_TRACKS)) {
260196
260489
  out = { ...out };
260197
260490
  delete out.angle;
@@ -260364,6 +260657,7 @@ function repairFx(raw) {
260364
260657
  var isObj5, finite6, optFinite, isVec2, TIMELINE_COLOR_IDS, TIMELINE_COLORS, UNITS, ORDERS, PROP_KEYS, ANIMATOR_ID, MOTION_TYPES, TRANSITIONS, isFraction, MEDIA_HASH, LAYER_KINDS, ADJUSTMENT_TYPES, OPACITY_PROPERTY, CAPTION_PRESET_NAMES, inRange;
260365
260658
  var init_invariants = __esm({
260366
260659
  "lib/motion/invariants.ts"() {
260660
+ "use strict";
260367
260661
  init_adjustments();
260368
260662
  init_captions();
260369
260663
  init_lut();
@@ -263422,7 +263716,6 @@ function getActiveRenderer() {
263422
263716
  var active;
263423
263717
  var init_renderer_registry = __esm({
263424
263718
  "lib/engine/renderer-registry.ts"() {
263425
- "use strict";
263426
263719
  active = null;
263427
263720
  }
263428
263721
  });
@@ -265487,7 +265780,7 @@ function meshGradient() {
265487
265780
  g.node("mesh", "meshGradient", { speed: 0.3, spread: 0.4, colorA: hex5("#8c5cf5"), colorB: hex5("#338cfa"), colorC: hex5("#f56b9e"), base: hex5("#29293d") });
265488
265781
  g.node("out", "output");
265489
265782
  g.wire("mesh", "out.color");
265490
- return { id: "mesh-gradient", name: "Mesh gradient", group: "background", description: "Three soft lights drifting round each other over a base colour", graph: g.build(), colors: { bg: "mesh_base", a: "mesh_colorA", b: "mesh_colorB", c: "mesh_colorC" }, legacyParams: sameNames("mesh", "meshGradient") };
265783
+ return { id: "mesh-gradient", name: "Mesh gradient", group: "background", description: "Three soft lights drifting round each other over a base color", graph: g.build(), colors: { bg: "mesh_base", a: "mesh_colorA", b: "mesh_colorB", c: "mesh_colorC" }, legacyParams: sameNames("mesh", "meshGradient") };
265491
265784
  }
265492
265785
  function plasma() {
265493
265786
  const g = new GraphBuilder();
@@ -265578,7 +265871,7 @@ function zoomFeedback() {
265578
265871
  g.node("glow", "brightness");
265579
265872
  g.node("out", "output");
265580
265873
  g.wire("pl", "ramp.t").wire("bass", "rad.a").wire("rad", "radius.a").wire("radius", "outer.radius").wire("radius", "radiusIn.a").wire("radiusIn", "inner.radius").wire("outer", "ring.a").wire("inner", "ring.b").wire("ramp", "mask.b").wire("ring", "mask.t").wire("mask", "fb.input").wire("beat", "glowAmt.a").wire("glowAmt", "glowSum.a").wire("glowSum", "glow.gain").wire("fb", "glow.color").wire("glow", "out.color");
265581
- return { id: "zoom-feedback", name: "Zoom feedback", group: "visualizer", description: "A ring of plasma colour that swells with the bass, echoed inward as it turns into a tunnel of rings, flaring on the beat", graph: g.build(), colors: { bg: "mask_a", a: "ramp_a", b: "ramp_b", c: "ramp_c" } };
265874
+ return { id: "zoom-feedback", name: "Zoom feedback", group: "visualizer", description: "A ring of plasma color that swells with the bass, echoed inward as it turns into a tunnel of rings, flaring on the beat", graph: g.build(), colors: { bg: "mask_a", a: "ramp_a", b: "ramp_b", c: "ramp_c" } };
265582
265875
  }
265583
265876
  function kaleidoscope() {
265584
265877
  const g = new GraphBuilder();
@@ -265668,7 +265961,7 @@ function liquidInk() {
265668
265961
  g.node("glow", "brightness");
265669
265962
  g.node("out", "output");
265670
265963
  g.wire("nz", "ramp.t").wire("ramp", "liq.input").wire("bass", "warpAmt.a").wire("warpAmt", "warp.a").wire("warp", "liq.amount").wire("liq", "fb.input").wire("level", "gainAmt.a").wire("gainAmt", "gain.a").wire("gain", "glow.gain").wire("fb", "glow.color").wire("glow", "out.color");
265671
- return { id: "liquid-ink", name: "Liquid ink", group: "visualizer", description: "Soft colour in flowing currents, stirred harder on the bass and brighter with the level", graph: g.build(), colors: { a: "ramp_a", b: "ramp_b", c: "ramp_c" } };
265964
+ return { id: "liquid-ink", name: "Liquid ink", group: "visualizer", description: "Soft color in flowing currents, stirred harder on the bass and brighter with the level", graph: g.build(), colors: { a: "ramp_a", b: "ramp_b", c: "ramp_c" } };
265672
265965
  }
265673
265966
  var hex5, DEEP, VIOLET, PINK, CYAN2, GOLD, INK3, sameNames, PARTICLES, GRAPH_PRESETS;
265674
265967
  var init_shader_graph_presets = __esm({
@@ -266202,7 +266495,6 @@ fn shade(uv: vec2<f32>, res: vec2<f32>, tm: f32) -> vec4<f32> {
266202
266495
  var SHADER_PRESETS, shaderPreset, legacyPresetOf, DEFAULT_SHADER_PRESET, DEFAULT_TEXTURE_PARAMS, f, vec4, NOISE_LIB;
266203
266496
  var init_shader_presets = __esm({
266204
266497
  "lib/engine/shader-presets.ts"() {
266205
- "use strict";
266206
266498
  init_shader_graph();
266207
266499
  init_shader_graph_presets();
266208
266500
  init_shader_presets_legacy();
@@ -266910,7 +267202,7 @@ var init_config2 = __esm({
266910
267202
  ...(process.env.NEXT_PUBLIC_HYPERY_SCOPES ?? "read write").split(/\s+/).filter(Boolean),
266911
267203
  ...HYPERY_AI_SCOPES,
266912
267204
  ...plansEnabled() ? HYPERY_BILLING_SCOPES : [],
266913
- ...process.env.NEXT_PUBLIC_HYPERY_AUDIO === "1" ? HYPERY_AUDIO_SCOPES : []
267205
+ ...HYPERY_AUDIO_SCOPES
266914
267206
  ]));
266915
267207
  cloudEnabled = () => (process.env.NEXT_PUBLIC_HYPERY_CLIENT_ID ?? "").length > 0;
266916
267208
  }
@@ -267921,12 +268213,12 @@ async function writeSnapshot(snap) {
267921
268213
  } else if (header?.layout === SPLIT_LAYOUT && Array.isArray(header.nodeIds)) {
267922
268214
  for (const nid of header.nodeIds) if (!(nid in nodes)) gone.push(nodeKey(id3, nid));
267923
268215
  }
267924
- const seq8 = (header?.seq ?? 0) + 1;
268216
+ const seq9 = (header?.seq ?? 0) + 1;
267925
268217
  const { nodes: _nodes, ...docRest } = doc2;
267926
- const stored = { ...snap, document: docRest, layout: SPLIT_LAYOUT, nodeIds: ids2, writer: WRITER, seq: seq8 };
268218
+ const stored = { ...snap, document: docRest, layout: SPLIT_LAYOUT, nodeIds: ids2, writer: WRITER, seq: seq9 };
267927
268219
  entries4.push([docKey(id3), stored]);
267928
268220
  await setMany2(entries4);
267929
- persisted.set(id3, { nodes, writer: WRITER, seq: seq8 });
268221
+ persisted.set(id3, { nodes, writer: WRITER, seq: seq9 });
267930
268222
  if (gone.length) await delMany2(gone).catch(() => {
267931
268223
  });
267932
268224
  }
@@ -267959,8 +268251,8 @@ function readDocSnapshot(id3) {
267959
268251
  const v = values3[i2];
267960
268252
  if (v) nodes[n] = v;
267961
268253
  });
267962
- const { layout: _l, nodeIds: _ids, writer, seq: seq8, document: document2, ...rest } = s;
267963
- persisted.set(id3, { nodes, writer, seq: seq8 ?? 0 });
268254
+ const { layout: _l, nodeIds: _ids, writer, seq: seq9, document: document2, ...rest } = s;
268255
+ persisted.set(id3, { nodes, writer, seq: seq9 ?? 0 });
267964
268256
  return { ...rest, document: { ...document2, nodes } };
267965
268257
  });
267966
268258
  }
@@ -268173,6 +268465,85 @@ var init_fit_camera = __esm({
268173
268465
  }
268174
268466
  });
268175
268467
 
268468
+ // lib/motion/clip-shaders.ts
268469
+ function chain2(...steps) {
268470
+ const g = new GraphBuilder();
268471
+ g.node("image", "image");
268472
+ let prev = "image";
268473
+ steps.forEach(([kind, inputs], i2) => {
268474
+ const id3 = `${kind}${i2}`;
268475
+ g.node(id3, kind, inputs ?? {});
268476
+ g.wire(prev, `${id3}.input`);
268477
+ prev = id3;
268478
+ });
268479
+ g.node("out", "output");
268480
+ g.wire(prev, "out.color");
268481
+ return g.build();
268482
+ }
268483
+ function chainDuotone() {
268484
+ const g = new GraphBuilder();
268485
+ g.node("image", "image");
268486
+ g.node("duo", "duotone", {});
268487
+ g.node("out", "output");
268488
+ g.wire("image", "duo.color");
268489
+ g.wire("duo", "out.color");
268490
+ return g.build();
268491
+ }
268492
+ function edgeGlow() {
268493
+ const g = new GraphBuilder();
268494
+ g.node("image", "image");
268495
+ g.node("edges", "edges", { width: 3e-3, strength: 6 });
268496
+ g.node("blend", "blend", { amount: 1.2, mode: "add" });
268497
+ g.node("out", "output");
268498
+ g.wire("image", "edges.input");
268499
+ g.wire("image", "blend.base");
268500
+ g.wire("edges", "blend.layer");
268501
+ g.wire("blend", "out.color");
268502
+ return g.build();
268503
+ }
268504
+ function clipShaderFromPreset(id3) {
268505
+ const p2 = CLIP_SHADER_PRESETS.find((x2) => x2.id === id3);
268506
+ if (!p2) throw new Error(`There is no shader effect "${id3}" (${CLIP_SHADER_PRESETS.map((x2) => x2.id).join(", ")}).`);
268507
+ return { id: `sh-${Date.now().toString(36)}-${(seq7++).toString(36)}`, name: p2.name, graph: p2.graph(), enabled: true };
268508
+ }
268509
+ function compiledClipShaders(list2) {
268510
+ if (!list2?.length) return [];
268511
+ const hit = memo5.get(list2);
268512
+ if (hit) return hit;
268513
+ const out = [];
268514
+ for (const s of list2) {
268515
+ if (s.enabled === false) continue;
268516
+ const c2 = compileShaderGraph(s.graph);
268517
+ if (c2.errors.length) continue;
268518
+ out.push({ code: c2.code, params: { ...c2.params, ...s.params ?? {} } });
268519
+ }
268520
+ memo5.set(list2, out);
268521
+ return out;
268522
+ }
268523
+ var CLIP_SHADER_PRESETS, seq7, readsPicture, memo5;
268524
+ var init_clip_shaders = __esm({
268525
+ "lib/motion/clip-shaders.ts"() {
268526
+ "use strict";
268527
+ init_shader_graph();
268528
+ CLIP_SHADER_PRESETS = [
268529
+ { id: "chromatic", name: "Chromatic aberration", description: "Red and blue pulled apart, like a cheap lens", graph: () => chain2(["rgbSplit", { amount: 8e-3 }]) },
268530
+ { id: "glow", name: "Glow", description: "Bright parts bloom into a soft halo", graph: () => chain2(["glow", { radius: 0.012, amount: 1.2, threshold: 0.55 }]) },
268531
+ { id: "glitch", name: "Glitch", description: "Split color channels over scanlines", graph: () => chain2(["rgbSplit", { amount: 0.02, angle: 0.3 }], ["scanlines", { lines: 160, amount: 0.35 }]) },
268532
+ { id: "vhs", name: "VHS", description: "Soft, color-fringed and lined, like a worn tape", graph: () => chain2(["blur", { radius: 25e-4 }], ["rgbSplit", { amount: 6e-3 }], ["scanlines", { lines: 300, amount: 0.22 }]) },
268533
+ { id: "duotone", name: "Duotone", description: "Shadows and highlights in two colors", graph: () => chainDuotone() },
268534
+ { id: "halftone", name: "Halftone", description: "Printed dots sized by how dark each spot is", graph: () => chain2(["halftone", { size: 0.018 }]) },
268535
+ { id: "sketch", name: "Edge glow", description: "Outlines traced in light over the picture", graph: () => edgeGlow() },
268536
+ { id: "mirror", name: "Mirror", description: "The left half mirrored onto the right", graph: () => chain2(["mirror"]) },
268537
+ { id: "kaleidoscope", name: "Kaleidoscope", description: "The picture folded into a turning kaleidoscope", graph: () => chain2(["kaleidoscope", { segments: 6 }]) },
268538
+ { id: "liquid", name: "Liquid", description: "The picture rippling like water", graph: () => chain2(["liquid", { amount: 0.06 }]) },
268539
+ { id: "soft", name: "Soft focus", description: "A gentle blur over the whole frame", graph: () => chain2(["blur", { radius: 6e-3 }]) }
268540
+ ];
268541
+ seq7 = 0;
268542
+ readsPicture = (graph) => Object.values(graph.nodes ?? {}).some((n) => n.kind === "image");
268543
+ memo5 = /* @__PURE__ */ new WeakMap();
268544
+ }
268545
+ });
268546
+
268176
268547
  // lib/motion/clip-grade.ts
268177
268548
  function curves(a) {
268178
268549
  const c2 = a.curves;
@@ -268636,7 +269007,7 @@ function reevaluatePose(pose, base) {
268636
269007
  }
268637
269008
  function evaluatePose(base, target2, time4, opts = {}) {
268638
269009
  const clock2 = opts.clock ?? "transport";
268639
- const cached3 = memo5.get(base);
269010
+ const cached3 = memo6.get(base);
268640
269011
  const end = opts.end;
268641
269012
  const runtime = opts.runtime ?? NO_RUNTIME;
268642
269013
  const videos = opts.driveVideo ?? clock2 === "transport";
@@ -268696,7 +269067,7 @@ function remember(base, cached3, pose) {
268696
269067
  const list2 = cached3 ?? [];
268697
269068
  list2.unshift(pose);
268698
269069
  if (list2.length > MEMO_PER_MAP) list2.length = MEMO_PER_MAP;
268699
- if (!cached3) memo5.set(base, list2);
269070
+ if (!cached3) memo6.set(base, list2);
268700
269071
  return pose;
268701
269072
  }
268702
269073
  function withClipMotion(r, clip, into, frame3, at5, ownOpacity) {
@@ -268750,9 +269121,12 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268750
269121
  if (a.clip.effects?.length) gradeSubtree(base, a.clip.frameId, a.clip.effects, patch2 ??= {});
268751
269122
  }
268752
269123
  const adjusting = [];
269124
+ const shading = [];
268753
269125
  for (const l of layersAt(comp, time4)) {
268754
269126
  if (l.clip.kind === "adjustment") {
268755
269127
  if (l.clip.effects?.length) adjusting.push({ track: l.clip.track, effects: scaleEffects(l.clip.effects, l.opacity) });
269128
+ const fx = compiledClipShaders(l.clip.shaders);
269129
+ if (fx.length) shading.push({ track: l.clip.track, fx });
268756
269130
  continue;
268757
269131
  }
268758
269132
  if (l.clip.kind === "sequence") {
@@ -268816,7 +269190,8 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268816
269190
  }
268817
269191
  if (l.clip.effects?.length) gradeSubtree(base, fid, l.clip.effects, patch2 ??= {});
268818
269192
  graded.push({ frameId: fid, track: l.clip.track });
268819
- shown2.push(withClipMotion({ rootId: fid, matrix: translation(stage.x + stage.width / 2 - t3.cx, stage.y + stage.height / 2 - t3.cy), opacity: l.opacity }, l.clip, time4 - l.clip.start, base[fid], t3, false));
269193
+ const lfx = compiledClipShaders(l.clip.shaders);
269194
+ shown2.push(withClipMotion({ rootId: fid, matrix: translation(stage.x + stage.width / 2 - t3.cx, stage.y + stage.height / 2 - t3.cy), opacity: l.opacity, ...lfx.length ? { fx: lfx } : {} }, l.clip, time4 - l.clip.start, base[fid], t3, false));
268820
269195
  }
268821
269196
  const mattes = /* @__PURE__ */ new Map();
268822
269197
  const v1Matte = moment.current && !moment.previous ? moment.current.clip.matte : void 0;
@@ -268835,6 +269210,19 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268835
269210
  shown2.splice(mi, 1);
268836
269211
  }
268837
269212
  }
269213
+ for (const a of [moment.previous, moment.current]) {
269214
+ const fx = a ? compiledClipShaders(a.clip.shaders) : [];
269215
+ if (!a || !fx.length) continue;
269216
+ const i2 = shown2.findIndex((r) => r.rootId === a.clip.frameId);
269217
+ if (i2 >= 0) shown2[i2] = { ...shown2[i2], fx: [...fx, ...shown2[i2].fx ?? []] };
269218
+ }
269219
+ for (const sh of shading.sort((a, b) => a.track - b.track)) {
269220
+ for (const g of graded) {
269221
+ if (g.track >= sh.track) continue;
269222
+ const i2 = shown2.findIndex((r) => r.rootId === g.frameId);
269223
+ if (i2 >= 0) shown2[i2] = { ...shown2[i2], fx: [...shown2[i2].fx ?? [], ...sh.fx] };
269224
+ }
269225
+ }
268838
269226
  for (const adj of adjusting.sort((a, b) => a.track - b.track)) {
268839
269227
  for (const g of graded) if (g.track < adj.track) gradeSubtree(base, g.frameId, adj.effects, patch2 ??= {});
268840
269228
  }
@@ -268935,7 +269323,7 @@ function withSolo(pose, solo) {
268935
269323
  soloMemo.set(pose, { solo: key5, pose: out });
268936
269324
  return out;
268937
269325
  }
268938
- var targetFrameId, targetCompositionId, sameTarget, layered, sameAudio, MEMO_PER_MAP, memo5, nestDepth, STAGE_WHITE, soloMemo, orbitMemo;
269326
+ var targetFrameId, targetCompositionId, sameTarget, layered, sameAudio, MEMO_PER_MAP, memo6, nestDepth, STAGE_WHITE, soloMemo, orbitMemo;
268939
269327
  var init_pose = __esm({
268940
269328
  "lib/motion/pose.ts"() {
268941
269329
  "use strict";
@@ -268946,6 +269334,7 @@ var init_pose = __esm({
268946
269334
  init_sequence();
268947
269335
  init_clip_motion();
268948
269336
  init_multicam();
269337
+ init_clip_shaders();
268949
269338
  init_captions();
268950
269339
  init_clip_grade();
268951
269340
  init_transform();
@@ -268963,7 +269352,7 @@ var init_pose = __esm({
268963
269352
  layered = /* @__PURE__ */ new WeakMap();
268964
269353
  sameAudio = (p2, scope) => !scope ? !p2.audio : !!p2.audio && p2.audio.sound === scope.sound && p2.audio.time === scope.time && p2.audio.version === analysisVersion();
268965
269354
  MEMO_PER_MAP = 4;
268966
- memo5 = /* @__PURE__ */ new WeakMap();
269355
+ memo6 = /* @__PURE__ */ new WeakMap();
268967
269356
  nestDepth = 0;
268968
269357
  STAGE_WHITE = { r: 1, g: 1, b: 1, a: 1 };
268969
269358
  soloMemo = /* @__PURE__ */ new WeakMap();
@@ -270745,7 +271134,6 @@ function retuneShaderAudio(node2, fillId) {
270745
271134
  }
270746
271135
  var init_shader_audio = __esm({
270747
271136
  "lib/motion/shader-audio.ts"() {
270748
- "use strict";
270749
271137
  init_shader_params();
270750
271138
  init_modifier_edit();
270751
271139
  init_keys();
@@ -271220,7 +271608,7 @@ function createMotionSlice(set4, get4) {
271220
271608
  nodeEditor: null,
271221
271609
  setNodeEditor: (target2) => {
271222
271610
  const cur = get4().nodeEditor;
271223
- if (cur?.nodeId !== target2?.nodeId || cur?.fillId !== target2?.fillId) set4({ nodeEditor: target2 });
271611
+ if (cur?.nodeId !== target2?.nodeId || cur?.fillId !== target2?.fillId || cur?.clip?.clipId !== target2?.clip?.clipId) set4({ nodeEditor: target2 });
271224
271612
  },
271225
271613
  machinePreview: false,
271226
271614
  startMachinePreview: (frameId2) => {
@@ -271302,7 +271690,7 @@ function breakpointsOf(doc2) {
271302
271690
  const rest = list2.filter((b) => b !== base && b.maxWidth !== null).sort((a, b) => b.maxWidth - a.maxWidth);
271303
271691
  return [base, ...rest];
271304
271692
  }
271305
- function chain2(doc2, id3) {
271693
+ function chain3(doc2, id3) {
271306
271694
  const all4 = breakpointsOf(doc2);
271307
271695
  const at5 = all4.findIndex((b) => b.id === id3);
271308
271696
  return at5 > 0 ? all4.slice(1, at5 + 1) : [];
@@ -271310,7 +271698,7 @@ function chain2(doc2, id3) {
271310
271698
  function overridesAt(node2, doc2, id3) {
271311
271699
  if (!node2.responsive) return null;
271312
271700
  let out = null;
271313
- for (const b of chain2(doc2, id3)) {
271701
+ for (const b of chain3(doc2, id3)) {
271314
271702
  const o = node2.responsive[b.id];
271315
271703
  if (o) out = { ...out ?? {}, ...o };
271316
271704
  }
@@ -271363,7 +271751,7 @@ function withOverrides(node2, id3, overrides2) {
271363
271751
  function breakpointPatch(node2, doc2, id3, props) {
271364
271752
  const base = {};
271365
271753
  const mine = { ...node2.responsive?.[id3] };
271366
- const wider = chain2(doc2, id3).slice(0, -1).reduce((acc, b) => ({ ...acc, ...node2.responsive?.[b.id] }), {});
271754
+ const wider = chain3(doc2, id3).slice(0, -1).reduce((acc, b) => ({ ...acc, ...node2.responsive?.[b.id] }), {});
271367
271755
  const inherited = (k2) => k2 in wider ? wider[k2] : node2[k2];
271368
271756
  let touched = false;
271369
271757
  for (const [k2, v] of Object.entries(props)) {
@@ -272808,7 +273196,6 @@ function formatLimit(key5, max3) {
272808
273196
  var formatBytes;
272809
273197
  var init_limits2 = __esm({
272810
273198
  "lib/billing/limits.ts"() {
272811
- "use strict";
272812
273199
  init_format();
272813
273200
  init_plans();
272814
273201
  formatBytes = formatFileSize;
@@ -273354,7 +273741,6 @@ function planEntryAction({ home }) {
273354
273741
  var STORAGE_KEY2, useHyperyTeam, TEAM_PROMPT_ENABLED, TEAM_PROMPTED_KEY, PROMPTED_KEY, useTeamPrompt, started;
273355
273742
  var init_team = __esm({
273356
273743
  "lib/client/cloud/team.ts"() {
273357
- "use strict";
273358
273744
  init_esm();
273359
273745
  init_api4();
273360
273746
  init_session();
@@ -314915,10 +315301,10 @@ var init_media_source = __esm({
314915
315301
  };
314916
315302
  colorAlphaSplitterWorkerCode = () => {
314917
315303
  let cpuSourceBuffer = null;
314918
- let chain3 = Promise.resolve();
315304
+ let chain5 = Promise.resolve();
314919
315305
  self.addEventListener("message", (event) => {
314920
315306
  const { id: id3, sourceFrame } = event.data;
314921
- chain3 = chain3.then(async () => {
315307
+ chain5 = chain5.then(async () => {
314922
315308
  try {
314923
315309
  const { colorFrame, alphaFrame } = await split2(sourceFrame);
314924
315310
  self.postMessage({ id: id3, colorFrame, alphaFrame }, { transfer: [colorFrame, alphaFrame] });
@@ -317021,7 +317407,6 @@ function decodeSource(key5, label3) {
317021
317407
  var DECODE_CACHE_BYTES, cache7, pending4, held, sizeOf, lengths, decodedLengths, DECODE_TIMEOUT_MS, decodedAudio, decodedSource, pcmOf;
317022
317408
  var init_audio_decode = __esm({
317023
317409
  "lib/motion/audio-decode.ts"() {
317024
- "use strict";
317025
317410
  init_media_store();
317026
317411
  init_audio_plan();
317027
317412
  init_time_stretch();
@@ -317230,12 +317615,12 @@ function createMixGraph(c2, out, settings, gateReady = () => false) {
317230
317615
  const wire = (i2) => {
317231
317616
  let l = lanes.get(i2);
317232
317617
  if (l) return l;
317233
- const input2 = c2.createGain(), chain3 = buildChain(c2, fxOf(i2), void 0, gateReady()), meter = c2.createAnalyser();
317618
+ const input2 = c2.createGain(), chain5 = buildChain(c2, fxOf(i2), void 0, gateReady()), meter = c2.createAnalyser();
317234
317619
  meter.fftSize = 1024;
317235
- input2.connect(chain3.input);
317236
- chain3.output.connect(meter);
317237
- chain3.output.connect(masterIn);
317238
- l = { input: input2, chain: chain3, shape: shapeOf(fxOf(i2), false, gateReady()), meter };
317620
+ input2.connect(chain5.input);
317621
+ chain5.output.connect(meter);
317622
+ chain5.output.connect(masterIn);
317623
+ l = { input: input2, chain: chain5, shape: shapeOf(fxOf(i2), false, gateReady()), meter };
317239
317624
  lanes.set(i2, l);
317240
317625
  return l;
317241
317626
  };
@@ -317254,10 +317639,10 @@ function createMixGraph(c2, out, settings, gateReady = () => false) {
317254
317639
  from2.disconnect();
317255
317640
  old.output.disconnect();
317256
317641
  for (const n of old.nodes) n.disconnect();
317257
- const chain3 = buildChain(c2, fx, limiter, gateReady());
317258
- from2.connect(chain3.input);
317259
- for (const t3 of to) chain3.output.connect(t3);
317260
- return chain3;
317642
+ const chain5 = buildChain(c2, fx, limiter, gateReady());
317643
+ from2.connect(chain5.input);
317644
+ for (const t3 of to) chain5.output.connect(t3);
317645
+ return chain5;
317261
317646
  };
317262
317647
  return {
317263
317648
  lane: (i2) => wire(i2).input,
@@ -320377,10 +320762,10 @@ function shapeSubs(el) {
320377
320762
  return [];
320378
320763
  }
320379
320764
  function gradientPaint(el, ctx2, m, bounds2, opacity) {
320380
- const chain3 = [];
320381
- for (let g = el; g && chain3.length < 8; g = ctx2.ids.get((g.attrs.href ?? g.attrs["xlink:href"] ?? "").replace(/^#/, ""))) chain3.push(g);
320382
- const attr = (k2) => chain3.find((g) => g.attrs[k2] !== void 0)?.attrs[k2];
320383
- const stopsEl = chain3.find((g) => g.children.some((c2) => c2.tag === "stop"));
320765
+ const chain5 = [];
320766
+ for (let g = el; g && chain5.length < 8; g = ctx2.ids.get((g.attrs.href ?? g.attrs["xlink:href"] ?? "").replace(/^#/, ""))) chain5.push(g);
320767
+ const attr = (k2) => chain5.find((g) => g.attrs[k2] !== void 0)?.attrs[k2];
320768
+ const stopsEl = chain5.find((g) => g.children.some((c2) => c2.tag === "stop"));
320384
320769
  const gradientStops = (stopsEl?.children ?? []).filter((c2) => c2.tag === "stop").map((s) => {
320385
320770
  const st3 = ownStyle(s, ctx2.css);
320386
320771
  const off = s.attrs.offset ?? "0";
@@ -324734,12 +325119,12 @@ function sliceFormatting(head2, start2) {
324734
325119
  function resolveThreadNode(nodes, node2, atlas, zoom) {
324735
325120
  const n = node2;
324736
325121
  if (!n.threadPrevId) return node2;
324737
- const chain3 = threadChain(nodes, n.id);
324738
- const head2 = chain3[0];
325122
+ const chain5 = threadChain(nodes, n.id);
325123
+ const head2 = chain5[0];
324739
325124
  if (!head2 || head2.id === n.id) return node2;
324740
325125
  let start2 = 0;
324741
325126
  const text = head2.characters || "";
324742
- for (const member of chain3) {
325127
+ for (const member of chain5) {
324743
325128
  if (member.id === n.id) break;
324744
325129
  const view2 = member.id === head2.id ? head2 : { ...member, ...head2, id: member.id, x: member.x, y: member.y, width: member.width, height: member.height, rotation: member.rotation, textAutoResize: "NONE", characters: text.slice(start2), ...sliceFormatting(head2, start2), threadPrevId: member.threadPrevId, threadNextId: member.threadNextId };
324745
325130
  const layout2 = layoutText(member.id === head2.id ? { ...head2, textAutoResize: "NONE" } : view2, atlas, zoom);
@@ -327645,7 +328030,6 @@ async function exportSettingFile(renderer, node2, setting, doc2, styles) {
327645
328030
  var MIME, DEFAULT_EXPORT, exportSettingsOf;
327646
328031
  var init_export = __esm({
327647
328032
  "lib/io/export.ts"() {
327648
- "use strict";
327649
328033
  init_download();
327650
328034
  init_scene_graph();
327651
328035
  init_codecs();
@@ -329482,7 +329866,7 @@ function normalizeColor(c2, key5) {
329482
329866
  const o = c2;
329483
329867
  const ch = o && ["r", "g", "b"].map((k2) => o[k2]);
329484
329868
  if (!ch || !ch.every((v) => typeof v === "number" && Number.isFinite(v))) {
329485
- throw new ToolError(`${key5} has a colour without numeric r, g and b. Give 0\u20131 channels, or use set_fills with a hex colour.`);
329869
+ throw new ToolError(`${key5} has a color without numeric r, g and b. Give 0\u20131 channels, or use set_fills with a hex color.`);
329486
329870
  }
329487
329871
  const nums2 = ch;
329488
329872
  const scale = nums2.some((v) => v > 1) ? 255 : 1;
@@ -330873,7 +331257,7 @@ var init_text = __esm({
330873
331257
  blur: external_exports.number().min(0).max(300).optional().describe("Blur, % of the font size."),
330874
331258
  thickness: external_exports.number().min(0).max(100).optional().describe("Outline thickness (OUTLINE, HOLLOW) or background reach, % of the font size."),
330875
331259
  intensity: external_exports.number().min(0).max(100).optional().describe("Strength 0\u2013100."),
330876
- color: external_exports.string().optional().describe("Hex; unset keeps the preset colour.")
331260
+ color: external_exports.string().optional().describe("Hex; unset keeps the preset color.")
330877
331261
  }),
330878
331262
  expose: {
330879
331263
  agent: {
@@ -333234,7 +333618,7 @@ var init_motion_shared = __esm({
333234
333618
  external_exports.string(),
333235
333619
  external_exports.boolean(),
333236
333620
  external_exports.object({ r: external_exports.number().min(0).max(1), g: external_exports.number().min(0).max(1), b: external_exports.number().min(0).max(1), a: external_exports.number().min(0).max(1).optional() })
333237
- ]).describe('The value: a number, a colour as "#rrggbb[aa]" or {r,g,b,a} (0\u20131), text, or true/false \u2014 whatever the property holds.');
333621
+ ]).describe('The value: a number, a color as "#rrggbb[aa]" or {r,g,b,a} (0\u20131), text, or true/false \u2014 whatever the property holds.');
333238
333622
  PROPERTY_PATTERNS = ANIMATABLE_PROPERTIES.map((p2) => p2.pattern);
333239
333623
  timeBaseSchema = external_exports.enum(["frame", "layer"]).optional().describe("What the times are measured on: frame (default), the timeline the layer plays on, as the ruler shows it; or layer, the layer's own time (after its start offset and stagger).");
333240
333624
  AUDIO_OPS = [
@@ -336471,8 +336855,8 @@ var init_build = __esm({
336471
336855
  return { ind: 0, nm, ip, op: op4, st: 0, sr: 1, ks, ao: 0, ddd: 0 };
336472
336856
  }
336473
336857
  /** A layer's opacity: its chain times its own opacity at each frame (0 where it is not drawn). */
336474
- opacity(chain3, own2, keyed2) {
336475
- const samples = chain3.map((c2, f2) => own2[f2] === void 0 ? void 0 : [c2 * own2[f2] * 100]);
336858
+ opacity(chain5, own2, keyed2) {
336859
+ const samples = chain5.map((c2, f2) => own2[f2] === void 0 ? void 0 : [c2 * own2[f2] * 100]);
336476
336860
  const exact = keyed2.length === 1 ? this.exact(keyed2[0], [this.dim(keyed2[0], "opacity")]) : null;
336477
336861
  return this.prop(samples, exact, true, 0.01);
336478
336862
  }
@@ -336540,8 +336924,8 @@ var init_build = __esm({
336540
336924
  return [layer3];
336541
336925
  }
336542
336926
  const P = this.pad;
336543
- const chain3 = ctx2.chain.map((c2, f2) => own2[f2] === void 0 ? 0 : c2 * own2[f2]);
336544
- const layers2 = this.items(z2.children, { chain: chain3, chainKeyed: keyed2, offset: [P, P] }, z2);
336927
+ const chain5 = ctx2.chain.map((c2, f2) => own2[f2] === void 0 ? 0 : c2 * own2[f2]);
336928
+ const layers2 = this.items(z2.children, { chain: chain5, chainKeyed: keyed2, offset: [P, P] }, z2);
336545
336929
  const maxW = Math.max(...z2.frames.map((g) => g?.node?.width ?? 0), 1), maxH = Math.max(...z2.frames.map((g) => g?.node?.height ?? 0), 1);
336546
336930
  const id3 = this.comp(layers2, maxW + 2 * P, maxH + 2 * P, name2);
336547
336931
  const ks = place4 ? this.nodeKs(z2.frames, ctx2.offset, P, place4.matrix) : this.nodeKs(z2.frames, ctx2.offset, P);
@@ -338639,7 +339023,7 @@ var init_package = __esm({
338639
339023
  "packages/runtime/package.json"() {
338640
339024
  package_default = {
338641
339025
  name: "@popcraft/runtime",
338642
- version: "0.56.5",
339026
+ version: "0.57.0",
338643
339027
  description: "What code exported from PopCraft shares: the meaning of expressions (operators and functions) and, as it grows, the parts of a design's behaviour that are common code rather than generated React.",
338644
339028
  license: "MIT",
338645
339029
  homepage: "https://popcraft.app/docs/exporting/nextjs",
@@ -353517,16 +353901,16 @@ var require_trace_mapping_umd = __commonJS({
353517
353901
  function GMapping(line, column) {
353518
353902
  return { line, column };
353519
353903
  }
353520
- function traceSegmentInternal(segments, memo7, line, column, bias) {
353521
- let index2 = memoizedBinarySearch(segments, column, memo7, line);
353904
+ function traceSegmentInternal(segments, memo8, line, column, bias) {
353905
+ let index2 = memoizedBinarySearch(segments, column, memo8, line);
353522
353906
  if (found) {
353523
353907
  index2 = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index2);
353524
353908
  } else if (bias === LEAST_UPPER_BOUND) index2++;
353525
353909
  if (index2 === -1 || index2 === segments.length) return -1;
353526
353910
  return index2;
353527
353911
  }
353528
- function sliceGeneratedPositions(segments, memo7, line, column, bias) {
353529
- let min2 = traceSegmentInternal(segments, memo7, line, column, GREATEST_LOWER_BOUND);
353912
+ function sliceGeneratedPositions(segments, memo8, line, column, bias) {
353913
+ let min2 = traceSegmentInternal(segments, memo8, line, column, GREATEST_LOWER_BOUND);
353530
353914
  if (!found && bias === LEAST_UPPER_BOUND) min2++;
353531
353915
  if (min2 === -1 || min2 === segments.length) return [];
353532
353916
  const matchedColumn = found ? column : segments[min2][COLUMN];
@@ -353552,9 +353936,9 @@ var require_trace_mapping_umd = __commonJS({
353552
353936
  const generated = (_b2 = cast(map2))._bySources || (_b2._bySources = buildBySources(decodedMappings(map2), bySourceMemos));
353553
353937
  const segments = generated[sourceIndex2][line];
353554
353938
  if (segments == null) return all4 ? [] : GMapping(null, null);
353555
- const memo7 = bySourceMemos[sourceIndex2];
353556
- if (all4) return sliceGeneratedPositions(segments, memo7, line, column, bias);
353557
- const index2 = traceSegmentInternal(segments, memo7, line, column, bias);
353939
+ const memo8 = bySourceMemos[sourceIndex2];
353940
+ if (all4) return sliceGeneratedPositions(segments, memo8, line, column, bias);
353941
+ const index2 = traceSegmentInternal(segments, memo8, line, column, bias);
353558
353942
  if (index2 === -1) return GMapping(null, null);
353559
353943
  const segment = segments[index2];
353560
353944
  return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]);
@@ -363305,7 +363689,6 @@ function exportsOf(source3) {
363305
363689
  var CODE_LIMITS, packageOf;
363306
363690
  var init_source2 = __esm({
363307
363691
  "lib/code/source.ts"() {
363308
- "use strict";
363309
363692
  CODE_LIMITS = { modules: 100, sourceLength: 2e5, packages: 12 };
363310
363693
  packageOf = (spec) => spec.split("/").slice(0, spec.startsWith("@") ? 2 : 1).join("/");
363311
363694
  }
@@ -363322,7 +363705,7 @@ __export(compile_exports, {
363322
363705
  packageOf: () => packageOf
363323
363706
  });
363324
363707
  function compileSource(source3) {
363325
- const hit = memo6.get(source3);
363708
+ const hit = memo7.get(source3);
363326
363709
  if (hit) return hit;
363327
363710
  let out;
363328
363711
  try {
@@ -363332,8 +363715,8 @@ function compileSource(source3) {
363332
363715
  } catch (e) {
363333
363716
  out = { error: e instanceof Error ? e.message : String(e), imports: [] };
363334
363717
  }
363335
- if (memo6.size > 200) memo6.delete(memo6.keys().next().value);
363336
- memo6.set(source3, out);
363718
+ if (memo7.size > 200) memo7.delete(memo7.keys().next().value);
363719
+ memo7.set(source3, out);
363337
363720
  return out;
363338
363721
  }
363339
363722
  function compileModule(module2) {
@@ -363345,15 +363728,14 @@ function compileModule(module2) {
363345
363728
  if (relative5) return { imports: out.imports, error: `"${relative5}": a module cannot import another file. Put the code it needs in this module.` };
363346
363729
  return out;
363347
363730
  }
363348
- var import_sucrase, BUILT_IN, memo6;
363731
+ var import_sucrase, BUILT_IN, memo7;
363349
363732
  var init_compile2 = __esm({
363350
363733
  "lib/code/compile.ts"() {
363351
- "use strict";
363352
363734
  import_sucrase = __toESM(require_dist2());
363353
363735
  init_source2();
363354
363736
  init_source2();
363355
363737
  BUILT_IN = ["react", "react/jsx-runtime", "react-dom"];
363356
- memo6 = /* @__PURE__ */ new Map();
363738
+ memo7 = /* @__PURE__ */ new Map();
363357
363739
  }
363358
363740
  });
363359
363741
 
@@ -365535,7 +365917,7 @@ async function runAnimationExport(format, args2, ctx2) {
365535
365917
  try {
365536
365918
  stats = await exportAnimation2(renderer, doc2, spec, dest, {
365537
365919
  signal: ctx2.signal,
365538
- onProgress: (p2) => ctx2.progress?.(p2.done, p2.total, p2.phase === "palette" ? "Choosing colours" : p2.phase === "finishing" ? "Finishing" : "Rendering frames")
365920
+ onProgress: (p2) => ctx2.progress?.(p2.done, p2.total, p2.phase === "palette" ? "Choosing colors" : p2.phase === "finishing" ? "Finishing" : "Rendering frames")
365539
365921
  });
365540
365922
  } catch (e) {
365541
365923
  if (e instanceof Error && e.name === "AbortError") throw new ToolError("Export cancelled.");
@@ -367481,7 +367863,7 @@ function carryLinked(before, after) {
367481
367863
  });
367482
367864
  return changed ? { ...after, audio } : after;
367483
367865
  }
367484
- var isAudio, startOf, endOf, seq7, linkId;
367866
+ var isAudio, startOf, endOf, seq8, linkId;
367485
367867
  var init_links2 = __esm({
367486
367868
  "lib/motion/links.ts"() {
367487
367869
  init_audio_clips();
@@ -367491,8 +367873,8 @@ var init_links2 = __esm({
367491
367873
  isAudio = (c2) => "mediaHash" in c2 && "lane" in c2 && typeof c2.lane === "number";
367492
367874
  startOf = (c2) => c2.start;
367493
367875
  endOf = (c2) => isAudio(c2) ? audioClipEnd(c2) : "track" in c2 ? layerEnd(c2) : clipEnd(c2);
367494
- seq7 = 0;
367495
- linkId = () => `ln-${Date.now().toString(36)}-${(seq7++).toString(36)}`;
367876
+ seq8 = 0;
367877
+ linkId = () => `ln-${Date.now().toString(36)}-${(seq8++).toString(36)}`;
367496
367878
  }
367497
367879
  });
367498
367880
 
@@ -368213,8 +368595,6 @@ var init_motion2 = __esm({
368213
368595
  run: async (args2, ctx2) => {
368214
368596
  const comp = args2.frame ? null : compositionOr(ctx2.doc(), args2.id);
368215
368597
  if (args2.frame && !ctx2.doc().nodes[args2.frame]) throw new ToolError(`There is no frame "${args2.frame}".`);
368216
- const blocked2 = audioUseBlocked(args2.kind);
368217
- if (blocked2) throw new ToolError(blocked2);
368218
368598
  if (args2.model && !audioModelFor(args2.kind, args2.model)) throw new ToolError(`"${args2.model}" is not a ${args2.kind} model here: ${AUDIO_MODEL_OPTIONS[args2.kind].map((m) => m.id).join(", ")}.`);
368219
368599
  const max3 = args2.kind === "voice" ? AUDIO_LIMITS.maxScriptChars : AUDIO_LIMITS.maxPromptChars;
368220
368600
  if (args2.prompt.length > max3) throw new ToolError(`That ${args2.kind === "voice" ? "script" : "description"} is over ${max3} characters.`);
@@ -368847,8 +369227,18 @@ function applyOne(doc2, comp, op4) {
368847
369227
  return placeLayer(comp, { ...newLayerClip({ track: op4.track, kind: "sequence", sequenceId: child.id, start: op4.start, length: len3, in: from2 }), name: child.name }, op4.mode ?? "overwrite");
368848
369228
  }
368849
369229
  case "angle": {
368850
- const ref3 = findClip(comp, clipOr2(op4.clip));
369230
+ let ref3 = findClip(comp, clipOr2(op4.clip));
368851
369231
  if (!ref3 || ref3.kind !== "layer" || ref3.clip.kind !== "sequence") throw new ToolError("Switch angles on a multicam clip.");
369232
+ if (op4.at !== void 0) {
369233
+ const [a0, b0] = clipRange(ref3);
369234
+ if (op4.at < a0 - 0.5 || op4.at >= b0 - 0.5) {
369235
+ const track3 = ref3.clip.track, seq9 = ref3.clip.sequenceId;
369236
+ const there = (comp.layers ?? []).find((l) => l.track === track3 && l.kind === "sequence" && l.sequenceId === seq9 && l.start <= op4.at && layerEnd(l) > op4.at);
369237
+ if (!there) throw new ToolError("That multicam clip is not playing there.");
369238
+ ref3 = findClip(comp, there.id);
369239
+ }
369240
+ }
369241
+ if (ref3.kind !== "layer") throw new ToolError("Switch angles on a multicam clip.");
368852
369242
  let next2 = comp, target2 = ref3.clip.id;
368853
369243
  const [a, b] = clipRange(ref3);
368854
369244
  if (op4.at !== void 0 && op4.at > a + 0.5 && op4.at < b - 0.5) {
@@ -368883,6 +369273,39 @@ function applyOne(doc2, comp, op4) {
368883
369273
  const a = Math.max(0, Math.min(end - 1, op4.in ?? 0)), b = Math.max(a + 1, Math.min(end, op4.out ?? end));
368884
369274
  return sourceEdit(comp, { frame: op4.frame, name: op4.name, srcIn: a, srcOut: b, at: op4.at ?? comp.marks?.in ?? 0, track: op4.track ?? 0, mode: op4.mode ?? "insert" });
368885
369275
  }
369276
+ case "shaders":
369277
+ return editVisualClip(comp, clipOr2(op4.clip), (c2) => {
369278
+ let list2 = op4.clear ? [] : [...c2.shaders ?? []];
369279
+ if (op4.add) {
369280
+ try {
369281
+ list2.push({ ...clipShaderFromPreset(op4.add), ...op4.name ? { name: op4.name } : {} });
369282
+ } catch (e) {
369283
+ throw new ToolError(e instanceof Error ? e.message : String(e));
369284
+ }
369285
+ }
369286
+ if (op4.graph) {
369287
+ const g = op4.graph;
369288
+ if (!readsPicture(g)) throw new ToolError("A clip effect graph needs an image node: it is what reads the clip.");
369289
+ list2.push({ id: `sh-${Date.now().toString(36)}-${list2.length}`, name: op4.name ?? "Shader", graph: g, enabled: true });
369290
+ }
369291
+ if (op4.set) {
369292
+ const s0 = op4.set;
369293
+ if (!list2.some((x2) => x2.id === s0.id)) throw new ToolError(`That clip has no shader effect "${s0.id}".`);
369294
+ list2 = list2.map((x2) => x2.id !== s0.id ? x2 : { ...x2, ...s0.enabled !== void 0 ? { enabled: s0.enabled } : {}, ...s0.name ? { name: s0.name } : {}, ...s0.params ? { params: { ...x2.params ?? {}, ...s0.params } } : {}, ...s0.graph ? { graph: s0.graph } : {} });
369295
+ }
369296
+ if (op4.remove) list2 = list2.filter((x2) => x2.id !== op4.remove);
369297
+ if (op4.move) {
369298
+ const i2 = list2.findIndex((x2) => x2.id === op4.move.id);
369299
+ if (i2 >= 0) {
369300
+ const [x2] = list2.splice(i2, 1);
369301
+ list2.splice(Math.min(op4.move.to, list2.length), 0, x2);
369302
+ }
369303
+ }
369304
+ const n = { ...c2 };
369305
+ if (list2.length) n.shaders = list2;
369306
+ else delete n.shaders;
369307
+ return n;
369308
+ });
368886
369309
  case "matte":
368887
369310
  return editVisualClip(comp, clipOr2(op4.clip), (c2) => {
368888
369311
  const n = { ...c2 };
@@ -369025,7 +369448,7 @@ function sequenceTracks(doc2, comp) {
369025
369448
  const video = Array.from({ length: videoTrackCount(comp) - 1 }, (_, i2) => i2).map((i2) => ({
369026
369449
  id: `V${i2 + 1}`,
369027
369450
  state: comp.tracks?.[`V${i2 + 1}`] ?? {},
369028
- clips: i2 === 0 ? comp.clips.map((c2) => ({ id: c2.id, kind: "scene", frame: c2.frameId, name: doc2.nodes[c2.frameId]?.name, start: c2.start, end: c2.start + c2.out - c2.in, in: c2.in, out: c2.out, ...c2.transitionIn ? { transitionIn: c2.transitionIn.type, transitionMs: c2.transitionIn.duration } : {}, ...c2.disabled ? { disabled: true } : {}, ...c2.opacity ? { opacity: c2.opacity.keys.map((k2) => [k2.t, k2.v]) } : {}, ...motionOf(c2) })) : (comp.layers ?? []).filter((l) => l.track === i2).map((l) => ({ ...l, end: layerEnd(l), opacity: l.opacity?.keys.map((k2) => ({ t: k2.t, v: k2.v })), ...motionOf(l) }))
369451
+ clips: i2 === 0 ? comp.clips.map((c2) => ({ id: c2.id, kind: "scene", frame: c2.frameId, name: doc2.nodes[c2.frameId]?.name, start: c2.start, end: c2.start + c2.out - c2.in, in: c2.in, out: c2.out, ...c2.transitionIn ? { transitionIn: c2.transitionIn.type, transitionMs: c2.transitionIn.duration } : {}, ...c2.disabled ? { disabled: true } : {}, ...c2.opacity ? { opacity: c2.opacity.keys.map((k2) => [k2.t, k2.v]) } : {}, ...c2.effects?.length ? { effects: c2.effects } : {}, ...c2.shaders?.length ? { shaders: c2.shaders.map((x2) => ({ id: x2.id, name: x2.name, enabled: x2.enabled !== false, params: x2.params })) } : {}, ...c2.matte ? { matte: c2.matte } : {}, ...motionOf(c2) })) : (comp.layers ?? []).filter((l) => l.track === i2).map((l) => ({ ...l, end: layerEnd(l), opacity: l.opacity?.keys.map((k2) => ({ t: k2.t, v: k2.v })), ...motionOf(l) }))
369029
369452
  }));
369030
369453
  const audio = Array.from({ length: lanes }, (_, i2) => ({
369031
369454
  id: `A${i2 + 1}`,
@@ -369123,6 +369546,7 @@ var init_sequence2 = __esm({
369123
369546
  init_audio_clips();
369124
369547
  init_audio_plan();
369125
369548
  init_titles();
369549
+ init_clip_shaders();
369126
369550
  init_transcriber();
369127
369551
  init_captions();
369128
369552
  init_lut();
@@ -369295,6 +369719,23 @@ var init_sequence2 = __esm({
369295
369719
  language: external_exports.string().optional(),
369296
369720
  clear: external_exports.boolean().optional().describe("Remove every caption.")
369297
369721
  }),
369722
+ external_exports.object({
369723
+ kind: external_exports.literal("shaders"),
369724
+ clip: external_exports.string().describe("A video clip on any track, or an adjustment layer (its shaders then run over every clip below)."),
369725
+ add: external_exports.string().optional().describe(`Add a built-in shader effect: ${CLIP_SHADER_PRESETS.map((p2) => p2.id).join(", ")}.`),
369726
+ graph: external_exports.object({ nodes: external_exports.record(external_exports.string(), external_exports.any()), edges: external_exports.record(external_exports.string(), external_exports.any()) }).optional().describe("Add your own shader graph (lib/document/shader-graph.ts) as an effect: it reads the clip through an `image` node."),
369727
+ name: external_exports.string().max(80).optional(),
369728
+ set: external_exports.object({
369729
+ id: external_exports.string().describe("The shader effect (from get_sequence)."),
369730
+ enabled: external_exports.boolean().optional(),
369731
+ name: external_exports.string().max(80).optional(),
369732
+ params: external_exports.record(external_exports.string(), external_exports.any()).optional().describe("Knob values by field name (as a shader fill's params)."),
369733
+ graph: external_exports.object({ nodes: external_exports.record(external_exports.string(), external_exports.any()), edges: external_exports.record(external_exports.string(), external_exports.any()) }).optional()
369734
+ }).optional(),
369735
+ remove: external_exports.string().optional(),
369736
+ move: external_exports.object({ id: external_exports.string(), to: external_exports.number().int().min(0) }).optional(),
369737
+ clear: external_exports.boolean().optional()
369738
+ }).describe("Shader effects on a clip: node graphs run over its whole frame."),
369298
369739
  external_exports.object({
369299
369740
  kind: external_exports.literal("matte"),
369300
369741
  clip: external_exports.string().describe("A video clip on any track."),
@@ -369303,7 +369744,7 @@ var init_sequence2 = __esm({
369303
369744
  external_exports.object({
369304
369745
  kind: external_exports.literal("label"),
369305
369746
  clips: external_exports.array(external_exports.string()).min(1),
369306
- label: external_exports.enum(["accent", "success", "warning", "danger", "component", "prototype", "ai"]).nullable().describe("A colour on the timeline: accent (violet), success (green), warning (amber), danger (red), component (purple), prototype (blue), ai (pink); null: none.")
369747
+ label: external_exports.enum(["accent", "success", "warning", "danger", "component", "prototype", "ai"]).nullable().describe("A color on the timeline: accent (violet), success (green), warning (amber), danger (red), component (purple), prototype (blue), ai (pink); null: none.")
369307
369748
  }),
369308
369749
  external_exports.object({
369309
369750
  kind: external_exports.literal("speedRamp"),
@@ -369379,7 +369820,7 @@ var init_sequence2 = __esm({
369379
369820
  motion: "Motion",
369380
369821
  key: "Keyframe",
369381
369822
  duplicate: "Duplicate",
369382
- label: "Colour label",
369823
+ label: "Color label",
369383
369824
  effects: "Effects",
369384
369825
  matte: "Track matte",
369385
369826
  captions: "Captions",
@@ -369389,6 +369830,7 @@ var init_sequence2 = __esm({
369389
369830
  replace: "Replace clip",
369390
369831
  fit: "Scale to frame",
369391
369832
  angle: "Multicam angle",
369833
+ shaders: "Shader effects",
369392
369834
  addAdjustment: "Adjustment layer",
369393
369835
  speedRamp: "Speed ramp",
369394
369836
  speedKey: "Speed key",
@@ -369421,7 +369863,7 @@ var init_sequence2 = __esm({
369421
369863
  ui: { label: "Edit sequence", palette: false },
369422
369864
  agent: {
369423
369865
  name: "edit_sequence",
369424
- description: "Edit a sequence (a composition) as a multi-track video timeline. Tracks: V1 is the main magnetic track of scenes (no gaps); V2\u2026 hold scenes, videos and stills placed freely and composited on top (opacity, blend, fades); A1\u2026 are audio lanes. Ops: razor (cut at a time across tracks), delete (lift, or ripple to close the gap), range (lift or extract [in, out) from every unlocked track), closeGap, trim (an edge to a time, optional ripple), trimToPlayhead, slip, roll, slide, place (a frame's timeline as a clip on V2+, overwrite or insert), move, stretch (rate stretch), clip (a constant opacity, blend, disable, reverse, fades), motion (per clip on any track, V1 too: position from the stage's centre, scale, rotation, anchor, crop and opacity; a property with its stopwatch on keys at `at`, otherwise it is one value for the whole clip \u2014 picture-in-picture, split screens, punch-ins, Ken Burns), key (add, move, re-ease or remove one key of a clip property in clip ms), detachSound (Unlink audio: a video clip's own sound onto an audio track, linked to it), attachSound, link (link or unlink clips so they edit together), sync (slide a linked sound back into sync), duplicate (copy clips, a linked pair as a pair, after themselves or at `at`; insert to push), pasteAttributes (one clip's Motion, opacity, blend, fades or volume onto others), label (a colour on the timeline), speedRamp / speedKey (time remapping: keyable speed over the clip, 0 holds a frame, slow motion and speed ramps), freeze (hold a frame for a while, or to the clip's end), effects (colour correction, blur, sharpen, noise, vignette, warps\u2026 on a clip: add / set / remove / move), addAdjustment (an adjustment layer whose effects grade every track below it), placeSequence (nest another sequence as one clip on V2+), replace (a scene clip shows another frame, keeping its place and settings), fit (scale a clip to fill or fit the stage), angle (switch a multicam clip's angle, cutting it at `at` first), sourceEdit (a three-point edit: a frame's source in/out onto V1 or a track above at a time, inserted or overwriting), matte (a track matte: cut a clip out by the clip on the track above, alpha or luma), captions (the sequence's captions: replace from words, cues or an .srt / .vtt file; edit, add or remove one; style them; hide them), track (lock, hide, mute, solo, name, gain, pan), addTrack / removeTrack (insert an empty track anywhere, or delete one with its clips), duck (music under voice), marks (in / out), and the audio ops of edit_composition (addAudio, audio, trimAudio, gainKey, removeAudio, splitAudio, crossfade). Linked clips (a picture and its sound) move, trim, cut and delete together unless `linked: false`. Locked tracks are never changed. Read it with get_sequence."
369866
+ description: "Edit a sequence (a composition) as a multi-track video timeline. Tracks: V1 is the main magnetic track of scenes (no gaps); V2\u2026 hold scenes, videos and stills placed freely and composited on top (opacity, blend, fades); A1\u2026 are audio lanes. Ops: razor (cut at a time across tracks), delete (lift, or ripple to close the gap), range (lift or extract [in, out) from every unlocked track), closeGap, trim (an edge to a time, optional ripple), trimToPlayhead, slip, roll, slide, place (a frame's timeline as a clip on V2+, overwrite or insert), move, stretch (rate stretch), clip (a constant opacity, blend, disable, reverse, fades), motion (per clip on any track, V1 too: position from the stage's centre, scale, rotation, anchor, crop and opacity; a property with its stopwatch on keys at `at`, otherwise it is one value for the whole clip \u2014 picture-in-picture, split screens, punch-ins, Ken Burns), key (add, move, re-ease or remove one key of a clip property in clip ms), detachSound (Unlink audio: a video clip's own sound onto an audio track, linked to it), attachSound, link (link or unlink clips so they edit together), sync (slide a linked sound back into sync), duplicate (copy clips, a linked pair as a pair, after themselves or at `at`; insert to push), pasteAttributes (one clip's Motion, opacity, blend, fades or volume onto others), label (a color on the timeline), speedRamp / speedKey (time remapping: keyable speed over the clip, 0 holds a frame, slow motion and speed ramps), freeze (hold a frame for a while, or to the clip's end), effects (color correction, blur, sharpen, noise, vignette, warps\u2026 on a clip: add / set / remove / move), addAdjustment (an adjustment layer whose effects grade every track below it), placeSequence (nest another sequence as one clip on V2+), replace (a scene clip shows another frame, keeping its place and settings), fit (scale a clip to fill or fit the stage), angle (switch a multicam clip's angle, cutting it at `at` first), sourceEdit (a three-point edit: a frame's source in/out onto V1 or a track above at a time, inserted or overwriting), shaders (shader-graph effects on a clip \u2014 built-in presets or your own graph with an image node \u2014 run over its whole frame), matte (a track matte: cut a clip out by the clip on the track above, alpha or luma), captions (the sequence's captions: replace from words, cues or an .srt / .vtt file; edit, add or remove one; style them; hide them), track (lock, hide, mute, solo, name, gain, pan), addTrack / removeTrack (insert an empty track anywhere, or delete one with its clips), duck (music under voice), marks (in / out), and the audio ops of edit_composition (addAudio, audio, trimAudio, gainKey, removeAudio, splitAudio, crossfade). Linked clips (a picture and its sound) move, trim, cut and delete together unless `linked: false`. Locked tracks are never changed. Read it with get_sequence."
369425
369867
  }
369426
369868
  },
369427
369869
  run: (args2, ctx2) => {
@@ -370216,7 +370658,7 @@ var init_motion_keys = __esm({
370216
370658
  source: external_exports.object({ nodeId: external_exports.string(), path: external_exports.string() }).optional().describe("link: the layer and property whose sampled value this one takes (a pick-whip)."),
370217
370659
  signal: external_exports.enum(SIGNAL_IDS).optional().describe(`audio: what it follows \u2014 ${AUDIO_SIGNAL_OPTIONS.map((o) => `${o.signal} (${o.hint})`).join("; ")}.`),
370218
370660
  audioMode: external_exports.enum(AUDIO_MODE_IDS).optional().describe("audio: add the mapped signal to the value (default), set the value to it, or multiply the value by it."),
370219
- color: external_exports.object({ r: external_exports.number(), g: external_exports.number(), b: external_exports.number(), a: external_exports.number() }).optional().describe("audio on a colour: the colour it mixes toward (0\u20131 channels).")
370661
+ color: external_exports.object({ r: external_exports.number(), g: external_exports.number(), b: external_exports.number(), a: external_exports.number() }).optional().describe("audio on a color: the color it mixes toward (0\u20131 channels).")
370220
370662
  }),
370221
370663
  external_exports.object({ op: external_exports.literal("remove"), behaviour: behaviourId }),
370222
370664
  external_exports.object({ op: external_exports.literal("move"), behaviour: behaviourId, to: external_exports.number().int().min(0).describe("Position (0 first). Order matters: each adds to what came before; a loop always runs first.") }),
@@ -370267,7 +370709,7 @@ var init_motion_keys = __esm({
370267
370709
  switch (op4.op) {
370268
370710
  case "add": {
370269
370711
  const m = makeBehaviour(op4, behaviourScale(prop.control), nextSeed(track3?.modifiers ?? []), doc2.nodes);
370270
- if (prop.valueType !== "number" && m.kind !== "loop" && !(m.kind === "audio" && prop.valueType === "color")) throw new ToolError(`${args2.path} is a ${prop.valueType}: only a loop behaviour (or, on a colour, an audio one) applies to it.`);
370712
+ if (prop.valueType !== "number" && m.kind !== "loop" && !(m.kind === "audio" && prop.valueType === "color")) throw new ToolError(`${args2.path} is a ${prop.valueType}: only a loop behaviour (or, on a color, an audio one) applies to it.`);
370271
370713
  const ids2 = new Set(withModifierIds(track3?.modifiers ?? []).map((x2) => x2.id));
370272
370714
  next2 = addModifier(track3, m);
370273
370715
  made = next2.modifiers.find((x2) => !ids2.has(x2.id))?.id;
@@ -370379,7 +370821,7 @@ var init_motion_keys = __esm({
370379
370821
  seed: external_exports.number().int().min(0).max(2 ** 31 - 1).optional(),
370380
370822
  distribution: curveSchema.optional().describe("Spread the offsets along a curve instead of evenly.")
370381
370823
  }).nullable().optional().describe("A LIVE stagger on this group or frame: its children start one after another (changing the delay re-spaces them; nothing is baked). null removes it."),
370382
- label: external_exports.enum(TIMELINE_COLOR_IDS).nullable().optional().describe("The row's colour label in the timeline; null removes it.")
370824
+ label: external_exports.enum(TIMELINE_COLOR_IDS).nullable().optional().describe("The row's color label in the timeline; null removes it.")
370383
370825
  });
370384
370826
  motionSetLayerTiming = defineCommand({
370385
370827
  id: "motion.setLayerTiming",
@@ -370394,7 +370836,7 @@ var init_motion_keys = __esm({
370394
370836
  ui: { label: "Set layer timing", palette: false },
370395
370837
  agent: {
370396
370838
  name: "set_layer_timing",
370397
- description: "Move layers in time without touching their keys: set or shift a layer's start offset (its whole animation runs later), trim when it exists (span), put a live stagger on a group or frame (its children start one after another, by index, reverse, centre-out, random or a custom order, optionally spread along a curve), or set its timeline colour label. stagger_motion bakes a stagger into start offsets instead."
370839
+ description: "Move layers in time without touching their keys: set or shift a layer's start offset (its whole animation runs later), trim when it exists (span), put a live stagger on a group or frame (its children start one after another, by index, reverse, centre-out, random or a custom order, optionally spread along a curve), or set its timeline color label. stagger_motion bakes a stagger into start offsets instead."
370398
370840
  }
370399
370841
  },
370400
370842
  run: (args2, ctx2) => {
@@ -370717,7 +371159,7 @@ var init_motion_rich = __esm({
370717
371159
  ui: { label: "Edit 3D scene", palette: false },
370718
371160
  agent: {
370719
371161
  name: "edit_3d_scene",
370720
- description: "Real 3D in a group or frame (CSS preserve-3d): enable or disable it, let a component's instances pass through a scene (preserve3d), set the camera (lens mm, truck/pedestal/dolly, orbit, tilt, pan, roll, point of interest), the perspective origin, add / edit / remove lights (ambient, directional, point, spot: colour, intensity, position, target, cone), and place its layers (rotateX, rotateY, z, material: takes lights, ambient, diffuse, specular, shininess). Every camera, light and placement field is keyable with set_keyframes (scene3d.camera.orbit, scene3d.lights[@l1].intensity, rotateY, z \u2026); camera presets (push-in, orbit, dolly \u2026) are in apply_motion_preset. Returns the light id it adds."
371162
+ description: "Real 3D in a group or frame (CSS preserve-3d): enable or disable it, let a component's instances pass through a scene (preserve3d), set the camera (lens mm, truck/pedestal/dolly, orbit, tilt, pan, roll, point of interest), the perspective origin, add / edit / remove lights (ambient, directional, point, spot: color, intensity, position, target, cone), and place its layers (rotateX, rotateY, z, material: takes lights, ambient, diffuse, specular, shininess). Every camera, light and placement field is keyable with set_keyframes (scene3d.camera.orbit, scene3d.lights[@l1].intensity, rotateY, z \u2026); camera presets (push-in, orbit, dolly \u2026) are in apply_motion_preset. Returns the light id it adds."
370721
371163
  }
370722
371164
  },
370723
371165
  run: (args2, ctx2) => {
@@ -370827,7 +371269,7 @@ var init_motion_rich = __esm({
370827
371269
  trigger: external_exports.enum(["load", "click", "hover", "inView", "manual"]).optional().describe("What starts it: load, click, hover, inView (on screen / scrolled into view) or manual (only a variant switch plays it)."),
370828
371270
  range: external_exports.tuple([external_exports.string(), external_exports.string()]).nullable().optional().describe("Play only between two of the component timeline's markers (ids); null: the whole timeline."),
370829
371271
  reset: external_exports.boolean().optional().describe("Clear its playback first: play as the component does."),
370830
- properties: external_exports.record(external_exports.string(), external_exports.union([external_exports.number(), external_exports.string(), external_exports.boolean(), colorIn])).optional().describe(`Values for the component's NUMBER / COLOR / TEXT / BOOLEAN properties on this instance ("count to N", an accent colour).`)
371272
+ properties: external_exports.record(external_exports.string(), external_exports.union([external_exports.number(), external_exports.string(), external_exports.boolean(), colorIn])).optional().describe(`Values for the component's NUMBER / COLOR / TEXT / BOOLEAN properties on this instance ("count to N", an accent color).`)
370831
371273
  });
370832
371274
  motionSetPlayback = defineCommand({
370833
371275
  id: "motion.setPlayback",
@@ -370906,7 +371348,7 @@ var init_motion_rich = __esm({
370906
371348
  op: external_exports.literal("bindLayer"),
370907
371349
  layer: external_exports.string().describe("A layer inside the component."),
370908
371350
  name: external_exports.string().describe("A NUMBER, COLOR or IMAGE property."),
370909
- path: external_exports.string().max(300).nullable().describe("The layer property it feeds (a number path for NUMBER, a colour path for COLOR: fills[#0].color, opacity, text.counter \u2026; a picture for IMAGE: imageUrl on an image layer, fills[#0].imageUrl on an image fill); null unbinds.")
371351
+ path: external_exports.string().max(300).nullable().describe("The layer property it feeds (a number path for NUMBER, a color path for COLOR: fills[#0].color, opacity, text.counter \u2026; a picture for IMAGE: imageUrl on an image layer, fills[#0].imageUrl on an image fill); null unbinds.")
370910
371352
  }).describe("Make a layer property an input: each instance's value of the property plays there (a keyed path too).")
370911
371353
  ]);
370912
371354
  motionEditComponentProperty = defineCommand({
@@ -370983,7 +371425,7 @@ var init_motion_rich = __esm({
370983
371425
  });
370984
371426
  SHADER_NAMES = SHADER_PRESETS.map((p2) => p2.name);
370985
371427
  SHADER_CHECK_MS = 3e3;
370986
- paramValueIn = external_exports.union([external_exports.number(), external_exports.string(), external_exports.record(external_exports.string(), external_exports.number())]).describe('A number (f32), a colour "#rrggbb" / {r,g,b,a}, or a vector {x,y[,z,w]}.');
371428
+ paramValueIn = external_exports.union([external_exports.number(), external_exports.string(), external_exports.record(external_exports.string(), external_exports.number())]).describe('A number (f32), a color "#rrggbb" / {r,g,b,a}, or a vector {x,y[,z,w]}.');
370987
371429
  motionSetShaderFill = defineCommand({
370988
371430
  id: "motion.setShaderFill",
370989
371431
  title: "Set a shader fill",
@@ -371057,7 +371499,7 @@ var init_motion_rich = __esm({
371057
371499
  }
371058
371500
  const comps = paramComponents(p2);
371059
371501
  const obj2 = typeof raw === "string" ? parseHex(raw) : typeof raw === "object" ? raw : null;
371060
- if (!obj2 || !comps.every((c2) => typeof obj2[c2] === "number")) throw new ToolError(`${name2} takes ${p2.color ? "a colour" : `{${comps.join(", ")}}`}.`);
371502
+ if (!obj2 || !comps.every((c2) => typeof obj2[c2] === "number")) throw new ToolError(`${name2} takes ${p2.color ? "a color" : `{${comps.join(", ")}}`}.`);
371061
371503
  values3[name2] = Object.fromEntries(comps.map((c2) => [c2, obj2[c2]]));
371062
371504
  }
371063
371505
  fills[index2] = { ...fill, shaderParams: values3 };
@@ -371452,7 +371894,7 @@ function portValueOf(raw, type, what) {
371452
371894
  }
371453
371895
  const obj2 = typeof raw === "string" ? parseHex(raw) : typeof raw === "object" ? raw : null;
371454
371896
  const comps = type === "vec3f" && obj2 && "r" in obj2 ? COMPS.vec4f : COMPS[type];
371455
- if (!obj2 || !comps.every((c2) => typeof obj2[c2] === "number" && Number.isFinite(obj2[c2]))) throw new ToolError(`${what} takes ${type === "vec4f" ? "a colour" : `{${COMPS[type].join(", ")}}`}.`);
371897
+ if (!obj2 || !comps.every((c2) => typeof obj2[c2] === "number" && Number.isFinite(obj2[c2]))) throw new ToolError(`${what} takes ${type === "vec4f" ? "a color" : `{${COMPS[type].join(", ")}}`}.`);
371456
371898
  return Object.fromEntries(comps.map((c2) => [c2, obj2[c2]]));
371457
371899
  }
371458
371900
  function closesLoop(graph, from2, to) {
@@ -371617,7 +372059,7 @@ var init_shader_graph2 = __esm({
371617
372059
  init_types5();
371618
372060
  MAX_GRAPH_NODES = 200;
371619
372061
  nodeId = external_exports.string().regex(/^[A-Za-z][A-Za-z0-9]*$/).max(40);
371620
- portValue = external_exports.union([external_exports.number(), external_exports.string(), external_exports.record(external_exports.string(), external_exports.number())]).describe('A number, a colour "#rrggbb" / {r,g,b,a}, or a vector {x,y[,z]}.');
372062
+ portValue = external_exports.union([external_exports.number(), external_exports.string(), external_exports.record(external_exports.string(), external_exports.number())]).describe('A number, a color "#rrggbb" / {r,g,b,a}, or a vector {x,y[,z]}.');
371621
372063
  point = { x: external_exports.number().finite(), y: external_exports.number().finite() };
371622
372064
  PRESET_IDS3 = SHADER_PRESETS.map((p2) => p2.id);
371623
372065
  op3 = external_exports.discriminatedUnion("op", [
@@ -380372,11 +380814,11 @@ function syncPluginAgentTools(installed4) {
380372
380814
  }
380373
380815
  function createToolChannel(send, label3) {
380374
380816
  const pending8 = /* @__PURE__ */ new Map();
380375
- let seq8 = 0;
380817
+ let seq9 = 0;
380376
380818
  return {
380377
380819
  call(tool2, args2, options = {}) {
380378
380820
  if (options.signal?.aborted) return Promise.reject(new ToolError(`${label3}: ${tool2} was stopped`, "failed"));
380379
- const callId = `t${++seq8}`;
380821
+ const callId = `t${++seq9}`;
380380
380822
  return new Promise((resolve7, reject) => {
380381
380823
  const done = () => {
380382
380824
  pending8.delete(callId);
@@ -380952,14 +381394,14 @@ var init_import = __esm({
380952
381394
  if (Array.isArray(L.ef) && L.ef.length) this.notes.add(`Layer effects are not imported (\u201C${layer2.nm}\u201D).`);
380953
381395
  if (L.tm) this.notes.add(`Time remapping is not imported (\u201C${layer2.nm}\u201D).`);
380954
381396
  if (L.sr !== void 0 && L.sr !== 1) this.notes.add(`Time stretch is not imported (\u201C${layer2.nm}\u201D).`);
380955
- const chain3 = [];
380956
- for (let p2 = layer2.parent !== void 0 ? byInd.get(layer2.parent) : void 0, guard2 = 0; p2 && guard2 < 32; p2 = p2.parent !== void 0 ? byInd.get(p2.parent) : void 0, guard2++) chain3.unshift(p2);
381397
+ const chain5 = [];
381398
+ for (let p2 = layer2.parent !== void 0 ? byInd.get(layer2.parent) : void 0, guard2 = 0; p2 && guard2 < 32; p2 = p2.parent !== void 0 ? byInd.get(p2.parent) : void 0, guard2++) chain5.unshift(p2);
380957
381399
  let into = parentId;
380958
381400
  let offset = shift;
380959
- for (const p2 of chain3) {
381401
+ for (const p2 of chain5) {
380960
381402
  const wrap3 = createFrame({ name: `${p2.nm} (parent)`, x: 0, y: 0, width: 1, height: 1, fills: [], clipsContent: false });
380961
381403
  this.add(wrap3, into);
380962
- const span4 = p2 === chain3[0] ? this.span(layer2.ip, layer2.op, shift, path) : void 0;
381404
+ const span4 = p2 === chain5[0] ? this.span(layer2.ip, layer2.op, shift, path) : void 0;
380963
381405
  if (span4) wrap3.motion = { tracks: {}, span: span4 };
380964
381406
  const st4 = p2.st ?? 0;
380965
381407
  if (st4 - offset) wrap3.motion = { ...wrap3.motion ?? { tracks: {} }, timeOffset: this.ms(st4 - offset) };
@@ -381300,7 +381742,7 @@ var init_import = __esm({
381300
381742
  if (o.keys) this.notes.add("Stroke opacity keys are not imported.");
381301
381743
  } else if (s.ty === "gf" || s.ty === "gs") {
381302
381744
  if (s.ty === "gs") {
381303
- this.notes.add("Gradient strokes are imported as solid strokes in their first colour.");
381745
+ this.notes.add("Gradient strokes are imported as solid strokes in their first color.");
381304
381746
  }
381305
381747
  const g = s.g;
381306
381748
  const gk = this.read(g.k, [], shift);
@@ -415036,7 +415478,7 @@ function checkDesign(doc2, roots) {
415036
415478
  }
415037
415479
  for (const [kitName, kit] of Object.entries(REVIEW_KITS)) {
415038
415480
  const fails = paintedTexts(applyBrandKit(doc2, kit), [id3]).filter((t3) => t3.contrast < t3.required);
415039
- for (const t3 of fails.slice(0, 3)) add3({ kind: "kit-contrast", layer: t3.name, message: `Under a ${kitName} brand kit, ${label2(t3)} reads at ${t3.contrast.toFixed(1)}:1 (needs ${t3.required}:1): put it on a plate, or use the text roles rather than the brand colour for words.` });
415481
+ for (const t3 of fails.slice(0, 3)) add3({ kind: "kit-contrast", layer: t3.name, message: `Under a ${kitName} brand kit, ${label2(t3)} reads at ${t3.contrast.toFixed(1)}:1 (needs ${t3.required}:1): put it on a plate, or use the text roles rather than the brand color for words.` });
415040
415482
  }
415041
415483
  const walkInst = (nid) => {
415042
415484
  const n = doc2.nodes[nid];
@@ -415216,7 +415658,7 @@ var init_design_script = __esm({
415216
415658
  expose: {
415217
415659
  agent: {
415218
415660
  name: "write_design",
415219
- description: "Build a whole design from one script written with the template kit: frames, text styles, colour roles, auto-layout stacks, vectors, components, motion presets, counters, word swaps, music and its other sizes, in ONE step and one undo. Prefer this over many create_node / update_nodes calls for anything more than a small tweak. The design shows on the canvas while the script streams. The script is kept on the design: to change it, edit your script and call this again with `frame`. Returns the review in the same call: every size rendered, the checks, and with `look` the design at chosen moments and under a light and a dark brand kit \u2014 so one call is a whole round of build, check and look."
415661
+ description: "Build a whole design from one script written with the template kit: frames, text styles, color roles, auto-layout stacks, vectors, components, motion presets, counters, word swaps, music and its other sizes, in ONE step and one undo. Prefer this over many create_node / update_nodes calls for anything more than a small tweak. The design shows on the canvas while the script streams. The script is kept on the design: to change it, edit your script and call this again with `frame`. Returns the review in the same call: every size rendered, the checks, and with `look` the design at chosen moments and under a light and a dark brand kit \u2014 so one call is a whole round of build, check and look."
415220
415662
  }
415221
415663
  },
415222
415664
  run: async (args2, ctx2) => {
@@ -415792,7 +416234,7 @@ How the gallery's designs were decided, in order. Make every decision yourself;
415792
416234
  8. **Report** what is still not right and what you did not look at.`;
415793
416235
  REFERENCE_TOPICS = [
415794
416236
  { id: "start", title: "How a design script works", summary: "what a script can use, references, errors, sizes", body: START },
415795
- { id: "color-type", title: "Colour and type", summary: "brand roles, palette, text styles, fills, gradients, shaders, effects", body: COLOR_TYPE },
416237
+ { id: "color-type", title: "Color and type", summary: "brand roles, palette, text styles, fills, gradients, shaders, effects", body: COLOR_TYPE },
415796
416238
  { id: "layout", title: "Layers and layout", summary: "flowSheet, stacks, frames, text, shapes, vectors and path helpers, photos, patch", body: LAYOUT2 },
415797
416239
  { id: "components", title: "Components, variants and interaction", summary: "components and props, variant sets, variables and switches, prototype links", body: COMPONENTS },
415798
416240
  { id: "motion", title: "Motion and music", summary: "timeline, music beds, cues and presets, counters, swaps, keys, behaviours", body: MOTION },
@@ -415847,7 +416289,7 @@ var init_design_reference = __esm({
415847
416289
  agent: {
415848
416290
  name: "read_design_reference",
415849
416291
  readOnly: true,
415850
- description: "How to make designs in code, as the official templates are made: the kit by topic (colour and type, layout, components and switches, motion and music, sizes, web pages), how to edit existing designs with run_script, how design decisions are made, and complete worked examples (reel, landing page, pricing page, email header, ad set, phone screen). Read the index, then the topics and an example close to the job, before writing a script."
416292
+ description: "How to make designs in code, as the official templates are made: the kit by topic (color and type, layout, components and switches, motion and music, sizes, web pages), how to edit existing designs with run_script, how design decisions are made, and complete worked examples (reel, landing page, pricing page, email header, ad set, phone screen). Read the index, then the topics and an example close to the job, before writing a script."
415851
416293
  }
415852
416294
  },
415853
416295
  run: async (args2) => {
@@ -415914,7 +416356,7 @@ ${lines2.slice(from2, err2.line + 1).map((l, i2) => `${from2 + i2 + 1 === err2.l
415914
416356
  expose: {
415915
416357
  agent: {
415916
416358
  name: "run_script",
415917
- description: "Run JavaScript over the open document in a sandbox: read everything (`doc.nodes`, styles, variables, the selection), compute, and call any tool as `tools.<name>(params)` in loops. Every edit the script makes lands as ONE undo step; a script that only reads changes nothing. Returns what the script returned and printed, and the pictures of any look_at it called (so one call can make every edit and show the result). Use it for anything the single tools make tedious: bulk edits, audits, measuring, renaming, re-colouring, laying out many layers. For a whole new design prefer write_design."
416359
+ description: "Run JavaScript over the open document in a sandbox: read everything (`doc.nodes`, styles, variables, the selection), compute, and call any tool as `tools.<name>(params)` in loops. Every edit the script makes lands as ONE undo step; a script that only reads changes nothing. Returns what the script returned and printed, and the pictures of any look_at it called (so one call can make every edit and show the result). Use it for anything the single tools make tedious: bulk edits, audits, measuring, renaming, re-coloring, laying out many layers. For a whole new design prefer write_design."
415918
416360
  }
415919
416361
  },
415920
416362
  run: async (args2, ctx2) => {
@@ -417966,6 +418408,7 @@ function shaderTextureDims(width, height) {
417966
418408
  }
417967
418409
  function wrapUserCode(userCode) {
417968
418410
  const params2 = reflectShader(userCode).size > 0;
418411
+ const image = readsImage(userCode);
417969
418412
  return `
417970
418413
  struct ShaderUniforms {
417971
418414
  resolution: vec2<f32>,
@@ -417973,7 +418416,14 @@ struct ShaderUniforms {
417973
418416
  _pad: f32,
417974
418417
  };
417975
418418
  @group(0) @binding(0) var<uniform> u: ShaderUniforms;
417976
- ${params2 ? "@group(0) @binding(1) var<uniform> p: Params;" : ""}
418419
+ ${params2 ? "@group(0) @binding(1) var<uniform> p: Params;" : ""}${image ? `
418420
+ @group(0) @binding(2) var src_tex: texture_2d<f32>;
418421
+ @group(0) @binding(3) var src_samp: sampler;
418422
+ // The source picture (a clip's frame) at uv, 0\u20261 from the top left; transparent outside it.
418423
+ fn image_at(uv: vec2<f32>) -> vec4<f32> {
418424
+ let inside = all(uv >= vec2<f32>(0.0)) && all(uv <= vec2<f32>(1.0));
418425
+ return select(vec4<f32>(0.0), textureSampleLevel(src_tex, src_samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0), inside);
418426
+ }` : ""}
417977
418427
  // \u2500\u2500 user code \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
417978
418428
  ${userCode}
417979
418429
  // \u2500\u2500 /user code \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
@@ -418004,7 +418454,7 @@ fn fs_main(in: VOut) -> @location(0) vec4<f32> {
418004
418454
  }
418005
418455
  `;
418006
418456
  }
418007
- var TARGET_FORMAT, MAX_SIZE, MIN_SIZE, STALE_MS, FRAME_MS, MAX_SIZES_PER_SHADER, SWEEP_IDLE_MS, SWEEP_EVERY_MS, shaderTextureSize, USER_CODE_OFFSET, ShaderFillManager;
418457
+ var TARGET_FORMAT, MAX_SIZE, MIN_SIZE, STALE_MS, FRAME_MS, MAX_SIZES_PER_SHADER, SWEEP_IDLE_MS, SWEEP_EVERY_MS, readsImage, shaderTextureSize, USER_CODE_OFFSET, userCodeOffset, ShaderFillManager;
418008
418458
  var init_shader_fill = __esm({
418009
418459
  "lib/engine/shader-fill.ts"() {
418010
418460
  init_shader_params();
@@ -418017,8 +418467,10 @@ var init_shader_fill = __esm({
418017
418467
  MAX_SIZES_PER_SHADER = 4;
418018
418468
  SWEEP_IDLE_MS = 1e4;
418019
418469
  SWEEP_EVERY_MS = 2e3;
418470
+ readsImage = (code) => /\bimage_at\s*\(/.test(code);
418020
418471
  shaderTextureSize = (v) => Math.max(MIN_SIZE, Math.min(MAX_SIZE, Math.round(v) || MIN_SIZE));
418021
418472
  USER_CODE_OFFSET = wrapUserCode("").split("\n").findIndex((l) => l.startsWith("// \u2500\u2500 user code")) + 1;
418473
+ userCodeOffset = (code) => readsImage(code) ? wrapUserCode(code).split("\n").findIndex((l) => l.startsWith("// \u2500\u2500 user code")) + 1 : USER_CODE_OFFSET;
418022
418474
  ShaderFillManager = class {
418023
418475
  ctx;
418024
418476
  pipelines = /* @__PURE__ */ new Map();
@@ -418048,6 +418500,18 @@ var init_shader_fill = __esm({
418048
418500
  }
418049
418501
  return this.transparentTex;
418050
418502
  }
418503
+ sampler = null;
418504
+ /** The bind group: the uniforms, the params, and (for a shader that reads one) the source picture and its sampler. */
418505
+ bindGroupFor(pipeline, uniformBuffer, paramsBuffer, code, source3) {
418506
+ const { device } = this.ctx;
418507
+ const entries4 = [{ binding: 0, resource: { buffer: uniformBuffer } }];
418508
+ if (paramsBuffer) entries4.push({ binding: 1, resource: { buffer: paramsBuffer } });
418509
+ if (readsImage(code)) {
418510
+ this.sampler ??= device.createSampler({ magFilter: "linear", minFilter: "linear", addressModeU: "clamp-to-edge", addressModeV: "clamp-to-edge" });
418511
+ entries4.push({ binding: 2, resource: (source3 ?? this.getTransparent()).createView() }, { binding: 3, resource: this.sampler });
418512
+ }
418513
+ return device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: entries4 });
418514
+ }
418051
418515
  onError(cb) {
418052
418516
  this.errorListeners.add(cb);
418053
418517
  return () => this.errorListeners.delete(cb);
@@ -418074,7 +418538,8 @@ var init_shader_fill = __esm({
418074
418538
  try {
418075
418539
  shaderModule = device.createShaderModule({ code: wrapUserCode(code) });
418076
418540
  const uniform = (binding) => ({ binding, visibility: GPUShaderStage.FRAGMENT, buffer: { type: "uniform" } });
418077
- const bindGroupLayout = device.createBindGroupLayout({ entries: reflection.size ? [uniform(0), uniform(1)] : [uniform(0)] });
418541
+ const imageEntries = readsImage(code) ? [{ binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float" } }, { binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } }] : [];
418542
+ const bindGroupLayout = device.createBindGroupLayout({ entries: [...reflection.size ? [uniform(0), uniform(1)] : [uniform(0)], ...imageEntries] });
418078
418543
  pipeline = device.createRenderPipeline({
418079
418544
  layout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),
418080
418545
  vertex: { module: shaderModule, entryPoint: "vs_main" },
@@ -418091,7 +418556,7 @@ var init_shader_fill = __esm({
418091
418556
  const info2 = shaderModule?.getCompilationInfo ? shaderModule.getCompilationInfo().catch(() => null) : Promise.resolve(null);
418092
418557
  const scope = device.popErrorScope().catch(() => null);
418093
418558
  entry.ready = Promise.all([info2, scope]).then(([info3, err2]) => {
418094
- const mapped = info3 ? mapCompilerMessages(info3.messages, USER_CODE_OFFSET, code.split("\n").length) : [];
418559
+ const mapped = info3 ? mapCompilerMessages(info3.messages, userCodeOffset(code), code.split("\n").length) : [];
418095
418560
  const failed2 = mapped.some((d) => d.severity === "error");
418096
418561
  entry.diagnostics = failed2 ? mapped : err2 ? [...mapped, ...plainDiagnostics([err2.message])] : thrown ? [...mapped, ...diagnostics] : mapped;
418097
418562
  entry.settled = true;
@@ -418128,13 +418593,14 @@ var init_shader_fill = __esm({
418128
418593
  * allocated for a new size; a new params value re-renders the entry the last frame used for this size.
418129
418594
  * Returns null when the shader failed to compile (caller falls back).
418130
418595
  */
418131
- getTexture(code, width, height, time4, params2) {
418596
+ getTexture(code, width, height, time4, params2, source3, slot2) {
418132
418597
  if (!code) return null;
418133
418598
  if (performance.now() - this.sweptAt > SWEEP_EVERY_MS) this.sweep();
418134
418599
  const compiled2 = this.getPipeline(code);
418135
418600
  if (!compiled2.pipeline) return this.getTransparent();
418136
418601
  const [w, h] = shaderTextureDims(width, height);
418137
- const { key: key5, prefix } = shaderFillKey(code, w, h, params2);
418602
+ const base = shaderFillKey(code, w, h, params2);
418603
+ const key5 = slot2 ? `${base.key}#${slot2}` : base.key, prefix = slot2 ? `${base.prefix}#${slot2}` : base.prefix;
418138
418604
  const packed2 = packShaderParams(code, params2);
418139
418605
  const { device } = this.ctx;
418140
418606
  const now3 = performance.now();
@@ -418166,14 +418632,16 @@ var init_shader_fill = __esm({
418166
418632
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
418167
418633
  });
418168
418634
  const paramsBuffer = packed2.data.length ? device.createBuffer({ size: packed2.data.byteLength, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }) : null;
418169
- const bindGroup = device.createBindGroup({
418170
- layout: compiled2.pipeline.getBindGroupLayout(0),
418171
- entries: paramsBuffer ? [{ binding: 0, resource: { buffer: uniformBuffer } }, { binding: 1, resource: { buffer: paramsBuffer } }] : [{ binding: 0, resource: { buffer: uniformBuffer } }]
418172
- });
418173
- entry = { code, texture, width: w, height: h, bindGroup, uniformBuffer, paramsBuffer, animated: reflectShader(code).animated, renderedAt: null, lastUsed: now3 };
418635
+ const bindGroup = this.bindGroupFor(compiled2.pipeline, uniformBuffer, paramsBuffer, code, source3);
418636
+ entry = { code, texture, width: w, height: h, bindGroup, uniformBuffer, paramsBuffer, animated: reflectShader(code).animated, renderedAt: null, lastUsed: now3, source: source3 ?? null };
418174
418637
  this.entries.set(key5, entry);
418175
418638
  }
418176
418639
  entry.lastUsed = now3;
418640
+ if (readsImage(code) && (source3 ?? null) !== (entry.source ?? null)) {
418641
+ entry.bindGroup = this.bindGroupFor(compiled2.pipeline, entry.uniformBuffer, entry.paramsBuffer, code, source3);
418642
+ entry.source = source3 ?? null;
418643
+ entry.renderedAt = null;
418644
+ }
418177
418645
  if (entry.renderedAt !== null && (!entry.animated || entry.renderedAt === time4)) return entry.texture;
418178
418646
  entry.renderedAt = time4;
418179
418647
  device.queue.writeBuffer(entry.uniformBuffer, 0, new Float32Array([w, h, time4, 0]));
@@ -425259,7 +425727,7 @@ init_resources();
425259
425727
  init_desktop();
425260
425728
  init_hypery();
425261
425729
  import { createInterface } from "node:readline";
425262
- var VERSION2 = "0.56.5";
425730
+ var VERSION2 = "0.57.0";
425263
425731
  var HELP = `popcraft ${VERSION2} \u2014 the PopCraft command line
425264
425732
 
425265
425733
  Files (headless, on .popcraft files):