@popcraft/cli 0.56.4 → 0.57.0

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