@moku-labs/game 0.15.17 → 0.15.19

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.
@@ -1,4 +1,4 @@
1
- import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-D8zAAXLt.mjs";
1
+ import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-DQtBMqRE.mjs";
2
2
 
3
3
  //#region src/app/page.d.ts
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { kr as PlayerStateProvider } from "../types-DOldmhIw.mjs";
2
- import { mt as PlatformProvider } from "../index-BYDIzUDh.mjs";
3
- import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-D8zAAXLt.mjs";
1
+ import { kr as PlayerStateProvider } from "../types-bwefoJES.mjs";
2
+ import { mt as PlatformProvider } from "../index-Cku9aRz_.mjs";
3
+ import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-DQtBMqRE.mjs";
4
4
  import { Back, Haptics, KeepAwake, Lifecycle, Store } from "@moku-labs/system";
5
5
 
6
6
  //#region src/app/system.d.ts
package/dist/app.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { wr as Json } from "./types-DOldmhIw.mjs";
2
- import { U as StringTable } from "./types-ae0jg0r4.mjs";
3
- import { a as GameHandle, c as MemoryProvider, d as SaveKind, f as Scenario, g as SystemName, i as GameDefinition, l as PageAgent, n as GameApp, o as GamePluginConfigs, p as ScreenSeams, r as GameConfig, s as HeadlessSeams, v as WithGameState } from "./types-D8zAAXLt.mjs";
1
+ import { wr as Json } from "./types-bwefoJES.mjs";
2
+ import { U as StringTable } from "./types-4T4QTU48.mjs";
3
+ import { a as GameHandle, c as MemoryProvider, d as SaveKind, f as Scenario, g as SystemName, i as GameDefinition, l as PageAgent, n as GameApp, o as GamePluginConfigs, p as ScreenSeams, r as GameConfig, s as HeadlessSeams, v as WithGameState } from "./types-DQtBMqRE.mjs";
4
4
  import { AnyPluginInstance } from "@moku-labs/core";
5
5
 
6
6
  //#region src/app/define.d.ts
package/dist/app.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Nt as audioPlugin, St as effectsPlugin, V as platformPlugin, i as screen, m as flattenFeatures, t as createApp } from "./src-sg41xWNr.mjs";
1
+ import { Nt as audioPlugin, St as effectsPlugin, V as platformPlugin, i as screen, m as flattenFeatures, t as createApp } from "./src-CXfBuKpl.mjs";
2
2
  import { t as memory } from "./memory-CWlqhS7l.mjs";
3
3
  import { n as isFakeClock, t as fakeClock } from "./fake-6mazmHK3.mjs";
4
4
  //#region src/app/define.ts
package/dist/assets.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { d as Manifest } from "./types-DOldmhIw.mjs";
1
+ import { d as Manifest } from "./types-bwefoJES.mjs";
2
2
 
3
3
  //#region src/plugins/assets/scan/cli.d.ts
4
4
  /**
@@ -1,8 +1,8 @@
1
- import { $n as Bookmark, $t as Api$2, Fr as StoreApi, K as Api$1, Kr as FrameRate, Nr as Snapshot, Rr as Api, S as ScenesApi, T as DebugSwitches, Xr as Time, nr as FlowState, rt as Captured } from "./types-DOldmhIw.mjs";
2
- import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-Bi6hj1OB.mjs";
3
- import { N as InputApi } from "./types-ae0jg0r4.mjs";
4
- import { t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
5
- import { n as Command, r as ControlApp } from "./types-qsE-I59e.mjs";
1
+ import { $n as Bookmark, $t as Api$2, Fr as StoreApi, K as Api$1, Kr as FrameRate, Nr as Snapshot, Rr as Api, S as ScenesApi, T as DebugSwitches, Xr as Time, nr as FlowState, rt as Captured } from "./types-bwefoJES.mjs";
2
+ import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-rr56N0Ab.mjs";
3
+ import { N as InputApi } from "./types-4T4QTU48.mjs";
4
+ import { t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
5
+ import { n as Command, r as ControlApp } from "./types-DMsvVZZT.mjs";
6
6
 
7
7
  //#region src/plugins/flow/doors/commands.d.ts
8
8
  /**
@@ -1,7 +1,7 @@
1
- import { t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
2
- import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-qsE-I59e.mjs";
3
- import { t as commands } from "./commands-DEVJzdsr.mjs";
4
- import { t as defineCommand } from "./define-BfWdvNHC.mjs";
1
+ import { t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
2
+ import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-DMsvVZZT.mjs";
3
+ import { t as commands } from "./commands-G9maNqTK.mjs";
4
+ import { t as defineCommand } from "./define-BAuGN0UM.mjs";
5
5
 
6
6
  //#region src/plugins/flow/doors/dev.d.ts
7
7
  /**
@@ -1,5 +1,5 @@
1
- import { t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
2
- import { c as Source, n as Command, o as InputSchema } from "./types-qsE-I59e.mjs";
1
+ import { t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
2
+ import { c as Source, n as Command, o as InputSchema } from "./types-DMsvVZZT.mjs";
3
3
 
4
4
  //#region src/plugins/flow/doors/define.d.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { Lr as RngState, Pn as Api$1, Wr as Api, ar as RouteStep, mr as Answer, nr as FlowState, rr as JournalEntry, wr as Json } from "./types-DOldmhIw.mjs";
1
+ import { Lr as RngState, Pn as Api$1, Wr as Api, ar as RouteStep, mr as Answer, nr as FlowState, rr as JournalEntry, wr as Json } from "./types-bwefoJES.mjs";
2
2
 
3
3
  //#region src/plugins/flow/headless.d.ts
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { $r as Events$1, $t as Api$6, An as ReducedMotion, B as SpriteOptions, Br as Events, C as State$7, Cn as Ease, Dn as NumericFields, Er as State$5, F as OverlayValue, Fn as BundlesOf, Fr as StoreApi, Gr as Config$7, Hn as TextStylesOf, Hr as State$4, In as Config$3, Ir as RngApi, Jr as State$8, K as Api$4, Ln as EmitterIdOf, N as NineSliceValue, On as ProjectionMotion, Or as Patch, Pn as Api$2, Qr as Config$9, R as ShapeValue, Rn as GameTypes, Rr as Api$3, S as ScenesApi, Sn as DescriptionNode, Sr as Config$5, Tr as Root, U as TransformValue, V as SpriteValue, Vn as State$3, Vr as PauseReason, W as sprite, Wn as defineFlow, Wr as Api$5, Xn as FeaturePlugin, Yn as FeatureDescription, Yr as ThermalReading, Zn as FeatureTree, _ as DefineScene, _n as ResourceType, _r as Config$2, a as Config$1, b as SceneDefinition, bn as TagType, c as LoadBundles, cr as Descriptor, ct as ViewportSize, dr as GuideOptions, ei as Require, en as Config$8, er as DefineNode, et as State$6, f as State$1, fr as Hint, g as AnySceneProjection, gn as QueryTerm, hn as Narrowed, hr as Api$1, i as BundleSpec, j as HudPartValue, kn as ProjectionSpec, l as LoadReason, ln as ComponentType, lr as Effect, mn as Mut, mr as Answer, mt as FrameRing, nn as State$9, o as DefineBundles, or as SceneIdOf, p as Tier, pt as FrameRecord, q as Config$6, qr as RateChange, r as BundleMap, sn as ComponentHandle, t as Api, u as LoadResult, un as ComponentValue, ur as EffectOptions, vn as SystemDefinition, wr as Json, wt as PassKind, x as SceneSpec, y as LayerMap, yn as SystemFor, yr as State$2, zn as HudKeysOf, zr as Config$4 } from "./types-DOldmhIw.mjs";
2
- import { A as GlowValue, B as Target, C as BlurValue, D as FilterComponent, F as AnimPlayerValue, H as HapticKind, I as Config$10, K as defineAnimation, L as FramesValue, M as OutlineValue, N as UniformDeclaration, O as FilterSpec, P as AnimApi, Q as play, R as MotionKeyframe, S as AlphaValue, T as DisplacementValue, U as SfxDescriptor, W as Step, _ as State$12, a as AudioApi, b as EmitterDefinition, c as MusicDescriptor, ct as OverlayApi, d as State$11, f as VolumesFor, h as EffectsApi, j as NoiseValue, k as FilterValueOf, l as MusicOptions, m as Config$12, n as State$13, r as UiApi, s as Config$11, t as Config$13, w as ColorMatrixValue, x as EmitterValue, y as EmitterConfig, z as State$10 } from "./types-Bi6hj1OB.mjs";
3
- import { B as Message, C as State$16, D as TextStyleInput, G as TypedTr, H as State$14, I as Argument, J as ResolvedStyle, L as Config$14, M as Config$15, N as InputApi, O as TextStyles, P as State$15, R as I18nApi, S as Point, T as TextBind, V as Part, W as TextKey, Y as Style, Z as WhenFlags, b as Config$16, g as IntrinsicElementsFor, h as defineTokens, j as defineComponent, k as TextValue, q as IsFlags, s as PopupComponent, v as BindField, w as TextApi, x as CountdownValue, y as BindOptions, z as IntlKit } from "./types-ae0jg0r4.mjs";
1
+ import { $r as Events$1, $t as Api$6, An as ReducedMotion, B as SpriteOptions, Br as Events, C as State$7, Cn as Ease, Dn as NumericFields, Er as State$5, F as OverlayValue, Fn as BundlesOf, Fr as StoreApi, Gr as Config$7, Hn as TextStylesOf, Hr as State$4, In as Config$3, Ir as RngApi, Jr as State$8, K as Api$4, Ln as EmitterIdOf, N as NineSliceValue, On as ProjectionMotion, Or as Patch, Pn as Api$2, Qr as Config$9, R as ShapeValue, Rn as GameTypes, Rr as Api$3, S as ScenesApi, Sn as DescriptionNode, Sr as Config$5, Tr as Root, U as TransformValue, V as SpriteValue, Vn as State$3, Vr as PauseReason, W as sprite, Wn as defineFlow, Wr as Api$5, Xn as FeaturePlugin, Yn as FeatureDescription, Yr as ThermalReading, Zn as FeatureTree, _ as DefineScene, _n as ResourceType, _r as Config$2, a as Config$1, b as SceneDefinition, bn as TagType, c as LoadBundles, cr as Descriptor, ct as ViewportSize, dr as GuideOptions, ei as Require, en as Config$8, er as DefineNode, et as State$6, f as State$1, fr as Hint, g as AnySceneProjection, gn as QueryTerm, hn as Narrowed, hr as Api$1, i as BundleSpec, j as HudPartValue, kn as ProjectionSpec, l as LoadReason, ln as ComponentType, lr as Effect, mn as Mut, mr as Answer, mt as FrameRing, nn as State$9, o as DefineBundles, or as SceneIdOf, p as Tier, pt as FrameRecord, q as Config$6, qr as RateChange, r as BundleMap, sn as ComponentHandle, t as Api, u as LoadResult, un as ComponentValue, ur as EffectOptions, vn as SystemDefinition, wr as Json, wt as PassKind, x as SceneSpec, y as LayerMap, yn as SystemFor, yr as State$2, zn as HudKeysOf, zr as Config$4 } from "./types-bwefoJES.mjs";
2
+ import { A as GlowValue, B as Target, C as BlurValue, D as FilterComponent, F as AnimPlayerValue, H as HapticKind, I as Config$10, K as defineAnimation, L as FramesValue, M as OutlineValue, N as UniformDeclaration, O as FilterSpec, P as AnimApi, Q as play, R as MotionKeyframe, S as AlphaValue, T as DisplacementValue, U as SfxDescriptor, W as Step, _ as State$12, a as AudioApi, b as EmitterDefinition, c as MusicDescriptor, ct as OverlayApi, d as State$11, f as VolumesFor, h as EffectsApi, j as NoiseValue, k as FilterValueOf, l as MusicOptions, m as Config$12, n as State$13, r as UiApi, s as Config$11, t as Config$13, w as ColorMatrixValue, x as EmitterValue, y as EmitterConfig, z as State$10 } from "./types-rr56N0Ab.mjs";
3
+ import { B as Message, C as State$16, D as TextStyleInput, G as TypedTr, H as State$14, I as Argument, J as ResolvedStyle, L as Config$14, M as Config$15, N as InputApi, O as TextStyles, P as State$15, R as I18nApi, S as Point, T as TextBind, V as Part, W as TextKey, Y as Style, Z as WhenFlags, b as Config$16, g as IntrinsicElementsFor, h as defineTokens, j as defineComponent, k as TextValue, q as IsFlags, s as PopupComponent, v as BindField, w as TextApi, x as CountdownValue, y as BindOptions, z as IntlKit } from "./types-4T4QTU48.mjs";
4
4
  import { Log } from "@moku-labs/common/browser";
5
5
  import { PluginCtx } from "@moku-labs/core";
6
6
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as PoolTrim, A as HudPart, At as PerfCounts, Bt as PerfSampleLine, Ct as PROBLEM_RULES, Dr as types_d_exports$10, Dt as PerfChange, Et as PerfCause, F as OverlayValue, Ft as PerfHeaderLine, G as AdaptiveScale, Gn as exit, Gt as PoolTrimDetail, H as Transform, Ht as PerfStartupLine, I as Parent, It as PerfLogLine, J as MonitorConfig, Jn as type, Jt as SHADER_WHATS, Kn as slot, Kt as ProblemEventDetail, L as Shape, Lt as PerfLongFrameLine, M as NineSlice, Mr as SaveUnreadableError, Mt as PerfEventLine, Nt as PerfEventName, Ot as PerfChangeEntry, P as Overlay, Pt as PerfGapLine, Qt as DEMAND_REASONS, Rt as PerfMarkLine, Sn as DescriptionNode, St as PERF_LOG_VERSION, Tt as PassRecord, Un as types_d_exports$6, Ur as types_d_exports$9, Ut as PerfTelemetryLine, Vt as PerfSpikeLine, W as sprite, Wt as PerfThermalLine, Xt as ShaderWhat, Yt as ShaderEventDetail, Zr as types_d_exports$15, Zt as WarmDetail, _t as MonitorSections, br as types_d_exports$3, bt as PERF_CAUSES, dt as FrameReadResult, ft as FrameReadout, gt as MONITOR_SECTIONS, h as types_d_exports$1, ht as LongFrameEntry, it as MonitorCounts, j as HudPartValue, jt as PerfDisplay, k as Display, kt as PerfCollectorLine, mt as FrameRing, nt as types_d_exports$12, pt as FrameRecord, qn as to, qt as ProblemRule, rn as types_d_exports$17, ut as FrameColumns, vt as OverlayEventDetail, w as types_d_exports$13, wt as PassKind, xt as PERF_GAP_BUCKETS, yt as OverlayWhat, z as Sprite, zt as PerfMeasured } from "./types-DOldmhIw.mjs";
2
- import { $ as sequence, E as FilterArea, G as HAPTIC_KINDS, H as HapticKind, J as frames, K as defineAnimation, Q as play, V as types_d_exports, X as mark, Y as haptic, Z as parallel, at as tween, et as set, i as types_d_exports$16, it as stagger, lt as types_d_exports$4, nt as spawn, ot as use, p as types_d_exports$2, q as external, rt as spawned, st as wait, tt as sfx, v as types_d_exports$5 } from "./types-Bi6hj1OB.mjs";
3
- import { A as types_d_exports$14, E as TextFormat, F as types_d_exports$8, K as types_d_exports$7, d as DebugTrigger, f as LocalWrite, h as defineTokens, j as defineComponent, m as popup, p as ScrollState, u as Box, x as CountdownValue, y as BindOptions } from "./types-ae0jg0r4.mjs";
4
- import { $ as tag, A as DropTarget, At as bind, B as Traceable, C as AnimPlayer, Ct as clockPlugin, D as defineBundles, Dt as projection, E as defineScene, Et as animPlugin, F as Pressable, G as Layer, H as PASS_KINDS, I as Pressed, J as Tree, K as Now, L as Swipeable, M as Hovered, Mt as label, N as Pointer, O as load, Ot as Countdown, P as PointerOver, Q as system, R as Tappable, S as defineMotion, St as debugPlugin, T as Frames, Tt as assetsPlugin, U as frameAt, V as Traced, W as Exiting, X as mut, Y as component, Z as resource, _ as defineStyle, _t as lifecyclePlugin, a as defineEmitter, at as flattenFeatures, b as messageDuration, bt as flowPlugin, c as Alpha, ct as timePlugin, d as Displacement, dt as rendererPlugin, et as defineEffect, f as Glow, ft as platformPlugin, g as resolve, gt as modelPlugin, h as music, ht as types_d_exports$11, i as screen, it as defineFeature, j as Held, jt as defineTextStyles, k as Draggable, kt as Text, l as Blur, lt as textPlugin, m as Outline, mt as PlatformProvider, n as createPlugin, nt as hint, o as Emitter, ot as worldPlugin, p as Noise, pt as BackResult, q as Order, r as defineGame, rt as schedule, s as defineFilter, st as uiPlugin, t as createApp, tt as guide, u as ColorMatrix, ut as scenesPlugin, v as tr, vt as inputPlugin, w as Animation, wt as audioPlugin, x as cubicBezier, xt as effectsPlugin, y as messageArgument, yt as i18nPlugin, z as Touchable } from "./index-BYDIzUDh.mjs";
1
+ import { $ as PoolTrim, A as HudPart, At as PerfCounts, Bt as PerfSampleLine, Ct as PROBLEM_RULES, Dr as types_d_exports$10, Dt as PerfChange, Et as PerfCause, F as OverlayValue, Ft as PerfHeaderLine, G as AdaptiveScale, Gn as exit, Gt as PoolTrimDetail, H as Transform, Ht as PerfStartupLine, I as Parent, It as PerfLogLine, J as MonitorConfig, Jn as type, Jt as SHADER_WHATS, Kn as slot, Kt as ProblemEventDetail, L as Shape, Lt as PerfLongFrameLine, M as NineSlice, Mr as SaveUnreadableError, Mt as PerfEventLine, Nt as PerfEventName, Ot as PerfChangeEntry, P as Overlay, Pt as PerfGapLine, Qt as DEMAND_REASONS, Rt as PerfMarkLine, Sn as DescriptionNode, St as PERF_LOG_VERSION, Tt as PassRecord, Un as types_d_exports$6, Ur as types_d_exports$9, Ut as PerfTelemetryLine, Vt as PerfSpikeLine, W as sprite, Wt as PerfThermalLine, Xt as ShaderWhat, Yt as ShaderEventDetail, Zr as types_d_exports$15, Zt as WarmDetail, _t as MonitorSections, br as types_d_exports$3, bt as PERF_CAUSES, dt as FrameReadResult, ft as FrameReadout, gt as MONITOR_SECTIONS, h as types_d_exports$1, ht as LongFrameEntry, it as MonitorCounts, j as HudPartValue, jt as PerfDisplay, k as Display, kt as PerfCollectorLine, mt as FrameRing, nt as types_d_exports$12, pt as FrameRecord, qn as to, qt as ProblemRule, rn as types_d_exports$17, ut as FrameColumns, vt as OverlayEventDetail, w as types_d_exports$13, wt as PassKind, xt as PERF_GAP_BUCKETS, yt as OverlayWhat, z as Sprite, zt as PerfMeasured } from "./types-bwefoJES.mjs";
2
+ import { $ as sequence, E as FilterArea, G as HAPTIC_KINDS, H as HapticKind, J as frames, K as defineAnimation, Q as play, V as types_d_exports, X as mark, Y as haptic, Z as parallel, at as tween, et as set, i as types_d_exports$16, it as stagger, lt as types_d_exports$4, nt as spawn, ot as use, p as types_d_exports$2, q as external, rt as spawned, st as wait, tt as sfx, v as types_d_exports$5 } from "./types-rr56N0Ab.mjs";
3
+ import { A as types_d_exports$14, E as TextFormat, F as types_d_exports$8, K as types_d_exports$7, d as DebugTrigger, f as LocalWrite, h as defineTokens, j as defineComponent, m as popup, p as ScrollState, u as Box, x as CountdownValue, y as BindOptions } from "./types-4T4QTU48.mjs";
4
+ import { $ as tag, A as DropTarget, At as bind, B as Traceable, C as AnimPlayer, Ct as clockPlugin, D as defineBundles, Dt as projection, E as defineScene, Et as animPlugin, F as Pressable, G as Layer, H as PASS_KINDS, I as Pressed, J as Tree, K as Now, L as Swipeable, M as Hovered, Mt as label, N as Pointer, O as load, Ot as Countdown, P as PointerOver, Q as system, R as Tappable, S as defineMotion, St as debugPlugin, T as Frames, Tt as assetsPlugin, U as frameAt, V as Traced, W as Exiting, X as mut, Y as component, Z as resource, _ as defineStyle, _t as lifecyclePlugin, a as defineEmitter, at as flattenFeatures, b as messageDuration, bt as flowPlugin, c as Alpha, ct as timePlugin, d as Displacement, dt as rendererPlugin, et as defineEffect, f as Glow, ft as platformPlugin, g as resolve, gt as modelPlugin, h as music, ht as types_d_exports$11, i as screen, it as defineFeature, j as Held, jt as defineTextStyles, k as Draggable, kt as Text, l as Blur, lt as textPlugin, m as Outline, mt as PlatformProvider, n as createPlugin, nt as hint, o as Emitter, ot as worldPlugin, p as Noise, pt as BackResult, q as Order, r as defineGame, rt as schedule, s as defineFilter, st as uiPlugin, t as createApp, tt as guide, u as ColorMatrix, ut as scenesPlugin, v as tr, vt as inputPlugin, w as Animation, wt as audioPlugin, x as cubicBezier, xt as effectsPlugin, y as messageArgument, yt as i18nPlugin, z as Touchable } from "./index-Cku9aRz_.mjs";
5
5
  export { type AdaptiveScale, Alpha, types_d_exports as Anim, AnimPlayer, Animation, types_d_exports$1 as Assets, types_d_exports$2 as Audio, type BackResult, type BindOptions, Blur, Box, types_d_exports$3 as Clock, ColorMatrix, Countdown, type CountdownValue, DEMAND_REASONS, types_d_exports$4 as Debug, DebugTrigger, type DescriptionNode, Displacement, Display, Draggable, DropTarget, types_d_exports$5 as Effects, Emitter, Exiting, type FilterArea, types_d_exports$6 as Flow, type FrameColumns, type FrameReadResult, type FrameReadout, type FrameRecord, type FrameRing, Frames, Glow, HAPTIC_KINDS, type HapticKind, Held, Hovered, HudPart, type HudPartValue, types_d_exports$7 as I18n, types_d_exports$8 as Input, Layer, types_d_exports$9 as Lifecycle, LocalWrite, type LongFrameEntry, MONITOR_SECTIONS, types_d_exports$10 as Model, type MonitorConfig, type MonitorCounts, type MonitorSections, NineSlice, Noise, Now, Order, Outline, Overlay, type OverlayEventDetail, type OverlayValue, type OverlayWhat, PASS_KINDS, PERF_CAUSES, PERF_GAP_BUCKETS, PERF_LOG_VERSION, PROBLEM_RULES, Parent, type PassKind, type PassRecord, type PerfCause, type PerfChange, type PerfChangeEntry, type PerfCollectorLine, type PerfCounts, type PerfDisplay, type PerfEventLine, type PerfEventName, type PerfGapLine, type PerfHeaderLine, type PerfLogLine, type PerfLongFrameLine, type PerfMarkLine, type PerfMeasured, type PerfSampleLine, type PerfSpikeLine, type PerfStartupLine, type PerfTelemetryLine, type PerfThermalLine, types_d_exports$11 as Platform, type PlatformProvider, Pointer, PointerOver, type PoolTrim, type PoolTrimDetail, Pressable, Pressed, type ProblemEventDetail, type ProblemRule, types_d_exports$12 as Renderer, SHADER_WHATS, SaveUnreadableError, types_d_exports$13 as Scenes, ScrollState, type ShaderEventDetail, type ShaderWhat, Shape, Sprite, Swipeable, Tappable, Text, type TextFormat, types_d_exports$14 as TextTypes, types_d_exports$15 as Time, Touchable, Traceable, Traced, Transform, Tree, types_d_exports$16 as Ui, type WarmDetail, types_d_exports$17 as World, animPlugin, assetsPlugin, audioPlugin, bind, clockPlugin, component, createApp, createPlugin, cubicBezier, debugPlugin, defineAnimation, defineBundles, defineComponent, defineEffect, defineEmitter, defineFeature, defineFilter, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, effectsPlugin, exit, external, flattenFeatures, flowPlugin, frameAt, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, messageArgument, messageDuration, modelPlugin, music, mut, parallel, platformPlugin, play, popup, projection, rendererPlugin, resolve, resource, scenesPlugin, schedule, screen, sequence, set, sfx, slot, spawn, spawned, sprite, stagger, system, tag, textPlugin, timePlugin, to, tr, tween, type, uiPlugin, use, wait, worldPlugin };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as spawn, $t as exit, A as types_exports$6, At as Outline, B as textPlugin, Bt as rendererPlugin, C as types_exports$13, Ct as Emitter, D as types_exports$9, Dt as Displacement, E as types_exports$10, Et as ColorMatrix, F as types_exports$1, Ft as assetsPlugin, G as frames, Gt as PERF_GAP_BUCKETS, H as HAPTIC_KINDS, Ht as frameAt, I as types_exports, It as animPlugin, J as parallel, Jt as SHADER_WHATS, K as haptic, Kt as PERF_LOG_VERSION, L as uiPlugin, Lt as AnimPlayer, M as types_exports$4, Mt as debugPlugin, N as types_exports$3, Nt as audioPlugin, O as types_exports$8, Ot as Glow, P as types_exports$2, Pt as scenesPlugin, Q as sfx, R as resolve, Rt as Animation, S as types_exports$14, St as effectsPlugin, T as types_exports$11, Tt as Blur, U as defineAnimation, Ut as MONITOR_SECTIONS, V as platformPlugin, Vt as PASS_KINDS, W as external, Wt as PERF_CAUSES, X as sequence, Xt as worldPlugin, Y as play, Yt as DEMAND_REASONS, Z as set, Zt as flowPlugin, _ as defineBundles, _t as Traceable, a as cubicBezier, an as lifecyclePlugin, at as inputPlugin, b as types_exports$16, bt as messageArgument, c as hint, ct as Held, d as defineScene, dt as PointerOver, en as slot, et as spawned, f as tr, ft as Pressable, g as music, gt as Touchable, h as defineEmitter, ht as Tappable, i as screen, in as SaveUnreadableError, it as wait, j as types_exports$5, jt as defineFilter, k as types_exports$7, kt as Noise, l as schedule, lt as Hovered, m as flattenFeatures, mt as Swipeable, n as createPlugin, nn as type, nt as tween, o as defineEffect, on as timePlugin, ot as Draggable, p as defineFeature, pt as Pressed, q as mark, qt as PROBLEM_RULES, r as defineGame, rn as modelPlugin, rt as use, s as guide, sn as clockPlugin, st as DropTarget, t as createApp, tn as to, tt as stagger, u as projection, ut as Pointer, v as load, vt as Traced, w as types_exports$12, wt as Alpha, x as types_exports$15, xt as messageDuration, y as types_exports$17, yt as i18nPlugin, z as defineMotion, zt as Frames } from "./src-sg41xWNr.mjs";
1
+ import { $ as spawn, $t as exit, A as types_exports$6, At as Outline, B as textPlugin, Bt as rendererPlugin, C as types_exports$13, Ct as Emitter, D as types_exports$9, Dt as Displacement, E as types_exports$10, Et as ColorMatrix, F as types_exports$1, Ft as assetsPlugin, G as frames, Gt as PERF_GAP_BUCKETS, H as HAPTIC_KINDS, Ht as frameAt, I as types_exports, It as animPlugin, J as parallel, Jt as SHADER_WHATS, K as haptic, Kt as PERF_LOG_VERSION, L as uiPlugin, Lt as AnimPlayer, M as types_exports$4, Mt as debugPlugin, N as types_exports$3, Nt as audioPlugin, O as types_exports$8, Ot as Glow, P as types_exports$2, Pt as scenesPlugin, Q as sfx, R as resolve, Rt as Animation, S as types_exports$14, St as effectsPlugin, T as types_exports$11, Tt as Blur, U as defineAnimation, Ut as MONITOR_SECTIONS, V as platformPlugin, Vt as PASS_KINDS, W as external, Wt as PERF_CAUSES, X as sequence, Xt as worldPlugin, Y as play, Yt as DEMAND_REASONS, Z as set, Zt as flowPlugin, _ as defineBundles, _t as Traceable, a as cubicBezier, an as lifecyclePlugin, at as inputPlugin, b as types_exports$16, bt as messageArgument, c as hint, ct as Held, d as defineScene, dt as PointerOver, en as slot, et as spawned, f as tr, ft as Pressable, g as music, gt as Touchable, h as defineEmitter, ht as Tappable, i as screen, in as SaveUnreadableError, it as wait, j as types_exports$5, jt as defineFilter, k as types_exports$7, kt as Noise, l as schedule, lt as Hovered, m as flattenFeatures, mt as Swipeable, n as createPlugin, nn as type, nt as tween, o as defineEffect, on as timePlugin, ot as Draggable, p as defineFeature, pt as Pressed, q as mark, qt as PROBLEM_RULES, r as defineGame, rn as modelPlugin, rt as use, s as guide, sn as clockPlugin, st as DropTarget, t as createApp, tn as to, tt as stagger, u as projection, ut as Pointer, v as load, vt as Traced, w as types_exports$12, wt as Alpha, x as types_exports$15, xt as messageDuration, y as types_exports$17, yt as i18nPlugin, z as defineMotion, zt as Frames } from "./src-CXfBuKpl.mjs";
2
2
  import { $ as component, H as Shape, I as Display, J as Exiting, L as HudPart, Q as Tree, R as NineSlice, S as bind, T as label, U as Sprite, V as Parent, W as Transform, X as Now, Y as Layer, Z as Order, b as Countdown, d as LocalWrite, et as mut, g as popup, it as tag, l as DebugTrigger, nt as system, p as ScrollState, q as sprite, s as Box, tt as resource, v as defineTokens, w as defineTextStyles, x as Text, y as defineStyle, z as Overlay } from "./visual-DNM5oFYx.mjs";
3
3
  import { t as defineComponent } from "./component-DGg5DqKK.mjs";
4
4
  export { Alpha, types_exports as Anim, AnimPlayer, Animation, types_exports$1 as Assets, types_exports$2 as Audio, Blur, Box, types_exports$3 as Clock, ColorMatrix, Countdown, DEMAND_REASONS, types_exports$4 as Debug, DebugTrigger, Displacement, Display, Draggable, DropTarget, types_exports$5 as Effects, Emitter, Exiting, types_exports$6 as Flow, Frames, Glow, HAPTIC_KINDS, Held, Hovered, HudPart, types_exports$7 as I18n, types_exports$8 as Input, Layer, types_exports$9 as Lifecycle, LocalWrite, MONITOR_SECTIONS, types_exports$10 as Model, NineSlice, Noise, Now, Order, Outline, Overlay, PASS_KINDS, PERF_CAUSES, PERF_GAP_BUCKETS, PERF_LOG_VERSION, PROBLEM_RULES, Parent, types_exports$11 as Platform, Pointer, PointerOver, Pressable, Pressed, types_exports$12 as Renderer, SHADER_WHATS, SaveUnreadableError, types_exports$13 as Scenes, ScrollState, Shape, Sprite, Swipeable, Tappable, Text, types_exports$14 as TextTypes, types_exports$15 as Time, Touchable, Traceable, Traced, Transform, Tree, types_exports$16 as Ui, types_exports$17 as World, animPlugin, assetsPlugin, audioPlugin, bind, clockPlugin, component, createApp, createPlugin, cubicBezier, debugPlugin, defineAnimation, defineBundles, defineComponent, defineEffect, defineEmitter, defineFeature, defineFilter, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, effectsPlugin, exit, external, flattenFeatures, flowPlugin, frameAt, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, messageArgument, messageDuration, modelPlugin, music, mut, parallel, platformPlugin, play, popup, projection, rendererPlugin, resolve, resource, scenesPlugin, schedule, screen, sequence, set, sfx, slot, spawn, spawned, sprite, stagger, system, tag, textPlugin, timePlugin, to, tr, tween, type, uiPlugin, use, wait, worldPlugin };
@@ -1,9 +1,9 @@
1
- import { $t as Api$1, Bn as Position, K as Api$2, Nr as Snapshot, at as RenderStats, cn as ComponentSchema, fn as EntitySnapshot, m as Usage, pn as FrameDiff, rr as JournalEntry, t as Api$3, tn as Explained, tr as FlowGraph, tt as Under, xr as Api } from "./types-DOldmhIw.mjs";
2
- import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-Bi6hj1OB.mjs";
3
- import { c as UiNode } from "./types-ae0jg0r4.mjs";
4
- import { t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
5
- import { a as InputOf, c as Source, i as InputArguments, l as WatchApp, o as InputSchema, t as CheatEntry, u as WatchInput } from "./types-qsE-I59e.mjs";
6
- import { n as defineSource } from "./define-BfWdvNHC.mjs";
1
+ import { $t as Api$1, Bn as Position, K as Api$2, Nr as Snapshot, at as RenderStats, cn as ComponentSchema, fn as EntitySnapshot, m as Usage, pn as FrameDiff, rr as JournalEntry, t as Api$3, tn as Explained, tr as FlowGraph, tt as Under, xr as Api } from "./types-bwefoJES.mjs";
2
+ import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-rr56N0Ab.mjs";
3
+ import { c as UiNode } from "./types-4T4QTU48.mjs";
4
+ import { t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
5
+ import { a as InputOf, c as Source, i as InputArguments, l as WatchApp, o as InputSchema, t as CheatEntry, u as WatchInput } from "./types-DMsvVZZT.mjs";
6
+ import { n as defineSource } from "./define-BAuGN0UM.mjs";
7
7
 
8
8
  //#region src/plugins/flow/doors/read.d.ts
9
9
  /**
@@ -1,2 +1,2 @@
1
- import { a as jsxs, i as jsxDEV, n as JSX, r as jsx, t as Fragment } from "./runtime-CrF7Cx-b.mjs";
1
+ import { a as jsxs, i as jsxDEV, n as JSX, r as jsx, t as Fragment } from "./runtime-CuMDZhii.mjs";
2
2
  export { Fragment, type JSX, jsx, jsxDEV, jsxs };
@@ -1,2 +1,2 @@
1
- import { a as jsxs, n as JSX, r as jsx, t as Fragment } from "./runtime-CrF7Cx-b.mjs";
1
+ import { a as jsxs, n as JSX, r as jsx, t as Fragment } from "./runtime-CuMDZhii.mjs";
2
2
  export { Fragment, type JSX, jsx, jsxs };
@@ -1,4 +1,4 @@
1
- import { _ as UiIntrinsicElements, a as JsxChild, t as DescriptionNode } from "./types-ae0jg0r4.mjs";
1
+ import { _ as UiIntrinsicElements, a as JsxChild, t as DescriptionNode } from "./types-4T4QTU48.mjs";
2
2
 
3
3
  //#region src/plugins/ui/jsx/runtime.d.ts
4
4
  /** What the compiler passes as props: the children plus whatever the tag declared. */
@@ -34845,16 +34845,16 @@ function isHeld(ctx, name, entry, onStack) {
34845
34845
  return state.pinned.has(name) || state.sceneNamed.includes(name) || state.sceneLeaving.includes(name) || onStack.has(entry.feature) || isPermanent(entry.tier);
34846
34846
  }
34847
34847
  /**
34848
- * Unloads every loaded `"leave"` bundle nobody holds any more, with the reason `"leave"`; a
34849
- * leaving scene holds its bundles only while anything carries `Exiting`. A running load is never
34850
- * aborted by it, and a `"budget"` bundle is never touched. Headless it does nothing.
34848
+ * Unloads every loaded `"leave"` bundle nobody holds any more, with the reason `"leave"`. A
34849
+ * leaving scene's bundles stay held: `releaseSceneLeft` lets them go, after the reconcile that
34850
+ * starts their exit (F51b). A running load is never aborted by it, and a `"budget"` bundle is never
34851
+ * touched. Headless it does nothing.
34851
34852
  *
34852
34853
  * @param ctx - Domain context of the plugin.
34853
34854
  */
34854
34855
  function releaseLeftBundles(ctx) {
34855
34856
  const state = ctx.state;
34856
34857
  if (state.io === void 0) return;
34857
- if (state.sceneLeaving.length > 0 && state.exiting === 0) state.sceneLeaving = [];
34858
34858
  const onStack = featuresOnStack(ctx);
34859
34859
  for (const name of state.records.keys()) unloadIfLeft(ctx, name, onStack);
34860
34860
  }
@@ -34875,9 +34875,10 @@ function nameSceneBundles(state, named) {
34875
34875
  /**
34876
34876
  * Lets the bundles a leaving scene named go once nothing carries `Exiting` any more: each loaded
34877
34877
  * `"leave"` bundle among them that nothing else holds is unloaded with the reason `"leave"`, at
34878
- * once, not at the next rest. A bundle of another release stays, as it would have. The world calls
34879
- * it through `onRemoved(Exiting)`, so the check costs a length read while no scene leaves, and
34880
- * a count read while one does.
34878
+ * once, not at the next rest. A bundle of another release stays, as it would have. The system
34879
+ * `assets.leave` calls it in every phase `sync`: after the reconcile of `layout`, which tags the
34880
+ * leaving elements `Exiting` in the frame after the switch, so the hold never ends before the leave
34881
+ * begins (F51b). It costs a length read while no scene leaves, and a count read while one does.
34881
34882
  *
34882
34883
  * @param ctx - Domain context of the plugin.
34883
34884
  */
@@ -35379,7 +35380,7 @@ function startPreload(ctx) {
35379
35380
  //#endregion
35380
35381
  //#region src/plugins/assets/lifecycle.ts
35381
35382
  /**
35382
- * @file assets plugin — lifecycle: the five registrations of `onInit`, the boot of `onStart`
35383
+ * @file assets plugin — lifecycle: the six registrations of `onInit`, the boot of `onStart`
35383
35384
  * and the teardown that frees every texture and cancels every fetch.
35384
35385
  */
35385
35386
  /**
@@ -35494,9 +35495,10 @@ async function enterNode(ctx, node, run) {
35494
35495
  }
35495
35496
  /**
35496
35497
  * Connects the plugin in `onInit`: the `load` stage of `onEnter`, the handler of the `load`
35497
- * effect, the texture provider of `renderer`, and the start and the end of an exit in `world`,
35498
- * counted so a leaving scene's bundles go when the last exit ends (F51). The five removers go to
35499
- * the state, because `onStop` has nothing but the state.
35498
+ * effect, the texture provider of `renderer`, the start and the end of an exit in `world`, counted,
35499
+ * and the system `assets.leave` of phase `sync`, which lets a leaving scene's bundles go once its
35500
+ * elements played their exit (F51). The six removers go to the state, because `onStop` has nothing
35501
+ * but the state.
35500
35502
  *
35501
35503
  * @param ctx - Kernel context of the assets plugin.
35502
35504
  */
@@ -35506,8 +35508,12 @@ function connectAssets(ctx) {
35506
35508
  assets.state.exiting += 1;
35507
35509
  }), assets.deps.world.ecs.onRemoved(Exiting, () => {
35508
35510
  assets.state.exiting -= 1;
35509
- releaseSceneLeft(assets);
35510
- }));
35511
+ }), assets.deps.world.ecs.system(system({
35512
+ name: "assets.leave",
35513
+ phase: "sync",
35514
+ query: [],
35515
+ run: () => releaseSceneLeft(assets)
35516
+ })));
35511
35517
  }
35512
35518
  /**
35513
35519
  * Picks the I/O seam: the configured one, the browser pair over `renderer.sync.textures` when
@@ -35569,11 +35575,6 @@ function readFeatures(ctx) {
35569
35575
  * @param ctx - Kernel context of the assets plugin.
35570
35576
  * @returns A promise that resolves once the boot tier is there.
35571
35577
  * @throws {Error} In a browser, when the manifest or a boot bundle cannot be read.
35572
- * @example
35573
- * ```ts
35574
- * await startAssets(ctx);
35575
- * ctx.state.io; // the configured io, the browser io, or undefined while headless
35576
- * ```
35577
35578
  */
35578
35579
  async function startAssets(ctx) {
35579
35580
  const assets = withDeps$6(ctx);
@@ -35583,16 +35584,11 @@ async function startAssets(ctx) {
35583
35584
  }
35584
35585
  /**
35585
35586
  * Frees everything in `onStop`: the preload and every running load are aborted, every texture is
35586
- * destroyed, the five registrations are removed and the registries are emptied, the companions
35587
+ * destroyed, the six registrations are removed and the registries are emptied, the companions
35587
35588
  * too. A teardown context carries the state and nothing else, so no other plugin is called here:
35588
35589
  * no companion's `unload` either, its plugin stopped before this one.
35589
35590
  *
35590
35591
  * @param state - The plugin state.
35591
- * @example
35592
- * ```ts
35593
- * releaseAll(state);
35594
- * state.records.size; // 0, and every texture went back to the GPU
35595
- * ```
35596
35592
  */
35597
35593
  function releaseAll(state) {
35598
35594
  state.queue?.controller.abort();
@@ -55536,6 +55532,7 @@ function createReconciler(ctx, modules, fields) {
55536
55532
  state.hosts.delete(element.entity);
55537
55533
  state.scrolls.delete(element.entity);
55538
55534
  state.exiting.delete(element.entity);
55535
+ state.leading.delete(element.entity);
55539
55536
  state.overlays.delete(element.entity);
55540
55537
  state.elements.delete(element.entity);
55541
55538
  ecs.despawn(element.entity);
@@ -55550,7 +55547,7 @@ function createReconciler(ctx, modules, fields) {
55550
55547
  state.exiting.delete(entity);
55551
55548
  continue;
55552
55549
  }
55553
- if (!subtreeSettled(element)) continue;
55550
+ if (!(state.leading.has(entity) ? modules.layout.settled(element) : subtreeSettled(element))) continue;
55554
55551
  despawnTree(element);
55555
55552
  }
55556
55553
  dropRemovedRoots();
@@ -56176,7 +56173,8 @@ function createReconciler(ctx, modules, fields) {
56176
56173
  * Starts the teardown of a root: every element exits with its motion, then the sweep frees the
56177
56174
  * nodes and despawns the root entity. A popup leaves by an event; a projection root leaves the
56178
56175
  * way its view did, which the world still answers in its removal hook: `"mount"` with its scene,
56179
- * a load or a restore.
56176
+ * a load or a restore. A root that goes with its screen ends with the exit of its top element
56177
+ * when that plays one, so a longer exit under it does not hold it and its bundles (F55).
56180
56178
  *
56181
56179
  * @param entity - The root entity.
56182
56180
  */
@@ -56187,7 +56185,10 @@ function createReconciler(ctx, modules, fields) {
56187
56185
  const cause = root.popup === void 0 ? ctx.deps.world.projection.causeOf(entity) ?? "change" : "change";
56188
56186
  state.removing.add(entity);
56189
56187
  hostsMoved(state);
56190
- if (element !== void 0) exitElement(element, cause);
56188
+ if (element !== void 0) {
56189
+ exitElement(element, cause);
56190
+ if (cause === "mount" && !modules.layout.settled(element)) state.leading.add(element.entity);
56191
+ }
56191
56192
  ctx.deps.time.wake();
56192
56193
  }
56193
56194
  /**
@@ -59628,6 +59629,7 @@ function createJsxState() {
59628
59629
  byKey: emptyMap$1(),
59629
59630
  instances: emptyMap$1(),
59630
59631
  exiting: emptySet(),
59632
+ leading: emptySet(),
59631
59633
  removing: emptySet(),
59632
59634
  hosts: emptySet(),
59633
59635
  hosted: emptyMap$1(),
@@ -1,7 +1,7 @@
1
- import { Qn as AnyFlow, Xn as FeaturePlugin, cr as Descriptor, fr as Hint, gr as ClockSource, ir as NodeTable, pr as NodeFx, vr as FakeClock, wr as Json } from "./types-DOldmhIw.mjs";
2
- import { t as createApp } from "./index-BYDIzUDh.mjs";
3
- import { b as saveOf, v as WithGameState, y as memory } from "./types-D8zAAXLt.mjs";
4
- import { a as createHeadless, i as ReproResult, n as HeadlessGame, o as runRepro, r as Repro, s as stepFrames, t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
1
+ import { Qn as AnyFlow, Xn as FeaturePlugin, cr as Descriptor, fr as Hint, gr as ClockSource, ir as NodeTable, pr as NodeFx, vr as FakeClock, wr as Json } from "./types-bwefoJES.mjs";
2
+ import { t as createApp } from "./index-Cku9aRz_.mjs";
3
+ import { b as saveOf, v as WithGameState, y as memory } from "./types-DQtBMqRE.mjs";
4
+ import { a as createHeadless, i as ReproResult, n as HeadlessGame, o as runRepro, r as Repro, s as stepFrames, t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
5
5
  import { AnyPluginInstance } from "@moku-labs/core";
6
6
 
7
7
  //#region src/plugins/clock/fake.d.ts
package/dist/testing.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $t as exit, Qt as refuseStart, m as flattenFeatures, nn as type, t as createApp } from "./src-sg41xWNr.mjs";
1
+ import { $t as exit, Qt as refuseStart, m as flattenFeatures, nn as type, t as createApp } from "./src-CXfBuKpl.mjs";
2
2
  import { n as saveOf, t as memory } from "./memory-CWlqhS7l.mjs";
3
3
  import { t as fakeClock } from "./fake-6mazmHK3.mjs";
4
4
  import { i as stepFrames, r as runRepro, t as createHeadless } from "./headless-BA6ffzqD.mjs";
@@ -1,4 +1,4 @@
1
- import { $t as Api$2, An as ReducedMotion, Cn as Ease, Dn as NumericFields, En as MotionHandle, K as Api$3, Nn as ViewHandle, On as ProjectionMotion, Pn as Api$1, Tn as MotionCause, U as TransformValue, Wr as Api, an as AnyComponentType, bn as TagType, cr as Descriptor, ct as ViewportSize, dn as Entity, ei as Require, fr as Hint, hr as Api$5, in as AnyComponent, ln as ComponentType, mr as Answer, on as AnyComponentValue, s as Events$1, t as Api$4, wn as Motion, wr as Json, xn as ChangeHook } from "./types-DOldmhIw.mjs";
1
+ import { $t as Api$2, An as ReducedMotion, Cn as Ease, Dn as NumericFields, En as MotionHandle, K as Api$3, Nn as ViewHandle, On as ProjectionMotion, Pn as Api$1, Tn as MotionCause, U as TransformValue, Wr as Api, an as AnyComponentType, bn as TagType, cr as Descriptor, ct as ViewportSize, dn as Entity, ei as Require, fr as Hint, hr as Api$5, in as AnyComponent, ln as ComponentType, mr as Answer, on as AnyComponentValue, s as Events$1, t as Api$4, wn as Motion, wr as Json, xn as ChangeHook } from "./types-bwefoJES.mjs";
2
2
  import { Log } from "@moku-labs/common/browser";
3
3
  import { PluginCtx } from "@moku-labs/core";
4
4
  import { Node, Yoga } from "yoga-layout/load";
@@ -2895,7 +2895,8 @@ type JsxState = {
2895
2895
  byIdentity: Map<string, Entity>;
2896
2896
  byKey: Map<Entity, Map<string, Entity>>;
2897
2897
  instances: Map<string, Instance>;
2898
- exiting: Set<Entity>;
2898
+ exiting: Set<Entity>; /** The tops of roots that left with their screen and whose own exit plays: each goes when that exit ends (F55). */
2899
+ leading: Set<Entity>;
2899
2900
  removing: Set<Entity>;
2900
2901
  hosts: Set<Entity>;
2901
2902
  hosted: Map<Entity, Entity>;
@@ -1,5 +1,5 @@
1
- import { Nr as Snapshot, wr as Json } from "./types-DOldmhIw.mjs";
2
- import { t as HeadlessApp } from "./headless-ByFLyHxx.mjs";
1
+ import { Nr as Snapshot, wr as Json } from "./types-bwefoJES.mjs";
2
+ import { t as HeadlessApp } from "./headless-uUUH54Ij.mjs";
3
3
  import { Log } from "@moku-labs/common/browser";
4
4
 
5
5
  //#region src/plugins/flow/doors/types.d.ts
@@ -1,7 +1,7 @@
1
- import { Ar as ProviderCall, In as Config$1, Pr as SnapshotOf, Qn as AnyFlow, Sr as Config, X as PixiModule, Xn as FeaturePlugin, a as Config$3, d as Manifest, gr as ClockSource, jr as SaveDoc, kr as PlayerStateProvider, n as AssetsIo, ot as Orientation, q as Config$2, sr as TypeTag, vr as FakeClock, wr as Json } from "./types-DOldmhIw.mjs";
2
- import { o as AudioContextLike, s as Config$4 } from "./types-Bi6hj1OB.mjs";
3
- import { R as I18nApi, U as StringTable, W as TextKey } from "./types-ae0jg0r4.mjs";
4
- import { ft as platformPlugin, i as screen, mt as PlatformProvider, t as createApp, wt as audioPlugin, xt as effectsPlugin } from "./index-BYDIzUDh.mjs";
1
+ import { Ar as ProviderCall, In as Config$1, Pr as SnapshotOf, Qn as AnyFlow, Sr as Config, X as PixiModule, Xn as FeaturePlugin, a as Config$3, d as Manifest, gr as ClockSource, jr as SaveDoc, kr as PlayerStateProvider, n as AssetsIo, ot as Orientation, q as Config$2, sr as TypeTag, vr as FakeClock, wr as Json } from "./types-bwefoJES.mjs";
2
+ import { o as AudioContextLike, s as Config$4 } from "./types-rr56N0Ab.mjs";
3
+ import { R as I18nApi, U as StringTable, W as TextKey } from "./types-4T4QTU48.mjs";
4
+ import { ft as platformPlugin, i as screen, mt as PlatformProvider, t as createApp, wt as audioPlugin, xt as effectsPlugin } from "./index-Cku9aRz_.mjs";
5
5
  import { AnyPluginInstance } from "@moku-labs/core";
6
6
 
7
7
  //#region src/plugins/model/store/providers/memory.d.ts
@@ -11966,14 +11966,18 @@ type State = {
11966
11966
  queue: PreloadQueue | undefined;
11967
11967
  current: NodeInfo | undefined;
11968
11968
  useCounter: number; /** Keys already reported missing, so one key warns and starts its background load once. */
11969
- warned: Set<string>; /** `onEnter`, the `load` handler, the texture provider, and the start and the end of an exit in `world`. */
11969
+ warned: Set<string>;
11970
+ /**
11971
+ * `onEnter`, the `load` handler, the texture provider, the start and the end of an exit in `world`, and the system
11972
+ * `assets.leave` of phase `sync`.
11973
+ */
11970
11974
  removers: Array<() => void>; /** The `files` map of the stamp the dev hot swap applied last. `undefined` until the first swap. */
11971
11975
  stamps: Readonly<Record<string, string>> | undefined; /** The running dev hot swap. The next one waits for it, so two swaps never overlap. */
11972
11976
  swapping: Promise<void> | undefined; /** The list the mounted scene names, from the last `sceneBundles` call. */
11973
11977
  sceneNamed: readonly string[];
11974
11978
  /**
11975
- * The bundles a scene named before and the list names no more: held while anything carries `Exiting`, so a
11976
- * leaving scene's pictures stay until its elements played their exit (F51).
11979
+ * The bundles a scene named before and the list names no more: held until a phase `sync` finds nothing carrying
11980
+ * `Exiting`, so a leaving scene's pictures stay until its elements played their exit (F51, F51b).
11977
11981
  */
11978
11982
  sceneLeaving: string[]; /** How many entities carry `Exiting` now, counted from the world's `onAdded` and `onRemoved` of the tag. */
11979
11983
  exiting: number; /** Registered companions, in registration order. */
@@ -12058,7 +12062,7 @@ type Events = {
12058
12062
  };
12059
12063
  /**
12060
12064
  * The textures of a bundle were destroyed. `keys` names every asset that went with it. `reason`
12061
- * "leave": its feature left (release "leave").
12065
+ * "leave": its feature left, or a scene that named it finished its exit (release "leave").
12062
12066
  */
12063
12067
  "assets:bundle-unloaded": {
12064
12068
  bundle: string;
@@ -12199,8 +12203,9 @@ type Api = {
12199
12203
  * Tells assets which bundles the mounted scene names: its `bundle`, then what its `bundles(state)` returned.
12200
12204
  * Each call replaces the list before it. A bundle in the list is never a victim of the budget and is not
12201
12205
  * released by `release: "leave"` while it stays in the list. A bundle the list named before and names no more
12202
- * stays held while anything carries `Exiting`, so a leaving scene's pictures stay until its elements played their
12203
- * exit; then a `"leave"` one goes at once (F51). Called by `scenes`; a game never calls it.
12206
+ * stays held until a phase `sync` finds nothing carrying `Exiting`, so a leaving scene's pictures stay until its
12207
+ * elements played their exit, also when the exit starts only in the frame after the switch; then a `"leave"` one
12208
+ * goes (F51, F51b). Called by `scenes`; a game never calls it.
12204
12209
  *
12205
12210
  * @param named - The bundle names of the mounted scene, the scene bundle first.
12206
12211
  * @example
@@ -12298,7 +12303,7 @@ type HotSwap = Events$8["ui:hot-swap"];
12298
12303
  * When a bundle leaves besides the budget. `"budget"` (default): only the LRU unloads it when memory
12299
12304
  * runs out. `"leave"`: also unloaded at the next rest once no node of its feature is on the stack
12300
12305
  * and no mounted scene names it; a scene that named it and left holds it until its elements played
12301
- * their exit, and then it goes at once.
12306
+ * their exit, and it goes at the next phase `sync` after that.
12302
12307
  *
12303
12308
  * @example
12304
12309
  * ```ts
@@ -1,5 +1,5 @@
1
- import { $r as Events$2, $t as Api$3, An as ReducedMotion, Br as Events$5, Cn as Ease, Cr as Events$3, D as FilterSlotInputs, Dn as NumericFields, E as FilterSlot, En as MotionHandle, K as Api$4, Mn as TrackSegment, O as SyncApi, Pn as Api$2, Q as PixiTexture, Wr as Api$1, X as PixiModule, Y as PixiFilter, Z as PixiSprite, cr as Descriptor, dn as Entity, ei as Require, in as AnyComponent, jn as TrackOptions, ln as ComponentType, lt as FilterCache, on as AnyComponentValue, s as Events$1, sn as ComponentHandle, sr as TypeTag, st as Point, t as Api$5, v as Events$4, wr as Json, xr as Api$6 } from "./types-DOldmhIw.mjs";
2
- import { N as InputApi, R as I18nApi, X as StylesState, c as UiNode, i as Finding, l as LayoutState, n as ElementChange, o as JsxState, r as ElementMotion, w as TextApi } from "./types-ae0jg0r4.mjs";
1
+ import { $r as Events$2, $t as Api$3, An as ReducedMotion, Br as Events$5, Cn as Ease, Cr as Events$3, D as FilterSlotInputs, Dn as NumericFields, E as FilterSlot, En as MotionHandle, K as Api$4, Mn as TrackSegment, O as SyncApi, Pn as Api$2, Q as PixiTexture, Wr as Api$1, X as PixiModule, Y as PixiFilter, Z as PixiSprite, cr as Descriptor, dn as Entity, ei as Require, in as AnyComponent, jn as TrackOptions, ln as ComponentType, lt as FilterCache, on as AnyComponentValue, s as Events$1, sn as ComponentHandle, sr as TypeTag, st as Point, t as Api$5, v as Events$4, wr as Json, xr as Api$6 } from "./types-bwefoJES.mjs";
2
+ import { N as InputApi, R as I18nApi, X as StylesState, c as UiNode, i as Finding, l as LayoutState, n as ElementChange, o as JsxState, r as ElementMotion, w as TextApi } from "./types-4T4QTU48.mjs";
3
3
  import { Log } from "@moku-labs/common/browser";
4
4
  import { PluginCtx } from "@moku-labs/core";
5
5
 
@@ -1,9 +1,9 @@
1
- import { $t as Api$1, K as Api, Rr as Api$3, xr as Api$2 } from "./types-DOldmhIw.mjs";
2
- import { P as AnimApi, r as UiApi } from "./types-Bi6hj1OB.mjs";
3
- import { N as InputApi } from "./types-ae0jg0r4.mjs";
4
- import { r as Repro } from "./headless-ByFLyHxx.mjs";
5
- import { a as InputOf, r as ControlApp } from "./types-qsE-I59e.mjs";
6
- import { t as commands } from "./commands-DEVJzdsr.mjs";
1
+ import { $t as Api$1, K as Api, Rr as Api$3, xr as Api$2 } from "./types-bwefoJES.mjs";
2
+ import { P as AnimApi, r as UiApi } from "./types-rr56N0Ab.mjs";
3
+ import { N as InputApi } from "./types-4T4QTU48.mjs";
4
+ import { r as Repro } from "./headless-uUUH54Ij.mjs";
5
+ import { a as InputOf, r as ControlApp } from "./types-DMsvVZZT.mjs";
6
+ import { t as commands } from "./commands-G9maNqTK.mjs";
7
7
 
8
8
  //#region src/visual/types.d.ts
9
9
  /** The base commands of the `/control` door, keyed by their short names. */
package/dist/visual.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as VisualApp, c as VisualRenderer, d as VisualStart, f as VisualStep, h as VisualTolerance, i as CheckpointResult, l as VisualReport, m as VisualTestResult, n as runVisualTests, o as VisualOptions, p as VisualTest, r as defineVisualTest, s as VisualPage, t as parseVisualArgv, u as VisualSetup } from "./visual-Hj0oNqPP.mjs";
1
+ import { a as VisualApp, c as VisualRenderer, d as VisualStart, f as VisualStep, h as VisualTolerance, i as CheckpointResult, l as VisualReport, m as VisualTestResult, n as runVisualTests, o as VisualOptions, p as VisualTest, r as defineVisualTest, s as VisualPage, t as parseVisualArgv, u as VisualSetup } from "./visual-B-c5OIFB.mjs";
2
2
  export { type CheckpointResult, type VisualApp, type VisualOptions, type VisualPage, type VisualRenderer, type VisualReport, type VisualSetup, type VisualStart, type VisualStep, type VisualTest, type VisualTestResult, type VisualTolerance, defineVisualTest, parseVisualArgv, runVisualTests };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moku-labs/game",
3
- "version": "0.15.17",
3
+ "version": "0.15.19",
4
4
  "description": "2D puzzle game engine on TypeScript and PixiJS, built on @moku-labs/core.",
5
5
  "type": "module",
6
6
  "sideEffects": [