pixi-effects 0.48.2 → 0.50.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 (88) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +53 -8
  3. package/ai/chat-template.html +8 -4
  4. package/ai/tools/check.mjs +6 -6
  5. package/dist/3d.cjs +967 -0
  6. package/dist/3d.cjs.map +1 -0
  7. package/dist/3d.d.cts +305 -0
  8. package/dist/3d.d.ts +305 -0
  9. package/dist/3d.js +960 -0
  10. package/dist/3d.js.map +1 -0
  11. package/dist/Canvas-BfZkAFJm.d.cts +12 -0
  12. package/dist/Canvas-BfZkAFJm.d.ts +12 -0
  13. package/dist/Composition-47U5U637.cjs +16 -0
  14. package/dist/{Composition-TJ5D7Z63.cjs.map → Composition-47U5U637.cjs.map} +1 -1
  15. package/dist/Composition-GVWWLFDL.js +7 -0
  16. package/dist/{Composition-5FKV2IBP.js.map → Composition-GVWWLFDL.js.map} +1 -1
  17. package/dist/Controller.d.cts +2 -2
  18. package/dist/Controller.d.ts +2 -2
  19. package/dist/{Movie-svZQF-9Z.d.cts → Movie-DogzDBuW.d.cts} +36 -5
  20. package/dist/{Movie--qSYKgAQ.d.ts → Movie-Y7iHg2V8.d.ts} +36 -5
  21. package/dist/{Spans-6A3VLHRH.js → Spans-3SEZSTQV.js} +6 -6
  22. package/dist/{Spans-6A3VLHRH.js.map → Spans-3SEZSTQV.js.map} +1 -1
  23. package/dist/{Spans-5ENZ3XGS.cjs → Spans-R426NVY3.cjs} +11 -11
  24. package/dist/{Spans-5ENZ3XGS.cjs.map → Spans-R426NVY3.cjs.map} +1 -1
  25. package/dist/{blendModes-V5XHC7U4.cjs → blendModes-2IDILRN6.cjs} +5 -5
  26. package/dist/{blendModes-V5XHC7U4.cjs.map → blendModes-2IDILRN6.cjs.map} +1 -1
  27. package/dist/{blendModes-535EMYGK.js → blendModes-4QH44GOL.js} +4 -4
  28. package/dist/{blendModes-535EMYGK.js.map → blendModes-4QH44GOL.js.map} +1 -1
  29. package/dist/{chunk-NGJXVJB7.cjs → chunk-3FCDRLW3.cjs} +5 -3
  30. package/dist/chunk-3FCDRLW3.cjs.map +1 -0
  31. package/dist/{chunk-JBDBICS2.js → chunk-C2HL5236.js} +4 -4
  32. package/dist/{chunk-JBDBICS2.js.map → chunk-C2HL5236.js.map} +1 -1
  33. package/dist/{chunk-WYR2AU4W.cjs → chunk-GXGIISFS.cjs} +5 -5
  34. package/dist/{chunk-WYR2AU4W.cjs.map → chunk-GXGIISFS.cjs.map} +1 -1
  35. package/dist/{chunk-BFRWSV3R.js → chunk-J4ZP76IL.js} +5 -4
  36. package/dist/chunk-J4ZP76IL.js.map +1 -0
  37. package/dist/{chunk-CCPJD76D.cjs → chunk-O2MD3L4J.cjs} +93 -93
  38. package/dist/chunk-O2MD3L4J.cjs.map +1 -0
  39. package/dist/{chunk-IVKI6CPH.js → chunk-SSVHAF3Q.js} +483 -20
  40. package/dist/chunk-SSVHAF3Q.js.map +1 -0
  41. package/dist/{chunk-6D4W2KZQ.js → chunk-TXNQLMRT.js} +6 -6
  42. package/dist/chunk-TXNQLMRT.js.map +1 -0
  43. package/dist/{chunk-RCKLUCB7.js → chunk-UTUUOQ47.js} +46 -20
  44. package/dist/chunk-UTUUOQ47.js.map +1 -0
  45. package/dist/{chunk-Z3DM4ETD.cjs → chunk-VVUSZVP7.cjs} +507 -42
  46. package/dist/chunk-VVUSZVP7.cjs.map +1 -0
  47. package/dist/{chunk-45ALIMAF.cjs → chunk-YOKRPAKA.cjs} +89 -63
  48. package/dist/chunk-YOKRPAKA.cjs.map +1 -0
  49. package/dist/index.cjs +35 -35
  50. package/dist/index.d.cts +3 -3
  51. package/dist/index.d.ts +3 -3
  52. package/dist/index.js +5 -5
  53. package/dist/loader.css +1 -1
  54. package/dist/{music-P4JRT73P.js → music-ATX22VAT.js} +3 -3
  55. package/dist/{music-P4JRT73P.js.map → music-ATX22VAT.js.map} +1 -1
  56. package/dist/{music-XQEPBIDT.cjs → music-OFVM3PYH.cjs} +3 -3
  57. package/dist/{music-XQEPBIDT.cjs.map → music-OFVM3PYH.cjs.map} +1 -1
  58. package/dist/present.cjs +5 -5
  59. package/dist/present.d.cts +2 -2
  60. package/dist/present.d.ts +2 -2
  61. package/dist/present.js +5 -5
  62. package/dist/three.cjs +13 -10
  63. package/dist/three.cjs.map +1 -1
  64. package/dist/three.d.cts +4 -12
  65. package/dist/three.d.ts +4 -12
  66. package/dist/three.js +8 -5
  67. package/dist/three.js.map +1 -1
  68. package/dist/{types-CTSrPvY3.d.cts → types-BZngm4nT.d.cts} +48 -5
  69. package/dist/{types-CTSrPvY3.d.ts → types-BZngm4nT.d.ts} +48 -5
  70. package/docs/api.md +45 -2
  71. package/docs/dsl.md +115 -1
  72. package/llms-full.txt +307 -6
  73. package/package.json +19 -3
  74. package/skills/pixi-effects/SKILL.md +4 -2
  75. package/skills/pixi-effects/reference/cheatsheet.md +4 -0
  76. package/skills/pixi-effects/reference/pitfalls.md +20 -0
  77. package/skills/pixi-effects/reference/recipes.md +119 -1
  78. package/skills/pixi-effects/template.html +14 -8
  79. package/dist/Composition-5FKV2IBP.js +0 -7
  80. package/dist/Composition-TJ5D7Z63.cjs +0 -16
  81. package/dist/chunk-45ALIMAF.cjs.map +0 -1
  82. package/dist/chunk-6D4W2KZQ.js.map +0 -1
  83. package/dist/chunk-BFRWSV3R.js.map +0 -1
  84. package/dist/chunk-CCPJD76D.cjs.map +0 -1
  85. package/dist/chunk-IVKI6CPH.js.map +0 -1
  86. package/dist/chunk-NGJXVJB7.cjs.map +0 -1
  87. package/dist/chunk-RCKLUCB7.js.map +0 -1
  88. package/dist/chunk-Z3DM4ETD.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/space/specKeys.ts","../src/core/layerKeys.ts","../src/core/lint.ts"],"names":[],"mappings":"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","file":"chunk-J4ZP76IL.js","sourcesContent":["import type { Keyframe } from '../types';\n\n/** Every prop key a spec touches in `initial` and in keyframe `set` / `to` / `from`. */\nexport function collectPropKeys(spec: {\n initial?: Record<string, unknown>;\n keyframes?: Keyframe[];\n}): Set<string> {\n const out = new Set<string>();\n for (const k of Object.keys(spec.initial ?? {})) out.add(k);\n for (const kf of spec.keyframes ?? []) {\n for (const bag of [kf.set, kf.to, kf.from]) {\n for (const k of Object.keys(bag ?? {})) out.add(k);\n }\n }\n return out;\n}\n","import type {\n SequenceCommon, VideoSequenceSpec, ImageSequenceSpec, TextSequenceSpec, AudioAssetSpec, AudioSfxSpec, AudioMusicSpec,\n CompositionSequenceSpec, CameraSequenceSpec, LightSequenceSpec, ShaderSequenceSpec, CanvasSequenceSpec, Scene2DSequenceSpec, NullSequenceSpec, SequenceSpec,\n RectShapeSpec, CircleShapeSpec, EllipseShapeSpec, ArcShapeSpec, LineShapeSpec, PolygonShapeSpec, PathShapeSpec,\n} from '../types';\n\n/**\n * The keys a layer of each kind may have, for `lintKeys`. They are tables of names, so each one is checked against its type twice, by\n * the compiler: `satisfies` rejects a name the type does not have, and `Covers` fails the build when the type has a key the table lacks\n * (add a key to a spec type and `tsc` tells you to add it here, so the warning never calls a real key unknown).\n */\ntype KeysOfUnion<T> = T extends unknown ? keyof T : never;\ntype Covers<T, K extends readonly string[]> = [Exclude<KeysOfUnion<T>, K[number]>] extends [never] ? true : { missing: Exclude<KeysOfUnion<T>, K[number]> };\ntype Assert<T extends true> = T;\n\nexport const COMMON = ['type', 'name', 'parent', 'at', 'duration', 'initial', 'keyframes', 'filters', 'filterArea', 'mask', 'blendMode', 'threeD', 'hideBehindCamera', 'lit', 'castsShadows'] as const satisfies readonly KeysOfUnion<SequenceCommon | { type: string }>[];\n\nconst VIDEO = [...COMMON, 'asset', 'loop', 'audio', 'volume', 'speed'] as const satisfies readonly KeysOfUnion<VideoSequenceSpec>[];\nconst IMAGE = [...COMMON, 'asset', 'colorSpace', 'scaleMode'] as const satisfies readonly KeysOfUnion<ImageSequenceSpec>[];\nconst TEXT = [...COMMON, 'text', 'spans', 'format', 'resolution', 'style', 'colorSpace', 'fillGradient'] as const satisfies readonly KeysOfUnion<TextSequenceSpec>[];\nconst AUDIO = [...COMMON, 'volume', 'asset', 'loop', 'sfx', 'music', 'speed'] as const satisfies readonly KeysOfUnion<AudioAssetSpec | AudioSfxSpec | AudioMusicSpec>[];\nconst COMPOSITION = [...COMMON, 'width', 'height', 'sequences', 'transitions', 'speed'] as const satisfies readonly KeysOfUnion<CompositionSequenceSpec>[];\nconst CAMERA = [...COMMON] as const satisfies readonly KeysOfUnion<CameraSequenceSpec>[];\nconst LIGHT = [...COMMON, 'kind', 'falloff'] as const satisfies readonly KeysOfUnion<LightSequenceSpec>[];\nconst SHADER = [...COMMON, 'fragment', 'uniforms', 'width', 'height', 'resolution', 'transparent'] as const satisfies readonly KeysOfUnion<ShaderSequenceSpec>[];\nconst CANVAS = [...COMMON, 'draw', 'setup', 'width', 'height', 'resolution', 'params', 'seed', 'smoothing'] as const satisfies readonly KeysOfUnion<CanvasSequenceSpec>[];\nconst SCENE2D = [...COMMON, 'setup', 'update', 'dispose', 'width', 'height', 'reuse'] as const satisfies readonly KeysOfUnion<Scene2DSequenceSpec>[];\nconst NULL = [...COMMON] as const satisfies readonly KeysOfUnion<NullSequenceSpec>[];\n\nconst SHAPE = [...COMMON, 'shape', 'fillGradient', 'colorSpace', 'strokeCap', 'strokeJoin'] as const;\nconst TRIM = ['trimStart', 'trimEnd', 'trimEach'] as const;\nconst RECT = [...SHAPE, ...TRIM, 'width', 'height', 'cornerRadius', 'anchorX', 'anchorY'] as const satisfies readonly KeysOfUnion<RectShapeSpec>[];\nconst CIRCLE = [...SHAPE, ...TRIM, 'radius', 'anchorX', 'anchorY'] as const satisfies readonly KeysOfUnion<CircleShapeSpec>[];\nconst ELLIPSE = [...SHAPE, ...TRIM, 'radiusX', 'radiusY', 'anchorX', 'anchorY'] as const satisfies readonly KeysOfUnion<EllipseShapeSpec>[];\nconst ARC = [...SHAPE, 'radius', 'innerRadius', 'startAngle', 'endAngle'] as const satisfies readonly KeysOfUnion<ArcShapeSpec>[];\nconst LINE = [...SHAPE, ...TRIM, 'from', 'to'] as const satisfies readonly KeysOfUnion<LineShapeSpec>[];\nconst POLYGON = [...SHAPE, ...TRIM, 'points', 'open'] as const satisfies readonly KeysOfUnion<PolygonShapeSpec>[];\nconst PATH = [...SHAPE, ...TRIM, 'd', 'fillRule', 'morphTo', 'morph', 'morphPoints'] as const satisfies readonly KeysOfUnion<PathShapeSpec>[];\n\n/** The compiler checks every table covers its type (this type is never used: it exists to fail the build). */\nexport type __Covered = [\n Assert<Covers<VideoSequenceSpec, typeof VIDEO>>, Assert<Covers<ImageSequenceSpec, typeof IMAGE>>, Assert<Covers<TextSequenceSpec, typeof TEXT>>,\n Assert<Covers<AudioAssetSpec | AudioSfxSpec | AudioMusicSpec, typeof AUDIO>>, Assert<Covers<CompositionSequenceSpec, typeof COMPOSITION>>,\n Assert<Covers<CameraSequenceSpec, typeof CAMERA>>, Assert<Covers<LightSequenceSpec, typeof LIGHT>>, Assert<Covers<ShaderSequenceSpec, typeof SHADER>>, Assert<Covers<CanvasSequenceSpec, typeof CANVAS>>, Assert<Covers<Scene2DSequenceSpec, typeof SCENE2D>>, Assert<Covers<NullSequenceSpec, typeof NULL>>,\n Assert<Covers<RectShapeSpec, typeof RECT>>, Assert<Covers<CircleShapeSpec, typeof CIRCLE>>, Assert<Covers<EllipseShapeSpec, typeof ELLIPSE>>,\n Assert<Covers<ArcShapeSpec, typeof ARC>>, Assert<Covers<LineShapeSpec, typeof LINE>>, Assert<Covers<PolygonShapeSpec, typeof POLYGON>>,\n Assert<Covers<PathShapeSpec, typeof PATH>>,\n];\n\nconst SHAPES: Record<string, readonly string[]> = { rect: RECT, circle: CIRCLE, ellipse: ELLIPSE, arc: ARC, line: LINE, polygon: POLYGON, path: PATH };\nconst BY_TYPE: Record<string, readonly string[]> = { video: VIDEO, image: IMAGE, text: TEXT, audio: AUDIO, composition: COMPOSITION, camera: CAMERA, light: LIGHT, shader: SHADER, canvas: CANVAS, scene2d: SCENE2D, null: NULL };\n\n/** The keys that shape what is drawn: a layer that is never drawn (audio, a camera, a light) accepts them in its type but they do nothing there. */\nconst PICTURE_KEYS = ['filters', 'filterArea', 'mask', 'blendMode', 'threeD', 'hideBehindCamera', 'lit', 'castsShadows'] as const;\nconst NOT_DRAWN: Record<string, string> = {\n audio: 'an audio layer: it is not drawn (it plays)',\n camera: 'a camera layer: it is not drawn, it frames the picture (its place and lens go in `initial` / `keyframes`: x y z lookAtX … fov)',\n light: 'a light layer: it is not drawn, it lights `threeD` layers (its numbers go in `initial` / `keyframes`: intensity color …)',\n};\n\n/** For a layer that is never drawn: the picture keys it carries, each with what the layer is (the keys do nothing there). A light keeps `castsShadows`, its own switch. */\nexport function pictureKeysIgnored(spec: { type: string } & Record<string, unknown>): Array<{ key: string; why: string }> {\n const why = NOT_DRAWN[spec.type];\n if (!why) return [];\n return PICTURE_KEYS.filter(k => spec[k] !== undefined && !(spec.type === 'light' && k === 'castsShadows')).map(key => ({ key, why }));\n}\n\n/** What a layer may be called, for the message: `text layer`, `rect shape`. */\nexport function kindName(spec: { type: string; shape?: string }): string {\n return spec.type === 'shape' && spec.shape ? `${spec.shape} shape` : `${spec.type} layer`;\n}\n\n/** The keys a layer may have, or null for a kind this library does not know (a `three` layer: registered elsewhere, so not checked). */\nexport function layerKeys(spec: { type: string; shape?: string }): readonly string[] | null {\n if (spec.type === 'shape') return (spec.shape && SHAPES[spec.shape]) || null;\n return BY_TYPE[spec.type] ?? null;\n}\n\n/** Which kinds have `key` (for \"it belongs to a circle shape\"). */\nexport function kindsWithKey(key: string): string[] {\n const out: string[] = [];\n for (const [shape, keys] of Object.entries(SHAPES)) if (keys.includes(key)) out.push(`${shape} shape`);\n for (const [type, keys] of Object.entries(BY_TYPE)) if (keys.includes(key)) out.push(`${type} layer`);\n return out;\n}\n\n/** Names a keyframe or `initial` may animate. Dotted paths (`filters.g.amount`, `three.box.x`) belong to their routers and are not looked up here. */\nexport const PROP_KEYS: ReadonlySet<string> = new Set([\n // transform and look\n 'x', 'y', 'z', 'alpha', 'rotation', 'rotationX', 'rotationY', 'width', 'height', 'visible', 'autoAlpha',\n 'scale', 'scaleX', 'scaleY', 'anchor', 'anchorX', 'anchorY', 'pivot', 'pivotX', 'pivotY', 'skew', 'skewX', 'skewY',\n 'position', 'positionX', 'positionY', 'tilePosition', 'tilePositionX', 'tilePositionY', 'tileScale', 'tileScaleX', 'tileScaleY', 'tint',\n // shapes\n 'fillColor', 'fillAlpha', 'strokeColor', 'strokeAlpha', 'strokeWidth', 'cornerRadius', 'radius', 'radiusX', 'radiusY',\n 'innerRadius', 'startAngle', 'endAngle', 'trimStart', 'trimEnd', 'trimEach', 'morph', 'fillGradient', 'strokeCap', 'strokeJoin',\n // text, audio, video\n 'fill', 'value', 'visibleChars', 'text', 'volume', 'time',\n // camera\n 'lookAtX', 'lookAtY', 'lookAtZ', 'fov', 'focus', 'aperture', 'offsetX', 'offsetY', 'offsetZ', 'lookOffsetX', 'lookOffsetY', 'lookOffsetZ',\n // light + fog\n 'intensity', 'color', 'coneAngle', 'coneFeather', 'falloffDistance', 'shadowDarkness', 'shadowDiffusion', 'fogNear', 'fogFar', 'fogColor', 'fogAmount',\n]);\n\n/** The text `style` keys (PixiJS TextStyle) that this library passes on. */\nexport const STYLE_KEYS: readonly string[] = [\n 'fontSize', 'fontFamily', 'fontWeight', 'fontStyle', 'fontVariant', 'fill', 'stroke', 'dropShadow', 'letterSpacing', 'lineHeight', 'leading',\n 'align', 'wordWrap', 'wordWrapWidth', 'breakWords', 'whiteSpace', 'padding', 'textBaseline', 'trim', 'lineJoin', 'miterLimit', 'filters', 'tagStyles',\n];\n\nexport type { SequenceSpec };\n","import type { SequenceSpec } from '../types';\nimport { collectPropKeys } from '../space/specKeys';\nimport { suggestName } from './options';\nimport { layerKeys, kindName, kindsWithKey, pictureKeysIgnored, PROP_KEYS, STYLE_KEYS } from './layerKeys';\n\ntype Warn = (message: string, kind?: 'late-keyframe') => void;\nconst defaultWarn: Warn = m => console.warn(m);\n\n/** \"layer \"name\"\" or \"unnamed text layer\" — how warnings refer to a sequence. */\nexport function describeLayer(spec: { name?: string; type: string }): string {\n return spec.name ? `layer \"${spec.name}\"` : `unnamed ${spec.type} layer`;\n}\n\n/**\n * Timing mistakes that otherwise fail silently: a layer that starts after its\n * composition has ended, or a keyframe that starts after its own layer has\n * ended (the usual cause: writing keyframe `at` in composition time instead of\n * time since the start of the layer).\n */\nexport function lintTiming(spec: SequenceSpec, parentDuration: number, warn: Warn = defaultWarn): void {\n const who = describeLayer(spec);\n const at = spec.at ?? 0;\n if (at >= parentDuration) {\n warn(`pixi-effects: ${who} starts at ${at}s, after its composition ends (${parentDuration}s), so it is never visible`);\n }\n // An sfx or a piece of music without a duration is as long as its sound, which only the audio layer knows (it checks its own keyframes).\n if (spec.type === 'audio' && ((spec as { sfx?: unknown }).sfx !== undefined || (spec as { music?: unknown }).music !== undefined) && spec.duration === undefined) return;\n if (at >= parentDuration) return; // never visible: said above, and its keyframes say nothing more\n const lives = spec.duration ?? Math.max(0, parentDuration - at); // without a duration a layer lives until its composition ends\n const ms = (x: number) => Math.round(x * 1000) / 1000;\n (spec.keyframes ?? []).forEach((kf, i) => {\n const kat = kf.at ?? 0;\n if (kat >= lives) {\n warn(\n `pixi-effects: ${who}: keyframes[${i}] starts at ${kat}s, after the layer ends (duration ${ms(lives)}s), so it never plays. ` +\n `Keyframe \\`at\\` is measured from the start of this layer, not from the start of the composition.`,\n 'late-keyframe',\n );\n return;\n }\n // Starts in time but is cut off by the layer's end: a FADE (to alpha 0 or 1, or from 0 / 1) that never finishes (a trial: a fade-out that stopped half way, a 1.2 s fade-in on a 0.6 s layer).\n // Not a drift, a fall, a zoom or a decaying glow (to 0.22) that is still going when its layer ends: those are common and on purpose. A `set` is instant, a repeating tween\n // (a blink) and a spring ('auto') are meant to run over, and a cut of under 0.2 s (a few frames: the last keyframe of a generated loop) is nothing.\n const length = kf.duration;\n // a fade ends (almost) opaque or (almost) clear: `to` alpha, or, when only `from` names alpha, the value it fades from (a fade-in `from: { alpha: 0 }` ends where it was)\n const toAlpha = (kf.to as Record<string, unknown> | undefined)?.alpha;\n const fromAlpha = (kf.from as Record<string, unknown> | undefined)?.alpha;\n const nearEnd = (v: unknown) => typeof v === 'number' && (v <= 0.1 || v >= 0.9);\n const fade = toAlpha !== undefined ? nearEnd(toAlpha) : nearEnd(fromAlpha);\n if (fade && typeof length === 'number' && length > 0 && !kf.repeat) {\n const start = kat < 0 ? lives + kat : kat; // a negative `at` counts back from the end of the layer\n const cut = (start + length - lives) / length;\n if (start >= 0 && cut > 0.25 && cut * length >= 0.2) {\n warn(\n `pixi-effects: ${who}: keyframes[${i}] runs from ${ms(start)}s to ${ms(start + length)}s but the layer ends at ${ms(lives)}s, so the last ${Math.round(cut * 100)}% of it never plays ` +\n `(a fade stops half way). Keyframe \\`at\\` is measured from the start of this layer: start it earlier, make it shorter, or make the layer longer.`,\n 'late-keyframe',\n );\n }\n }\n });\n}\n\n/**\n * A loop that builds a hundred layers makes the same mistake a hundred times. Print the first few in full and\n * say how many more there are: the rest are the same loop.\n */\nexport function summarizeWarnings(messages: string[], shown = 3): string[] {\n if (messages.length <= shown) return messages;\n return [...messages.slice(0, shown), `pixi-effects: ${messages.length - shown} more layers with the same problem (the same loop or helper is probably building them): fix the ones above and these go away.`];\n}\n\n/** A text layer that animates `value` but has nowhere to print it. */\nexport function lintText(spec: SequenceSpec, warn: Warn = defaultWarn): void {\n if (spec.type !== 'text') return;\n // Every string the layer ever shows: its `text` and any `set: { text }` swap.\n const strings = [spec.text ?? '', ...(spec.keyframes ?? []).map(kf => String((kf.set as Record<string, unknown> | undefined)?.text ?? ''))];\n const hasPlaceholder = strings.some(t => t.includes('{value}'));\n if (hasPlaceholder && !collectPropKeys(spec).has('value')) {\n warn(`pixi-effects: ${describeLayer(spec)}: the text has a {value} placeholder but nothing sets or animates \\`value\\`, so it prints 0. Set initial: { value: … } or animate it; {value} is reserved for counters (there is no way to print a literal \"{value}\").`);\n }\n if (collectPropKeys(spec).has('value') && !hasPlaceholder) {\n warn(`pixi-effects: ${describeLayer(spec)}: \\`value\\` is set or animated but the text has no {value} placeholder, so nothing shows it. Use text: '{value}' (or e.g. '{value} users').`);\n }\n}\n\nconst REMAPPABLE = new Set(['video', 'audio', 'composition']);\n/** Top-level names that mean a time remap and have their own message. */\nconst REMAP_NAMES = new Set(['time', 'timeRemap', 'reverse']);\nconst TIME_BAGS = ['set', 'to', 'from'] as const;\n\n/** The mistakes a time remap can make (`speed` / `time`), said once when the layer is built. Called from `lintKeys`. */\nfunction lintRemap(spec: SequenceSpec, warn: Warn): void {\n const s = spec as unknown as Record<string, any>;\n const who = describeLayer(spec);\n const kfs: Array<Record<string, any>> = s.keyframes ?? [];\n const bags: Array<Record<string, any> | undefined> = [s.initial, ...kfs.flatMap(kf => TIME_BAGS.map(b => kf[b]))];\n const timeInInitial = !!s.initial && s.initial.time !== undefined;\n const timeInKeyframes = kfs.some(kf => TIME_BAGS.some(b => kf[b] && kf[b].time !== undefined));\n const timed = timeInInitial || timeInKeyframes;\n if (bags.some(bag => bag && bag.speed !== undefined)) {\n warn(`pixi-effects: ${who}: speed is a fixed setting, not an animatable property: write it on the layer (speed: 2); to change the speed over time, animate time (keyframes: [{ at: 0, from: { time: 0 }, to: { time: 4 }, duration: 2, ease: 'power2.in' }])`);\n }\n if (!REMAPPABLE.has(spec.type)) {\n if (timed) warn(`pixi-effects: ${who}: \"time\" only works on video, audio and composition layers; put this layer in a composition and remap that (it is ignored here)`);\n return; // a top-level speed here is the key warning's business (\"not a ... key\")\n }\n if (s.reverse !== undefined) warn(`pixi-effects: ${who}: \"reverse\" is not a key: write speed: -1 to play backward`);\n if (s.timeRemap !== undefined) warn(`pixi-effects: ${who}: \"timeRemap\" is not a key: animate time in keyframes (from / to / set), or write speed`);\n if (s.time !== undefined) warn(`pixi-effects: ${who}: \"time\" belongs in initial or keyframes (initial: { time: 2 }), not on the layer`);\n if (spec.type === 'audio' && (s.sfx !== undefined || s.music !== undefined) && (s.speed !== undefined || timed)) {\n warn(`pixi-effects: ${who}: speed and time do not apply to a synthesised sound (sfx, music); change an sfx's pitch with pitch (semitones), or put it in a composition and remap that`);\n return;\n }\n if (s.speed !== undefined && (typeof s.speed !== 'number' || !Number.isFinite(s.speed) || s.speed === 0)) {\n warn(`pixi-effects: ${who}: speed ${JSON.stringify(s.speed)} cannot be used: write a number other than 0 (negative plays backward); to hold a moment, key time to the same value twice`);\n }\n if (s.speed !== undefined && timeInKeyframes) {\n warn(`pixi-effects: ${who}: speed and keyframed time are both set; time wins and speed is ignored. Use one of them`);\n }\n if (timeInInitial && typeof s.initial.time !== 'number') {\n warn(`pixi-effects: ${who}: initial.time must be a number of seconds, got ${JSON.stringify(s.initial.time)}`);\n }\n kfs.forEach((kf, i) => {\n for (const b of TIME_BAGS) {\n const v = kf[b]?.time;\n if (v !== undefined && typeof v !== 'number' && typeof v !== 'string') warn(`pixi-effects: ${who}: keyframes[${i}].${b}.time must be a number of seconds, got ${JSON.stringify(v)}`);\n }\n });\n}\n\n/**\n * Keys that do not exist, which the library used to ignore without a word (a typo in a layer key, a mistyped property in a keyframe, a\n * style key Pixi does not know). Said once each, with what was probably meant. A warning, never an error. Not checked here: dotted\n * paths (`filters.g.amount`, `three.box.x`: their routers say what is wrong), the names `fillGradient` says itself (`gradientAngle`),\n * and a kind of layer registered elsewhere (`three`).\n */\n/** Keys the library used to have: the sentence says what to write now. */\nconst REMOVED_KEYS: Record<string, string> = {\n maskInverted: 'a hole instead of a crop is `mask: { layer: <the mask layer>, invert: true }`',\n};\n\n/** The knobs of a sound effect: they are keys of `sfx: { … }`, not of the layer. */\nconst SFX_KNOBS = new Set(['pitch', 'brightness', 'seed']);\n\n/** Where a layer is and how it is turned: always `initial` or a keyframe, even for a kind of layer that has such a name as a key of another meaning (`anchorX` on a shape). */\nconst TRANSFORM_KEYS = new Set(['x', 'y', 'z', 'alpha', 'rotation', 'rotationX', 'rotationY', 'scale', 'scaleX', 'scaleY', 'anchor', 'anchorX', 'anchorY',\n 'pivot', 'pivotX', 'pivotY', 'skew', 'skewX', 'skewY', 'position', 'positionX', 'positionY', 'tint', 'visible', 'autoAlpha']);\n\nexport function lintKeys(spec: SequenceSpec, warn: Warn = defaultWarn): void {\n const who = describeLayer(spec);\n const valid = layerKeys(spec as { type: string; shape?: string });\n if (valid) {\n for (const key of Object.keys(spec)) {\n if (valid.includes(key) || (spec as unknown as Record<string, unknown>)[key] === undefined) continue; // a spread that sets a key only when it applies leaves `undefined`\n if (REMAPPABLE.has(spec.type) && REMAP_NAMES.has(key)) continue; // lintRemap has its own message for these\n if (REMOVED_KEYS[key]) { warn(`pixi-effects: ${who}: \"${key}\" is not a ${kindName(spec as { type: string; shape?: string })} key: ${REMOVED_KEYS[key]}`); continue; }\n // `pitch`, `brightness`, `seed` are knobs of the sound effect, they go inside `sfx` (a trial: three agents wrote them beside `sfx:`)\n if (spec.type === 'audio' && SFX_KNOBS.has(key) && (spec as { sfx?: unknown }).sfx !== undefined) {\n const sfx = (spec as { sfx?: unknown }).sfx;\n const v = (spec as unknown as Record<string, unknown>)[key];\n const shown = typeof v === 'number' || (typeof v === 'string' && v.length <= 24) ? JSON.stringify(v) : '…';\n const where = typeof sfx === 'string' ? `sfx: { preset: '${sfx}', ${key}: ${shown} }` : `inside the sfx object you have (sfx: { …, ${key}: ${shown} })`;\n warn(`pixi-effects: ${who}: \"${key}\" is a knob of the sound effect, so it is ignored beside \\`sfx\\`: write it ${where}${key === 'pitch' ? ' (pitch is in semitones, ±24: 12 is an octave up)' : key === 'brightness' ? ' (brightness is −1 dark … 1 bright)' : ''}`);\n continue;\n }\n // `z`, `x`, `alpha`, `rotationX` … are properties of the picture: they go in `initial` (or a keyframe), not on the layer. Say that, not a guess at another key.\n if (TRANSFORM_KEYS.has(key) || (PROP_KEYS.has(key) && kindsWithKey(key).length === 0)) { // (a key some other kind of layer owns, `radius` on a rect, keeps its \"it belongs to\" sentence below)\n const v = (spec as unknown as Record<string, unknown>)[key];\n const shown = typeof v === 'number' || (typeof v === 'string' && v.length <= 24) ? JSON.stringify(v) : '…';\n warn(`pixi-effects: ${who}: \"${key}\" is a property, not a ${kindName(spec as { type: string; shape?: string })} key, so it is ignored: write it in initial (initial: { ${key}: ${shown} }) or in a keyframe`);\n continue;\n }\n const guess = suggestName(key, valid.filter(k => k !== 'type'));\n const owners = kindsWithKey(key);\n const belongs = owners.length ? ` (it belongs to ${owners.slice(0, 3).join(', ')})` : '';\n const hint = guess ? ` — did you mean \"${guess}\"?${belongs}` : belongs;\n warn(`pixi-effects: ${who}: \"${key}\" is not a ${kindName(spec as { type: string; shape?: string })} key${hint}${/[?.)]$/.test(hint) ? ' ' : '. '}Valid keys: ${valid.join(', ')}`);\n }\n }\n for (const { key, why } of pictureKeysIgnored(spec as unknown as { type: string } & Record<string, unknown>)) warn(`pixi-effects: ${who}: \"${key}\" does nothing on ${why}`);\n lintRemap(spec, warn);\n const said = new Set<string>();\n const bags: Array<Record<string, unknown> | undefined> = [spec.initial, ...(spec.keyframes ?? []).flatMap(kf => [kf.set, kf.to, kf.from])] as Array<Record<string, unknown> | undefined>;\n for (const bag of bags) {\n for (const key of Object.keys(bag ?? {})) {\n if (bag![key] === undefined) continue;\n if (PROP_KEYS.has(key) || key.includes('.') || /^gradient/i.test(key) || said.has(key) || key === 'speed') continue; // (speed: lintRemap says what to write)\n said.add(key);\n const guess = suggestName(key, [...PROP_KEYS]);\n warn(`pixi-effects: ${who}: \"${key}\" is not an animatable property${guess ? ` — did you mean \"${guess}\"?` : ''} (in initial, set, to or from). See the cheatsheet for the properties of this kind of layer`);\n }\n }\n if (spec.type === 'text' && spec.style && typeof spec.style === 'object') {\n for (const key of Object.keys(spec.style)) {\n if (STYLE_KEYS.includes(key) || (spec.style as Record<string, unknown>)[key] === undefined) continue;\n const guess = suggestName(key, STYLE_KEYS);\n warn(`pixi-effects: ${who}: style.${key} is not a text style key${guess ? ` — did you mean \"${guess}\"?` : ''} (it is ignored). Keys: ${STYLE_KEYS.join(', ')}`);\n }\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkZ3DM4ETD_cjs = require('./chunk-Z3DM4ETD.cjs');
4
- var chunkWYR2AU4W_cjs = require('./chunk-WYR2AU4W.cjs');
5
- var chunkNGJXVJB7_cjs = require('./chunk-NGJXVJB7.cjs');
3
+ var chunkVVUSZVP7_cjs = require('./chunk-VVUSZVP7.cjs');
4
+ var chunkGXGIISFS_cjs = require('./chunk-GXGIISFS.cjs');
5
+ var chunk3FCDRLW3_cjs = require('./chunk-3FCDRLW3.cjs');
6
6
  var chunkDOLTCXCL_cjs = require('./chunk-DOLTCXCL.cjs');
7
7
  var pixi_js = require('pixi.js');
8
8
 
@@ -33,10 +33,10 @@ var KIND_ALIASES = {
33
33
  fill: "ambient"
34
34
  };
35
35
  function lightKindProblem(kind) {
36
- if (kind === void 0 || typeof kind === "string" && chunkZ3DM4ETD_cjs.LIGHT_KINDS.includes(kind)) return null;
37
- const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkDOLTCXCL_cjs.suggestName(kind, chunkZ3DM4ETD_cjs.LIGHT_KINDS) : null;
36
+ if (kind === void 0 || typeof kind === "string" && chunkVVUSZVP7_cjs.LIGHT_KINDS.includes(kind)) return null;
37
+ const guess = typeof kind === "string" ? KIND_ALIASES[kind.toLowerCase()] ?? chunkDOLTCXCL_cjs.suggestName(kind, chunkVVUSZVP7_cjs.LIGHT_KINDS) : null;
38
38
  const shown = typeof kind === "string" ? `"${kind}"` : String(kind);
39
- return `kind ${shown} is not a light kind${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkZ3DM4ETD_cjs.LIGHT_KINDS.join(", ")}); point is used`;
39
+ return `kind ${shown} is not a light kind${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkVVUSZVP7_cjs.LIGHT_KINDS.join(", ")}); point is used`;
40
40
  }
41
41
  var LIGHT_ALIASES = {
42
42
  pointOfInterest: 'did you mean "lookAtX / lookAtY / lookAtZ"?',
@@ -61,24 +61,24 @@ function lightLayerProblems(spec) {
61
61
  const raw = spec;
62
62
  const kind = lightKindProblem(raw.kind);
63
63
  if (kind) out.push(kind);
64
- if (raw.falloff !== void 0 && !chunkZ3DM4ETD_cjs.FALLOFFS.includes(raw.falloff)) {
65
- const guess = typeof raw.falloff === "string" ? chunkDOLTCXCL_cjs.suggestName(raw.falloff, chunkZ3DM4ETD_cjs.FALLOFFS) : null;
66
- out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkZ3DM4ETD_cjs.FALLOFFS.join(", ")}); none is used`);
64
+ if (raw.falloff !== void 0 && !chunkVVUSZVP7_cjs.FALLOFFS.includes(raw.falloff)) {
65
+ const guess = typeof raw.falloff === "string" ? chunkDOLTCXCL_cjs.suggestName(raw.falloff, chunkVVUSZVP7_cjs.FALLOFFS) : null;
66
+ out.push(`falloff ${JSON.stringify(raw.falloff)} is not supported${guess ? `; did you mean "${guess}"?` : ""} (use ${chunkVVUSZVP7_cjs.FALLOFFS.join(", ")}); none is used`);
67
67
  }
68
68
  for (const k of Object.keys(raw)) {
69
- if (chunkZ3DM4ETD_cjs.LIGHT_PROPS.includes(k) || k === "intensity" || k === "shadowDarkness" || k === "shadowDiffusion") {
69
+ if (chunkVVUSZVP7_cjs.LIGHT_PROPS.includes(k) || k === "intensity" || k === "shadowDarkness" || k === "shadowDiffusion") {
70
70
  out.push(`"${k}" must go inside initial / keyframes, not on the light itself`);
71
71
  } else if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
72
72
  }
73
73
  const explained = new Set(Object.keys(LIGHT_ALIASES));
74
- for (const k of chunkNGJXVJB7_cjs.collectPropKeys(spec)) {
74
+ for (const k of chunk3FCDRLW3_cjs.collectPropKeys(spec)) {
75
75
  if (LIGHT_ALIASES[k]) out.push(`"${k}" is not a property \u2014 ${LIGHT_ALIASES[k]}`);
76
- else if (!explained.has(k) && !chunkZ3DM4ETD_cjs.LIGHT_PROPS.includes(k)) out.push(`"${k}" has no effect on a light (use ${chunkZ3DM4ETD_cjs.LIGHT_PROPS.join(", ")})`);
76
+ else if (!explained.has(k) && !chunkVVUSZVP7_cjs.LIGHT_PROPS.includes(k)) out.push(`"${k}" has no effect on a light (use ${chunkVVUSZVP7_cjs.LIGHT_PROPS.join(", ")})`);
77
77
  }
78
78
  if (numbersOf(spec, "coneFeather").some((v) => v > 1 || v < 0)) out.push("coneFeather is 0..1 (the soft part of the cone edge, as a fraction of the half angle); it is clamped");
79
79
  const big = numbersOf(spec, "intensity").find((v) => v > 10);
80
80
  if (big !== void 0) out.push(`intensity ${big} looks like a percentage: it is a multiplier (1 = full, 0.25 = a quarter); did you mean ${big / 100}?`);
81
- const kindNow = typeof raw.kind === "string" && chunkZ3DM4ETD_cjs.LIGHT_KINDS.includes(raw.kind) ? raw.kind : "point";
81
+ const kindNow = typeof raw.kind === "string" && chunkVVUSZVP7_cjs.LIGHT_KINDS.includes(raw.kind) ? raw.kind : "point";
82
82
  const has = (...keys) => keys.filter((k) => bagsOf(spec).some((b) => b[k] !== void 0));
83
83
  const falloffOn = raw.falloff === "smooth" || raw.falloff === "inverseSquare";
84
84
  if (kindNow === "ambient" && raw.castsShadows) out.push("an ambient light has no direction, so it makes no shadow: castsShadows is ignored (put it on a point, spot or parallel light)");
@@ -106,18 +106,18 @@ function lightSetProblems(layers) {
106
106
  out.push("there is no ambient light, so what no light reaches is black; add { type: 'light', kind: 'ambient', initial: { intensity: 0.25 } }");
107
107
  }
108
108
  const direct = lights.filter((l) => kindOf(l) !== "ambient");
109
- if (direct.length > chunkZ3DM4ETD_cjs.MAX_LIGHTS) {
110
- const dropped = direct.slice(chunkZ3DM4ETD_cjs.MAX_LIGHTS).map((l) => nameOf(l, layers.indexOf(l)));
111
- out.push(`${direct.length} lights, but at most ${chunkZ3DM4ETD_cjs.MAX_LIGHTS} are used (the first ${chunkZ3DM4ETD_cjs.MAX_LIGHTS}, in layer order); ${dropped.join(", ")} and later are dropped. Use fewer lights`);
109
+ if (direct.length > chunkVVUSZVP7_cjs.MAX_LIGHTS) {
110
+ const dropped = direct.slice(chunkVVUSZVP7_cjs.MAX_LIGHTS).map((l) => nameOf(l, layers.indexOf(l)));
111
+ out.push(`${direct.length} lights, but at most ${chunkVVUSZVP7_cjs.MAX_LIGHTS} are used (the first ${chunkVVUSZVP7_cjs.MAX_LIGHTS}, in layer order); ${dropped.join(", ")} and later are dropped. Use fewer lights`);
112
112
  }
113
113
  const lightsCast = lights.some((l) => kindOf(l) !== "ambient" && l.castsShadows);
114
114
  const casters = layers.filter((l) => l.type !== "light" && l.castsShadows && l.threeD);
115
115
  if (casters.length > 0 && !lightsCast) out.push(`${casters.length} layer${casters.length > 1 ? "s have" : " has"} castsShadows but no light has castsShadows: add castsShadows: true to the light that should make the shadows`);
116
- const hostsThree = layers.some((l) => l.type === "three" && l.followLights);
116
+ const hostsThree = layers.some((l) => (l.type === "three" || l.type === "scene3d") && l.followLights);
117
117
  if (lightsCast && casters.length === 0 && !hostsThree) out.push("a light has castsShadows but no layer has castsShadows: add castsShadows: true to the threeD layers that should cast a shadow");
118
- if (lightsCast && casters.length > chunkZ3DM4ETD_cjs.MAX_CASTERS) {
119
- const dropped = casters.slice(chunkZ3DM4ETD_cjs.MAX_CASTERS).map((c) => nameOf(c, layers.indexOf(c)));
120
- out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${chunkZ3DM4ETD_cjs.MAX_CASTERS} (the first ${chunkZ3DM4ETD_cjs.MAX_CASTERS}, in layer order); ${dropped.join(", ")} and later cast none`);
118
+ if (lightsCast && casters.length > chunkVVUSZVP7_cjs.MAX_CASTERS) {
119
+ const dropped = casters.slice(chunkVVUSZVP7_cjs.MAX_CASTERS).map((c) => nameOf(c, layers.indexOf(c)));
120
+ out.push(`${casters.length} layers cast shadows, but a layer receives shadows from at most ${chunkVVUSZVP7_cjs.MAX_CASTERS} (the first ${chunkVVUSZVP7_cjs.MAX_CASTERS}, in layer order); ${dropped.join(", ")} and later cast none`);
121
121
  }
122
122
  const softLights = lights.filter((l) => l.castsShadows && numbersOf(l, "shadowDiffusion").some((v) => v > 0));
123
123
  if (softLights.length >= SOFT_LIGHTS) {
@@ -302,9 +302,9 @@ var roundPixelsBit = {
302
302
  name: "round-pixels-bit",
303
303
  vertex: { header: `fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32> { return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0; }` }
304
304
  };
305
- var ML = chunkZ3DM4ETD_cjs.MAX_LIGHTS;
306
- var MC = chunkZ3DM4ETD_cjs.MAX_CASTERS;
307
- var TAPS = chunkZ3DM4ETD_cjs.SHADOW_TAPS;
305
+ var ML = chunkVVUSZVP7_cjs.MAX_LIGHTS;
306
+ var MC = chunkVVUSZVP7_cjs.MAX_CASTERS;
307
+ var TAPS = chunkVVUSZVP7_cjs.SHADOW_TAPS;
308
308
  var SHADOW_KEYS = Array.from({ length: MC }, (_, j) => `uShadow${j}`);
309
309
  var WGSL_SHADOW_DECLS = SHADOW_KEYS.map((k, j) => ` @group(2) @binding(${4 + j}) var ${k}: texture_2d<f32>;`).join("\n");
310
310
  var WGSL_SHADOW_PICK = SHADOW_KEYS.map((k, j) => (j === 0 ? "" : "else ") + `if (j == ${j}) { a = textureSampleLevel(${k}, uSampler, uv, 0.0).a; }`).join(" ");
@@ -664,8 +664,8 @@ function readLayerTransform(target) {
664
664
  x: c.x,
665
665
  y: c.y,
666
666
  z: c.z ?? 0,
667
- rotationX: (c.rotationX ?? 0) * chunkZ3DM4ETD_cjs.DEG,
668
- rotationY: (c.rotationY ?? 0) * chunkZ3DM4ETD_cjs.DEG,
667
+ rotationX: (c.rotationX ?? 0) * chunkVVUSZVP7_cjs.DEG,
668
+ rotationY: (c.rotationY ?? 0) * chunkVVUSZVP7_cjs.DEG,
669
669
  rotationZ: c.rotation,
670
670
  scaleX: c.scale.x,
671
671
  scaleY: c.scale.y,
@@ -730,26 +730,26 @@ var Layer3D = class {
730
730
  if (!(needW >= 1 && needH >= 1) || !Number.isFinite(bounds.x) || !Number.isFinite(bounds.y)) return this.hide();
731
731
  const size = this.sizeFor(needW, needH);
732
732
  const frame = { x: bounds.x - pad, y: bounds.y - pad, width: size.w, height: size.h };
733
- const projected = chunkZ3DM4ETD_cjs.projectLayer(readLayerTransform(target), frame, basis);
733
+ const projected = chunkVVUSZVP7_cjs.projectLayer(readLayerTransform(target), frame, basis);
734
734
  this.depth = projected.depth;
735
735
  {
736
736
  const lt = readLayerTransform(target);
737
- const o = chunkZ3DM4ETD_cjs.layerToWorld(lt, frame.x, frame.y);
738
- const pu = chunkZ3DM4ETD_cjs.layerToWorld(lt, frame.x + frame.width, frame.y);
739
- const pv = chunkZ3DM4ETD_cjs.layerToWorld(lt, frame.x, frame.y + frame.height);
737
+ const o = chunkVVUSZVP7_cjs.layerToWorld(lt, frame.x, frame.y);
738
+ const pu = chunkVVUSZVP7_cjs.layerToWorld(lt, frame.x + frame.width, frame.y);
739
+ const pv = chunkVVUSZVP7_cjs.layerToWorld(lt, frame.x, frame.y + frame.height);
740
740
  this.world = { o, u: { x: pu.x - o.x, y: pu.y - o.y, z: pu.z - o.z }, v: { x: pv.x - o.x, y: pv.y - o.y, z: pv.z - o.z } };
741
741
  }
742
742
  if (!projected.visible) {
743
743
  if (!this.warnedBehind) {
744
744
  this.warnedBehind = true;
745
745
  if (this.seq.spec.hideBehindCamera) return this.hide();
746
- if (projected.depth > chunkZ3DM4ETD_cjs.NEAR) {
746
+ if (projected.depth > chunkVVUSZVP7_cjs.NEAR) {
747
747
  console.warn(
748
- `pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.seq.spec)}: part of it (a corner) reaches the camera plane (z = ${(target.z ?? 0).toFixed(0)}, rotationX ${(target.rotationX ?? 0).toFixed(0)}\xB0, rotationY ${(target.rotationY ?? 0).toFixed(0)}\xB0), and a layer is hidden whole when any corner is at or behind it. Tilt it less (rotationX / rotationY), make it smaller, or keep the camera further away from it (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
748
+ `pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.seq.spec)}: part of it (a corner) reaches the camera plane (z = ${(target.z ?? 0).toFixed(0)}, rotationX ${(target.rotationX ?? 0).toFixed(0)}\xB0, rotationY ${(target.rotationY ?? 0).toFixed(0)}\xB0), and a layer is hidden whole when any corner is at or behind it. Tilt it less (rotationX / rotationY), make it smaller, or keep the camera further away from it (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
749
749
  );
750
750
  } else {
751
751
  console.warn(
752
- `pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.seq.spec)} is at or behind the camera plane (z = ${(target.z ?? 0).toFixed(0)}) and is hidden. If that is unintended, lower its z or move the camera back (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
752
+ `pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.seq.spec)} is at or behind the camera plane (z = ${(target.z ?? 0).toFixed(0)}) and is hidden. If that is unintended, lower its z or move the camera back (the default camera sits at z = (height/2)/tan(fov/2), about 989 for 720p at fov 40).`
753
753
  );
754
754
  }
755
755
  }
@@ -775,7 +775,7 @@ var Layer3D = class {
775
775
  */
776
776
  setBlur(radius) {
777
777
  const d = this.display;
778
- const r = radius > chunkZ3DM4ETD_cjs.MIN_BLUR ? Math.min(radius, chunkZ3DM4ETD_cjs.MAX_BLUR) : 0;
778
+ const r = radius > chunkVVUSZVP7_cjs.MIN_BLUR ? Math.min(radius, chunkVVUSZVP7_cjs.MAX_BLUR) : 0;
779
779
  this.blur = r;
780
780
  if (r === 0) {
781
781
  if (this.blurFilter) {
@@ -792,8 +792,8 @@ var Layer3D = class {
792
792
  this.blurFilter = new DiscBlurFilter(r);
793
793
  this.blendWas = d.blendMode ?? "normal";
794
794
  const chain = [this.blurFilter];
795
- if (chunkWYR2AU4W_cjs.isAdvancedBlend(this.blendWas)) {
796
- this.blendFilter = chunkWYR2AU4W_cjs.blendFilterFor(this.blendWas);
795
+ if (chunkGXGIISFS_cjs.isAdvancedBlend(this.blendWas)) {
796
+ this.blendFilter = chunkGXGIISFS_cjs.blendFilterFor(this.blendWas);
797
797
  if (this.blendFilter) {
798
798
  chain.push(this.blendFilter);
799
799
  d.blendMode = "normal";
@@ -817,7 +817,7 @@ var Layer3D = class {
817
817
  } catch (err) {
818
818
  if (!this.warnedLit) {
819
819
  this.warnedLit = true;
820
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.seq.spec)}: the lighting shader could not be made on this renderer (${err?.message ?? err}); the layer is drawn unlit`);
820
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.seq.spec)}: the lighting shader could not be made on this renderer (${err?.message ?? err}); the layer is drawn unlit`);
821
821
  }
822
822
  return null;
823
823
  }
@@ -911,8 +911,8 @@ var NEEDS_THREE_D = ["z", "rotationX", "rotationY"];
911
911
  var CAMERA_ONLY = ["focus", "aperture", "fogNear", "fogFar", "fogColor", "fogAmount"];
912
912
  var SKEW_KEYS = ["skew", "skewX", "skewY"];
913
913
  function lintSequence(spec, warn = defaultWarn) {
914
- const who = chunkNGJXVJB7_cjs.describeLayer(spec);
915
- const keys = chunkNGJXVJB7_cjs.collectPropKeys(spec);
914
+ const who = chunk3FCDRLW3_cjs.describeLayer(spec);
915
+ const keys = chunk3FCDRLW3_cjs.collectPropKeys(spec);
916
916
  const explained = /* @__PURE__ */ new Set();
917
917
  for (const k of keys) {
918
918
  const hint = LAYER_ALIASES[k] ?? (spec.type === "camera" ? CAMERA_ALIASES[k] : void 0);
@@ -961,8 +961,8 @@ function lintSequence(spec, warn = defaultWarn) {
961
961
  }
962
962
  function lintFocus(camera, siblings, warn = defaultWarn) {
963
963
  if (camera.type !== "camera") return;
964
- const who = chunkNGJXVJB7_cjs.describeLayer(camera);
965
- for (const p of chunkZ3DM4ETD_cjs.focusProblems(camera, siblings)) {
964
+ const who = chunk3FCDRLW3_cjs.describeLayer(camera);
965
+ for (const p of chunkVVUSZVP7_cjs.focusProblems(camera, siblings)) {
966
966
  if (p.kind === "missing") {
967
967
  warn(`pixi-effects: ${who}: focus: no layer named "${p.name}"${p.hint ? `; did you mean "${p.hint}"?` : ""} (the z = 0 plane is used). Write a threeD layer's name or a z number`);
968
968
  } else if (p.kind === "not-threeD") {
@@ -1252,7 +1252,7 @@ var MatteSet = class {
1252
1252
  };
1253
1253
 
1254
1254
  // src/sequences/Composition.ts
1255
- var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1255
+ var CompositionSequence = class extends chunkVVUSZVP7_cjs.Sequence {
1256
1256
  _innerContainer = null;
1257
1257
  _compositionShape = null;
1258
1258
  _children = [];
@@ -1319,27 +1319,27 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1319
1319
  this.intrinsicWidth = width;
1320
1320
  this.intrinsicHeight = height;
1321
1321
  this._innerContainer = inner;
1322
- const base = chunkZ3DM4ETD_cjs.timeRemapOf(this.spec);
1323
- const span = base ? chunkZ3DM4ETD_cjs.contentLength(base, this.duration) : this.duration;
1324
- this._remap = base ? chunkZ3DM4ETD_cjs.remapOf(this.spec, "time", span) : null;
1322
+ const base = chunkVVUSZVP7_cjs.timeRemapOf(this.spec);
1323
+ const span = base ? chunkVVUSZVP7_cjs.contentLength(base, this.duration) : this.duration;
1324
+ this._remap = base ? chunkVVUSZVP7_cjs.remapOf(this.spec, "time", span) : null;
1325
1325
  this._contentSpan = span;
1326
1326
  this._compositionShape = { width, height, duration: span, spaceAt: (t) => this._spaceAt(t), findLayer: (name) => this._children.find((c) => c.spec.name === name) ?? null, layerNames: () => this._children.map((c) => c.spec.name).filter((n) => !!n) };
1327
1327
  const lateKeyframes = [];
1328
1328
  for (const s of this.spec.sequences ?? []) {
1329
1329
  lintSequence(s);
1330
1330
  lintFocus(s, this.spec.sequences ?? []);
1331
- for (const message of matteProblems(s, this.spec.sequences ?? [], span)) console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(s)}: ${message}`);
1332
- chunkNGJXVJB7_cjs.lintTiming(s, span, (message, kind) => kind === "late-keyframe" ? lateKeyframes.push(message) : console.warn(message));
1333
- chunkNGJXVJB7_cjs.lintText(s);
1334
- chunkNGJXVJB7_cjs.lintKeys(s);
1331
+ for (const message of matteProblems(s, this.spec.sequences ?? [], span)) console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(s)}: ${message}`);
1332
+ chunk3FCDRLW3_cjs.lintTiming(s, span, (message, kind) => kind === "late-keyframe" ? lateKeyframes.push(message) : console.warn(message));
1333
+ chunk3FCDRLW3_cjs.lintText(s);
1334
+ chunk3FCDRLW3_cjs.lintKeys(s);
1335
1335
  }
1336
- for (const message of chunkNGJXVJB7_cjs.summarizeWarnings(lateKeyframes)) console.warn(message);
1337
- const crowd = chunkWYR2AU4W_cjs.maxConcurrentAdvanced(this.spec.sequences ?? [], span);
1338
- if (crowd >= chunkWYR2AU4W_cjs.MANY_ADVANCED) {
1339
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: ${crowd} layers with an advanced blendMode are on screen at once (a composition with one counts each layer inside it, since its children blend one by one); each is a full-frame pass (about 2 ms on WebGL). Put fewer layers in the blend (or draw the glow as one layer), or use add / screen / multiply`);
1336
+ for (const message of chunk3FCDRLW3_cjs.summarizeWarnings(lateKeyframes)) console.warn(message);
1337
+ const crowd = chunkGXGIISFS_cjs.maxConcurrentAdvanced(this.spec.sequences ?? [], span);
1338
+ if (crowd >= chunkGXGIISFS_cjs.MANY_ADVANCED) {
1339
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: ${crowd} layers with an advanced blendMode are on screen at once (a composition with one counts each layer inside it, since its children blend one by one); each is a full-frame pass (about 2 ms on WebGL). Put fewer layers in the blend (or draw the glow as one layer), or use add / screen / multiply`);
1340
1340
  }
1341
1341
  this._children = [];
1342
- await chunkZ3DM4ETD_cjs.buildSequenceTree(
1342
+ await chunkVVUSZVP7_cjs.buildSequenceTree(
1343
1343
  this.spec.sequences ?? [],
1344
1344
  this._compositionShape,
1345
1345
  this.root,
@@ -1351,22 +1351,22 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1351
1351
  if (matteNames.size > 0) {
1352
1352
  this._mattes = new MatteSet(inner, width, height);
1353
1353
  for (const name of matteNames) {
1354
- const source = this._children.find((c) => c.spec.name === name && !(c instanceof chunkZ3DM4ETD_cjs.CameraSequence));
1354
+ const source = this._children.find((c) => c.spec.name === name && !(c instanceof chunkVVUSZVP7_cjs.CameraSequence));
1355
1355
  if (!source || !source.target || !canBeMatte(source.spec)) continue;
1356
1356
  const chain = [];
1357
1357
  for (let p = this._parentOf.get(source); p; p = this._parentOf.get(p)) chain.push(p);
1358
1358
  this._mattes.add(name, source, chain);
1359
1359
  }
1360
1360
  }
1361
- if (this._children.some((c) => c instanceof chunkZ3DM4ETD_cjs.LightSequence)) {
1362
- for (const message of lightSetProblems(this.spec.sequences ?? [])) console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: ${message}`);
1361
+ if (this._children.some((c) => c instanceof chunkVVUSZVP7_cjs.LightSequence)) {
1362
+ for (const message of lightSetProblems(this.spec.sequences ?? [])) console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: ${message}`);
1363
1363
  }
1364
1364
  const layerNames = new Set(this._children.map((c) => c.spec.name).filter((n) => !!n));
1365
1365
  for (const cam of this._children) {
1366
- if (!(cam instanceof chunkZ3DM4ETD_cjs.CameraSequence)) continue;
1366
+ if (!(cam instanceof chunkVVUSZVP7_cjs.CameraSequence)) continue;
1367
1367
  cam.resolveFocusNames((name) => {
1368
1368
  const hit = this._children.find((c) => c.spec.name === name && c.spec.threeD);
1369
- return hit ? chunkZ3DM4ETD_cjs.layerInitialZ(hit.spec, hit.scope()) : void 0;
1369
+ return hit ? chunkVVUSZVP7_cjs.layerInitialZ(hit.spec, hit.scope()) : void 0;
1370
1370
  }, layerNames);
1371
1371
  }
1372
1372
  const blendSaid = /* @__PURE__ */ new Map();
@@ -1376,11 +1376,11 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1376
1376
  else blendSaid.set(message, { spec, n: 1 });
1377
1377
  };
1378
1378
  for (const child of this._children) {
1379
- if (child instanceof chunkZ3DM4ETD_cjs.CameraSequence) {
1379
+ if (child instanceof chunkVVUSZVP7_cjs.CameraSequence) {
1380
1380
  this._cameras.push(child);
1381
1381
  continue;
1382
1382
  }
1383
- if (child instanceof chunkZ3DM4ETD_cjs.LightSequence) {
1383
+ if (child instanceof chunkVVUSZVP7_cjs.LightSequence) {
1384
1384
  this._lights.push(child);
1385
1385
  continue;
1386
1386
  }
@@ -1394,10 +1394,10 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1394
1394
  inner.addChild(layer.display);
1395
1395
  this._layers3d.push(layer);
1396
1396
  this._visual.push({ seq: child, layer });
1397
- const added3d = chunkWYR2AU4W_cjs.applyBlendMode(child.spec, layer.display, report);
1397
+ const added3d = chunkGXGIISFS_cjs.applyBlendMode(child.spec, layer.display, report);
1398
1398
  if (added3d) this._blendOwned.push(added3d);
1399
1399
  if (maskSrc.kind !== "none") {
1400
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(child.spec)}: mask is not supported on threeD layers yet; ignored`);
1400
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(child.spec)}: mask is not supported on threeD layers yet; ignored`);
1401
1401
  }
1402
1402
  continue;
1403
1403
  }
@@ -1414,7 +1414,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1414
1414
  if (maskSrc.kind === "inline") {
1415
1415
  const maskSpec = maskSrc.spec;
1416
1416
  const lifetime = maskSpec.at === void 0 ? { at: child.at, duration: maskSpec.duration ?? child.duration } : {};
1417
- const built = await chunkZ3DM4ETD_cjs.buildSequenceTree([{ ...maskSpec, ...lifetime }], this._compositionShape, this.root);
1417
+ const built = await chunkVVUSZVP7_cjs.buildSequenceTree([{ ...maskSpec, ...lifetime }], this._compositionShape, this.root);
1418
1418
  const maskSeq = built[0];
1419
1419
  if (maskSeq?.target) {
1420
1420
  child.maskSequence = maskSeq;
@@ -1439,14 +1439,14 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1439
1439
  t.filters = [...Array.isArray(t.filters) ? t.filters : [], ...matteFilters];
1440
1440
  this._blendOwned.push(...matteFilters);
1441
1441
  }
1442
- const added = chunkWYR2AU4W_cjs.applyBlendMode(child.spec, child.target, report);
1442
+ const added = chunkGXGIISFS_cjs.applyBlendMode(child.spec, child.target, report);
1443
1443
  if (added) this._blendOwned.push(added);
1444
1444
  }
1445
1445
  if (this._mattes && this._mattes.size > MANY_MATTES) {
1446
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: ${this._mattes.size} mattes: each is a ${width}\xD7${height} texture (about ${Math.round(width * height * 4 / 1048576)} MiB, more with anti-aliasing). Share one matte between layers, or use fewer`);
1446
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: ${this._mattes.size} mattes: each is a ${width}\xD7${height} texture (about ${Math.round(width * height * 4 / 1048576)} MiB, more with anti-aliasing). Share one matte between layers, or use fewer`);
1447
1447
  }
1448
1448
  for (const [message, seen] of blendSaid) {
1449
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(seen.spec)}: ${message}${seen.n > 1 ? ` (and ${seen.n - 1} more layers have the same mistake)` : ""}`);
1449
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(seen.spec)}: ${message}${seen.n > 1 ? ` (and ${seen.n - 1} more layers have the same mistake)` : ""}`);
1450
1450
  }
1451
1451
  if (this._layers3d.length > 0) {
1452
1452
  inner.sortableChildren = true;
@@ -1457,7 +1457,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1457
1457
  console.warn("pixi-effects: camera has no effect: this composition has no threeD layers (a three layer with followCamera: true follows it)");
1458
1458
  }
1459
1459
  if (this._layers3d.length === 0 && this._lights.length > 0 && !this._children.some((c) => c.spec.followLights)) {
1460
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: a light has no effect: this composition has no threeD layers (a light lights only the threeD layers of its own composition, not those of the compositions nested in it: put the light inside the composition that holds them)`);
1460
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: a light has no effect: this composition has no threeD layers (a light lights only the threeD layers of its own composition, not those of the compositions nested in it: put the light inside the composition that holds them)`);
1461
1461
  }
1462
1462
  this.buildFilters();
1463
1463
  }
@@ -1470,9 +1470,9 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1470
1470
  const remap = this._remap;
1471
1471
  const childOffset = remap ? 0 : offset + this.at;
1472
1472
  this._childBase = childOffset;
1473
- const target = remap ? chunkZ3DM4ETD_cjs.createTimeline({ paused: true, defaults: { ease: "none" } }) : timeline;
1473
+ const target = remap ? chunkVVUSZVP7_cjs.createTimeline({ paused: true, defaults: { ease: "none" } }) : timeline;
1474
1474
  for (const child of this._children) {
1475
- const own = chunkZ3DM4ETD_cjs.createTimeline({ defaults: { ease: "none" } });
1475
+ const own = chunkVVUSZVP7_cjs.createTimeline({ defaults: { ease: "none" } });
1476
1476
  child.bindTimeline(own, childOffset);
1477
1477
  child.maskSequence?.bindTimeline(own, childOffset);
1478
1478
  target.add(own, 0);
@@ -1502,8 +1502,8 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1502
1502
  this._clock = clock;
1503
1503
  const scope = this.scope();
1504
1504
  if (remap.start !== void 0 && remap.timeKfs.length === 0) clock.time = remap.start;
1505
- chunkZ3DM4ETD_cjs.bindClock(timeline, clock, "time", remap, this.duration, offset + this.at, scope);
1506
- this._warnUnreachable(chunkZ3DM4ETD_cjs.clockTable(remap, "time", this.duration, offset + this.at, scope, offset + this.at + this.duration), offset + this.at, offset + this.at + this.duration);
1505
+ chunkVVUSZVP7_cjs.bindClock(timeline, clock, "time", remap, this.duration, offset + this.at, scope);
1506
+ this._warnUnreachable(chunkVVUSZVP7_cjs.clockTable(remap, "time", this.duration, offset + this.at, scope, offset + this.at + this.duration), offset + this.at, offset + this.at + this.duration);
1507
1507
  }
1508
1508
  /**
1509
1509
  * A child the clock never dwells in is never visible: say so. Its `at` is in THIS composition's local time, so the usual mistake is
@@ -1527,7 +1527,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1527
1527
  }
1528
1528
  if (dwell >= 2) continue;
1529
1529
  console.warn(
1530
- `pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(child.spec)} starts at ${at}s of ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}'s own time, but its clock only reaches ${Number(table.min.toFixed(3))}\u2013${Number(table.max.toFixed(3))}s (${how}), so it is never visible. Layers inside a remapped composition are placed in that composition's local time.`
1530
+ `pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(child.spec)} starts at ${at}s of ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}'s own time, but its clock only reaches ${Number(table.min.toFixed(3))}\u2013${Number(table.max.toFixed(3))}s (${how}), so it is never visible. Layers inside a remapped composition are placed in that composition's local time.`
1531
1531
  );
1532
1532
  }
1533
1533
  }
@@ -1541,7 +1541,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1541
1541
  for (let p = this._parentOf.get(seq); p; p = this._parentOf.get(p)) out.push(p);
1542
1542
  return out;
1543
1543
  };
1544
- return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof chunkZ3DM4ETD_cjs.NullSequence)).map((seq) => {
1544
+ return [...this._visual.map((v) => v.seq), ...this._nested].filter((seq) => !(seq instanceof chunkVVUSZVP7_cjs.NullSequence)).map((seq) => {
1545
1545
  const layer = this._visual.find((v) => v.seq === seq)?.layer ?? null;
1546
1546
  return {
1547
1547
  seq,
@@ -1551,24 +1551,24 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1551
1551
  depthBlur: layer?.blur ?? 0,
1552
1552
  quad: layer && layer.display.visible ? layer.corners : null,
1553
1553
  // how lit it is (threeD layers that receive the lights of the last frame only); computed here, not per frame
1554
- light: layer && this._lighting && layer.world && layer.spec.lit !== false ? chunkZ3DM4ETD_cjs.lightLevel(layer.world, this._lighting.cam, this._lighting.states) : void 0
1554
+ light: layer && this._lighting && layer.world && layer.spec.lit !== false ? chunkVVUSZVP7_cjs.lightLevel(layer.world, this._lighting.cam, this._lighting.states) : void 0
1555
1555
  };
1556
1556
  });
1557
1557
  }
1558
1558
  /** Match every `parent: 'name'` to a null layer; anything that cannot work is said out loud and drawn unparented. */
1559
1559
  _resolveParents() {
1560
- const nulls = this._children.filter((c) => c instanceof chunkZ3DM4ETD_cjs.NullSequence);
1560
+ const nulls = this._children.filter((c) => c instanceof chunkVVUSZVP7_cjs.NullSequence);
1561
1561
  const nullNames = nulls.map((n) => n.spec.name).filter((n) => !!n);
1562
1562
  const warned = /* @__PURE__ */ new Set();
1563
1563
  for (const child of this._children) {
1564
1564
  const want = child.spec.parent;
1565
1565
  if (want === void 0) continue;
1566
- const who = chunkNGJXVJB7_cjs.describeLayer(child.spec);
1567
- if (child instanceof chunkZ3DM4ETD_cjs.CameraSequence) {
1566
+ const who = chunk3FCDRLW3_cjs.describeLayer(child.spec);
1567
+ if (child instanceof chunkVVUSZVP7_cjs.CameraSequence) {
1568
1568
  console.warn(`pixi-effects: ${who}: a camera cannot have a parent; ignored`);
1569
1569
  continue;
1570
1570
  }
1571
- if (child instanceof chunkZ3DM4ETD_cjs.LightSequence) {
1571
+ if (child instanceof chunkVVUSZVP7_cjs.LightSequence) {
1572
1572
  console.warn(`pixi-effects: ${who}: a light cannot have a parent (parent "${want}" ignored: move the light with its own x / y / z keyframes)`);
1573
1573
  continue;
1574
1574
  }
@@ -1582,7 +1582,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1582
1582
  console.warn(`pixi-effects: ${who}: parent "${want}": no layer with that name${hint ? `; did you mean "${hint}"?` : ""} (the layer is drawn without a parent)`);
1583
1583
  continue;
1584
1584
  }
1585
- const holder = same.find((c) => c instanceof chunkZ3DM4ETD_cjs.NullSequence);
1585
+ const holder = same.find((c) => c instanceof chunkVVUSZVP7_cjs.NullSequence);
1586
1586
  if (!holder) {
1587
1587
  console.warn(`pixi-effects: ${who}: parent "${want}" is a ${same[0].spec.type} layer; only { type: 'null' } layers can be parents (the layer is drawn without a parent)`);
1588
1588
  continue;
@@ -1627,8 +1627,8 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1627
1627
  childT,
1628
1628
  compEnd
1629
1629
  );
1630
- const cam = active ? active.cam.state() : chunkZ3DM4ETD_cjs.homeCamera(width, height);
1631
- const basis = chunkZ3DM4ETD_cjs.cameraBasis(cam, width, height);
1630
+ const cam = active ? active.cam.state() : chunkVVUSZVP7_cjs.homeCamera(width, height);
1631
+ const basis = chunkVVUSZVP7_cjs.cameraBasis(cam, width, height);
1632
1632
  for (const layer of this._layers3d) layer.update(host, basis);
1633
1633
  this._applyLighting(childT, compEnd, basis, active?.cam ?? null);
1634
1634
  this._applyDepthOfField(cam, basis);
@@ -1651,7 +1651,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1651
1651
  const { width, height } = this._compositionShape;
1652
1652
  const compEnd = this._childBase + (this.duration ?? 0);
1653
1653
  const active = pickActiveCamera(this._cameras.map((cam) => ({ cam, ...cam.window() })), t, compEnd);
1654
- return { camera: active ? active.cam.state() : chunkZ3DM4ETD_cjs.homeCamera(width, height), lights: this._liveLights(t, compEnd).map((l) => l.state()), fog: active?.cam.fogState() ?? null };
1654
+ return { camera: active ? active.cam.state() : chunkVVUSZVP7_cjs.homeCamera(width, height), lights: this._liveLights(t, compEnd).map((l) => l.state()), fog: active?.cam.fogState() ?? null };
1655
1655
  }
1656
1656
  /**
1657
1657
  * Lights and fog: when the composition has a light layer or the camera writes fog, every threeD layer draws with the lit shader, fed with
@@ -1663,7 +1663,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1663
1663
  const fog = cam?.fogState() ?? null;
1664
1664
  if (this._lights.length === 0 && !this._cameras.some((c) => c.fog)) return;
1665
1665
  const states = this._liveLights(t, compEnd).map((l) => l.state());
1666
- const packed = states.length > 0 ? chunkZ3DM4ETD_cjs.packLights(states) : null;
1666
+ const packed = states.length > 0 ? chunkVVUSZVP7_cjs.packLights(states) : null;
1667
1667
  this._lighting = states.length > 0 ? { states, cam: { x: basis.cx, y: basis.cy, z: basis.cz } } : null;
1668
1668
  const shadowing = states.some((s) => s.castsShadows);
1669
1669
  const casters = shadowing ? this._layers3d.filter((l) => l.spec.castsShadows && l.display.visible && l.world && l.source) : [];
@@ -1672,7 +1672,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1672
1672
  const mat = l.setLit(true);
1673
1673
  if (!mat || !l.world) continue;
1674
1674
  const lit = l.spec.lit !== false;
1675
- const mine = lit ? casters.filter((c) => c !== l).slice(0, chunkZ3DM4ETD_cjs.MAX_CASTERS).map((c) => ({ frame: c.world, source: c.source })) : [];
1675
+ const mine = lit ? casters.filter((c) => c !== l).slice(0, chunkVVUSZVP7_cjs.MAX_CASTERS).map((c) => ({ frame: c.world, source: c.source })) : [];
1676
1676
  mat.update(l.world, camInfo, lit ? packed : null, fog, mine);
1677
1677
  }
1678
1678
  }
@@ -1683,23 +1683,23 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1683
1683
  for (const l of this._layers3d) l.setBlur(0);
1684
1684
  return;
1685
1685
  }
1686
- const focusDepth = chunkZ3DM4ETD_cjs.projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;
1687
- if (!(focusDepth > chunkZ3DM4ETD_cjs.NEAR)) {
1686
+ const focusDepth = chunkVVUSZVP7_cjs.projectPoint(basis, { x: cam.lookAtX, y: cam.lookAtY, z: cam.focus ?? 0 }).depth;
1687
+ if (!(focusDepth > chunkVVUSZVP7_cjs.NEAR)) {
1688
1688
  if (!this._dofSaid.behind) {
1689
1689
  this._dofSaid.behind = true;
1690
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: the camera's focus (z = ${(cam.focus ?? 0).toFixed(0)}) is at or behind the camera, so nothing is blurred. Put focus in front of the camera (a z below the camera's z)`);
1690
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: the camera's focus (z = ${(cam.focus ?? 0).toFixed(0)}) is at or behind the camera, so nothing is blurred. Put focus in front of the camera (a z below the camera's z)`);
1691
1691
  }
1692
1692
  for (const l of this._layers3d) l.setBlur(0);
1693
1693
  return;
1694
1694
  }
1695
1695
  let blurred = 0;
1696
1696
  for (const l of this._layers3d) {
1697
- l.setBlur(l.display.visible ? chunkZ3DM4ETD_cjs.blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);
1697
+ l.setBlur(l.display.visible ? chunkVVUSZVP7_cjs.blurRadius(aperture, basis.focal, l.depth, focusDepth) : 0);
1698
1698
  if (l.blur > 0) blurred++;
1699
1699
  }
1700
- if (blurred >= chunkZ3DM4ETD_cjs.MANY_BLURRED && !this._dofSaid.many) {
1700
+ if (blurred >= chunkVVUSZVP7_cjs.MANY_BLURRED && !this._dofSaid.many) {
1701
1701
  this._dofSaid.many = true;
1702
- console.warn(`pixi-effects: ${chunkNGJXVJB7_cjs.describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once (it warns from ${chunkZ3DM4ETD_cjs.MANY_BLURRED}); each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);
1702
+ console.warn(`pixi-effects: ${chunk3FCDRLW3_cjs.describeLayer(this.spec)}: ${blurred} layers are blurred by depth of field at once (it warns from ${chunkVVUSZVP7_cjs.MANY_BLURRED}); each costs a filter pass per frame (WebGPU more). Merge the far layers or lower aperture`);
1703
1703
  }
1704
1704
  }
1705
1705
  collectAudio(out, baseTime) {
@@ -1713,7 +1713,7 @@ var CompositionSequence = class extends chunkZ3DM4ETD_cjs.Sequence {
1713
1713
  const inner = [];
1714
1714
  for (const child of this._children) child.collectAudio(inner, 0);
1715
1715
  const lo = baseTime + this.at, hi = lo + this.duration;
1716
- const table = chunkZ3DM4ETD_cjs.clockTable(remap, "time", this.duration, lo, this.scope(), hi);
1716
+ const table = chunkVVUSZVP7_cjs.clockTable(remap, "time", this.duration, lo, this.scope(), hi);
1717
1717
  for (const d of inner) {
1718
1718
  const prev = d.warp;
1719
1719
  out.push({ ...d, warp: (t) => t < lo || t > hi ? NaN : prev ? prev(table.at(t)) : table.at(t) });
@@ -1743,5 +1743,5 @@ function frameOf(child) {
1743
1743
 
1744
1744
  exports.CompositionSequence = CompositionSequence;
1745
1745
  exports.maskSourceOf = maskSourceOf;
1746
- //# sourceMappingURL=chunk-CCPJD76D.cjs.map
1747
- //# sourceMappingURL=chunk-CCPJD76D.cjs.map
1746
+ //# sourceMappingURL=chunk-O2MD3L4J.cjs.map
1747
+ //# sourceMappingURL=chunk-O2MD3L4J.cjs.map