@popcraft/cli 0.56.5 → 0.57.1

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 +923 -406
  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.1"}`, ...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) {
@@ -164929,9 +164929,9 @@ var init_module2 = __esm({
164929
164929
  // Processes an array of glyphs and applies the specified features
164930
164930
  // Features should be in the form of {featureType:{featureSetting:boolean}}
164931
164931
  process(glyphs, features = {}) {
164932
- for (let chain3 of this.morx.chains) {
164933
- let flags = chain3.defaultFlags;
164934
- for (let feature of chain3.features) {
164932
+ for (let chain5 of this.morx.chains) {
164933
+ let flags = chain5.defaultFlags;
164934
+ for (let feature of chain5.features) {
164935
164935
  let f2;
164936
164936
  if (f2 = features[feature.featureType]) {
164937
164937
  if (f2[feature.featureSetting]) {
@@ -164943,7 +164943,7 @@ var init_module2 = __esm({
164943
164943
  }
164944
164944
  }
164945
164945
  }
164946
- for (let subtable of chain3.subtables) if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs);
164946
+ for (let subtable of chain5.subtables) if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs);
164947
164947
  }
164948
164948
  let index2 = glyphs.length - 1;
164949
164949
  while (index2 >= 0) {
@@ -165077,7 +165077,7 @@ var init_module2 = __esm({
165077
165077
  }
165078
165078
  getSupportedFeatures() {
165079
165079
  let features = [];
165080
- for (let chain3 of this.morx.chains) for (let feature of chain3.features) features.push([
165080
+ for (let chain5 of this.morx.chains) for (let feature of chain5.features) features.push([
165081
165081
  feature.featureType,
165082
165082
  feature.featureSetting
165083
165083
  ]);
@@ -165089,9 +165089,9 @@ var init_module2 = __esm({
165089
165089
  }
165090
165090
  generateInputCache() {
165091
165091
  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);
165092
+ for (let chain5 of this.morx.chains) {
165093
+ let flags = chain5.defaultFlags;
165094
+ for (let subtable of chain5.subtables) if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable);
165095
165095
  }
165096
165096
  }
165097
165097
  generateInputsForSubtable(subtable) {
@@ -172956,6 +172956,7 @@ function releaseMediaMemory(hash3) {
172956
172956
  var key2, peaksKey, objectUrls, sourceKey, remoteResolver, MEDIA_FETCH_TIMEOUT_MS, SHIPPED_MEDIA_PATH, notShipped, MEDIA_SCHEME, isImageDataUrl, memory, pendingLoads, sourceAliases, PAINT_KEYS, URL_KEYS;
172957
172957
  var init_media_store = __esm({
172958
172958
  "lib/storage/media-store.ts"() {
172959
+ "use strict";
172959
172960
  init_media_types();
172960
172961
  init_idb();
172961
172962
  init_media_hash();
@@ -176106,16 +176107,16 @@ var init_tokens = __esm({
176106
176107
 
176107
176108
  // lib/theme/resolve.ts
176108
176109
  function resolveTheme(themeId, lookup, overrides2 = {}) {
176109
- const chain3 = [];
176110
+ const chain5 = [];
176110
176111
  const seen = /* @__PURE__ */ new Set();
176111
176112
  for (let t3 = lookup(themeId); t3 && !seen.has(t3.id); t3 = t3.extends ? lookup(t3.extends) : void 0) {
176112
176113
  seen.add(t3.id);
176113
- chain3.unshift(t3);
176114
+ chain5.unshift(t3);
176114
176115
  }
176115
176116
  const out = {};
176116
176117
  for (const id3 of TOKEN_IDS) out[id3] = TOKENS[id3].default;
176117
176118
  const set4 = /* @__PURE__ */ new Set();
176118
- for (const t3 of chain3) for (const [k2, v] of Object.entries(t3.tokens)) {
176119
+ for (const t3 of chain5) for (const [k2, v] of Object.entries(t3.tokens)) {
176119
176120
  out[k2] = v;
176120
176121
  set4.add(k2);
176121
176122
  }
@@ -176460,15 +176461,15 @@ function changedSince(from2, to) {
176460
176461
  return null;
176461
176462
  }
176462
176463
  function nodeIndex(build3, update3) {
176463
- const memo7 = /* @__PURE__ */ new WeakMap();
176464
+ const memo8 = /* @__PURE__ */ new WeakMap();
176464
176465
  let last3 = null;
176465
176466
  return (nodes) => {
176466
- const hit = memo7.get(nodes);
176467
+ const hit = memo8.get(nodes);
176467
176468
  if (hit !== void 0) return hit;
176468
176469
  const changed = last3 ? changedSince(last3.nodes, nodes) : null;
176469
176470
  let value3 = last3 && changed ? update3(last3.value, last3.nodes, nodes, changed) : void 0;
176470
176471
  if (value3 === void 0) value3 = build3(nodes);
176471
- memo7.set(nodes, value3);
176472
+ memo8.set(nodes, value3);
176472
176473
  last3 = { nodes, value: value3 };
176473
176474
  return value3;
176474
176475
  };
@@ -177185,17 +177186,17 @@ function follow(x2, attack, release, fps = ANALYSIS_FPS) {
177185
177186
  function seriesOf(a, spec) {
177186
177187
  const attack = Math.max(0, spec.attack ?? 0), release = Math.max(0, spec.release ?? 0);
177187
177188
  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);
177189
+ let memo8 = smoothed.get(a);
177190
+ if (!memo8) {
177191
+ memo8 = /* @__PURE__ */ new Map();
177192
+ smoothed.set(a, memo8);
177192
177193
  }
177193
- const hit = memo7.get(key5);
177194
+ const hit = memo8.get(key5);
177194
177195
  if (hit) return hit;
177195
177196
  const raw = rawSeries(a, spec);
177196
177197
  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);
177198
+ if (memo8.size >= MAX_SERIES_PER_FILE) memo8.clear();
177199
+ memo8.set(key5, s);
177199
177200
  return s;
177200
177201
  }
177201
177202
  function at(series, fps, ms3) {
@@ -177474,16 +177475,16 @@ function sampleNode(node2, t3, nodes, inputs) {
177474
177475
  return patch2 ? { ...posed2, ...patch2 } : posed2;
177475
177476
  }
177476
177477
  function motionNodes(nodes, rootId) {
177477
- let memo7 = motionMemo.get(nodes);
177478
- if (!memo7) {
177479
- memo7 = /* @__PURE__ */ new Map();
177480
- motionMemo.set(nodes, memo7);
177478
+ let memo8 = motionMemo.get(nodes);
177479
+ if (!memo8) {
177480
+ memo8 = /* @__PURE__ */ new Map();
177481
+ motionMemo.set(nodes, memo8);
177481
177482
  }
177482
- const hit = memo7.get(rootId);
177483
+ const hit = memo8.get(rootId);
177483
177484
  if (hit) return hit;
177484
177485
  const out = [];
177485
177486
  for (const id3 of animatedIds(nodes)) if (localTime(nodes, id3, rootId, 0) !== void 0) out.push(nodes[id3]);
177486
- memo7.set(rootId, out);
177487
+ memo8.set(rootId, out);
177487
177488
  return out;
177488
177489
  }
177489
177490
  function motionEnd(nodes, rootId) {
@@ -184545,7 +184546,7 @@ var init_en2 = __esm({
184545
184546
  "designPanel.goToMainComponent": "Go to main component",
184546
184547
  "designPanel.grid": "Grid",
184547
184548
  "designPanel.gridSettings": "Grid settings",
184548
- "designPanel.hexColour": "Hex colour",
184549
+ "designPanel.hexColour": "Hex color",
184549
184550
  "designPanel.horizontal": "Horizontal",
184550
184551
  "designPanel.howTheInstanceSControl": "How the instance's control steps",
184551
184552
  "designPanel.hug": "Hug",
@@ -184924,6 +184925,7 @@ var init_en2 = __esm({
184924
184925
  "edit.cropTop": "Top",
184925
184926
  "edit.crossfadeNext": "Crossfade into {name}",
184926
184927
  "edit.curve": "Curve",
184928
+ "edit.customShader": "Custom shader",
184927
184929
  "edit.cut": "Cut",
184928
184930
  "edit.db": "{value} dB",
184929
184931
  "edit.dbSilent": "\u2212\u221E dB",
@@ -184936,6 +184938,7 @@ var init_en2 = __esm({
184936
184938
  "edit.duckRun": "Duck {track} under {under}",
184937
184939
  "edit.duckTrack": "Duck",
184938
184940
  "edit.duckUnder": "Under",
184941
+ "edit.editNodes": "Edit its nodes",
184939
184942
  "edit.editScene": "Edit this scene's animation",
184940
184943
  "edit.effect.BLUR": "Blur",
184941
184944
  "edit.effect.BRIGHTNESS": "Brightness",
@@ -184971,7 +184974,7 @@ var init_en2 = __esm({
184971
184974
  "edit.effectControl.Temp": "Temperature",
184972
184975
  "edit.effectControl.Tint": "Tint",
184973
184976
  "edit.effectDown": "Move down",
184974
- "edit.effectGroup.Color": "Colour",
184977
+ "edit.effectGroup.Color": "Color",
184975
184978
  "edit.effectGroup.Filter": "Filter",
184976
184979
  "edit.effectGroup.Warp": "Warp",
184977
184980
  "edit.effects": "Effects",
@@ -185161,6 +185164,19 @@ var init_en2 = __esm({
185161
185164
  "edit.sequences": "Sequences",
185162
185165
  "edit.sequencesBin": "Sequences",
185163
185166
  "edit.sequenceSettings": "Sequence settings",
185167
+ "edit.shader.chromatic": "Chromatic aberration",
185168
+ "edit.shader.duotone": "Duotone",
185169
+ "edit.shader.glitch": "Glitch",
185170
+ "edit.shader.glow": "Glow",
185171
+ "edit.shader.halftone": "Halftone",
185172
+ "edit.shader.kaleidoscope": "Kaleidoscope",
185173
+ "edit.shader.liquid": "Liquid",
185174
+ "edit.shader.mirror": "Mirror",
185175
+ "edit.shader.sketch": "Edge glow",
185176
+ "edit.shader.soft": "Soft focus",
185177
+ "edit.shader.vhs": "VHS",
185178
+ "edit.shaders": "Shader effects",
185179
+ "edit.shadersHint": "Click one in the bin's Shader effects, or start a custom shader and build it from nodes.",
185164
185180
  "edit.showBin": "Show bin",
185165
185181
  "edit.showInspector": "Show clip inspector",
185166
185182
  "edit.showTrack": "Show track",
@@ -185429,7 +185445,7 @@ var init_en2 = __esm({
185429
185445
  "fillFlyout.spacingX": "Spacing X",
185430
185446
  "fillFlyout.spacingY": "Spacing Y",
185431
185447
  "fillFlyout.stock": "Stock",
185432
- "fillFlyout.stopColour": "Stop colour",
185448
+ "fillFlyout.stopColour": "Stop color",
185433
185449
  "fillFlyout.stops": "Stops",
185434
185450
  "fillFlyout.textureNoise": "Texture / noise",
185435
185451
  "fillFlyout.thePosterFrameIsShown": "The poster frame is shown while paused and used for SVG/PDF export.",
@@ -185749,7 +185765,7 @@ var init_en2 = __esm({
185749
185765
  "imageAdjustSection.resetThisChannel": "Reset this channel",
185750
185766
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Save current adjustments as a preset",
185751
185767
  "imageAdjustSection.tint": "Tint",
185752
- "imageAdjustSection.tintColour": "Tint colour",
185768
+ "imageAdjustSection.tintColour": "Tint color",
185753
185769
  "imageEditToolbar.altClickToPickA": "Alt-click to pick a source",
185754
185770
  "imageEditToolbar.bringTheSelectionBack": "Bring the selection back",
185755
185771
  "imageEditToolbar.bringTheWholePictureBack": "Bring the whole picture back",
@@ -185895,7 +185911,7 @@ var init_en2 = __esm({
185895
185911
  "keyInspector.howTheValueTravelsTo": "How the value travels to the next key",
185896
185912
  "keyInspector.keys": "{length} keys",
185897
185913
  "keyInspector.noKeysPicked": "No keys picked.",
185898
- "keyInspector.theKeySColour": "The key's colour",
185914
+ "keyInspector.theKeySColour": "The key's color",
185899
185915
  "keyInspector.time": "Time",
185900
185916
  "keyInspector.value": "Value",
185901
185917
  "keyInspector.whenTheFirstPickedKey": "When the first picked key plays; the others keep their distance",
@@ -186007,12 +186023,12 @@ var init_en2 = __esm({
186007
186023
  "libraryLinkChoice.unlinked": "Unlinked",
186008
186024
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Unlinked: a local copy in this file \u2014 inputs and motion kept, no link back to the library",
186009
186025
  "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",
186026
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Color variables bind the fill, so it follows the library's updates",
186027
+ "librarySwatchesPanel.noColoursMatch": "No colors match \u201C{query}\u201D",
186028
+ "librarySwatchesPanel.noColoursOrPaintStyles": "No colors or paint styles in this library",
186029
+ "librarySwatchesPanel.noColourStylesOrVariables": "No color styles or variables yet. {value}",
186030
+ "librarySwatchesPanel.searchLibraryColours": "Search library colors",
186031
+ "librarySwatchesPanel.searchStylesAndColours": "Search styles and colors",
186016
186032
  "linkFields.anchor": "Layer on this page",
186017
186033
  "linkFields.anchorOption": "{name} (#{anchor})",
186018
186034
  "linkFields.choose": "Choose\u2026",
@@ -186237,7 +186253,7 @@ var init_en2 = __esm({
186237
186253
  "modifierList.noneYetABehaviourMoves": "None yet. A behaviour moves the value on its own \u2014 a spin needs no keys at all.",
186238
186254
  "modifierList.remove": "Remove {toLowerCase}",
186239
186255
  "modifierList.removeTheKeyHere": "Remove the {toLowerCase} key here",
186240
- "modifierList.theColourItMixesToward": "The colour it mixes toward as the signal rises",
186256
+ "modifierList.theColourItMixesToward": "The color it mixes toward as the signal rises",
186241
186257
  "motionComponentSection.componentInputs": "Component inputs",
186242
186258
  "motionComponentSection.motion": "Motion",
186243
186259
  "motionComponentSection.notUsedHere": "Not used here",
@@ -187517,7 +187533,7 @@ var init_en2 = __esm({
187517
187533
  "settingsDialog.accentSky": "Sky",
187518
187534
  "settingsDialog.accentSystem": "System",
187519
187535
  "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.",
187536
+ "settingsDialog.accentSystemUnavailable": "System: this device does not share its accent color, so Lavender is used.",
187521
187537
  "settingsDialog.accentTeal": "Teal",
187522
187538
  "settingsDialog.account": "Account",
187523
187539
  "settingsDialog.contrast": "Contrast",
@@ -187959,7 +187975,7 @@ var init_en2 = __esm({
187959
187975
  "textAnimatorPanel.theRandomOrderSSeed": "The random order's seed",
187960
187976
  "textAnimatorPanel.thousandsSeparator": "Thousands separator",
187961
187977
  "textAnimatorPanel.tint": "Tint",
187962
- "textAnimatorPanel.tintTheColourAFully": "Tint: the colour a fully moved unit takes",
187978
+ "textAnimatorPanel.tintTheColourAFully": "Tint: the color a fully moved unit takes",
187963
187979
  "textAnimatorPanel.to": "To",
187964
187980
  "textAnimatorPanel.turn": "Turn",
187965
187981
  "textAnimatorPanel.typewriter": "Typewriter",
@@ -190211,6 +190227,7 @@ var require_es = __commonJS({
190211
190227
  "edit.cropTop": "Superior",
190212
190228
  "edit.crossfadeNext": "Fundido encadenado a {name}",
190213
190229
  "edit.curve": "Curva",
190230
+ "edit.customShader": "Shader personalizado",
190214
190231
  "edit.cut": "Cortar",
190215
190232
  "edit.db": "{value} dB",
190216
190233
  "edit.dbSilent": "\u2212\u221E dB",
@@ -190223,6 +190240,7 @@ var require_es = __commonJS({
190223
190240
  "edit.duckRun": "Atenuar {track} bajo {under}",
190224
190241
  "edit.duckTrack": "Atenuar",
190225
190242
  "edit.duckUnder": "Bajo",
190243
+ "edit.editNodes": "Editar sus nodos",
190226
190244
  "edit.editScene": "Editar la animaci\xF3n de esta escena",
190227
190245
  "edit.effect.BLUR": "Desenfoque",
190228
190246
  "edit.effect.BRIGHTNESS": "Brillo",
@@ -190448,6 +190466,19 @@ var require_es = __commonJS({
190448
190466
  "edit.sequences": "Secuencias",
190449
190467
  "edit.sequencesBin": "Secuencias",
190450
190468
  "edit.sequenceSettings": "Ajustes de secuencia",
190469
+ "edit.shader.chromatic": "Aberraci\xF3n crom\xE1tica",
190470
+ "edit.shader.duotone": "Duotono",
190471
+ "edit.shader.glitch": "Glitch",
190472
+ "edit.shader.glow": "Resplandor",
190473
+ "edit.shader.halftone": "Medio tono",
190474
+ "edit.shader.kaleidoscope": "Caleidoscopio",
190475
+ "edit.shader.liquid": "L\xEDquido",
190476
+ "edit.shader.mirror": "Espejo",
190477
+ "edit.shader.sketch": "Resplandor de borde",
190478
+ "edit.shader.soft": "Enfoque suave",
190479
+ "edit.shader.vhs": "VHS",
190480
+ "edit.shaders": "Efectos de shader",
190481
+ "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
190482
  "edit.showBin": "Mostrar bandeja",
190452
190483
  "edit.showInspector": "Mostrar inspector de clip",
190453
190484
  "edit.showTrack": "Mostrar pista",
@@ -191036,7 +191067,7 @@ var require_es = __commonJS({
191036
191067
  "imageAdjustSection.resetThisChannel": "Restablecer este canal",
191037
191068
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Guardar ajustes actuales como preajuste",
191038
191069
  "imageAdjustSection.tint": "Tinte",
191039
- "imageAdjustSection.tintColour": "Color del tinte",
191070
+ "imageAdjustSection.tintColour": "Color de tinte",
191040
191071
  "imageEditToolbar.altClickToPickA": "Alt-clic para seleccionar un origen",
191041
191072
  "imageEditToolbar.bringTheSelectionBack": "Recuperar la selecci\xF3n",
191042
191073
  "imageEditToolbar.bringTheWholePictureBack": "Recuperar la imagen completa",
@@ -191294,11 +191325,11 @@ var require_es = __commonJS({
191294
191325
  "libraryLinkChoice.unlinked": "Desenlazado",
191295
191326
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Desenlazado: una copia local en este archivo \u2014 entradas y movimiento conservados, sin enlace a la biblioteca",
191296
191327
  "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",
191328
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Las variables de color vinculan el relleno, por lo que sigue las actualizaciones de la biblioteca.",
191298
191329
  "librarySwatchesPanel.noColoursMatch": "Ning\xFAn color coincide con \u201C{query}\u201D",
191299
- "librarySwatchesPanel.noColoursOrPaintStyles": "No hay colores o estilos de pintura en esta biblioteca",
191330
+ "librarySwatchesPanel.noColoursOrPaintStyles": "No hay colores ni estilos de pintura en esta biblioteca.",
191300
191331
  "librarySwatchesPanel.noColourStylesOrVariables": "A\xFAn no hay estilos de color o variables. {value}",
191301
- "librarySwatchesPanel.searchLibraryColours": "Buscar colores de biblioteca",
191332
+ "librarySwatchesPanel.searchLibraryColours": "Buscar colores de la biblioteca",
191302
191333
  "librarySwatchesPanel.searchStylesAndColours": "Buscar estilos y colores",
191303
191334
  "linkFields.anchor": "Capa en esta p\xE1gina",
191304
191335
  "linkFields.anchorOption": "{name} (#{anchor})",
@@ -191524,7 +191555,7 @@ var require_es = __commonJS({
191524
191555
  "modifierList.noneYetABehaviourMoves": "Ninguno todav\xEDa. Un comportamiento mueve el valor por s\xED solo \u2014 un giro no necesita ninguna clave.",
191525
191556
  "modifierList.remove": "Eliminar {toLowerCase}",
191526
191557
  "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",
191558
+ "modifierList.theColourItMixesToward": "El color hacia el que se mezcla a medida que la se\xF1al aumenta.",
191528
191559
  "motionComponentSection.componentInputs": "Entradas del componente",
191529
191560
  "motionComponentSection.motion": "Movimiento",
191530
191561
  "motionComponentSection.notUsedHere": "No se usa aqu\xED",
@@ -192804,7 +192835,7 @@ var require_es = __commonJS({
192804
192835
  "settingsDialog.accentSky": "Cielo",
192805
192836
  "settingsDialog.accentSystem": "Sistema",
192806
192837
  "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.",
192838
+ "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo no comparte su color de \xE9nfasis, por lo que se usa Lavanda.",
192808
192839
  "settingsDialog.accentTeal": "Verde azulado",
192809
192840
  "settingsDialog.account": "Cuenta",
192810
192841
  "settingsDialog.contrast": "Contraste",
@@ -193246,7 +193277,7 @@ var require_es = __commonJS({
193246
193277
  "textAnimatorPanel.theRandomOrderSSeed": "La semilla del orden aleatorio",
193247
193278
  "textAnimatorPanel.thousandsSeparator": "Separador de miles",
193248
193279
  "textAnimatorPanel.tint": "Tinte",
193249
- "textAnimatorPanel.tintTheColourAFully": "Tinte: el color que toma una unidad completamente movida",
193280
+ "textAnimatorPanel.tintTheColourAFully": "Tinte: el color que adquiere una unidad completamente movida.",
193250
193281
  "textAnimatorPanel.to": "A",
193251
193282
  "textAnimatorPanel.turn": "Giro",
193252
193283
  "textAnimatorPanel.typewriter": "M\xE1quina de escribir",
@@ -195498,6 +195529,7 @@ var require_fr = __commonJS({
195498
195529
  "edit.cropTop": "Haut",
195499
195530
  "edit.crossfadeNext": "Fondu encha\xEEn\xE9 vers {name}",
195500
195531
  "edit.curve": "Courbe",
195532
+ "edit.customShader": "Shader personnalis\xE9",
195501
195533
  "edit.cut": "Couper",
195502
195534
  "edit.db": "{value} dB",
195503
195535
  "edit.dbSilent": "\u2212\u221E dB",
@@ -195510,6 +195542,7 @@ var require_fr = __commonJS({
195510
195542
  "edit.duckRun": "Att\xE9nuer {track} sous {under}",
195511
195543
  "edit.duckTrack": "Att\xE9nuer",
195512
195544
  "edit.duckUnder": "Sous",
195545
+ "edit.editNodes": "Modifier ses n\u0153uds",
195513
195546
  "edit.editScene": "Modifier l\u2019animation de cette sc\xE8ne",
195514
195547
  "edit.effect.BLUR": "Flou",
195515
195548
  "edit.effect.BRIGHTNESS": "Luminosit\xE9",
@@ -195735,6 +195768,19 @@ var require_fr = __commonJS({
195735
195768
  "edit.sequences": "S\xE9quences",
195736
195769
  "edit.sequencesBin": "S\xE9quences",
195737
195770
  "edit.sequenceSettings": "Param\xE8tres de s\xE9quence",
195771
+ "edit.shader.chromatic": "Aberration chromatique",
195772
+ "edit.shader.duotone": "Duoton",
195773
+ "edit.shader.glitch": "Glitch",
195774
+ "edit.shader.glow": "Lueur",
195775
+ "edit.shader.halftone": "Demi-teinte",
195776
+ "edit.shader.kaleidoscope": "Kal\xE9idoscope",
195777
+ "edit.shader.liquid": "Liquide",
195778
+ "edit.shader.mirror": "Miroir",
195779
+ "edit.shader.sketch": "Lueur de bord",
195780
+ "edit.shader.soft": "Flou artistique",
195781
+ "edit.shader.vhs": "VHS",
195782
+ "edit.shaders": "Effets de shader",
195783
+ "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
195784
  "edit.showBin": "Afficher le chutier",
195739
195785
  "edit.showInspector": "Afficher l\u2019inspecteur de clip",
195740
195786
  "edit.showTrack": "Afficher la piste",
@@ -196003,7 +196049,7 @@ var require_fr = __commonJS({
196003
196049
  "fillFlyout.spacingX": "Espacement X",
196004
196050
  "fillFlyout.spacingY": "Espacement Y",
196005
196051
  "fillFlyout.stock": "Stock",
196006
- "fillFlyout.stopColour": "Couleur du point",
196052
+ "fillFlyout.stopColour": "Couleur d\u2019arr\xEAt",
196007
196053
  "fillFlyout.stops": "Points",
196008
196054
  "fillFlyout.textureNoise": "Texture / bruit",
196009
196055
  "fillFlyout.thePosterFrameIsShown": "L\u2019image d\u2019affiche est affich\xE9e en pause et utilis\xE9e pour l\u2019exportation SVG/PDF.",
@@ -196323,7 +196369,7 @@ var require_fr = __commonJS({
196323
196369
  "imageAdjustSection.resetThisChannel": "R\xE9initialiser ce canal",
196324
196370
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Enregistrer les r\xE9glages actuels comme pr\xE9r\xE9glage",
196325
196371
  "imageAdjustSection.tint": "Teinte",
196326
- "imageAdjustSection.tintColour": "Couleur de la teinte",
196372
+ "imageAdjustSection.tintColour": "Couleur de teinte",
196327
196373
  "imageEditToolbar.altClickToPickA": "Alt-clic pour choisir une source",
196328
196374
  "imageEditToolbar.bringTheSelectionBack": "R\xE9tablir la s\xE9lection",
196329
196375
  "imageEditToolbar.bringTheWholePictureBack": "R\xE9tablir l\u2019image enti\xE8re",
@@ -196581,7 +196627,7 @@ var require_fr = __commonJS({
196581
196627
  "libraryLinkChoice.unlinked": "D\xE9li\xE9",
196582
196628
  "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
196629
  "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",
196630
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Les variables de couleur lient le remplissage, il suit donc les mises \xE0 jour de la biblioth\xE8que",
196585
196631
  "librarySwatchesPanel.noColoursMatch": "Aucune couleur ne correspond \xE0 \xAB {query} \xBB",
196586
196632
  "librarySwatchesPanel.noColoursOrPaintStyles": "Aucune couleur ou style de peinture dans cette biblioth\xE8que",
196587
196633
  "librarySwatchesPanel.noColourStylesOrVariables": "Aucun style de couleur ou variable pour l\u2019instant. {value}",
@@ -198091,7 +198137,7 @@ var require_fr = __commonJS({
198091
198137
  "settingsDialog.accentSky": "Ciel",
198092
198138
  "settingsDialog.accentSystem": "Syst\xE8me",
198093
198139
  "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.",
198140
+ "settingsDialog.accentSystemUnavailable": "Syst\xE8me : cet appareil ne partage pas sa couleur d\u2019accentuation, le Lavande est donc utilis\xE9.",
198095
198141
  "settingsDialog.accentTeal": "Sarcelle",
198096
198142
  "settingsDialog.account": "Compte",
198097
198143
  "settingsDialog.contrast": "Contraste",
@@ -200785,6 +200831,7 @@ var require_de = __commonJS({
200785
200831
  "edit.cropTop": "Oben",
200786
200832
  "edit.crossfadeNext": "\xDCberblenden in {name}",
200787
200833
  "edit.curve": "Kurve",
200834
+ "edit.customShader": "Benutzerdefinierter Shader",
200788
200835
  "edit.cut": "Ausschneiden",
200789
200836
  "edit.db": "{value} dB",
200790
200837
  "edit.dbSilent": "\u2212\u221E dB",
@@ -200797,6 +200844,7 @@ var require_de = __commonJS({
200797
200844
  "edit.duckRun": "{track} unter {under} absenken",
200798
200845
  "edit.duckTrack": "Absenken",
200799
200846
  "edit.duckUnder": "Unter",
200847
+ "edit.editNodes": "Knoten bearbeiten",
200800
200848
  "edit.editScene": "Animation dieser Szene bearbeiten",
200801
200849
  "edit.effect.BLUR": "Weichzeichnen",
200802
200850
  "edit.effect.BRIGHTNESS": "Helligkeit",
@@ -201022,6 +201070,19 @@ var require_de = __commonJS({
201022
201070
  "edit.sequences": "Sequenzen",
201023
201071
  "edit.sequencesBin": "Sequenzen",
201024
201072
  "edit.sequenceSettings": "Sequenzeinstellungen",
201073
+ "edit.shader.chromatic": "Chromatische Aberration",
201074
+ "edit.shader.duotone": "Duplex",
201075
+ "edit.shader.glitch": "Glitch",
201076
+ "edit.shader.glow": "Gl\xFChen",
201077
+ "edit.shader.halftone": "Halbton",
201078
+ "edit.shader.kaleidoscope": "Kaleidoskop",
201079
+ "edit.shader.liquid": "Fl\xFCssigkeit",
201080
+ "edit.shader.mirror": "Spiegel",
201081
+ "edit.shader.sketch": "Kantenglanz",
201082
+ "edit.shader.soft": "Weichzeichner",
201083
+ "edit.shader.vhs": "VHS",
201084
+ "edit.shaders": "Shader-Effekte",
201085
+ "edit.shadersHint": "Klicke auf einen in den Shader-Effekten der Ablage, oder starte einen benutzerdefinierten Shader und baue ihn aus Knoten auf.",
201025
201086
  "edit.showBin": "Ablage anzeigen",
201026
201087
  "edit.showInspector": "Clip-Inspektor anzeigen",
201027
201088
  "edit.showTrack": "Spur anzeigen",
@@ -201610,7 +201671,7 @@ var require_de = __commonJS({
201610
201671
  "imageAdjustSection.resetThisChannel": "Diesen Kanal zur\xFCcksetzen",
201611
201672
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Aktuelle Anpassungen als Voreinstellung speichern",
201612
201673
  "imageAdjustSection.tint": "Farbton",
201613
- "imageAdjustSection.tintColour": "T\xF6nungsfarbe",
201674
+ "imageAdjustSection.tintColour": "Einf\xE4rbefarbe",
201614
201675
  "imageEditToolbar.altClickToPickA": "Alt-Klick, um eine Quelle auszuw\xE4hlen",
201615
201676
  "imageEditToolbar.bringTheSelectionBack": "Auswahl zur\xFCckholen",
201616
201677
  "imageEditToolbar.bringTheWholePictureBack": "Ganzes Bild zur\xFCckholen",
@@ -201756,7 +201817,7 @@ var require_de = __commonJS({
201756
201817
  "keyInspector.howTheValueTravelsTo": "Wie der Wert zum n\xE4chsten Key \xFCbergeht",
201757
201818
  "keyInspector.keys": "{length} Keys",
201758
201819
  "keyInspector.noKeysPicked": "Keine Keys ausgew\xE4hlt.",
201759
- "keyInspector.theKeySColour": "Die Farbe des Keys",
201820
+ "keyInspector.theKeySColour": "Die Farbe des Schl\xFCssels",
201760
201821
  "keyInspector.time": "Zeit",
201761
201822
  "keyInspector.value": "Wert",
201762
201823
  "keyInspector.whenTheFirstPickedKey": "Wann der erste ausgew\xE4hlte Key abgespielt wird; die anderen behalten ihren Abstand bei",
@@ -202098,7 +202159,7 @@ var require_de = __commonJS({
202098
202159
  "modifierList.noneYetABehaviourMoves": "Noch keine. Ein Verhalten bewegt den Wert von selbst \u2013 eine Drehung ben\xF6tigt \xFCberhaupt keine Keys.",
202099
202160
  "modifierList.remove": "{toLowerCase} entfernen",
202100
202161
  "modifierList.removeTheKeyHere": "Den {toLowerCase}-Key hier entfernen",
202101
- "modifierList.theColourItMixesToward": "Die Farbe, zu der es sich mischt, wenn das Signal ansteigt",
202162
+ "modifierList.theColourItMixesToward": "Die Farbe, zu der es sich mischt, wenn das Signal steigt",
202102
202163
  "motionComponentSection.componentInputs": "Komponenten-Inputs",
202103
202164
  "motionComponentSection.motion": "Bewegung",
202104
202165
  "motionComponentSection.notUsedHere": "Hier nicht verwendet",
@@ -206072,6 +206133,7 @@ var require_it = __commonJS({
206072
206133
  "edit.cropTop": "Superiore",
206073
206134
  "edit.crossfadeNext": "Dissolvenza incrociata in {name}",
206074
206135
  "edit.curve": "Curva",
206136
+ "edit.customShader": "Shader personalizzato",
206075
206137
  "edit.cut": "Taglia",
206076
206138
  "edit.db": "{value} dB",
206077
206139
  "edit.dbSilent": "\u2212\u221E dB",
@@ -206084,6 +206146,7 @@ var require_it = __commonJS({
206084
206146
  "edit.duckRun": "Attenua {track} sotto {under}",
206085
206147
  "edit.duckTrack": "Attenua",
206086
206148
  "edit.duckUnder": "Sotto",
206149
+ "edit.editNodes": "Modifica i suoi nodi",
206087
206150
  "edit.editScene": "Modifica l\u2019animazione di questa scena",
206088
206151
  "edit.effect.BLUR": "Sfocatura",
206089
206152
  "edit.effect.BRIGHTNESS": "Luminosit\xE0",
@@ -206309,6 +206372,19 @@ var require_it = __commonJS({
206309
206372
  "edit.sequences": "Sequenze",
206310
206373
  "edit.sequencesBin": "Sequenze",
206311
206374
  "edit.sequenceSettings": "Impostazioni sequenza",
206375
+ "edit.shader.chromatic": "Aberrazione cromatica",
206376
+ "edit.shader.duotone": "Bicolore",
206377
+ "edit.shader.glitch": "Glitch",
206378
+ "edit.shader.glow": "Bagliore",
206379
+ "edit.shader.halftone": "Mezzatinta",
206380
+ "edit.shader.kaleidoscope": "Caleidoscopio",
206381
+ "edit.shader.liquid": "Liquido",
206382
+ "edit.shader.mirror": "Specchio",
206383
+ "edit.shader.sketch": "Bagliore bordi",
206384
+ "edit.shader.soft": "Messa a fuoco morbida",
206385
+ "edit.shader.vhs": "VHS",
206386
+ "edit.shaders": "Effetti shader",
206387
+ "edit.shadersHint": "Fai clic su uno degli effetti shader nel pannello, oppure avvia uno shader personalizzato e crealo dai nodi.",
206312
206388
  "edit.showBin": "Mostra cestino",
206313
206389
  "edit.showInspector": "Mostra ispettore clip",
206314
206390
  "edit.showTrack": "Mostra traccia",
@@ -206577,7 +206653,7 @@ var require_it = __commonJS({
206577
206653
  "fillFlyout.spacingX": "Spaziatura X",
206578
206654
  "fillFlyout.spacingY": "Spaziatura Y",
206579
206655
  "fillFlyout.stock": "Stock",
206580
- "fillFlyout.stopColour": "Colore stop",
206656
+ "fillFlyout.stopColour": "Colore di stop",
206581
206657
  "fillFlyout.stops": "Stop",
206582
206658
  "fillFlyout.textureNoise": "Texture / rumore",
206583
206659
  "fillFlyout.thePosterFrameIsShown": "Il fotogramma poster viene mostrato in pausa e usato per l\u2019esportazione SVG/PDF.",
@@ -207043,7 +207119,7 @@ var require_it = __commonJS({
207043
207119
  "keyInspector.howTheValueTravelsTo": "Come il valore si sposta al fotogramma chiave successivo",
207044
207120
  "keyInspector.keys": "{length, plural, one {# fotogramma chiave} other {# fotogrammi chiave}}",
207045
207121
  "keyInspector.noKeysPicked": "Nessun fotogramma chiave selezionato.",
207046
- "keyInspector.theKeySColour": "Colore del fotogramma chiave",
207122
+ "keyInspector.theKeySColour": "Il colore della chiave",
207047
207123
  "keyInspector.time": "Tempo",
207048
207124
  "keyInspector.value": "Valore",
207049
207125
  "keyInspector.whenTheFirstPickedKey": "Quando il primo fotogramma chiave selezionato viene riprodotto; gli altri mantengono la loro distanza",
@@ -207155,7 +207231,7 @@ var require_it = __commonJS({
207155
207231
  "libraryLinkChoice.unlinked": "Scollegato",
207156
207232
  "libraryLinkChoice.unlinkedALocalCopyInThis": "Scollegato: una copia locale in questo file \u2014 input e movimento mantenuti, nessun collegamento alla libreria",
207157
207233
  "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",
207234
+ "librarySwatchesPanel.colourVariablesBindTheFill": "Le variabili colore collegano il riempimento, in modo che segua gli aggiornamenti della libreria",
207159
207235
  "librarySwatchesPanel.noColoursMatch": "Nessun colore corrisponde a \u201C{query}\u201D",
207160
207236
  "librarySwatchesPanel.noColoursOrPaintStyles": "Nessun colore o stile di pittura in questa libreria",
207161
207237
  "librarySwatchesPanel.noColourStylesOrVariables": "Nessuno stile colore o variabile ancora. {value}",
@@ -208665,7 +208741,7 @@ var require_it = __commonJS({
208665
208741
  "settingsDialog.accentSky": "Cielo",
208666
208742
  "settingsDialog.accentSystem": "Sistema",
208667
208743
  "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.",
208744
+ "settingsDialog.accentSystemUnavailable": "Sistema: questo dispositivo non condivide il suo colore accento, quindi viene usato il Lavanda.",
208669
208745
  "settingsDialog.accentTeal": "Verde acqua",
208670
208746
  "settingsDialog.account": "Account",
208671
208747
  "settingsDialog.contrast": "Contrasto",
@@ -211359,6 +211435,7 @@ var require_pt_BR = __commonJS({
211359
211435
  "edit.cropTop": "Superior",
211360
211436
  "edit.crossfadeNext": "Transi\xE7\xE3o para {name}",
211361
211437
  "edit.curve": "Curva",
211438
+ "edit.customShader": "Shader personalizado",
211362
211439
  "edit.cut": "Cortar",
211363
211440
  "edit.db": "{value} dB",
211364
211441
  "edit.dbSilent": "\u2212\u221E dB",
@@ -211371,6 +211448,7 @@ var require_pt_BR = __commonJS({
211371
211448
  "edit.duckRun": "Atenuar {track} sob {under}",
211372
211449
  "edit.duckTrack": "Atenuar",
211373
211450
  "edit.duckUnder": "Sob",
211451
+ "edit.editNodes": "Editar seus n\xF3s",
211374
211452
  "edit.editScene": "Editar anima\xE7\xE3o desta cena",
211375
211453
  "edit.effect.BLUR": "Desfoque",
211376
211454
  "edit.effect.BRIGHTNESS": "Brilho",
@@ -211596,6 +211674,19 @@ var require_pt_BR = __commonJS({
211596
211674
  "edit.sequences": "Sequ\xEAncias",
211597
211675
  "edit.sequencesBin": "Sequ\xEAncias",
211598
211676
  "edit.sequenceSettings": "Configura\xE7\xF5es da sequ\xEAncia",
211677
+ "edit.shader.chromatic": "Aberra\xE7\xE3o crom\xE1tica",
211678
+ "edit.shader.duotone": "Duot\xF4nico",
211679
+ "edit.shader.glitch": "Glitch",
211680
+ "edit.shader.glow": "Brilho",
211681
+ "edit.shader.halftone": "Meio-tom",
211682
+ "edit.shader.kaleidoscope": "Caleidosc\xF3pio",
211683
+ "edit.shader.liquid": "L\xEDquido",
211684
+ "edit.shader.mirror": "Espelho",
211685
+ "edit.shader.sketch": "Brilho de borda",
211686
+ "edit.shader.soft": "Foco suave",
211687
+ "edit.shader.vhs": "VHS",
211688
+ "edit.shaders": "Efeitos de shader",
211689
+ "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
211690
  "edit.showBin": "Mostrar compartimento",
211600
211691
  "edit.showInspector": "Mostrar inspetor de clipe",
211601
211692
  "edit.showTrack": "Mostrar trilha",
@@ -211864,7 +211955,7 @@ var require_pt_BR = __commonJS({
211864
211955
  "fillFlyout.spacingX": "Espa\xE7amento X",
211865
211956
  "fillFlyout.spacingY": "Espa\xE7amento Y",
211866
211957
  "fillFlyout.stock": "Banco",
211867
- "fillFlyout.stopColour": "Cor da parada",
211958
+ "fillFlyout.stopColour": "Cor de parada",
211868
211959
  "fillFlyout.stops": "Paradas",
211869
211960
  "fillFlyout.textureNoise": "Textura / ru\xEDdo",
211870
211961
  "fillFlyout.thePosterFrameIsShown": "O quadro de p\xF4ster \xE9 exibido quando pausado e usado para exporta\xE7\xE3o SVG/PDF.",
@@ -212184,7 +212275,7 @@ var require_pt_BR = __commonJS({
212184
212275
  "imageAdjustSection.resetThisChannel": "Redefinir este canal",
212185
212276
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "Salvar ajustes atuais como uma predefini\xE7\xE3o",
212186
212277
  "imageAdjustSection.tint": "Matiz",
212187
- "imageAdjustSection.tintColour": "Cor do matiz",
212278
+ "imageAdjustSection.tintColour": "Cor de tonalidade",
212188
212279
  "imageEditToolbar.altClickToPickA": "Alt+clique para selecionar uma origem",
212189
212280
  "imageEditToolbar.bringTheSelectionBack": "Trazer a sele\xE7\xE3o de volta",
212190
212281
  "imageEditToolbar.bringTheWholePictureBack": "Trazer a imagem inteira de volta",
@@ -213952,7 +214043,7 @@ var require_pt_BR = __commonJS({
213952
214043
  "settingsDialog.accentSky": "Azul-celeste",
213953
214044
  "settingsDialog.accentSystem": "Sistema",
213954
214045
  "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.",
214046
+ "settingsDialog.accentSystemUnavailable": "Sistema: este dispositivo n\xE3o compartilha sua cor de destaque, ent\xE3o Lavanda \xE9 usada.",
213956
214047
  "settingsDialog.accentTeal": "Verde-azulado",
213957
214048
  "settingsDialog.account": "Conta",
213958
214049
  "settingsDialog.contrast": "Contraste",
@@ -214394,7 +214485,7 @@ var require_pt_BR = __commonJS({
214394
214485
  "textAnimatorPanel.theRandomOrderSSeed": "A semente da ordem aleat\xF3ria",
214395
214486
  "textAnimatorPanel.thousandsSeparator": "Separador de milhares",
214396
214487
  "textAnimatorPanel.tint": "Matiz",
214397
- "textAnimatorPanel.tintTheColourAFully": "Matiz: a cor que uma unidade totalmente movida assume",
214488
+ "textAnimatorPanel.tintTheColourAFully": "Tonalidade: a cor que uma unidade totalmente movida assume",
214398
214489
  "textAnimatorPanel.to": "Para",
214399
214490
  "textAnimatorPanel.turn": "Girar",
214400
214491
  "textAnimatorPanel.typewriter": "M\xE1quina de escrever",
@@ -216267,7 +216358,7 @@ var require_ja = __commonJS({
216267
216358
  "designPanel.goToMainComponent": "\u30E1\u30A4\u30F3\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3078\u79FB\u52D5",
216268
216359
  "designPanel.grid": "\u30B0\u30EA\u30C3\u30C9",
216269
216360
  "designPanel.gridSettings": "\u30B0\u30EA\u30C3\u30C9\u8A2D\u5B9A",
216270
- "designPanel.hexColour": "HEX\u30AB\u30E9\u30FC",
216361
+ "designPanel.hexColour": "16\u9032\u6570\u30AB\u30E9\u30FC",
216271
216362
  "designPanel.horizontal": "\u6C34\u5E73",
216272
216363
  "designPanel.howTheInstanceSControl": "\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u306E\u5236\u5FA1\u30B9\u30C6\u30C3\u30D7",
216273
216364
  "designPanel.hug": "\u30CF\u30B0",
@@ -216646,6 +216737,7 @@ var require_ja = __commonJS({
216646
216737
  "edit.cropTop": "\u4E0A",
216647
216738
  "edit.crossfadeNext": "{name} \u306B\u30AF\u30ED\u30B9\u30D5\u30A7\u30FC\u30C9",
216648
216739
  "edit.curve": "\u30AB\u30FC\u30D6",
216740
+ "edit.customShader": "\u30AB\u30B9\u30BF\u30E0\u30B7\u30A7\u30FC\u30C0\u30FC",
216649
216741
  "edit.cut": "\u30AB\u30C3\u30C8",
216650
216742
  "edit.db": "{value} dB",
216651
216743
  "edit.dbSilent": "\u2212\u221E dB",
@@ -216658,6 +216750,7 @@ var require_ja = __commonJS({
216658
216750
  "edit.duckRun": "{track} \u3092 {under} \u306E\u4E0B\u306B\u30C0\u30C3\u30AD\u30F3\u30B0",
216659
216751
  "edit.duckTrack": "\u30C0\u30C3\u30AD\u30F3\u30B0",
216660
216752
  "edit.duckUnder": "\u4E0B",
216753
+ "edit.editNodes": "\u30CE\u30FC\u30C9\u3092\u7DE8\u96C6",
216661
216754
  "edit.editScene": "\u3053\u306E\u30B7\u30FC\u30F3\u306E\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u3092\u7DE8\u96C6",
216662
216755
  "edit.effect.BLUR": "\u307C\u304B\u3057",
216663
216756
  "edit.effect.BRIGHTNESS": "\u660E\u308B\u3055",
@@ -216883,6 +216976,19 @@ var require_ja = __commonJS({
216883
216976
  "edit.sequences": "\u30B7\u30FC\u30B1\u30F3\u30B9",
216884
216977
  "edit.sequencesBin": "\u30B7\u30FC\u30B1\u30F3\u30B9",
216885
216978
  "edit.sequenceSettings": "\u30B7\u30FC\u30B1\u30F3\u30B9\u8A2D\u5B9A",
216979
+ "edit.shader.chromatic": "\u8272\u53CE\u5DEE",
216980
+ "edit.shader.duotone": "\u30C7\u30E5\u30AA\u30C8\u30FC\u30F3",
216981
+ "edit.shader.glitch": "\u30B0\u30EA\u30C3\u30C1",
216982
+ "edit.shader.glow": "\u30B0\u30ED\u30FC",
216983
+ "edit.shader.halftone": "\u30CF\u30FC\u30D5\u30C8\u30FC\u30F3",
216984
+ "edit.shader.kaleidoscope": "\u30AB\u30EC\u30A4\u30C9\u30B9\u30B3\u30FC\u30D7",
216985
+ "edit.shader.liquid": "\u30EA\u30AD\u30C3\u30C9",
216986
+ "edit.shader.mirror": "\u30DF\u30E9\u30FC",
216987
+ "edit.shader.sketch": "\u30A8\u30C3\u30B8\u30B0\u30ED\u30FC",
216988
+ "edit.shader.soft": "\u30BD\u30D5\u30C8\u30D5\u30A9\u30FC\u30AB\u30B9",
216989
+ "edit.shader.vhs": "VHS",
216990
+ "edit.shaders": "\u30B7\u30A7\u30FC\u30C0\u30FC\u30A8\u30D5\u30A7\u30AF\u30C8",
216991
+ "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
216992
  "edit.showBin": "\u30D3\u30F3\u3092\u8868\u793A",
216887
216993
  "edit.showInspector": "\u30AF\u30EA\u30C3\u30D7\u30A4\u30F3\u30B9\u30DA\u30AF\u30BF\u30FC\u3092\u8868\u793A",
216888
216994
  "edit.showTrack": "\u30C8\u30E9\u30C3\u30AF\u3092\u8868\u793A",
@@ -217471,7 +217577,7 @@ var require_ja = __commonJS({
217471
217577
  "imageAdjustSection.resetThisChannel": "\u3053\u306E\u30C1\u30E3\u30F3\u30CD\u30EB\u3092\u30EA\u30BB\u30C3\u30C8",
217472
217578
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "\u73FE\u5728\u306E\u8ABF\u6574\u3092\u30D7\u30EA\u30BB\u30C3\u30C8\u3068\u3057\u3066\u4FDD\u5B58",
217473
217579
  "imageAdjustSection.tint": "\u8272\u5408\u3044",
217474
- "imageAdjustSection.tintColour": "\u8272\u5408\u3044\u306E\u8272",
217580
+ "imageAdjustSection.tintColour": "\u8272\u5408\u3044\u30AB\u30E9\u30FC",
217475
217581
  "imageEditToolbar.altClickToPickA": "Alt\u30AD\u30FC\u3092\u62BC\u3057\u306A\u304C\u3089\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30BD\u30FC\u30B9\u3092\u9078\u629E",
217476
217582
  "imageEditToolbar.bringTheSelectionBack": "\u9078\u629E\u7BC4\u56F2\u3092\u5143\u306B\u623B\u3059",
217477
217583
  "imageEditToolbar.bringTheWholePictureBack": "\u753B\u50CF\u5168\u4F53\u3092\u5143\u306B\u623B\u3059",
@@ -217617,7 +217723,7 @@ var require_ja = __commonJS({
217617
217723
  "keyInspector.howTheValueTravelsTo": "\u5024\u304C\u6B21\u306E\u30AD\u30FC\u306B\u3069\u306E\u3088\u3046\u306B\u9077\u79FB\u3059\u308B\u304B",
217618
217724
  "keyInspector.keys": "{length} \u500B\u306E\u30AD\u30FC",
217619
217725
  "keyInspector.noKeysPicked": "\u30AD\u30FC\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",
217620
- "keyInspector.theKeySColour": "\u30AD\u30FC\u306E\u8272",
217726
+ "keyInspector.theKeySColour": "\u30AD\u30FC\u306E\u30AB\u30E9\u30FC",
217621
217727
  "keyInspector.time": "\u6642\u9593",
217622
217728
  "keyInspector.value": "\u5024",
217623
217729
  "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 +217835,10 @@ var require_ja = __commonJS({
217729
217835
  "libraryLinkChoice.unlinked": "\u30EA\u30F3\u30AF\u89E3\u9664\u6E08\u307F",
217730
217836
  "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
217837
  "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",
217838
+ "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
217839
  "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}",
217840
+ "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",
217841
+ "librarySwatchesPanel.noColourStylesOrVariables": "\u30AB\u30E9\u30FC\u30BF\u30A4\u30EB\u307E\u305F\u306F\u5909\u6570\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002{value}",
217736
217842
  "librarySwatchesPanel.searchLibraryColours": "\u30E9\u30A4\u30D6\u30E9\u30EA\u30AB\u30E9\u30FC\u3092\u691C\u7D22",
217737
217843
  "librarySwatchesPanel.searchStylesAndColours": "\u30B9\u30BF\u30A4\u30EB\u3068\u30AB\u30E9\u30FC\u3092\u691C\u7D22",
217738
217844
  "linkFields.anchor": "\u3053\u306E\u30DA\u30FC\u30B8\u306E\u30EC\u30A4\u30E4\u30FC",
@@ -217959,7 +218065,7 @@ var require_ja = __commonJS({
217959
218065
  "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
218066
  "modifierList.remove": "{toLowerCase}\u3092\u524A\u9664",
217961
218067
  "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",
218068
+ "modifierList.theColourItMixesToward": "\u4FE1\u53F7\u304C\u4E0A\u6607\u3059\u308B\u306B\u3064\u308C\u3066\u6DF7\u8272\u3055\u308C\u308B\u30AB\u30E9\u30FC",
217963
218069
  "motionComponentSection.componentInputs": "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u5165\u529B",
217964
218070
  "motionComponentSection.motion": "\u30E2\u30FC\u30B7\u30E7\u30F3",
217965
218071
  "motionComponentSection.notUsedHere": "\u3053\u3053\u3067\u306F\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
@@ -219239,7 +219345,7 @@ var require_ja = __commonJS({
219239
219345
  "settingsDialog.accentSky": "\u30B9\u30AB\u30A4",
219240
219346
  "settingsDialog.accentSystem": "\u30B7\u30B9\u30C6\u30E0",
219241
219347
  "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",
219348
+ "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
219349
  "settingsDialog.accentTeal": "\u30C6\u30A3\u30FC\u30EB",
219244
219350
  "settingsDialog.account": "\u30A2\u30AB\u30A6\u30F3\u30C8",
219245
219351
  "settingsDialog.contrast": "\u30B3\u30F3\u30C8\u30E9\u30B9\u30C8",
@@ -219681,7 +219787,7 @@ var require_ja = __commonJS({
219681
219787
  "textAnimatorPanel.theRandomOrderSSeed": "\u30E9\u30F3\u30C0\u30E0\u9806\u5E8F\u306E\u30B7\u30FC\u30C9",
219682
219788
  "textAnimatorPanel.thousandsSeparator": "\u6841\u533A\u5207\u308A\u8A18\u53F7",
219683
219789
  "textAnimatorPanel.tint": "\u8272\u5408\u3044",
219684
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u5408\u3044: \u5B8C\u5168\u306B\u79FB\u52D5\u3057\u305F\u5358\u4F4D\u304C\u53D6\u308B\u8272",
219790
+ "textAnimatorPanel.tintTheColourAFully": "\u8272\u5408\u3044: \u5B8C\u5168\u306B\u79FB\u52D5\u3057\u305F\u30E6\u30CB\u30C3\u30C8\u304C\u53D6\u308B\u30AB\u30E9\u30FC",
219685
219791
  "textAnimatorPanel.to": "\u7D42\u4E86",
219686
219792
  "textAnimatorPanel.turn": "\u56DE\u8EE2",
219687
219793
  "textAnimatorPanel.typewriter": "\u30BF\u30A4\u30D7\u30E9\u30A4\u30BF\u30FC",
@@ -221554,7 +221660,7 @@ var require_ko = __commonJS({
221554
221660
  "designPanel.goToMainComponent": "\uBA54\uC778 \uCEF4\uD3EC\uB10C\uD2B8\uB85C \uC774\uB3D9",
221555
221661
  "designPanel.grid": "\uADF8\uB9AC\uB4DC",
221556
221662
  "designPanel.gridSettings": "\uADF8\uB9AC\uB4DC \uC124\uC815",
221557
- "designPanel.hexColour": "16\uC9C4\uC218 \uC0C9\uC0C1",
221663
+ "designPanel.hexColour": "\uD5E5\uC2A4 \uC0C9\uC0C1",
221558
221664
  "designPanel.horizontal": "\uAC00\uB85C",
221559
221665
  "designPanel.howTheInstanceSControl": "\uC778\uC2A4\uD134\uC2A4\uC758 \uC81C\uC5B4 \uB2E8\uACC4",
221560
221666
  "designPanel.hug": "\uAC10\uC2F8\uAE30",
@@ -221933,6 +222039,7 @@ var require_ko = __commonJS({
221933
222039
  "edit.cropTop": "\uC704",
221934
222040
  "edit.crossfadeNext": "{name}\uC73C\uB85C \uD06C\uB85C\uC2A4\uD398\uC774\uB4DC",
221935
222041
  "edit.curve": "\uACE1\uC120",
222042
+ "edit.customShader": "\uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC170\uC774\uB354",
221936
222043
  "edit.cut": "\uC798\uB77C\uB0B4\uAE30",
221937
222044
  "edit.db": "{value} dB",
221938
222045
  "edit.dbSilent": "\u2212\u221E dB",
@@ -221945,6 +222052,7 @@ var require_ko = __commonJS({
221945
222052
  "edit.duckRun": "{track}\uC744(\uB97C) {under} \uC544\uB798\uB85C \uB354\uD0B9",
221946
222053
  "edit.duckTrack": "\uB354\uD0B9",
221947
222054
  "edit.duckUnder": "\uC544\uB798",
222055
+ "edit.editNodes": "\uB178\uB4DC \uD3B8\uC9D1",
221948
222056
  "edit.editScene": "\uC774 \uC7A5\uBA74\uC758 \uC560\uB2C8\uBA54\uC774\uC158 \uD3B8\uC9D1",
221949
222057
  "edit.effect.BLUR": "\uD750\uB9BC",
221950
222058
  "edit.effect.BRIGHTNESS": "\uBC1D\uAE30",
@@ -222170,6 +222278,19 @@ var require_ko = __commonJS({
222170
222278
  "edit.sequences": "\uC2DC\uD000\uC2A4",
222171
222279
  "edit.sequencesBin": "\uC2DC\uD000\uC2A4",
222172
222280
  "edit.sequenceSettings": "\uC2DC\uD000\uC2A4 \uC124\uC815",
222281
+ "edit.shader.chromatic": "\uC0C9\uC218\uCC28",
222282
+ "edit.shader.duotone": "\uB4C0\uC624\uD1A4",
222283
+ "edit.shader.glitch": "\uAE00\uB9AC\uCE58",
222284
+ "edit.shader.glow": "\uAD11\uC120",
222285
+ "edit.shader.halftone": "\uD558\uD504\uD1A4",
222286
+ "edit.shader.kaleidoscope": "\uB9CC\uD654\uACBD",
222287
+ "edit.shader.liquid": "\uC561\uCCB4",
222288
+ "edit.shader.mirror": "\uAC70\uC6B8",
222289
+ "edit.shader.sketch": "\uAC00\uC7A5\uC790\uB9AC \uAD11\uC120",
222290
+ "edit.shader.soft": "\uC18C\uD504\uD2B8 \uD3EC\uCEE4\uC2A4",
222291
+ "edit.shader.vhs": "VHS",
222292
+ "edit.shaders": "\uC170\uC774\uB354 \uD6A8\uACFC",
222293
+ "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
222294
  "edit.showBin": "\uBE48 \uD45C\uC2DC",
222174
222295
  "edit.showInspector": "\uD074\uB9BD \uAC80\uC0AC\uAE30 \uD45C\uC2DC",
222175
222296
  "edit.showTrack": "\uD2B8\uB799 \uD45C\uC2DC",
@@ -223019,7 +223140,7 @@ var require_ko = __commonJS({
223019
223140
  "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
223141
  "librarySwatchesPanel.noColoursMatch": "\u201C{query}\u201D\uC640 \uC77C\uCE58\uD558\uB294 \uC0C9\uC0C1\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
223021
223142
  "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}",
223143
+ "librarySwatchesPanel.noColourStylesOrVariables": "\uC544\uC9C1 \uC0C9\uC0C1 \uC2A4\uD0C0\uC77C\uC774\uB098 \uBCC0\uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. {value}",
223023
223144
  "librarySwatchesPanel.searchLibraryColours": "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uC0C9\uC0C1 \uAC80\uC0C9",
223024
223145
  "librarySwatchesPanel.searchStylesAndColours": "\uC2A4\uD0C0\uC77C \uBC0F \uC0C9\uC0C1 \uAC80\uC0C9",
223025
223146
  "linkFields.anchor": "\uC774 \uD398\uC774\uC9C0\uC758 \uB808\uC774\uC5B4",
@@ -224526,7 +224647,7 @@ var require_ko = __commonJS({
224526
224647
  "settingsDialog.accentSky": "\uC2A4\uCE74\uC774",
224527
224648
  "settingsDialog.accentSystem": "\uC2DC\uC2A4\uD15C",
224528
224649
  "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.",
224650
+ "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
224651
  "settingsDialog.accentTeal": "\uD2F8",
224531
224652
  "settingsDialog.account": "\uACC4\uC815",
224532
224653
  "settingsDialog.contrast": "\uB300\uBE44",
@@ -227220,6 +227341,7 @@ var require_zh_CN = __commonJS({
227220
227341
  "edit.cropTop": "\u9876\u90E8",
227221
227342
  "edit.crossfadeNext": "\u4EA4\u53C9\u6DE1\u5316\u5230 {name}",
227222
227343
  "edit.curve": "\u66F2\u7EBF",
227344
+ "edit.customShader": "\u81EA\u5B9A\u4E49\u7740\u8272\u5668",
227223
227345
  "edit.cut": "\u526A\u5207",
227224
227346
  "edit.db": "{value} dB",
227225
227347
  "edit.dbSilent": "\u2212\u221E dB",
@@ -227232,6 +227354,7 @@ var require_zh_CN = __commonJS({
227232
227354
  "edit.duckRun": "\u5C06 {track} \u95EA\u907F\u5230 {under} \u4E0B\u65B9",
227233
227355
  "edit.duckTrack": "\u95EA\u907F",
227234
227356
  "edit.duckUnder": "\u4E0B\u65B9",
227357
+ "edit.editNodes": "\u7F16\u8F91\u5176\u8282\u70B9",
227235
227358
  "edit.editScene": "\u7F16\u8F91\u6B64\u573A\u666F\u7684\u52A8\u753B",
227236
227359
  "edit.effect.BLUR": "\u6A21\u7CCA",
227237
227360
  "edit.effect.BRIGHTNESS": "\u4EAE\u5EA6",
@@ -227457,6 +227580,19 @@ var require_zh_CN = __commonJS({
227457
227580
  "edit.sequences": "\u5E8F\u5217",
227458
227581
  "edit.sequencesBin": "\u5E8F\u5217",
227459
227582
  "edit.sequenceSettings": "\u5E8F\u5217\u8BBE\u7F6E",
227583
+ "edit.shader.chromatic": "\u8272\u5DEE",
227584
+ "edit.shader.duotone": "\u53CC\u8272\u8C03",
227585
+ "edit.shader.glitch": "\u6545\u969C",
227586
+ "edit.shader.glow": "\u53D1\u5149",
227587
+ "edit.shader.halftone": "\u534A\u8C03",
227588
+ "edit.shader.kaleidoscope": "\u4E07\u82B1\u7B52",
227589
+ "edit.shader.liquid": "\u6DB2\u4F53",
227590
+ "edit.shader.mirror": "\u955C\u50CF",
227591
+ "edit.shader.sketch": "\u8FB9\u7F18\u53D1\u5149",
227592
+ "edit.shader.soft": "\u67D4\u7126",
227593
+ "edit.shader.vhs": "VHS",
227594
+ "edit.shaders": "\u7740\u8272\u5668\u6548\u679C",
227595
+ "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
227596
  "edit.showBin": "\u663E\u793A\u7D20\u6750\u7BB1",
227461
227597
  "edit.showInspector": "\u663E\u793A\u7247\u6BB5\u68C0\u67E5\u5668",
227462
227598
  "edit.showTrack": "\u663E\u793A\u8F68\u9053",
@@ -227725,7 +227861,7 @@ var require_zh_CN = __commonJS({
227725
227861
  "fillFlyout.spacingX": "X \u95F4\u8DDD",
227726
227862
  "fillFlyout.spacingY": "Y \u95F4\u8DDD",
227727
227863
  "fillFlyout.stock": "\u56FE\u5E93",
227728
- "fillFlyout.stopColour": "\u8272\u6807\u989C\u8272",
227864
+ "fillFlyout.stopColour": "\u505C\u6B62\u989C\u8272",
227729
227865
  "fillFlyout.stops": "\u8272\u6807",
227730
227866
  "fillFlyout.textureNoise": "\u7EB9\u7406/\u566A\u70B9",
227731
227867
  "fillFlyout.thePosterFrameIsShown": "\u6D77\u62A5\u5E27\u5728\u6682\u505C\u65F6\u663E\u793A\uFF0C\u5E76\u7528\u4E8E SVG/PDF \u5BFC\u51FA\u3002",
@@ -228191,7 +228327,7 @@ var require_zh_CN = __commonJS({
228191
228327
  "keyInspector.howTheValueTravelsTo": "\u503C\u5982\u4F55\u8FC7\u6E21\u5230\u4E0B\u4E00\u4E2A\u5173\u952E\u5E27",
228192
228328
  "keyInspector.keys": "{length} \u4E2A\u5173\u952E\u5E27",
228193
228329
  "keyInspector.noKeysPicked": "\u672A\u9009\u62E9\u5173\u952E\u5E27\u3002",
228194
- "keyInspector.theKeySColour": "\u5173\u952E\u5E27\u989C\u8272",
228330
+ "keyInspector.theKeySColour": "\u6309\u952E\u989C\u8272",
228195
228331
  "keyInspector.time": "\u65F6\u95F4",
228196
228332
  "keyInspector.value": "\u503C",
228197
228333
  "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 +228439,9 @@ var require_zh_CN = __commonJS({
228303
228439
  "libraryLinkChoice.unlinked": "\u672A\u94FE\u63A5",
228304
228440
  "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
228441
  "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",
228442
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u989C\u8272\u53D8\u91CF\u7ED1\u5B9A\u586B\u5145\uFF0C\u56E0\u6B64\u5B83\u4F1A\u968F\u5E93\u7684\u66F4\u65B0\u800C\u53D8\u5316",
228443
+ "librarySwatchesPanel.noColoursMatch": "\u6CA1\u6709\u989C\u8272\u5339\u914D\u201C{query}\u201D",
228444
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u5E93\u4E2D\u6CA1\u6709\u989C\u8272\u6216\u7ED8\u5236\u6837\u5F0F",
228309
228445
  "librarySwatchesPanel.noColourStylesOrVariables": "\u5C1A\u65E0\u989C\u8272\u6837\u5F0F\u6216\u53D8\u91CF\u3002{value}",
228310
228446
  "librarySwatchesPanel.searchLibraryColours": "\u641C\u7D22\u5E93\u989C\u8272",
228311
228447
  "librarySwatchesPanel.searchStylesAndColours": "\u641C\u7D22\u6837\u5F0F\u548C\u989C\u8272",
@@ -228533,7 +228669,7 @@ var require_zh_CN = __commonJS({
228533
228669
  "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
228670
  "modifierList.remove": "\u79FB\u9664 {toLowerCase}",
228535
228671
  "modifierList.removeTheKeyHere": "\u5728\u6B64\u5904\u79FB\u9664 {toLowerCase} \u952E",
228536
- "modifierList.theColourItMixesToward": "\u4FE1\u53F7\u5347\u9AD8\u65F6\u6DF7\u5408\u7684\u989C\u8272",
228672
+ "modifierList.theColourItMixesToward": "\u968F\u7740\u4FE1\u53F7\u589E\u5F3A\uFF0C\u6DF7\u5408\u8D8B\u5411\u7684\u989C\u8272",
228537
228673
  "motionComponentSection.componentInputs": "\u7EC4\u4EF6\u8F93\u5165",
228538
228674
  "motionComponentSection.motion": "\u52A8\u6548",
228539
228675
  "motionComponentSection.notUsedHere": "\u6B64\u5904\u672A\u4F7F\u7528",
@@ -229813,7 +229949,7 @@ var require_zh_CN = __commonJS({
229813
229949
  "settingsDialog.accentSky": "\u5929\u84DD\u8272",
229814
229950
  "settingsDialog.accentSystem": "\u7CFB\u7EDF",
229815
229951
  "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",
229952
+ "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
229953
  "settingsDialog.accentTeal": "\u9752\u8272",
229818
229954
  "settingsDialog.account": "\u8D26\u6237",
229819
229955
  "settingsDialog.contrast": "\u5BF9\u6BD4\u5EA6",
@@ -230255,7 +230391,7 @@ var require_zh_CN = __commonJS({
230255
230391
  "textAnimatorPanel.theRandomOrderSSeed": "\u968F\u673A\u987A\u5E8F\u7684\u79CD\u5B50",
230256
230392
  "textAnimatorPanel.thousandsSeparator": "\u5343\u4F4D\u5206\u9694\u7B26",
230257
230393
  "textAnimatorPanel.tint": "\u8272\u8C03",
230258
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u8C03\uFF1A\u5B8C\u5168\u79FB\u52A8\u7684\u5355\u4F4D\u6240\u5448\u73B0\u7684\u989C\u8272",
230394
+ "textAnimatorPanel.tintTheColourAFully": "\u7740\u8272\uFF1A\u5B8C\u5168\u79FB\u52A8\u7684\u5355\u5143\u6240\u5448\u73B0\u7684\u989C\u8272",
230259
230395
  "textAnimatorPanel.to": "\u5230",
230260
230396
  "textAnimatorPanel.turn": "\u65CB\u8F6C",
230261
230397
  "textAnimatorPanel.typewriter": "\u6253\u5B57\u673A",
@@ -232128,7 +232264,7 @@ var require_zh_TW = __commonJS({
232128
232264
  "designPanel.goToMainComponent": "\u524D\u5F80\u4E3B\u5143\u4EF6",
232129
232265
  "designPanel.grid": "\u683C\u7DDA",
232130
232266
  "designPanel.gridSettings": "\u683C\u7DDA\u8A2D\u5B9A",
232131
- "designPanel.hexColour": "\u5341\u516D\u9032\u4F4D\u984F\u8272",
232267
+ "designPanel.hexColour": "\u5341\u516D\u9032\u4F4D\u8272\u5F69",
232132
232268
  "designPanel.horizontal": "\u6C34\u5E73",
232133
232269
  "designPanel.howTheInstanceSControl": "\u5BE6\u4F8B\u63A7\u5236\u7684\u6B65\u9032\u65B9\u5F0F",
232134
232270
  "designPanel.hug": "\u74B0\u62B1",
@@ -232507,6 +232643,7 @@ var require_zh_TW = __commonJS({
232507
232643
  "edit.cropTop": "\u4E0A",
232508
232644
  "edit.crossfadeNext": "\u4EA4\u53C9\u6DE1\u5316\u81F3 {name}",
232509
232645
  "edit.curve": "\u66F2\u7DDA",
232646
+ "edit.customShader": "\u81EA\u8A02\u8457\u8272\u5668",
232510
232647
  "edit.cut": "\u526A\u4E0B",
232511
232648
  "edit.db": "{value} dB",
232512
232649
  "edit.dbSilent": "\u2212\u221E dB",
@@ -232519,6 +232656,7 @@ var require_zh_TW = __commonJS({
232519
232656
  "edit.duckRun": "\u5C07 {track} \u58D3\u4F4E\u5728 {under} \u4E4B\u4E0B",
232520
232657
  "edit.duckTrack": "\u58D3\u4F4E",
232521
232658
  "edit.duckUnder": "\u4E4B\u4E0B",
232659
+ "edit.editNodes": "\u7DE8\u8F2F\u5176\u7BC0\u9EDE",
232522
232660
  "edit.editScene": "\u7DE8\u8F2F\u6B64\u5834\u666F\u7684\u52D5\u756B",
232523
232661
  "edit.effect.BLUR": "\u6A21\u7CCA",
232524
232662
  "edit.effect.BRIGHTNESS": "\u4EAE\u5EA6",
@@ -232554,7 +232692,7 @@ var require_zh_TW = __commonJS({
232554
232692
  "edit.effectControl.Temp": "\u8272\u6EAB",
232555
232693
  "edit.effectControl.Tint": "\u8272\u8ABF",
232556
232694
  "edit.effectDown": "\u4E0B\u79FB",
232557
- "edit.effectGroup.Color": "\u984F\u8272",
232695
+ "edit.effectGroup.Color": "\u8272\u5F69",
232558
232696
  "edit.effectGroup.Filter": "\u6FFE\u93E1",
232559
232697
  "edit.effectGroup.Warp": "\u626D\u66F2",
232560
232698
  "edit.effects": "\u6548\u679C",
@@ -232744,6 +232882,19 @@ var require_zh_TW = __commonJS({
232744
232882
  "edit.sequences": "\u5E8F\u5217",
232745
232883
  "edit.sequencesBin": "\u5E8F\u5217",
232746
232884
  "edit.sequenceSettings": "\u5E8F\u5217\u8A2D\u5B9A",
232885
+ "edit.shader.chromatic": "\u8272\u5DEE",
232886
+ "edit.shader.duotone": "\u96D9\u8272\u8ABF",
232887
+ "edit.shader.glitch": "\u6545\u969C\u6548\u679C",
232888
+ "edit.shader.glow": "\u767C\u5149",
232889
+ "edit.shader.halftone": "\u534A\u8272\u8ABF",
232890
+ "edit.shader.kaleidoscope": "\u842C\u82B1\u7B52",
232891
+ "edit.shader.liquid": "\u6DB2\u614B",
232892
+ "edit.shader.mirror": "\u93E1\u50CF",
232893
+ "edit.shader.sketch": "\u908A\u7DE3\u767C\u5149",
232894
+ "edit.shader.soft": "\u67D4\u7126",
232895
+ "edit.shader.vhs": "VHS",
232896
+ "edit.shaders": "\u8457\u8272\u5668\u6548\u679C",
232897
+ "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
232898
  "edit.showBin": "\u986F\u793A\u7D20\u6750\u5EAB",
232748
232899
  "edit.showInspector": "\u986F\u793A\u7247\u6BB5\u6AA2\u8996\u5668",
232749
232900
  "edit.showTrack": "\u986F\u793A\u8ECC\u9053",
@@ -233012,7 +233163,7 @@ var require_zh_TW = __commonJS({
233012
233163
  "fillFlyout.spacingX": "X \u9593\u8DDD",
233013
233164
  "fillFlyout.spacingY": "Y \u9593\u8DDD",
233014
233165
  "fillFlyout.stock": "\u5716\u5EAB",
233015
- "fillFlyout.stopColour": "\u505C\u99D0\u9EDE\u984F\u8272",
233166
+ "fillFlyout.stopColour": "\u505C\u6B62\u8272\u5F69",
233016
233167
  "fillFlyout.stops": "\u505C\u99D0\u9EDE",
233017
233168
  "fillFlyout.textureNoise": "\u7D0B\u7406 / \u96DC\u8A0A",
233018
233169
  "fillFlyout.thePosterFrameIsShown": "\u66AB\u505C\u6642\u6703\u986F\u793A\u6D77\u5831\u5F71\u683C\uFF0C\u4E26\u7528\u65BC SVG/PDF \u532F\u51FA\u3002",
@@ -233332,7 +233483,7 @@ var require_zh_TW = __commonJS({
233332
233483
  "imageAdjustSection.resetThisChannel": "\u91CD\u8A2D\u6B64\u8272\u7248",
233333
233484
  "imageAdjustSection.saveCurrentAdjustmentsAsA": "\u5C07\u76EE\u524D\u7684\u8ABF\u6574\u5132\u5B58\u70BA\u9810\u8A2D\u96C6",
233334
233485
  "imageAdjustSection.tint": "\u8272\u8ABF",
233335
- "imageAdjustSection.tintColour": "\u8272\u8ABF\u984F\u8272",
233486
+ "imageAdjustSection.tintColour": "\u8272\u8ABF\u8272\u5F69",
233336
233487
  "imageEditToolbar.altClickToPickA": "\u6309\u4F4F Alt \u9375\u9EDE\u64CA\u4EE5\u9078\u64C7\u4F86\u6E90",
233337
233488
  "imageEditToolbar.bringTheSelectionBack": "\u6062\u5FA9\u9078\u53D6\u7BC4\u570D",
233338
233489
  "imageEditToolbar.bringTheWholePictureBack": "\u6062\u5FA9\u6574\u500B\u5716\u7247",
@@ -233478,7 +233629,7 @@ var require_zh_TW = __commonJS({
233478
233629
  "keyInspector.howTheValueTravelsTo": "\u503C\u5982\u4F55\u50B3\u905E\u81F3\u4E0B\u4E00\u500B\u95DC\u9375\u5F71\u683C",
233479
233630
  "keyInspector.keys": "{length} \u500B\u95DC\u9375\u5F71\u683C",
233480
233631
  "keyInspector.noKeysPicked": "\u672A\u9078\u53D6\u4EFB\u4F55\u95DC\u9375\u5F71\u683C\u3002",
233481
- "keyInspector.theKeySColour": "\u95DC\u9375\u5F71\u683C\u7684\u984F\u8272",
233632
+ "keyInspector.theKeySColour": "\u6B64\u9375\u7684\u8272\u5F69",
233482
233633
  "keyInspector.time": "\u6642\u9593",
233483
233634
  "keyInspector.value": "\u503C",
233484
233635
  "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 +233741,12 @@ var require_zh_TW = __commonJS({
233590
233741
  "libraryLinkChoice.unlinked": "\u672A\u9023\u7D50",
233591
233742
  "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
233743
  "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",
233744
+ "librarySwatchesPanel.colourVariablesBindTheFill": "\u8272\u5F69\u8B8A\u6578\u7D81\u5B9A\u586B\u8272\uFF0C\u56E0\u6B64\u6703\u96A8\u51FD\u5F0F\u5EAB\u66F4\u65B0\u800C\u8B8A\u52D5",
233745
+ "librarySwatchesPanel.noColoursMatch": "\u6C92\u6709\u8272\u5F69\u7B26\u5408\u300C{query}\u300D",
233746
+ "librarySwatchesPanel.noColoursOrPaintStyles": "\u6B64\u51FD\u5F0F\u5EAB\u4E2D\u6C92\u6709\u8272\u5F69\u6216\u7E6A\u5716\u6A23\u5F0F",
233747
+ "librarySwatchesPanel.noColourStylesOrVariables": "\u5C1A\u7121\u8272\u5F69\u6A23\u5F0F\u6216\u8B8A\u6578\u3002{value}",
233748
+ "librarySwatchesPanel.searchLibraryColours": "\u641C\u5C0B\u51FD\u5F0F\u5EAB\u8272\u5F69",
233749
+ "librarySwatchesPanel.searchStylesAndColours": "\u641C\u5C0B\u6A23\u5F0F\u548C\u8272\u5F69",
233599
233750
  "linkFields.anchor": "\u6B64\u9801\u9762\u4E0A\u7684\u5716\u5C64",
233600
233751
  "linkFields.anchorOption": "{name} (\u9328\u9EDE #{anchor})",
233601
233752
  "linkFields.choose": "\u9078\u64C7\u2026",
@@ -233820,7 +233971,7 @@ var require_zh_TW = __commonJS({
233820
233971
  "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
233972
  "modifierList.remove": "\u79FB\u9664{toLowerCase}",
233822
233973
  "modifierList.removeTheKeyHere": "\u79FB\u9664\u6B64\u8655\u7684{toLowerCase}\u9375",
233823
- "modifierList.theColourItMixesToward": "\u8A0A\u865F\u5347\u9AD8\u6642\u6DF7\u5408\u7684\u984F\u8272",
233974
+ "modifierList.theColourItMixesToward": "\u7576\u8A0A\u865F\u589E\u5F37\u6642\uFF0C\u6DF7\u5408\u8DA8\u5411\u7684\u8272\u5F69",
233824
233975
  "motionComponentSection.componentInputs": "\u5143\u4EF6\u8F38\u5165",
233825
233976
  "motionComponentSection.motion": "\u52D5\u614B",
233826
233977
  "motionComponentSection.notUsedHere": "\u6B64\u8655\u672A\u4F7F\u7528",
@@ -235100,7 +235251,7 @@ var require_zh_TW = __commonJS({
235100
235251
  "settingsDialog.accentSky": "\u5929\u7A7A\u85CD",
235101
235252
  "settingsDialog.accentSystem": "\u7CFB\u7D71",
235102
235253
  "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",
235254
+ "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
235255
  "settingsDialog.accentTeal": "\u9752\u8272",
235105
235256
  "settingsDialog.account": "\u5E33\u6236",
235106
235257
  "settingsDialog.contrast": "\u5C0D\u6BD4\u5EA6",
@@ -235542,7 +235693,7 @@ var require_zh_TW = __commonJS({
235542
235693
  "textAnimatorPanel.theRandomOrderSSeed": "\u96A8\u6A5F\u9806\u5E8F\u7684\u7A2E\u5B50",
235543
235694
  "textAnimatorPanel.thousandsSeparator": "\u5343\u4F4D\u5206\u9694\u7B26",
235544
235695
  "textAnimatorPanel.tint": "\u8272\u8ABF",
235545
- "textAnimatorPanel.tintTheColourAFully": "\u8272\u8ABF\uFF1A\u5B8C\u5168\u79FB\u52D5\u7684\u55AE\u4F4D\u6240\u5448\u73FE\u7684\u984F\u8272",
235696
+ "textAnimatorPanel.tintTheColourAFully": "\u8272\u8ABF\uFF1A\u5B8C\u5168\u79FB\u52D5\u7684\u55AE\u4F4D\u6240\u63A1\u7528\u7684\u8272\u5F69",
235546
235697
  "textAnimatorPanel.to": "\u5230",
235547
235698
  "textAnimatorPanel.turn": "\u8F49\u52D5",
235548
235699
  "textAnimatorPanel.typewriter": "\u6253\u5B57\u6A5F",
@@ -237415,7 +237566,7 @@ var require_ru = __commonJS({
237415
237566
  "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
237567
  "designPanel.grid": "\u0421\u0435\u0442\u043A\u0430",
237417
237568
  "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",
237569
+ "designPanel.hexColour": "\u0426\u0432\u0435\u0442 Hex",
237419
237570
  "designPanel.horizontal": "\u041F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438",
237420
237571
  "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
237572
  "designPanel.hug": "\u041E\u0431\u0445\u0432\u0430\u0442",
@@ -237794,6 +237945,7 @@ var require_ru = __commonJS({
237794
237945
  "edit.cropTop": "\u0412\u0435\u0440\u0445",
237795
237946
  "edit.crossfadeNext": "\u041D\u0430\u043F\u043B\u044B\u0432 \u0432 {name}",
237796
237947
  "edit.curve": "\u041A\u0440\u0438\u0432\u0430\u044F",
237948
+ "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
237949
  "edit.cut": "\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C",
237798
237950
  "edit.db": "{value} \u0434\u0411",
237799
237951
  "edit.dbSilent": "\u2212\u221E \u0434\u0411",
@@ -237806,6 +237958,7 @@ var require_ru = __commonJS({
237806
237958
  "edit.duckRun": "\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0438\u0442\u044C {track} \u043F\u043E\u0434 {under}",
237807
237959
  "edit.duckTrack": "\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0438\u0435",
237808
237960
  "edit.duckUnder": "\u041F\u043E\u0434",
237961
+ "edit.editNodes": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u043B\u044B",
237809
237962
  "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
237963
  "edit.effect.BLUR": "\u0420\u0430\u0437\u043C\u044B\u0442\u0438\u0435",
237811
237964
  "edit.effect.BRIGHTNESS": "\u042F\u0440\u043A\u043E\u0441\u0442\u044C",
@@ -238031,6 +238184,19 @@ var require_ru = __commonJS({
238031
238184
  "edit.sequences": "\u0421\u0435\u043A\u0432\u0435\u043D\u0446\u0438\u0438",
238032
238185
  "edit.sequencesBin": "\u0421\u0435\u043A\u0432\u0435\u043D\u0446\u0438\u0438",
238033
238186
  "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",
238187
+ "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",
238188
+ "edit.shader.duotone": "\u0414\u0443\u043E\u0442\u043E\u043D",
238189
+ "edit.shader.glitch": "\u0413\u043B\u0438\u0442\u0447",
238190
+ "edit.shader.glow": "\u0421\u0432\u0435\u0447\u0435\u043D\u0438\u0435",
238191
+ "edit.shader.halftone": "\u0420\u0430\u0441\u0442\u0440",
238192
+ "edit.shader.kaleidoscope": "\u041A\u0430\u043B\u0435\u0439\u0434\u043E\u0441\u043A\u043E\u043F",
238193
+ "edit.shader.liquid": "\u0416\u0438\u0434\u043A\u0438\u0439",
238194
+ "edit.shader.mirror": "\u0417\u0435\u0440\u043A\u0430\u043B\u043E",
238195
+ "edit.shader.sketch": "\u0421\u0432\u0435\u0447\u0435\u043D\u0438\u0435 \u043F\u043E \u043A\u0440\u0430\u044F\u043C",
238196
+ "edit.shader.soft": "\u041C\u044F\u0433\u043A\u0438\u0439 \u0444\u043E\u043A\u0443\u0441",
238197
+ "edit.shader.vhs": "VHS",
238198
+ "edit.shaders": "\u0428\u0435\u0439\u0434\u0435\u0440\u043D\u044B\u0435 \u044D\u0444\u0444\u0435\u043A\u0442\u044B",
238199
+ "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
238200
  "edit.showBin": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u0440\u0437\u0438\u043D\u0443",
238035
238201
  "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
238202
  "edit.showTrack": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0434\u043E\u0440\u043E\u0436\u043A\u0443",
@@ -238877,7 +239043,7 @@ var require_ru = __commonJS({
238877
239043
  "libraryLinkChoice.unlinked": "\u041E\u0442\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043D\u044B\u0439",
238878
239044
  "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
239045
  "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",
239046
+ "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
239047
  "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
239048
  "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
239049
  "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 +239273,7 @@ var require_ru = __commonJS({
239107
239273
  "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
239274
  "modifierList.remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C {toLowerCase}",
239109
239275
  "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",
239276
+ "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
239277
  "motionComponentSection.componentInputs": "\u0412\u0445\u043E\u0434\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430",
239112
239278
  "motionComponentSection.motion": "\u0414\u0432\u0438\u0436\u0435\u043D\u0438\u0435",
239113
239279
  "motionComponentSection.notUsedHere": "\u0417\u0434\u0435\u0441\u044C \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F",
@@ -240387,7 +240553,7 @@ var require_ru = __commonJS({
240387
240553
  "settingsDialog.accentSky": "\u041D\u0435\u0431\u0435\u0441\u043D\u044B\u0439",
240388
240554
  "settingsDialog.accentSystem": "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439",
240389
240555
  "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.",
240556
+ "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
240557
  "settingsDialog.accentTeal": "\u0411\u0438\u0440\u044E\u0437\u043E\u0432\u044B\u0439",
240392
240558
  "settingsDialog.account": "\u0410\u043A\u043A\u0430\u0443\u043D\u0442",
240393
240559
  "settingsDialog.contrast": "\u041A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u043D\u043E\u0441\u0442\u044C",
@@ -240829,7 +240995,7 @@ var require_ru = __commonJS({
240829
240995
  "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
240996
  "textAnimatorPanel.thousandsSeparator": "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0442\u044B\u0441\u044F\u0447",
240831
240997
  "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",
240998
+ "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
240999
  "textAnimatorPanel.to": "\u0414\u043E",
240834
241000
  "textAnimatorPanel.turn": "\u041F\u043E\u0432\u043E\u0440\u043E\u0442",
240835
241001
  "textAnimatorPanel.typewriter": "\u041F\u0435\u0447\u0430\u0442\u043D\u0430\u044F \u043C\u0430\u0448\u0438\u043D\u043A\u0430",
@@ -242702,7 +242868,7 @@ var require_ar = __commonJS({
242702
242868
  "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
242869
  "designPanel.grid": "\u0634\u0628\u0643\u0629",
242704
242870
  "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",
242871
+ "designPanel.hexColour": "\u0644\u0648\u0646 Hex",
242706
242872
  "designPanel.horizontal": "\u0623\u0641\u0642\u064A",
242707
242873
  "designPanel.howTheInstanceSControl": "\u062E\u0637\u0648\u0627\u062A \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u062B\u064A\u0644",
242708
242874
  "designPanel.hug": "\u0627\u062D\u062A\u0648\u0627\u0621",
@@ -243081,6 +243247,7 @@ var require_ar = __commonJS({
243081
243247
  "edit.cropTop": "\u0623\u0639\u0644\u0649",
243082
243248
  "edit.crossfadeNext": "\u062A\u0644\u0627\u0634\u064D \u0645\u062A\u0642\u0627\u0637\u0639 \u0625\u0644\u0649 {name}",
243083
243249
  "edit.curve": "\u0645\u0646\u062D\u0646\u0649",
243250
+ "edit.customShader": "\u0645\u0638\u0644\u0644 \u0645\u062E\u0635\u0635",
243084
243251
  "edit.cut": "\u0642\u0635",
243085
243252
  "edit.db": "{value} \u062F\u064A\u0633\u064A\u0628\u0644",
243086
243253
  "edit.dbSilent": "\u2212\u221E \u062F\u064A\u0633\u064A\u0628\u0644",
@@ -243093,6 +243260,7 @@ var require_ar = __commonJS({
243093
243260
  "edit.duckRun": "\u062E\u0641\u0636 \u0635\u0648\u062A {track} \u062A\u062D\u062A {under}",
243094
243261
  "edit.duckTrack": "\u062E\u0641\u0636 \u0627\u0644\u0635\u0648\u062A",
243095
243262
  "edit.duckUnder": "\u062A\u062D\u062A",
243263
+ "edit.editNodes": "\u062A\u0639\u062F\u064A\u0644 \u0639\u064F\u0642\u062F\u0647",
243096
243264
  "edit.editScene": "\u062A\u0639\u062F\u064A\u0644 \u062D\u0631\u0643\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u0634\u0647\u062F",
243097
243265
  "edit.effect.BLUR": "\u062A\u0645\u0648\u064A\u0647",
243098
243266
  "edit.effect.BRIGHTNESS": "\u0633\u0637\u0648\u0639",
@@ -243128,7 +243296,7 @@ var require_ar = __commonJS({
243128
243296
  "edit.effectControl.Temp": "\u062F\u0631\u062C\u0629 \u0627\u0644\u062D\u0631\u0627\u0631\u0629",
243129
243297
  "edit.effectControl.Tint": "\u0627\u0644\u0635\u0628\u063A\u0629",
243130
243298
  "edit.effectDown": "\u062A\u062D\u0631\u064A\u0643 \u0644\u0644\u0623\u0633\u0641\u0644",
243131
- "edit.effectGroup.Color": "\u0627\u0644\u0644\u0648\u0646",
243299
+ "edit.effectGroup.Color": "\u0644\u0648\u0646",
243132
243300
  "edit.effectGroup.Filter": "\u062A\u0635\u0641\u064A\u0629",
243133
243301
  "edit.effectGroup.Warp": "\u062A\u0634\u0648\u064A\u0647",
243134
243302
  "edit.effects": "\u062A\u0623\u062B\u064A\u0631\u0627\u062A",
@@ -243318,6 +243486,19 @@ var require_ar = __commonJS({
243318
243486
  "edit.sequences": "\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
243319
243487
  "edit.sequencesBin": "\u0627\u0644\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
243320
243488
  "edit.sequenceSettings": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u0633\u0644\u0633\u0644",
243489
+ "edit.shader.chromatic": "\u0627\u0646\u062D\u0631\u0627\u0641 \u0644\u0648\u0646\u064A",
243490
+ "edit.shader.duotone": "\u062B\u0646\u0627\u0626\u064A \u0627\u0644\u0644\u0648\u0646",
243491
+ "edit.shader.glitch": "\u062E\u0644\u0644",
243492
+ "edit.shader.glow": "\u062A\u0648\u0647\u062C",
243493
+ "edit.shader.halftone": "\u062A\u0646\u0642\u064A\u0637",
243494
+ "edit.shader.kaleidoscope": "\u0643\u0627\u0644\u064A\u062F\u0648\u0633\u0643\u0648\u0628",
243495
+ "edit.shader.liquid": "\u0633\u0627\u0626\u0644",
243496
+ "edit.shader.mirror": "\u0645\u0631\u0622\u0629",
243497
+ "edit.shader.sketch": "\u062A\u0648\u0647\u062C \u0627\u0644\u062D\u0648\u0627\u0641",
243498
+ "edit.shader.soft": "\u062A\u0631\u0643\u064A\u0632 \u0646\u0627\u0639\u0645",
243499
+ "edit.shader.vhs": "VHS",
243500
+ "edit.shaders": "\u062A\u0623\u062B\u064A\u0631\u0627\u062A \u0627\u0644\u0645\u0638\u0644\u0644",
243501
+ "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
243502
  "edit.showBin": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u0644\u0629",
243322
243503
  "edit.showInspector": "\u0625\u0638\u0647\u0627\u0631 \u0645\u0641\u062A\u0634 \u0627\u0644\u0645\u0642\u0637\u0639",
243323
243504
  "edit.showTrack": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0631",
@@ -243586,7 +243767,7 @@ var require_ar = __commonJS({
243586
243767
  "fillFlyout.spacingX": "\u062A\u0628\u0627\u0639\u062F \u0633",
243587
243768
  "fillFlyout.spacingY": "\u062A\u0628\u0627\u0639\u062F \u0635",
243588
243769
  "fillFlyout.stock": "\u0645\u062E\u0632\u0648\u0646",
243589
- "fillFlyout.stopColour": "\u0644\u0648\u0646 \u0646\u0642\u0637\u0629 \u0627\u0644\u062A\u0648\u0642\u0641",
243770
+ "fillFlyout.stopColour": "\u0644\u0648\u0646 \u0627\u0644\u062A\u0648\u0642\u0641",
243590
243771
  "fillFlyout.stops": "\u0646\u0642\u0627\u0637 \u0627\u0644\u062A\u0648\u0642\u0641",
243591
243772
  "fillFlyout.textureNoise": "\u0646\u0633\u064A\u062C / \u0636\u0648\u0636\u0627\u0621",
243592
243773
  "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 +244087,7 @@ var require_ar = __commonJS({
243906
244087
  "imageAdjustSection.resetThisChannel": "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0647\u0630\u0647 \u0627\u0644\u0642\u0646\u0627\u0629",
243907
244088
  "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
244089
  "imageAdjustSection.tint": "\u062A\u0644\u0648\u064A\u0646",
243909
- "imageAdjustSection.tintColour": "\u0644\u0648\u0646 \u0627\u0644\u062A\u0644\u0648\u064A\u0646",
244090
+ "imageAdjustSection.tintColour": "\u0644\u0648\u0646 \u0627\u0644\u0635\u0628\u063A\u0629",
243910
244091
  "imageEditToolbar.altClickToPickA": "\u0627\u0646\u0642\u0631 \u0645\u0639 Alt \u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u0635\u062F\u0631",
243911
244092
  "imageEditToolbar.bringTheSelectionBack": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u062D\u062F\u064A\u062F",
243912
244093
  "imageEditToolbar.bringTheWholePictureBack": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627",
@@ -245674,7 +245855,7 @@ var require_ar = __commonJS({
245674
245855
  "settingsDialog.accentSky": "\u0633\u0645\u0627\u0648\u064A",
245675
245856
  "settingsDialog.accentSystem": "\u0627\u0644\u0646\u0638\u0627\u0645",
245676
245857
  "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.",
245858
+ "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
245859
  "settingsDialog.accentTeal": "\u0623\u0632\u0631\u0642 \u0645\u062E\u0636\u0631",
245679
245860
  "settingsDialog.account": "\u0627\u0644\u062D\u0633\u0627\u0628",
245680
245861
  "settingsDialog.contrast": "\u0627\u0644\u062A\u0628\u0627\u064A\u0646",
@@ -246116,7 +246297,7 @@ var require_ar = __commonJS({
246116
246297
  "textAnimatorPanel.theRandomOrderSSeed": "\u0628\u0630\u0631\u0629 \u0627\u0644\u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A",
246117
246298
  "textAnimatorPanel.thousandsSeparator": "\u0641\u0627\u0635\u0644 \u0627\u0644\u0622\u0644\u0627\u0641",
246118
246299
  "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",
246300
+ "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
246301
  "textAnimatorPanel.to": "\u0625\u0644\u0649",
246121
246302
  "textAnimatorPanel.turn": "\u062F\u0648\u0631\u0629",
246122
246303
  "textAnimatorPanel.typewriter": "\u0622\u0644\u0629 \u0643\u0627\u062A\u0628\u0629",
@@ -248368,6 +248549,7 @@ var require_hi = __commonJS({
248368
248549
  "edit.cropTop": "\u090A\u092A\u0930",
248369
248550
  "edit.crossfadeNext": "{name} \u092E\u0947\u0902 \u0915\u094D\u0930\u0949\u0938\u092B\u093C\u0947\u0921 \u0915\u0930\u0947\u0902",
248370
248551
  "edit.curve": "\u0935\u0915\u094D\u0930",
248552
+ "edit.customShader": "\u0915\u0938\u094D\u091F\u092E \u0936\u0947\u0921\u0930",
248371
248553
  "edit.cut": "\u0915\u091F \u0915\u0930\u0947\u0902",
248372
248554
  "edit.db": "{value} dB",
248373
248555
  "edit.dbSilent": "\u2212\u221E dB",
@@ -248380,6 +248562,7 @@ var require_hi = __commonJS({
248380
248562
  "edit.duckRun": "{track} \u0915\u094B {under} \u0915\u0947 \u0928\u0940\u091A\u0947 \u0921\u0915 \u0915\u0930\u0947\u0902",
248381
248563
  "edit.duckTrack": "\u0921\u0915 \u0915\u0930\u0947\u0902",
248382
248564
  "edit.duckUnder": "\u0928\u0940\u091A\u0947",
248565
+ "edit.editNodes": "\u0907\u0938\u0915\u0947 \u0928\u094B\u0921\u094D\u0938 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
248383
248566
  "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
248567
  "edit.effect.BLUR": "\u092C\u094D\u0932\u0930",
248385
248568
  "edit.effect.BRIGHTNESS": "\u091A\u092E\u0915",
@@ -248605,6 +248788,19 @@ var require_hi = __commonJS({
248605
248788
  "edit.sequences": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E",
248606
248789
  "edit.sequencesBin": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E",
248607
248790
  "edit.sequenceSettings": "\u0905\u0928\u0941\u0915\u094D\u0930\u092E \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938",
248791
+ "edit.shader.chromatic": "\u0915\u094D\u0930\u094B\u092E\u0948\u091F\u093F\u0915 \u090F\u092C\u0930\u0947\u0936\u0928",
248792
+ "edit.shader.duotone": "\u0921\u094D\u092F\u0942\u091F\u094B\u0928",
248793
+ "edit.shader.glitch": "\u0917\u094D\u0932\u093F\u091A",
248794
+ "edit.shader.glow": "\u091A\u092E\u0915",
248795
+ "edit.shader.halftone": "\u0939\u093E\u092B\u091F\u094B\u0928",
248796
+ "edit.shader.kaleidoscope": "\u0915\u0948\u0932\u093F\u0921\u094B\u0938\u094D\u0915\u094B\u092A",
248797
+ "edit.shader.liquid": "\u0932\u093F\u0915\u094D\u0935\u093F\u0921",
248798
+ "edit.shader.mirror": "\u092E\u093F\u0930\u0930",
248799
+ "edit.shader.sketch": "\u0915\u093F\u0928\u093E\u0930\u094B\u0902 \u0915\u0940 \u091A\u092E\u0915",
248800
+ "edit.shader.soft": "\u0938\u0949\u092B\u094D\u091F \u092B\u094B\u0915\u0938",
248801
+ "edit.shader.vhs": "VHS",
248802
+ "edit.shaders": "\u0936\u0947\u0921\u0930 \u092A\u094D\u0930\u092D\u093E\u0935",
248803
+ "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
248804
  "edit.showBin": "\u092C\u093F\u0928 \u0926\u093F\u0916\u093E\u090F\u0901",
248609
248805
  "edit.showInspector": "\u0915\u094D\u0932\u093F\u092A \u0907\u0902\u0938\u094D\u092A\u0947\u0915\u094D\u091F\u0930 \u0926\u093F\u0916\u093E\u090F\u0901",
248610
248806
  "edit.showTrack": "\u091F\u094D\u0930\u0948\u0915 \u0926\u093F\u0916\u093E\u090F\u0901",
@@ -249451,12 +249647,12 @@ var require_hi = __commonJS({
249451
249647
  "libraryLinkChoice.unlinked": "\u0905\u0928\u0932\u093F\u0902\u0915 \u0915\u093F\u092F\u093E \u0917\u092F\u093E",
249452
249648
  "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
249649
  "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",
249650
+ "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
249651
  "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",
249652
+ "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",
249653
+ "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}",
249654
+ "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",
249655
+ "librarySwatchesPanel.searchStylesAndColours": "\u0938\u094D\u091F\u093E\u0907\u0932 \u0914\u0930 \u0930\u0902\u0917\u094B\u0902 \u0915\u094B \u0916\u094B\u091C\u0947\u0902",
249460
249656
  "linkFields.anchor": "\u0907\u0938 \u092A\u0943\u0937\u094D\u0920 \u092A\u0930 \u092A\u0930\u0924",
249461
249657
  "linkFields.anchorOption": "{name} (#{anchor})",
249462
249658
  "linkFields.choose": "\u091A\u0941\u0928\u0947\u0902\u2026",
@@ -249681,7 +249877,7 @@ var require_hi = __commonJS({
249681
249877
  "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
249878
  "modifierList.remove": "{toLowerCase} \u0939\u091F\u093E\u090F\u0901",
249683
249879
  "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",
249880
+ "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
249881
  "motionComponentSection.componentInputs": "\u0918\u091F\u0915 \u0907\u0928\u092A\u0941\u091F",
249686
249882
  "motionComponentSection.motion": "\u0917\u0924\u093F",
249687
249883
  "motionComponentSection.notUsedHere": "\u092F\u0939\u093E\u0901 \u0909\u092A\u092F\u094B\u0917 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u0917\u092F\u093E",
@@ -251403,7 +251599,7 @@ var require_hi = __commonJS({
251403
251599
  "textAnimatorPanel.theRandomOrderSSeed": "\u092F\u093E\u0926\u0943\u091A\u094D\u091B\u093F\u0915 \u0915\u094D\u0930\u092E \u0915\u093E \u0938\u0940\u0921",
251404
251600
  "textAnimatorPanel.thousandsSeparator": "\u0939\u091C\u093E\u0930\u094B\u0902 \u0915\u093E \u0935\u093F\u092D\u093E\u091C\u0915",
251405
251601
  "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",
251602
+ "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
251603
  "textAnimatorPanel.to": "\u0924\u0915",
251408
251604
  "textAnimatorPanel.turn": "\u092E\u094B\u0921\u093C",
251409
251605
  "textAnimatorPanel.typewriter": "\u091F\u093E\u0907\u092A\u0930\u093E\u0907\u091F\u0930",
@@ -253670,9 +253866,11 @@ var init_shader_graph = __esm({
253670
253866
  lib: ["aspect"],
253671
253867
  emit: (c2) => c2.opt("space") === "centered" ? `return (uv - vec2<f32>(0.5)) * vec2<f32>(sgl_aspect(), 1.0) * 2.0;` : `return uv;`
253672
253868
  },
253869
+ // The picture underneath: a clip's frame when the graph is a clip effect (Edit mode), sampled at the coordinate.
253870
+ { kind: "image", label: "Image", category: "input", output: "vec4f", inputs: [coord2], emit: (c2) => `return image_at(${c2.in("uv")});` },
253673
253871
  { 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
253872
  { 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")};` },
253873
+ { kind: "color", label: "Color", category: "input", output: "vec4f", inputs: [col2("color", WHITE2)], emit: (c2) => `return ${c2.in("color")};` },
253676
253874
  {
253677
253875
  // The music: its `value` knob is fed by an audio behaviour on the fill (lib/motion/shader-audio.ts), 0…1.
253678
253876
  kind: "audio",
@@ -253726,10 +253924,10 @@ var init_shader_graph = __esm({
253726
253924
  return vec4<f32>(mix(a.rgb, ${mixed}, k), max(a.a, b.a * min(k, 1.0)));`;
253727
253925
  }
253728
253926
  },
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);` },
253927
+ { 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
253928
  {
253731
253929
  kind: "ramp",
253732
- label: "Colour ramp",
253930
+ label: "Color ramp",
253733
253931
  category: "color",
253734
253932
  output: "vec4f",
253735
253933
  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 +254127,101 @@ var init_shader_graph = __esm({
253929
254127
  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
254128
  let k = uv + (w2 - vec2<f32>(0.5)) * ${c2.in("amount")};
253931
254129
  return ${c2.in("input", "k")};`
254130
+ },
254131
+ // Effects on whatever feeds them (an Image, a pattern): each samples its input around the coordinate.
254132
+ {
254133
+ kind: "rgbSplit",
254134
+ label: "RGB split",
254135
+ category: "effect",
254136
+ output: "vec4f",
254137
+ inputs: [col2("input", BLACK2), f322("amount", 8e-3, [0, 0.05]), f322("angle", 0, [-3.1416, 3.1416])],
254138
+ emit: (c2) => `let d = vec2<f32>(cos(${c2.in("angle")}), sin(${c2.in("angle")})) * ${c2.in("amount")};
254139
+ let mid = ${c2.in("input", "uv")};
254140
+ return vec4<f32>(${c2.in("input", "uv + d")}.r, mid.g, ${c2.in("input", "uv - d")}.b, mid.a);`
254141
+ },
254142
+ {
254143
+ kind: "blur",
254144
+ label: "Blur",
254145
+ category: "effect",
254146
+ output: "vec4f",
254147
+ inputs: [col2("input", BLACK2), f322("radius", 6e-3, [0, 0.05])],
254148
+ emit: (c2) => {
254149
+ const taps = [];
254150
+ 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"}`);
254151
+ return `let r = ${c2.in("radius")};
254152
+ return ${taps.join(" +\n ")};`;
254153
+ }
254154
+ },
254155
+ {
254156
+ kind: "glow",
254157
+ label: "Glow",
254158
+ category: "effect",
254159
+ output: "vec4f",
254160
+ inputs: [col2("input", BLACK2), f322("radius", 0.01, [0, 0.05]), f322("amount", 0.8, [0, 3]), f322("threshold", 0.6, [0, 1])],
254161
+ emit: (c2) => {
254162
+ const taps = [];
254163
+ for (let i2 = 0; i2 < 8; i2++) {
254164
+ const a = i2 / 8 * Math.PI * 2;
254165
+ 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))`);
254166
+ }
254167
+ return `let r = ${c2.in("radius")};
254168
+ let th = ${c2.in("threshold")};
254169
+ let base = ${c2.in("input", "uv")};
254170
+ let halo = (${taps.join(" +\n ")}) / 8.0;
254171
+ return vec4<f32>(base.rgb + halo * ${c2.in("amount")}, base.a);`;
254172
+ }
254173
+ },
254174
+ {
254175
+ kind: "edges",
254176
+ label: "Edges",
254177
+ category: "effect",
254178
+ output: "vec4f",
254179
+ inputs: [col2("input", BLACK2), f322("width", 2e-3, [0, 0.02]), f322("strength", 2, [0, 8])],
254180
+ emit: (c2) => `let w = ${c2.in("width")};
254181
+ let l = dot(${c2.in("input", "uv - vec2<f32>(w, 0.0)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254182
+ let rr = dot(${c2.in("input", "uv + vec2<f32>(w, 0.0)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254183
+ let t = dot(${c2.in("input", "uv - vec2<f32>(0.0, w)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254184
+ let b = dot(${c2.in("input", "uv + vec2<f32>(0.0, w)")}.rgb, vec3<f32>(0.299, 0.587, 0.114));
254185
+ let e = clamp(length(vec2<f32>(rr - l, b - t)) * ${c2.in("strength")}, 0.0, 1.0);
254186
+ return vec4<f32>(vec3<f32>(e), ${c2.in("input", "uv")}.a);`
254187
+ },
254188
+ {
254189
+ kind: "halftone",
254190
+ label: "Halftone",
254191
+ category: "effect",
254192
+ output: "vec4f",
254193
+ lib: ["aspect"],
254194
+ inputs: [col2("input", BLACK2), f322("size", 0.02, [4e-3, 0.1]), col2("ink", BLACK2), col2("paper", WHITE2)],
254195
+ emit: (c2) => `let s = ${c2.in("size")};
254196
+ let a = vec2<f32>(sgl_aspect(), 1.0);
254197
+ let q = uv * a / s;
254198
+ let cell = (floor(q) + vec2<f32>(0.5)) * s / a;
254199
+ let k = ${c2.in("input", "cell")};
254200
+ let dark = 1.0 - dot(k.rgb, vec3<f32>(0.299, 0.587, 0.114));
254201
+ let d = length(fract(q) - vec2<f32>(0.5));
254202
+ let dot_ = 1.0 - smoothstep(sqrt(dark) * 0.5 - 0.04, sqrt(dark) * 0.5 + 0.04, d);
254203
+ return vec4<f32>(mix(${c2.in("paper")}.rgb, ${c2.in("ink")}.rgb, dot_), k.a);`
254204
+ },
254205
+ {
254206
+ kind: "scanlines",
254207
+ label: "Scanlines",
254208
+ category: "effect",
254209
+ output: "vec4f",
254210
+ inputs: [col2("input", BLACK2), f322("lines", 240, [20, 1e3]), f322("amount", 0.25, [0, 1])],
254211
+ emit: (c2) => `let k = ${c2.in("input", "uv")};
254212
+ let s = 0.5 + 0.5 * cos(uv.y * ${c2.in("lines")} * ${TAU2});
254213
+ return vec4<f32>(k.rgb * (1.0 - ${c2.in("amount")} * s), k.a);`
254214
+ },
254215
+ { 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));` },
254216
+ {
254217
+ kind: "duotone",
254218
+ label: "Duotone",
254219
+ category: "color",
254220
+ output: "vec4f",
254221
+ 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 })],
254222
+ emit: (c2) => `let k = ${c2.in("color")};
254223
+ let l = dot(k.rgb, vec3<f32>(0.299, 0.587, 0.114));
254224
+ return vec4<f32>(mix(${c2.in("shadows")}.rgb, ${c2.in("highlights")}.rgb, l), k.a);`
253932
254225
  },
253933
254226
  {
253934
254227
  kind: "mirror",
@@ -254086,6 +254379,7 @@ function repairDocumentPaints(doc2) {
254086
254379
  var broken;
254087
254380
  var init_paint_repair = __esm({
254088
254381
  "lib/document/paint-repair.ts"() {
254382
+ "use strict";
254089
254383
  init_shader_graph();
254090
254384
  broken = (p2) => {
254091
254385
  if (!p2 || typeof p2 !== "object") return false;
@@ -254685,6 +254979,7 @@ function relinkCopies(doc2, copies) {
254685
254979
  var TEXT_PATH_SOURCE_TYPES, isPathSource;
254686
254980
  var init_text_links = __esm({
254687
254981
  "lib/document/text-links.ts"() {
254982
+ "use strict";
254688
254983
  init_transform();
254689
254984
  TEXT_PATH_SOURCE_TYPES = ["VECTOR", "ELLIPSE", "RECTANGLE", "POLYGON", "STAR", "LINE", "ARROW", "FRAME"];
254690
254985
  isPathSource = (n) => !!n && TEXT_PATH_SOURCE_TYPES.includes(n.type);
@@ -256604,19 +256899,19 @@ function rootInstances(nodes, rootId) {
256604
256899
  return out;
256605
256900
  }
256606
256901
  function frameMotionEnd(nodes, rootId) {
256607
- let memo7 = endMemo.get(nodes);
256608
- if (!memo7) {
256609
- memo7 = /* @__PURE__ */ new Map();
256610
- endMemo.set(nodes, memo7);
256902
+ let memo8 = endMemo.get(nodes);
256903
+ if (!memo8) {
256904
+ memo8 = /* @__PURE__ */ new Map();
256905
+ endMemo.set(nodes, memo8);
256611
256906
  }
256612
- const hit = memo7.get(rootId);
256907
+ const hit = memo8.get(rootId);
256613
256908
  if (hit !== void 0) return hit;
256614
256909
  let end = motionEnd(nodes, rootId);
256615
256910
  for (const { m, shift } of rootInstances(nodes, rootId)) {
256616
256911
  const e = playbackEnd(m);
256617
256912
  if (Number.isFinite(e)) end = Math.max(end, shift + e);
256618
256913
  }
256619
- memo7.set(rootId, end);
256914
+ memo8.set(rootId, end);
256620
256915
  return end;
256621
256916
  }
256622
256917
  function frameRunsOn(nodes, rootId) {
@@ -256651,19 +256946,19 @@ function layerOf(nodes, vid, id3, comp) {
256651
256946
  byComp = /* @__PURE__ */ new Map();
256652
256947
  layerMemo.set(nodes, byComp);
256653
256948
  }
256654
- let memo7 = byComp.get(comp);
256655
- if (!memo7) {
256656
- memo7 = /* @__PURE__ */ new Map();
256657
- byComp.set(comp, memo7);
256949
+ let memo8 = byComp.get(comp);
256950
+ if (!memo8) {
256951
+ memo8 = /* @__PURE__ */ new Map();
256952
+ byComp.set(comp, memo8);
256658
256953
  }
256659
256954
  const key5 = joinVirtual(vid, id3);
256660
- let hit = memo7.get(key5);
256955
+ let hit = memo8.get(key5);
256661
256956
  if (hit === void 0) {
256662
256957
  const resolved = resolveVirtualNode2(nodes, key5);
256663
256958
  const parent = nodes[id3]?.parentId;
256664
256959
  const parentId = parent === comp ? vid : joinVirtual(vid, parent ?? "");
256665
256960
  hit = !resolved ? null : resolved.parentId === parentId ? resolved : { ...resolved, parentId };
256666
- memo7.set(key5, hit);
256961
+ memo8.set(key5, hit);
256667
256962
  }
256668
256963
  return hit;
256669
256964
  }
@@ -257824,7 +258119,7 @@ function drawCue(cue, style, t3, stage) {
257824
258119
  fontStyle: "normal",
257825
258120
  textAlign: "CENTER",
257826
258121
  verticalAlign: "CENTER",
257827
- lineHeight: 1.2,
258122
+ lineHeight: lineH,
257828
258123
  letterSpacing: 0,
257829
258124
  paragraphSpacing: 0,
257830
258125
  paragraphIndent: 0,
@@ -259227,11 +259522,7 @@ function audioModelFor(use, id3) {
259227
259522
  if (!id3) return AUDIO_MODELS[use];
259228
259523
  return AUDIO_MODEL_OPTIONS[use].find((m) => m.id === id3) ?? null;
259229
259524
  }
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;
259525
+ 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
259526
  var init_audio_models = __esm({
259236
259527
  "lib/ai/audio-models.ts"() {
259237
259528
  "use strict";
@@ -259325,7 +259616,6 @@ var init_audio_models = __esm({
259325
259616
  /** Upper bound for one generation (the route aborts the upstream request after this). */
259326
259617
  timeoutMs: 28e4
259327
259618
  };
259328
- voiceEnabled = () => process.env.NEXT_PUBLIC_HYPERY_AUDIO === "1";
259329
259619
  }
259330
259620
  });
259331
259621
 
@@ -260192,6 +260482,14 @@ function repairClipMotion(clip) {
260192
260482
  out = { ...out };
260193
260483
  delete out.matte;
260194
260484
  }
260485
+ if (clip.shaders !== void 0) {
260486
+ 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)) : [];
260487
+ if (!Array.isArray(clip.shaders) || ok2.length !== clip.shaders.length) {
260488
+ out = { ...out };
260489
+ if (ok2.length) out.shaders = ok2;
260490
+ else delete out.shaders;
260491
+ }
260492
+ }
260195
260493
  if ("angle" in clip && clip.angle !== void 0 && !(Number.isInteger(clip.angle) && clip.angle >= 1 && clip.angle < MAX_VIDEO_TRACKS)) {
260196
260494
  out = { ...out };
260197
260495
  delete out.angle;
@@ -265487,7 +265785,7 @@ function meshGradient() {
265487
265785
  g.node("mesh", "meshGradient", { speed: 0.3, spread: 0.4, colorA: hex5("#8c5cf5"), colorB: hex5("#338cfa"), colorC: hex5("#f56b9e"), base: hex5("#29293d") });
265488
265786
  g.node("out", "output");
265489
265787
  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") };
265788
+ 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
265789
  }
265492
265790
  function plasma() {
265493
265791
  const g = new GraphBuilder();
@@ -265578,7 +265876,7 @@ function zoomFeedback() {
265578
265876
  g.node("glow", "brightness");
265579
265877
  g.node("out", "output");
265580
265878
  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" } };
265879
+ 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
265880
  }
265583
265881
  function kaleidoscope() {
265584
265882
  const g = new GraphBuilder();
@@ -265668,7 +265966,7 @@ function liquidInk() {
265668
265966
  g.node("glow", "brightness");
265669
265967
  g.node("out", "output");
265670
265968
  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" } };
265969
+ 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
265970
  }
265673
265971
  var hex5, DEEP, VIOLET, PINK, CYAN2, GOLD, INK3, sameNames, PARTICLES, GRAPH_PRESETS;
265674
265972
  var init_shader_graph_presets = __esm({
@@ -266202,7 +266500,6 @@ fn shade(uv: vec2<f32>, res: vec2<f32>, tm: f32) -> vec4<f32> {
266202
266500
  var SHADER_PRESETS, shaderPreset, legacyPresetOf, DEFAULT_SHADER_PRESET, DEFAULT_TEXTURE_PARAMS, f, vec4, NOISE_LIB;
266203
266501
  var init_shader_presets = __esm({
266204
266502
  "lib/engine/shader-presets.ts"() {
266205
- "use strict";
266206
266503
  init_shader_graph();
266207
266504
  init_shader_graph_presets();
266208
266505
  init_shader_presets_legacy();
@@ -266910,7 +267207,7 @@ var init_config2 = __esm({
266910
267207
  ...(process.env.NEXT_PUBLIC_HYPERY_SCOPES ?? "read write").split(/\s+/).filter(Boolean),
266911
267208
  ...HYPERY_AI_SCOPES,
266912
267209
  ...plansEnabled() ? HYPERY_BILLING_SCOPES : [],
266913
- ...process.env.NEXT_PUBLIC_HYPERY_AUDIO === "1" ? HYPERY_AUDIO_SCOPES : []
267210
+ ...HYPERY_AUDIO_SCOPES
266914
267211
  ]));
266915
267212
  cloudEnabled = () => (process.env.NEXT_PUBLIC_HYPERY_CLIENT_ID ?? "").length > 0;
266916
267213
  }
@@ -267921,12 +268218,12 @@ async function writeSnapshot(snap) {
267921
268218
  } else if (header?.layout === SPLIT_LAYOUT && Array.isArray(header.nodeIds)) {
267922
268219
  for (const nid of header.nodeIds) if (!(nid in nodes)) gone.push(nodeKey(id3, nid));
267923
268220
  }
267924
- const seq8 = (header?.seq ?? 0) + 1;
268221
+ const seq9 = (header?.seq ?? 0) + 1;
267925
268222
  const { nodes: _nodes, ...docRest } = doc2;
267926
- const stored = { ...snap, document: docRest, layout: SPLIT_LAYOUT, nodeIds: ids2, writer: WRITER, seq: seq8 };
268223
+ const stored = { ...snap, document: docRest, layout: SPLIT_LAYOUT, nodeIds: ids2, writer: WRITER, seq: seq9 };
267927
268224
  entries4.push([docKey(id3), stored]);
267928
268225
  await setMany2(entries4);
267929
- persisted.set(id3, { nodes, writer: WRITER, seq: seq8 });
268226
+ persisted.set(id3, { nodes, writer: WRITER, seq: seq9 });
267930
268227
  if (gone.length) await delMany2(gone).catch(() => {
267931
268228
  });
267932
268229
  }
@@ -267959,8 +268256,8 @@ function readDocSnapshot(id3) {
267959
268256
  const v = values3[i2];
267960
268257
  if (v) nodes[n] = v;
267961
268258
  });
267962
- const { layout: _l, nodeIds: _ids, writer, seq: seq8, document: document2, ...rest } = s;
267963
- persisted.set(id3, { nodes, writer, seq: seq8 ?? 0 });
268259
+ const { layout: _l, nodeIds: _ids, writer, seq: seq9, document: document2, ...rest } = s;
268260
+ persisted.set(id3, { nodes, writer, seq: seq9 ?? 0 });
267964
268261
  return { ...rest, document: { ...document2, nodes } };
267965
268262
  });
267966
268263
  }
@@ -268173,6 +268470,85 @@ var init_fit_camera = __esm({
268173
268470
  }
268174
268471
  });
268175
268472
 
268473
+ // lib/motion/clip-shaders.ts
268474
+ function chain2(...steps) {
268475
+ const g = new GraphBuilder();
268476
+ g.node("image", "image");
268477
+ let prev = "image";
268478
+ steps.forEach(([kind, inputs], i2) => {
268479
+ const id3 = `${kind}${i2}`;
268480
+ g.node(id3, kind, inputs ?? {});
268481
+ g.wire(prev, `${id3}.input`);
268482
+ prev = id3;
268483
+ });
268484
+ g.node("out", "output");
268485
+ g.wire(prev, "out.color");
268486
+ return g.build();
268487
+ }
268488
+ function chainDuotone() {
268489
+ const g = new GraphBuilder();
268490
+ g.node("image", "image");
268491
+ g.node("duo", "duotone", {});
268492
+ g.node("out", "output");
268493
+ g.wire("image", "duo.color");
268494
+ g.wire("duo", "out.color");
268495
+ return g.build();
268496
+ }
268497
+ function edgeGlow() {
268498
+ const g = new GraphBuilder();
268499
+ g.node("image", "image");
268500
+ g.node("edges", "edges", { width: 3e-3, strength: 6 });
268501
+ g.node("blend", "blend", { amount: 1.2, mode: "add" });
268502
+ g.node("out", "output");
268503
+ g.wire("image", "edges.input");
268504
+ g.wire("image", "blend.base");
268505
+ g.wire("edges", "blend.layer");
268506
+ g.wire("blend", "out.color");
268507
+ return g.build();
268508
+ }
268509
+ function clipShaderFromPreset(id3) {
268510
+ const p2 = CLIP_SHADER_PRESETS.find((x2) => x2.id === id3);
268511
+ if (!p2) throw new Error(`There is no shader effect "${id3}" (${CLIP_SHADER_PRESETS.map((x2) => x2.id).join(", ")}).`);
268512
+ return { id: `sh-${Date.now().toString(36)}-${(seq7++).toString(36)}`, name: p2.name, graph: p2.graph(), enabled: true };
268513
+ }
268514
+ function compiledClipShaders(list2) {
268515
+ if (!list2?.length) return [];
268516
+ const hit = memo5.get(list2);
268517
+ if (hit) return hit;
268518
+ const out = [];
268519
+ for (const s of list2) {
268520
+ if (s.enabled === false) continue;
268521
+ const c2 = compileShaderGraph(s.graph);
268522
+ if (c2.errors.length) continue;
268523
+ out.push({ code: c2.code, params: { ...c2.params, ...s.params ?? {} } });
268524
+ }
268525
+ memo5.set(list2, out);
268526
+ return out;
268527
+ }
268528
+ var CLIP_SHADER_PRESETS, seq7, readsPicture, memo5;
268529
+ var init_clip_shaders = __esm({
268530
+ "lib/motion/clip-shaders.ts"() {
268531
+ "use strict";
268532
+ init_shader_graph();
268533
+ CLIP_SHADER_PRESETS = [
268534
+ { id: "chromatic", name: "Chromatic aberration", description: "Red and blue pulled apart, like a cheap lens", graph: () => chain2(["rgbSplit", { amount: 8e-3 }]) },
268535
+ { id: "glow", name: "Glow", description: "Bright parts bloom into a soft halo", graph: () => chain2(["glow", { radius: 0.012, amount: 1.2, threshold: 0.55 }]) },
268536
+ { 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 }]) },
268537
+ { 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 }]) },
268538
+ { id: "duotone", name: "Duotone", description: "Shadows and highlights in two colors", graph: () => chainDuotone() },
268539
+ { id: "halftone", name: "Halftone", description: "Printed dots sized by how dark each spot is", graph: () => chain2(["halftone", { size: 0.018 }]) },
268540
+ { id: "sketch", name: "Edge glow", description: "Outlines traced in light over the picture", graph: () => edgeGlow() },
268541
+ { id: "mirror", name: "Mirror", description: "The left half mirrored onto the right", graph: () => chain2(["mirror"]) },
268542
+ { id: "kaleidoscope", name: "Kaleidoscope", description: "The picture folded into a turning kaleidoscope", graph: () => chain2(["kaleidoscope", { segments: 6 }]) },
268543
+ { id: "liquid", name: "Liquid", description: "The picture rippling like water", graph: () => chain2(["liquid", { amount: 0.06 }]) },
268544
+ { id: "soft", name: "Soft focus", description: "A gentle blur over the whole frame", graph: () => chain2(["blur", { radius: 6e-3 }]) }
268545
+ ];
268546
+ seq7 = 0;
268547
+ readsPicture = (graph) => Object.values(graph.nodes ?? {}).some((n) => n.kind === "image");
268548
+ memo5 = /* @__PURE__ */ new WeakMap();
268549
+ }
268550
+ });
268551
+
268176
268552
  // lib/motion/clip-grade.ts
268177
268553
  function curves(a) {
268178
268554
  const c2 = a.curves;
@@ -268636,7 +269012,7 @@ function reevaluatePose(pose, base) {
268636
269012
  }
268637
269013
  function evaluatePose(base, target2, time4, opts = {}) {
268638
269014
  const clock2 = opts.clock ?? "transport";
268639
- const cached3 = memo5.get(base);
269015
+ const cached3 = memo6.get(base);
268640
269016
  const end = opts.end;
268641
269017
  const runtime = opts.runtime ?? NO_RUNTIME;
268642
269018
  const videos = opts.driveVideo ?? clock2 === "transport";
@@ -268696,7 +269072,7 @@ function remember(base, cached3, pose) {
268696
269072
  const list2 = cached3 ?? [];
268697
269073
  list2.unshift(pose);
268698
269074
  if (list2.length > MEMO_PER_MAP) list2.length = MEMO_PER_MAP;
268699
- if (!cached3) memo5.set(base, list2);
269075
+ if (!cached3) memo6.set(base, list2);
268700
269076
  return pose;
268701
269077
  }
268702
269078
  function withClipMotion(r, clip, into, frame3, at5, ownOpacity) {
@@ -268750,9 +269126,12 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268750
269126
  if (a.clip.effects?.length) gradeSubtree(base, a.clip.frameId, a.clip.effects, patch2 ??= {});
268751
269127
  }
268752
269128
  const adjusting = [];
269129
+ const shading = [];
268753
269130
  for (const l of layersAt(comp, time4)) {
268754
269131
  if (l.clip.kind === "adjustment") {
268755
269132
  if (l.clip.effects?.length) adjusting.push({ track: l.clip.track, effects: scaleEffects(l.clip.effects, l.opacity) });
269133
+ const fx = compiledClipShaders(l.clip.shaders);
269134
+ if (fx.length) shading.push({ track: l.clip.track, fx });
268756
269135
  continue;
268757
269136
  }
268758
269137
  if (l.clip.kind === "sequence") {
@@ -268816,7 +269195,8 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268816
269195
  }
268817
269196
  if (l.clip.effects?.length) gradeSubtree(base, fid, l.clip.effects, patch2 ??= {});
268818
269197
  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));
269198
+ const lfx = compiledClipShaders(l.clip.shaders);
269199
+ 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
269200
  }
268821
269201
  const mattes = /* @__PURE__ */ new Map();
268822
269202
  const v1Matte = moment.current && !moment.previous ? moment.current.clip.matte : void 0;
@@ -268835,6 +269215,19 @@ function compositionPose(base, target2, time4, clock2, runtime, compositions, au
268835
269215
  shown2.splice(mi, 1);
268836
269216
  }
268837
269217
  }
269218
+ for (const a of [moment.previous, moment.current]) {
269219
+ const fx = a ? compiledClipShaders(a.clip.shaders) : [];
269220
+ if (!a || !fx.length) continue;
269221
+ const i2 = shown2.findIndex((r) => r.rootId === a.clip.frameId);
269222
+ if (i2 >= 0) shown2[i2] = { ...shown2[i2], fx: [...fx, ...shown2[i2].fx ?? []] };
269223
+ }
269224
+ for (const sh of shading.sort((a, b) => a.track - b.track)) {
269225
+ for (const g of graded) {
269226
+ if (g.track >= sh.track) continue;
269227
+ const i2 = shown2.findIndex((r) => r.rootId === g.frameId);
269228
+ if (i2 >= 0) shown2[i2] = { ...shown2[i2], fx: [...shown2[i2].fx ?? [], ...sh.fx] };
269229
+ }
269230
+ }
268838
269231
  for (const adj of adjusting.sort((a, b) => a.track - b.track)) {
268839
269232
  for (const g of graded) if (g.track < adj.track) gradeSubtree(base, g.frameId, adj.effects, patch2 ??= {});
268840
269233
  }
@@ -268935,7 +269328,7 @@ function withSolo(pose, solo) {
268935
269328
  soloMemo.set(pose, { solo: key5, pose: out });
268936
269329
  return out;
268937
269330
  }
268938
- var targetFrameId, targetCompositionId, sameTarget, layered, sameAudio, MEMO_PER_MAP, memo5, nestDepth, STAGE_WHITE, soloMemo, orbitMemo;
269331
+ var targetFrameId, targetCompositionId, sameTarget, layered, sameAudio, MEMO_PER_MAP, memo6, nestDepth, STAGE_WHITE, soloMemo, orbitMemo;
268939
269332
  var init_pose = __esm({
268940
269333
  "lib/motion/pose.ts"() {
268941
269334
  "use strict";
@@ -268946,6 +269339,7 @@ var init_pose = __esm({
268946
269339
  init_sequence();
268947
269340
  init_clip_motion();
268948
269341
  init_multicam();
269342
+ init_clip_shaders();
268949
269343
  init_captions();
268950
269344
  init_clip_grade();
268951
269345
  init_transform();
@@ -268963,7 +269357,7 @@ var init_pose = __esm({
268963
269357
  layered = /* @__PURE__ */ new WeakMap();
268964
269358
  sameAudio = (p2, scope) => !scope ? !p2.audio : !!p2.audio && p2.audio.sound === scope.sound && p2.audio.time === scope.time && p2.audio.version === analysisVersion();
268965
269359
  MEMO_PER_MAP = 4;
268966
- memo5 = /* @__PURE__ */ new WeakMap();
269360
+ memo6 = /* @__PURE__ */ new WeakMap();
268967
269361
  nestDepth = 0;
268968
269362
  STAGE_WHITE = { r: 1, g: 1, b: 1, a: 1 };
268969
269363
  soloMemo = /* @__PURE__ */ new WeakMap();
@@ -271220,7 +271614,7 @@ function createMotionSlice(set4, get4) {
271220
271614
  nodeEditor: null,
271221
271615
  setNodeEditor: (target2) => {
271222
271616
  const cur = get4().nodeEditor;
271223
- if (cur?.nodeId !== target2?.nodeId || cur?.fillId !== target2?.fillId) set4({ nodeEditor: target2 });
271617
+ if (cur?.nodeId !== target2?.nodeId || cur?.fillId !== target2?.fillId || cur?.clip?.clipId !== target2?.clip?.clipId) set4({ nodeEditor: target2 });
271224
271618
  },
271225
271619
  machinePreview: false,
271226
271620
  startMachinePreview: (frameId2) => {
@@ -271302,7 +271696,7 @@ function breakpointsOf(doc2) {
271302
271696
  const rest = list2.filter((b) => b !== base && b.maxWidth !== null).sort((a, b) => b.maxWidth - a.maxWidth);
271303
271697
  return [base, ...rest];
271304
271698
  }
271305
- function chain2(doc2, id3) {
271699
+ function chain3(doc2, id3) {
271306
271700
  const all4 = breakpointsOf(doc2);
271307
271701
  const at5 = all4.findIndex((b) => b.id === id3);
271308
271702
  return at5 > 0 ? all4.slice(1, at5 + 1) : [];
@@ -271310,7 +271704,7 @@ function chain2(doc2, id3) {
271310
271704
  function overridesAt(node2, doc2, id3) {
271311
271705
  if (!node2.responsive) return null;
271312
271706
  let out = null;
271313
- for (const b of chain2(doc2, id3)) {
271707
+ for (const b of chain3(doc2, id3)) {
271314
271708
  const o = node2.responsive[b.id];
271315
271709
  if (o) out = { ...out ?? {}, ...o };
271316
271710
  }
@@ -271363,7 +271757,7 @@ function withOverrides(node2, id3, overrides2) {
271363
271757
  function breakpointPatch(node2, doc2, id3, props) {
271364
271758
  const base = {};
271365
271759
  const mine = { ...node2.responsive?.[id3] };
271366
- const wider = chain2(doc2, id3).slice(0, -1).reduce((acc, b) => ({ ...acc, ...node2.responsive?.[b.id] }), {});
271760
+ const wider = chain3(doc2, id3).slice(0, -1).reduce((acc, b) => ({ ...acc, ...node2.responsive?.[b.id] }), {});
271367
271761
  const inherited = (k2) => k2 in wider ? wider[k2] : node2[k2];
271368
271762
  let touched = false;
271369
271763
  for (const [k2, v] of Object.entries(props)) {
@@ -272640,128 +273034,6 @@ var init_tauri = __esm({
272640
273034
  }
272641
273035
  });
272642
273036
 
272643
- // lib/desktop/open-link.ts
272644
- function openLink(href) {
272645
- if (isDesktop()) window.location.assign(href);
272646
- else window.open(href, "_blank", "noopener");
272647
- }
272648
- function openSitePage(path) {
272649
- if (!isDesktop()) {
272650
- window.open(path, "_blank", "noopener");
272651
- return;
272652
- }
272653
- const url4 = new URL(path, window.location.origin).href;
272654
- invoke("open_external", { url: url4 }).catch(() => window.location.assign(path));
272655
- }
272656
- function openBeside(href) {
272657
- if (!isDesktop()) return !!window.open(href, "_blank", "noopener,noreferrer");
272658
- const url4 = new URL(href, window.location.href);
272659
- if (url4.origin === window.location.origin) openSitePage(url4.pathname + url4.search + url4.hash);
272660
- else window.location.assign(url4.href);
272661
- return true;
272662
- }
272663
- var init_open_link = __esm({
272664
- "lib/desktop/open-link.ts"() {
272665
- init_tauri();
272666
- }
272667
- });
272668
-
272669
- // lib/plugins/plugin-store.ts
272670
- var plugin_store_exports = {};
272671
- __export(plugin_store_exports, {
272672
- usePluginStore: () => usePluginStore
272673
- });
272674
- var toastSeq, usePluginStore;
272675
- var init_plugin_store = __esm({
272676
- "lib/plugins/plugin-store.ts"() {
272677
- "use strict";
272678
- init_esm();
272679
- init_announce();
272680
- toastSeq = 1;
272681
- usePluginStore = create2()((set4) => ({
272682
- installed: [],
272683
- sessions: [],
272684
- toasts: [],
272685
- permissionPrompt: null,
272686
- managerOpen: false,
272687
- setInstalled: (installed4) => set4({ installed: installed4 }),
272688
- setManagerOpen: (managerOpen) => set4({ managerOpen }),
272689
- upsertSession: (s) => set4((st3) => ({ sessions: [...st3.sessions.filter((x2) => x2.sessionId !== s.sessionId), s] })),
272690
- patchSession: (sessionId, patch2) => set4((st3) => ({ sessions: st3.sessions.map((x2) => x2.sessionId === sessionId ? { ...x2, ...patch2 } : x2) })),
272691
- removeSession: (sessionId) => set4((st3) => ({ sessions: st3.sessions.filter((x2) => x2.sessionId !== sessionId) })),
272692
- toast: (message, opts = {}) => {
272693
- announce(opts.source ? `${opts.source}: ${message}` : message, opts.error ? "assertive" : "polite");
272694
- const id3 = toastSeq++;
272695
- set4((st3) => ({ toasts: [...st3.toasts.slice(-4), { id: id3, message, error: !!opts.error, source: opts.source ?? "" }] }));
272696
- setTimeout(() => set4((st3) => ({ toasts: st3.toasts.filter((t3) => t3.id !== id3) })), opts.error ? 7e3 : 4e3);
272697
- },
272698
- dismissToast: (id3) => set4((st3) => ({ toasts: st3.toasts.filter((t3) => t3.id !== id3) })),
272699
- setPermissionPrompt: (permissionPrompt) => set4({ permissionPrompt })
272700
- }));
272701
- }
272702
- });
272703
-
272704
- // lib/client/network.ts
272705
- function isOnline() {
272706
- return typeof navigator === "undefined" || navigator.onLine !== false;
272707
- }
272708
- function networkSignal(signal, timeoutMs = NETWORK_TIMEOUT_MS) {
272709
- if (!isOnline()) throw new OfflineError();
272710
- const deadline = AbortSignal.timeout(timeoutMs);
272711
- return signal ? AbortSignal.any([signal, deadline]) : deadline;
272712
- }
272713
- var import_react3, NETWORK_TIMEOUT_MS, OfflineError;
272714
- var init_network = __esm({
272715
- "lib/client/network.ts"() {
272716
- import_react3 = __toESM(require_react());
272717
- NETWORK_TIMEOUT_MS = 8e3;
272718
- OfflineError = class extends Error {
272719
- constructor() {
272720
- super("You are offline");
272721
- this.name = "OfflineError";
272722
- }
272723
- };
272724
- }
272725
- });
272726
-
272727
- // lib/client/cloud/plan-limit.ts
272728
- var plan_limit_exports = {};
272729
- __export(plan_limit_exports, {
272730
- closePlanDialog: () => closePlanDialog,
272731
- dismissPlanLimit: () => dismissPlanLimit,
272732
- openPlanDialog: () => openPlanDialog,
272733
- reportPlanLimit: () => reportPlanLimit,
272734
- resetPlanLimitNotices: () => resetPlanLimitNotices,
272735
- usePlanLimit: () => usePlanLimit
272736
- });
272737
- function reportPlanLimit(message, details, now3 = Date.now()) {
272738
- const key5 = `${details.tier}:${details.limit}`;
272739
- const prev = lastShown.get(key5);
272740
- if (prev !== void 0 && now3 - prev < REPEAT_MS) return false;
272741
- lastShown.set(key5, now3);
272742
- usePlanLimit.setState({ notice: { message, details, at: now3 } });
272743
- return true;
272744
- }
272745
- function openPlanDialog(workspaceId, opts = {}) {
272746
- usePlanLimit.setState({ notice: null, planDialogOpen: true, planDialogWorkspaceId: typeof workspaceId === "string" ? workspaceId : null, planDialogIntro: !!opts.intro });
272747
- }
272748
- function resetPlanLimitNotices() {
272749
- lastShown.clear();
272750
- usePlanLimit.setState({ notice: null, planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false });
272751
- }
272752
- var usePlanLimit, REPEAT_MS, lastShown, dismissPlanLimit, closePlanDialog;
272753
- var init_plan_limit = __esm({
272754
- "lib/client/cloud/plan-limit.ts"() {
272755
- "use strict";
272756
- init_esm();
272757
- usePlanLimit = create2(() => ({ notice: null, planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false }));
272758
- REPEAT_MS = 10 * 6e4;
272759
- lastShown = /* @__PURE__ */ new Map();
272760
- dismissPlanLimit = () => usePlanLimit.setState({ notice: null });
272761
- closePlanDialog = () => usePlanLimit.setState({ planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false });
272762
- }
272763
- });
272764
-
272765
273037
  // lib/i18n/format.ts
272766
273038
  function cached2(kind, opts, make) {
272767
273039
  const locale = intlLocale(getLocale());
@@ -273035,6 +273307,163 @@ var init_purchases = __esm({
273035
273307
  }
273036
273308
  });
273037
273309
 
273310
+ // lib/desktop/play-app.ts
273311
+ function isAppPage(href, origin) {
273312
+ const url4 = new URL(href, origin);
273313
+ if (url4.origin !== origin) return false;
273314
+ return APP_PATHS.some((p2) => url4.pathname === p2 || url4.pathname.startsWith(p2 + "/"));
273315
+ }
273316
+ function chromeIntent(href) {
273317
+ const url4 = new URL(href);
273318
+ if (url4.protocol !== "https:" && url4.protocol !== "http:") return null;
273319
+ const scheme = url4.protocol.slice(0, -1);
273320
+ return `intent://${url4.host}${url4.pathname}${url4.search}#Intent;scheme=${scheme};package=com.android.chrome;S.browser_fallback_url=${encodeURIComponent(url4.href)};end`;
273321
+ }
273322
+ function openOutside(href) {
273323
+ const url4 = new URL(href, window.location.href);
273324
+ const intent = chromeIntent(url4.href);
273325
+ window.location.assign(intent ?? url4.href);
273326
+ }
273327
+ function sentOutOfPlayApp(href) {
273328
+ if (!inPlayApp() || isAppPage(href, window.location.origin)) return false;
273329
+ openOutside(new URL(href, window.location.href).href);
273330
+ return true;
273331
+ }
273332
+ var APP_PATHS;
273333
+ var init_play_app = __esm({
273334
+ "lib/desktop/play-app.ts"() {
273335
+ "use strict";
273336
+ init_purchases();
273337
+ APP_PATHS = ["/home", "/pop", "/callback"];
273338
+ }
273339
+ });
273340
+
273341
+ // lib/desktop/open-link.ts
273342
+ function openLink(href) {
273343
+ if (sentOutOfPlayApp(href)) return;
273344
+ if (isDesktop()) window.location.assign(href);
273345
+ else window.open(href, "_blank", "noopener");
273346
+ }
273347
+ function openSitePage(path) {
273348
+ if (sentOutOfPlayApp(path)) return;
273349
+ if (!isDesktop()) {
273350
+ window.open(path, "_blank", "noopener");
273351
+ return;
273352
+ }
273353
+ const url4 = new URL(path, window.location.origin).href;
273354
+ invoke("open_external", { url: url4 }).catch(() => window.location.assign(path));
273355
+ }
273356
+ function openBeside(href) {
273357
+ if (sentOutOfPlayApp(href)) return true;
273358
+ if (!isDesktop()) return !!window.open(href, "_blank", "noopener,noreferrer");
273359
+ const url4 = new URL(href, window.location.href);
273360
+ if (url4.origin === window.location.origin) openSitePage(url4.pathname + url4.search + url4.hash);
273361
+ else window.location.assign(url4.href);
273362
+ return true;
273363
+ }
273364
+ var init_open_link = __esm({
273365
+ "lib/desktop/open-link.ts"() {
273366
+ init_tauri();
273367
+ init_play_app();
273368
+ }
273369
+ });
273370
+
273371
+ // lib/plugins/plugin-store.ts
273372
+ var plugin_store_exports = {};
273373
+ __export(plugin_store_exports, {
273374
+ usePluginStore: () => usePluginStore
273375
+ });
273376
+ var toastSeq, usePluginStore;
273377
+ var init_plugin_store = __esm({
273378
+ "lib/plugins/plugin-store.ts"() {
273379
+ "use strict";
273380
+ init_esm();
273381
+ init_announce();
273382
+ toastSeq = 1;
273383
+ usePluginStore = create2()((set4) => ({
273384
+ installed: [],
273385
+ sessions: [],
273386
+ toasts: [],
273387
+ permissionPrompt: null,
273388
+ managerOpen: false,
273389
+ setInstalled: (installed4) => set4({ installed: installed4 }),
273390
+ setManagerOpen: (managerOpen) => set4({ managerOpen }),
273391
+ upsertSession: (s) => set4((st3) => ({ sessions: [...st3.sessions.filter((x2) => x2.sessionId !== s.sessionId), s] })),
273392
+ patchSession: (sessionId, patch2) => set4((st3) => ({ sessions: st3.sessions.map((x2) => x2.sessionId === sessionId ? { ...x2, ...patch2 } : x2) })),
273393
+ removeSession: (sessionId) => set4((st3) => ({ sessions: st3.sessions.filter((x2) => x2.sessionId !== sessionId) })),
273394
+ toast: (message, opts = {}) => {
273395
+ announce(opts.source ? `${opts.source}: ${message}` : message, opts.error ? "assertive" : "polite");
273396
+ const id3 = toastSeq++;
273397
+ set4((st3) => ({ toasts: [...st3.toasts.slice(-4), { id: id3, message, error: !!opts.error, source: opts.source ?? "" }] }));
273398
+ setTimeout(() => set4((st3) => ({ toasts: st3.toasts.filter((t3) => t3.id !== id3) })), opts.error ? 7e3 : 4e3);
273399
+ },
273400
+ dismissToast: (id3) => set4((st3) => ({ toasts: st3.toasts.filter((t3) => t3.id !== id3) })),
273401
+ setPermissionPrompt: (permissionPrompt) => set4({ permissionPrompt })
273402
+ }));
273403
+ }
273404
+ });
273405
+
273406
+ // lib/client/network.ts
273407
+ function isOnline() {
273408
+ return typeof navigator === "undefined" || navigator.onLine !== false;
273409
+ }
273410
+ function networkSignal(signal, timeoutMs = NETWORK_TIMEOUT_MS) {
273411
+ if (!isOnline()) throw new OfflineError();
273412
+ const deadline = AbortSignal.timeout(timeoutMs);
273413
+ return signal ? AbortSignal.any([signal, deadline]) : deadline;
273414
+ }
273415
+ var import_react3, NETWORK_TIMEOUT_MS, OfflineError;
273416
+ var init_network = __esm({
273417
+ "lib/client/network.ts"() {
273418
+ import_react3 = __toESM(require_react());
273419
+ NETWORK_TIMEOUT_MS = 8e3;
273420
+ OfflineError = class extends Error {
273421
+ constructor() {
273422
+ super("You are offline");
273423
+ this.name = "OfflineError";
273424
+ }
273425
+ };
273426
+ }
273427
+ });
273428
+
273429
+ // lib/client/cloud/plan-limit.ts
273430
+ var plan_limit_exports = {};
273431
+ __export(plan_limit_exports, {
273432
+ closePlanDialog: () => closePlanDialog,
273433
+ dismissPlanLimit: () => dismissPlanLimit,
273434
+ openPlanDialog: () => openPlanDialog,
273435
+ reportPlanLimit: () => reportPlanLimit,
273436
+ resetPlanLimitNotices: () => resetPlanLimitNotices,
273437
+ usePlanLimit: () => usePlanLimit
273438
+ });
273439
+ function reportPlanLimit(message, details, now3 = Date.now()) {
273440
+ const key5 = `${details.tier}:${details.limit}`;
273441
+ const prev = lastShown.get(key5);
273442
+ if (prev !== void 0 && now3 - prev < REPEAT_MS) return false;
273443
+ lastShown.set(key5, now3);
273444
+ usePlanLimit.setState({ notice: { message, details, at: now3 } });
273445
+ return true;
273446
+ }
273447
+ function openPlanDialog(workspaceId, opts = {}) {
273448
+ usePlanLimit.setState({ notice: null, planDialogOpen: true, planDialogWorkspaceId: typeof workspaceId === "string" ? workspaceId : null, planDialogIntro: !!opts.intro });
273449
+ }
273450
+ function resetPlanLimitNotices() {
273451
+ lastShown.clear();
273452
+ usePlanLimit.setState({ notice: null, planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false });
273453
+ }
273454
+ var usePlanLimit, REPEAT_MS, lastShown, dismissPlanLimit, closePlanDialog;
273455
+ var init_plan_limit = __esm({
273456
+ "lib/client/cloud/plan-limit.ts"() {
273457
+ "use strict";
273458
+ init_esm();
273459
+ usePlanLimit = create2(() => ({ notice: null, planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false }));
273460
+ REPEAT_MS = 10 * 6e4;
273461
+ lastShown = /* @__PURE__ */ new Map();
273462
+ dismissPlanLimit = () => usePlanLimit.setState({ notice: null });
273463
+ closePlanDialog = () => usePlanLimit.setState({ planDialogOpen: false, planDialogWorkspaceId: null, planDialogIntro: false });
273464
+ }
273465
+ });
273466
+
273038
273467
  // lib/client/cloud/api.ts
273039
273468
  var api_exports = {};
273040
273469
  __export(api_exports, {
@@ -314915,10 +315344,10 @@ var init_media_source = __esm({
314915
315344
  };
314916
315345
  colorAlphaSplitterWorkerCode = () => {
314917
315346
  let cpuSourceBuffer = null;
314918
- let chain3 = Promise.resolve();
315347
+ let chain5 = Promise.resolve();
314919
315348
  self.addEventListener("message", (event) => {
314920
315349
  const { id: id3, sourceFrame } = event.data;
314921
- chain3 = chain3.then(async () => {
315350
+ chain5 = chain5.then(async () => {
314922
315351
  try {
314923
315352
  const { colorFrame, alphaFrame } = await split2(sourceFrame);
314924
315353
  self.postMessage({ id: id3, colorFrame, alphaFrame }, { transfer: [colorFrame, alphaFrame] });
@@ -317230,12 +317659,12 @@ function createMixGraph(c2, out, settings, gateReady = () => false) {
317230
317659
  const wire = (i2) => {
317231
317660
  let l = lanes.get(i2);
317232
317661
  if (l) return l;
317233
- const input2 = c2.createGain(), chain3 = buildChain(c2, fxOf(i2), void 0, gateReady()), meter = c2.createAnalyser();
317662
+ const input2 = c2.createGain(), chain5 = buildChain(c2, fxOf(i2), void 0, gateReady()), meter = c2.createAnalyser();
317234
317663
  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 };
317664
+ input2.connect(chain5.input);
317665
+ chain5.output.connect(meter);
317666
+ chain5.output.connect(masterIn);
317667
+ l = { input: input2, chain: chain5, shape: shapeOf(fxOf(i2), false, gateReady()), meter };
317239
317668
  lanes.set(i2, l);
317240
317669
  return l;
317241
317670
  };
@@ -317254,10 +317683,10 @@ function createMixGraph(c2, out, settings, gateReady = () => false) {
317254
317683
  from2.disconnect();
317255
317684
  old.output.disconnect();
317256
317685
  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;
317686
+ const chain5 = buildChain(c2, fx, limiter, gateReady());
317687
+ from2.connect(chain5.input);
317688
+ for (const t3 of to) chain5.output.connect(t3);
317689
+ return chain5;
317261
317690
  };
317262
317691
  return {
317263
317692
  lane: (i2) => wire(i2).input,
@@ -320377,10 +320806,10 @@ function shapeSubs(el) {
320377
320806
  return [];
320378
320807
  }
320379
320808
  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"));
320809
+ const chain5 = [];
320810
+ for (let g = el; g && chain5.length < 8; g = ctx2.ids.get((g.attrs.href ?? g.attrs["xlink:href"] ?? "").replace(/^#/, ""))) chain5.push(g);
320811
+ const attr = (k2) => chain5.find((g) => g.attrs[k2] !== void 0)?.attrs[k2];
320812
+ const stopsEl = chain5.find((g) => g.children.some((c2) => c2.tag === "stop"));
320384
320813
  const gradientStops = (stopsEl?.children ?? []).filter((c2) => c2.tag === "stop").map((s) => {
320385
320814
  const st3 = ownStyle(s, ctx2.css);
320386
320815
  const off = s.attrs.offset ?? "0";
@@ -322214,7 +322643,6 @@ function startCloudSync() {
322214
322643
  var status, readOnlyDoc, activeLink, statusListeners, notice, urlArmed, opening, syncStatus, canEdit, uploaded, MEDIA_UPLOAD_PARALLEL, pushTimer, pushing, dirty, pendingMedia, collab, collabSession, collabAnonymous, uploadedThumbs, thumbCheckedAt, THUMB_EVERY_MS, THUMB_MIN_GAP_MS, putThumbnail, openingFiles, mediaHealed, SEEN_KEY, started2;
322215
322644
  var init_sync2 = __esm({
322216
322645
  "lib/client/cloud/sync.ts"() {
322217
- "use strict";
322218
322646
  init_kinds();
322219
322647
  init_paint_repair();
322220
322648
  init_migrate();
@@ -322426,6 +322854,7 @@ async function dispatchShaped(key5, options) {
322426
322854
  var onViolation;
322427
322855
  var init_dispatch = __esm({
322428
322856
  "lib/commands/dispatch.ts"() {
322857
+ "use strict";
322429
322858
  init_errors();
322430
322859
  init_registry();
322431
322860
  init_confirm();
@@ -323605,6 +324034,7 @@ function areaBounds(rings) {
323605
324034
  }
323606
324035
  var init_text_area = __esm({
323607
324036
  "lib/engine/text/text-area.ts"() {
324037
+ "use strict";
323608
324038
  }
323609
324039
  });
323610
324040
 
@@ -324734,12 +325164,12 @@ function sliceFormatting(head2, start2) {
324734
325164
  function resolveThreadNode(nodes, node2, atlas, zoom) {
324735
325165
  const n = node2;
324736
325166
  if (!n.threadPrevId) return node2;
324737
- const chain3 = threadChain(nodes, n.id);
324738
- const head2 = chain3[0];
325167
+ const chain5 = threadChain(nodes, n.id);
325168
+ const head2 = chain5[0];
324739
325169
  if (!head2 || head2.id === n.id) return node2;
324740
325170
  let start2 = 0;
324741
325171
  const text = head2.characters || "";
324742
- for (const member of chain3) {
325172
+ for (const member of chain5) {
324743
325173
  if (member.id === n.id) break;
324744
325174
  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
325175
  const layout2 = layoutText(member.id === head2.id ? { ...head2, textAutoResize: "NONE" } : view2, atlas, zoom);
@@ -329482,7 +329912,7 @@ function normalizeColor(c2, key5) {
329482
329912
  const o = c2;
329483
329913
  const ch = o && ["r", "g", "b"].map((k2) => o[k2]);
329484
329914
  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.`);
329915
+ 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
329916
  }
329487
329917
  const nums2 = ch;
329488
329918
  const scale = nums2.some((v) => v > 1) ? 255 : 1;
@@ -330873,7 +331303,7 @@ var init_text = __esm({
330873
331303
  blur: external_exports.number().min(0).max(300).optional().describe("Blur, % of the font size."),
330874
331304
  thickness: external_exports.number().min(0).max(100).optional().describe("Outline thickness (OUTLINE, HOLLOW) or background reach, % of the font size."),
330875
331305
  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.")
331306
+ color: external_exports.string().optional().describe("Hex; unset keeps the preset color.")
330877
331307
  }),
330878
331308
  expose: {
330879
331309
  agent: {
@@ -333234,7 +333664,7 @@ var init_motion_shared = __esm({
333234
333664
  external_exports.string(),
333235
333665
  external_exports.boolean(),
333236
333666
  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.');
333667
+ ]).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
333668
  PROPERTY_PATTERNS = ANIMATABLE_PROPERTIES.map((p2) => p2.pattern);
333239
333669
  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
333670
  AUDIO_OPS = [
@@ -336471,8 +336901,8 @@ var init_build = __esm({
336471
336901
  return { ind: 0, nm, ip, op: op4, st: 0, sr: 1, ks, ao: 0, ddd: 0 };
336472
336902
  }
336473
336903
  /** 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]);
336904
+ opacity(chain5, own2, keyed2) {
336905
+ const samples = chain5.map((c2, f2) => own2[f2] === void 0 ? void 0 : [c2 * own2[f2] * 100]);
336476
336906
  const exact = keyed2.length === 1 ? this.exact(keyed2[0], [this.dim(keyed2[0], "opacity")]) : null;
336477
336907
  return this.prop(samples, exact, true, 0.01);
336478
336908
  }
@@ -336540,8 +336970,8 @@ var init_build = __esm({
336540
336970
  return [layer3];
336541
336971
  }
336542
336972
  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);
336973
+ const chain5 = ctx2.chain.map((c2, f2) => own2[f2] === void 0 ? 0 : c2 * own2[f2]);
336974
+ const layers2 = this.items(z2.children, { chain: chain5, chainKeyed: keyed2, offset: [P, P] }, z2);
336545
336975
  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
336976
  const id3 = this.comp(layers2, maxW + 2 * P, maxH + 2 * P, name2);
336547
336977
  const ks = place4 ? this.nodeKs(z2.frames, ctx2.offset, P, place4.matrix) : this.nodeKs(z2.frames, ctx2.offset, P);
@@ -338639,7 +339069,7 @@ var init_package = __esm({
338639
339069
  "packages/runtime/package.json"() {
338640
339070
  package_default = {
338641
339071
  name: "@popcraft/runtime",
338642
- version: "0.56.5",
339072
+ version: "0.57.1",
338643
339073
  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
339074
  license: "MIT",
338645
339075
  homepage: "https://popcraft.app/docs/exporting/nextjs",
@@ -353517,16 +353947,16 @@ var require_trace_mapping_umd = __commonJS({
353517
353947
  function GMapping(line, column) {
353518
353948
  return { line, column };
353519
353949
  }
353520
- function traceSegmentInternal(segments, memo7, line, column, bias) {
353521
- let index2 = memoizedBinarySearch(segments, column, memo7, line);
353950
+ function traceSegmentInternal(segments, memo8, line, column, bias) {
353951
+ let index2 = memoizedBinarySearch(segments, column, memo8, line);
353522
353952
  if (found) {
353523
353953
  index2 = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index2);
353524
353954
  } else if (bias === LEAST_UPPER_BOUND) index2++;
353525
353955
  if (index2 === -1 || index2 === segments.length) return -1;
353526
353956
  return index2;
353527
353957
  }
353528
- function sliceGeneratedPositions(segments, memo7, line, column, bias) {
353529
- let min2 = traceSegmentInternal(segments, memo7, line, column, GREATEST_LOWER_BOUND);
353958
+ function sliceGeneratedPositions(segments, memo8, line, column, bias) {
353959
+ let min2 = traceSegmentInternal(segments, memo8, line, column, GREATEST_LOWER_BOUND);
353530
353960
  if (!found && bias === LEAST_UPPER_BOUND) min2++;
353531
353961
  if (min2 === -1 || min2 === segments.length) return [];
353532
353962
  const matchedColumn = found ? column : segments[min2][COLUMN];
@@ -353552,9 +353982,9 @@ var require_trace_mapping_umd = __commonJS({
353552
353982
  const generated = (_b2 = cast(map2))._bySources || (_b2._bySources = buildBySources(decodedMappings(map2), bySourceMemos));
353553
353983
  const segments = generated[sourceIndex2][line];
353554
353984
  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);
353985
+ const memo8 = bySourceMemos[sourceIndex2];
353986
+ if (all4) return sliceGeneratedPositions(segments, memo8, line, column, bias);
353987
+ const index2 = traceSegmentInternal(segments, memo8, line, column, bias);
353558
353988
  if (index2 === -1) return GMapping(null, null);
353559
353989
  const segment = segments[index2];
353560
353990
  return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]);
@@ -363305,7 +363735,6 @@ function exportsOf(source3) {
363305
363735
  var CODE_LIMITS, packageOf;
363306
363736
  var init_source2 = __esm({
363307
363737
  "lib/code/source.ts"() {
363308
- "use strict";
363309
363738
  CODE_LIMITS = { modules: 100, sourceLength: 2e5, packages: 12 };
363310
363739
  packageOf = (spec) => spec.split("/").slice(0, spec.startsWith("@") ? 2 : 1).join("/");
363311
363740
  }
@@ -363322,7 +363751,7 @@ __export(compile_exports, {
363322
363751
  packageOf: () => packageOf
363323
363752
  });
363324
363753
  function compileSource(source3) {
363325
- const hit = memo6.get(source3);
363754
+ const hit = memo7.get(source3);
363326
363755
  if (hit) return hit;
363327
363756
  let out;
363328
363757
  try {
@@ -363332,8 +363761,8 @@ function compileSource(source3) {
363332
363761
  } catch (e) {
363333
363762
  out = { error: e instanceof Error ? e.message : String(e), imports: [] };
363334
363763
  }
363335
- if (memo6.size > 200) memo6.delete(memo6.keys().next().value);
363336
- memo6.set(source3, out);
363764
+ if (memo7.size > 200) memo7.delete(memo7.keys().next().value);
363765
+ memo7.set(source3, out);
363337
363766
  return out;
363338
363767
  }
363339
363768
  function compileModule(module2) {
@@ -363345,7 +363774,7 @@ function compileModule(module2) {
363345
363774
  if (relative5) return { imports: out.imports, error: `"${relative5}": a module cannot import another file. Put the code it needs in this module.` };
363346
363775
  return out;
363347
363776
  }
363348
- var import_sucrase, BUILT_IN, memo6;
363777
+ var import_sucrase, BUILT_IN, memo7;
363349
363778
  var init_compile2 = __esm({
363350
363779
  "lib/code/compile.ts"() {
363351
363780
  "use strict";
@@ -363353,7 +363782,7 @@ var init_compile2 = __esm({
363353
363782
  init_source2();
363354
363783
  init_source2();
363355
363784
  BUILT_IN = ["react", "react/jsx-runtime", "react-dom"];
363356
- memo6 = /* @__PURE__ */ new Map();
363785
+ memo7 = /* @__PURE__ */ new Map();
363357
363786
  }
363358
363787
  });
363359
363788
 
@@ -365535,7 +365964,7 @@ async function runAnimationExport(format, args2, ctx2) {
365535
365964
  try {
365536
365965
  stats = await exportAnimation2(renderer, doc2, spec, dest, {
365537
365966
  signal: ctx2.signal,
365538
- onProgress: (p2) => ctx2.progress?.(p2.done, p2.total, p2.phase === "palette" ? "Choosing colours" : p2.phase === "finishing" ? "Finishing" : "Rendering frames")
365967
+ onProgress: (p2) => ctx2.progress?.(p2.done, p2.total, p2.phase === "palette" ? "Choosing colors" : p2.phase === "finishing" ? "Finishing" : "Rendering frames")
365539
365968
  });
365540
365969
  } catch (e) {
365541
365970
  if (e instanceof Error && e.name === "AbortError") throw new ToolError("Export cancelled.");
@@ -367481,7 +367910,7 @@ function carryLinked(before, after) {
367481
367910
  });
367482
367911
  return changed ? { ...after, audio } : after;
367483
367912
  }
367484
- var isAudio, startOf, endOf, seq7, linkId;
367913
+ var isAudio, startOf, endOf, seq8, linkId;
367485
367914
  var init_links2 = __esm({
367486
367915
  "lib/motion/links.ts"() {
367487
367916
  init_audio_clips();
@@ -367491,8 +367920,8 @@ var init_links2 = __esm({
367491
367920
  isAudio = (c2) => "mediaHash" in c2 && "lane" in c2 && typeof c2.lane === "number";
367492
367921
  startOf = (c2) => c2.start;
367493
367922
  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)}`;
367923
+ seq8 = 0;
367924
+ linkId = () => `ln-${Date.now().toString(36)}-${(seq8++).toString(36)}`;
367496
367925
  }
367497
367926
  });
367498
367927
 
@@ -368213,8 +368642,6 @@ var init_motion2 = __esm({
368213
368642
  run: async (args2, ctx2) => {
368214
368643
  const comp = args2.frame ? null : compositionOr(ctx2.doc(), args2.id);
368215
368644
  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
368645
  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
368646
  const max3 = args2.kind === "voice" ? AUDIO_LIMITS.maxScriptChars : AUDIO_LIMITS.maxPromptChars;
368220
368647
  if (args2.prompt.length > max3) throw new ToolError(`That ${args2.kind === "voice" ? "script" : "description"} is over ${max3} characters.`);
@@ -368847,8 +369274,18 @@ function applyOne(doc2, comp, op4) {
368847
369274
  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
369275
  }
368849
369276
  case "angle": {
368850
- const ref3 = findClip(comp, clipOr2(op4.clip));
369277
+ let ref3 = findClip(comp, clipOr2(op4.clip));
368851
369278
  if (!ref3 || ref3.kind !== "layer" || ref3.clip.kind !== "sequence") throw new ToolError("Switch angles on a multicam clip.");
369279
+ if (op4.at !== void 0) {
369280
+ const [a0, b0] = clipRange(ref3);
369281
+ if (op4.at < a0 - 0.5 || op4.at >= b0 - 0.5) {
369282
+ const track3 = ref3.clip.track, seq9 = ref3.clip.sequenceId;
369283
+ const there = (comp.layers ?? []).find((l) => l.track === track3 && l.kind === "sequence" && l.sequenceId === seq9 && l.start <= op4.at && layerEnd(l) > op4.at);
369284
+ if (!there) throw new ToolError("That multicam clip is not playing there.");
369285
+ ref3 = findClip(comp, there.id);
369286
+ }
369287
+ }
369288
+ if (ref3.kind !== "layer") throw new ToolError("Switch angles on a multicam clip.");
368852
369289
  let next2 = comp, target2 = ref3.clip.id;
368853
369290
  const [a, b] = clipRange(ref3);
368854
369291
  if (op4.at !== void 0 && op4.at > a + 0.5 && op4.at < b - 0.5) {
@@ -368883,6 +369320,39 @@ function applyOne(doc2, comp, op4) {
368883
369320
  const a = Math.max(0, Math.min(end - 1, op4.in ?? 0)), b = Math.max(a + 1, Math.min(end, op4.out ?? end));
368884
369321
  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
369322
  }
369323
+ case "shaders":
369324
+ return editVisualClip(comp, clipOr2(op4.clip), (c2) => {
369325
+ let list2 = op4.clear ? [] : [...c2.shaders ?? []];
369326
+ if (op4.add) {
369327
+ try {
369328
+ list2.push({ ...clipShaderFromPreset(op4.add), ...op4.name ? { name: op4.name } : {} });
369329
+ } catch (e) {
369330
+ throw new ToolError(e instanceof Error ? e.message : String(e));
369331
+ }
369332
+ }
369333
+ if (op4.graph) {
369334
+ const g = op4.graph;
369335
+ if (!readsPicture(g)) throw new ToolError("A clip effect graph needs an image node: it is what reads the clip.");
369336
+ list2.push({ id: `sh-${Date.now().toString(36)}-${list2.length}`, name: op4.name ?? "Shader", graph: g, enabled: true });
369337
+ }
369338
+ if (op4.set) {
369339
+ const s0 = op4.set;
369340
+ if (!list2.some((x2) => x2.id === s0.id)) throw new ToolError(`That clip has no shader effect "${s0.id}".`);
369341
+ 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 } : {} });
369342
+ }
369343
+ if (op4.remove) list2 = list2.filter((x2) => x2.id !== op4.remove);
369344
+ if (op4.move) {
369345
+ const i2 = list2.findIndex((x2) => x2.id === op4.move.id);
369346
+ if (i2 >= 0) {
369347
+ const [x2] = list2.splice(i2, 1);
369348
+ list2.splice(Math.min(op4.move.to, list2.length), 0, x2);
369349
+ }
369350
+ }
369351
+ const n = { ...c2 };
369352
+ if (list2.length) n.shaders = list2;
369353
+ else delete n.shaders;
369354
+ return n;
369355
+ });
368886
369356
  case "matte":
368887
369357
  return editVisualClip(comp, clipOr2(op4.clip), (c2) => {
368888
369358
  const n = { ...c2 };
@@ -369025,7 +369495,7 @@ function sequenceTracks(doc2, comp) {
369025
369495
  const video = Array.from({ length: videoTrackCount(comp) - 1 }, (_, i2) => i2).map((i2) => ({
369026
369496
  id: `V${i2 + 1}`,
369027
369497
  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) }))
369498
+ 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
369499
  }));
369030
369500
  const audio = Array.from({ length: lanes }, (_, i2) => ({
369031
369501
  id: `A${i2 + 1}`,
@@ -369123,6 +369593,7 @@ var init_sequence2 = __esm({
369123
369593
  init_audio_clips();
369124
369594
  init_audio_plan();
369125
369595
  init_titles();
369596
+ init_clip_shaders();
369126
369597
  init_transcriber();
369127
369598
  init_captions();
369128
369599
  init_lut();
@@ -369295,6 +369766,23 @@ var init_sequence2 = __esm({
369295
369766
  language: external_exports.string().optional(),
369296
369767
  clear: external_exports.boolean().optional().describe("Remove every caption.")
369297
369768
  }),
369769
+ external_exports.object({
369770
+ kind: external_exports.literal("shaders"),
369771
+ clip: external_exports.string().describe("A video clip on any track, or an adjustment layer (its shaders then run over every clip below)."),
369772
+ add: external_exports.string().optional().describe(`Add a built-in shader effect: ${CLIP_SHADER_PRESETS.map((p2) => p2.id).join(", ")}.`),
369773
+ 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."),
369774
+ name: external_exports.string().max(80).optional(),
369775
+ set: external_exports.object({
369776
+ id: external_exports.string().describe("The shader effect (from get_sequence)."),
369777
+ enabled: external_exports.boolean().optional(),
369778
+ name: external_exports.string().max(80).optional(),
369779
+ params: external_exports.record(external_exports.string(), external_exports.any()).optional().describe("Knob values by field name (as a shader fill's params)."),
369780
+ 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()
369781
+ }).optional(),
369782
+ remove: external_exports.string().optional(),
369783
+ move: external_exports.object({ id: external_exports.string(), to: external_exports.number().int().min(0) }).optional(),
369784
+ clear: external_exports.boolean().optional()
369785
+ }).describe("Shader effects on a clip: node graphs run over its whole frame."),
369298
369786
  external_exports.object({
369299
369787
  kind: external_exports.literal("matte"),
369300
369788
  clip: external_exports.string().describe("A video clip on any track."),
@@ -369303,7 +369791,7 @@ var init_sequence2 = __esm({
369303
369791
  external_exports.object({
369304
369792
  kind: external_exports.literal("label"),
369305
369793
  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.")
369794
+ 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
369795
  }),
369308
369796
  external_exports.object({
369309
369797
  kind: external_exports.literal("speedRamp"),
@@ -369379,7 +369867,7 @@ var init_sequence2 = __esm({
369379
369867
  motion: "Motion",
369380
369868
  key: "Keyframe",
369381
369869
  duplicate: "Duplicate",
369382
- label: "Colour label",
369870
+ label: "Color label",
369383
369871
  effects: "Effects",
369384
369872
  matte: "Track matte",
369385
369873
  captions: "Captions",
@@ -369389,6 +369877,7 @@ var init_sequence2 = __esm({
369389
369877
  replace: "Replace clip",
369390
369878
  fit: "Scale to frame",
369391
369879
  angle: "Multicam angle",
369880
+ shaders: "Shader effects",
369392
369881
  addAdjustment: "Adjustment layer",
369393
369882
  speedRamp: "Speed ramp",
369394
369883
  speedKey: "Speed key",
@@ -369421,7 +369910,7 @@ var init_sequence2 = __esm({
369421
369910
  ui: { label: "Edit sequence", palette: false },
369422
369911
  agent: {
369423
369912
  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."
369913
+ 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
369914
  }
369426
369915
  },
369427
369916
  run: (args2, ctx2) => {
@@ -370216,7 +370705,7 @@ var init_motion_keys = __esm({
370216
370705
  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
370706
  signal: external_exports.enum(SIGNAL_IDS).optional().describe(`audio: what it follows \u2014 ${AUDIO_SIGNAL_OPTIONS.map((o) => `${o.signal} (${o.hint})`).join("; ")}.`),
370218
370707
  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).")
370708
+ 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
370709
  }),
370221
370710
  external_exports.object({ op: external_exports.literal("remove"), behaviour: behaviourId }),
370222
370711
  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 +370756,7 @@ var init_motion_keys = __esm({
370267
370756
  switch (op4.op) {
370268
370757
  case "add": {
370269
370758
  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.`);
370759
+ 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
370760
  const ids2 = new Set(withModifierIds(track3?.modifiers ?? []).map((x2) => x2.id));
370272
370761
  next2 = addModifier(track3, m);
370273
370762
  made = next2.modifiers.find((x2) => !ids2.has(x2.id))?.id;
@@ -370379,7 +370868,7 @@ var init_motion_keys = __esm({
370379
370868
  seed: external_exports.number().int().min(0).max(2 ** 31 - 1).optional(),
370380
370869
  distribution: curveSchema.optional().describe("Spread the offsets along a curve instead of evenly.")
370381
370870
  }).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.")
370871
+ label: external_exports.enum(TIMELINE_COLOR_IDS).nullable().optional().describe("The row's color label in the timeline; null removes it.")
370383
370872
  });
370384
370873
  motionSetLayerTiming = defineCommand({
370385
370874
  id: "motion.setLayerTiming",
@@ -370394,7 +370883,7 @@ var init_motion_keys = __esm({
370394
370883
  ui: { label: "Set layer timing", palette: false },
370395
370884
  agent: {
370396
370885
  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."
370886
+ 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
370887
  }
370399
370888
  },
370400
370889
  run: (args2, ctx2) => {
@@ -370717,7 +371206,7 @@ var init_motion_rich = __esm({
370717
371206
  ui: { label: "Edit 3D scene", palette: false },
370718
371207
  agent: {
370719
371208
  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."
371209
+ 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
371210
  }
370722
371211
  },
370723
371212
  run: (args2, ctx2) => {
@@ -370827,7 +371316,7 @@ var init_motion_rich = __esm({
370827
371316
  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
371317
  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
371318
  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).`)
371319
+ 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
371320
  });
370832
371321
  motionSetPlayback = defineCommand({
370833
371322
  id: "motion.setPlayback",
@@ -370906,7 +371395,7 @@ var init_motion_rich = __esm({
370906
371395
  op: external_exports.literal("bindLayer"),
370907
371396
  layer: external_exports.string().describe("A layer inside the component."),
370908
371397
  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.")
371398
+ 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
371399
  }).describe("Make a layer property an input: each instance's value of the property plays there (a keyed path too).")
370911
371400
  ]);
370912
371401
  motionEditComponentProperty = defineCommand({
@@ -370983,7 +371472,7 @@ var init_motion_rich = __esm({
370983
371472
  });
370984
371473
  SHADER_NAMES = SHADER_PRESETS.map((p2) => p2.name);
370985
371474
  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]}.');
371475
+ 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
371476
  motionSetShaderFill = defineCommand({
370988
371477
  id: "motion.setShaderFill",
370989
371478
  title: "Set a shader fill",
@@ -371057,7 +371546,7 @@ var init_motion_rich = __esm({
371057
371546
  }
371058
371547
  const comps = paramComponents(p2);
371059
371548
  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(", ")}}`}.`);
371549
+ if (!obj2 || !comps.every((c2) => typeof obj2[c2] === "number")) throw new ToolError(`${name2} takes ${p2.color ? "a color" : `{${comps.join(", ")}}`}.`);
371061
371550
  values3[name2] = Object.fromEntries(comps.map((c2) => [c2, obj2[c2]]));
371062
371551
  }
371063
371552
  fills[index2] = { ...fill, shaderParams: values3 };
@@ -371452,7 +371941,7 @@ function portValueOf(raw, type, what) {
371452
371941
  }
371453
371942
  const obj2 = typeof raw === "string" ? parseHex(raw) : typeof raw === "object" ? raw : null;
371454
371943
  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(", ")}}`}.`);
371944
+ 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
371945
  return Object.fromEntries(comps.map((c2) => [c2, obj2[c2]]));
371457
371946
  }
371458
371947
  function closesLoop(graph, from2, to) {
@@ -371617,7 +372106,7 @@ var init_shader_graph2 = __esm({
371617
372106
  init_types5();
371618
372107
  MAX_GRAPH_NODES = 200;
371619
372108
  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]}.');
372109
+ 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
372110
  point = { x: external_exports.number().finite(), y: external_exports.number().finite() };
371622
372111
  PRESET_IDS3 = SHADER_PRESETS.map((p2) => p2.id);
371623
372112
  op3 = external_exports.discriminatedUnion("op", [
@@ -373452,6 +373941,7 @@ var init_source_monitor = __esm({
373452
373941
  var storeOpsSeam;
373453
373942
  var init_seams = __esm({
373454
373943
  "lib/commands/seams.ts"() {
373944
+ "use strict";
373455
373945
  storeOpsSeam = (st3) => ({
373456
373946
  booleanOperation: (op4) => st3().booleanOperation(op4),
373457
373947
  flatten: () => st3().flattenSelection(),
@@ -380372,11 +380862,11 @@ function syncPluginAgentTools(installed4) {
380372
380862
  }
380373
380863
  function createToolChannel(send, label3) {
380374
380864
  const pending8 = /* @__PURE__ */ new Map();
380375
- let seq8 = 0;
380865
+ let seq9 = 0;
380376
380866
  return {
380377
380867
  call(tool2, args2, options = {}) {
380378
380868
  if (options.signal?.aborted) return Promise.reject(new ToolError(`${label3}: ${tool2} was stopped`, "failed"));
380379
- const callId = `t${++seq8}`;
380869
+ const callId = `t${++seq9}`;
380380
380870
  return new Promise((resolve7, reject) => {
380381
380871
  const done = () => {
380382
380872
  pending8.delete(callId);
@@ -380952,14 +381442,14 @@ var init_import = __esm({
380952
381442
  if (Array.isArray(L.ef) && L.ef.length) this.notes.add(`Layer effects are not imported (\u201C${layer2.nm}\u201D).`);
380953
381443
  if (L.tm) this.notes.add(`Time remapping is not imported (\u201C${layer2.nm}\u201D).`);
380954
381444
  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);
381445
+ const chain5 = [];
381446
+ 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
381447
  let into = parentId;
380958
381448
  let offset = shift;
380959
- for (const p2 of chain3) {
381449
+ for (const p2 of chain5) {
380960
381450
  const wrap3 = createFrame({ name: `${p2.nm} (parent)`, x: 0, y: 0, width: 1, height: 1, fills: [], clipsContent: false });
380961
381451
  this.add(wrap3, into);
380962
- const span4 = p2 === chain3[0] ? this.span(layer2.ip, layer2.op, shift, path) : void 0;
381452
+ const span4 = p2 === chain5[0] ? this.span(layer2.ip, layer2.op, shift, path) : void 0;
380963
381453
  if (span4) wrap3.motion = { tracks: {}, span: span4 };
380964
381454
  const st4 = p2.st ?? 0;
380965
381455
  if (st4 - offset) wrap3.motion = { ...wrap3.motion ?? { tracks: {} }, timeOffset: this.ms(st4 - offset) };
@@ -381300,7 +381790,7 @@ var init_import = __esm({
381300
381790
  if (o.keys) this.notes.add("Stroke opacity keys are not imported.");
381301
381791
  } else if (s.ty === "gf" || s.ty === "gs") {
381302
381792
  if (s.ty === "gs") {
381303
- this.notes.add("Gradient strokes are imported as solid strokes in their first colour.");
381793
+ this.notes.add("Gradient strokes are imported as solid strokes in their first color.");
381304
381794
  }
381305
381795
  const g = s.g;
381306
381796
  const gk = this.read(g.k, [], shift);
@@ -415036,7 +415526,7 @@ function checkDesign(doc2, roots) {
415036
415526
  }
415037
415527
  for (const [kitName, kit] of Object.entries(REVIEW_KITS)) {
415038
415528
  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.` });
415529
+ 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
415530
  }
415041
415531
  const walkInst = (nid) => {
415042
415532
  const n = doc2.nodes[nid];
@@ -415216,7 +415706,7 @@ var init_design_script = __esm({
415216
415706
  expose: {
415217
415707
  agent: {
415218
415708
  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."
415709
+ 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
415710
  }
415221
415711
  },
415222
415712
  run: async (args2, ctx2) => {
@@ -415792,7 +416282,7 @@ How the gallery's designs were decided, in order. Make every decision yourself;
415792
416282
  8. **Report** what is still not right and what you did not look at.`;
415793
416283
  REFERENCE_TOPICS = [
415794
416284
  { 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 },
416285
+ { id: "color-type", title: "Color and type", summary: "brand roles, palette, text styles, fills, gradients, shaders, effects", body: COLOR_TYPE },
415796
416286
  { id: "layout", title: "Layers and layout", summary: "flowSheet, stacks, frames, text, shapes, vectors and path helpers, photos, patch", body: LAYOUT2 },
415797
416287
  { id: "components", title: "Components, variants and interaction", summary: "components and props, variant sets, variables and switches, prototype links", body: COMPONENTS },
415798
416288
  { id: "motion", title: "Motion and music", summary: "timeline, music beds, cues and presets, counters, swaps, keys, behaviours", body: MOTION },
@@ -415847,7 +416337,7 @@ var init_design_reference = __esm({
415847
416337
  agent: {
415848
416338
  name: "read_design_reference",
415849
416339
  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."
416340
+ 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
416341
  }
415852
416342
  },
415853
416343
  run: async (args2) => {
@@ -415914,7 +416404,7 @@ ${lines2.slice(from2, err2.line + 1).map((l, i2) => `${from2 + i2 + 1 === err2.l
415914
416404
  expose: {
415915
416405
  agent: {
415916
416406
  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."
416407
+ 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
416408
  }
415919
416409
  },
415920
416410
  run: async (args2, ctx2) => {
@@ -417654,6 +418144,7 @@ function registerBuiltinCommands() {
417654
418144
  var builtinCommands, uiOnlyCommands;
417655
418145
  var init_builtin4 = __esm({
417656
418146
  "lib/commands/builtin.ts"() {
418147
+ "use strict";
417657
418148
  init_registry();
417658
418149
  init_node();
417659
418150
  init_node();
@@ -417966,6 +418457,7 @@ function shaderTextureDims(width, height) {
417966
418457
  }
417967
418458
  function wrapUserCode(userCode) {
417968
418459
  const params2 = reflectShader(userCode).size > 0;
418460
+ const image = readsImage(userCode);
417969
418461
  return `
417970
418462
  struct ShaderUniforms {
417971
418463
  resolution: vec2<f32>,
@@ -417973,7 +418465,14 @@ struct ShaderUniforms {
417973
418465
  _pad: f32,
417974
418466
  };
417975
418467
  @group(0) @binding(0) var<uniform> u: ShaderUniforms;
417976
- ${params2 ? "@group(0) @binding(1) var<uniform> p: Params;" : ""}
418468
+ ${params2 ? "@group(0) @binding(1) var<uniform> p: Params;" : ""}${image ? `
418469
+ @group(0) @binding(2) var src_tex: texture_2d<f32>;
418470
+ @group(0) @binding(3) var src_samp: sampler;
418471
+ // The source picture (a clip's frame) at uv, 0\u20261 from the top left; transparent outside it.
418472
+ fn image_at(uv: vec2<f32>) -> vec4<f32> {
418473
+ let inside = all(uv >= vec2<f32>(0.0)) && all(uv <= vec2<f32>(1.0));
418474
+ return select(vec4<f32>(0.0), textureSampleLevel(src_tex, src_samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0), inside);
418475
+ }` : ""}
417977
418476
  // \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
418477
  ${userCode}
417979
418478
  // \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 +418503,7 @@ fn fs_main(in: VOut) -> @location(0) vec4<f32> {
418004
418503
  }
418005
418504
  `;
418006
418505
  }
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;
418506
+ 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
418507
  var init_shader_fill = __esm({
418009
418508
  "lib/engine/shader-fill.ts"() {
418010
418509
  init_shader_params();
@@ -418017,8 +418516,10 @@ var init_shader_fill = __esm({
418017
418516
  MAX_SIZES_PER_SHADER = 4;
418018
418517
  SWEEP_IDLE_MS = 1e4;
418019
418518
  SWEEP_EVERY_MS = 2e3;
418519
+ readsImage = (code) => /\bimage_at\s*\(/.test(code);
418020
418520
  shaderTextureSize = (v) => Math.max(MIN_SIZE, Math.min(MAX_SIZE, Math.round(v) || MIN_SIZE));
418021
418521
  USER_CODE_OFFSET = wrapUserCode("").split("\n").findIndex((l) => l.startsWith("// \u2500\u2500 user code")) + 1;
418522
+ userCodeOffset = (code) => readsImage(code) ? wrapUserCode(code).split("\n").findIndex((l) => l.startsWith("// \u2500\u2500 user code")) + 1 : USER_CODE_OFFSET;
418022
418523
  ShaderFillManager = class {
418023
418524
  ctx;
418024
418525
  pipelines = /* @__PURE__ */ new Map();
@@ -418048,6 +418549,18 @@ var init_shader_fill = __esm({
418048
418549
  }
418049
418550
  return this.transparentTex;
418050
418551
  }
418552
+ sampler = null;
418553
+ /** The bind group: the uniforms, the params, and (for a shader that reads one) the source picture and its sampler. */
418554
+ bindGroupFor(pipeline, uniformBuffer, paramsBuffer, code, source3) {
418555
+ const { device } = this.ctx;
418556
+ const entries4 = [{ binding: 0, resource: { buffer: uniformBuffer } }];
418557
+ if (paramsBuffer) entries4.push({ binding: 1, resource: { buffer: paramsBuffer } });
418558
+ if (readsImage(code)) {
418559
+ this.sampler ??= device.createSampler({ magFilter: "linear", minFilter: "linear", addressModeU: "clamp-to-edge", addressModeV: "clamp-to-edge" });
418560
+ entries4.push({ binding: 2, resource: (source3 ?? this.getTransparent()).createView() }, { binding: 3, resource: this.sampler });
418561
+ }
418562
+ return device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: entries4 });
418563
+ }
418051
418564
  onError(cb) {
418052
418565
  this.errorListeners.add(cb);
418053
418566
  return () => this.errorListeners.delete(cb);
@@ -418074,7 +418587,8 @@ var init_shader_fill = __esm({
418074
418587
  try {
418075
418588
  shaderModule = device.createShaderModule({ code: wrapUserCode(code) });
418076
418589
  const uniform = (binding) => ({ binding, visibility: GPUShaderStage.FRAGMENT, buffer: { type: "uniform" } });
418077
- const bindGroupLayout = device.createBindGroupLayout({ entries: reflection.size ? [uniform(0), uniform(1)] : [uniform(0)] });
418590
+ const imageEntries = readsImage(code) ? [{ binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float" } }, { binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } }] : [];
418591
+ const bindGroupLayout = device.createBindGroupLayout({ entries: [...reflection.size ? [uniform(0), uniform(1)] : [uniform(0)], ...imageEntries] });
418078
418592
  pipeline = device.createRenderPipeline({
418079
418593
  layout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),
418080
418594
  vertex: { module: shaderModule, entryPoint: "vs_main" },
@@ -418091,7 +418605,7 @@ var init_shader_fill = __esm({
418091
418605
  const info2 = shaderModule?.getCompilationInfo ? shaderModule.getCompilationInfo().catch(() => null) : Promise.resolve(null);
418092
418606
  const scope = device.popErrorScope().catch(() => null);
418093
418607
  entry.ready = Promise.all([info2, scope]).then(([info3, err2]) => {
418094
- const mapped = info3 ? mapCompilerMessages(info3.messages, USER_CODE_OFFSET, code.split("\n").length) : [];
418608
+ const mapped = info3 ? mapCompilerMessages(info3.messages, userCodeOffset(code), code.split("\n").length) : [];
418095
418609
  const failed2 = mapped.some((d) => d.severity === "error");
418096
418610
  entry.diagnostics = failed2 ? mapped : err2 ? [...mapped, ...plainDiagnostics([err2.message])] : thrown ? [...mapped, ...diagnostics] : mapped;
418097
418611
  entry.settled = true;
@@ -418128,13 +418642,14 @@ var init_shader_fill = __esm({
418128
418642
  * allocated for a new size; a new params value re-renders the entry the last frame used for this size.
418129
418643
  * Returns null when the shader failed to compile (caller falls back).
418130
418644
  */
418131
- getTexture(code, width, height, time4, params2) {
418645
+ getTexture(code, width, height, time4, params2, source3, slot2) {
418132
418646
  if (!code) return null;
418133
418647
  if (performance.now() - this.sweptAt > SWEEP_EVERY_MS) this.sweep();
418134
418648
  const compiled2 = this.getPipeline(code);
418135
418649
  if (!compiled2.pipeline) return this.getTransparent();
418136
418650
  const [w, h] = shaderTextureDims(width, height);
418137
- const { key: key5, prefix } = shaderFillKey(code, w, h, params2);
418651
+ const base = shaderFillKey(code, w, h, params2);
418652
+ const key5 = slot2 ? `${base.key}#${slot2}` : base.key, prefix = slot2 ? `${base.prefix}#${slot2}` : base.prefix;
418138
418653
  const packed2 = packShaderParams(code, params2);
418139
418654
  const { device } = this.ctx;
418140
418655
  const now3 = performance.now();
@@ -418166,14 +418681,16 @@ var init_shader_fill = __esm({
418166
418681
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
418167
418682
  });
418168
418683
  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 };
418684
+ const bindGroup = this.bindGroupFor(compiled2.pipeline, uniformBuffer, paramsBuffer, code, source3);
418685
+ entry = { code, texture, width: w, height: h, bindGroup, uniformBuffer, paramsBuffer, animated: reflectShader(code).animated, renderedAt: null, lastUsed: now3, source: source3 ?? null };
418174
418686
  this.entries.set(key5, entry);
418175
418687
  }
418176
418688
  entry.lastUsed = now3;
418689
+ if (readsImage(code) && (source3 ?? null) !== (entry.source ?? null)) {
418690
+ entry.bindGroup = this.bindGroupFor(compiled2.pipeline, entry.uniformBuffer, entry.paramsBuffer, code, source3);
418691
+ entry.source = source3 ?? null;
418692
+ entry.renderedAt = null;
418693
+ }
418177
418694
  if (entry.renderedAt !== null && (!entry.animated || entry.renderedAt === time4)) return entry.texture;
418178
418695
  entry.renderedAt = time4;
418179
418696
  device.queue.writeBuffer(entry.uniformBuffer, 0, new Float32Array([w, h, time4, 0]));
@@ -425259,7 +425776,7 @@ init_resources();
425259
425776
  init_desktop();
425260
425777
  init_hypery();
425261
425778
  import { createInterface } from "node:readline";
425262
- var VERSION2 = "0.56.5";
425779
+ var VERSION2 = "0.57.1";
425263
425780
  var HELP = `popcraft ${VERSION2} \u2014 the PopCraft command line
425264
425781
 
425265
425782
  Files (headless, on .popcraft files):