@moku-labs/game 0.15.6 → 0.15.8

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-CRgEt4wq.mjs";
1
+ import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-BcEtn9XV.mjs";
2
2
 
3
3
  //#region src/app/page.d.ts
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { Dr as PlayerStateProvider } from "../types-DnttyLeu.mjs";
2
- import { mt as PlatformProvider } from "../index-DytzVJFz.mjs";
3
- import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-CRgEt4wq.mjs";
1
+ import { Or as PlayerStateProvider } from "../types-C4D9UVgb.mjs";
2
+ import { mt as PlatformProvider } from "../index-B3dfnsUZ.mjs";
3
+ import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-BcEtn9XV.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 { Sr as Json } from "./types-DnttyLeu.mjs";
2
- import { V as StringTable } from "./types-CWSMo70I.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-CRgEt4wq.mjs";
1
+ import { Cr as Json } from "./types-C4D9UVgb.mjs";
2
+ import { H as StringTable } from "./types-CYoGvBkh.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-BcEtn9XV.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 { Ot as effectsPlugin, i as screen, m as flattenFeatures, q as platformPlugin, t as createApp, zt as audioPlugin } from "./src-DWJabPi4.mjs";
1
+ import { Bt as audioPlugin, J as platformPlugin, i as screen, kt as effectsPlugin, m as flattenFeatures, t as createApp } from "./src-DNVAJHwd.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-DnttyLeu.mjs";
1
+ import { d as Manifest } from "./types-C4D9UVgb.mjs";
2
2
 
3
3
  //#region src/plugins/assets/scan/cli.d.ts
4
4
  /**
@@ -1,8 +1,8 @@
1
- import { Dt as DebugSwitches, I as Captured, Ir as Api, Jr as Time, Nr as StoreApi, S as ScenesApi, T as Api$1, Wr as FrameRate, Zn as Bookmark, Zt as Api$2, er as FlowState, jr as Snapshot } from "./types-DnttyLeu.mjs";
2
- import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-C2LZJIxH.mjs";
3
- import { j as InputApi } from "./types-CWSMo70I.mjs";
4
- import { t as HeadlessApp } from "./headless-DDkRwLnJ.mjs";
5
- import { n as Command, r as ControlApp } from "./types-DFoxDq-g.mjs";
1
+ import { E as Api$1, Gr as FrameRate, L as Captured, Lr as Api, Mr as Snapshot, Ot as DebugSwitches, Pr as StoreApi, Qn as Bookmark, Qt as Api$2, S as ScenesApi, Yr as Time, tr as FlowState } from "./types-C4D9UVgb.mjs";
2
+ import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-CPxx3NSG.mjs";
3
+ import { M as InputApi } from "./types-CYoGvBkh.mjs";
4
+ import { t as HeadlessApp } from "./headless-DobgwTKK.mjs";
5
+ import { n as Command, r as ControlApp } from "./types-Mj75CDO6.mjs";
6
6
 
7
7
  //#region src/plugins/flow/doors/commands.d.ts
8
8
  /**
@@ -136,6 +136,14 @@ declare const commands: Readonly<{
136
136
  } & {
137
137
  readonly ui: Pick<UiApi, "fill">;
138
138
  }>;
139
+ scroll: Command<{
140
+ key: "string";
141
+ to: "number";
142
+ }, boolean, HeadlessApp & {
143
+ readonly log: import("@moku-labs/common/browser").LogApi;
144
+ } & {
145
+ readonly ui: Pick<UiApi, "scroll">;
146
+ }>;
139
147
  timeScale: Command<{
140
148
  scale: "number";
141
149
  }, Readonly<Time>, ControlApp>;
@@ -1,7 +1,7 @@
1
- import { t as HeadlessApp } from "./headless-DDkRwLnJ.mjs";
2
- import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-DFoxDq-g.mjs";
3
- import { t as commands } from "./commands-CAEwtEAy.mjs";
4
- import { t as defineCommand } from "./define-CNctRrea.mjs";
1
+ import { t as HeadlessApp } from "./headless-DobgwTKK.mjs";
2
+ import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-Mj75CDO6.mjs";
3
+ import { t as commands } from "./commands-DWyII1jn.mjs";
4
+ import { t as defineCommand } from "./define-Bebctfvs.mjs";
5
5
 
6
6
  //#region src/plugins/flow/doors/dev.d.ts
7
7
  /**
package/dist/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  import { n as controlRefused, t as controlReadOnly } from "./dev-BNndV-hU.mjs";
2
2
  import { s as defineCommand } from "./session-CeKgO2hy.mjs";
3
- import { n as commands, t as run } from "./run-C07NXds7.mjs";
3
+ import { n as commands, t as run } from "./run-BqYmcNo7.mjs";
4
4
  export { commands, controlReadOnly, controlRefused, defineCommand, run };
@@ -1,5 +1,5 @@
1
- import { t as HeadlessApp } from "./headless-DDkRwLnJ.mjs";
2
- import { c as Source, n as Command, o as InputSchema } from "./types-DFoxDq-g.mjs";
1
+ import { t as HeadlessApp } from "./headless-DobgwTKK.mjs";
2
+ import { c as Source, n as Command, o as InputSchema } from "./types-Mj75CDO6.mjs";
3
3
 
4
4
  //#region src/plugins/flow/doors/define.d.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { Fr as RngState, Hr as Api, Mn as Api$1, Sr as Json, er as FlowState, fr as Answer, rr as RouteStep, tr as JournalEntry } from "./types-DnttyLeu.mjs";
1
+ import { Cr as Json, Ir as RngState, Nn as Api$1, Ur as Api, ir as RouteStep, nr as JournalEntry, pr as Answer, tr as FlowState } from "./types-C4D9UVgb.mjs";
2
2
 
3
3
  //#region src/plugins/flow/headless.d.ts
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { $ as PassKind, Bn as TextStylesOf, Br as State$4, Bt as OverlayValue, C as State$7, Cr as Root, Dn as ProjectionSpec, E as Config$6, En as ProjectionMotion, Er as Patch, Fn as EmitterIdOf, Gr as RateChange, Gt as SpriteOptions, H as FrameRecord, Hn as defineFlow, Hr as Api$5, In as GameTypes, Ir as Api$3, It as HudPartValue, Jn as FeaturePlugin, Jt as TransformValue, Kr as State$8, Kt as SpriteValue, Ln as HudKeysOf, Lr as Config$4, Mn as Api$2, Mt as ViewportSize, N as State$6, Nn as BundlesOf, Nr as StoreApi, On as ReducedMotion, Pn as Config$3, Pr as RngApi, Qn as DefineNode, Qr as Require, Qt as Config$8, Rr as Events, Rt as NineSliceValue, S as ScenesApi, Sr as Json, T as Api$4, Tn as NumericFields, U as FrameRing, Ur as Config$7, Ut as ShapeValue, Xr as Config$9, Yn as FeatureTree, Yt as sprite, Zr as Events$1, Zt as Api$6, _ as DefineScene, _n as SystemFor, _r as State$2, a as Config$1, an as ComponentHandle, b as SceneDefinition, bn as DescriptionNode, br as Config$5, c as LoadBundles, cn as ComponentValue, cr as EffectOptions, en as State$9, f as State$1, fn as Mut, fr as Answer, g as AnySceneProjection, gn as SystemDefinition, hn as ResourceType, hr as Config$2, i as BundleSpec, ir as SceneIdOf, l as LoadReason, lr as GuideOptions, mn as QueryTerm, o as DefineBundles, or as Descriptor, p as Tier, pn as Narrowed, pr as Api$1, qn as FeatureDescription, qr as ThermalReading, r as BundleMap, sn as ComponentType, sr as Effect, t as Api, u as LoadResult, ur as Hint, vn as TagType, wr as State$5, x as SceneSpec, xn as Ease, y as LayerMap, zn as State$3, zr as PauseReason } from "./types-DnttyLeu.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-C2LZJIxH.mjs";
3
- import { A as Config$15, B as State$14, C as TextBind, D as TextValue, E as TextStyles, F as Config$14, G as IsFlags, H as TextKey, I as I18nApi, K as ResolvedStyle, L as IntlKit, M as State$15, P as Argument, R as Message, S as TextApi, T as TextStyleInput, U as TypedTr, Y as WhenFlags, _ as BindOptions, b as Point, g as BindField, j as InputApi, k as defineComponent, m as IntrinsicElementsFor, p as defineTokens, q as Style, s as PopupComponent, v as Config$16, x as State$16, y as CountdownValue, z as Part } from "./types-CWSMo70I.mjs";
1
+ import { $n as DefineNode, $r as Require, $t as Config$8, Bn as State$3, Br as PauseReason, C as State$7, Cr as Json, D as Config$6, Dn as ProjectionMotion, Dr as Patch, E as Api$4, En as NumericFields, Fn as Config$3, Fr as RngApi, In as EmitterIdOf, Jn as FeatureDescription, Jr as ThermalReading, Kr as RateChange, Kt as SpriteOptions, Ln as GameTypes, Lr as Api$3, Lt as HudPartValue, Nn as Api$2, Nt as ViewportSize, On as ProjectionSpec, P as State$6, Pn as BundlesOf, Pr as StoreApi, Qr as Events$1, Qt as Api$6, Rn as HudKeysOf, Rr as Config$4, S as ScenesApi, Sn as Ease, Tr as State$5, U as FrameRecord, Un as defineFlow, Ur as Api$5, Vn as TextStylesOf, Vr as State$4, Vt as OverlayValue, W as FrameRing, Wr as Config$7, Wt as ShapeValue, Xn as FeatureTree, Xt as sprite, Yn as FeaturePlugin, Yt as TransformValue, Zr as Config$9, _ as DefineScene, _n as SystemDefinition, a as Config$1, ar as SceneIdOf, b as SceneDefinition, c as LoadBundles, cn as ComponentType, cr as Effect, dr as Hint, et as PassKind, f as State$1, g as AnySceneProjection, gn as ResourceType, gr as Config$2, hn as QueryTerm, i as BundleSpec, kn as ReducedMotion, l as LoadReason, ln as ComponentValue, lr as EffectOptions, mn as Narrowed, mr as Api$1, o as DefineBundles, on as ComponentHandle, p as Tier, pn as Mut, pr as Answer, qr as State$8, qt as SpriteValue, r as BundleMap, sr as Descriptor, t as Api, tn as State$9, u as LoadResult, ur as GuideOptions, vn as SystemFor, vr as State$2, wr as Root, x as SceneSpec, xn as DescriptionNode, xr as Config$5, y as LayerMap, yn as TagType, zr as Events, zt as NineSliceValue } from "./types-C4D9UVgb.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-CPxx3NSG.mjs";
3
+ import { A as defineComponent, B as Part, C as TextApi, D as TextStyles, E as TextStyleInput, F as Argument, I as Config$14, J as Style, K as IsFlags, L as I18nApi, M as InputApi, N as State$15, O as TextValue, R as IntlKit, S as State$16, U as TextKey, V as State$14, W as TypedTr, X as WhenFlags, _ as BindField, b as CountdownValue, h as IntrinsicElementsFor, j as Config$15, m as defineTokens, q as ResolvedStyle, s as PopupComponent, v as BindOptions, w as TextBind, x as Point, y as Config$16, z as Message } from "./types-CYoGvBkh.mjs";
4
4
  import { Log } from "@moku-labs/common/browser";
5
5
  import { PluginCtx } from "@moku-labs/core";
6
6
 
@@ -645,9 +645,10 @@ declare const timePlugin: import("@moku-labs/core").PluginInstance<"time", Confi
645
645
  //#endregion
646
646
  //#region src/plugins/ui/index.d.ts
647
647
  /**
648
- * Ui plugin: `app.ui.tree()`, `app.ui.find(...)`, `app.ui.lint()`, `app.ui.fill(...)`, the
649
- * text field `<input local>`, the components `Box`, `LocalWrite` and
650
- * `DebugTrigger`, and the helpers `defineComponent`, `defineStyle`, `defineTokens` and `popup`.
648
+ * Ui plugin: `app.ui.tree()`, `app.ui.find(...)`, `app.ui.lint()`, `app.ui.fill(...)`,
649
+ * `app.ui.scroll(...)`, the text field `<input local>`, the components `Box`, `LocalWrite`,
650
+ * `DebugTrigger` and `ScrollState`, and the helpers `defineComponent`, `defineStyle`,
651
+ * `defineTokens` and `popup`.
651
652
  *
652
653
  * @example
653
654
  * ```ts
@@ -1637,18 +1638,20 @@ declare const Alpha: ComponentType<AlphaValue>;
1637
1638
  * An `area` answers, from the value, the rectangle in the entity's own units outside of which the
1638
1639
  * filter draws nothing: Pixi then renders and fills only that box, not the view's bounds. A
1639
1640
  * `resolution` draws the view and its filters at that many texels per CSS px instead of the
1640
- * canvas's.
1641
- * Register it through the `filters` key of a feature. The README shows a filter with a blur input
1642
- * and one with an `area`.
1641
+ * canvas's. A `backdrop` reads what was drawn under its view inside that box: the body calls
1642
+ * `sampleBack(uv)`, and an input may start `from: "back"`; it is drawn live in every frame.
1643
+ * Register it through the `filters` key of a feature. The README shows a filter with a blur input,
1644
+ * one with an `area` and a backdrop.
1643
1645
  *
1644
1646
  * @param id - The filter id, also the component name; unique, and not one of the built-ins.
1645
1647
  * @param spec - Both bodies, the uniforms, the passes one apply costs, the padding, the inputs, the fallback, the
1646
- * cache category, the area and the resolution.
1648
+ * cache category, the area, the resolution and the backdrop switch.
1647
1649
  * @returns The component type, with the frozen `filter` definition attached.
1648
1650
  * @throws {Error} When the id is empty, the WGSL has no `mainFragment`, the GLSL no `void main(`,
1649
1651
  * a uniform is reserved, badly named or of no known form, the passes or the padding break
1650
1652
  * their rules, an input or the fallback breaks one of its rules, `passes` is given with inputs,
1651
- * `area` is not a function, or `resolution` is not a number from 0 to 4.
1653
+ * `area` is not a function, `resolution` is not a number from 0 to 4, `backdrop` is not a
1654
+ * boolean, or a backdrop has a padding or a cache that keeps it.
1652
1655
  * @example
1653
1656
  * ```ts
1654
1657
  * // features/board/effects.ts: a gold tint a motion hook tweens on a merge, on WebGPU and WebGL.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as PassKind, Ar as SaveUnreadableError, B as FrameReadResult, Bt as OverlayValue, Ct as SHADER_WHATS, D as MonitorConfig, Et as WarmDetail, F as types_d_exports$12, Ft as HudPart, G as MONITOR_SECTIONS, Gn as to, H as FrameRecord, Ht as Shape, It as HudPartValue, J as OverlayWhat, K as MonitorSections, Kn as type, L as MonitorCounts, Lt as NineSlice, M as PoolTrim, Pt as Display, Q as PROBLEM_RULES, St as ProblemRule, Tr as types_d_exports$10, Tt as ShaderWhat, U as FrameRing, Un as exit, V as FrameReadout, Vn as types_d_exports$6, Vr as types_d_exports$9, Vt as Parent, W as LongFrameEntry, Wn as slot, Wt as Sprite, X as PERF_GAP_BUCKETS, Xt as DEMAND_REASONS, Y as PERF_CAUSES, Yr as types_d_exports$15, Yt as sprite, Z as PERF_LOG_VERSION, _t as PerfStartupLine, at as PerfCounts, bn as DescriptionNode, bt as PoolTrimDetail, ct as PerfEventName, dt as PerfLogLine, et as PassRecord, ft as PerfLongFrameLine, gt as PerfSpikeLine, h as types_d_exports$1, ht as PerfSampleLine, it as PerfCollectorLine, lt as PerfGapLine, mt as PerfMeasured, nt as PerfChange, ot as PerfDisplay, pt as PerfMarkLine, q as OverlayEventDetail, qt as Transform, rt as PerfChangeEntry, st as PerfEventLine, tn as types_d_exports$17, tt as PerfCause, ut as PerfHeaderLine, vr as types_d_exports$3, vt as PerfTelemetryLine, w as types_d_exports$13, wt as ShaderEventDetail, xt as ProblemEventDetail, yt as PerfThermalLine, z as FrameColumns, zt as Overlay } from "./types-DnttyLeu.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-C2LZJIxH.mjs";
3
- import { N as types_d_exports$8, O as types_d_exports$14, W as types_d_exports$7, _ as BindOptions, d as LocalWrite, f as popup, k as defineComponent, l as Box, p as defineTokens, u as DebugTrigger, w as TextFormat, y as CountdownValue } from "./types-CWSMo70I.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-DytzVJFz.mjs";
5
- export { 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, 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 };
1
+ import { $ as PROBLEM_RULES, B as FrameColumns, Bt as Overlay, Ct as ProblemRule, Dt as WarmDetail, Er as types_d_exports$10, Et as ShaderWhat, Ft as Display, G as LongFrameEntry, Gn as slot, Gt as Sprite, H as FrameReadout, Hn as types_d_exports$6, Hr as types_d_exports$9, Ht as Parent, I as types_d_exports$12, It as HudPart, J as OverlayEventDetail, Jt as Transform, K as MONITOR_SECTIONS, Kn as to, Lt as HudPartValue, N as PoolTrim, O as MonitorConfig, Q as PERF_LOG_VERSION, R as MonitorCounts, Rt as NineSlice, St as ProblemEventDetail, T as AdaptiveScale, Tt as ShaderEventDetail, U as FrameRecord, Ut as Shape, V as FrameReadResult, Vt as OverlayValue, W as FrameRing, Wn as exit, X as PERF_CAUSES, Xr as types_d_exports$15, Xt as sprite, Y as OverlayWhat, Z as PERF_GAP_BUCKETS, Zt as DEMAND_REASONS, _t as PerfSpikeLine, at as PerfCollectorLine, bt as PerfThermalLine, ct as PerfEventLine, dt as PerfHeaderLine, et as PassKind, ft as PerfLogLine, gt as PerfSampleLine, h as types_d_exports$1, ht as PerfMeasured, it as PerfChangeEntry, jr as SaveUnreadableError, lt as PerfEventName, mt as PerfMarkLine, nn as types_d_exports$17, nt as PerfCause, ot as PerfCounts, pt as PerfLongFrameLine, q as MonitorSections, qn as type, rt as PerfChange, st as PerfDisplay, tt as PassRecord, ut as PerfGapLine, vt as PerfStartupLine, w as types_d_exports$13, wt as SHADER_WHATS, xn as DescriptionNode, xt as PoolTrimDetail, yr as types_d_exports$3, yt as PerfTelemetryLine } from "./types-C4D9UVgb.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-CPxx3NSG.mjs";
3
+ import { A as defineComponent, G as types_d_exports$7, P as types_d_exports$8, T as TextFormat, b as CountdownValue, d as LocalWrite, f as ScrollState, k as types_d_exports$14, l as Box, m as defineTokens, p as popup, u as DebugTrigger, v as BindOptions } from "./types-CYoGvBkh.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-B3dfnsUZ.mjs";
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 mark, $t as PROBLEM_RULES, A as types_exports$6, At as Alpha, B as Box, Bt as scenesPlugin, C as types_exports$13, Ct as Traceable, D as types_exports$9, Dt as messageDuration, E as types_exports$10, Et as messageArgument, F as types_exports$1, Ft as Noise, G as defineStyle, Gt as Frames, H as LocalWrite, Ht as animPlugin, I as types_exports, It as Outline, J as HAPTIC_KINDS, Jt as frameAt, K as textPlugin, Kt as rendererPlugin, L as uiPlugin, Lt as defineFilter, M as types_exports$4, Mt as ColorMatrix, N as types_exports$3, Nt as Displacement, O as types_exports$8, Ot as effectsPlugin, P as types_exports$2, Pt as Glow, Q as haptic, Qt as PERF_LOG_VERSION, R as resolve, Rt as debugPlugin, S as types_exports$14, St as Touchable, T as types_exports$11, Tt as i18nPlugin, U as popup, Ut as AnimPlayer, V as DebugTrigger, Vt as assetsPlugin, W as defineTokens, Wt as Animation, X as external, Xt as PERF_CAUSES, Y as defineAnimation, Yt as MONITOR_SECTIONS, Z as frames, Zt as PERF_GAP_BUCKETS, _ as defineBundles, _t as PointerOver, a as cubicBezier, an as exit, at as spawn, b as types_exports$16, bt as Swipeable, c as hint, cn as type, ct as tween, d as defineScene, dn as lifecyclePlugin, dt as inputPlugin, en as SHADER_WHATS, et as parallel, f as tr, fn as timePlugin, ft as Draggable, g as music, gt as Pointer, h as defineEmitter, ht as Hovered, i as screen, it as sfx, j as types_exports$5, jt as Blur, k as types_exports$7, kt as Emitter, l as schedule, ln as modelPlugin, lt as use, m as flattenFeatures, mt as Held, n as createPlugin, nn as worldPlugin, nt as sequence, o as defineEffect, on as slot, ot as spawned, p as defineFeature, pn as clockPlugin, pt as DropTarget, q as platformPlugin, qt as PASS_KINDS, r as defineGame, rn as flowPlugin, rt as set, s as guide, sn as to, st as stagger, t as createApp, tn as DEMAND_REASONS, tt as play, u as projection, un as SaveUnreadableError, ut as wait, v as load, vt as Pressable, w as types_exports$12, wt as Traced, x as types_exports$15, xt as Tappable, y as types_exports$17, yt as Pressed, z as defineMotion, zt as audioPlugin } from "./src-DWJabPi4.mjs";
1
+ import { $ as haptic, $t as PERF_LOG_VERSION, A as types_exports$6, At as Emitter, B as Box, Bt as audioPlugin, C as types_exports$13, Ct as Touchable, D as types_exports$9, Dt as messageArgument, E as types_exports$10, Et as i18nPlugin, F as types_exports$1, Ft as Glow, G as defineTokens, Gt as Animation, H as LocalWrite, Ht as assetsPlugin, I as types_exports, It as Noise, J as platformPlugin, Jt as PASS_KINDS, K as defineStyle, Kt as Frames, L as uiPlugin, Lt as Outline, M as types_exports$4, Mt as Blur, N as types_exports$3, Nt as ColorMatrix, O as types_exports$8, Ot as messageDuration, P as types_exports$2, Pt as Displacement, Q as frames, Qt as PERF_GAP_BUCKETS, R as resolve, Rt as defineFilter, S as types_exports$14, St as Tappable, T as types_exports$11, Tt as Traced, U as ScrollState, Ut as animPlugin, V as DebugTrigger, Vt as scenesPlugin, W as popup, Wt as AnimPlayer, X as defineAnimation, Xt as MONITOR_SECTIONS, Y as HAPTIC_KINDS, Yt as frameAt, Z as external, Zt as PERF_CAUSES, _ as defineBundles, _t as Pointer, a as cubicBezier, at as sfx, b as types_exports$16, bt as Pressed, c as hint, cn as to, ct as stagger, d as defineScene, dn as SaveUnreadableError, dt as wait, en as PROBLEM_RULES, et as mark, f as tr, fn as lifecyclePlugin, ft as inputPlugin, g as music, gt as Hovered, h as defineEmitter, ht as Held, i as screen, in as flowPlugin, it as set, j as types_exports$5, jt as Alpha, k as types_exports$7, kt as effectsPlugin, l as schedule, ln as type, lt as tween, m as flattenFeatures, mn as clockPlugin, mt as DropTarget, n as createPlugin, nn as DEMAND_REASONS, nt as play, o as defineEffect, on as exit, ot as spawn, p as defineFeature, pn as timePlugin, pt as Draggable, q as textPlugin, qt as rendererPlugin, r as defineGame, rn as worldPlugin, rt as sequence, s as guide, sn as slot, st as spawned, t as createApp, tn as SHADER_WHATS, tt as parallel, u as projection, un as modelPlugin, ut as use, v as load, vt as PointerOver, w as types_exports$12, wt as Traceable, x as types_exports$15, xt as Swipeable, y as types_exports$17, yt as Pressable, z as defineMotion, zt as debugPlugin } from "./src-DNVAJHwd.mjs";
2
2
  import { A as Order, C as Sprite, D as Exiting, E as sprite, F as system, L as tag, M as component, N as mut, O as Layer, P as resource, S as Shape, _ as HudPart, c as Countdown, f as defineTextStyles, g as Display, j as Tree, k as Now, l as Text, p as label, u as bind, v as NineSlice, w as Transform, x as Parent, y as Overlay } from "./visual-2m4wJL_z.mjs";
3
3
  import { r as defineComponent } from "./flatten-BkXuscAV.mjs";
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, 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 };
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 { $n as FlowGraph, $t as Explained, P as Under, R as RenderStats, Rn as Position, T as Api$2, Zt as Api$1, dn as FrameDiff, jr as Snapshot, m as Usage, on as ComponentSchema, t as Api$3, tr as JournalEntry, un as EntitySnapshot, yr as Api } from "./types-DnttyLeu.mjs";
2
- import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-C2LZJIxH.mjs";
3
- import { c as UiNode } from "./types-CWSMo70I.mjs";
4
- import { t as HeadlessApp } from "./headless-DDkRwLnJ.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-DFoxDq-g.mjs";
6
- import { n as defineSource } from "./define-CNctRrea.mjs";
1
+ import { E as Api$2, F as Under, Mr as Snapshot, Qt as Api$1, br as Api, dn as EntitySnapshot, en as Explained, er as FlowGraph, fn as FrameDiff, m as Usage, nr as JournalEntry, sn as ComponentSchema, t as Api$3, z as RenderStats, zn as Position } from "./types-C4D9UVgb.mjs";
2
+ import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-CPxx3NSG.mjs";
3
+ import { c as UiNode } from "./types-CYoGvBkh.mjs";
4
+ import { t as HeadlessApp } from "./headless-DobgwTKK.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-Mj75CDO6.mjs";
6
+ import { n as defineSource } from "./define-Bebctfvs.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-BGsDXKuO.mjs";
1
+ import { a as jsxs, i as jsxDEV, n as JSX, r as jsx, t as Fragment } from "./runtime-gnMApclv.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-BGsDXKuO.mjs";
1
+ import { a as jsxs, n as JSX, r as jsx, t as Fragment } from "./runtime-gnMApclv.mjs";
2
2
  export { Fragment, type JSX, jsx, jsxs };
@@ -953,7 +953,7 @@ const timeScaleCommand = defineCommand({
953
953
  * ```ts
954
954
  * (await run(app, commands.frameRate, { fps: 60 })).value.fps; // 60
955
955
  * // a pin of 120 on a 60 Hz phone runs at the panel's rate:
956
- * (await run(app, commands.frameRate, { fps: 120 })).value; // { fps: 60, mode: "forced", …, asked: 120, heldBy: "panel" }
956
+ * (await run(app, commands.frameRate, { fps: 120 })).value; // { fps: 60, mode: "forced", …, asked: 120, heldBy: "panel", scale: 1 }
957
957
  * (await run(app, commands.frameRate, {})).value.mode; // "auto" with adaptive, "fixed" without
958
958
  * ```
959
959
  */
@@ -974,10 +974,11 @@ const frameRateCommand = defineCommand({
974
974
  //#endregion
975
975
  //#region src/plugins/ui/control.ts
976
976
  /**
977
- * @file ui plugin — the two ui commands of the `/control` door: a tap on a keyed element or on a
978
- * view, and the text typed into a field. The tap goes through `app.input`, so the gate decides;
979
- * the text goes through `app.ui.fill`, which writes a component's local and answers nothing. The
980
- * session stays clean. Dev builds and `--debug` builds (not `--debug=read`): each body starts with the inline
977
+ * @file ui plugin — the three ui commands of the `/control` door: a tap on a keyed element or on a
978
+ * view, the text typed into a field, and a scroll put at an offset. The tap goes through
979
+ * `app.input`, so the gate decides; the text goes through `app.ui.fill`, which writes a
980
+ * component's local and answers nothing, and the offset through `app.ui.scroll`. The session
981
+ * stays clean. Dev builds and `--debug` builds (not `--debug=read`): each body starts with the inline
981
982
  * control guard of a route command, so a bundler `define` of `false` drops it, and logs the
982
983
  * `moku:dev` marker.
983
984
  */
@@ -1053,6 +1054,36 @@ const fillCommand = defineCommand({
1053
1054
  return app.ui.fill(key, value);
1054
1055
  }
1055
1056
  });
1057
+ /**
1058
+ * Scrolls a `scroll` element by its key to an offset from its start, the way `app.ui.scroll`
1059
+ * does: at once, kept inside its range, a fling or a glide stopped. Answers what `scroll`
1060
+ * answers: false for a key that is no live `scroll`. A visual test writes it as the step
1061
+ * `{ scroll: { key, to } }`.
1062
+ *
1063
+ * @example
1064
+ * ```ts
1065
+ * // The board rests: show the order strip on its events before the checkpoint.
1066
+ * (await run(app, commands.scroll, { key: "strip", to: 0 })).value; // true
1067
+ * (await run(app, commands.scroll, { key: "nothing", to: 0 })).value; // false
1068
+ * ```
1069
+ */
1070
+ const scrollCommand = defineCommand({
1071
+ id: "game.scroll",
1072
+ title: "Scroll",
1073
+ input: {
1074
+ key: "string",
1075
+ to: "number"
1076
+ },
1077
+ effect: "route",
1078
+ run: (app, { key, to }) => {
1079
+ if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
1080
+ app.log.debug("moku:dev", {
1081
+ command: "game.scroll",
1082
+ key
1083
+ });
1084
+ return app.ui.scroll(key, to);
1085
+ }
1086
+ });
1056
1087
  //#endregion
1057
1088
  //#region src/plugins/flow/control.ts
1058
1089
  const noPayload = null;
@@ -1329,7 +1360,8 @@ const saveImportCommand = defineCommand({
1329
1360
  /**
1330
1361
  * @file flow/doors — the base commands: every command of the engine, keyed by a short name. Each
1331
1362
  * descriptor lives with the plugin that owns its data; this module only gathers them. Imported
1332
- * by the door `src/control.ts` only, so no plugin reaches it and no import cycle forms.
1363
+ * by the door `src/control.ts` and by `src/visual/steps.ts`, where a command becomes a visual
1364
+ * step, never by a plugin, so no import cycle forms.
1333
1365
  */
1334
1366
  /**
1335
1367
  * Every command of the engine, keyed by its short name: what an editor lists as buttons and MCP
@@ -1360,6 +1392,7 @@ const commands = Object.freeze({
1360
1392
  debug: debugCommand,
1361
1393
  reducedMotion: reducedMotionCommand,
1362
1394
  fill: fillCommand,
1395
+ scroll: scrollCommand,
1363
1396
  timeScale: timeScaleCommand,
1364
1397
  frameRate: frameRateCommand,
1365
1398
  mute: muteCommand,
@@ -1,4 +1,4 @@
1
- import { a as JsxChild, h as UiIntrinsicElements, t as DescriptionNode } from "./types-CWSMo70I.mjs";
1
+ import { a as JsxChild, g as UiIntrinsicElements, t as DescriptionNode } from "./types-CYoGvBkh.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. */