pixi-effects 0.26.3 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +8 -10
- package/ai/CHAT.md +1 -1
- package/ai/chat-template.html +4 -6
- package/dist/{Base-CpdDs4HT.d.ts → Base-CVezIEdo.d.ts} +2 -4
- package/dist/{Base-TbBhHPrG.d.cts → Base-DzC3i919.d.cts} +2 -4
- package/dist/Composition-4TYDRRRY.js +7 -0
- package/dist/{Composition-3O7L2VL5.js.map → Composition-4TYDRRRY.js.map} +1 -1
- package/dist/Composition-QCOWQSDB.cjs +16 -0
- package/dist/{Composition-EE3KEE2L.cjs.map → Composition-QCOWQSDB.cjs.map} +1 -1
- package/dist/Controller.d.cts +2 -3
- package/dist/Controller.d.ts +2 -3
- package/dist/{Movie-BkP82KXS.d.ts → Movie-CQ0Nz62a.d.cts} +2 -3
- package/dist/{Movie-BWLLWRRe.d.cts → Movie-M9dKm9dI.d.ts} +2 -3
- package/dist/Presenter.d.cts +2 -3
- package/dist/Presenter.d.ts +2 -3
- package/dist/{blendModes-YV43K6E7.cjs → blendModes-HDOP6R7T.cjs} +5 -5
- package/dist/{blendModes-YV43K6E7.cjs.map → blendModes-HDOP6R7T.cjs.map} +1 -1
- package/dist/{blendModes-G3NOAU3T.js → blendModes-PAVTW3BO.js} +4 -4
- package/dist/{blendModes-G3NOAU3T.js.map → blendModes-PAVTW3BO.js.map} +1 -1
- package/dist/{chunk-TLYTYBWX.js → chunk-45QKLD6M.js} +9 -11
- package/dist/chunk-45QKLD6M.js.map +1 -0
- package/dist/{chunk-WMMZDPWK.js → chunk-CKTS6G6I.js} +7 -11
- package/dist/chunk-CKTS6G6I.js.map +1 -0
- package/dist/{chunk-IIDBEYQH.cjs → chunk-NDR2VQFV.cjs} +91 -95
- package/dist/chunk-NDR2VQFV.cjs.map +1 -0
- package/dist/{chunk-3DLYAPK7.cjs → chunk-P4GY3Z4G.cjs} +5 -5
- package/dist/{chunk-3DLYAPK7.cjs.map → chunk-P4GY3Z4G.cjs.map} +1 -1
- package/dist/{chunk-A225HYSY.cjs → chunk-RQMI7EJT.cjs} +968 -256
- package/dist/chunk-RQMI7EJT.cjs.map +1 -0
- package/dist/{chunk-FXAHNPBP.js → chunk-TGJACVLD.js} +948 -239
- package/dist/chunk-TGJACVLD.js.map +1 -0
- package/dist/{chunk-AXZUKNXF.js → chunk-TYWFKCPY.js} +4 -4
- package/dist/{chunk-AXZUKNXF.js.map → chunk-TYWFKCPY.js.map} +1 -1
- package/dist/{chunk-ECA2WNRX.cjs → chunk-ZMAD3KJU.cjs} +9 -11
- package/dist/chunk-ZMAD3KJU.cjs.map +1 -0
- package/dist/index.cjs +74 -95
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -14
- package/dist/index.d.ts +16 -14
- package/dist/index.js +20 -23
- package/dist/index.js.map +1 -1
- package/dist/loader.css +1 -1
- package/dist/three.cjs +6 -6
- package/dist/three.d.cts +2 -3
- package/dist/three.d.ts +2 -3
- package/dist/three.js +2 -2
- package/dist/{types-DSGwN5w1.d.cts → types-DUVefWiB.d.cts} +128 -3
- package/dist/{types-DSGwN5w1.d.ts → types-DUVefWiB.d.ts} +128 -3
- package/docs/api.md +5 -1
- package/docs/dsl.md +13 -15
- package/llms-full.txt +24 -22
- package/llms.txt +1 -1
- package/package.json +3 -4
- package/skills/pixi-effects/SKILL.md +1 -1
- package/skills/pixi-effects/reference/cheatsheet.md +1 -1
- package/skills/pixi-effects/reference/pitfalls.md +3 -3
- package/skills/pixi-effects/reference/recipes.md +1 -1
- package/skills/pixi-effects/template.html +6 -8
- package/dist/Composition-3O7L2VL5.js +0 -7
- package/dist/Composition-EE3KEE2L.cjs +0 -16
- package/dist/chunk-A225HYSY.cjs.map +0 -1
- package/dist/chunk-ECA2WNRX.cjs.map +0 -1
- package/dist/chunk-FXAHNPBP.js.map +0 -1
- package/dist/chunk-IIDBEYQH.cjs.map +0 -1
- package/dist/chunk-TLYTYBWX.js.map +0 -1
- package/dist/chunk-WMMZDPWK.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,41 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
3
|
+
var chunkNDR2VQFV_cjs = require('./chunk-NDR2VQFV.cjs');
|
|
4
|
+
var chunkRQMI7EJT_cjs = require('./chunk-RQMI7EJT.cjs');
|
|
5
|
+
var chunkP4GY3Z4G_cjs = require('./chunk-P4GY3Z4G.cjs');
|
|
6
|
+
var chunkZMAD3KJU_cjs = require('./chunk-ZMAD3KJU.cjs');
|
|
7
7
|
var chunkTWZNOUM7_cjs = require('./chunk-TWZNOUM7.cjs');
|
|
8
|
-
var
|
|
9
|
-
var gsap = require('gsap');
|
|
10
|
-
var PixiPlugin = require('gsap/PixiPlugin');
|
|
8
|
+
var pixi_js = require('pixi.js');
|
|
11
9
|
var mediabunny = require('mediabunny');
|
|
12
10
|
|
|
13
|
-
function _interopNamespace(e) {
|
|
14
|
-
if (e && e.__esModule) return e;
|
|
15
|
-
var n = Object.create(null);
|
|
16
|
-
if (e) {
|
|
17
|
-
Object.keys(e).forEach(function (k) {
|
|
18
|
-
if (k !== 'default') {
|
|
19
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
get: function () { return e[k]; }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
n.default = e;
|
|
28
|
-
return Object.freeze(n);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
var PIXI__namespace = /*#__PURE__*/_interopNamespace(PIXI);
|
|
32
|
-
|
|
33
11
|
var registered = false;
|
|
34
12
|
function ensureLoadersRegistered(audioContext) {
|
|
35
13
|
if (registered) return;
|
|
36
14
|
registered = true;
|
|
37
|
-
|
|
38
|
-
extension: { type:
|
|
15
|
+
pixi_js.extensions.add({
|
|
16
|
+
extension: { type: pixi_js.ExtensionType.LoadParser, name: "pixi-effects-audio" },
|
|
39
17
|
test: (url) => /\.(mp3|wav|ogg)$/i.test(url),
|
|
40
18
|
async load(url) {
|
|
41
19
|
const res = await fetch(url);
|
|
@@ -45,8 +23,8 @@ function ensureLoadersRegistered(audioContext) {
|
|
|
45
23
|
return { audioBuffer, duration: audioBuffer.duration };
|
|
46
24
|
}
|
|
47
25
|
});
|
|
48
|
-
|
|
49
|
-
extension: { type:
|
|
26
|
+
pixi_js.extensions.add({
|
|
27
|
+
extension: { type: pixi_js.ExtensionType.LoadParser, name: "pixi-effects-video", priority: 1 },
|
|
50
28
|
test: (url) => /\.(mp4|webm|mov|mkv)$/i.test(url),
|
|
51
29
|
async load(url) {
|
|
52
30
|
const blob = await fetch(url).then((r) => r.blob());
|
|
@@ -83,8 +61,8 @@ function ensureLoadersRegistered(audioContext) {
|
|
|
83
61
|
async function loadAssetBundle(assets, audioContext, onProgress) {
|
|
84
62
|
ensureLoadersRegistered(audioContext);
|
|
85
63
|
const bundle = assets.map((a) => ({ alias: a.name, src: a.src }));
|
|
86
|
-
|
|
87
|
-
return await
|
|
64
|
+
pixi_js.Assets.addBundle("pixi-effects", bundle);
|
|
65
|
+
return await pixi_js.Assets.loadBundle("pixi-effects", onProgress);
|
|
88
66
|
}
|
|
89
67
|
|
|
90
68
|
// src/core/audioRemap.ts
|
|
@@ -1267,7 +1245,7 @@ fn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {
|
|
|
1267
1245
|
return raw * reveal;
|
|
1268
1246
|
}
|
|
1269
1247
|
`;
|
|
1270
|
-
var TransitionMaskFilter = class extends
|
|
1248
|
+
var TransitionMaskFilter = class extends pixi_js.Filter {
|
|
1271
1249
|
constructor(options = {}) {
|
|
1272
1250
|
const mode = options.mode ?? "wipe-left";
|
|
1273
1251
|
const smoothing = options.smoothing ?? 0.02;
|
|
@@ -1276,17 +1254,17 @@ var TransitionMaskFilter = class extends PIXI.Filter {
|
|
|
1276
1254
|
const scale = options.scale ?? 30;
|
|
1277
1255
|
const seed = options.seed ?? 0;
|
|
1278
1256
|
super({
|
|
1279
|
-
glProgram:
|
|
1280
|
-
vertex:
|
|
1257
|
+
glProgram: pixi_js.GlProgram.from({
|
|
1258
|
+
vertex: pixi_js.defaultFilterVert,
|
|
1281
1259
|
fragment: GL_FRAGMENT,
|
|
1282
1260
|
name: "transition-mask-filter"
|
|
1283
1261
|
}),
|
|
1284
|
-
gpuProgram:
|
|
1262
|
+
gpuProgram: pixi_js.GpuProgram.from({
|
|
1285
1263
|
vertex: { source: WGSL_SOURCE, entryPoint: "mainVertex" },
|
|
1286
1264
|
fragment: { source: WGSL_SOURCE, entryPoint: "mainFragment" }
|
|
1287
1265
|
}),
|
|
1288
1266
|
resources: {
|
|
1289
|
-
transitionUniforms: new
|
|
1267
|
+
transitionUniforms: new pixi_js.UniformGroup({
|
|
1290
1268
|
uProgress: { value: progress, type: "f32" },
|
|
1291
1269
|
uMode: { value: MODE_CODES[mode], type: "f32" },
|
|
1292
1270
|
uSmoothing: { value: smoothing, type: "f32" },
|
|
@@ -1413,19 +1391,19 @@ fn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {
|
|
|
1413
1391
|
if (lumaUniforms.uInvert > 0.5) { reveal = 1.0 - step(0.99, reveal); }
|
|
1414
1392
|
return raw * reveal;
|
|
1415
1393
|
}`;
|
|
1416
|
-
var LumaWipeFilter = class extends
|
|
1394
|
+
var LumaWipeFilter = class extends pixi_js.Filter {
|
|
1417
1395
|
_mapName;
|
|
1418
1396
|
_builtIn;
|
|
1419
1397
|
_resolved = false;
|
|
1420
1398
|
_warned = false;
|
|
1421
1399
|
constructor({ map, softness = 0.1, progress = 0, invert = false, flip = false }) {
|
|
1422
|
-
const t =
|
|
1400
|
+
const t = pixi_js.Texture.WHITE;
|
|
1423
1401
|
const mode = LUMA_MAPS.indexOf(map) + 1;
|
|
1424
1402
|
super({
|
|
1425
|
-
glProgram:
|
|
1426
|
-
gpuProgram:
|
|
1403
|
+
glProgram: pixi_js.GlProgram.from({ vertex: pixi_js.defaultFilterVert, fragment: GL, name: "pe-luma-wipe" }),
|
|
1404
|
+
gpuProgram: pixi_js.GpuProgram.from({ vertex: { source: WGSL, entryPoint: "mainVertex" }, fragment: { source: WGSL, entryPoint: "mainFragment" } }),
|
|
1427
1405
|
resources: {
|
|
1428
|
-
lumaUniforms: new
|
|
1406
|
+
lumaUniforms: new pixi_js.UniformGroup({
|
|
1429
1407
|
uProgress: { value: progress, type: "f32" },
|
|
1430
1408
|
uSoftness: { value: softness, type: "f32" },
|
|
1431
1409
|
uInvert: { value: invert ? 1 : 0, type: "f32" },
|
|
@@ -1447,7 +1425,7 @@ var LumaWipeFilter = class extends PIXI.Filter {
|
|
|
1447
1425
|
}
|
|
1448
1426
|
apply(fm, input, output, clear) {
|
|
1449
1427
|
if (!this._builtIn && !this._resolved) {
|
|
1450
|
-
const t =
|
|
1428
|
+
const t = pixi_js.Assets.get(this._mapName);
|
|
1451
1429
|
if (t) {
|
|
1452
1430
|
this.resources.uMap = t.source;
|
|
1453
1431
|
this.resources.uMapSampler = t.source.style;
|
|
@@ -1501,8 +1479,8 @@ function expandTransitions(spec) {
|
|
|
1501
1479
|
}
|
|
1502
1480
|
const transitions = out.transitions;
|
|
1503
1481
|
const sequences = out.sequences ?? [];
|
|
1504
|
-
const remap = out.duration !== void 0 ?
|
|
1505
|
-
const parentDuration = remap ?
|
|
1482
|
+
const remap = out.duration !== void 0 ? chunkRQMI7EJT_cjs.timeRemapOf(out) : null;
|
|
1483
|
+
const parentDuration = remap ? chunkRQMI7EJT_cjs.contentLength(remap, out.duration) : out.duration ?? Infinity;
|
|
1506
1484
|
const compW = out.width;
|
|
1507
1485
|
const compH = out.height;
|
|
1508
1486
|
const threeDByName = new Set(sequences.filter((s) => s.name && s.threeD).map((s) => s.name));
|
|
@@ -1570,16 +1548,16 @@ function expandTransitions(spec) {
|
|
|
1570
1548
|
if (toUses > 1) {
|
|
1571
1549
|
throw new Error(`pixi-effects: ${tag} sequence "${t.to}" is used as \`to\` in more than one transition`);
|
|
1572
1550
|
}
|
|
1573
|
-
const tStart =
|
|
1551
|
+
const tStart = chunkRQMI7EJT_cjs.resolveAt(t.at, parentDuration);
|
|
1574
1552
|
const tEnd = tStart + t.duration;
|
|
1575
1553
|
const fromSeq = fromEntry.seq;
|
|
1576
|
-
const fromStart =
|
|
1554
|
+
const fromStart = chunkRQMI7EJT_cjs.resolveAt(fromSeq.at, parentDuration);
|
|
1577
1555
|
const fromEnd = fromStart + (fromSeq.duration ?? parentDuration);
|
|
1578
1556
|
if (tStart < fromStart - EPS || tEnd > fromEnd + EPS) {
|
|
1579
1557
|
throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`from\` "${t.from}" (lives [${fromStart}, ${fromEnd}], so it ends at ${fromEnd})`);
|
|
1580
1558
|
}
|
|
1581
1559
|
const toSeq = toEntry.seq;
|
|
1582
|
-
const toStart =
|
|
1560
|
+
const toStart = chunkRQMI7EJT_cjs.resolveAt(toSeq.at, parentDuration);
|
|
1583
1561
|
const toEnd = toStart + (toSeq.duration ?? parentDuration);
|
|
1584
1562
|
if (tStart < toStart - EPS || tEnd > toEnd + EPS) {
|
|
1585
1563
|
throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`to\` "${t.to}" (lives [${toStart}, ${toEnd}], so it starts at ${toStart})`);
|
|
@@ -1639,7 +1617,7 @@ function wrapAsFullComposition(seq, compW, compH) {
|
|
|
1639
1617
|
delete inner.at;
|
|
1640
1618
|
delete inner.duration;
|
|
1641
1619
|
const m = inner.mask;
|
|
1642
|
-
const carriesMatte = m !== void 0 &&
|
|
1620
|
+
const carriesMatte = m !== void 0 && chunkNDR2VQFV_cjs.maskSourceOf(m).kind === "refs";
|
|
1643
1621
|
if (carriesMatte) delete inner.mask;
|
|
1644
1622
|
return {
|
|
1645
1623
|
...carriesMatte ? { mask: m } : {},
|
|
@@ -1941,9 +1919,9 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
|
|
|
1941
1919
|
onCanvas = inter === 0 && area > 0 ? "none" : inter >= area - 1e-6 ? "full" : "partial";
|
|
1942
1920
|
if (area === 0) onCanvas = "none";
|
|
1943
1921
|
}
|
|
1944
|
-
const keys =
|
|
1922
|
+
const keys = chunkZMAD3KJU_cjs.collectPropKeys(seq.spec);
|
|
1945
1923
|
const carried = carriers.some((c) => {
|
|
1946
|
-
const k =
|
|
1924
|
+
const k = chunkZMAD3KJU_cjs.collectPropKeys(c.spec);
|
|
1947
1925
|
return (c.spec.keyframes ?? []).length > 0 && (k.has("x") || k.has("y") || k.has("rotation") || k.has("scale"));
|
|
1948
1926
|
});
|
|
1949
1927
|
const moving = parentMoving || carried || (seq.spec.keyframes ?? []).length > 0 && (keys.has("x") || keys.has("y"));
|
|
@@ -1966,7 +1944,7 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
|
|
|
1966
1944
|
const group = parentScene ?? (name !== void 0 && blending.has(name) ? name : void 0);
|
|
1967
1945
|
if (group) scene.set(info, group);
|
|
1968
1946
|
if (zero || seq.showsNothingYet) scaledToNothing.add(info);
|
|
1969
|
-
if (seq instanceof
|
|
1947
|
+
if (seq instanceof chunkNDR2VQFV_cjs.CompositionSequence) walk2(seq, prefix + label + "/", insideThreeD || threeD, visible, group, moving, zero);
|
|
1970
1948
|
});
|
|
1971
1949
|
};
|
|
1972
1950
|
walk2(root, "", false, true);
|
|
@@ -2027,10 +2005,10 @@ function walk(comp, parentStart, parentEnd, depth, prefix, rows, transitions, lo
|
|
|
2027
2005
|
const start = parentStart + (seq.at ?? 0);
|
|
2028
2006
|
const end = Math.min(parentEnd, seq.duration !== void 0 ? start + seq.duration : parentEnd);
|
|
2029
2007
|
const span = end - start;
|
|
2030
|
-
const keys = (seq.spec.keyframes ?? []).map((kf) => round(start +
|
|
2008
|
+
const keys = (seq.spec.keyframes ?? []).map((kf) => round(start + chunkRQMI7EJT_cjs.resolveAt(kf.at, span))).sort((a, b) => a - b).slice(0, MAX_KEYS);
|
|
2031
2009
|
const row = { path: prefix + name, name, type: seq.spec.type, depth, start: round(start), end: round(end), keys, detail: detailOf(seq), ...local ? { local } : {} };
|
|
2032
2010
|
const inner = [];
|
|
2033
|
-
const isComp = seq instanceof
|
|
2011
|
+
const isComp = seq instanceof chunkNDR2VQFV_cjs.CompositionSequence;
|
|
2034
2012
|
if (isComp) {
|
|
2035
2013
|
const label = seq.remapLabel();
|
|
2036
2014
|
walk(seq, label ? 0 : start, label ? seq.contentSpan : end, depth + 1, prefix + name + "/", inner, transitions, label ? `${name} ${label}` : local);
|
|
@@ -2542,9 +2520,7 @@ function setLoaderProgress(loader, state) {
|
|
|
2542
2520
|
}
|
|
2543
2521
|
|
|
2544
2522
|
// src/core/Movie.ts
|
|
2545
|
-
|
|
2546
|
-
gsap.gsap.registerPlugin(PixiPlugin.PixiPlugin);
|
|
2547
|
-
PixiPlugin.PixiPlugin.registerPIXI(PIXI__namespace);
|
|
2523
|
+
pixi_js.extensions.add(pixi_js.CullerPlugin);
|
|
2548
2524
|
var Movie = class {
|
|
2549
2525
|
_events = {};
|
|
2550
2526
|
_initState = "idle";
|
|
@@ -2680,8 +2656,8 @@ var Movie = class {
|
|
|
2680
2656
|
this.stops = normalizeStops(options.composition?.stops, this.duration, this.frameRate);
|
|
2681
2657
|
this._posterFrame = poster.frame;
|
|
2682
2658
|
this.background = options.background ?? "#000000";
|
|
2683
|
-
this.timeline =
|
|
2684
|
-
this.timeline
|
|
2659
|
+
this.timeline = chunkRQMI7EJT_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
|
|
2660
|
+
chunkRQMI7EJT_cjs.lengthen(this.timeline, this.duration);
|
|
2685
2661
|
const baseAppOptions = {
|
|
2686
2662
|
width: this.width,
|
|
2687
2663
|
height: this.height,
|
|
@@ -2692,19 +2668,19 @@ var Movie = class {
|
|
|
2692
2668
|
preserveDrawingBuffer: true,
|
|
2693
2669
|
canvas: options.canvas
|
|
2694
2670
|
};
|
|
2695
|
-
this.app = new
|
|
2671
|
+
this.app = new pixi_js.Application();
|
|
2696
2672
|
try {
|
|
2697
2673
|
await this.app.init({ ...baseAppOptions, preference: "webgpu" });
|
|
2698
2674
|
} catch (err) {
|
|
2699
2675
|
console.warn("pixi-effects: WebGPU init failed, falling back to WebGL \u2014", err);
|
|
2700
|
-
this.app = new
|
|
2676
|
+
this.app = new pixi_js.Application();
|
|
2701
2677
|
await this.app.init({ ...baseAppOptions, preference: "webgl" });
|
|
2702
2678
|
}
|
|
2703
|
-
if (
|
|
2704
|
-
const root = new
|
|
2679
|
+
if (chunkP4GY3Z4G_cjs.usesAdvancedBlend(options.composition)) await chunkP4GY3Z4G_cjs.enableAdvancedBlend(this.app.renderer);
|
|
2680
|
+
const root = new pixi_js.Container();
|
|
2705
2681
|
root.cullable = true;
|
|
2706
2682
|
root.cullableChildren = true;
|
|
2707
|
-
root.cullArea = new
|
|
2683
|
+
root.cullArea = new pixi_js.Rectangle(0, 0, this.width, this.height);
|
|
2708
2684
|
this.app.stage.addChild(root);
|
|
2709
2685
|
this._rootContainer = root;
|
|
2710
2686
|
const audioContext = this._ensureAudioContext();
|
|
@@ -2740,7 +2716,7 @@ var Movie = class {
|
|
|
2740
2716
|
height: options.composition.height ?? this.height,
|
|
2741
2717
|
duration: options.composition.duration ?? this.duration
|
|
2742
2718
|
} : void 0;
|
|
2743
|
-
await
|
|
2719
|
+
await chunkRQMI7EJT_cjs.ensureFilterLibrary(seededComposition);
|
|
2744
2720
|
const userComposition = seededComposition ? expandTransitions(seededComposition) : void 0;
|
|
2745
2721
|
const rootSeqSpec = {
|
|
2746
2722
|
type: "composition",
|
|
@@ -2750,7 +2726,7 @@ var Movie = class {
|
|
|
2750
2726
|
...userComposition
|
|
2751
2727
|
};
|
|
2752
2728
|
if (userComposition) carryTransitionWindows(userComposition, rootSeqSpec);
|
|
2753
|
-
const composition = new
|
|
2729
|
+
const composition = new chunkNDR2VQFV_cjs.CompositionSequence(rootSeqSpec, null, rootShape);
|
|
2754
2730
|
lp.begin("build", countLayers(rootSeqSpec));
|
|
2755
2731
|
await composition.build();
|
|
2756
2732
|
this._rootSequence = composition;
|
|
@@ -2766,8 +2742,8 @@ var Movie = class {
|
|
|
2766
2742
|
if (this.audioBuffer) this._mixStats = limitMix(this.audioBuffer, audios);
|
|
2767
2743
|
}
|
|
2768
2744
|
this._audioSources = audios;
|
|
2769
|
-
this.timeline.progress(1).progress(0);
|
|
2770
2745
|
lp.begin("frames", 0);
|
|
2746
|
+
this.timeline.time(this._timeOf(0));
|
|
2771
2747
|
await this._awaitVideoFrames();
|
|
2772
2748
|
this._updateSpace();
|
|
2773
2749
|
this._renderNow();
|
|
@@ -3102,7 +3078,7 @@ var Movie = class {
|
|
|
3102
3078
|
if (!this._synced) this._rootSequence?.syncFrame();
|
|
3103
3079
|
this._synced = false;
|
|
3104
3080
|
this._feedTimeFilters();
|
|
3105
|
-
|
|
3081
|
+
pixi_js.Culler.shared.cull(app.stage, app.renderer.screen, false);
|
|
3106
3082
|
app.renderer.render({ container: app.stage });
|
|
3107
3083
|
}
|
|
3108
3084
|
_requireReady(what) {
|
|
@@ -3423,9 +3399,9 @@ function countLayers(spec) {
|
|
|
3423
3399
|
}
|
|
3424
3400
|
var BY = ["chars", "words", "lines"];
|
|
3425
3401
|
var ALIGN = ["left", "center", "right"];
|
|
3426
|
-
var widthOf = (text, style) =>
|
|
3402
|
+
var widthOf = (text, style) => pixi_js.CanvasTextMetrics.measureText(text, style).width;
|
|
3427
3403
|
function measureText(text, style = {}) {
|
|
3428
|
-
const m =
|
|
3404
|
+
const m = pixi_js.CanvasTextMetrics.measureText(text, new pixi_js.TextStyle(style));
|
|
3429
3405
|
return { width: m.width, height: m.height, lines: text.split("\n").length };
|
|
3430
3406
|
}
|
|
3431
3407
|
function splitText(text, style = {}, opts = {}) {
|
|
@@ -3447,8 +3423,8 @@ function splitText(text, style = {}, opts = {}) {
|
|
|
3447
3423
|
if (typeof v !== "number" || !Number.isFinite(v)) throw new Error(`splitText(): ${n} must be a number of pixels (e.g. ${n}: 640), got ${JSON.stringify(v)}: the pieces are placed by measuring, so an expression such as 'GW/2' cannot be used here. \`y\` is the top of the line.`);
|
|
3448
3424
|
}
|
|
3449
3425
|
if (text === "") return [];
|
|
3450
|
-
const ts = new
|
|
3451
|
-
const lineHeight =
|
|
3426
|
+
const ts = new pixi_js.TextStyle(style);
|
|
3427
|
+
const lineHeight = pixi_js.CanvasTextMetrics.measureText("M", ts).lineHeight ?? pixi_js.CanvasTextMetrics.measureText("M", ts).height;
|
|
3452
3428
|
const sentinel = widthOf("|", ts);
|
|
3453
3429
|
const out = [];
|
|
3454
3430
|
text.split("\n").forEach((line, lineNo) => {
|
|
@@ -3472,6 +3448,12 @@ function splitText(text, style = {}, opts = {}) {
|
|
|
3472
3448
|
return out;
|
|
3473
3449
|
}
|
|
3474
3450
|
|
|
3451
|
+
// src/presets/_ease.ts
|
|
3452
|
+
function parseEase2(name) {
|
|
3453
|
+
chunkRQMI7EJT_cjs.checkEase(name, "a preset");
|
|
3454
|
+
return chunkRQMI7EJT_cjs.parseEase(name);
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3475
3457
|
// src/presets/kenBurns.ts
|
|
3476
3458
|
var KEN_BURNS_KEYS = ["asset", "name", "at", "duration", "fit", "ease", "motion", "origin", "zoom", "direction", "angle", "from", "to"];
|
|
3477
3459
|
function kenBurns(opts) {
|
|
@@ -3584,10 +3566,6 @@ function kenBurns(opts) {
|
|
|
3584
3566
|
function clamp(v, lo, hi) {
|
|
3585
3567
|
return Math.max(lo, Math.min(hi, v));
|
|
3586
3568
|
}
|
|
3587
|
-
function parseEase(name) {
|
|
3588
|
-
chunkA225HYSY_cjs.checkEase(name, "a preset");
|
|
3589
|
-
return gsap.gsap.parseEase(name);
|
|
3590
|
-
}
|
|
3591
3569
|
|
|
3592
3570
|
// src/presets/orbit.ts
|
|
3593
3571
|
var ORBIT_KEYS = ["duration", "degrees", "start", "radius", "center", "width", "height", "fov", "ease", "dollyZoom", "at", "name", "stepsPerSecond"];
|
|
@@ -3608,17 +3586,17 @@ function orbit(opts) {
|
|
|
3608
3586
|
throw new Error("pixi-effects: orbit() cannot combine `radius` with `dollyZoom` \u2014 the radius follows the animated fov");
|
|
3609
3587
|
}
|
|
3610
3588
|
const [cx, cy] = opts.center ?? [width / 2, height / 2];
|
|
3611
|
-
const fixedR = opts.radius ??
|
|
3589
|
+
const fixedR = opts.radius ?? chunkRQMI7EJT_cjs.homeDistance(height, fov ?? chunkRQMI7EJT_cjs.DEFAULT_FOV);
|
|
3612
3590
|
const start = opts.start ?? -degrees / 2;
|
|
3613
3591
|
const steps = Math.max(1, Math.round(duration * stepsPerSecond));
|
|
3614
|
-
const easeFn =
|
|
3615
|
-
const dollyEase = dolly ?
|
|
3592
|
+
const easeFn = parseEase2(ease);
|
|
3593
|
+
const dollyEase = dolly ? parseEase2(dolly.ease ?? ease) : null;
|
|
3616
3594
|
const pos = (i) => {
|
|
3617
3595
|
const p = i / steps;
|
|
3618
|
-
const a = (start + degrees * easeFn(p)) *
|
|
3596
|
+
const a = (start + degrees * easeFn(p)) * chunkRQMI7EJT_cjs.DEG;
|
|
3619
3597
|
if (!dolly) return { x: cx + fixedR * Math.sin(a), z: fixedR * Math.cos(a) };
|
|
3620
3598
|
const f = dolly.from + (dolly.to - dolly.from) * dollyEase(p);
|
|
3621
|
-
const R =
|
|
3599
|
+
const R = chunkRQMI7EJT_cjs.homeDistance(height, f);
|
|
3622
3600
|
return { x: cx + R * Math.sin(a), z: R * Math.cos(a), fov: f };
|
|
3623
3601
|
};
|
|
3624
3602
|
const keyframes = [];
|
|
@@ -3673,7 +3651,7 @@ function particles(opts) {
|
|
|
3673
3651
|
const round3 = (v) => Math.round(v * 1e6) / 1e6;
|
|
3674
3652
|
const out = [];
|
|
3675
3653
|
for (let i = 0; i < count; i++) {
|
|
3676
|
-
const r =
|
|
3654
|
+
const r = chunkRQMI7EJT_cjs.random(seed * 1000003 + i * 7919 + 17);
|
|
3677
3655
|
const pick = ([a2, b]) => a2 + r() * (b - a2);
|
|
3678
3656
|
const born = at + r() * emit;
|
|
3679
3657
|
const lifetime = pick(life);
|
|
@@ -3686,7 +3664,7 @@ function particles(opts) {
|
|
|
3686
3664
|
const turn = spin ? pick(spin) : 0;
|
|
3687
3665
|
const startAngle = spin ? r() * 360 : 0;
|
|
3688
3666
|
const swayAmp = sway?.amp ?? 0, swayFreq = sway?.freq ?? 1;
|
|
3689
|
-
const n0 = sway ?
|
|
3667
|
+
const n0 = sway ? chunkRQMI7EJT_cjs.noise(0, seed * 1000003 + i) : 0;
|
|
3690
3668
|
const at_ = (t) => {
|
|
3691
3669
|
const axis = (p0, v0, acc) => {
|
|
3692
3670
|
if (drag > 0) {
|
|
@@ -3695,7 +3673,7 @@ function particles(opts) {
|
|
|
3695
3673
|
}
|
|
3696
3674
|
return p0 + v0 * t + 0.5 * acc * t * t;
|
|
3697
3675
|
};
|
|
3698
|
-
const sw = sway ? swayAmp * (
|
|
3676
|
+
const sw = sway ? swayAmp * (chunkRQMI7EJT_cjs.noise(t * swayFreq, seed * 1000003 + i) - n0) : 0;
|
|
3699
3677
|
return { x: axis(x0, vx, wind) + sw, y: axis(y0, vy, gravity) };
|
|
3700
3678
|
};
|
|
3701
3679
|
const kfs = [];
|
|
@@ -3757,7 +3735,7 @@ function followPath(opts) {
|
|
|
3757
3735
|
if (steps > MAX_STEPS) throw new Error(`followPath(): ${steps} samples is too many (max ${MAX_STEPS}); lower frameRate or duration`);
|
|
3758
3736
|
const segments = [];
|
|
3759
3737
|
let total = 0;
|
|
3760
|
-
for (const line of
|
|
3738
|
+
for (const line of chunkRQMI7EJT_cjs.flattenSvgPath(d)) {
|
|
3761
3739
|
const p = line.closed ? [...line.pts, line.pts[0], line.pts[1]] : line.pts;
|
|
3762
3740
|
for (let i = 2; i < p.length; i += 2) {
|
|
3763
3741
|
const len = Math.hypot(p[i] - p[i - 2], p[i + 1] - p[i - 1]);
|
|
@@ -3782,7 +3760,7 @@ function followPath(opts) {
|
|
|
3782
3760
|
const t = Math.min(Math.max((s - g.start) / g.len, 0), 1);
|
|
3783
3761
|
return { x: g.x0 + (g.x1 - g.x0) * t, y: g.y0 + (g.y1 - g.y0) * t, heading: Math.atan2(g.y1 - g.y0, g.x1 - g.x0) * 180 / Math.PI };
|
|
3784
3762
|
};
|
|
3785
|
-
const shape =
|
|
3763
|
+
const shape = parseEase2(ease);
|
|
3786
3764
|
const round3 = (v) => Math.round(v * 1e6) / 1e6;
|
|
3787
3765
|
let turn = 0;
|
|
3788
3766
|
const sample = (k) => {
|
|
@@ -3859,7 +3837,7 @@ function cameraPath(opts) {
|
|
|
3859
3837
|
const a = curve[i], b = curve[i + 1];
|
|
3860
3838
|
return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
|
|
3861
3839
|
};
|
|
3862
|
-
const shape =
|
|
3840
|
+
const shape = parseEase2(ease);
|
|
3863
3841
|
const round3 = (v) => Math.round(v * 1e6) / 1e6;
|
|
3864
3842
|
const sample = (k) => {
|
|
3865
3843
|
const p = from + (to - from) * shape(k / steps);
|
|
@@ -3901,7 +3879,7 @@ function stagger(items, options = {}) {
|
|
|
3901
3879
|
const dist2 = distances(n, from, grid, seed);
|
|
3902
3880
|
const max = dist2.reduce((m, d) => Math.max(m, d), 0);
|
|
3903
3881
|
const total = amount !== void 0 ? amount : (each ?? 0.1) * max;
|
|
3904
|
-
const shape =
|
|
3882
|
+
const shape = parseEase2(ease);
|
|
3905
3883
|
const clamp01 = (v) => Math.min(1, Math.max(0, v));
|
|
3906
3884
|
const delays = dist2.map((d) => max === 0 ? 0 : Math.round(total * clamp01(shape(d / max)) * 1e6) / 1e6);
|
|
3907
3885
|
if (isCount) return delays;
|
|
@@ -3911,7 +3889,7 @@ function distances(n, from, grid, seed) {
|
|
|
3911
3889
|
if (n === 0) return [];
|
|
3912
3890
|
if (from === "random") {
|
|
3913
3891
|
const order = Array.from({ length: n }, (_, i) => i);
|
|
3914
|
-
const r =
|
|
3892
|
+
const r = chunkRQMI7EJT_cjs.random(seed);
|
|
3915
3893
|
for (let i = n - 1; i > 0; i--) {
|
|
3916
3894
|
const j = Math.floor(r() * (i + 1));
|
|
3917
3895
|
[order[i], order[j]] = [order[j], order[i]];
|
|
@@ -3973,7 +3951,7 @@ function wiggle(opts) {
|
|
|
3973
3951
|
to[n] = p.around;
|
|
3974
3952
|
return;
|
|
3975
3953
|
}
|
|
3976
|
-
const off = (
|
|
3954
|
+
const off = (chunkRQMI7EJT_cjs.rand(seed * 7919 + pi * 104729 + s * 31 + 1) * 2 - 1) * p.amp;
|
|
3977
3955
|
to[n] = typeof p.around === "number" ? p.around + off : `(${p.around}) ${off < 0 ? "-" : "+"} ${Math.abs(off)}`;
|
|
3978
3956
|
});
|
|
3979
3957
|
out.push({ at: at + s * stepLen, to, duration: stepLen, ease });
|
|
@@ -4448,19 +4426,19 @@ function withFade(spec, opts) {
|
|
|
4448
4426
|
|
|
4449
4427
|
Object.defineProperty(exports, "noise", {
|
|
4450
4428
|
enumerable: true,
|
|
4451
|
-
get: function () { return
|
|
4429
|
+
get: function () { return chunkRQMI7EJT_cjs.noise; }
|
|
4452
4430
|
});
|
|
4453
4431
|
Object.defineProperty(exports, "rand", {
|
|
4454
4432
|
enumerable: true,
|
|
4455
|
-
get: function () { return
|
|
4433
|
+
get: function () { return chunkRQMI7EJT_cjs.rand; }
|
|
4456
4434
|
});
|
|
4457
4435
|
Object.defineProperty(exports, "random", {
|
|
4458
4436
|
enumerable: true,
|
|
4459
|
-
get: function () { return
|
|
4437
|
+
get: function () { return chunkRQMI7EJT_cjs.random; }
|
|
4460
4438
|
});
|
|
4461
4439
|
Object.defineProperty(exports, "registerSequenceType", {
|
|
4462
4440
|
enumerable: true,
|
|
4463
|
-
get: function () { return
|
|
4441
|
+
get: function () { return chunkRQMI7EJT_cjs.registerSequenceType; }
|
|
4464
4442
|
});
|
|
4465
4443
|
exports.Movie = Movie;
|
|
4466
4444
|
exports.animateText = animateText;
|
|
@@ -4470,6 +4448,7 @@ exports.cameraPath = cameraPath;
|
|
|
4470
4448
|
exports.computeEnvelope = computeEnvelope;
|
|
4471
4449
|
exports.deck = deck;
|
|
4472
4450
|
exports.dismissLoader = dismissLoader;
|
|
4451
|
+
exports.ease = parseEase2;
|
|
4473
4452
|
exports.failLoader = failLoader;
|
|
4474
4453
|
exports.followPath = followPath;
|
|
4475
4454
|
exports.kenBurns = kenBurns;
|