@moku-labs/game 0.15.1 → 0.15.2

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.
@@ -4275,7 +4275,8 @@ type Cause = "edge" | "rollback" | "restore" | "load" | "mount" | "rerun";
4275
4275
  type View$1 = {
4276
4276
  entity: Entity;
4277
4277
  projection: string;
4278
- key: string;
4278
+ key: string; /** `{ projection, key }`, made once with the view: what `keyOf` answers, every call the same object. */
4279
+ readonly address: ProjectionKey;
4279
4280
  item: unknown; /** The last output of `view(item)`, by component name: what the picture equals at rest. */
4280
4281
  rest: Map<string, AnyComponentValue>;
4281
4282
  handles: MotionHandle[];
@@ -4363,6 +4364,13 @@ type Dirty = {
4363
4364
  roots: Set<Root>;
4364
4365
  force: boolean;
4365
4366
  };
4367
+ /**
4368
+ * A mute's fields joined with a type's owned fields, and the owned set they were joined with.
4369
+ */
4370
+ type JoinedFields = {
4371
+ readonly owned: ReadonlySet<string>;
4372
+ readonly joined: ReadonlySet<string>;
4373
+ };
4366
4374
  /**
4367
4375
  * projection module state.
4368
4376
  */
@@ -4386,10 +4394,28 @@ type ProjectionState = {
4386
4394
  * entity that is gone is dropped with its rest pose, and its side of `keys` with it.
4387
4395
  */
4388
4396
  keysByEntity: Map<Entity, ProjectionKey>; /** Entity to component name to the fields another writer owns. */
4389
- mutes: Map<Entity, Map<string, Set<string>>>; /** The `onConverged` listeners: the owners of elements, told after a restore or a load. */
4397
+ mutes: Map<Entity, Map<string, Set<string>>>; /** The owned fields of each component type as a set, by the type's frozen `owned` list: made once. */
4398
+ ownedSets: WeakMap<readonly string[], ReadonlySet<string>>; /** The muted and the owned fields joined, by the mute's field set: dropped when `mute()` or its release changes it. */
4399
+ joinedMutes: WeakMap<ReadonlySet<string>, JoinedFields>; /** The `onConverged` listeners: the owners of elements, told after a restore or a load. */
4390
4400
  converged: Array<() => void>;
4391
4401
  offHints: Array<() => void>; /** The cause of every view despawned since the last sweep, so a removal hook can still ask. */
4392
4402
  leaving: Map<Entity, MotionCause>;
4403
+ /**
4404
+ * Moves on every time a view enters `live`, leaves it, or leaves `leaving`, and on a clear:
4405
+ * `ui` hosts the views of a projection again only when it moved (`projection.membershipVersion()`).
4406
+ */
4407
+ membershipVersion: number;
4408
+ /**
4409
+ * A live view may hold a running handle: set by every view handle made, cleared by a sweep that
4410
+ * walked the live views and found none moving. While it is false the sweep walks no live view.
4411
+ */
4412
+ moving: boolean; /** Views were marked as owing their loop since the last start of the owed loops. */
4413
+ owedLoops: number;
4414
+ /**
4415
+ * The despawn count of the ecs when the sweep last looked for dead elements; -1 after a new
4416
+ * key, so the next sweep looks.
4417
+ */
4418
+ sweptDespawns: number;
4393
4419
  };
4394
4420
  /**
4395
4421
  * projection module API, `app.world.projection`: the bridge from the model to entities.
@@ -4543,7 +4569,8 @@ type ProjectionApi = {
4543
4569
  lift(entity: Entity, on: boolean): void;
4544
4570
  /**
4545
4571
  * The projection and key of an entity. Also answers for a view in the despawn queue and for an
4546
- * element registered with `registerKey`.
4572
+ * element registered with `registerKey`. A view answers the address it keeps for its life, the
4573
+ * same frozen object every call, so asking every frame allocates nothing.
4547
4574
  *
4548
4575
  * @param entity - The entity to ask about.
4549
4576
  * @returns The projection name and the key, or `undefined`.
@@ -4551,10 +4578,27 @@ type ProjectionApi = {
4551
4578
  * ```ts
4552
4579
  * // `renderer.sync` labels its display objects for the inspector.
4553
4580
  * app.world.projection.keyOf(1_048_576); // { projection: "board.items", key: "i7" }
4581
+ * app.world.projection.keyOf(1_048_576) === app.world.projection.keyOf(1_048_576); // true
4554
4582
  * app.world.projection.keyOf(42); // undefined: not a view
4555
4583
  * ```
4556
4584
  */
4557
4585
  keyOf(entity: Entity): ProjectionKey | undefined;
4586
+ /**
4587
+ * A number that moves every time a view enters the live views of a mounted projection, leaves
4588
+ * them (an exit or a despawn), or is forgotten after its despawn, and when the projections are
4589
+ * cleared. An equal number means the same views live as at the last read, so a plugin that
4590
+ * works on the live views (`ui` hosting them in an element) skips its step while it holds.
4591
+ * Reading it allocates nothing.
4592
+ *
4593
+ * @returns The version; 0 for a world where no view ever came or went.
4594
+ * @example
4595
+ * ```ts
4596
+ * // ui, at the start of its hosting step: nothing to do while no view came or went.
4597
+ * const version = ctx.require(worldPlugin).projection.membershipVersion(); // 7, as on the last frame
4598
+ * if (version === state.hostedMembership) return;
4599
+ * ```
4600
+ */
4601
+ membershipVersion(): number;
4558
4602
  /**
4559
4603
  * How the view of an entity came, or how it is leaving: `"mount"` when a direct reconcile or an unmount moved it,
4560
4604
  * `"change"` when a live commit did. A despawned view still answers until the next sweep, so a hook on its removal
@@ -4799,6 +4843,81 @@ type QueryPlan = {
4799
4843
  readonly names: readonly string[];
4800
4844
  readonly written: readonly string[];
4801
4845
  };
4846
+ /**
4847
+ * The walk of one system's declared query, made once when the system registers and reset by the
4848
+ * runner before every run. It allocates nothing per run: the entity list and the store list are
4849
+ * kept and overwritten by index, and every row it yields is the same array, written in place.
4850
+ * A row is valid until the next row; a system that keeps one copies it.
4851
+ */
4852
+ declare class SystemWalk implements Iterator<readonly unknown[], undefined> {
4853
+ private readonly ctx;
4854
+ /** The step handed back for every row: always the one row array. */
4855
+ private readonly step;
4856
+ /** The one row: the entity, then one stored value per name, sized at registration. */
4857
+ private readonly row;
4858
+ /** The component names of the terms, in order. */
4859
+ private readonly names;
4860
+ /** The names of the `mut()` terms, marked for every yielded row. */
4861
+ private readonly written;
4862
+ /** The store of each name, read once per run at the first step; `undefined` for a name no entity carried yet. */
4863
+ private readonly stores;
4864
+ /** The matching entities of this run, from index 0 to `count`; kept and overwritten by index. */
4865
+ private readonly entities;
4866
+ /** How many entities this run collected. */
4867
+ private count;
4868
+ /** The next entity to visit. */
4869
+ private index;
4870
+ /** Whether this run took its entities yet. */
4871
+ private started;
4872
+ /** The first store's size at the first step: a dev build compares it; -1 when not watched. */
4873
+ private size;
4874
+ /**
4875
+ * Prepares the walk of one system.
4876
+ *
4877
+ * @param ctx - Domain context of the world plugin.
4878
+ * @param plan - The system's resolved query.
4879
+ */
4880
+ constructor(ctx: WorldCtx, plan: QueryPlan);
4881
+ /**
4882
+ * The walk is its own iterator, so the runner hands it to `run` as the rows. A second loop over
4883
+ * it in the same run finds it walked.
4884
+ *
4885
+ * @returns This walk.
4886
+ */
4887
+ [Symbol.iterator](): SystemWalk;
4888
+ /**
4889
+ * Starts a new run: nothing is read before the first step.
4890
+ *
4891
+ * @returns This walk, the rows of the run.
4892
+ */
4893
+ reset(): SystemWalk;
4894
+ /**
4895
+ * Keeps one key of the first store when the entity carries every other name.
4896
+ *
4897
+ * @param entity - The key.
4898
+ */
4899
+ keep(entity: Entity): void;
4900
+ /**
4901
+ * Hands out the next row: the next collected entity, its values written into the one row, and
4902
+ * marked for every `mut()` name.
4903
+ *
4904
+ * @returns The step of the row, or the end.
4905
+ */
4906
+ next(): IteratorResult<readonly unknown[], undefined>;
4907
+ /**
4908
+ * Reads the stores of this run and collects the entities that carry every name, in the first
4909
+ * store's order. Structural changes are queued until the phase ends, so the matches stay true
4910
+ * while the rows are consumed.
4911
+ */
4912
+ private start;
4913
+ /**
4914
+ * Writes the row of one entity in place: the entity, then the value of every name.
4915
+ *
4916
+ * @param entity - The entity.
4917
+ * @returns False when the entity no longer carries a name, and the row is not handed out.
4918
+ */
4919
+ private fill;
4920
+ }
4802
4921
  //#endregion
4803
4922
  //#region src/plugins/world/ecs/types.d.ts
4804
4923
  /**
@@ -5115,6 +5234,12 @@ type SystemDefinition<Terms extends readonly QueryTerm[]> = {
5115
5234
  readonly name: string;
5116
5235
  readonly phase: WorldPhase;
5117
5236
  readonly query: Terms;
5237
+ /**
5238
+ * Runs the system once a frame in its phase. `entities` walks the declared `query` once; every
5239
+ * row it hands out is the same array, rewritten for the next row, so a row is valid until the
5240
+ * next row. A system that keeps a row copies what it keeps: `const [entity, transform] = row`.
5241
+ * `ecs.query()` called inside `run` hands out a new array per row.
5242
+ */
5118
5243
  run(entities: Iterable<QueryTuple<Terms>>, ctx: SystemContext): void;
5119
5244
  };
5120
5245
  /**
@@ -5168,23 +5293,23 @@ type SystemFor<Player, Session> = <const Terms extends readonly QueryTerm[]>(def
5168
5293
  type AnySystem = {
5169
5294
  readonly name: string;
5170
5295
  readonly phase: WorldPhase;
5171
- readonly query: readonly QueryTerm[];
5296
+ readonly query: readonly QueryTerm[]; /** As `SystemDefinition.run`: one row array per walk, valid until the next row. */
5172
5297
  run(entities: Iterable<readonly unknown[]>, ctx: SystemContext): void;
5173
5298
  };
5174
5299
  /**
5175
- * One registered system, the frame it was registered in and its query resolved once. A system
5176
- * registered during a frame runs from the next frame on. Spec 28 (deferred) extends it with the
5177
- * system's scope.
5178
- *
5179
- * @example
5180
- * ```ts
5181
- * const entry: SystemEntry = { definition: bobSystem, frame: 12, plan: { names: ["Transform"], written: ["Transform"] } };
5182
- * ```
5300
+ * One registered system, the frame it was registered in, its query resolved once and the walk the
5301
+ * runner resets for every run. A system registered during a frame runs from the next frame on.
5302
+ * Spec 28 (deferred) extends it with the system's scope.
5183
5303
  */
5184
5304
  type SystemEntry = {
5185
5305
  readonly definition: AnySystem;
5186
5306
  readonly frame: number;
5187
5307
  readonly plan: QueryPlan;
5308
+ /**
5309
+ * The walk of the declared query, made at registration; `undefined` for an empty query, which
5310
+ * the runner never walks. An entry built without one gets it on its first run.
5311
+ */
5312
+ walk?: SystemWalk | undefined;
5188
5313
  };
5189
5314
  /**
5190
5315
  * A structural change queued while a phase runs. Applied in call order when the phase ends.
@@ -5223,17 +5348,23 @@ type Command = {
5223
5348
  */
5224
5349
  type StructuralHook = (entity: Entity, value: unknown) => void;
5225
5350
  /**
5226
- * The frozen model snapshot of one frame, kept so four phases read it once.
5227
- *
5228
- * @example
5229
- * ```ts
5230
- * const cached: FrameSnapshot = { frame: 12, snapshot: { player: {}, session: {}, rng: rngState } };
5231
- * ```
5351
+ * The frozen model snapshot of one frame, kept so four phases read it once. One object per world,
5352
+ * rewritten when a new frame reads its snapshot.
5232
5353
  */
5233
5354
  type FrameSnapshot = {
5234
5355
  frame: number;
5235
5356
  snapshot: Snapshot;
5236
5357
  };
5358
+ /**
5359
+ * The context the runner hands every system of one world: one object, made at the first phase
5360
+ * run, whose `time` and `snapshot` are rewritten for every phase.
5361
+ */
5362
+ type PhaseContext = {
5363
+ /** The ecs API the systems of this world receive. */readonly world: EcsApi; /** The resource reader, one function per world. */
5364
+ readonly res: <Value extends object>(resource: ResourceType<Value>) => Value; /** The frozen model snapshot of the running frame. */
5365
+ snapshot: Snapshot; /** The running frame's `Time`. */
5366
+ time: Readonly<Time>;
5367
+ };
5237
5368
  /**
5238
5369
  * The JSON kind of one component field, read from its default value: what the editor's component
5239
5370
  * palette shows next to the field name. A nested shape is not described; `defaults` carries it.
@@ -5380,6 +5511,24 @@ type MarkCount = {
5380
5511
  marked: number;
5381
5512
  changed: number;
5382
5513
  };
5514
+ /**
5515
+ * The entities marked changed for one component in the current frame, each once, in mark order.
5516
+ * Both collections are kept from frame to frame, so a frame's marks allocate nothing once they
5517
+ * have grown to its size.
5518
+ */
5519
+ type ChangeList = {
5520
+ /** The marked entities of this frame, in mark order: what `changed()` hands out. */readonly entities: Entity[]; /** Entity to the frame stamp of its last mark; a stamp of the current frame is a repeat. */
5521
+ readonly frames: Map<Entity, number>;
5522
+ };
5523
+ /**
5524
+ * A plan `ecs.query()` remembers: the plan, and the type objects and `mut()` places it was made
5525
+ * for, compared by identity at every call.
5526
+ */
5527
+ type KnownPlan = {
5528
+ readonly plan: QueryPlan;
5529
+ readonly types: readonly AnyComponentType[];
5530
+ readonly written: readonly boolean[];
5531
+ };
5383
5532
  /**
5384
5533
  * ecs module state.
5385
5534
  */
@@ -5389,8 +5538,10 @@ type EcsState = {
5389
5538
  owners: Map<Entity, Owner>; /** Key is `"kind:name"` of the owner. */
5390
5539
  byOwner: Map<string, Set<Entity>>;
5391
5540
  types: Map<string, AnyComponentType>;
5392
- stores: Map<string, Map<Entity, object | true>>;
5393
- resources: Map<string, object>;
5541
+ stores: Map<string, Map<Entity, object | true>>; /** The store of each type object that was read, written or asked through, once it has one. */
5542
+ typeStores: Map<AnyComponentType, Map<Entity, object | true>>;
5543
+ resources: Map<string, object>; /** The value of each resource type object that was read, so a read is one lookup. */
5544
+ resourceSlots: Map<ResourceType<object>, object>;
5394
5545
  /**
5395
5546
  * The type object stored under each engine resource name (`"Now"`, `"Pointer"`, …), so a game
5396
5547
  * resource of the same name is refused instead of sharing the engine's value.
@@ -5398,18 +5549,23 @@ type EcsState = {
5398
5549
  engineResources: Map<string, object>;
5399
5550
  systems: Record<WorldPhase, SystemEntry[]>;
5400
5551
  running: WorldPhase | undefined;
5401
- commands: Command[];
5402
- changed: Map<string, Set<Entity>>;
5552
+ commands: Command[]; /** The change list of each component marked since the world began, emptied at every `signals`. */
5553
+ changed: Map<string, ChangeList>; /** The stamp of the current frame's marks, moved on by every clear of the change lists. */
5554
+ changeFrame: number;
5403
5555
  added: Map<string, StructuralHook[]>;
5404
5556
  removed: Map<string, StructuralHook[]>;
5405
5557
  ownerLeft: Array<(owner: Owner) => void>;
5406
5558
  mode: WorldMode;
5407
5559
  offFrame: Array<() => void>;
5408
- frameSnapshot: FrameSnapshot | undefined; /** The frame history: dev builds only, from the first frame on; `undefined` before it. */
5560
+ frameSnapshot: FrameSnapshot | undefined; /** The context of every system run of this world; `undefined` before the first phase ran. */
5561
+ phaseContext: PhaseContext | undefined; /** The frame history: dev builds only, from the first frame on; `undefined` before it. */
5409
5562
  history: History | undefined; /** Time per system of an agent build (H2b); `undefined` without the flag and before start. */
5410
5563
  timing: SystemTiming | undefined; /** The row of each timed system in `timing`, by name: a system that comes back keeps its row. */
5411
5564
  timingSlots: Map<string, number>; /** A dev build reported a store whose keys changed while a phase walked it: reported once. */
5412
- walkReported: boolean;
5565
+ walkReported: boolean; /** The plans of `ecs.query()` by the type of their first term, made once per tuple of types. */
5566
+ queryPlans: Map<AnyComponentType, KnownPlan[]>; /** The entity lists of ended `ecs.query()` walks, taken by the next walks: no key copy per call. */
5567
+ walkLists: Entity[][]; /** How many entities were despawned since the world began: the sweep looks for dead elements when it moved. */
5568
+ despawns: number;
5413
5569
  };
5414
5570
  /**
5415
5571
  * ecs module API, `app.world.ecs`: the screen as data. Plain-object components in one store per
@@ -5590,8 +5746,10 @@ type EcsApi = {
5590
5746
  * Walks the store of the FIRST term in insertion order and keeps the entities that carry every
5591
5747
  * term. Deterministic. A `mut()` term marks every yielded entity changed for that component
5592
5748
  * (README, "Marking what changed"). Inside a system the walk reads the store live (changes are
5593
- * queued until the phase ends); outside one it walks the keys taken at the start. Every row is a
5594
- * new array: keep it if you like. Put the rarest component first: the walk visits its store.
5749
+ * queued until the phase ends); outside one it walks the keys taken at the start. Every row of
5750
+ * `ecs.query()` is a new array: keep it if you like. The rows a system's `run` gets for its
5751
+ * declared `query` are not: they share one array, valid until the next row. Put the rarest
5752
+ * component first: the walk visits its store.
5595
5753
  *
5596
5754
  * @param terms - Component types, tag types and `mut()` terms.
5597
5755
  * @returns The matching rows: the entity and one value per term.
@@ -5696,7 +5854,12 @@ type EcsApi = {
5696
5854
  onRemoved(tagType: TagType, fn: (entity: Entity) => void): () => void;
5697
5855
  /**
5698
5856
  * The coarse change set of the frame, cleared in `time` phase `signals` after every `sync`
5699
- * system ran.
5857
+ * system ran. It is the world's own list, in mark order, each entity once: walk it in the frame
5858
+ * and copy what you keep, because the clear empties it in place. A component nothing marked
5859
+ * answers one shared empty list. Asking allocates nothing. Inside a system nothing leaves the
5860
+ * list until the phase ends. Outside a phase a despawn, or a removal of the component, takes the
5861
+ * entity out at once and the entities after it move up, so a loop that despawns or removes
5862
+ * outside a phase walks a copy: `const copy = [...ecs.changed(C)]`.
5700
5863
  *
5701
5864
  * @param component - The component type to ask about.
5702
5865
  * @returns The entities marked changed for it this frame.
@@ -6058,6 +6221,52 @@ type ProjectionModule = ProjectionApi & ProjectionInternal;
6058
6221
  */
6059
6222
  declare const DEMAND_REASONS: readonly ["always", "first", "resize", "restore", "layers", "debug", "wake", "capture", "request", "mark", "verify", "none", "overlay", "retake"];
6060
6223
  //#endregion
6224
+ //#region src/plugins/renderer/demand/marks.d.ts
6225
+ /**
6226
+ * The marks of one kind of the decision running now, in mark order, each entity once.
6227
+ */
6228
+ declare class MarkList implements Marks {
6229
+ /** Entities marked in this decision. */
6230
+ size: number;
6231
+ /** The marked entities: the first `size` of them; the rest is left from earlier decisions. */
6232
+ private readonly entities;
6233
+ /** The decision each entity was last marked in. */
6234
+ private readonly stamps;
6235
+ /** The number of this decision. */
6236
+ private stamp;
6237
+ /**
6238
+ * Tells whether an entity is marked in this decision.
6239
+ *
6240
+ * @param entity - The entity.
6241
+ * @returns True when it is.
6242
+ */
6243
+ has(entity: Entity): boolean;
6244
+ /**
6245
+ * The entity marked `index`-th in this decision.
6246
+ *
6247
+ * @param index - 0 to `size - 1`.
6248
+ * @returns The entity; 0 past the end.
6249
+ */
6250
+ at(index: number): Entity;
6251
+ /**
6252
+ * Marks an entity; a second mark of the same decision changes nothing.
6253
+ *
6254
+ * @param entity - The entity.
6255
+ */
6256
+ add(entity: Entity): void;
6257
+ /**
6258
+ * Empties the list: the next decision gets a new number, so every stamp is stale. Allocates nothing, except when the
6259
+ * stamps grew past `STAMPS_KEPT` or the numbers ran out: then they are dropped.
6260
+ */
6261
+ clear(): void;
6262
+ /**
6263
+ * Walks the marks of this decision in mark order. Allocates an iterator: for a test or a spread, never per frame.
6264
+ *
6265
+ * @yields {Entity} Each marked entity.
6266
+ */
6267
+ [Symbol.iterator](): Iterator<Entity>;
6268
+ }
6269
+ //#endregion
6061
6270
  //#region src/plugins/renderer/demand/types.d.ts
6062
6271
  /**
6063
6272
  * Why the render phase drew a frame, or `"none"` when it did not. Internal: `monitor` and the agent log read it.
@@ -6070,6 +6279,28 @@ type DemandReason = (typeof DEMAND_REASONS)[number];
6070
6279
  * out of the tree, no view). Internal: `sync.loopsHeld` reads it.
6071
6280
  */
6072
6281
  type Unseen = "shown" | "alpha-above" | "alpha-own" | "off-screen" | "other";
6282
+ /**
6283
+ * The change marks of one kind of the running decision, read: each entity once, in mark order. What a `Set` offered
6284
+ * its readers, kept in a list that empties without allocating (`MarkList`). Internal.
6285
+ */
6286
+ type Marks = {
6287
+ /** Entities marked in this decision. */readonly size: number;
6288
+ /**
6289
+ * Tells whether an entity is marked in this decision.
6290
+ *
6291
+ * @param entity - The entity.
6292
+ * @returns True when it is.
6293
+ */
6294
+ has(entity: Entity): boolean;
6295
+ /**
6296
+ * The entity marked `index`-th in this decision: a walk by index makes no iterator.
6297
+ *
6298
+ * @param index - 0 to `size - 1`.
6299
+ * @returns The entity; 0 past the end.
6300
+ */
6301
+ at(index: number): Entity; /** Walks the marks, allocating an iterator: for a test or a spread, never per frame. */
6302
+ [Symbol.iterator](): Iterator<Entity>;
6303
+ };
6073
6304
  /**
6074
6305
  * The last decision of the render phase, one object reused every frame.
6075
6306
  */
@@ -6082,12 +6313,12 @@ type DemandFrame = {
6082
6313
  * demand module state, `ctx.state.demand`.
6083
6314
  */
6084
6315
  type DemandState = {
6085
- /** Entities marked by a compared or structural write since the last decision. */marked: Set<Entity>; /** Marked entities whose view was not drawn at mark time; counted at the decision when drawn then. */
6086
- pending: Set<Entity>; /** Entities a display adapter reported after its `update` (not `false`): counted unless an ancestor is hidden. */
6087
- loose: Set<Entity>; /** Marked by a write that changes what the view draws (`mark`): the kept cache retakes its picture. */
6088
- visual: Set<Entity>; /** Marked by a write of the view's own transform or depth (`markMoved`): a kept picture only moves. */
6089
- moved: Set<Entity>; /** Marked through the public `invalidate`: a filter value or a self-drawn object about to change. */
6090
- published: Set<Entity>;
6316
+ /** Entities marked by a compared or structural write since the last decision. */marked: MarkList; /** Marked entities whose view was not drawn at mark time; counted at the decision when drawn then. */
6317
+ pending: MarkList; /** Entities a display adapter reported after its `update` (not `false`): counted unless an ancestor is hidden. */
6318
+ loose: MarkList; /** Marked by a write that changes what the view draws (`mark`): the kept cache retakes its picture. */
6319
+ visual: MarkList; /** Marked by a write of the view's own transform or depth (`markMoved`): a kept picture only moves. */
6320
+ moved: MarkList; /** Marked through the public `invalidate`: a filter value or a self-drawn object about to change. */
6321
+ published: MarkList;
6091
6322
  /**
6092
6323
  * Every whole-frame reason found since the last decision (O17, LEAD-FIXES-3). The first one added is
6093
6324
  * `frame().reason`, as spec 14 says; the set keeps the others visible to the overlay step and `kept.collect`.
@@ -6128,11 +6359,11 @@ type DemandInternal = {
6128
6359
  frame(): Readonly<DemandFrame>; /** The F6/F18a predicate: `unseenBy(entity) === "shown"`. */
6129
6360
  shown(entity: Entity): boolean; /** Where the walk of `shown` stopped for the entity's view, for `sync.loopsHeld` (spec 26 R1.7.3). */
6130
6361
  unseenBy(entity: Entity): Unseen; /** Marks of the current decision. */
6131
- marked(): ReadonlySet<Entity>; /** The adapter marks of the current decision, as `marked()` for the others. */
6132
- loose(): ReadonlySet<Entity>; /** The marks of the current decision made by `mark`: what a view draws changed. */
6133
- visual(): ReadonlySet<Entity>; /** The marks of the current decision made by `markMoved`: a view's own transform or depth changed. */
6134
- moved(): ReadonlySet<Entity>; /** The marks of the current decision made through the public `invalidate`. */
6135
- published(): ReadonlySet<Entity>; /** The pixel oracle switch, behind `DebugApi.verifyFrames`. */
6362
+ marked(): Marks; /** The adapter marks of the current decision, as `marked()` for the others. */
6363
+ loose(): Marks; /** The marks of the current decision made by `mark`: what a view draws changed. */
6364
+ visual(): Marks; /** The marks of the current decision made by `markMoved`: a view's own transform or depth changed. */
6365
+ moved(): Marks; /** The marks of the current decision made through the public `invalidate`. */
6366
+ published(): Marks; /** The pixel oracle switch, behind `DebugApi.verifyFrames`. */
6136
6367
  verifyFrames(on: boolean): void; /** Whether the pixel oracle is on. */
6137
6368
  verifying(): boolean; /** The body of the public `renderer.invalidate`: a mark of an entity that has a view. */
6138
6369
  invalidate(entity: Entity): void;
@@ -8002,6 +8233,14 @@ type SyncState = {
8002
8233
  * an entity with several endless loops is walked once a frame. Cleared by every pass, which may change the tree.
8003
8234
  */
8004
8235
  held: Map<Entity, Unseen>;
8236
+ /**
8237
+ * Moves on with every change that may change the render passes of a frame: a filter set or forgotten, a node's
8238
+ * `renderable` flipped, a view hung, wrapped or dropped (a pass that did work), a kept picture taken or let go, a
8239
+ * write a plugin announced with `invalidate` (a filter switched on or off).
8240
+ */
8241
+ passesVersion: number; /** The filtered views' passes of `renderPassesOf`, counted at `passesVersion` `at` under `root`. */
8242
+ passes: PassCount; /** The name of the scene's HUD layer (`above: "overlays"`), kept with the layers; `undefined` without one. */
8243
+ hudLayer: string | undefined;
8005
8244
  cleanups: Array<() => void>;
8006
8245
  };
8007
8246
  /**
@@ -8017,6 +8256,19 @@ type OverdrawState = {
8017
8256
  matrix: PixiFilter | undefined;
8018
8257
  listeners: Array<(on: boolean) => void>;
8019
8258
  };
8259
+ /**
8260
+ * The filtered views' part of the render passes, counted once and read every frame while nothing it reads changed: the
8261
+ * version and the root it was counted at, and every filter of the filter table with its `enabled` then (a plugin may
8262
+ * switch a filter by its field alone). Not public.
8263
+ */
8264
+ type PassCount = {
8265
+ at: number;
8266
+ root: PixiContainer | undefined;
8267
+ filtered: number; /** Filters recorded: the first `count` of `filters` and `enabled`. */
8268
+ count: number;
8269
+ filters: Array<PixiFilter | undefined>;
8270
+ enabled: boolean[];
8271
+ };
8020
8272
  //#endregion
8021
8273
  //#region src/plugins/renderer/monitor/log-types.d.ts
8022
8274
  /**
@@ -8169,6 +8421,45 @@ type PerfLine<Kind extends string> = {
8169
8421
  t: number;
8170
8422
  build: string | null;
8171
8423
  };
8424
+ /**
8425
+ * Which groups of the monitor's per-frame work run in an agent build, each on unless switched off (spec 11 R14, the
8426
+ * names of the editor's contract, telemetry proposal §2.7): `gpu` the GPU timer; `passes` the pass ring with its stencil
8427
+ * count and the draws, filter applies, uploads, instruction rebuilds and render targets the counting classes count;
8428
+ * `shaders` the pipeline compiles and shader modules; `problems` the problem rules' accumulators and their judgment;
8429
+ * `memory` the heap read of every frame and its `gc?` hint; `systems` the time of every world system and the five
8430
+ * slowest of a frame; `nodes` the change marks of the frame and its draw reason; `longFrames` the long frames the
8431
+ * browser reports. A section switched off skips its work, and its columns and sample fields read as not measured.
8432
+ *
8433
+ * @example
8434
+ * ```ts
8435
+ * // The editor measures the ward without the per-system timing, the rest as it was.
8436
+ * const sections: MonitorSections = {
8437
+ * gpu: true, passes: true, shaders: true, problems: true, memory: true, systems: false, nodes: true, longFrames: true
8438
+ * };
8439
+ * ```
8440
+ */
8441
+ type MonitorSections = {
8442
+ gpu: boolean;
8443
+ passes: boolean;
8444
+ shaders: boolean;
8445
+ problems: boolean;
8446
+ memory: boolean;
8447
+ systems: boolean;
8448
+ nodes: boolean;
8449
+ longFrames: boolean;
8450
+ };
8451
+ /**
8452
+ * The sections of the monitor in their order: the order of a `sections` event's lists and of `sample.sectionsMs`
8453
+ * (which adds `base`, the rest of the commit). New sections are only ever appended.
8454
+ *
8455
+ * @example
8456
+ * ```ts
8457
+ * // The editor draws one switch per section of the device's monitor, in the engine's order, and greys the ones off.
8458
+ * app.renderer.monitor.sections({ systems: false });
8459
+ * MONITOR_SECTIONS.filter(section => !app.renderer.monitor.sections()[section]); // ["systems"]
8460
+ * ```
8461
+ */
8462
+ declare const MONITOR_SECTIONS: readonly ["gpu", "passes", "shaders", "problems", "memory", "systems", "nodes", "longFrames"];
8172
8463
  /**
8173
8464
  * What an agent build could measure on this page; the header lists it.
8174
8465
  */
@@ -8254,6 +8545,12 @@ type PerfHeaderLine = PerfLine<"header"> & {
8254
8545
  debug?: {
8255
8546
  overdraw: boolean;
8256
8547
  };
8548
+ /**
8549
+ * The sections of the monitor at the moment of the header, as `monitor.sections()` answers them (a `sections` event
8550
+ * marks a switch later): a section `measured` lists but `false` here is switched off, not missing. The engine always
8551
+ * writes it; optional for a reader of an older log.
8552
+ */
8553
+ sections?: Readonly<MonitorSections>;
8257
8554
  };
8258
8555
  /**
8259
8556
  * One Long Animation Frame (or long task) of the page.
@@ -8426,6 +8723,13 @@ type PerfSampleLine = PerfLine<"sample"> & {
8426
8723
  created: number;
8427
8724
  destroyed: number;
8428
8725
  } | null;
8726
+ /**
8727
+ * What each section of the monitor cost in the second: page-clock ms its part of the frame commits took, summed over
8728
+ * the second, 0 for a section switched off; `base` is the rest of the commits. Pixi-side counting is not timed. A
8729
+ * WebView's clock ticks in 0.1 ms, so a part shorter than that adds 0 or 0.1 at a time: the sum over a second is
8730
+ * what to read. The engine always writes it; optional for a reader of an older log.
8731
+ */
8732
+ sectionsMs?: { readonly [Section in keyof MonitorSections | "base"]: number };
8429
8733
  };
8430
8734
  /**
8431
8735
  * Why a frame is a spike: a rule (`gap`, `js`, `gpu`) or an annotation of a spike. `compile` is a compile in the frame or,
@@ -8569,9 +8873,10 @@ type PerfLongFrameLine = PerfLine<"longFrame"> & LongFrameEntry & {
8569
8873
  /**
8570
8874
  * The names of `event` lines (`"devtools"` is the editor's overlay event, in 2b because the editor's page agent emits
8571
8875
  * it on the 2b debug build; `"pool-trim"` is the pool trim of spec 25, detail `PoolTrimDetail`; `"warm"` is the end of
8572
- * a pipeline warm-up run of spec 27, detail `WarmDetail`).
8876
+ * a pipeline warm-up run of spec 27, detail `WarmDetail`; `"sections"` is a switch of the monitor's sections, detail
8877
+ * `{ on, off }`: the names of the sections on and off, in the order of `MONITOR_SECTIONS`).
8573
8878
  */
8574
- type PerfEventName = "scene" | "overlay" | "bundle" | "compile" | "upload" | "resolution" | "device-lost" | "device-restored" | "pause" | "resume" | "switch" | "display" | "command" | "recorder" | "rate" | "devtools" | "pool-trim" | "warm" | "shader" | "problem" | "debug";
8879
+ type PerfEventName = "scene" | "overlay" | "bundle" | "compile" | "upload" | "resolution" | "device-lost" | "device-restored" | "pause" | "resume" | "switch" | "display" | "command" | "recorder" | "rate" | "devtools" | "pool-trim" | "warm" | "shader" | "problem" | "debug" | "sections";
8575
8880
  /**
8576
8881
  * What an `overlay` event line says happened to an overlay (spec 22 O10.2): it opened, landed (its enter motion is
8577
8882
  * over), started to leave, is gone, or its range went live or was kept again (the live fallback).
@@ -9428,7 +9733,9 @@ type MonitorSinks = {
9428
9733
  compiles: CompileRing; /** The WebGPU pass sink, set at attach. */
9429
9734
  passes: PassSink | undefined; /** A pass counter runs (F8): the counting encoder exists, or the WebGL runner items are subscribed. */
9430
9735
  measuring: boolean; /** Pixi's instruction rebuilds since the monitor last took them, in a frame or between frames (spec 26 R2.3). */
9431
- rebuildsWindow: number;
9736
+ rebuildsWindow: number; /** The `SECTION` bits of the sections that run in the frame now: what the commit and the counting classes test. */
9737
+ sections: number; /** The `SECTION` bits a switch asked for: they apply at the start of the next frame, so a frame is measured whole. */
9738
+ sectionsNext: number;
9432
9739
  };
9433
9740
  /**
9434
9741
  * The ring's render passes, written in place: `capacity * 4` of them. Not public.
@@ -9593,8 +9900,14 @@ type PerfState = {
9593
9900
  /** `config.monitor.budgetMs`; a frame's budget is `budgetOf` it. */budget: number | "rate"; /** `config.monitor.frames`: the capacity the ring gets at the first attach. */
9594
9901
  frames: number;
9595
9902
  ring: PerfRing; /** `capacity` long, for percentiles at a flush. */
9596
- scratch: Float32Array; /** Doubles kept unboxed: `[0]` the budget of the frame being committed, `[1]` the end of a flushed window. */
9597
- staged: Float64Array; /** The display's frame period from the ticks: the budget's display part while `time` does not know the display. */
9903
+ scratch: Float32Array;
9904
+ /**
9905
+ * Doubles kept unboxed: `[0]` the budget of the frame being committed, `[1]` the end of a flushed window, `[2]` the
9906
+ * page clock of the last lap of the commit, where the next section's cost starts.
9907
+ */
9908
+ staged: Float64Array; /** The sections `monitor.sections()` answers: the config's at first, then the last switch; frozen. */
9909
+ sections: Readonly<MonitorSections>; /** Page-clock ms of the commits of the current second, by section in `COST` order, `base` last. */
9910
+ sectionsMs: Float64Array; /** The display's frame period from the ticks: the budget's display part while `time` does not know the display. */
9598
9911
  ticks: TickEstimate; /** The `time.rate()` snapshot the last frame saw: a new one may carry another `displayHz` (a `display` event). */
9599
9912
  rate: Readonly<FrameRate> | undefined;
9600
9913
  drawn: boolean; /** The `CHANGED` bits of the frame running now. */
@@ -9636,8 +9949,9 @@ type PerfState = {
9636
9949
  * wait for a drawn frame.
9637
9950
  */
9638
9951
  type MonitorState = {
9639
- /** Clock time at the start of the frame being drawn; `undefined` between frames. */frameStart: number | undefined; /** Clock time at the start of the last frame, the far end of the next interval. */
9640
- lastStart: number | undefined; /** Clock milliseconds between frame starts, summed over the open window. */
9952
+ /** Clock time at the start of the frame being drawn; NaN between frames. A double from the start: never boxed. */frameStart: number; /** Clock time at the start of the last frame, the far end of the next interval; NaN before the first. */
9953
+ lastStart: number; /** `[0]`: the clock reading `begin` or `end` hands the window, staged: a double handed to a call is boxed. */
9954
+ staged: Float64Array; /** Clock milliseconds between frame starts, summed over the open window. */
9641
9955
  windowMs: number; /** Intervals between frame starts in the open window. */
9642
9956
  intervals: number; /** Clock milliseconds spent inside frames in the open window. */
9643
9957
  workMs: number; /** Frames finished in the open window. */
@@ -9843,6 +10157,25 @@ type PerfMonitorApi = {
9843
10157
  * ```
9844
10158
  */
9845
10159
  setResolution(resolution: number | undefined): number;
10160
+ /**
10161
+ * The sections of the monitor of a debug build, each on unless switched off: what runs every frame, and what can be
10162
+ * switched off to measure the game without it. Without an argument it reads them. With one it switches the sections
10163
+ * it names, from the next frame on, and writes a `sections` event; a write needs control (`--debug`, or a dev page):
10164
+ * a read-only page (`--debug=read`) keeps the sections and throws. A section off skips its work: its ring columns and its sample fields read as not measured, and its
10165
+ * `sample.sectionsMs` is 0. Agent builds only: elsewhere every section answers on and nothing switches.
10166
+ *
10167
+ * @param next - The sections to switch: `true` on, `false` off; a section left out keeps its switch.
10168
+ * @returns The sections from the next frame on, one frozen object until the next switch.
10169
+ * @throws {Error} With `reason: "read-only"` when a page without control is asked to change a section.
10170
+ * @example
10171
+ * ```ts
10172
+ * // The editor's Mission control: what does the ward cost without the per-system timing?
10173
+ * app.renderer.monitor.sections().systems; // true
10174
+ * app.renderer.monitor.sections({ systems: false }); // { gpu: true, passes: true, shaders: true, problems: true, memory: true, systems: false, nodes: true, longFrames: true }
10175
+ * // a stream() listener gets { kind: "event", name: "sections", detail: { on: ["gpu", "passes", "shaders", "problems", "memory", "nodes", "longFrames"], off: ["systems"] }, … }
10176
+ * ```
10177
+ */
10178
+ sections(next?: Partial<MonitorSections>): Readonly<MonitorSections>;
9846
10179
  /**
9847
10180
  * The live object counts of a debug build: a plugin the renderer cannot depend on (it depends on the renderer)
9848
10181
  * registers a count here, and the monitor reads it once a second into `sample.counts` and `stats().counts`.
@@ -10065,7 +10398,7 @@ type PictureRequest = {
10065
10398
  reject: (error: Error) => void;
10066
10399
  };
10067
10400
  declare namespace types_d_exports$2 {
10068
- export { Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
10401
+ export { Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorSections, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
10069
10402
  }
10070
10403
  /**
10071
10404
  * The part of Pixi the engine uses: the classes `sync` builds views from (a `Rectangle` frames the
@@ -10290,6 +10623,8 @@ type Config$2 = {
10290
10623
  * createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: 8.3, frames: 2048 } } } });
10291
10624
  * // A game with a large blurred backdrop flags it sooner: 30 still frames over 0.1 Mpx.
10292
10625
  * createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: "rate", frames: 1024, stillFrames: 30, stillMpx: 0.1 } } } });
10626
+ * // A debug build that starts without the per-system timing: app.renderer.monitor.sections().systems is false.
10627
+ * createApp({ pluginConfigs: { renderer: { mount: "#game", monitor: { budgetMs: "rate", frames: 1024, sections: { systems: false } } } } });
10293
10628
  * ```
10294
10629
  */
10295
10630
  type MonitorConfig = {
@@ -10306,6 +10641,11 @@ type MonitorConfig = {
10306
10641
  churnPerSecond?: number; /** `target-churn`: seconds of churn in a row before the problem. Default 3. */
10307
10642
  churnSeconds?: number; /** `target-churn`: a render target made this many ms after a pool trim is churn at once. Default 1000. */
10308
10643
  churnAfterTrimMs?: number;
10644
+ /**
10645
+ * The sections of the monitor a debug build starts with (spec 11 R14): a section left out is on. `monitor.sections`
10646
+ * switches them later.
10647
+ */
10648
+ sections?: Partial<MonitorSections>;
10309
10649
  };
10310
10650
  /**
10311
10651
  * renderer plugin state: one branch per module.
@@ -11732,4 +12072,4 @@ type BundleCompanion = {
11732
12072
  unload(bundle: string): void;
11733
12073
  };
11734
12074
  //#endregion
11735
- export { PerfCause as $, JournalEntry as $n, types_d_exports$3 as $t, PixiSprite as A, Api$3 as An, SnapshotOf as Ar, ViewportSize as At, FrameReadResult as B, defineFlow as Bn, Api$7 as Br, Shape as Bt, State$1 as C, NumericFields as Cn, types_d_exports$6 as Cr, ShaderWhat as Ct, MonitorConfig as D, TrackOptions as Dn, SaveDoc as Dr, FilterSlotInputs as Dt, Config$2 as E, ReducedMotion as En, ProviderCall as Er, FilterSlot as Et, types_d_exports$2 as F, HudKeysOf as Fn, Config$7 as Fr, NineSlice$1 as Ft, OverlayEventDetail as G, FeatureDescription as Gn, ThermalReading as Gr, Transform as Gt, FrameRecord as H, slot as Hn, FrameRate as Hr, Sprite as Ht, Captured as I, Position as In, Events$6 as Ir, NineSliceValue as It, PERF_GAP_BUCKETS as J, AnyFlow as Jn, Config$9 as Jr, DEMAND_REASONS as Jt, OverlayWhat as K, FeaturePlugin as Kn, Time as Kr, TransformValue as Kt, MonitorCounts as L, State$4 as Ln, PauseReason as Lr, Overlay as Lt, PoolTrim as M, Config$4 as Mn, RngApi as Mr, Display as Mt, State$2 as N, EmitterIdOf as Nn, RngState as Nr, HudPart as Nt, PixiFilter as O, TrackSegment as On, SaveUnreadableError as Or, Orientation as Ot, Under as P, GameTypes as Pn, Api$6 as Pr, HudPartValue as Pt, PassRecord as Q, FlowState as Qn, State$3 as Qt, RenderStats as R, TextStylesOf as Rn, State$7 as Rr, OverlayValue as Rt, ScenesApi as S, MotionHandle as Sn, State$6 as Sr, ShaderEventDetail as St, Api$1 as T, ProjectionSpec as Tn, PlayerStateProvider as Tr, DebugSwitches as Tt, FrameRing as U, to as Un, RateChange as Ur, SpriteOptions as Ut, FrameReadout as V, exit as Vn, Config$8 as Vr, ShapeValue as Vt, LongFrameEntry as W, type as Wn, State$8 as Wr, SpriteValue as Wt, PROBLEM_RULES as X, DefineNode as Xn, Require as Xr, Config$3 as Xt, PERF_LOG_VERSION as Y, Bookmark as Yn, Events$8 as Yr, Api$2 as Yt, PassKind as Z, FlowGraph as Zn, Explained as Zt, DefineScene as _, ChangeHook as _n, Api$5 as _r, PerfThermalLine as _t, Config as a, ComponentType as an, Effect as ar, PerfEventLine as at, SceneDefinition as b, Motion as bn, Json as br, ProblemRule as bt, LoadBundles as c, EntitySnapshot as cn, Hint as cr, PerfHeaderLine as ct, Manifest as d, Narrowed as dn, Api$4 as dr, PerfMarkLine as dt, AnyComponent as en, NodeTable as er, PerfChange as et, State as f, QueryTerm as fn, ClockSource as fr, PerfMeasured as ft, AnySceneProjection as g, TagType as gn, types_d_exports$5 as gr, PerfTelemetryLine as gt, types_d_exports as h, SystemFor as hn, State$5 as hr, PerfStartupLine as ht, BundleSpec as i, ComponentSchema as in, Descriptor as ir, PerfDisplay as it, PixiTexture as j, BundlesOf as jn, StoreApi as jr, FilterCache as jt, PixiModule as k, ViewHandle as kn, Snapshot as kr, Point as kt, LoadReason as l, FrameDiff as ln, NodeFx as lr, PerfLogLine as lt, Usage as m, SystemDefinition as mn, FakeClock as mr, PerfSpikeLine as mt, AssetsIo as n, AnyComponentValue as nn, SceneIdOf as nr, PerfCollectorLine as nt, DefineBundles as o, ComponentValue as on, EffectOptions as or, PerfEventName as ot, Tier as p, ResourceType as pn, Config$5 as pr, PerfSampleLine as pt, PERF_CAUSES as q, FeatureTree as qn, types_d_exports$8 as qr, sprite as qt, BundleMap as r, ComponentHandle as rn, TypeTag as rr, PerfCounts as rt, Events as s, Entity as sn, GuideOptions as sr, PerfGapLine as st, Api as t, AnyComponentType as tn, RouteStep as tr, PerfChangeEntry as tt, LoadResult as u, Mut as un, Answer as ur, PerfLongFrameLine as ut, Events$1 as v, DescriptionNode as vn, Config$6 as vr, PoolTrimDetail as vt, types_d_exports$1 as w, ProjectionMotion as wn, Patch as wr, WarmDetail as wt, SceneSpec as x, MotionCause as xn, Root as xr, SHADER_WHATS as xt, LayerMap as y, Ease as yn, Events$5 as yr, ProblemEventDetail as yt, FrameColumns as z, types_d_exports$4 as zn, types_d_exports$7 as zr, Parent as zt };
12075
+ export { PassKind as $, FlowGraph as $n, Explained as $t, PixiSprite as A, TrackSegment as An, SaveUnreadableError as Ar, Orientation as At, FrameReadResult as B, TextStylesOf as Bn, State$7 as Br, OverlayValue as Bt, State$1 as C, MotionCause as Cn, Root as Cr, SHADER_WHATS as Ct, MonitorConfig as D, ProjectionSpec as Dn, PlayerStateProvider as Dr, DebugSwitches as Dt, Config$2 as E, ProjectionMotion as En, Patch as Er, WarmDetail as Et, types_d_exports$2 as F, EmitterIdOf as Fn, RngState as Fr, HudPart as Ft, MONITOR_SECTIONS as G, to as Gn, RateChange as Gr, SpriteOptions as Gt, FrameRecord as H, defineFlow as Hn, Api$7 as Hr, Shape as Ht, Captured as I, GameTypes as In, Api$6 as Ir, HudPartValue as It, OverlayWhat as J, FeaturePlugin as Jn, Time as Jr, TransformValue as Jt, MonitorSections as K, type as Kn, State$8 as Kr, SpriteValue as Kt, MonitorCounts as L, HudKeysOf as Ln, Config$7 as Lr, NineSlice$1 as Lt, PoolTrim as M, Api$3 as Mn, SnapshotOf as Mr, ViewportSize as Mt, State$2 as N, BundlesOf as Nn, StoreApi as Nr, FilterCache as Nt, PixiFilter as O, ReducedMotion as On, ProviderCall as Or, FilterSlot as Ot, Under as P, Config$4 as Pn, RngApi as Pr, Display as Pt, PROBLEM_RULES as Q, DefineNode as Qn, Require as Qr, Config$3 as Qt, RenderStats as R, Position as Rn, Events$6 as Rr, NineSliceValue as Rt, ScenesApi as S, Motion as Sn, Json as Sr, ProblemRule as St, Api$1 as T, NumericFields as Tn, types_d_exports$6 as Tr, ShaderWhat as Tt, FrameRing as U, exit as Un, Config$8 as Ur, ShapeValue as Ut, FrameReadout as V, types_d_exports$4 as Vn, types_d_exports$7 as Vr, Parent as Vt, LongFrameEntry as W, slot as Wn, FrameRate as Wr, Sprite as Wt, PERF_GAP_BUCKETS as X, AnyFlow as Xn, Config$9 as Xr, DEMAND_REASONS as Xt, PERF_CAUSES as Y, FeatureTree as Yn, types_d_exports$8 as Yr, sprite as Yt, PERF_LOG_VERSION as Z, Bookmark as Zn, Events$8 as Zr, Api$2 as Zt, DefineScene as _, SystemFor as _n, State$5 as _r, PerfStartupLine as _t, Config as a, ComponentHandle as an, TypeTag as ar, PerfCounts as at, SceneDefinition as b, DescriptionNode as bn, Config$6 as br, PoolTrimDetail as bt, LoadBundles as c, ComponentValue as cn, EffectOptions as cr, PerfEventName as ct, Manifest as d, FrameDiff as dn, NodeFx as dr, PerfLogLine as dt, State$3 as en, FlowState as er, PassRecord as et, State as f, Mut as fn, Answer as fr, PerfLongFrameLine as ft, AnySceneProjection as g, SystemDefinition as gn, FakeClock as gr, PerfSpikeLine as gt, types_d_exports as h, ResourceType as hn, Config$5 as hr, PerfSampleLine as ht, BundleSpec as i, AnyComponentValue as in, SceneIdOf as ir, PerfCollectorLine as it, PixiTexture as j, ViewHandle as jn, Snapshot as jr, Point as jt, PixiModule as k, TrackOptions as kn, SaveDoc as kr, FilterSlotInputs as kt, LoadReason as l, Entity as ln, GuideOptions as lr, PerfGapLine as lt, Usage as m, QueryTerm as mn, ClockSource as mr, PerfMeasured as mt, AssetsIo as n, AnyComponent as nn, NodeTable as nr, PerfChange as nt, DefineBundles as o, ComponentSchema as on, Descriptor as or, PerfDisplay as ot, Tier as p, Narrowed as pn, Api$4 as pr, PerfMarkLine as pt, OverlayEventDetail as q, FeatureDescription as qn, ThermalReading as qr, Transform as qt, BundleMap as r, AnyComponentType as rn, RouteStep as rr, PerfChangeEntry as rt, Events as s, ComponentType as sn, Effect as sr, PerfEventLine as st, Api as t, types_d_exports$3 as tn, JournalEntry as tr, PerfCause as tt, LoadResult as u, EntitySnapshot as un, Hint as ur, PerfHeaderLine as ut, Events$1 as v, TagType as vn, types_d_exports$5 as vr, PerfTelemetryLine as vt, types_d_exports$1 as w, MotionHandle as wn, State$6 as wr, ShaderEventDetail as wt, SceneSpec as x, Ease as xn, Events$5 as xr, ProblemEventDetail as xt, LayerMap as y, ChangeHook as yn, Api$5 as yr, PerfThermalLine as yt, FrameColumns as z, State$4 as zn, PauseReason as zr, Overlay as zt };