pixi-effects 0.18.1 → 0.20.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 (70) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +6 -6
  3. package/ai/CHAT.md +1 -1
  4. package/ai/SKILL.md +2 -1
  5. package/ai/chat-template.html +4 -4
  6. package/ai/reference/cheatsheet.md +10 -9
  7. package/ai/reference/pitfalls.md +9 -0
  8. package/ai/reference/recipes.md +117 -0
  9. package/ai/template.html +5 -5
  10. package/ai/tools/check.mjs +29 -6
  11. package/dist/{Base-BQUodYZK.d.ts → Base-CzfLGoDr.d.ts} +9 -1
  12. package/dist/{Base-OHqp8qvX.d.cts → Base-wYJQ2g5Q.d.cts} +9 -1
  13. package/dist/Composition-6PA4C4TV.js +5 -0
  14. package/dist/{Composition-MLBHYYFF.js.map → Composition-6PA4C4TV.js.map} +1 -1
  15. package/dist/Composition-LL2XXU5N.cjs +14 -0
  16. package/dist/{Composition-6JMXWNVV.cjs.map → Composition-LL2XXU5N.cjs.map} +1 -1
  17. package/dist/Controller.cjs +2 -2
  18. package/dist/Controller.d.cts +2 -2
  19. package/dist/Controller.d.ts +2 -2
  20. package/dist/Controller.js +1 -1
  21. package/dist/{Movie-DlHQ9C02.d.ts → Movie-CBxGH5ms.d.ts} +13 -2
  22. package/dist/{Movie-K2YuVAdg.d.cts → Movie-CzzJw8A-.d.cts} +13 -2
  23. package/dist/Presenter.cjs +2 -2
  24. package/dist/Presenter.d.cts +2 -2
  25. package/dist/Presenter.d.ts +2 -2
  26. package/dist/Presenter.js +1 -1
  27. package/dist/{chunk-SG3Y66FN.js → chunk-DQHXVNOI.js} +1029 -64
  28. package/dist/chunk-DQHXVNOI.js.map +1 -0
  29. package/dist/{chunk-JW67MDHQ.cjs → chunk-FFYA3UBU.cjs} +144 -36
  30. package/dist/chunk-FFYA3UBU.cjs.map +1 -0
  31. package/dist/{chunk-DKGG7WD4.js → chunk-MNM56B3X.js} +6 -3
  32. package/dist/chunk-MNM56B3X.js.map +1 -0
  33. package/dist/{chunk-ANO5R2E6.cjs → chunk-NO26HWR7.cjs} +1036 -65
  34. package/dist/chunk-NO26HWR7.cjs.map +1 -0
  35. package/dist/{chunk-UXDR3ZDU.js → chunk-TSPMKV2F.js} +121 -13
  36. package/dist/chunk-TSPMKV2F.js.map +1 -0
  37. package/dist/{chunk-UQBGW5DO.cjs → chunk-WTRKDIKH.cjs} +6 -3
  38. package/dist/chunk-WTRKDIKH.cjs.map +1 -0
  39. package/dist/index.cjs +246 -96
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +4 -4
  42. package/dist/index.d.ts +4 -4
  43. package/dist/index.js +187 -37
  44. package/dist/index.js.map +1 -1
  45. package/dist/loader.css +1 -1
  46. package/dist/{music-4HDFULNR.js → music-CFEC7HKL.js} +3 -3
  47. package/dist/{music-4HDFULNR.js.map → music-CFEC7HKL.js.map} +1 -1
  48. package/dist/{music-3OF5C6X5.cjs → music-UAN7DXK4.cjs} +7 -7
  49. package/dist/{music-3OF5C6X5.cjs.map → music-UAN7DXK4.cjs.map} +1 -1
  50. package/dist/{sfx-MZJZXYY3.cjs → sfx-EX4PUBMV.cjs} +8 -8
  51. package/dist/{sfx-MZJZXYY3.cjs.map → sfx-EX4PUBMV.cjs.map} +1 -1
  52. package/dist/{sfx-S37DDC66.js → sfx-U3GM2MED.js} +3 -3
  53. package/dist/{sfx-S37DDC66.js.map → sfx-U3GM2MED.js.map} +1 -1
  54. package/dist/three.cjs +6 -6
  55. package/dist/three.d.cts +2 -2
  56. package/dist/three.d.ts +2 -2
  57. package/dist/three.js +2 -2
  58. package/dist/{types-SS51lP6O.d.ts → types-YmUaViL1.d.cts} +40 -6
  59. package/dist/{types-SS51lP6O.d.cts → types-YmUaViL1.d.ts} +40 -6
  60. package/docs/dsl.md +58 -5
  61. package/llms-full.txt +196 -15
  62. package/package.json +3 -1
  63. package/dist/Composition-6JMXWNVV.cjs +0 -14
  64. package/dist/Composition-MLBHYYFF.js +0 -5
  65. package/dist/chunk-ANO5R2E6.cjs.map +0 -1
  66. package/dist/chunk-DKGG7WD4.js.map +0 -1
  67. package/dist/chunk-JW67MDHQ.cjs.map +0 -1
  68. package/dist/chunk-SG3Y66FN.js.map +0 -1
  69. package/dist/chunk-UQBGW5DO.cjs.map +0 -1
  70. package/dist/chunk-UXDR3ZDU.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ export { CompositionSequence } from './chunk-TSPMKV2F.js';
2
+ import './chunk-DQHXVNOI.js';
3
+ import './chunk-MNM56B3X.js';
4
+ //# sourceMappingURL=Composition-6PA4C4TV.js.map
5
+ //# sourceMappingURL=Composition-6PA4C4TV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Composition-MLBHYYFF.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Composition-6PA4C4TV.js"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var chunkFFYA3UBU_cjs = require('./chunk-FFYA3UBU.cjs');
4
+ require('./chunk-NO26HWR7.cjs');
5
+ require('./chunk-WTRKDIKH.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "CompositionSequence", {
10
+ enumerable: true,
11
+ get: function () { return chunkFFYA3UBU_cjs.CompositionSequence; }
12
+ });
13
+ //# sourceMappingURL=Composition-LL2XXU5N.cjs.map
14
+ //# sourceMappingURL=Composition-LL2XXU5N.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Composition-6JMXWNVV.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Composition-LL2XXU5N.cjs"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUQBGW5DO_cjs = require('./chunk-UQBGW5DO.cjs');
3
+ var chunkWTRKDIKH_cjs = require('./chunk-WTRKDIKH.cjs');
4
4
 
5
5
  // src/Controller.ts
6
6
  var ICONS = {
@@ -456,7 +456,7 @@ var Controller = class _Controller {
456
456
  }
457
457
  /** Change the look of the bar (see {@link ControllerTheme}): only the keys you give change, `null` restores the default. */
458
458
  setTheme(theme) {
459
- chunkUQBGW5DO_cjs.warnUnknownOptions("Controller theme", theme, Object.keys(THEME_PROPERTIES));
459
+ chunkWTRKDIKH_cjs.warnUnknownOptions("Controller theme", theme, Object.keys(THEME_PROPERTIES));
460
460
  for (const key of Object.keys(THEME_PROPERTIES)) {
461
461
  if (!(key in theme)) continue;
462
462
  const value = theme[key];
@@ -1,7 +1,7 @@
1
- import { h as Movie } from './Movie-K2YuVAdg.cjs';
1
+ import { h as Movie } from './Movie-CzzJw8A-.cjs';
2
2
  import 'pixi.js';
3
3
  import 'gsap';
4
- import './types-SS51lP6O.cjs';
4
+ import './types-YmUaViL1.cjs';
5
5
 
6
6
  /** The bar's default stylesheet. Its colours and sizes are CSS custom properties (`--mc-accent`, `--mc-fg`, `--mc-track`, `--mc-bar-bg`, `--mc-track-height`, `--mc-font`): set them in your page CSS, or with the `theme` option. */
7
7
  declare const CONTROLLER_CSS = "\n.movie-controller-wrap { position: relative; display: inline-block; line-height: 0; }\n.movie-controller {\n position: absolute;\n pointer-events: none;\n font-family: var(--mc-font, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n opacity: 1;\n transition: opacity 200ms ease;\n}\n.movie-controller[data-state=\"hidden\"] { opacity: 0; }\n.movie-controller > * { pointer-events: auto; }\n\n.mc-progress {\n position: relative;\n width: 100%;\n height: 16px;\n cursor: pointer;\n display: flex;\n align-items: center;\n outline: none;\n}\n.mc-progress:focus-visible {\n outline: 2px solid var(--mc-accent, #007AFF);\n outline-offset: 2px;\n}\n.mc-progress::before {\n content: \"\"; position: absolute; left: 12px; right: 12px;\n height: var(--mc-track-height, 3px); background: var(--mc-track, rgba(255,255,255,0.25));\n transition: height 120ms ease;\n}\n.mc-progress:hover::before, .mc-progress.mc-scrubbing::before { height: calc(var(--mc-track-height, 3px) + 2px); }\n.mc-stops { position: absolute; left: 12px; right: 12px; top: 0; bottom: 0; pointer-events: none; }\n.mc-stop-tick { position: absolute; top: 50%; width: 7px; height: 7px; transform: translate(-50%, -50%); border-radius: 50%; background: var(--mc-fg, #fff); box-shadow: 0 0 0 1.5px rgba(0,0,0,0.5); }\n.mc-stop-page { width: 11px; height: 11px; box-shadow: 0 0 0 2.5px var(--mc-accent, #007AFF), 0 0 0 4px rgba(0,0,0,0.35); }\n.mc-progress-fill {\n position: absolute; left: 12px; top: 50%;\n height: var(--mc-track-height, 3px);\n width: calc((100% - 24px) * var(--mc-fill, 0));\n background: var(--mc-accent, #007AFF);\n transform: translateY(-50%);\n transition: height 120ms ease;\n pointer-events: none;\n}\n.mc-progress:hover .mc-progress-fill,\n.mc-progress.mc-scrubbing .mc-progress-fill { height: calc(var(--mc-track-height, 3px) + 2px); }\n.mc-progress-thumb {\n position: absolute; top: 50%;\n left: calc(12px + (100% - 24px) * var(--mc-fill, 0));\n width: 12px; height: 12px; border-radius: 50%;\n background: var(--mc-accent, #007AFF);\n transform: translate(-50%, -50%) scale(0);\n transition: transform 120ms ease;\n pointer-events: none;\n}\n.mc-progress:hover .mc-progress-thumb,\n.mc-progress.mc-scrubbing .mc-progress-thumb { transform: translate(-50%, -50%) scale(1); }\n\n.mc-bar {\n position: relative;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 12px 8px 12px;\n background: var(--mc-bar-bg, linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0) 100%));\n color: var(--mc-fg, #fff);\n line-height: 1;\n}\n.mc-btn {\n background: none; border: 0; padding: 0; margin: 0;\n width: 28px; height: 28px;\n display: inline-flex; align-items: center; justify-content: center;\n color: var(--mc-fg, #fff); opacity: 0.85; cursor: pointer;\n transition: opacity 120ms ease;\n}\n.mc-btn:hover { opacity: 1; }\n.mc-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n.mc-time {\n font-size: 12px; font-family: Menlo, Monaco, monospace;\n color: var(--mc-fg, #fff); opacity: 0.85;\n min-width: 90px;\n}\n.mc-spacer { flex: 1; }\n\n.mc-volume { display: flex; align-items: center; }\n.mc-vol-slider {\n position: relative;\n width: 0;\n height: 28px;\n display: flex;\n align-items: center;\n cursor: pointer;\n margin-left: 0;\n outline: none;\n transition: width 200ms ease, margin-left 200ms ease;\n overflow: hidden;\n}\n.mc-volume:hover .mc-vol-slider,\n.mc-volume:focus-within .mc-vol-slider,\n.mc-vol-slider.mc-scrubbing {\n width: 70px;\n margin-left: 6px;\n}\n.mc-vol-slider:focus-visible { outline: 2px solid var(--mc-accent, #007AFF); outline-offset: 2px; }\n.mc-vol-slider::before {\n content: \"\"; position: absolute; left: 4px; right: 4px;\n height: 3px; background: var(--mc-track, rgba(255,255,255,0.25)); border-radius: 2px;\n}\n.mc-vol-fill {\n position: absolute; left: 4px; top: 50%;\n height: 3px;\n width: calc((100% - 8px) * var(--mc-volume, 1));\n background: var(--mc-fg, #fff);\n transform: translateY(-50%);\n border-radius: 2px;\n pointer-events: none;\n}\n.mc-vol-thumb {\n position: absolute; top: 50%;\n left: calc(4px + (100% - 8px) * var(--mc-volume, 1));\n width: 10px; height: 10px; border-radius: 50%;\n background: var(--mc-fg, #fff);\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n\n[data-mc-wrap]:fullscreen {\n width: 100vw; height: 100vh;\n display: flex; align-items: center; justify-content: center;\n background: #000;\n}\n[data-mc-wrap]:fullscreen > canvas {\n width: 100% !important;\n height: 100% !important;\n max-width: none !important;\n max-height: none !important;\n object-fit: contain;\n border-radius: 0;\n}\n\n.mc-settings-popover {\n position: absolute;\n bottom: calc(100% + 8px);\n right: 12px;\n background: rgba(20, 20, 20, 0.96);\n border-radius: 8px;\n padding: 10px 12px;\n min-width: 180px;\n color: #fff;\n font-size: 12px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mc-settings-popover[data-open=\"false\"] { display: none; }\n.mc-settings-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n.mc-settings-row > span { color: rgba(255,255,255,0.85); }\n.mc-settings-row > select {\n font: inherit;\n background: rgba(255,255,255,0.1);\n color: #fff;\n border: 1px solid rgba(255,255,255,0.18);\n border-radius: 4px;\n padding: 2px 6px;\n cursor: pointer;\n}\n.mc-export-confirm {\n margin-top: 4px;\n width: 100%;\n background: var(--mc-accent, #007AFF);\n color: #fff;\n border: 0;\n border-radius: 4px;\n padding: 6px 10px;\n font: inherit;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.mc-export-confirm:hover { background: #0066d6; }\n.mc-export-confirm:disabled { background: rgba(255,255,255,0.18); cursor: not-allowed; }\n\n.mc-export-overlay {\n position: absolute; inset: 0;\n background: rgba(0,0,0,0.7);\n display: flex; justify-content: center; align-items: center;\n z-index: 2;\n}\n.mc-export-panel {\n background: rgba(20,20,20,0.96); color: #fff;\n border-radius: 8px; padding: 16px 20px;\n text-align: center; min-width: 200px; max-width: 80%;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n.mc-export-title { font-size: 13px; margin-bottom: 10px; opacity: 0.9; }\n.mc-export-track {\n width: 100%; height: 6px;\n background: rgba(255,255,255,0.15); border-radius: 3px;\n margin-bottom: 8px; overflow: hidden;\n}\n.mc-export-fill {\n height: 100%; width: 0%;\n background: linear-gradient(90deg, var(--mc-accent, #007AFF), var(--mc-accent, #0056CC));\n transition: width 0.3s ease; border-radius: 3px;\n}\n.mc-export-text {\n color: rgba(255,255,255,0.7); font-size: 11px;\n font-family: Menlo, Monaco, monospace;\n}\n";
@@ -1,7 +1,7 @@
1
- import { h as Movie } from './Movie-DlHQ9C02.js';
1
+ import { h as Movie } from './Movie-CBxGH5ms.js';
2
2
  import 'pixi.js';
3
3
  import 'gsap';
4
- import './types-SS51lP6O.js';
4
+ import './types-YmUaViL1.js';
5
5
 
6
6
  /** The bar's default stylesheet. Its colours and sizes are CSS custom properties (`--mc-accent`, `--mc-fg`, `--mc-track`, `--mc-bar-bg`, `--mc-track-height`, `--mc-font`): set them in your page CSS, or with the `theme` option. */
7
7
  declare const CONTROLLER_CSS = "\n.movie-controller-wrap { position: relative; display: inline-block; line-height: 0; }\n.movie-controller {\n position: absolute;\n pointer-events: none;\n font-family: var(--mc-font, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n opacity: 1;\n transition: opacity 200ms ease;\n}\n.movie-controller[data-state=\"hidden\"] { opacity: 0; }\n.movie-controller > * { pointer-events: auto; }\n\n.mc-progress {\n position: relative;\n width: 100%;\n height: 16px;\n cursor: pointer;\n display: flex;\n align-items: center;\n outline: none;\n}\n.mc-progress:focus-visible {\n outline: 2px solid var(--mc-accent, #007AFF);\n outline-offset: 2px;\n}\n.mc-progress::before {\n content: \"\"; position: absolute; left: 12px; right: 12px;\n height: var(--mc-track-height, 3px); background: var(--mc-track, rgba(255,255,255,0.25));\n transition: height 120ms ease;\n}\n.mc-progress:hover::before, .mc-progress.mc-scrubbing::before { height: calc(var(--mc-track-height, 3px) + 2px); }\n.mc-stops { position: absolute; left: 12px; right: 12px; top: 0; bottom: 0; pointer-events: none; }\n.mc-stop-tick { position: absolute; top: 50%; width: 7px; height: 7px; transform: translate(-50%, -50%); border-radius: 50%; background: var(--mc-fg, #fff); box-shadow: 0 0 0 1.5px rgba(0,0,0,0.5); }\n.mc-stop-page { width: 11px; height: 11px; box-shadow: 0 0 0 2.5px var(--mc-accent, #007AFF), 0 0 0 4px rgba(0,0,0,0.35); }\n.mc-progress-fill {\n position: absolute; left: 12px; top: 50%;\n height: var(--mc-track-height, 3px);\n width: calc((100% - 24px) * var(--mc-fill, 0));\n background: var(--mc-accent, #007AFF);\n transform: translateY(-50%);\n transition: height 120ms ease;\n pointer-events: none;\n}\n.mc-progress:hover .mc-progress-fill,\n.mc-progress.mc-scrubbing .mc-progress-fill { height: calc(var(--mc-track-height, 3px) + 2px); }\n.mc-progress-thumb {\n position: absolute; top: 50%;\n left: calc(12px + (100% - 24px) * var(--mc-fill, 0));\n width: 12px; height: 12px; border-radius: 50%;\n background: var(--mc-accent, #007AFF);\n transform: translate(-50%, -50%) scale(0);\n transition: transform 120ms ease;\n pointer-events: none;\n}\n.mc-progress:hover .mc-progress-thumb,\n.mc-progress.mc-scrubbing .mc-progress-thumb { transform: translate(-50%, -50%) scale(1); }\n\n.mc-bar {\n position: relative;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 12px 8px 12px;\n background: var(--mc-bar-bg, linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0) 100%));\n color: var(--mc-fg, #fff);\n line-height: 1;\n}\n.mc-btn {\n background: none; border: 0; padding: 0; margin: 0;\n width: 28px; height: 28px;\n display: inline-flex; align-items: center; justify-content: center;\n color: var(--mc-fg, #fff); opacity: 0.85; cursor: pointer;\n transition: opacity 120ms ease;\n}\n.mc-btn:hover { opacity: 1; }\n.mc-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n.mc-time {\n font-size: 12px; font-family: Menlo, Monaco, monospace;\n color: var(--mc-fg, #fff); opacity: 0.85;\n min-width: 90px;\n}\n.mc-spacer { flex: 1; }\n\n.mc-volume { display: flex; align-items: center; }\n.mc-vol-slider {\n position: relative;\n width: 0;\n height: 28px;\n display: flex;\n align-items: center;\n cursor: pointer;\n margin-left: 0;\n outline: none;\n transition: width 200ms ease, margin-left 200ms ease;\n overflow: hidden;\n}\n.mc-volume:hover .mc-vol-slider,\n.mc-volume:focus-within .mc-vol-slider,\n.mc-vol-slider.mc-scrubbing {\n width: 70px;\n margin-left: 6px;\n}\n.mc-vol-slider:focus-visible { outline: 2px solid var(--mc-accent, #007AFF); outline-offset: 2px; }\n.mc-vol-slider::before {\n content: \"\"; position: absolute; left: 4px; right: 4px;\n height: 3px; background: var(--mc-track, rgba(255,255,255,0.25)); border-radius: 2px;\n}\n.mc-vol-fill {\n position: absolute; left: 4px; top: 50%;\n height: 3px;\n width: calc((100% - 8px) * var(--mc-volume, 1));\n background: var(--mc-fg, #fff);\n transform: translateY(-50%);\n border-radius: 2px;\n pointer-events: none;\n}\n.mc-vol-thumb {\n position: absolute; top: 50%;\n left: calc(4px + (100% - 8px) * var(--mc-volume, 1));\n width: 10px; height: 10px; border-radius: 50%;\n background: var(--mc-fg, #fff);\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n\n[data-mc-wrap]:fullscreen {\n width: 100vw; height: 100vh;\n display: flex; align-items: center; justify-content: center;\n background: #000;\n}\n[data-mc-wrap]:fullscreen > canvas {\n width: 100% !important;\n height: 100% !important;\n max-width: none !important;\n max-height: none !important;\n object-fit: contain;\n border-radius: 0;\n}\n\n.mc-settings-popover {\n position: absolute;\n bottom: calc(100% + 8px);\n right: 12px;\n background: rgba(20, 20, 20, 0.96);\n border-radius: 8px;\n padding: 10px 12px;\n min-width: 180px;\n color: #fff;\n font-size: 12px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.4);\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mc-settings-popover[data-open=\"false\"] { display: none; }\n.mc-settings-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n.mc-settings-row > span { color: rgba(255,255,255,0.85); }\n.mc-settings-row > select {\n font: inherit;\n background: rgba(255,255,255,0.1);\n color: #fff;\n border: 1px solid rgba(255,255,255,0.18);\n border-radius: 4px;\n padding: 2px 6px;\n cursor: pointer;\n}\n.mc-export-confirm {\n margin-top: 4px;\n width: 100%;\n background: var(--mc-accent, #007AFF);\n color: #fff;\n border: 0;\n border-radius: 4px;\n padding: 6px 10px;\n font: inherit;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.mc-export-confirm:hover { background: #0066d6; }\n.mc-export-confirm:disabled { background: rgba(255,255,255,0.18); cursor: not-allowed; }\n\n.mc-export-overlay {\n position: absolute; inset: 0;\n background: rgba(0,0,0,0.7);\n display: flex; justify-content: center; align-items: center;\n z-index: 2;\n}\n.mc-export-panel {\n background: rgba(20,20,20,0.96); color: #fff;\n border-radius: 8px; padding: 16px 20px;\n text-align: center; min-width: 200px; max-width: 80%;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n.mc-export-title { font-size: 13px; margin-bottom: 10px; opacity: 0.9; }\n.mc-export-track {\n width: 100%; height: 6px;\n background: rgba(255,255,255,0.15); border-radius: 3px;\n margin-bottom: 8px; overflow: hidden;\n}\n.mc-export-fill {\n height: 100%; width: 0%;\n background: linear-gradient(90deg, var(--mc-accent, #007AFF), var(--mc-accent, #0056CC));\n transition: width 0.3s ease; border-radius: 3px;\n}\n.mc-export-text {\n color: rgba(255,255,255,0.7); font-size: 11px;\n font-family: Menlo, Monaco, monospace;\n}\n";
@@ -1,4 +1,4 @@
1
- import { warnUnknownOptions } from './chunk-DKGG7WD4.js';
1
+ import { warnUnknownOptions } from './chunk-MNM56B3X.js';
2
2
 
3
3
  // src/Controller.ts
4
4
  var ICONS = {
@@ -1,6 +1,6 @@
1
1
  import { Application } from 'pixi.js';
2
2
  import { gsap } from 'gsap';
3
- import { U as Stop, e as AssetSpec, c as CompositionSpec } from './types-SS51lP6O.js';
3
+ import { U as Stop, e as AssetSpec, c as CompositionSpec } from './types-YmUaViL1.js';
4
4
 
5
5
  interface AudioInspectOptions {
6
6
  /** Width of each loudness window in seconds. Default 0.1. */
@@ -185,12 +185,18 @@ interface TimelineRow {
185
185
  partNames?: string[];
186
186
  /** A short text for the tooltip (a text layer's words, an asset name). */
187
187
  detail?: string;
188
+ /**
189
+ * Set on every row inside a time-remapped composition: where its time comes from (`stage ×0.5`, `stage time keyframes`). Such rows
190
+ * are in that composition's LOCAL seconds (start, end, keys), not the movie's.
191
+ */
192
+ local?: string;
188
193
  }
189
194
  interface TimelineTransition {
190
195
  from: string;
191
196
  to: string;
192
197
  start: number;
193
- end: number;
198
+ end: number; /** as `TimelineRow.local`: the window is in local seconds */
199
+ local?: string;
194
200
  }
195
201
  interface TimelineData {
196
202
  duration: number;
@@ -409,6 +415,11 @@ declare class Movie {
409
415
  background: string;
410
416
  private _audioContext;
411
417
  private _rootSequence;
418
+ /** The filters that take the time of the frame they draw (`grain`), collected once after the build. */
419
+ private _timeFilters;
420
+ /** While a motion-blurred frame is exposed: the frame's own time, so all its sub-frames share one grain frame (and not the playhead's). */
421
+ private _nominalTime;
422
+ private _feedTimeFilters;
412
423
  private _rootContainer;
413
424
  private _raf;
414
425
  /** What went into the mix, and its peak before limiting — kept for inspectAudio(). */
@@ -1,6 +1,6 @@
1
1
  import { Application } from 'pixi.js';
2
2
  import { gsap } from 'gsap';
3
- import { U as Stop, e as AssetSpec, c as CompositionSpec } from './types-SS51lP6O.cjs';
3
+ import { U as Stop, e as AssetSpec, c as CompositionSpec } from './types-YmUaViL1.cjs';
4
4
 
5
5
  interface AudioInspectOptions {
6
6
  /** Width of each loudness window in seconds. Default 0.1. */
@@ -185,12 +185,18 @@ interface TimelineRow {
185
185
  partNames?: string[];
186
186
  /** A short text for the tooltip (a text layer's words, an asset name). */
187
187
  detail?: string;
188
+ /**
189
+ * Set on every row inside a time-remapped composition: where its time comes from (`stage ×0.5`, `stage time keyframes`). Such rows
190
+ * are in that composition's LOCAL seconds (start, end, keys), not the movie's.
191
+ */
192
+ local?: string;
188
193
  }
189
194
  interface TimelineTransition {
190
195
  from: string;
191
196
  to: string;
192
197
  start: number;
193
- end: number;
198
+ end: number; /** as `TimelineRow.local`: the window is in local seconds */
199
+ local?: string;
194
200
  }
195
201
  interface TimelineData {
196
202
  duration: number;
@@ -409,6 +415,11 @@ declare class Movie {
409
415
  background: string;
410
416
  private _audioContext;
411
417
  private _rootSequence;
418
+ /** The filters that take the time of the frame they draw (`grain`), collected once after the build. */
419
+ private _timeFilters;
420
+ /** While a motion-blurred frame is exposed: the frame's own time, so all its sub-frames share one grain frame (and not the playhead's). */
421
+ private _nominalTime;
422
+ private _feedTimeFilters;
412
423
  private _rootContainer;
413
424
  private _raf;
414
425
  /** What went into the mix, and its peak before limiting — kept for inspectAudio(). */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUQBGW5DO_cjs = require('./chunk-UQBGW5DO.cjs');
3
+ var chunkWTRKDIKH_cjs = require('./chunk-WTRKDIKH.cjs');
4
4
 
5
5
  // src/Presenter.ts
6
6
  var OPTION_KEYS = ["canvas", "keyboard", "clickToAdvance", "swipe", "indicator", "autoAdvance", "loop", "accent", "onExit"];
@@ -147,7 +147,7 @@ var Presenter = class {
147
147
  };
148
148
  constructor(movie, options) {
149
149
  if (!options || !options.canvas) throw new Error("Presenter requires options.canvas (HTMLCanvasElement).");
150
- chunkUQBGW5DO_cjs.warnUnknownOptions("Presenter", options, OPTION_KEYS);
150
+ chunkWTRKDIKH_cjs.warnUnknownOptions("Presenter", options, OPTION_KEYS);
151
151
  this.movie = movie;
152
152
  this.options = {
153
153
  canvas: options.canvas,
@@ -1,7 +1,7 @@
1
- import { h as Movie } from './Movie-K2YuVAdg.cjs';
1
+ import { h as Movie } from './Movie-CzzJw8A-.cjs';
2
2
  import 'pixi.js';
3
3
  import 'gsap';
4
- import './types-SS51lP6O.cjs';
4
+ import './types-YmUaViL1.cjs';
5
5
 
6
6
  interface PresenterOptions {
7
7
  canvas: HTMLCanvasElement;
@@ -1,7 +1,7 @@
1
- import { h as Movie } from './Movie-DlHQ9C02.js';
1
+ import { h as Movie } from './Movie-CBxGH5ms.js';
2
2
  import 'pixi.js';
3
3
  import 'gsap';
4
- import './types-SS51lP6O.js';
4
+ import './types-YmUaViL1.js';
5
5
 
6
6
  interface PresenterOptions {
7
7
  canvas: HTMLCanvasElement;
package/dist/Presenter.js CHANGED
@@ -1,4 +1,4 @@
1
- import { warnUnknownOptions } from './chunk-DKGG7WD4.js';
1
+ import { warnUnknownOptions } from './chunk-MNM56B3X.js';
2
2
 
3
3
  // src/Presenter.ts
4
4
  var OPTION_KEYS = ["canvas", "keyboard", "clickToAdvance", "swipe", "indicator", "autoAdvance", "loop", "accent", "onExit"];